diff --git a/soft/code.dat b/soft/code.dat new file mode 100644 index 0000000..463c1a6 --- /dev/null +++ b/soft/code.dat diff --git a/海亮定制.md b/海亮定制.md index b2ef7b5..bd3b035 100644 --- a/海亮定制.md +++ b/海亮定制.md @@ -35,7 +35,7 @@ C200K基站,采用MQTT协议进行开发,基站接入MQTT服务器,应用 MQTT服务器要求: -厂家使用EMQX 进行测试 +厂家使用EMQX 进行测试 能够正常收发MQTT数据。 @@ -73,7 +73,7 @@ MQTT服务器配置结果检查 ![](img/mqtt_4.png) -服务器IP设置软件下载 +服务器IP设置软件下载 ## 2.3 应用开发 @@ -110,6 +110,7 @@ MQTT服务器配置结果检查 | 键盘升级 | 键盘固件升级 | | 文本下发 | 文本下发 | | 学生卡信息上报 | 学生卡信息上报 | +| 下发生避字 | 下发生避字 | ## 3.2 协议简介 @@ -596,6 +597,92 @@ ${clinetId} clinetId 是基站编号,为替换字符串。 每包的数据计算,少于1k即可。 + +### 3.2.5 生避字检测方法 + +下发文本信息时,需要先检测下发的文本内容
+下发的内容当中,如果有些字属于生避字,需要在业务进行前,先把生避字的字码下发给到基站。
+目前基站支持最多存储8个生避字
。 +生避字字符下载 + +判断字符的GB2312编码是否是生避字,方法: + +字符的GB2312编码: +```java + +byte[] inputs = input.getBytes("GB2312"); // 原文内容 + +``` + +byte数组转int型 +```java + public static int bytes2ToInt(byte[] b, int offset) { + int x = 0; + if (b.length - offset >= 2) { + x = (int) (((b[offset ] & 0xff) << 8) | ((b[offset + 1] & 0xff) << 0)); + } + + return x; +} +``` + +判断这个字符是否是生避字 + +```java + public static boolean isGB2312Font(int code) { + int GB_H = (code >> 8) & 0xFF; + int GB_L = code & 0xFF; + + if (GB_H < 0xA1 || GB_H > 0xF7) { + return true; + } else if (GB_L < 0xA1 || GB_L > 0xFE) { + return true; + } + return false; +} +``` + +获取这个生避字的编码: +``` +byte[] inputs = "綩".getBytes("GB2312"); // 原文内容 +int code = bytes2ToInt(inputs,0); +byte[] result = readFileContent(code,24); +String hex = bytesToHexString(inputs) + bytesToHexString(result); + +public byte[] readFileContent(int start, int len) { + byte[] buffer = new byte[len]; + try { + InputStream inputStream = new FileInputStream(new File("path/code.dat")); + inputStream.skip(start*len); + inputStream.read(buffer, 0, len); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return buffer; +} + + + public static String bytesToHexString(byte[] src) { + StringBuilder stringBuilder = new StringBuilder(""); + if (src == null || src.length <= 0) { + return stringBuilder.toString(); + } + for (int i = 0; i < src.length; i++) { + int v = src[i] & 0xFF; + String hv = Integer.toHexString(v); + if (hv.length() < 2) { + stringBuilder.append(0); + } + stringBuilder.append(hv); + stringBuilder.append(""); + } + return stringBuilder.toString(); +} +``` + + + ## 3.3 功能说明 @@ -1299,7 +1386,7 @@ public static String bytesToHexString(byte[] src) { | current |当前第几包 ,这里分包原则参考指令属性m介绍说明及分包示例| | total |一共多少包,这里分包原则参考指令属性m介绍说明及分包示例 | | qs |键盘总数 如果是多包,是多包总和 | -| cmd |下发的命令
1: 姓名下发
10: 第二行文本
85: 自判题标题
87: 清除 | +| cmd |下发的命令
1: 姓名下发
10: 第二行文本
70: 生避字,生避字规则:内容为GB2312的hex编码,先是生避字的hex编码,紧接着是生避字的字符编码,生避字的字符编码为24个字节。一个生避字是26个字节52个字符(hex编码)
85: 自判题标题
87: 清除 | | text |标题信息,以hex:开头添加的内容 内容为GB2312的hex编码 | @@ -1356,7 +1443,7 @@ public static String bytesToHexString(byte[] src) { | --- | --- | | i = 61 | 文本下发返回 | | sn |键盘号 | -| cmd |下发的命令
1: 姓名下发
10: 第二行文本
85:自判题标题
87:清除 | +| cmd |下发的命令
1: 姓名下发
10: 第二行文本
70: 生避字,生避字规则(参考:生避字检测方法):内容为GB2312的hex编码,先是生避字的hex编码,紧接着是生避字的字符编码,生避字的字符编码为24个字节。一个生避字是26个字节52个字符(hex编码)
85:自判题标题
87:清除 | | success | 是否成功。
0 表示成功
-1 失败
-2 基站忙,应用程序需要等待一段时间再发送 | ### 学生卡信息上报 @@ -1382,4 +1469,5 @@ public static String bytesToHexString(byte[] src) { | c |键盘编号 | | cv |固件版本号 | | hw |硬件版本号 | -| t | 时间戳 时间戳单位秒 需要先校时| \ No newline at end of file +| t | 时间戳 时间戳单位秒 需要先校时| +