fixed gator alarm parse.
authorTrillGates <williamtrillgates@gmail.com>
Thu, 29 Jul 2021 07:14:13 +0000 (15:14 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Thu, 29 Jul 2021 07:14:13 +0000 (15:14 +0800)
app/src/main/java/com/enqualcomm/support/utils/DBHelper.java
app/src/main/java/com/ic/protocols/protocol_gator.java
local.properties

index 7ce76e3..467a7ca 100644 (file)
@@ -719,6 +719,7 @@ public class DBHelper {
                 contentValues.put("RING", alarm.ring);
                 contentValues.put("STATUS", alarm.status);
                 contentValues.put("NAME", alarm.name);
+                ICLogger.d("alarm is == > " + alarm);
             }
             this.cr.bulkInsert(ICContentProvider.ALARM_URI, arrayOfContentValues);
         }
index 20f0c0a..4599ce4 100644 (file)
@@ -2,6 +2,7 @@ package com.ic.protocols;
 
 import android.content.ContentResolver;
 import android.content.ContentValues;
+import android.content.Intent;
 import android.net.Uri;
 import android.os.Environment;
 import android.os.Handler;
@@ -93,6 +94,7 @@ public class protocol_gator {
         AP31,//BP31回复
         AP32,//BP32回复
         AP34,//BP34回复
+        AP50,//app端发起视频通话到手表
         /*终端发起*/
         BP00,//开机对时
         BP01,//AP01返回
@@ -186,6 +188,7 @@ public class protocol_gator {
         cmdMap.put(CMD_TYPE.BP33, "BP33");
         cmdMap.put(CMD_TYPE.BP34, "BP34");
         cmdMap.put(CMD_TYPE.BP35, "BP35");
+        cmdMap.put(CMD_TYPE.AP50, "AP50");
     }
 
 
@@ -526,26 +529,26 @@ public class protocol_gator {
     //设置亲情号码
     public void handleAP06(Runtime ds, Connection connection, String cmd) {
         log("AP06 设置亲情号码 " + cmd);
-/*
-消息内容   Type取值:0-4
-0表示:其他人
-1表示:爸爸
-2表示:妈妈
-3表示:奶奶
-4表示:爷爷
-(013612345678AP06#number1#name1#type1#number2#name2#type2#number3#name3#type3#number4#...)最多不超过13组电话号码
-
-示例:
-(0094357593060153353AP06#13141516171#father#1#13141516172#mother#2#13141516173#grandma#3#13141516174#grandpa#4#13141516175#uncle#0,0000000000000005)
-设置控制号码为:
-father:13141516171,
-mother:13141516172,
-grandma:13141516173,
-grandpa:13141516174,
-uncle:13141516175
-响应:      失败:(002E0106357593060153353BP0600000000000000050)
-成功:(002E0106357593060153353BP0600000000000000051)
- */
+        /*
+        消息内容   Type取值:0-4
+        0表示:其他人
+        1表示:爸爸
+        2表示:妈妈
+        3表示:奶奶
+        4表示:爷爷
+        (013612345678AP06#number1#name1#type1#number2#name2#type2#number3#name3#type3#number4#...)最多不超过13组电话号码
+
+        示例:
+        (0094357593060153353AP06#13141516171#father#1#13141516172#mother#2#13141516173#grandma#3#13141516174#grandpa#4#13141516175#uncle#0,0000000000000005)
+        设置控制号码为:
+        father:13141516171,
+        mother:13141516172,
+        grandma:13141516173,
+        grandpa:13141516174,
+        uncle:13141516175
+        响应:      失败:(002E0106357593060153353BP0600000000000000050)
+        成功:(002E0106357593060153353BP0600000000000000051)
+         */
         StringBuffer sb = new StringBuffer();
         String cmdlist[] = cmd.split(",");
         if (cmdlist.length == 2) {
@@ -629,33 +632,57 @@ uncle:13141516175
     //设置闹钟
     public void handleAP09(Runtime runtime, Connection connection, String cmd) {
 
-// AP09,A,B,C,YYMMDD,HHMMSS
-//A:表示删除、添加(修改)闹钟功能,分别用0、1表示(类型%d)
-//B:闹铃索引(0-4)
-//C:表示闹钟类型(0-0x7F),如下:
-//0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
-//如果每天闹钟:0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
-// (0040357593060153353AP09,1,0,127,150728,152900,0000000000000008)
-//增加(修改)一条索引为0的闹铃,每天15:29:00响铃
-//(002E357593060153353AP09,0,0,0000000000000008)
-//删除一条索引为0的闹铃
+        // AP09,A,B,C,YYMMDD,HHMMSS
+        //A:表示删除、添加(修改)闹钟功能,分别用0、1表示(类型%d)
+        //B:闹铃索引(0-4)
+        //C:表示闹钟类型(0-0x7F),如下:
+        //0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
+        //如果每天闹钟:0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
+        // (0040357593060153353AP09,1,0,127,150728,152900,0000000000000008)
+        //增加(修改)一条索引为0的闹铃,每天15:29:00响铃
+        //(002E357593060153353AP09,0,0,0000000000000008)
+        //删除一条索引为0的闹铃
         String cmdlist[] = cmd.split(CMDSPLIT);
         if (cmdlist.length == 7) {
             String cmdindex = cmdlist[6];
             try {
                 String do_cmd = "";
                 int alarmindex = 0 /*alarm索引*/;
-                int alarmswitch = 0 /*1为开,0 为关*/;
+                int alarmswitch = 1 /*1为开,0 为关*/;
                 int alarmcount = 0 /*表示闹钟个数*/;
                 String alarmtime = "";//0900表示早上09:00
-                int repeat = 0;// //0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
+                StringBuilder repeat = new StringBuilder();// //0:一次,不重复;0x01:星期日;0x02:星期一;0x04:星期二;0x08:星期三;0x10:星期四;0x20:星期五;0x40星期六
                 // 0x01|0x02|0x04|0x08|0x10|0x20|0x40=0x7F
                 do_cmd = cmdlist[1];//0删除、1添加(修改)闹钟功能
-                alarmtime = cmdlist[4] + cmdlist[5]; //YYMMDDHHMMSS
+                alarmtime = cmdlist[5]; //HHMMSS
                 alarmindex = Integer.parseInt(cmdlist[2]);
-
+                String repeatStr = cmdlist[3];
+                //转成int,再转成2进进制,1表示开启,0表示不开启,111111表示7天都开启,0000001表示周一开启
+                int repeatInt = Integer.parseInt(repeatStr);
+                StringBuilder repeatCountStr = new StringBuilder(Integer.toBinaryString(repeatInt));
+                int repeatLen = 7 - repeatCountStr.length();
+                for (int i = 0; i < repeatLen; i++) {
+                    repeatCountStr.insert(0, "0");
+                }
+                String repeatStrRev = repeatCountStr.reverse().toString();
+                char[] chars = repeatStrRev.toCharArray();
+                for (int i = 0; i < chars.length; i++) {
+                    // ICLogger.d("item ==> " + chars[i]);
+                    //第一个如果是1,直接插入7
+                    if (i == 0 && '1' == chars[i]) {
+                        repeat.insert(0, "7");
+                    } else if ('1' == chars[i]) {
+                        repeat.append(i);
+                    }
+                }
+                if (repeat.length() == 0) {
+                    repeat.append("0");
+                }
+                ICLogger.d("repeatCount == > " + repeat.toString());
                 ArrayList<Alarm> alarmList = new ArrayList<>();
-                alarmList.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat, "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
+                if ("1".equals(do_cmd)) {
+                    alarmList.add(new Alarm("ST" + alarmtime.substring(0, 2) + "." + alarmtime.substring(2), "W" + repeat.toString(), "CON", alarmswitch == 1 ? "ON" : "OFF", "闹铃"));
+                }
                 //do clean and set alarm things
                 runtime.getDbHelper().saveAlarm(alarmList);
                 connection.send(BPXX_REPLY(runtime, CMD_TYPE.BP09, cmdindex, true));
@@ -674,6 +701,7 @@ uncle:13141516175
         } else {
             ICLogger.e("AP09 format error!");
         }
+
     }
 
     //静音设置
@@ -1475,6 +1503,10 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数
             case AP34://服务器回复语音接收
                 handleAP34(mRuntime, mConnection, cmd);
                 break;
+            case AP50://收到服务器视频请求
+                ICLogger.d("app端发起视频通话到手表...");
+                handleAP50(mRuntime, mConnection, cmd);
+                break;
 //            case AP14:// wifi定位包
 //                handleBP02(cmd);
 //                ICLogger.i("服务器收到定位AP02");
@@ -1695,9 +1727,38 @@ SOS报警上行WIFI、LBS混合定位数据,步数为255步,电量等级5,数
 
     }
 
+    /**
+     * 处理视频通话
+     * 00DA357593061269893AP50,
+     * 17688768961,亲情号
+     * tanmingxia0755@gmail.com;357593061269893,频道号
+     * 0065ad4f9aed8cf411aaef2e9a5fe4e2b7fIABuMKChZsPEdWZ+5Au/cONiTs7Vd6IoIjqOhXa9yA8Ng5r8vd0NvtUaIgCWg34FMhsCYQQAAQDuyQBhAgDuyQBhAwDuyQBhBADuyQBh
+     *
+     * @param mRuntime
+     * @param mConnection
+     * @param cmd
+     */
+    private void handleAP50(Runtime mRuntime, Connection mConnection, String cmd) {
+        ICLogger.d("handleAP50 ==> " + cmd);
+        String[] split = cmd.split(CMDSPLIT);
+        if (split.length == 4) {
+            //开启拨号UI
+            Intent intent = new Intent();
+            //在VideoCall里有个接收者,收到了消息会拉起视频通话
+            intent.setAction("com.ic.video_call.action.DO_CALL");
+            //调用声网SDK 加入频道的uid参数 手表端暂时固定为2
+            intent.putExtra("targetId", split[1]);
+            intent.putExtra("selfId", 2);
+            intent.putExtra("channel", split[2]);
+            intent.putExtra("token", split[3]);
+            mRuntime.getContextProxy().context.sendBroadcast(intent);
+        } else {
+            ICLogger.d("parse cmd error == > " + split.length);
+        }
+    }
+
 
     public boolean handleCmd(CMD_TYPE type, String cmd, byte[] bytes) {
-
         //只有需要传递二进制数据的才需要这个函数,目前只有BP28需要
         boolean ret = true;
         ICLogger.i("handleCmd " + type.name() + " " + cmd + " bytelen=" + bytes.length);
index 6594581..8bb0634 100644 (file)
@@ -5,4 +5,4 @@
 # For customization when using a Version Control System, please read the\r
 # header note.\r
 #Fri Jul 02 14:52:39 CST 2021\r
-sdk.dir=D\:\\android\\Android\\sdk\r
+sdk.dir=E\:\\Android\\Sdk\r