package FLXCheckInController import ( "fmt" "io" "time" log "github.com/sirupsen/logrus" ) type FlxCheckInCmdSender struct { ReadDLock bool SerialPort *io.ReadWriteCloser } func (para *FlxCheckInCmdSender) init(serialPortt *io.ReadWriteCloser) { defer func() { if r := recover(); r != nil { log.Error("init:", r) } }() fmt.Println("初始化串口驱动 ") para.SerialPort = serialPortt } // / 发送串口命令 // / 命令内容 func (para *FlxCheckInCmdSender) WritePort(buf []byte) { defer func() { if r := recover(); r != nil { log.Error("WritePort:", r) } }() para.ReadDLock = true if para.SerialPort != nil { (*(para.SerialPort)).Write(buf) time.Sleep(10 * time.Millisecond) } para.ReadDLock = false } func (para *FlxCheckInCmdSender) InitDoor() { defer func() { if r := recover(); r != nil { log.Error("InitDoor:", r) } }() fmt.Println("初始化签到门 ") var ary = make([]byte, 6) ary[0] = CMD_HEAD ary[5] = CMD_Tail para.WritePort(ary) } func (para *FlxCheckInCmdSender) InvokeOnDataSendLogHandler(logMessage string) { defer func() { if r := recover(); r != nil { log.Error("InvokeOnDataSendLogHandler:", r) } }() fmt.Println(logMessage) } // / 打开或关闭报到天线 // / (State=1 表示开启天线的工作状态;State = 0 表示关闭天线的工作状态) func (para *FlxCheckInCmdSender) OpenOrCloseReadPower(isOpen bool) { defer func() { if r := recover(); r != nil { log.Error("OpenOrCloseReadPower:", r) } }() var ary = make([]byte, 6) ary[0] = CMD_HEAD ary[1] = Open_Close_ReaderPower if isOpen { ary[2] = 0x01 } else { ary[2] = 0x00 } ary[5] = CMD_Tail para.WritePort(ary) } // / 下载控制状态指令 func (para *FlxCheckInCmdSender) DownLoadEStatus(eStatus byte) { defer func() { if r := recover(); r != nil { log.Error("DownLoadEStatus:", r) } }() var ary = make([]byte, 6) ary[0] = CMD_HEAD ary[1] = DownLoad_EState ary[2] = eStatus ary[5] = CMD_Tail para.WritePort(ary) } // / (对于原装TI读卡器)读读卡器检测状态 func (para *FlxCheckInCmdSender) GetReader_State() { defer func() { if r := recover(); r != nil { log.Error("GetReader_State:", r) } }() var ary = make([]byte, 6) ary[0] = CMD_HEAD ary[1] = Read_Reader_State ary[5] = CMD_Tail para.WritePort(ary) } // / 控制继电器及开关量输出(State:0:关;1:开) func (para *FlxCheckInCmdSender) SetOutputState(isOpen bool) { defer func() { if r := recover(); r != nil { log.Error("SetOutputState:", r) } }() var ary = make([]byte, 6) ary[0] = CMD_HEAD ary[1] = Set_Output_State if isOpen { ary[2] = 0x01 } else { ary[2] = 0x00 } ary[5] = CMD_Tail para.WritePort(ary) } // / // / 发送告警指令 // / // / func (para *FlxCheckInCmdSender) SendAlarm(msec byte) { defer func() { if r := recover(); r != nil { log.Error("SendAlarm:", r) } }() var ary = make([]byte, 6) ary[0] = CMD_HEAD ary[1] = BeepOn ary[2] = msec ary[3] = Clear_SaveArea ary[4] = Clear_SaveArea ary[5] = CMD_Tail para.WritePort(ary) } // / // / 向通道机发送心跳指令 // / func (para *FlxCheckInCmdSender) SendHeartBeat() { defer func() { if r := recover(); r != nil { log.Error("SendHeartBeat:", r) } }() var ary = make([]byte, 10) ary[0] = 0x1B ary[1] = 0x00 ary[2] = 0x05 ary[3] = 0xFF ary[4] = 0xFF ary[5] = 0x00 ary[6] = 0x00 ary[7] = 0x01 ary[8] = 0xCA ary[9] = 0x79 para.WritePort(ary) } // / // / 蜂鸣器控制协议 // / // / 表示蜂鸣时长 func (para *FlxCheckInCmdSender) SendBeep(bBeeps byte) { defer func() { if r := recover(); r != nil { log.Error("SendBeep:", r) } }() var ary = make([]byte, 6) ary[0] = 0x7E ary[1] = 0x09 ary[2] = bBeeps ary[3] = 0x00 ary[4] = 0x00 ary[5] = 0x7E para.WritePort(ary) }