complted anan base protocol content.
authorTrillGates <williamtrillgates@gmail.com>
Mon, 26 Apr 2021 07:18:58 +0000 (15:18 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Mon, 26 Apr 2021 07:18:58 +0000 (15:18 +0800)
app/src/main/java/com/ic/protocols/protocol_anan.java
app/src/main/java/com/ic/protocols/protocol_beehome.java

index ccab10a..58cc0a4 100644 (file)
@@ -10,20 +10,27 @@ import android.os.Environment;
 import android.telephony.TelephonyManager;
 
 import com.enqualcomm.support.Config;
+import com.enqualcomm.support.CoreService;
+import com.enqualcomm.support.R;
+import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.Content;
+import com.enqualcomm.support.bean.ICLocation;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.StringMessage;
 import com.enqualcomm.support.bean.VoiceContent;
 import com.enqualcomm.support.bean.voicePacket;
+import com.enqualcomm.support.service.HeartRateManager;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.ICLogger;
 import com.enqualcomm.support.utils.TimeUtil;
 import com.enqualcomm.support.utils.Util;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Locale;
 
+import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
 import static java.lang.Math.abs;
 
@@ -171,7 +178,10 @@ public class protocol_anan {
         AP16/*立即定位*/,
         AP17/*恢复出厂设置*/,
         AP18/*重启上行*/,
-        AP31/*关机上行*/
+        AP31/*关机上行*/,
+        AP12/*SOS名单上行*/,
+        APXL/*血压心率 上行*/,
+        APXY, AP88, AP15, AP84, AP14/*白名单电话本上行*/
     }
 
 
@@ -544,9 +554,411 @@ public class protocol_anan {
                 ICLogger.i("收到服务器关机命令BP31");
                 mConnection.DeliverCMDMessageToSystem("poweroff", cmd);//通知下面线程状态变化
                 break;
+            case BP14:
+                //收到设置白名单号码
+                handleBP14(mConnection, cmd, mRuntime);
+                ICLogger.i("收到服务器设置白名单号码命令BP14");
+                break;
+            case BP12:
+                //收到设置SOS号码
+                handleBP12(mConnection, cmd, mRuntime);
+                ICLogger.i("收到服务器设置SOS号码命令BP12");
+                break;
+            case BPXL:
+                handleBPXL(cmd, mConnection);
+                ICLogger.i("收到服务器心率检测命令");
+                if (mRuntime.check_stat_do_ppg_test())
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
+                break;
+            case BPXY:
+                handleBPXY(cmd, mConnection);
+                ICLogger.i("收到服务器血压检测命令");
+                if (mRuntime.check_stat_do_ppg_test())
+                    HeartRateManager.getInstance().triggerPPGTest(FROM_SERVER);
+                break;
+            case BP88:
+                //收到查找设备消息
+                handleBP88(cmd, mConnection);
+                mConnection.DeliverCMDMessageToSystem("findDev", cmd);//通知下面线程状态变化
+                break;
+            case BP15:
+                handleBP15(cmd, mConnection, mRuntime);
+                ICLogger.i("收到服务器设置定位命令BP15");
+                break;
+            case BP84:
+                handleBP84(cmd, mConnection);
+                ICLogger.i("收到服务器白名单命令");
+                break;
+            case BP07:
+                //收到发送的语音包
+                handleBP07(cmd, mConnection);
+                break;
+
+        }
+    }
+
+    public void handleBP07(String cmd, Connection connection) {
+//平台响应:      IWBP07,20140818064408,6,1,1#
+//20140818064408:设备语音时间,yyyyMMddHHmmss 格式的年月日时分秒
+//6:语音包分包总数
+//1:当前设备收到的是第几个包
+//1:表示服务器接受数据成功,0表示服务器接受数据失败
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length == 5) {
+            try {
+                String time = cmdlist[1];
+                int packetCount = Integer.parseInt(cmdlist[2]);
+                int packetIndex = Integer.parseInt(cmdlist[3]);
+                int receiveSuccess = Integer.parseInt(cmdlist[4]);
+                ICLogger.i("服务器在" + time + " 收到语音 " +
+                        packetIndex + "/" + packetCount + " " + (receiveSuccess == 1 ? "成功" : "失敗"));
+                if (receiveSuccess == 1) {
+                    //如果服务器接收 语音成功,则设置下一个要发送的语音包Index,当index == packetCount的时候表示所有包发送完毕,停止继续发送
+                    voicePacket.getInstanceSent().setCurrentIndexToSent(packetIndex);
+                }
+                //发送消息,再次检查要发送的语音包,确认其发送完毕
+                connection.DeliverCMDMessageToSystem("SentVoicePacket", "SentVoicePacket");
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
+            }
+        } else {
+            ICLogger.i(" BP07 Format error!");
+        }
+    }
+
+
+    public void handleBP84(String cmd, Connection connection) {
+//示例:
+        //IWBP84,353456789012345,080835,1#
+        //说明:
+        //IW:标识符
+        //BP84 : 命令字符
+        //353456789012345:IMEI号,设备唯一ID
+        //080835 :指令流水号
+        //1: 表示白名单开,0 表示白名单关
+        String[] list = cmd.split(CMDSPLIT);
+
+        if (list.length == 4) {
+            String index = list[2];
+            String whitelist_switch = list[3];
+            connection.send(AP84(index, 1));
+
+            if (whitelist_switch.equals("1")) {
+                Util.setSystemProperties("persist.sys.whitelist.enable", "true");
+            } else {
+                Util.setSystemProperties("persist.sys.whitelist.enable", "false");
+            }
+            ICLogger.i("收到服务器指令:白名单" + (whitelist_switch.equals("1") ? "开" : "关"));
+
+        } else {
+
+            ICLogger.i("BP84 format error!");
+        }
+
+    }
+
+
+    //白名单开关(下行协议号:BP84,响应:AP84)
+    public static StringMessage AP84(String index, int success) {
+
+        //设备响应:      IWAP80,080835,1#
+        //080835:指令流水号
+        //1:表示设备执行成功,0 表示设备执行失败
+        return genStringMessage("AP84", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP84))
+                .append(CMDSPLIT).append(index)
+                .append(CMDSPLIT).append(success)
+                .append(CMDEND).toString());
+    }
+
+
+    //设置定位周期
+    public void handleBP15(String cmd, Connection connection, Runtime runtime) {
+//        IWBP15, 353456789012345, 080835, 30#
+//        353456789012345:IMEI号,设备唯一ID
+//        080835 :指令流水号
+//        30: 表示频率为30分钟
+
+        String[] list = cmd.split(CMDSPLIT);
+
+        if (list.length == 4) {
+            String index = list[2];
+            String time = list[3];
+            connection.send(AP15(index));
+            ICLogger.i("BP15 , 定位周期=" + time + "秒");
+
+            try {
+                Config.setLocationMode(runtime.getContextProxy().context, ICLocation.CUSTOM_MOD8_GPS);
+                Config.setLocationCycle(runtime.getContextProxy().context, Integer.parseInt(time));
+                runtime.getLocationInstance().setWorkingMod(Config.getLocationMode(runtime.getContextProxy().context));
+                runtime.getLocationInstance().setLocation_cycle(Config.getLocationCycle(runtime.getContextProxy().context));
+                //set AlarmCycle  and trigger Location
+                CoreService.getInstance().setLocationAlarm(runtime.getLocationInstance().getWorkingMod());
+            } catch (Exception e) {
+                ICLogger.e(e.getMessage(), e);
+            }
+        } else {
+            ICLogger.i("BP15 format error");
+        }
+
+    }
+
+    public static StringMessage AP15(String index) {
+//IWAP15, 080835#
+//080835:指令流水号
+        return genStringMessage("AP15", new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP15))
+                .append(CMDSPLIT).append(index)
+                .append(CMDEND).toString());
+    }
+
+
+    public static void handleBP88(String cmd, Connection connection) {
+//        IWBP88,080835#
+        String[] list = cmd.split(CMDSPLIT);
+
+        if (list.length == 2) {
+            String index = list[1];
+            connection.send(AP88(index));
+            ICLogger.i("收到服务器消息:查询设备");
+
+        } else {
+            ICLogger.i("BP88 format error!");
+        }
+    }
+
+
+    public static StringMessage AP88(String index) {
+        //设备响应:      IWAP88, 080835#
+        //080835:指令流水号
+        return genStringMessage("AP88",
+                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP88))
+                        .append(CMDSPLIT).append(index)
+                        .append(CMDEND).toString());
+    }
+
+    /**
+     * 测量血压
+     *
+     * @param cmd
+     * @param connection
+     */
+    public void handleBPXY(String cmd, Connection connection) {
+        //IWBPXY,353456789012345,080835#
+        //说明:
+        //IW:标识符
+        //BPXL : 命令字符
+        //353456789012345:IMEI号,设备唯一ID
+        //080835 :指令流水号
+        //设备响应:      IWAPXY,080835#
+        //080835:指令流水号
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 3) {
+            String index = list[2];
+            String imei = list[1];
+            ICLogger.i("Handle BPXY IMEI " + imei + ",index " + index);
+            connection.send(APXY(index));
+        } else {
+            ICLogger.i("BPXY format error!");
+        }
+
+    }
+
+    public static StringMessage APXY(String id) {
+//设备响应:      IWAPXY,080835#
+        //080835:指令流水号
+        return genStringMessage(cmdMap.get(CMD_TYPE.APXY),
+                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXY))
+                        .append(CMDSPLIT).append(id)
+                        .append(CMDEND).toString());
+    }
+
+    /**
+     * 测量心率
+     *
+     * @param cmd
+     * @param connection
+     */
+    public void handleBPXL(String cmd, Connection connection) {
+        //IWBPXL,353456789012345,080835#
+        //说明:
+        //IW:标识符
+        //BPXL : 命令字符
+        //353456789012345:IMEI号,设备唯一ID
+        //080835 :指令流水号
+        //设备响应:      IWAPXL,080835#
+        //080835:指令流水号
+        String[] list = cmd.split(CMDSPLIT);
+        if (list.length == 3) {
+            String index = list[2];
+            String imei = list[1];
+            ICLogger.i("Handle BPXL IMEI " + imei + ",index " + index);
+            connection.send(APXL(index));
+        } else {
+            ICLogger.i("BPXL format error!");
+        }
+
+    }
+
+    public static StringMessage APXL(String id) {
+//设备响应:      IWAPXL,080835#
+        //080835:指令流水号
+        return genStringMessage(cmdMap.get(CMD_TYPE.APXL),
+                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.APXL))
+                        .append(CMDSPLIT).append(id)
+                        .append(CMDEND).toString());
+    }
+
+
+    //设置SOS号码
+    public static StringMessage AP12(String index, String phNum1, String phNum2, String phNum3) {
+        return genStringMessage("AP12",
+                new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP12))
+                        .append(CMDSPLIT).append(index)
+                        .append(CMDSPLIT).append(phNum1)
+                        .append(CMDSPLIT).append(phNum2)
+                        .append(CMDSPLIT).append(phNum3)
+                        .append(CMDEND).toString());
+    }
+
+    //设置SOS号码
+    public void handleBP12(Connection connection, String cmd, Runtime runtime) {
+        //    IWBP12,353456789012345,080835,135XXXXXXXX,135XXXXXXXX,135XXXXXXXX#
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        if (cmdlist.length >= 3) {
+            String index = cmdlist[2];
+            String phNum1 = cmdlist.length == 3 ? "" : cmdlist[3];
+            String phNum2 = cmdlist.length > 3 ? (cmdlist.length == 4 ? "" : cmdlist[4]) : "";
+            String phNum3 = (cmdlist.length > 4) ? (cmdlist.length == 5 ? "" : cmdlist[5]) : "";
+            ICLogger.i(new StringBuffer().append("get Emegency Numbs " + phNum1 + "," + phNum2 + "," + phNum3).toString());
+            connection.send(AP12(index, phNum1, phNum2, phNum3));
+
+            ArrayList<Contact> contactArray = new ArrayList<Contact>();
+//            if(Config.custom_branch_name.equals("AK")){
+//
+//                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", "07522312120"));
+//                if (!phNum1.isEmpty())
+//                    contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum1));
+//                if (!phNum2.isEmpty())
+//                    contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum2));
+//            }else {
+            if (!phNum1.isEmpty())
+                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", phNum1));
+            if (!phNum2.isEmpty())
+                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", phNum2));
+            if (!phNum3.isEmpty())
+                contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos3", phNum3));
+//            }
+            runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
+        } else {
+            ICLogger.i(" BP12 format error!");
         }
     }
 
+    //设置通讯录,白名单(10个)
+    public void handleBP14(Connection connection, String cmd, Runtime runtime) {
+//        IWBP14,867155030001063,357444,9b44529b|13554820016,,,,,,,,,
+/**
+ * IWBP14,353456789012345,080835,
+ * D3590D54|135xxxxxxxxxx,
+ * D3590D54|135xxxxxxxxxx,
+ * D3590D54|135xxxxxxxxxx,
+ * D3590D54|135xxxxxxxxxx,
+ * D3590D54|135xxxxxxxxxx,
+ * D3590D54|135xxxxxxxxxx,
+ * D3590D54|135xxxxxxxxxx,
+ * D3590D54|135xxxxxxxxxx,
+ * D3590D54|135xxxxxxxxxx,
+ * D3590D54|135xxxxxxxxxx#
+ */
+        String[] cmdlist = cmd.split(CMDSPLIT);
+        String[] phnums = new String[]{"", "", "", "", "", "", "", "", "", ""};
+        StringBuffer sb = new StringBuffer().append("recv phone Numbs ");
+        if (cmdlist.length >= 3) {
+            switch (cmdlist.length) {
+                case 13:
+                    phnums[9] = cmdlist[12];
+                    sb.append(phnums[9]).append(",");
+                case 12:
+                    phnums[8] = cmdlist[11];
+                    sb.append(phnums[8]).append(",");
+                case 11:
+                    phnums[7] = cmdlist[10];
+                    sb.append(phnums[7]).append(",");
+                case 10:
+                    phnums[6] = cmdlist[9];
+                    sb.append(phnums[6]).append(",");
+                case 9:
+                    phnums[5] = cmdlist[8];
+                    sb.append(phnums[5]).append(",");
+                case 8:
+                    phnums[4] = cmdlist[7];
+                    sb.append(phnums[4]).append(",");
+                case 7:
+                    phnums[3] = cmdlist[6];
+                    sb.append(phnums[3]).append(",");
+                case 6:
+                    phnums[2] = cmdlist[5];
+                    sb.append(phnums[2]).append(",");
+                case 5:
+                    phnums[1] = cmdlist[4];
+                    sb.append(phnums[1]).append(",");
+                case 4:
+                    phnums[0] = cmdlist[3];
+                    sb.append(phnums[0]).append(",");
+
+            }
+
+            String index = cmdlist[2];
+            ICLogger.i(sb.toString());
+            connection.send(AP14(index, phnums));
+            ArrayList<Contact> contactArray = new ArrayList<Contact>();
+
+            if (Config.custom_name.equals("YT")) {
+                ICLogger.i("=====add hotline 96885 ");
+                contactArray.add(new Contact(Contact.CATEGORY_CALL, runtime.getContextProxy().context.getResources().getString(R.string.hotline), "96885"));
+            }
+            for (int i = 0; i < phnums.length; i++) {
+                String[] tmp = phnums[i].split("\\|");
+                if (tmp.length == 2) {
+                    String name = Util.decodeUnicode2Utf8(tmp[0]);
+                    String phonem = tmp[1];
+                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length + " , name=" + name + ",-" + phonem);
+                    contactArray.add(new Contact(Contact.CATEGORY_CALL, name, phonem));
+                } else {
+                    ICLogger.i("phnums[" + i + "]=" + phnums[i] + ",split = " + tmp.length);
+
+                }
+            }
+//            contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));
+//            contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));
+//            contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));
+//            contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));
+
+            runtime.getDbHelper().saveContacts(contactArray, false, false, true, false, false, false);
+
+        } else {
+            ICLogger.i(" BP14 format error!");
+        }
+
+    }
+
+
+    public static StringMessage AP14(String index, String[] phnumbs) {
+        return genStringMessage("AP14", new StringBuffer(CMDHEADER).append(
+                cmdMap.get(CMD_TYPE.AP14))
+                .append(CMDSPLIT).append(index)
+                .append(CMDSPLIT).append(phnumbs[0])
+                .append(CMDSPLIT).append(phnumbs[1])
+                .append(CMDSPLIT).append(phnumbs[2])
+                .append(CMDSPLIT).append(phnumbs[3])
+                .append(CMDSPLIT).append(phnumbs[4])
+                .append(CMDSPLIT).append(phnumbs[5])
+                .append(CMDSPLIT).append(phnumbs[6])
+                .append(CMDSPLIT).append(phnumbs[7])
+                .append(CMDSPLIT).append(phnumbs[8])
+                .append(CMDSPLIT).append(phnumbs[9])
+                .append(CMDEND).toString());
+    }
+
 
     public void handleBP31(Connection connection, String cmd) {
 
index d403edb..5203947 100644 (file)
@@ -27,7 +27,6 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 
-import static com.enqualcomm.support.Constants.ACTION_HEATR_RATE_START;
 import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
 import static com.enqualcomm.support.bean.Contact.GROUP_ALL;
@@ -2021,7 +2020,6 @@ public class protocol_beehome {
                 handleBP84(cmd, mConnection);
                 ICLogger.i("收到服务器白名单命令");
                 break;
-
             case BP86:
                 //绑定解绑消息
                 handleBP86(cmd, mConnection, mRuntime);