123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- #pragma once
- #include "stdafx.h"
- #include <string>
- #include <mutex>
- #include <map>
- #include <assert.h>
- #include <functional>
- #include "DeliverModule.h"
- using namespace std::placeholders;
- namespace nsSerialGPM = DIOS::Dev::MODLE::SerialGPM;
- #define FullUCB_Com_NormalLen 64
- #define FullUCB_Com_HeadLen 7
- #define TIMEOUTVALUE 100
- #define msTimeOut_Lock 500
- #define FullUCB_Com_STX 0x3A
- #define FullUCB_Com_ETX 0x0D
- #define FullUCB_Com_EOT 0x0A
- #define CONFIG "DeviceConfig"
- //同步模式
- #define CONF_SyncMode "SupportSyncMode"
- //工作位
- #define CONF_TABLE "Table"
- #define CONF_WALL "Wall"
- #define CONF_FREE "Free"
- #define CONF_DIRE "Direct"
- //曝光模式
- #define CONF_DR "SingleRad"
- #define CONF_SR "SerialRad"
- #define CONF_CF "CoutineSerial"
- #define CONF_PF "PulseSerial"
- #define CONF_TOMO "TOMO"
- #define CONF_Stitch "Stitch"
- //配置标准字段
- #define CONF_AREAID "AREAID"
- #define CONF_EXOCOUNTS "EXOCOUNTS"
- #define CONF_INPUT "INPUT"
- #define CONF_OUTPUT "OUTPUT"
- #define CONF_CHANNEL "CHANNEL"
- #define CONF_ENABLE "ENABLE"
- #define CONF_DISABLE "DISABLE"
- #define CONF_ALLOWANCE "ALLOWANCE"
- #define CONF_RELAY "RELAY"
- #define CONF_SETENABLE "SETENABLE"
- #define CONF_SETDISABLE "SETDISABLE"
- //信号名称
- #define CONF_HANDSWITCHPREP "HANDSWITCHPREP"
- #define CONF_HANDSWITCHREADY "HANDSWITCHREADY"
- #define CONF_FOOTSWITCHREADY "FOOTSWITCHREADY"
- #define CONF_GENPREP "GENPREP"
- #define CONF_GENREADY "GENREADY"
- #define CONF_XWINDOWSTATUS "XWINDOWSTATUS"
- #define CONF_GENEXPSTATUS "GENEXPSTATUS"
- #define CONF_DETREACQREQUEST "DETREACQREQUEST"
- #define CONF_GENEXPREQUEST "GENEXPREQUEST"
- #define CONF_HANDSWITCHPREPREQUEST "HANDSWITCHPREPREQUEST"
- #define CONF_HANDSWITCHREADYREQUEST "HANDSWITCHREADYREQUEST"
- #define CONF_FOOTSWITCHREADYREQUEST "FOOTSWITCHREADYREQUEST"
- #define CONF_FRAMERATE "FRAMERATE"
- #define CONF_FOOTSWITCHSTATUS "FOOTSWITCHSATUS"
- namespace DIOS::Dev::Detail::SYNBOX
- {
- /*
- 指令编码格式:
- +命令头(0x3A)
- +命令对象(S表示同步盒,P表示电脑,其他的的再定)
- +命令字节(由2个字节组合形成)
- +数据格式(‘A’表示ASIIC码,‘B’表示二进制码,‘C’表示混合或其他模式)
- +数据长度(由2个字节组合,数据区可以(0~255))
- +数据区(根据数据长度发送的结果或数据)
- +校验和(由2个字节组成,详见注1)
- +结束位1(0x0D)+结束位2(0x0A)
- */
- //校验和计算
- //校验和:等于其前面的几个字节的总和%256,例如算出的校验和等于0X1A,我们发送的校验和为0x31和0X41
- int CalChecksum(const char* cCmd, int nCmdSize);
- //指令格式化
- bool FormatCmd(char* cCmd, int& nSize);
- //把指令转成字符串用以日志输出
- bool CmdtoString(const char* cCmd, int nCmdSize, std::string& strCmd);
- //目标字符串按指定分隔符截取第一个目标字段
- std::string GetContentFromString(std::string& strContent, char ch);
- //尝试按16进制解读字符串,并将解读成功的部分转换为10进制返回
- //例如str="169acegh12547",则会解读出"169ace",返回 1481422
- int String2Hex(std::string str);
- //Hex字符转化到Int
- int ChartoInt(char uc);
- //Hex字符转化到Int
- int HexUCtoInt(UCHAR uc);
- //Int转化成Hex字符
- char InttoHexUC(int ni);
- //串口指令映射表
- using cmdFun = std::function <void(const char*, int)>;
- struct tFrameMapping
- {
- enum CMDOverType
- {
- OverType_directly = 1,
- OverType_WaitTime = 2,
- OverType_WaitACK = 3
- };
- CMDOverType m_eOverType; //指令结束方式:1.直接退;2.等待一些时间;3.等待ACK
- bool m_bLogFlag; //设置日志打印
- cmdFun m_fFun; //处理函数
- int m_nWaitTime; //设置等待时间
- HANDLE m_hAckEvent; //设置ACK事件
- tFrameMapping();
- tFrameMapping(cmdFun fun, CMDOverType type, bool logFlag, int waitTime = 100);
- ~tFrameMapping();
- tFrameMapping& operator =(const tFrameMapping& value);
- void tSetWaitState(const char* CMD = NULL);
- void tCheckWaitState(const char* CMD = NULL);
- };
- extern std::map <std::string, tFrameMapping> arFrame;
- //-----------------------------------------------------------------------------
- // DecodeFrame
- //-----------------------------------------------------------------------------
- bool DecodeFrame(const char* strFrame, int length);
- bool SetWaitAction(const char* strFrame);
- bool CheckWaitState(const char* strFrame);
- //串口处理层
- void __stdcall ProcessClientData(const char* pData, unsigned long DataLength, void* lparam);
- void __stdcall WriteLog(const char* pData, nsSerialGPM::LOG_V2_LEVEL level);
- RET_STATUS HWSendNormal(char* strCommand, int lengh, int headLengh = 1);
- RET_STATUS HWSendDirectly(char* strCommand, int lengh, int headLengh = 1);
- RET_STATUS HWSendWaittimeCMD(char* strCommand, int lengh, int headLengh = 1);
- RET_STATUS HWSendWaitSelfCMD(char* strCommand, int lengh, int headLengh = 1);
- }
|