硬件接口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信号控制¶
韦根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);
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);