硬件接口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 : 信息回调接口


发送RS485/RS232

public static void sendSerialPortHexMsg(SerialPort mSerialPort, String msg)

功能   发送RS485/RS232信号

参数   mSerialPort : 串口对象
      msg : 信号 (十六进制信号,比如”1E60010000002F”)


关闭RS485/RS232

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);
注意:
1. 485信号控制旧接口可以继续使用, 比如:HardwareCtrl.openRs485Signal(File device, int baudrate, SerialPort.Callback callback)、 HardwareCtrl.sendRs485Signal(SerialPort mSerialPort, String msg)和HardwareCtrl.closeRs485Signal(SerialPort mSerialPort)

2. 485串口:/dev/ttyS4 ; 232串口:/dev/ttyS3


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


控制GPIO

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下载链接