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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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