windows-nt/Source/XPSP1/NT/drivers/wdm/input/opos/oposctrl/main.cpp
2020-09-26 16:20:57 +08:00

221 lines
6.6 KiB
C++

/*
* MAIN.CPP
*
*
*
*
*
*
*/
#include <windows.h>
#include <hidclass.h>
#include <hidsdi.h>
#include <ole2.h>
#include <ole2ver.h>
#include "..\inc\opos.h"
#include "oposctrl.h"
struct controlType controlTypes[] =
{
{ CONTROL_BUMP_BAR, "BumpBar" },
{ CONTROL_CASH_CHANGER, "CashChanger" },
{ CONTROL_CASH_DRAWER, "CashDrawer" },
{ CONTROL_COIN_DISPENSER, "CoinDispenser" },
{ CONTROL_FISCAL_PRINTER, "FiscalPrinter" },
{ CONTROL_HARD_TOTALS, "HardTotals" },
{ CONTROL_KEYLOCK, "Keylock" },
{ CONTROL_LINE_DISPLAY, "LineDisplay" },
{ CONTROL_MICR, "MICR" },
{ CONTROL_MSR, "MSR" },
{ CONTROL_PIN_PAD, "PINPad" },
{ CONTROL_POS_KEYBOARD, "POSKeyboard" },
{ CONTROL_POS_PRINTER, "POSPrinter" },
{ CONTROL_REMOTE_ORDER_DISPLAY, "RemoteOrderDisplay" },
{ CONTROL_SCALE, "Scale" },
{ CONTROL_SCANNER, "Scanner" },
{ CONTROL_SIGNATURE_CAPTURE, "SignatureCapture" },
{ CONTROL_TONE_INDICATOR, "ToneIndicator" },
{ CONTROL_LAST, "" }
};
/*
************************************************************
* DllMain
************************************************************
*
*
*/
STDAPI_(BOOL) DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID lpReserved)
{
BOOLEAN result;
switch (dwReason){
case DLL_PROCESS_ATTACH:
Report("DllMain: DLL_PROCESS_ATTACH", dwReason); // BUGBUG REMOVE
result = TRUE;
break;
case DLL_PROCESS_DETACH:
Report("DllMain: DLL_PROCESS_DETACH", dwReason); // BUGBUG REMOVE
result = TRUE;
break;
case DLL_THREAD_ATTACH:
Report("DllMain: DLL_THREAD_ATTACH", dwReason); // BUGBUG REMOVE
result = TRUE;
break;
case DLL_THREAD_DETACH:
Report("DllMain: DLL_THREAD_DETACH", dwReason); // BUGBUG REMOVE
result = TRUE;
break;
default:
Report("DllMain", dwReason); // BUGBUG REMOVE
result = TRUE;
break;
}
return result;
}
void OpenServer()
{
HRESULT hres;
hres = OleInitialize(NULL);
if ((hres == S_OK) || (hres == S_FALSE)){
IOPOSService *iOposService = NULL;
Report("Ole is initialized, calling CoCreateInstance", (DWORD)hres);
/*
* Create an instance of the OPOS server object
* and get a pointer to it's server interface.
* CoCreateInstance is simply a wrapper for
* CoGetClassObject + CreateInstance on that object.
*/
hres = CoCreateInstance(
GUID_HID_OPOS_SERVER,
NULL,
CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER,
IID_HID_OPOS_SERVER,
(PVOID *)&iOposService);
if (hres == S_OK){
Report("CoCreateInstance got server's interface", (DWORD)iOposService);
// xxx
}
else {
ReportHresultErr("CoCreateInstance failed", (DWORD)hres);
}
}
else {
Report("OleInitialize failed", (DWORD)hres);
}
}
// BUGBUG - this runs contrary to the spec (supposed to be a method)
/*
*
*
*/
IOPOSControl *OpenControl(PCHAR DeviceName)
{
IOPOSControl *iOposControl;
int i;
for (i = 0; controlTypes[i].type != CONTROL_LAST; i++){
if (!lstrcmpi((LPSTR)DeviceName, controlTypes[i].deviceName)){
break;
}
}
switch (controlTypes[i].type){
case CONTROL_BUMP_BAR:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSBumpBar;
break;
case CONTROL_CASH_CHANGER:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSCashChanger;
break;
case CONTROL_CASH_DRAWER:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSCashDrawer;
break;
case CONTROL_COIN_DISPENSER:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSCoinDispenser;
break;
case CONTROL_FISCAL_PRINTER:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSFiscalPrinter;
break;
case CONTROL_HARD_TOTALS:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSHardTotals;
break;
case CONTROL_KEYLOCK:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSKeyLock;
break;
case CONTROL_LINE_DISPLAY:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSLineDisplay;
break;
case CONTROL_MICR:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSMICR;
break;
case CONTROL_MSR:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSMSR;
break;
case CONTROL_PIN_PAD:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSPinPad;
break;
case CONTROL_POS_KEYBOARD:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSKeyboard;
break;
case CONTROL_POS_PRINTER:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSPrinter;
break;
case CONTROL_REMOTE_ORDER_DISPLAY:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSRemoteOrderDisplay;
break;
case CONTROL_SCALE:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSScale;
break;
case CONTROL_SCANNER:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSScanner;
break;
case CONTROL_SIGNATURE_CAPTURE:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSSignatureCapture;
break;
case CONTROL_TONE_INDICATOR:
iOposControl = (IOPOSControl *)(COPOSControl *)new COPOSToneIndicator;
break;
case CONTROL_LAST:
default:
iOposControl = NULL;
break;
}
if (iOposControl){
iOposControl->AddRef();
}
else {
Report("Open failed", controlTypes[i].type);
}
return iOposControl;
}