You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

218 lines
4.0 KiB
Go

1 month ago
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>控制继电器及开关量输出(State01开)</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)
}