?? nscdevice.h
字號:
/*******************************************************************************
* @doc
*
* @module NSCDevice.h |
*
* This module contains the definition of the <o UsdNSCDevice> COM object
*
* Copyright (c) National Semiconductor Corporation 1999-2000
* All rights reserved
*
******************************************************************************/
#ifndef _NSCDevice_H__
#define _NSCDevice_H__
const int NS_MAX_EVENTS = 3;
const int NS_MAX_OPEN_APPS = 5;
/*******************************************************************************
* @object UsdNSCDevice | The UsdNscDevice object is a COM object class which
* implements the standard STI interface IStiUsd and the custom interface
* <i INonDelegatingUnknown>
*
* @consumes IStiDeviceControl
******************************************************************************/
class UsdNSCDevice : public IStiUSD, public INonDelegatingUnknown
{
public:
/*** IUnknown-like methods ***/
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, LPVOID * ppvObj);
STDMETHODIMP_(ULONG) NonDelegatingAddRef();
STDMETHODIMP_(ULONG) NonDelegatingRelease();
/*** IUnknown methods ***/
STDMETHODIMP QueryInterface( REFIID riid, LPVOID * ppvObj);
STDMETHODIMP_(ULONG) AddRef( void);
STDMETHODIMP_(ULONG) Release( void);
/*** IStiUSD methods ***/
STDMETHOD(Initialize) (THIS_ PSTIDEVICECONTROL pHelDcb,DWORD dwStiVersion,HKEY hParametersKey) ;
STDMETHOD(GetCapabilities) (THIS_ PSTI_USD_CAPS pDevCaps) ;
STDMETHOD(GetStatus) (THIS_ PSTI_DEVICE_STATUS pDevStatus) ;
STDMETHOD(DeviceReset)(THIS ) ;
STDMETHOD(Diagnostic)(THIS_ LPDIAG pBuffer) ;
STDMETHOD(Escape)(THIS_ STI_RAW_CONTROL_CODE EscapeFunction,LPVOID lpInData,DWORD cbInDataSize,LPVOID pOutData,DWORD dwOutDataSize,LPDWORD pdwActualData) ;
STDMETHOD(GetLastError) (THIS_ LPDWORD pdwLastDeviceError) ;
STDMETHOD(LockDevice) (THIS ) ;
STDMETHOD(UnLockDevice) (THIS ) ;
STDMETHOD(RawReadData)(THIS_ LPVOID lpBuffer,LPDWORD lpdwNumberOfBytes,LPOVERLAPPED lpOverlapped) ;
STDMETHOD(RawWriteData)(THIS_ LPVOID lpBuffer,DWORD nNumberOfBytes,LPOVERLAPPED lpOverlapped) ;
STDMETHOD(RawReadCommand)(THIS_ LPVOID lpBuffer,LPDWORD lpdwNumberOfBytes,LPOVERLAPPED lpOverlapped) ;
STDMETHOD(RawWriteCommand)(THIS_ LPVOID lpBuffer,DWORD nNumberOfBytes,LPOVERLAPPED lpOverlapped) ;
STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hEvent) ;
STDMETHOD(GetNotificationData)(THIS_ LPSTINOTIFY lpNotify) ;
STDMETHOD(GetLastErrorInfo) (THIS_ STI_ERROR_INFO *pLastErrorInfo);
void LogError(char *string,DWORD ct,BYTE b0,BYTE b1,BYTE b2,BYTE b3,
BYTE b4,HRESULT hres);
/**** ctor & dtor ***/
UsdNSCDevice(LPUNKNOWN punkOuter);
~UsdNSCDevice();
/**** This method is executed in the listening thread ***/
void ListenForInterrupts();
private:
// IUnknown Support
ULONG m_cRef;
BOOL m_fValid;
LPUNKNOWN m_punkOuter;
CRIT_SECT m_cs;
PSTIDEVICECONTROL m_pDcb;
CHAR *m_pszDeviceNameA;
HANDLE m_DeviceDataHandle;
DWORD m_dwLastOperationError;
HANDLE m_hMutex;
HANDLE m_hPollingMutex[NS_MAX_OPEN_APPS];
HANDLE m_hKickStartMutex;
// These variables are part of the event notification
// scheme that uses the interrupt endpoint on the device
HANDLE m_hSignalEvent;
HANDLE m_hShutdownEvent;
HANDLE m_hThread;
GUID m_guidLastEvent;
BYTE m_bEventMask;
bool m_bEventsInitialized;
GUID m_bEventGuidArray[NS_MAX_EVENTS];
DWORD m_dwDebounceTime;
bool m_bPolling;
bool m_bRemoteWakeup;
bool m_bWHQLTest;
DWORD m_dwKickStartTime;
/*** Private Helpers ***/
HRESULT OpenDevice(DWORD dwAccess, DWORD dwShare, SECURITY_ATTRIBUTES& sa);
HRESULT CloseDevice();
HRESULT GetDeviceStatus(PSTI_DEVICE_STATUS);
DWORD WaitForDriverEvent(LPOVERLAPPED lpOverlapped);
DWORD PollForDriverEvent();
void GenerateScannerEvent();
GUID GetEventGUID(BYTE bStatusRegister);
HRESULT ReadStatusRegister(BYTE& bValue);
void LoadDeviceData(HKEY hParameters);
void LoadEventMask(HKEY hDeviceData);
void LoadDebounceTime(HKEY hDeviceData);
void LoadPollingFlag(HKEY hDeviceData);
void LoadRemoteWakeupFlag(HKEY hDeviceData);
void LoadKickStartTime(HKEY hDeviceData);
HRESULT ResetModeCheckAndClear();
HRESULT DoKickStart();
BOOL inline IsValid(VOID) {return m_fValid;}
HRESULT GetNscOverlappedResult( LPOVERLAPPED lpOverlapped,
DWORD dwTimeout,
LPDWORD lpBytesRead);
void WriteToLog(DWORD dwType, LPWSTR szString, ...);
protected:
HRESULT SetRemoteWakeup(bool bEnable);
HRESULT UsdNSCDevice::WHQLRawWriteReadTest(void);
};
#endif //_NSCDevice_H__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -