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服务器配置结果检查

-服务器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 | 时间戳 时间戳单位秒 需要先校时|
+