123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977 |
- #include "GpioFSM.h"
- #include "publicFunExport.h"
- #include "EventCode.h"
- #include <bitset>
- const int MAX_GPIO_INIT_TRIES = 3;
- const int INPUT_PORT_2 = 2;
- const int MAX_MOVE_HOLD_TIMES = 5000;
- const int ON_EVENT_DETECT_TIMOUE_MILLSECS = 500;
- const int REPEAT_FIRE_TIMEOUT_VALUE = 10000; //10s
- const int REPEAT_FIRE_TIMEOUT_TIMES = (REPEAT_FIRE_TIMEOUT_VALUE / ON_EVENT_DETECT_TIMOUE_MILLSECS);
- const int TRY_FILED_TIMES_VALUE = 10;
- #define SETBIT(x,y) x|=(1<<(y))
- #define CLEARBIT(x,y) x&=((1<<(y))^0xffffff)
- using namespace SP::Module::Comm;
- static const char* GetDriverPortStringZhCN(int pin)
- {
- switch (pin) {
- case 1: return "【驱动】读卡发卡器提示灯";
- case 2: return "【驱动】前端USB通断控制";
- case 3: return "【驱动】身份证阅读器提示灯";
- case 4: return "【驱动】密码键盘提示灯";
- case 5: return "【驱动】脸部照明灯";
- case 6: return "【驱动】故障灯";
- case 7: return "【驱动】读卡发卡器维护提示灯";
- case 8: return "【驱动】前端USB口提示灯";
- case 9: return "【驱动】非接IC读卡器提示灯";
- case 10: return "";
- case 11: return "【驱动】指纹仪提示灯";
- case 12: return "【驱动】凭条打印提示灯";
- case 13: return "【驱动】高拍仪提示灯";
- case 14: return "";
- case 15: return "";
- case 16: return "";
- case 17: return "【接收】震动探测器";
- case 18: return "【接收】机具门感应开关";
- case 19: return "【接收】话机提机感应开关";
- case 20: return "【接收】人体探测感应器";
- case 21: return "【接收】发卡器卡嘴覆盖探测器";
- //case 22: return "";
- //case 23: return "";
- //case 24: return "";
- //case 25: return "";
- case 26: return "【驱动】高拍仪提示灯";
- //case 27: return "";
- //case 28: return "";
- //case 29: return "";
- //case 30: return "";
- //case 31: return "";
- //case 32: return "";
- //case 33: return "";
- //case 34: return "";
- //case 35: return "";
- //case 36: return "";
- //case 37: return "";
- //case 38: return "";
- //case 39: return "";
- //case 40: return "";
- //case 41: return "";
- //case 42: return "";
- default:
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Unkown pin sequence: %d", pin);
- return "";
- break;
- }
- }
- static const char* pinStatusName[8][2] =
- {
- {"无震动", "**有震动**"},
- {"关门", "**开门**"},
- {"挂机", "**摘机**"},
- {"无移动", "**移动**"},
- {"卡嘴正常", "**卡嘴不正常**"},
- {"Pin 22 Normal", "**Pin 22 High**"},
- {"Pin 23 Normal", "**Pin 23 High**"},
- {"Pin 24 Normal", "**Pin 24 High**"}
- };
- static const char* GetDriverPortString(int pin)
- {
- switch (pin) {
- case 1: return "[Driver] CarIssuer Tip Light";
- case 2: return "[Driver] USB Switch";
- case 3: return "[Driver] IDCer Tip Light";
- case 4: return "[Driver] PinPad Tip Light";
- case 5: return "[Driver] Face Light";
- case 6: return "[Driver] Maintain Light";
- case 7: return "[Driver] CardIssuerMouse Maintain Light";
- case 8: return "[Driver] USB Tip Light";
- case 9: return "[Driver] RF Tip Light";
- case 10: return "";
- case 11: return "[Driver] FingerPrint Tip Light";
- case 12: return "[Driver] Printer Tip Light";
- case 13: return "[Driver] HSPSCanner Read Light";
- case 14: return "";
- case 15: return "";
- case 16: return "";
- case 17: return "[Receiver] Shake Detecter";
- case 18: return "[Receiver] Door Detecter";
- case 19: return "[Receiver] Phone Detecter";
- case 20: return "[Receiver] Body Detecter";
- case 21: return "[Receiver] CardIssuerMouse Detecter";
- //case 22: return "";
- //case 23: return "";
- //case 24: return "";
- //case 25: return "";
- case 26: return "[Driver] HSPSCanner Tip Light";
- //case 27: return "";
- //case 28: return "";
- //case 29: return "";
- //case 30: return "";
- //case 31: return "";
- //case 32: return "";
- //case 33: return "";
- //case 34: return "";
- //case 35: return "";
- //case 36: return "";
- //case 37: return "";
- //case 38: return "";
- //case 39: return "";
- //case 40: return "";
- //case 41: return "";
- //case 42: return "";
- default:
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Unkown pin sequence: %d", pin);
- return "";
- break;
- }
- }
- #define LIGHT_STRING_CONVERT(str) case str : return #str; break;
- static const char* GetLightSeqString(int seq)
- {
- switch (seq) {
- LIGHT_STRING_CONVERT(UNKNOWN_DEVICE)
- LIGHT_STRING_CONVERT(CARDREADER)
- LIGHT_STRING_CONVERT(CARDREADER_RED)
- LIGHT_STRING_CONVERT(IDCERTIFICATE)
- LIGHT_STRING_CONVERT(PINPAD)
- LIGHT_STRING_CONVERT(SHAKEDETECT)
- LIGHT_STRING_CONVERT(SWITCHINDUCTOR)
- LIGHT_STRING_CONVERT(PHONEPICKUP)
- LIGHT_STRING_CONVERT(MOVEDETECT)
- LIGHT_STRING_CONVERT(CARDGATEDETECT)
- LIGHT_STRING_CONVERT(HEADLIGHT)
- LIGHT_STRING_CONVERT(HEADLIGHT_RED)
- LIGHT_STRING_CONVERT(CONTACTLESSCARD)
- LIGHT_STRING_CONVERT(HEADLIGHT_ASSIST)
- LIGHT_STRING_CONVERT(HSPSCANNER)
- LIGHT_STRING_CONVERT(FINGERPRINT)
- default:
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Unkonwn LightSeq: %d", seq);
- return "UnConver One";
- break;
- }
- }
- #undef LIGHT_STRING_CONVERT
- /** Just for Debug [Gifur@2024911]*/
- void LogPinStatus(ULONG val)
- {
- char byteString[9] = { 0 };
- _itoa((int)val, byteString, 2);
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ReadPort returned btInput[%s]", byteString);
- std::bitset<8> pinSet((int)val);
- if (pinSet[0])
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[0][1]);
- }
- else
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[0][0]);
- }
- if (pinSet[1])
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[1][1]);
- }
- else
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[1][0]);
- }
- if (pinSet[2])
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[2][1]);
- }
- else
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[2][0]);
- }
- if (pinSet[3])
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[3][1]);
- }
- else
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[3][0]);
- }
- if (pinSet[4])
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[4][1]);
- }
- else
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[4][0]);
- }
- if (pinSet[5])
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[5][1]);
- }
- else
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[5][0]);
- }
- if (pinSet[6])
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[6][1]);
- }
- else
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[6][0]);
- }
- if (pinSet[7])
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[7][1]);
- }
- else
- {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(pinStatusName[7][0]);
- }
- return;
- }
- CSimpleStringA CombineJsonContext(const char* szMessage)
- {
- CSimpleStringA result(true);
- if (szMessage == NULL || strlen(szMessage) == 0) {
- return result;
- }
- result = CSimpleStringA::Format("{\"addition\": \"%s\"}", szMessage);
- return result;
- }
- CGPIOFSM::CGPIOFSM(void) :m_ePickUpFlag(UnknownStatus),m_bVibrationFlag(false), m_bOpenFlag(false), m_bMoveFlag(false), m_bCardGateFlag(false)
- , m_moveHoldTimes(0)
- , m_moveDisappearTimes(0)
- , m_bNewVersion(FALSE), m_bFuncVer2(FALSE), m_btLastRevcInput(-1), m_RecvErrTims(0)
- {
- memset(m_btOutputStatus, 0, MAX_PORT_NUM * sizeof(BYTE));
- memset(m_bLightStatus, 0, LIGHT_SEQ_MAX * sizeof(BOOL));
- }
- ErrorCodeEnum CGPIOFSM::OnInit()
- {
- ErrorCodeEnum erroCode = Error_Succeed, eErrDev = Error_Succeed;
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Source Code complied at: %s %s", __DATE__, __TIME__);
- auto pEntity = GET_DEV_ENTITY_BASE_POINTER();
- pEntity->InitializeVendorLogSwitch();
- SetDevInitingFlag(true);
- SetDevInitFlag(false);
- CSimpleStringA strNoUse(true);
- erroCode = pEntity->ExtractVendorLibFullPath(strNoUse);
- if (erroCode != Error_Succeed) {
- //TODO: RTA [Gifur@202577]
- DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("load vendor dll or so(%s) failed, ec=%s", strNoUse.GetData(), SpStrError(erroCode));
- SetDevInitingFlag(false);
- return Error_DevLoadFileFailed;
- }
- FulfillAdapterInfoFrom(pEntity->vendorLibInfo);
- erroCode = LoadUpAdapterLibrary();
- if (erroCode != Error_Succeed) {
- SetDevInitingFlag(false);
- return erroCode;
- }
- GpioInitParam initParam;
- initParam.dwPort = m_adapterInfo.GetPortInt();
- initParam.dwBaudRate = m_adapterInfo.GetBaudrateInt();
- initParam.dir[0] = true;
- initParam.dir[1] = true;
- initParam.dir[2] = false;
- initParam.dir[3] = false;
- initParam.dwPortNum = 3;
- //Gpio.keba.1.1 , Gpio.Hyosung.1.1, Gpio.kxd.1.1 需要配置引脚数(PortNum)为 3
- if (m_adapterInfo.GetPortNumInt() == 4) {
- m_bNewVersion = TRUE;
- initParam.dwPortNum = 4;
- initParam.dir[3] = true;
- }
- do {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to open device...port: % d, baudrate : % d, portnum : % d",
- m_adapterInfo.GetPortInt(), m_adapterInfo.GetBaudrateInt(), m_adapterInfo.GetPortNumInt());
- ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
- erroCode = m_hDevHelper->DevOpen(initParam);
- ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
- if (erroCode == Error_Succeed) {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevOpen").setCostTime(ullEnd - ullStart)();
- DevCategoryInfo devCatInfo;
- ZeroMemory(devCatInfo.szModel, sizeof(devCatInfo.szModel));
- ZeroMemory(devCatInfo.szType, sizeof(devCatInfo.szType));
- ZeroMemory(devCatInfo.szVendor, sizeof(devCatInfo.szVendor));
- ullStart = SP::Module::Comm::RVCGetTickCount();
- ErrorCodeEnum err = m_hDevHelper->GetDevCategory(devCatInfo);
- ullEnd = SP::Module::Comm::RVCGetTickCount();
- if (err == Error_Succeed) {
- m_adapterInfo.FulfillCategoryInfo(devCatInfo);
- #if defined(RVC_OS_LINUX)
- CSimpleStringA strType(devCatInfo.szType);
- if (strType.IndexOf("FUNCVER=2.0") != -1) {
- m_bFuncVer2 = TRUE;
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Detect new interface version: %s", strType.GetData());
- }
- #endif //RVC_OS_LINUX
- }
- else {
- SetErrorAndLog(err, GPIO_UserErrorCode_GetDevCategory_Failed, "DevAdapter::GetDevCategory", "FulfillAdapterDevCategory", false, ullEnd - ullStart);
- }
- SetDevInitFlag(true);
- }
- else {
- SetErrorAndLog(erroCode, GPIO_UserErrorCode_DevOpen_Failed, "DevAdapter::DevOpen", __FUNCTION__, false, ullEnd - ullStart,"",
- CSimpleStringA::Format("{\"port\":%d, \"baudrate\":%d, \"portnum\":%d}", m_adapterInfo.GetPortInt(), m_adapterInfo.GetBaudrateInt(), m_adapterInfo.GetPortNumInt()));
- }
- } while (false);
- if (GetDevInitFlag()) {
- if (!m_bFuncVer2) {
- ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
- eErrDev = m_hDevHelper->WritePort(0, 0x00);
- ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
- if (eErrDev != Error_Succeed)
- SetErrorAndLog(eErrDev, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("ResetPort0 after DevOpen"));
- ullStart = SP::Module::Comm::RVCGetTickCount();
- eErrDev = m_hDevHelper->WritePort(1, 0x00);
- ullEnd = SP::Module::Comm::RVCGetTickCount();
- if (eErrDev != Error_Succeed)
- SetErrorAndLog(eErrDev, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("ResetPort1 after DevOpen"));
- if (m_bNewVersion) {
- ullStart = SP::Module::Comm::RVCGetTickCount();
- eErrDev = m_hDevHelper->WritePort(3, 0x00);
- ullEnd = SP::Module::Comm::RVCGetTickCount();
- if (eErrDev != Error_Succeed)
- SetErrorAndLog(eErrDev, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("ResetPort3 after DevOpen"));
- }
- }
- else {
- #if defined(RVC_OS_LINUX)
- ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
- eErrDev = m_hDevHelper->SetStatus(GPIO_DEV_SN_LIGHT_SENSOR_ALL, GPIO_DEV_LIGHT_MODE_RESET);
- ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
- if (eErrDev != Error_Succeed)
- SetErrorAndLog(eErrDev, GPIO_UserErrorCode_SetStatus_Failed, "DevAdapter::SetStatus", __FUNCTION__, false, ullEnd - ullStart, "", CombineJsonContext("ResetStatus after DevOpen"));
- #endif //RVC_OS_LINUX
- }
- SetDevState(DEVICE_STATUS_NORMAL);
- }
- SetDevInitingFlag(false);
- return erroCode;
- }
- void CGPIOFSM::AfterInit()
- {
- StartDetectWorkThread();
- }
- void CGPIOFSM::SelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext)
- {
- OnHardwareShakeHand(pTransactionContext);
- }
- void CGPIOFSM::GetDevInfo(SpReqAnsContext<GpioService_GetDevInfo_Req, GpioService_GetDevInfo_Ans>::Pointer ctx)
- {
- if (m_bOpening) {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(GpioService_LogCode_GetDevInfo).setAPI(__FUNCTION__)("device is opening");
- ctx->Answer(Error_NotInit);
- return;
- }
- if (!m_bOpened) {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(GpioService_LogCode_GetDevInfo).setResultCode("RTA2901").setAPI(__FUNCTION__)("GPIO未打开");
- ctx->Answer(Error_DevNotAvailable, GPIO_UserErrorCode_DevOpen_Failed);
- }
- else {
- DevCategoryInfo info = { 0 };
- const ULONGLONG ullStart = SP::Module::Comm::RVCGetTickCount();
- ErrorCodeEnum erroCode = m_hDevHelper->GetDevCategory(info);
- const ULONGLONG ullEnd = SP::Module::Comm::RVCGetTickCount();
- ctx->Ans.state = (int)erroCode;
- if (erroCode == Error_Succeed) {
- ctx->Ans.model = info.szModel;
- ctx->Ans.type = info.szType;
- ctx->Ans.version = CSimpleStringA::Format("%d.%d.%d.%d",
- info.version.wMajor, info.version.wMinor, info.version.wRevision, info.version.wBuild);
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_GetDevInfo)
- .setAPI("DevAdapter::GetDevCategory").setCostTime(ullEnd - ullStart)("model: %s, state:%d, type:%s, version:%s"
- , ctx->Ans.model.GetData(), ctx->Ans.state, ctx->Ans.type.GetData(), ctx->Ans.version.GetData());
- }
- else {
- SetErrorAndLog(erroCode, GPIO_UserErrorCode_GetDevCategory_Failed, "DevAdapter::GetDevCategory", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, GpioService_LogCode_GetDevInfo);
- }
- ctx->Answer(Error_Succeed);
- }
- }
- void CGPIOFSM::Exit(SpOnewayCallContext<GpioService_Exit_Info>::Pointer ctx)
- {
- }
- bool CGPIOFSM::DetectBit(ULONG data, int pos)
- {
- if (!m_bFuncVer2) {
- ULONG tmp = 0;
- SETBIT(tmp, pos);
- return (data & tmp);
- }
- #if defined(RVC_OS_LINUX)
- else {
- DWORD dwReq = (GPIO_DEV_SN_SENSOR_SHAKE << pos);
- return (data & dwReq);
- }
- #endif //RVC_OS_LINUX
- return 0;
- }
- void CGPIOFSM::OnLogEvent(DWORD dwUserCode)
- {
- GpioSet_Info Req;
- if (!m_bOpened) {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("usercode [%x], but device is not open", dwUserCode);
- return;
- }
- else {
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("receive usercode [%x]", dwUserCode);
- }
- Req.close = 0;
- Req.devseq = -1;
- switch (dwUserCode) {
- case LOG_EVT_CARDISSUER_GREEN_ON:
- case LOG_EVT_CARDISSUER_STORE_GREEN_ON:
- Req.devseq = CARDREADER;
- Req.mode = 1; //flick
- break;
- case LOG_EVT_CARDISSUER_GREEN_OFF:
- case LOG_EVT_CARDISSUER_STORE_GREEN_OFF:
- Req.devseq = CARDREADER;
- Req.mode = 1;
- Req.close = 1;
- break;
- case LOG_EVT_CARDISSUER_RED_ON:
- Req.devseq = CARDREADER_RED;
- Req.mode = 0; //substain
- break;
- case LOG_EVT_CARDISSUER_RED_OFF:
- Req.devseq = CARDREADER_RED;
- Req.mode = 0; //substain
- Req.close = 1;
- break;
- case LOG_EVT_IDCERTIFICATE_GREEN_ON:
- Req.devseq = IDCERTIFICATE;
- Req.mode = 1; //flick
- break;
- case LOG_EVT_IDCERTIFICATE_GREEN_OFF:
- Req.devseq = IDCERTIFICATE;
- Req.mode = 1;
- Req.close = 1;
- break;
- case LOG_EVT_FINGERPRINT_GREEN_ON:
- Req.devseq = FINGERPRINT;
- Req.mode = 1; //flick
- break;
- case LOG_EVT_FINGERPRINT_GREEN_OFF:
- Req.devseq = FINGERPRINT;
- Req.mode = 1;
- Req.close = 1;
- break;
- case LOG_EVT_PINPAD_GREEN_ON:
- Req.devseq = PINPAD;
- Req.mode = 1; //flick
- break;
- case LOG_EVT_PINPAD_GREEN_OFF:
- Req.devseq = PINPAD;
- Req.mode = 1;
- Req.close = 1;
- break;
- case LOG_EVT_CONTACTLESS_CARD_GREEN_ON:
- Req.devseq = CONTACTLESSCARD;
- Req.mode = 1; //flick
- break;
- case LOG_EVT_CONTACTLESS_CARD_GREEN_OFF:
- Req.devseq = CONTACTLESSCARD;
- Req.mode = 1;
- Req.close = 1;
- break;
- case LOG_EVT_HSPS_LIGHT_ON:
- Req.devseq = HSPSCANNER;
- Req.mode = 0; //substain
- break;
- case LOG_EVT_HSPS_LIGHT_OFF:
- Req.devseq = HSPSCANNER;
- Req.mode = 0;
- Req.close = 1;
- break;
- case LOG_EVT_HEADLIGHT_GREEN_ON:
- Req.devseq = HEADLIGHT;
- Req.mode = 0; //substain
- break;
- case LOG_EVT_HEADLIGHT_GREEN_OFF:
- Req.devseq = HEADLIGHT;
- Req.mode = 0;
- Req.close = 1;
- break;
- case LOG_EVT_HEADLIGHT_RED_ON: //TODO: 有请求调用吗? [Gifur@202578]
- Req.devseq = HEADLIGHT_RED;
- Req.mode = 0; //substain
- break;
- case LOG_EVT_HEADLIGHT_RED_OFF:
- Req.devseq = HEADLIGHT_RED;
- Req.mode = 0;
- Req.close = 1;
- break;
- case LOG_EVT_IEBROWSER_LIGHT_ASSISTANT_ON:
- Req.devseq = HEADLIGHT_ASSIST;
- Req.mode = 1; //flick
- break;
- case LOG_EVT_IEBROWSER_LIGHT_ASSISTANT_OFF:
- Req.devseq = HEADLIGHT_ASSIST;
- Req.mode = 1;
- Req.close = 1;
- break;
- default:
- return;
- }
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("{\"devseq\":\"%s\",\"mode\":%d,\"close\": %d}", GetLightSeqString(Req.devseq), Req.mode, Req.close);
- if (Req.devseq >= 0) {
- if (!Req.close) {
- if (m_bLightStatus[Req.devseq]) {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("the light(seq=%s) has been on", GetLightSeqString(Req.devseq));
- //return;
- }
- else {
- m_bLightStatus[Req.devseq] = true;
- }
- }
- else {
- if (m_bLightStatus[Req.devseq]) {
- m_bLightStatus[Req.devseq] = false;
- }
- else {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("the light(seq=%s) has been off", GetLightSeqString(Req.devseq));
- //return;
- }
- }
- }
- m_bFuncVer2 ? SetEx(Req) : Set(Req);
- }
- //老接口,用于控制灯
- bool CGPIOFSM::SetOutDriving(GpioSet_Info req, OutDrivingInfo od)
- {
- int ret(-1);
- if (req.close == 1) {
- if (!!req.mode) {
- GetEntityBase()->GetFunction()->KillTimer(req.devseq);
- }
- if (od.Port == PIN_HSPSCANNER_PREVIEW_LIGHT) {
- WritePin(PIN_HSPSCANNER_LIGHT, false);
- }
- ret = WritePin(od.Port, false);
- return (ret == 0);
- }
- else {
- if (!!req.mode) {
- SetContextInfo* pSci = new SetContextInfo();
- pSci->pinSeq = od.Port;
- pSci->timerID = req.devseq;
- pSci->setTime = od.SetTime;
- pSci->resetTime = od.ResetTime;
- pSci->timeout = od.TimeOut;
- ret = WritePin(od.Port, true);
- if (ret == 0) {
- ITimerListener* pListener = new TimerOutHelper<CGPIOFSM>(this, &CGPIOFSM::OnPositiveFlickerSetTimerout, pSci, true);
- GetEntityBase()->GetFunction()->SetTimer(pSci->timerID, pListener, pSci->setTime);
- }
- }
- else {
- if (od.Port == PIN_HSPSCANNER_PREVIEW_LIGHT) {
- WritePin(PIN_HSPSCANNER_LIGHT, true);
- }
- ret = WritePin(od.Port, true);
- }
- }
- return (ret == 0);
- }
- int CGPIOFSM::WritePin(DWORD dwPinSeq, bool bHighLevel)
- {
- ErrorCodeEnum result(Error_Succeed);
- int ret(-1);
- int idx = -1;
- if (dwPinSeq > 16) {/** 目前只有一个高拍仪的提示灯会超过该值 [Gifur@202495]*/
- if (!m_bNewVersion || dwPinSeq < 24) {
- return ret;
- }
- idx = 3;
- }
- else if (dwPinSeq < 8) {
- idx = 0;
- }
- else {
- idx = 1;
- }
- if (bHighLevel)
- SETBIT(m_btOutputStatus[idx], dwPinSeq - 8 * idx);
- else
- CLEARBIT(m_btOutputStatus[idx], dwPinSeq - 8 * idx);
- const auto iBegin = SP::Module::Comm::RVCGetTickCount();
- result = m_hDevHelper->WritePort(idx, m_btOutputStatus[idx]);
- const auto iEnd = SP::Module::Comm::RVCGetTickCount();
- if (result != Error_Succeed) {
- SetErrorAndLog(result, GPIO_UserErrorCode_WritePort_Failed, "DevAdapter::WritePort", __FUNCTION__, false, iEnd - iBegin, "", CombineJsonContext(CSimpleStringA::Format("index: %d, value: %d", idx, m_btOutputStatus[idx])));
- ret = 1;
- }
- else {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::WritePort").setCostTime(iEnd - iBegin)("%s %s", GetDriverPortString(dwPinSeq + 1), bHighLevel ? "[LightOn]" : "[LightOff]");
- ret = 0;
- }
- return ret;
- }
- void CGPIOFSM::SetEx(GpioSet_Info req)
- {
- #if defined(RVC_OS_LINUX)
- int devicePort;
- switch (req.devseq) {
- case CARDREADER:
- {
- devicePort = GPIO_DEV_SN_LIGHT_CARDISSUER;
- break;
- }
- case CARDREADER_RED:
- {
- devicePort = GPIO_DEV_SN_LIGHT_CARDISSUER_MAINTAIN;
- break;
- }
- case IDCERTIFICATE:
- {
- devicePort = GPIO_DEV_SN_LIGHT_IDCERTIFICATE;
- break;
- }
- case FINGERPRINT:
- {
- devicePort = GPIO_DEV_SN_LIGHT_FINGERPRINT;
- break;
- }
- case PINPAD:
- {
- devicePort = GPIO_DEV_SN_LIGHT_PINPAD;
- break;
- }
- case HEADLIGHT:
- {
- devicePort = GPIO_DEV_SN_LIGHT_FACE;
- break;
- }
- case HEADLIGHT_RED:
- {
- devicePort = 6/*GPIO_DEV_SN_LIGHT_MACHINE_FAULT*/;
- break;
- }
- case CONTACTLESSCARD:
- {
- devicePort = GPIO_DEV_SN_LIGHT_CONTACTLESSCARD;
- break;
- }
- case HEADLIGHT_ASSIST:
- {
- devicePort = GPIO_DEV_SN_LIGHT_FACE;
- break;
- }
- break;
- default:
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setAPI(__FUNCTION__)("unsupport device seq: %d", req.devseq);
- return;
- }
- if (m_hDevHelper != nullptr) {
- DWORD dwReq = devicePort;
- DWORD dwMode = 0;
- if (!req.close) {
- dwMode |= GPIO_DEV_LIGHT_MODE_COLOR_NORMAL;
- if (!!req.mode) {
- dwMode |= GPIO_DEV_LIGHT_MODE_LIGHT_FLICKER;
- }
- else {
- dwMode |= GPIO_DEV_LIGHT_MODE_LIGHT_SUSTAIN;
- }
- }
- const auto iBegin = SP::Module::Comm::RVCGetTickCount();
- const ErrorCodeEnum ec = m_hDevHelper->SetStatus(dwReq, dwMode);
- const auto iEnd = SP::Module::Comm::RVCGetTickCount();
- if (ec != Error_Succeed) {
- SetErrorAndLog(ec, GPIO_UserErrorCode_SetStatus_Failed, "DevAdapter::SetStatus", __FUNCTION__, false, iEnd - iBegin, "", CombineJsonContext(CSimpleStringA::Format("dwReq: 0x%X, dwMode: 0x%X", dwReq, dwMode)));
- }
- else {
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::SetStatus").setCostTime(iEnd - iBegin)("%s %s", GetDriverPortString(devicePort), req.close ? "[LightOff]" : (req.mode ? "[LightFlick]" : "[LightOn]"));
- }
- }
- else {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("dev helper object is invalid pointer!");
- }
- #endif //RVC_OS_LINUX
- }
- void CGPIOFSM::Set(GpioSet_Info req)
- {
- int devicePort;
- OutDrivingInfo odi;
- switch (req.devseq) {
- case CARDREADER:
- case PINPAD:
- case CONTACTLESSCARD:
- {
- devicePort = req.devseq == CARDREADER ? PIN_CARD_READER_LIGHT : (req.devseq == PINPAD ? PIN_PINPAD_LIGHT : PIN_CONTACELESS_LIGHT);
- odi.Port = devicePort;
- odi.SetTime = 200;
- odi.ResetTime = 200;
- odi.TimeOut = 5000;
- break;
- }
- case CARDREADER_RED:
- case HEADLIGHT_RED:
- {
- devicePort = req.devseq == CARDREADER_RED ? PIN_CARD_ISSUE_MAINTAIN_LIGHT : PIN_TROUBLE_LIGHT;
- odi.Port = devicePort;
- odi.SetTime = 200;
- odi.ResetTime = 200;
- odi.TimeOut = 3000;
- break;
- }
- case IDCERTIFICATE:
- case FINGERPRINT:
- {
- devicePort = req.devseq == IDCERTIFICATE ? PIN_IDCERTIFICATE_LIGHT : PIN_FINGERPRINT_LIGHT;
- odi.Port = devicePort;
- odi.SetTime = 150;
- odi.ResetTime = 150;
- odi.TimeOut = 5000;
- break;
- }
- case HEADLIGHT:
- case HSPSCANNER:
- {
- devicePort = req.devseq == HEADLIGHT ? PIN_HEAD_LIGHT : PIN_HSPSCANNER_PREVIEW_LIGHT;
- odi.Port = devicePort;
- odi.SetTime = 1000;
- odi.ResetTime = 1000;
- odi.TimeOut = 5000;
- break;
- }
- case HEADLIGHT_ASSIST:
- {
- odi.Port = PIN_HEAD_LIGHT;
- odi.SetTime = 1000;
- odi.ResetTime = 500;
- odi.TimeOut = 5000;
- break;
- }
- default:
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("unsupport device seq: %d", req.devseq);
- return;
- }
- SetOutDriving(req, odi);
- }
- void CGPIOFSM::StartDetectWorkThread()
- {
- ReceivingInfo ri;
- ri.ContinuousTriggerTime = 2;
- GetContextInfo* pGci = new GetContextInfo();
- pGci->timerID = PHONEPICKUP; /*8 随便拿了一个不可能用在其他地方的ID*/
- m_PickUpTimeStamp = m_PutDownTimeStamp = SP::Module::Comm::RVCGetTickCount();
- m_DoorOpenTimeStamp = m_DoorCloseTimeStamp = SP::Module::Comm::RVCGetTickCount();
- ITimerListener* pListener = new TimerOutHelper<CGPIOFSM>(this, &CGPIOFSM::OnEventDetect, pGci);
- GetEntityBase()->GetFunction()->SetTimer(pGci->timerID, pListener, 100);
- }
- void CGPIOFSM::OnPositiveFlickerSetTimerout(void* pData)
- {
- SetContextInfo* pSCI = (SetContextInfo*)pData;
- GetEntityBase()->GetFunction()->KillTimer(pSCI->timerID);
- const int ret = WritePin(pSCI->pinSeq, false); //实际操作
- if (ret == 0) {
- ITimerListener* pListener = new TimerOutHelper<CGPIOFSM>(this, &CGPIOFSM::OnPositiveFlickerResetTimerout, pSCI, true);
- GetEntityBase()->GetFunction()->SetTimer(pSCI->timerID, pListener, pSCI->resetTime);
- }
- }
- void CGPIOFSM::OnPositiveFlickerResetTimerout(void* pData)
- {
- SetContextInfo* pSCI = (SetContextInfo*)pData;
- GetEntityBase()->GetFunction()->KillTimer(pSCI->timerID);
- const int ret = WritePin(pSCI->pinSeq, true); //实际操作
- if (ret == 0) {
- ITimerListener* pListener = new TimerOutHelper<CGPIOFSM>(this, &CGPIOFSM::OnPositiveFlickerSetTimerout, pSCI, true);
- GetEntityBase()->GetFunction()->SetTimer(pSCI->timerID, pListener, pSCI->setTime);
- }
- }
- void CGPIOFSM::OnEventDetect(void* pData)
- {
- GetContextInfo* pGci = (GetContextInfo*)pData;
- ULONG input = 0;
- BYTE btInput;
- ErrorCodeEnum err(Error_Succeed);
- if (!m_bFuncVer2) {
- const auto iBegin = SP::Module::Comm::RVCGetTickCount();
- err = m_hDevHelper->ReadPort(INPUT_PORT_2, btInput);
- const auto iEnd = SP::Module::Comm::RVCGetTickCount();
- if (err != Error_Succeed) {
- SetErrorAndLog(err, GPIO_UserErrorCode_ReadPort_Failed, "DevAdapter::ReadPort", __FUNCTION__, false, iEnd - iBegin, "",
- CombineJsonContext(CSimpleStringA::Format("Port:%d, Status:%d", INPUT_PORT_2, btInput)));
- }
- else if (btInput != m_btLastRevcInput) {
- m_btLastRevcInput = btInput;
- LogPinStatus(btInput);
- }
- }
- else {
- #if defined(RVC_OS_LINUX)
- DWORD dwReq(GPIO_DEV_SN_LIGHT_SENSOR_ALL);
- DWORD dwMode = 0;
- const auto iBegin = SP::Module::Comm::RVCGetTickCount();
- err = m_hDevHelper->DetectStatus(dwReq, dwMode);
- const auto iEnd = SP::Module::Comm::RVCGetTickCount();
- btInput = dwMode;
- if (err != Error_Succeed) {
- SetErrorAndLog(err, GPIO_UserErrorCode_DetectStatus_Failed, "DevAdapter::DetectStatus", __FUNCTION__, false, iEnd - iBegin, "",
- CombineJsonContext(CSimpleStringA::Format("dwReq:%d,dwMode:%d", dwReq, dwMode)));
- }
- else if (btInput != m_btLastRevcInput) {
- m_btLastRevcInput = btInput;
- LogPinStatus(btInput);
- }
- #else
- err = Error_NotSupport;
- #endif //RVC_OS_LINUX
- }
- if (err != Error_Succeed) {
- m_btLastRevcInput = (BYTE)(-1);
- if (++m_RecvErrTims >= TRY_FILED_TIMES_VALUE) {
- //SetDevState(DEVICE_STATUS_FAULT);
- LogWarn(Severity_Middle, Error_Debug, GPIO_UserErrorCode_EvtDetect_Error,
- CSimpleStringA::Format("DevAdapterApi[DetectStatus/ReadPort] error already exceeds %d times, give up", TRY_FILED_TIMES_VALUE));
- GetEntityBase()->GetFunction()->KillTimer(pGci->timerID);
- }
- else {
- GetEntityBase()->GetFunction()->ResetTimer(pGci->timerID, ON_EVENT_DETECT_TIMOUE_MILLSECS);
- }
- return;
- }
- else if(m_RecvErrTims != 0){
- m_RecvErrTims = 0;
- }
- /** 震动感应 */
- if (DetectBit(btInput, VIBRATIONSENSOR) && !m_bVibrationFlag) {
- m_bVibrationFlag = true;
- LogEvent(Severity_Middle, LOG_EVT_VIBRATIONSENSOR, CSimpleStringA::Format("%s [Active]", GetDriverPortString(PIN_DETECT_SHAKE + 1)));
- }
- else if (!DetectBit(btInput, VIBRATIONSENSOR) && m_bVibrationFlag) {
- LogEvent(Severity_Middle, LOG_EVT_VIBRATIONSENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_SHAKE + 1)));
- m_bVibrationFlag = false;
- }
- /** 机箱门开关检测*/
- if (DetectBit(btInput, OPENSENSOR) && !m_bOpenFlag) {
- m_bOpenFlag = true;
- m_DoorOpenTimeStamp = SP::Module::Comm::RVCGetTickCount();
- LogEvent(Severity_Middle, LOG_EVT_OPENSENSOR_ON, CSimpleStringA::Format("%s [Active]", GetDriverPortString(PIN_DETECT_OPENDOOR + 1)));
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_DoorOpen)("[Receiver] The chassis door is open");
- }
- else if (!DetectBit(btInput, OPENSENSOR) && m_bOpenFlag) {
- m_bOpenFlag = false;
- m_DoorCloseTimeStamp = SP::Module::Comm::RVCGetTickCount();
- LogEvent(Severity_Middle, LOG_EVT_OPENSENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_OPENDOOR + 1)));
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_DoorClose).setCostTime(m_DoorCloseTimeStamp - m_DoorOpenTimeStamp)("[Receiver] The chassis door is close");
- }
- /**话机检测*/
- if (DetectBit(btInput, PICKUPSENSOR)) {
- if (m_ePickUpFlag == InActive) {
- m_ePickUpFlag = Actived;
- m_PickUpTimeStamp = SP::Module::Comm::RVCGetTickCount();
- LogEvent(Severity_Middle, LOG_EVT_PICKUP, "Life the Phone up");
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_PhonePickup)("[Receiver] 话机提起");
- }
- else if (m_ePickUpFlag == UnknownStatus) {
- m_ePickUpFlag = Actived;
- m_PickUpTimeStamp = SP::Module::Comm::RVCGetTickCount();
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_PhonePickup)("[Receiver] 话机提起(启动时)");
- }
- }
- else if (!DetectBit(btInput, PICKUPSENSOR)) {
- if (m_ePickUpFlag == Actived) {
- m_ePickUpFlag = InActive;
- m_PutDownTimeStamp = SP::Module::Comm::RVCGetTickCount();
- LogEvent(Severity_Middle, LOG_EVT_ONHOOK, "Put the Phone down");
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(GpioService_LogCode_Detect_PhonePutDown).setCostTime(m_PutDownTimeStamp - m_PickUpTimeStamp)("[Receiver] 话机放下");
- }
- else if (m_ePickUpFlag == UnknownStatus) {
- m_ePickUpFlag = InActive;
- m_PutDownTimeStamp = SP::Module::Comm::RVCGetTickCount();
- }
- }
- /*物体靠近感知检测*/
- if (DetectBit(btInput, MOVESENSOR)) {
- if (!m_bMoveFlag) {
- m_bMoveFlag = true;
- m_moveDisappearTimes = 0;
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[Receiver] Someone approached now");
- LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_ON, CSimpleStringA::Format("%s [Active], times: %lu", GetDriverPortString(PIN_DETECT_BODY + 1), m_moveHoldTimes));
- }
- /** 只是发一次时间时,发现感知实体没有收到或者不处理第一次发出的时间,所以需要沿用原有的发送频率,再继续发送消失的事件,下同 [Gifur@202496]*/
- else if (m_moveHoldTimes != 0 && (m_moveHoldTimes % REPEAT_FIRE_TIMEOUT_TIMES) == 0) {
- LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_ON, CSimpleStringA::Format("%s [Active], times: %lu", GetDriverPortString(PIN_DETECT_BODY + 1), m_moveHoldTimes));
- }
- /** TODO:诗友确定 [Gifur@202579]*/
- const bool toCheck = !!(m_moveHoldTimes != 0 && (m_moveHoldTimes % (10/*mins*/ * 60 * 1000 / ON_EVENT_DETECT_TIMOUE_MILLSECS) == 0));
- if (toCheck) {
- SYSTEMTIME localTime;
- GetLocalTime(&localTime);
- if (localTime.wHour < (WORD)8 || (localTime.wHour == 8 && localTime.wMinute <= (WORD)30) || localTime.wHour >= (WORD)18)
- {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2903")("%s is abnormal(off work)", GetDriverPortString(PIN_DETECT_BODY + 1));
- }
- else {
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2902")("%s is abnormal(Work time)", GetDriverPortString(PIN_DETECT_BODY + 1));
- }
- }
- m_moveHoldTimes++;
- }
- else if (!DetectBit(btInput, MOVESENSOR)) {
- if (m_bMoveFlag) {
- m_bMoveFlag = false;
- m_moveHoldTimes = 0;
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[Receiver] Someone stays away already");
- LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_BODY + 1)));
- }
- else if (m_moveDisappearTimes != 0 && (m_moveDisappearTimes % REPEAT_FIRE_TIMEOUT_TIMES) == 0) {
- if((m_moveDisappearTimes / REPEAT_FIRE_TIMEOUT_TIMES <= 6/*一分钟内10s打印一次*/) || (m_moveDisappearTimes % (REPEAT_FIRE_TIMEOUT_TIMES * 3/*超过一分钟后半分钟打印一次*/)) == 0)
- LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_BODY + 1)));
- }
- m_moveDisappearTimes++;
- }
- /*卡嘴异物检测*/
- if (DetectBit(btInput, CARDGATESENSOR) && !m_bCardGateFlag) {
- m_bCardGateFlag = true;
- LogEvent(Severity_Middle, LOG_EVT_CARDGATESENSOR, CSimpleStringA::Format("%s [Active]", GetDriverPortString(PIN_DETECT_CARDMOUSE_JAM + 1)));
- }
- else if (!DetectBit(btInput, CARDGATESENSOR) && m_bCardGateFlag) {
- LogEvent(Severity_Middle, LOG_EVT_CARDGATESENSOR_OFF, CSimpleStringA::Format("%s [InActive]", GetDriverPortString(PIN_DETECT_CARDMOUSE_JAM + 1)));
- m_bCardGateFlag = false;
- }
- GetEntityBase()->GetFunction()->ResetTimer(pGci->timerID, ON_EVENT_DETECT_TIMOUE_MILLSECS);
- }
|