123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- #ifndef _GPIO_FSM_H_
- #define _GPIO_FSM_H_
- #pragma once
- #include "SpBase.h"
- #include "SpFSM.h"
- #include "GpioClass.h"
- #include "Gpio_server_g.h"
- #include "DevFSMCommBase.hpp"
- #include "Gpio_UserErrorCode.h"
- #define GpioService_LogCode_Detect_DoorOpen "QLR0402209A1"
- #define GpioService_LogCode_Detect_PhonePickup "QLR0402209A2"
- #define GpioService_LogCode_Detect_CardMouseJam "QLR0402209A3"
- #define GpioService_LogCode_Detect_DoorClose "QLR0402209A4"
- #define GpioService_LogCode_Detect_PhonePutDown "QLR0402209A5"
- enum PinPort {
- VIBRATIONSENSOR, /**震动探测器*/
- OPENSENSOR, /*开机箱门感应器*/
- PICKUPSENSOR, /*话机感应器*/
- MOVESENSOR, /**人体探测感应器*/
- CARDGATESENSOR, /**发卡器卡嘴感应器*/
- };
- /*用于标识等挂机等状态,布尔型不能满足,需要有一个初始状态*/
- enum PinActiveStatus
- {
- UnknownStatus,
- InActive,
- Actived
- };
- struct OutDrivingInfo
- {
- int Port;
- int SetTime;
- int ResetTime;
- int TimeOut;
- };
- struct ReceivingInfo
- {
- ULONG Port;
- int ContinuousTriggerTime;
- };
- struct SetContextInfo
- {
- ULONG timerID;
- ULONG pinSeq;
- int setTime;
- int resetTime;
- int timeout;
- };
- struct GetContextInfo
- {
- ULONG timerID;
- };
- enum LightSeq {
- UNKNOWN_DEVICE,
- CARDREADER,
- CARDREADER_RED,
- IDCERTIFICATE,
- PINPAD,
- PINPADLIGHT,
- SHAKEDETECT,
- SWITCHINDUCTOR,
- PHONEPICKUP,
- MOVEDETECT,
- CARDGATEDETECT,
- HEADLIGHT,
- HEADLIGHT_RED,
- CONTACTLESSCARD,
- HEADLIGHT_ASSIST,
- HSPSCANNER,
- FINGERPRINT,
- LIGHT_SEQ_MAX
- };
- /** 添加注释:对应规格说明书中的引脚信号,这里是从0开始,适应程序 [Gifur@202494]*/
- enum DevicePinSeq
- {
- PIN_CARD_READER_LIGHT = 0,
- PIN_USB_CONTROL_SWITCH, //已下线
- PIN_IDCERTIFICATE_LIGHT,
- PIN_PINPAD_LIGHT,
- PIN_HEAD_LIGHT,
- PIN_TROUBLE_LIGHT = 5,
- PIN_CARD_ISSUE_MAINTAIN_LIGHT,
- PIN_USB_CONTROL_LIGHT,//已下线
- PIN_CONTACELESS_LIGHT,
- PIN_RESERVED1, //RESERVED未使用,下同
- PIN_FINGERPRINT_LIGHT = 10,
- PIN_RESERVED2,
- PIN_HSPSCANNER_PREVIEW_LIGHT,
- PIN_RESERVED3,
- PIN_RESERVED4,
- PIN_RESERVED5 = 15,
- PIN_DETECT_SHAKE = 16,
- PIN_DETECT_OPENDOOR,
- PIN_DETECT_PHONE,
- PIN_DETECT_BODY,
- PIN_DETECT_CARDMOUSE_JAM,
- PIN_HSPSCANNER_LIGHT = 25
- };
- struct GpioSet_Info
- {
- /** 注意设备序号是实体内定义的逻辑,不是设备端口号,最后用作于计时器*/
- int devseq;
- /*目前用于灯亮模式标记,1表示闪烁,0表示常亮*/
- int mode;
- /*关灯还是开灯的标记,1表示关灯,0表示开灯*/
- int close;
- };
- using namespace Gpio;
- class CGPIOFSM : public CCommDevFSM<CGPIOFSM, GpioClass>
- {
- public:
- CGPIOFSM(void);
- ~CGPIOFSM(void) {}
- virtual ErrorCodeEnum OnInit();
- virtual ErrorCodeEnum OnExit() {
- LOG_FUNCTION();
- return Error_Succeed;
- }
- void AfterInit();
- void SelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
- enum { s0 };
- BEGIN_FSM_STATE(CGPIOFSM)
- FSM_STATE_ENTRY(s0, "Idle", s0_on_entry, s0_on_exit, s0_on_event)
- END_FSM_STATE()
- BEGIN_FSM_RULE(CGPIOFSM, s0)
- FSM_RULE_ENTRY_ANY(s0, s0, 0)
- END_FSM_RULE()
- virtual void s0_on_entry() {}
- virtual void s0_on_exit() {}
- virtual unsigned int s0_on_event(FSMEvent* e) {
- return 0;
- }
- void GetDevInfo(SpReqAnsContext<GpioService_GetDevInfo_Req,
- GpioService_GetDevInfo_Ans>::Pointer ctx);
- void Exit(SpOnewayCallContext<GpioService_Exit_Info>::Pointer ctx);
- void OnLogEvent(DWORD dwUserCode);
- //////////////////////////////////////////////////////////////////////////
- void OnPositiveFlickerSetTimerout(void* pData);
- void OnPositiveFlickerResetTimerout(void* pData);
- //具体的监听事件函数
- void OnEventDetect(void* pData);
- //开了一个监听线程,用于监听震动、开关门等事件
- void StartDetectWorkThread();
- void Set(GpioSet_Info info);
- void SetEx(GpioSet_Info info);
- bool SetOutDriving(GpioSet_Info req, OutDrivingInfo od);
- //调用硬件适配器接口,不涉及到其他复杂逻辑
- //0:success; 1:false;-1:other(ignore)
- int WritePin(DWORD dwPinSeq, bool bHighLevel);
- private:
- bool DetectBit(ULONG data, int pos);
- private:
- BYTE m_btOutputStatus[MAX_PORT_NUM];
- BOOL m_bLightStatus[LIGHT_SEQ_MAX];
- BYTE m_btLastRevcInput;
- unsigned int m_RecvErrTims;
- BOOL m_bNewVersion;
- BOOL m_bFuncVer2;
- bool m_bVibrationFlag, m_bOpenFlag, m_bMoveFlag, m_bCardGateFlag;
- PinActiveStatus m_ePickUpFlag;
- unsigned long m_PickUpTimeStamp;
- unsigned long m_PutDownTimeStamp;
- unsigned long m_DoorOpenTimeStamp;
- unsigned long m_DoorCloseTimeStamp;
- int m_headlightDevPort;
- unsigned long m_moveHoldTimes, m_moveDisappearTimes;
- };
- template<class T>
- class TimerOutHelper : public ITimerListener
- {
- public:
- typedef void (T::* FuncTimer)(void* pUserdata);
- TimerOutHelper(T* p, FuncTimer pTimerFunc, void* pUserData, bool bDeleteSelf = false)
- : m_pObject(p), m_pUserData(pUserData), m_pTimer(pTimerFunc), m_bDeleteSelf(bDeleteSelf) {}
- virtual void OnTimeout(DWORD dwTimerID)
- {
- (m_pObject->*m_pTimer)(m_pUserData);
- if (m_bDeleteSelf)
- delete this;
- }
- private:
- void* m_pUserData;
- T* m_pObject;
- FuncTimer m_pTimer;
- bool m_bDeleteSelf;
- };
- #endif //_GPIO_FSM_H_
|