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)
}