|
|
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
|
|
|
}
|
|
|
|
|
|
// / <summary>发送串口命令</summary>
|
|
|
// / <param name="buf">命令内容</param>
|
|
|
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)
|
|
|
}
|
|
|
|
|
|
// / <summary>打开或关闭报到天线</summary>
|
|
|
// / <remarks>(State=1 表示开启天线的工作状态;State = 0 表示关闭天线的工作状态)</remarks>
|
|
|
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)
|
|
|
}
|
|
|
|
|
|
// / <summary>下载控制状态指令</summary>
|
|
|
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)
|
|
|
}
|
|
|
|
|
|
// / <summary>(对于原装TI读卡器)读读卡器检测状态</summary>
|
|
|
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)
|
|
|
}
|
|
|
|
|
|
// / <summary>控制继电器及开关量输出(State:0:关;1:开)</summary>
|
|
|
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)
|
|
|
}
|
|
|
|
|
|
// / <summary>
|
|
|
// / 发送告警指令
|
|
|
// / </summary>
|
|
|
// / <param name="msec"></param>
|
|
|
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)
|
|
|
}
|
|
|
|
|
|
// / <summary>
|
|
|
// / 向通道机发送心跳指令
|
|
|
// / </summary>
|
|
|
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)
|
|
|
}
|
|
|
|
|
|
// / <summary>
|
|
|
// / 蜂鸣器控制协议
|
|
|
// / </summary>
|
|
|
// / <param name="bBeeps">表示蜂鸣时长</param>
|
|
|
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)
|
|
|
}
|