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