硬件接口API 1. 补光灯控制开关 控制补光灯实例代码 : //红灯 HardwareCtrl.ctrlLedSwitch( HardwareCtrl.LED_RED, true); or HardwareCtrl.ctrlLedRed(true); //绿灯 HardwareCtrl.ctrlLedSwitch( HardwareCtrl.LED_GREEN, true); or HardwareCtrl.ctrlLedGreen(true); //白灯 HardwareCtrl.ctrlLedSwitch( HardwareCtrl.LED_WHITE, true); or HardwareCtrl.ctrlLedWhite(true); //只开白灯,并把其他补光灯关闭。 HardwareCtrl.ctrlLedOnlyOpenWhite();//比如只开绿灯:ctrlLedOnlyOpenGreen(), 只开红灯:ctrlLedOnlyOpenRed(); //硬件版本2.3以上支持调节白色补光灯亮度,绿灯和红灯不支持调节亮度。 HardwareCtrl.ctrlWhiteLightness(0);//控制白色补光灯亮度:取值范围:0~8 2. 控制屏幕亮度 public static void setBrightness(int value) 功能   调节屏幕亮度 参数   value : 有效值 0~255 实例代码 : HardwareCtrl.setBrightness(255); 3. 背光控制开关 public static void ctrlBlPower(boolean open) 功能   背光控制开关 参数   open : true为打开,false为关闭 实例代码 : HardwareCtrl.ctrlBlPower(true); 4. 屏幕触摸开关 public static void ctrlTp(boolean open) 功能   屏幕触摸开关 参数   open : true为打开,false为关上 实例代码 : HardwareCtrl.ctrlTp(true); 5. RS485/RS232信号控制 打开RS485/RS232 public static SerialPort openSerialPortSignal(File device, int baudrate, SerialPort.Callback callback) 功能   打卡RS485/RS232 参数   device : 串口文件       baudrate : 波特率       callback : 信息回调接口 public static void sendSerialPortHexMsg(SerialPort mSerialPort, String msg) 功能   发送RS485/RS232信号 参数   mSerialPort : 串口对象       msg : 信号 (十六进制信号,比如 "1E60010000002F") public statis void closeSerialPortSignal(SerialPort mSerialPort) 功能   关闭RS485/RS232 参数   无 实例代码 : //输入相关内容 /** 比如: 1.A向刷卡开闸,上位机需发送十六进制数据: 发送:0x1E 0x60 0x01 0x00 0x00 0x00 0x2F 闸机返回码分以下几种: a),人已经通过闸机 返回: 0x1E 0x61 0x01 0x00 0x00 0x00 0x2F b)刷卡后超时未通过闸机, 闸机自动关门,取消此次通行 返回: 0x1E 0x44 0x01 0x00 0x00 0x00 0x2F c)刷卡后有人反向过闸机, 闸机自动关门,取消此次通行 返回: 0x1E 0x44 0x01 0x00 0x00 0x00 0x2F */ //RS485/RS232 SerialPort mSerialPort = HardwareCtrl.openSerialPortSignal(new File("dev/ttyS4"), 9600, new SerialPort.Callback() { @Override public void onDataReceived(byte[] buffer, int size) { String result = StringUtils.bytesToHexString(buffer, size); Log.e("lkdong","result = "+result); } }); 发送信号 HardwareCtrl.sendSerialPortHexMsg(mSerialPort, "1E60010000002F"); //关闭RS485/RS232 HardwareCtrl.closeSerialPortSignal(mSerialPort); 6. 韦根26/34信号控制 韦根26 public static void sendWiegandSignal(String msg) 功能   韦根信号控制 参数   msg : 比如卡号等等 韦根34 public static void sendWiegand34Signal(String msg) 功能   韦根信号控制 参数   msg : 比如卡号等等 实例代码 : //输入相关内容, 比如卡号等等 HardwareCtrl.sendWiegand34Signal("1233456789"); 注意:韦根26和韦根34共用一条线路,所以在同一时间内,只能使用其中一个 7.韦根输入 public static void recvWiegandSignal(RecvWiegandCallBack callBack) 功能   韦根信号输入 参数   callBack : 韦根输入信号返回值接口 实例代码 : //韦根输入 HardwareCtrl.openRecvMiegandSignal("/dev/wiegand");//打开串口 HardwareCtrl.recvWiegandSignal(new RecvWiegandCallBack() { @Override public void recvWiegandMsg(int i) { Log.e("lkdong","recvWiegandMsg = "+i); } }); HardwareCtrl.closeRecvMiegandSignal(); 8. 继电器信号 public static void sendRelaySignal(boolean up) 功能   继电器控制 参数   up : 信号拉高为true,拉低为false。 实例代码 : HardwareCtrl.sendRelaySignal(!HardwareCtrl.getRelayValue()); 9. 雷达 雷达功能工作的原理:雷达辐射范围内,有物体活动和没有物体活动都会上报键 值到Android应用层,开发者可以根据自己的需要进行开发。 实例代码 : public class MainActivity extends AppCompatActivity { //雷达键值对 public static final int KEYCODE_RADAR_IN = 305;//有物体活动 public static final int KEYCODE_RADAR_OUT = 306;//没有物体活动 @Override public boolean dispatchKeyEvent(KeyEvent event) { Log.v("lkdong", "dispatchKeyEvent keycode=" + event.getKeyCode()); if (event.getKeyCode() == KEYCODE_RADAR_IN) {//雷达上报有物体活动 if (event.getAction() == KeyEvent.ACTION_UP) { //TODO } } else if (event.getKeyCode() == KEYCODE_RADAR_OUT) {//雷达上报没有物体活动 if (event.getAction() == KeyEvent.ACTION_UP) { //TODO } } return super.dispatchKeyEvent(event); } } 10.NFC nfc功能工作的原理:刷卡时,系统会上报键值到Android应用层,同时把卡的信 息保存在/dev/dl1825节点上。在开发nfc读卡时,需要在接收到系统会上报键值 后,才可以去读/dev/dl1825节点值。 实例代码 : public class MainActivity extends AppCompatActivity { //NFC键值对 public static final int KEYCODE_NFC=307; @Override public boolean dispatchKeyEvent(KeyEvent event) { Log.v("lkdong", "dispatchKeyEvent keycode=" + event.getKeyCode()); if (event.getKeyCode() == KEYCODE_NFC) { if (event.getAction() == KeyEvent.ACTION_UP) { String mNfcCode = NfcUtil.getCode();//nfc读卡,详细的实现流程,请参考最下面gpioDemo } } return super.dispatchKeyEvent(event); } } 11.二维码(qrcode) 二维码读取主要是通过串口操作,具体操作流程如下: 实例代码 : public class QrCodeUtil { public static final String TAG = QrCodeUtil.class.getSimpleName(); //当前命令基于模块E3000H public static final byte[] ENABLE_QR_CONFIG = new byte[]{0x07, (byte) 0xC6, 0x04, 0x08, 0x00, (byte) 0xEC, 0x01, (byte) 0xFE, 0x3A}; public static final byte[] DISABLE_QR_CONFIG = new byte[]{0x07, (byte) 0xC6, 0x04, 0x08, 0x00, (byte) 0xEC, 0x00, (byte) 0xFE, 0x3B}; public static final byte[] LED_ON = new byte[]{0x08, (byte) 0xC6, 0x04, 0x08, 0x00, (byte) 0xF2, 0x02, 0x01, (byte) 0xFE, 0x31}; public static final byte[] LED_OFF = new byte[]{0x08, (byte) 0xC6, 0x04, 0x08, 0x00, (byte) 0xF2, 0x02, 0x02, (byte) 0xFE, 0x30}; public static final byte[] LED_AUTO = new byte[]{0x08, (byte) 0xC6, 0x04, 0x08, 0x00, (byte) 0xF2, 0x02, 0x00, (byte) 0xFE, 0x32}; public static final byte[] COMMADN_RESULT = new byte[]{0x04, (byte) 0xd0, 0x00, 0x00, (byte) 0xff, 0x2c}; private SerialPort mQrCodeSerialPort = null; private static QrCodeUtil sQrCodeUtil = null; private static boolean sQrCodeSupport = true; /** * 启用二维码识别并打开串口 */ public static void open() { if (isQrCodeSupport() && sQrCodeUtil != null) { sQrCodeUtil.openQrCodeSerialPort(new SerialPort.Callback() { @Override public void onDataReceived(byte[] bytes, int i) { if (QrCodeUtil.isCommandResult(bytes, i)) { } else { String s = new String(bytes, 0, i); Log.v(TAG, "QR string " + s); if (sQrCodeUtil.mQRCodeCallback != null) { sQrCodeUtil.mQRCodeCallback.onQrCodeData(s); } } } }); } } /** * 关闭二维码识别串口 */ public static void close() { if (isQrCodeSupport() && sQrCodeUtil != null) { sQrCodeUtil.closeQrCodeSerialPort(); } } /** * 关闭串口并释放 */ public static void destory() { if (isQrCodeSupport() && sQrCodeUtil != null) { sQrCodeUtil.closeQrCodeSerialPort(); sQrCodeUtil = null; } } /** * 打开串口 * * @param qrCodeDataCallBack */ private void openQrCodeSerialPort(SerialPort.Callback qrCodeDataCallBack) { if (mQrCodeSerialPort == null) { Log.v(TAG, "openQrCodeSerialPort==="); mQrCodeSerialPort = HardwareCtrl.openSerialPortSignal(new File("/dev/ttyS0"), 9600, qrCodeDataCallBack); disableQRCodeConfig(); } } /** * 关闭串口 */ private void closeQrCodeSerialPort() { Log.v(TAG, "closeQrCodeSerialPort()"); if (mQrCodeSerialPort != null) { HardwareCtrl.closeQrCodeSerialPort(mQrCodeSerialPort); mQrCodeSerialPort = null; } } /** * 打开 识别配置二维码 功能 */ private void enableQRCodeConfig() { if (mQrCodeSerialPort != null) { mQrCodeSerialPort.sendHexMsg(ENABLE_QR_CONFIG); } } /** * 关闭 识别配置二维码 功能 */ private void disableQRCodeConfig() { if (mQrCodeSerialPort != null) { mQrCodeSerialPort.sendHexMsg(DISABLE_QR_CONFIG); } } /** * 补光灯在扫描时自动打开 */ private void setLEDAuto() { if (mQrCodeSerialPort != null) { mQrCodeSerialPort.sendHexMsg(LED_AUTO); } } /** * 补光灯一直关闭 */ private void setLEDOFF() { if (mQrCodeSerialPort != null) { mQrCodeSerialPort.sendHexMsg(LED_OFF); } } /** * 补光灯一直打开 */ private void setLEDON() { if (mQrCodeSerialPort != null) { mQrCodeSerialPort.sendHexMsg(LED_ON); } } /** * 配置二维码扫描补光灯状态 * 目前仅分:扫描时自动打开、常关 * * @param isAuto */ public static void setLedState(boolean isAuto) { if (isQrCodeSupport() && sQrCodeUtil != null) { if (isAuto) sQrCodeUtil.setLEDAuto(); else sQrCodeUtil.setLEDOFF(); } } public interface QRCodeCallback { public void onQrCodeData(String s); } private QRCodeCallback mQRCodeCallback; /** * 支持二维码扫描成功的监听 * * @param callback */ public void setQRCodeCallback(QRCodeCallback callback) { mQRCodeCallback = callback; } } 12. 普通GPIO控制 D0 信号 public static void sendSignalD0(boolean up) 功能   普通GPIO D0信号控制 参数   up : false为拉低,true为拉高 实例代码 : HardwareCtrl.sendSignalD0(true); D1 信号 public static void sendSignalD1(boolean up) 功能   普通GPIO D1控制 参数   up : false为拉低,true为拉高 实例代码 : HardwareCtrl.sendSignalD1(true); 13. 关机 public static void shutdown() 功能   关机 参数   无 实例代码 : HardwareCtrl.shutdown(); 14. 重启设备 public static void reboot() 功能   重启设备 参数   无 实例代码 : HardwareCtrl.reboot(); 15. 看门狗 public static void setWdt(int value) 功能   系统死机或者长时间没有响应,重启设备 参数   value : 有效值:0~3       0对应是0.46s       1对应是2.56s 2对应是10.24s       3对应是40.96s 实例代码 : HardwareCtrl.ctrlWdt(1); 16. 获取设备唯一ID public static String getFireflyCid() 功能   设备唯一id 参数   无 实例代码 : String cid = HardwareCtrl.getFireflyCid(); 17. 其他命令使用 public static void execSuCmd(String command) 功能   其他shell命令的使用 参数   command:需要执行的命令 实例代码 : //比如同步文件等等 HardwareCtrl.execSuCmd("sync"); 18. 其他GPIO使用 public static int gpioParse(String gpioStr) 功能   将gpio名字转换成对应的gpio编码 参数   gpioStr:gpio名字,比如GPIO2_A2 public static void ctrlGpio(int gpio, String direction, int value) 功能   控制GPIO 参数   gpio:gpio编码,比如152       direction :       value : 设置 GPIO值 实例代码 : HardwareCtrl.ctrlGpio(HardwareCtrl.gpioParse("GPIO2_A2"), "out", 1); 19.TestGpioDemo下载链接 https://pan.baidu.com/s/1EeCIUoHA4i_RQFHV7fgsrg 提取码:d4yq