D15:
authordxy15521469561 <1731678236@qq.com>
Tue, 30 Jan 2024 08:54:13 +0000 (16:54 +0800)
committerdxy15521469561 <1731678236@qq.com>
Tue, 30 Jan 2024 08:54:13 +0000 (16:54 +0800)
视频通话优化
K01未优化

13 files changed:
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modVideoCall_juphoon.c
2.sdk/project/D10/D15XG_DT按键定义及闪灯.doc
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/btn_device_ec800m_d15.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/mgr_d15.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/sleep_test.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/main_init.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/ui.py
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/K5_DDY/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py
2.sdk/project/K5_DDY/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K5_DDY/sdk/services/microPython/ports/quectel/core/ui.py

index daf2f01..7c69d42 100644 (file)
@@ -218,7 +218,7 @@ void jrtc_handle(void * argv) {
                        HELIOS_JRTC_LOG("interrupt handle thread failed to get queue\n");
                        continue;
                }
-        HELIOS_JRTC_LOG("roomid:%s, ticket:%s, video:%x, camera:%x.", open_msg.roomid, open_msg.ticket, open_msg.video, open_msg.camera);
+        HELIOS_JRTC_LOG("roomid:%s, ticket:%s, video:%x, camera:%x.\n", open_msg.roomid, open_msg.ticket, open_msg.video, open_msg.camera);
 
         if (test == NULL) {
             test = jrtc_open(open_msg.roomid, open_msg.ticket, open_msg.video, open_msg.camera);
@@ -414,6 +414,10 @@ STATIC mp_obj_t mp_jrtc_close (mp_obj_t err_j)
         return mp_obj_new_int(ret);
     }
     else {
+        if(jrtc_state(test) == JRTC_CLOSED){
+            test = NULL;
+            return mp_obj_new_int(1);
+        }
         if (test == NULL) {
             return mp_obj_new_int(1);
         }
@@ -432,7 +436,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(mp_jrtc_close_obj, mp_jrtc_close);
 STATIC mp_obj_t mp_jrtc_get_state(void)
 {
     int sta = jrtc_state(test);
-
+    HELIOS_JRTC_LOG("mp_jrtc_get_state!!! %d",sta);
     return mp_obj_new_int(sta);
 }
 STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_jrtc_get_state_obj, mp_jrtc_get_state);
index 65ad2a3..7d7546c 100644 (file)
Binary files "a/2.sdk/project/D10/D15XG_DT\346\214\211\351\224\256\345\256\232\344\271\211\345\217\212\351\227\252\347\201\257.doc" and "b/2.sdk/project/D10/D15XG_DT\346\214\211\351\224\256\345\256\232\344\271\211\345\217\212\351\227\252\347\201\257.doc" differ
index 62de12c..5430080 100644 (file)
@@ -132,6 +132,9 @@ if EventMesh.model == "D15" :
             self.temp_auto = 0
 
             self.video_count = 0
+
+            self.sos_state = 0
+
             self.video_call_state = 0#视频通话拨进来还是拨出去的状态 1代表是正在拨进或者拨出去
 
             self.video_call_in_mode = 0 #0是语音 1是视频通话
@@ -264,7 +267,9 @@ if EventMesh.model == "D15" :
 
             EventMesh.subscribe("app_restart", self.app_restart)#远程重启
 
-        
+            EventMesh.subscribe("get_sos_state_out", self.get_sos_state_out)#正在拨打sos电话
+
+            EventMesh.subscribe("set_sos_state_out", self.set_sos_state_out)#清除在拨打sos电话
 
         def interInfo_queue_thread(self):
             while True:
@@ -539,6 +544,7 @@ if EventMesh.model == "D15" :
                 sos_flag = EventMesh.publish("get_sos_flag")
                 if sos_flag == 1:
                     self.call_state = 0
+                    EventMesh.publish("set_sos_state_out")
                     EventMesh.publish("set_sos_flag",0)
                     EventMesh.publish("set_sos_num",0)
                     EventMesh.publish("set_hangup_mode",0)
@@ -652,7 +658,7 @@ if EventMesh.model == "D15" :
             if NEW_ENABLE == 0:#新的按键功能定义
                 video_state = EventMesh.publish("get_video_state")
                 if video_state != 0:#视频通话打入或者接听后允许挂断视频通话
-                    EventMesh.publish("video_reject_cb",2)#挂断视频通话
+                    EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话
                     return
             EventMesh.publish("play_cur_time_event")#播报当前时间
             #播报当前时间
@@ -754,6 +760,7 @@ if EventMesh.model == "D15" :
                 sos_flag = EventMesh.publish("get_sos_flag")
                 if sos_flag == 1:
                     self.call_state = 0
+                    EventMesh.publish("set_sos_state_out")
                     EventMesh.publish("set_sos_flag",0)
                     EventMesh.publish("set_sos_num",0)
                     EventMesh.publish("set_hangup_mode",0)
@@ -798,24 +805,25 @@ if EventMesh.model == "D15" :
                     return
             
             video_state = EventMesh.publish("get_video_state")
-            print("video_state",video_state)
+            # print("video_state",video_state)
             
             self.video_count+=1
             if self.video_count >= 30 or video_state == 0:#一分钟挂断视频通话
-                EventMesh.publish("video_reject_cb",None)#挂断视频通话
+                EventMesh.publish("video_newwork_reject_cb",None)#挂断视频通话
                 self.video_call_state = 0
                 self.video_count=0
+                self.timer.stop()
                 return
             if video_state != 6 or self.video_call_state == 0:#视频电话呼入
                 EventMesh.publish("stop_led_timer")#设置参数
                 EventMesh.publish("close_timer_all")#
                 return
             if self.video_call_in_mode == 0:
-                EventMesh.publish("set_led_time_arg",[1,2,10*2,led_mode.FLASH_LIGHT_RED,10,5,led_mode.VIDEO_MEASURE_MODE])#測量成功
+                EventMesh.publish("set_led_time_arg",[1,2,10*2,led_mode.FLASH_LIGHT_RED,10,5,led_mode.VIDEO_MEASURE_MODE])#
                 str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_VOICE_IN"))
                 EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
             else:
-                EventMesh.publish("set_led_time_arg",[1,2,10*2,led_mode.FLASH_LIGHT_RED,10,5,led_mode.VIDEO_MEASURE_MODE])#測量成功
+                EventMesh.publish("set_led_time_arg",[1,2,10*2,led_mode.FLASH_LIGHT_RED,10,5,led_mode.VIDEO_MEASURE_MODE])#
                 str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_CALL_IN"))
                 EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件
 
@@ -827,7 +835,7 @@ if EventMesh.model == "D15" :
                     return
             EventMesh.publish("close_timer_all")#
             EventMesh.publish("close_wechat_btn_timer")#
-            # EventMesh.publish("set_led_time_arg",[1,2,10*10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功
+            # EventMesh.publish("set_led_time_arg",[1,2,10*10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#
             EventMesh.publish("clear_video_timer_state")
             EventMesh.publish("set_app_dev_end_state")
             if msg != None:
@@ -851,11 +859,12 @@ if EventMesh.model == "D15" :
                 if open_power == 0 or power_off == 1 :
                     return
             video_state = EventMesh.publish("get_video_state")#加入中
-            print("video_out_timer_cb video_state",video_state)
+            # print("video_out_timer_cb video_state",video_state)
             
             self.video_count+=1
             if self.video_count >= 30 or video_state == 0:#40s挂断视频通话 对方无响应
-                EventMesh.publish("video_reject_cb",None)#挂断视频通话
+                self.timer.stop()
+                EventMesh.publish("video_newwork_reject_cb",None)#挂断视频通话
                 self.video_call_state = 0
                 self.video_count = 0
                 
@@ -1030,9 +1039,9 @@ if EventMesh.model == "D15" :
                 if power_off == 1:
                     return
             self.sos_phone_num = ''
-            # EventMesh.debug_log("sos_out_call_center_cb",msg)
+            EventMesh.debug_log("sos_out_call_center_cb",msg)
             if self.call_state == 0:
-            
+                self.sos_state = 0
                 EventMesh.publish("close_timer_all")#
                 if msg == None:
                     str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))
@@ -1040,7 +1049,7 @@ if EventMesh.model == "D15" :
                     # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)
                 else:
                     sos_state =  EventMesh.publish("get_dev_state")
-
+                    self.sos_state = 1
                     tmp = 1 << 16
                     sos_state = sos_state|tmp #第21位=1
                     EventMesh.publish("set_dev_state",sos_state)
@@ -1055,14 +1064,21 @@ if EventMesh.model == "D15" :
                     
                     
         def sos_time_out_phone(self, msg):#30s超时未打通或者信号不好则重新拨打
+            self.sos_state = 0
             sos_flag = EventMesh.publish("get_sos_flag")
             if sos_flag == 1:
                 if self.call_state == 0:
+                    EventMesh.publish("set_sos_state_out")
                     EventMesh.publish("set_sos_info_call") 
                     
         def sos_call_out_phone(self, msg):#电话拨出去
             voiceCall.callStart(self.sos_phone_num)
         
+        def get_sos_state_out(self, event, msg):#正在拨打sos电话
+            return self.sos_state
+        
+        def set_sos_state_out(self, event, msg):#清除在拨打sos电话
+            self.sos_state = 0
 
         def call_test_event(self, event, msg):
             voiceCall.callStart(str("10086"))
@@ -2629,7 +2645,7 @@ if EventMesh.model == "D15" :
                     return
             
             self.KeyCall1_status = int(args[1]) 
-            EventMesh.txt_log('key17_extint_cb :{}'.format(args))
+            # EventMesh.debug_log('key17_extint_cb :{}'.format(args))
             if self.KeyCall1_status == 0:
                 self.KeyCall1_status = 1
             else:
@@ -2640,29 +2656,29 @@ if EventMesh.model == "D15" :
                     video_state = EventMesh.publish("get_video_state")
                     if video_state != 0:#视频通话打入或者接听后允许挂断视频通话
                         if video_state != 6:#6是app打手表需要接通
-                            EventMesh.publish("video_reject_cb",2)#挂断视频通话
+                            EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话
                             return
             self.WeChatKey_status = self.wechatKey.read_level()
             self.GPIO26_status = self.pwk_key26.read_level()
             self.KeyCall2_status = self.extint_19.read_level()
             self.sosKey_status = self.sosKey.read_level()
-            # EventMesh.debug_log('key17_extint_cb1',args,self.KeyCall2_status,self.Keycall2_press,self.Keycall2_long_press)
-            # EventMesh.debug_log('key17_extint_cb2',self.Keycall2_press) # args[0]:gpio号 args[1]:上升沿或下降沿
-
-            EventMesh.debug_log('key17_extint_cb',args,self.KeyCall2_status,self.WeChatKey_status,self.GPIO26_status,self.KeyCall1_status,self.sosKey_status) # args[0]:gpio号 args[1]:上升沿或下降沿
+            # EventMesh.debug_log('key17_extint_cb',args,self.KeyCall2_status,self.WeChatKey_status,self.GPIO26_status,self.KeyCall1_status,self.sosKey_status) # args[0]:gpio号 args[1]:上升沿或下降沿
             if self.WeChatKey_status != 0 and self.GPIO26_status != 0 and self.KeyCall2_status != 0 and self.sosKey_status != 0:
                 if self.KeyCall1_status == 0:#按下
                     if NEW_ENABLE == 0:#新的按键功能定义
                         video_state = EventMesh.publish("get_video_state")
                         if video_state != 0:#视频通话打入或者接听后允许挂断视频通话
-                            if video_state != 6:#6是app打手表需要接通
-                                EventMesh.publish("video_reject_cb",2)#挂断视频通话
-                                self.Keycall1_press_count=0
-                                self.wechatKey_timer.stop()
-                                self.pwkey_timer.stop()
-                                self.sosKey_timer.stop()
-                                self.Keycall2_timer.stop()
-                                self.Keycall1_timer.stop()
+                                if video_state == 6:#6 是app拨打手表 1 是手表打app 3 是正在视频通话中 0 关闭只有第一次视频通话打入才允许接听 接通之后不允许接听了
+                                    EventMesh.publish("video_answer_cb")
+                                else:
+                                    EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话
+                                    self.Keycall1_press_count=0
+                                    self.wechatKey_timer.stop()
+                                    self.pwkey_timer.stop()
+                                    self.sosKey_timer.stop()
+                                    self.Keycall2_timer.stop()
+                                    self.Keycall1_timer.stop()
+                            
                                 return
                     EventMesh.publish("close_wechat_btn_timer")
                     if self.Keycall1_press == 0 :
@@ -2790,7 +2806,7 @@ if EventMesh.model == "D15" :
             elif self.Keycall1_press_count == 1:#
                 self.Keycall1_press_count = 0
                 EventMesh.publish("stop_led_timer")#设置参数
-                print("video_state call",video_state)
+                # print("video_state call",video_state)
                 # if video_state != 0:
                 #     if video_state == 6:#6 是app拨打手表 1 是手表打app 3 是正在视频通话中 0 关闭只有第一次视频通话打入才允许接听 接通之后不允许接听了
                 #         EventMesh.publish("video_answer_cb")
@@ -2806,7 +2822,7 @@ if EventMesh.model == "D15" :
 
 
         def key19_extint_cb(self,args):#call 2
-            EventMesh.txt_log('key19_extint_cb :{}'.format(args))
+            # EventMesh.txt_log('key19_extint_cb :{}'.format(args))
             power_off = EventMesh.publish("get_power_off_state")#获取关机标识
             open_power = EventMesh.publish("get_power_on_state")#获取开机标识
             dev_app_mode = EventMesh.publish("get_dev_app_mode")
@@ -2833,13 +2849,12 @@ if EventMesh.model == "D15" :
                     video_state = EventMesh.publish("get_video_state")
                     if video_state != 0:#视频通话打入或者接听后允许挂断视频通话
                         if video_state != 6:#6是app打手表需要接通
-                            EventMesh.publish("video_reject_cb",2)#挂断视频通话
+                            EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话
                             return
             self.WeChatKey_status = self.wechatKey.read_level()
             self.GPIO26_status = self.pwk_key26.read_level()
-            # self.KeyCall1_status = self.extint_17.read_level()
-            # self.sosKey_status = self.sosKey.read_level()
-            # EventMesh.debug_log('key19_extint_cb ',args,self.KeyCall1_status,self.GPIO26_status,self.WeChatKey_status,self.sosKey_status,self.KeyCall2_status,self.GPIO26_status) # args[0]:gpio号 args[1]:上升沿或下降沿
+            self.KeyCall1_status = self.extint_17.read_level()
+            self.sosKey_status = self.sosKey.read_level()
             # EventMesh.debug_log('self.KeyCall1_status :{}',args,self.KeyCall1_status) # args[0]:gpio号 args[1]:上升沿或下降沿
             if self.WeChatKey_status != 0 and self.GPIO26_status != 0 and self.KeyCall1_status != 0 and self.sosKey_status != 0:
                 if self.KeyCall2_status == 0:#按下
@@ -2964,7 +2979,7 @@ if EventMesh.model == "D15" :
             elif self.Keycall2_press_count == 1:#
                 self.Keycall2_press_count = 0
                 video_state = EventMesh.publish("get_video_state") 
-                print("video_state ",video_state)
+                # print("video_state ",video_state)
                 if video_state != 0:
                     if video_state == 6:#6 是app拨打手表 1 是手表打app 3 是正在视频通话中 0 关闭只有第一次视频通话打入才允许接听 接通之后不允许接听了
                         EventMesh.publish("video_answer_cb")
@@ -2983,7 +2998,7 @@ if EventMesh.model == "D15" :
 
 
         def pwk_extint_cb(self,args):#侧边按键
-            EventMesh.txt_log('pwk_extint_cb :{}'.format(args))
+            # EventMesh.txt_log('pwk_extint_cb :{}'.format(args))
             open_power = EventMesh.publish("get_power_on_state")#获取开机标识
             open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识
             video_state = EventMesh.publish("get_video_state")
@@ -3012,33 +3027,16 @@ if EventMesh.model == "D15" :
                             print("pwk_extint_cb")
                             # EventMesh.publish("video_answer_cb")
                         else:
-                            EventMesh.publish("video_reject_cb",2)#挂断视频通话
+                            EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话
                         return
                     
             self.WeChatKey_status = self.wechatKey.read_level()
-            # self.KeyCall2_status = self.extint_17.read_level()
+            self.KeyCall2_status = self.extint_17.read_level()
             self.KeyCall1_status = self.extint_19.read_level()
-            # self.sosKey_status = self.sosKey.read_level()
-            # EventMesh.debug_log('pwk_extint_cb ',args,self.GPIO26_status,self.WeChatKey_status,self.sosKey_status,self.KeyCall1_status,self.KeyCall2_status) # args[0]:gpio号 args[1]:上升沿或下降沿
-            # self.GPIO26_status = ~args[1]
-            # EventMesh.debug_log('### GPIO26_status  {} self.GPIO26_status :{}'.format(args,self.GPIO26_status)) # args[0]:gpio号 args[1]:上升沿或下降沿
+            self.sosKey_status = self.sosKey.read_level()
+
             if self.WeChatKey_status != 0 and self.KeyCall1_status != 0 and self.sosKey_status != 0 and self.KeyCall2_status != 0:
                 if self.GPIO26_status == 0:#按下
-                    # if NEW_ENABLE == 0:#新的按键功能定义
-                    #     video_state = EventMesh.publish("get_video_state")
-                    #     if video_state != 0:#视频通话打入或者接听后允许挂断视频通话
-                    #         if video_state == 6:#6是app打手表需要接通
-                    #             pass
-                    #             # EventMesh.publish("video_answer_cb")
-                    #         else:
-                    #             EventMesh.publish("video_reject_cb",2)#挂断视频通话
-                    #         self.Keycall1_press_count=0
-                    #         self.wechatKey_timer.stop()
-                    #         self.pwkey_timer.stop()
-                    #         self.sosKey_timer.stop()
-                    #         self.Keycall2_timer.stop()
-                    #         self.Keycall1_timer.stop()
-                    #         return
                     EventMesh.publish("close_wechat_btn_timer")
                     if self.pwkey_press == 0 :
                         self.aud.stop()  #播放声音 
@@ -3227,6 +3225,7 @@ if EventMesh.model == "D15" :
                     if flag == 1:#如果是sos电话拨出去
                         sos_flag = EventMesh.publish("get_sos_flag")
                         if sos_flag == 1:
+                            EventMesh.publish("set_sos_state_out")
                             EventMesh.publish("set_sos_flag",0)
                             EventMesh.publish("set_sos_num",0)
                             EventMesh.publish("set_hangup_mode",0)
@@ -3255,9 +3254,9 @@ if EventMesh.model == "D15" :
             self.WeChatKey_status = self.wechatKey.read_level()
             self.GPIO26_status = self.pwk_key26.read_level()
             self.KeyCall1_status = self.extint_19.read_level()
-            # self.KeyCall2_status = self.extint_17.read_level()
+            self.KeyCall2_status = self.extint_17.read_level()
 
-            EventMesh.debug_log('sosKey_extint_cb ',args,self.sosKey_status,self.WeChatKey_status,self.KeyCall1_status,self.KeyCall2_status,self.GPIO26_status) # args[0]:gpio号 args[1]:上升沿或下降沿
+            # EventMesh.debug_log('sosKey_extint_cb ',args,self.sosKey_status,self.WeChatKey_status,self.KeyCall1_status,self.KeyCall2_status,self.GPIO26_status) # args[0]:gpio号 args[1]:上升沿或下降沿
             if self.WeChatKey_status != 0 and self.GPIO26_status != 0 and self.KeyCall1_status != 0 and self.KeyCall2_status != 0:
                 if self.sosKey_status == 0:#按下
                     if NEW_ENABLE == 0:#新的按键功能定义
@@ -3265,7 +3264,7 @@ if EventMesh.model == "D15" :
                         if video_state != 0:#视频通话打入或者接听后允许挂断视频通话
                             if video_state == 6 or get_video == 0:
                                 EventMesh.debug_log("sosKey_extint_cb",get_video,video_state)
-                                EventMesh.publish("video_reject_cb",2)#挂断视频通话
+                                EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话
                                 self.sosKey_press_count=0
                                 self.wechatKey_timer.stop()
                                 self.pwkey_timer.stop()
@@ -3374,7 +3373,7 @@ if EventMesh.model == "D15" :
         # 4、短按六次,播报IMEI号
         # 5、短按十次,解绑APP,同时恢复出厂设置
         def sosKey_timeout_cb(self, data):#
-            print("sosKey_timeout_cb",self.sosKey_press_count)
+            # print("sosKey_timeout_cb",self.sosKey_press_count)
             open_power = EventMesh.publish("get_power_on_state")#获取开机标识
             open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识
             if open_power != None and open_power_off != None:
@@ -3486,12 +3485,23 @@ if EventMesh.model == "D15" :
                     pass
                 elif self.sosKey_press_count == 3:#视频通话
                     self.sosKey_press_count = 0
-                    
+                    battery = EventMesh.publish("screen_get_battery")
+                    if battery != None:
+                        if battery[0] != "1":#在充电得时候
+                            return
+                            pass
                     call_state = EventMesh.publish("get_call_state")
                     battery = EventMesh.publish("screen_get_battery")
                     if call_state == None:
                         call_state = 0
-                    if call_state == 0: 
+                    if call_state == 0:
+                        flag = EventMesh.publish("get_call_state") 
+                        fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识
+                        usb_state = EventMesh.publish("get_usb")#
+                        video_state = EventMesh.publish("get_video_state")
+                        if flag != 0 or usb_state == 1 or usb_state == 3 or fall_down != 0:
+                            return
+                            pass
                         EventMesh.publish("stop_led_timer")#设置参数
                         EventMesh.publish("call_viode_book_num")
                     pass
@@ -3536,13 +3546,13 @@ if EventMesh.model == "D15" :
                     video_state = EventMesh.publish("get_video_state")
                     if video_state != 0:#视频通话打入或者接听后允许挂断视频通话
                         if video_state != 6:#6是app打手表需要接通
-                            EventMesh.publish("video_reject_cb",2)#挂断视频通话
+                            EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话
                             return
                     
-            # self.sosKey_status = self.sosKey.read_level()
+            self.sosKey_status = self.sosKey.read_level()
             self.GPIO26_status = self.pwk_key26.read_level()
             self.KeyCall1_status = self.extint_19.read_level()
-            # self.KeyCall2_status = self.extint_17.read_level()
+            self.KeyCall2_status = self.extint_17.read_level()
             # EventMesh.debug_log('wechatKey_extint_cb ',args,self.WeChatKey_status,self.sosKey_status,self.KeyCall1_status,self.KeyCall2_status,self.GPIO26_status) # args[0]:gpio号 args[1]:上升沿或下降沿
             # if self.sosKey_status != 0 and self.GPIO26_status != 0:
             if self.sosKey_status != 0 and self.GPIO26_status != 0 and self.KeyCall1_status != 0 and self.KeyCall2_status != 0:
@@ -3550,7 +3560,7 @@ if EventMesh.model == "D15" :
                     video_state = EventMesh.publish("get_video_state")
                     if video_state != 0:#视频通话打入或者接听后允许挂断视频通话
                         if video_state != 6:#6是app打手表需要接通
-                            EventMesh.publish("video_reject_cb",2)#挂断视频通话
+                            EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话
                             self.wechatKey_press_count = 0
                             self.wechatKey_timer.stop()
                             self.pwkey_timer.stop()
@@ -3847,7 +3857,7 @@ if EventMesh.model == "D15" :
                     self.wechatKey_press_count = 0
                     EventMesh.publish("stop_led_timer")#设置参数
                     video_state = EventMesh.publish("get_video_state") 
-                    print("video_state call",video_state)
+                    # print("video_state call",video_state)
                     if video_state != 0:
                         if video_state == 6:#2 是app拨打手表 1 是手表打app 3 是正在视频通话中 0 关闭只有第一次视频通话打入才允许接听 接通之后不允许接听了
                             EventMesh.publish("video_answer_cb")
index 52bed14..e30c868 100644 (file)
@@ -572,6 +572,7 @@ if EventMesh.model == "D15":
             sos_flag = EventMesh.publish("get_sos_flag")
             EventMesh.debug_log('voicecall sos_flag',sos_flag)
             if sos_flag == 0 :
+                EventMesh.publish("set_sos_state_out")
                 EventMesh.publish("set_sos_num",0)
             else:
                 num = EventMesh.publish("get_sos_num")
@@ -695,6 +696,7 @@ if EventMesh.model == "D15":
                 sos_flag = EventMesh.publish("get_sos_flag")
                 if sos_flag == 1:
                     sos_flag = 0
+
                     EventMesh.publish("set_sos_flag",0)
 
                 EventMesh.debug_log('voicecall connected, PhoneNO.: ', args[6])
@@ -705,7 +707,10 @@ if EventMesh.model == "D15":
                 b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了
                 if b == True and size_len > 11:
                     tmp = tmp[size_len-11:]
-                EventMesh.publish("set_call_state",3) 
+                if EventMesh.publish("get_call_state") == 2:#打通了才可设置状态 防止挂断太及时,又拨出去了
+                    EventMesh.publish("set_call_state",3) 
+                else:
+                    EventMesh.publish("set_call_state",0) 
                 # EventMesh.publish("load_screen", {"screen": "on_call","meta":str(tmp)})
 
         elif args[0] == 12:
@@ -725,6 +730,7 @@ if EventMesh.model == "D15":
                 if flag == 2:
                     EventMesh.publish("stop_led_timer")#设置参数
                     EventMesh.publish("close_timer_all")#
+                EventMesh.publish("set_sos_state_out")
                 EventMesh.publish("set_call_state",0) 
                 EventMesh.debug_log('voicecall disconnect end')
                 
@@ -2714,7 +2720,8 @@ if EventMesh.model == "D15":
         def get_imei(self, topic, msg):
             if not self.imei:
                 self.imei = modem.getDevImei()
-            self.imei = "876226002021444"#视频通话测试账号
+            # self.imei = "876226002021444"#视频通话测试账号
+            # self.imei = "826226524724963"#视频通话测试账号
             # self.imei = "860132060128634" #860132060128634
             return self.imei
 
@@ -4285,7 +4292,7 @@ if EventMesh.model == "D15":
 
         def set_sos_flag(self, event, msg): 
             self.sos_flag = msg
-        
+            EventMesh.publish("set_sos_state_out")
             if self.sos_flag == 1:
                 number = EventMesh.publish("get_dial_sos_number")
             
@@ -4302,15 +4309,31 @@ if EventMesh.model == "D15":
 
         def set_callnumer_cb(self, event, msg):
             if self.sos_flag == 1:
+                EventMesh.publish("set_sos_state_out")
                 self.callnumer = msg
                 self.call_timer.start(5000, 0, self.call_timer_cb)#延迟10S 继续拨打
 
         def call_timer_cb(self, *args, **kwargs):
+            EventMesh.publish("set_sos_state_out")
+            flag = EventMesh.publish("get_call_state") 
+            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识
+            video_state = EventMesh.publish("get_video_state")
+            if flag != 0 or fall_down != 0 or video_state != 0:#防止不会被中断不会继续拨打sos号码正在通话或者打电话中,跌倒报警 视频通话中不允许拨打sos
+                if self.sos_flag == 1:
+                    self.call_timer.start(5000, 0, self.call_timer_cb)#延迟10S 继续拨打
+                    return
+                else:
+                    self.call_timer.stop()
+                    return
+
             if self.sos_flag == 1:
+                self.call_timer.stop()
                 EventMesh.publish("save_phonename",str(self.callnumer))
                 EventMesh.publish("save_phonenum",str(self.callnumer))
                 phone_num = EventMesh.publish("get_phonenum")  
                 EventMesh.publish("sos_out_call_center_cb",phone_num)#电话拨出去
+            else:
+                self.call_timer.stop()
         
         def close_call_time(self, event, msg): 
             self.call_timer.stop()
@@ -5035,7 +5058,7 @@ if EventMesh.model == "D15":
             self.video_timer = 0
 
             self.video_init = 0
-
+            self.video_network_end = 0 #网络不好或者信号较差菊风底层挂断当前视频通话
             self.videoInfo_queue = Queue()
             _thread.stack_size(10*1024)
             _thread.start_new_thread(self.videoInfo_queue_thread, ())
@@ -5089,9 +5112,10 @@ if EventMesh.model == "D15":
 
             EventMesh.subscribe("app_rtalk_cb",self.app_rtalk_cb)#app拒绝视频通话
 
-            EventMesh.subscribe("video_answer_cb",self.video_answer_cb)#æ\89\8b表端æ\8e¥å\90¬è§\86é¢\91é\80\9aè¯\9d
+            EventMesh.subscribe("video_answer_cb",self.video_answer_cb)#接听视频通话
 
-            EventMesh.subscribe("video_reject_cb",self.video_reject_cb)#手表端挂断视频通话
+            EventMesh.subscribe("video_newwork_reject_cb",self.video_newwork_reject_cb)#端挂断视频通话
+            EventMesh.subscribe("video_dev_reject_cb",self.video_dev_reject_cb)#手表端挂断视频或者语音通话
 
             EventMesh.subscribe("video_no_network",self.video_no_network)#打着突然掉网或者未绑定设备 每10s检测一次
 
@@ -5126,7 +5150,7 @@ if EventMesh.model == "D15":
 
         def call_viode_book_num(self, event, msg):#默认拨打视频通话列表第一个
             self.video_led_state = 0
-            EventMesh.publish("set_vedio_init")
+            self.video_network_end = 0
             EventMesh.publish("clear_video_timer_state")
             if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机
                 if len(self.videobook) != 0:#已联网未添加账号
@@ -5189,6 +5213,17 @@ if EventMesh.model == "D15":
                 call_type = EventMesh.publish("get_vedio_call_type")#呼叫类型
                 tokens_data = EventMesh.publish("get_vedio_tokens_data")#tookens数据#云米平台不需要tokens
             
+                # jrtc.init()
+                # jrtc.config_server("119.3.54.56:1050")
+                # jrtc.config("e99697f86096a74dbf635096", "us145a", "1234567890abcdef", "")
+                # jrtc.open("us144a", "",[],[15,120,240,320])
+                # jrtc.set_cam_angle(jrtc.CAM_ROTATE_180)
+                # jrtc.init()
+                # jrtc.config_server("119.3.54.56:1050")
+                # jrtc.config("e99697f86096a74dbf635096", "us144a", "1234567890abcdef", "")
+                # jrtc.open("us145c", "",[],[15,120,240,320])
+
+                
                 uid = str(call_id)
                 ticket = str(meet_id)
 
@@ -5196,7 +5231,7 @@ if EventMesh.model == "D15":
                 jrtc.init()
                 # jrtc.config_server("119.3.54.56:1050")#测试服地址
                 tokens = str(tokens_data)
-                appkey = "efe9f8800a39d96244234097"#小见
+                appkey = "efe9f8800a39d96244234097"#
                 uid_key = "25v9C652123QL3N8"
 
                 # appkey = "249e7d505516af0a7ed44097"
@@ -5214,7 +5249,7 @@ if EventMesh.model == "D15":
                     jrtc.open(uid,ticket,[],[15,120,240,320])
                 
                 
-                jrtc.set_rotate(jrtc.CAM_ROTATE_90)
+                jrtc.set_cam_angle(jrtc.CAM_ROTATE_180)
                 
                 self.video_count = 0
                 self.video_state_time = 0
@@ -5230,7 +5265,6 @@ if EventMesh.model == "D15":
             video_state = EventMesh.publish("get_video_state")#这个函数获取为了防止不进回调不置0
             get_video_state = EventMesh.publish("get_video_in_out_state")
             dev_mode = EventMesh.publish("get_dev_app_mode")
-            # print("call_state",call_state,video_state)
             if self.video_led_state == 1 or self.video_timer == 1:#手表挂断不在进入
                 self.timer.stop()
                 return
@@ -5243,14 +5277,13 @@ if EventMesh.model == "D15":
                             self.video_state = 0
                             self.video_state_time = 0
                             self.timer.stop()
-                            EventMesh.publish("video_reject_cb",5)#挂断视频通话
+                            EventMesh.publish("video_newwork_reject_cb",5)#挂断视频通话
                             return
 
                 if call_state == 5:#已经接通出画面了
                     self.video_count = 0
                     self.video_answer = 4
                     EventMesh.publish("set_video_in_out_state",0)
-                    # self.timer.stop()
                     if self.video_state_time == 0:
                         self.video_state_time = 1
                         EventMesh.publish("stop_led_timer")#设置参数
@@ -5271,17 +5304,15 @@ if EventMesh.model == "D15":
                             if get_video_state == 0 and call_state != 4 and self.video_answer == 0:
                                 EventMesh.publish("video_answer_mode_timer_cb",3)#
                         
-                        
                     if call_state == 0:
-                        # print("no call_state")
                         self.timer.stop()
-                        EventMesh.publish("video_reject_cb",1)
+                        EventMesh.publish("video_newwork_reject_cb",1)
             else:
                 self.video_state_time = 0
                 self.video_count = 0
                 self.timer.stop()
                 EventMesh.publish("set_video_state", 0)
-                EventMesh.publish("video_reject_cb",1)
+                EventMesh.publish("video_newwork_reject_cb",1)
 
         def video_waite_event_time_cb(self,*argc):#正在接听中,请稍候
             EventMesh.publish("video_answer_mode_timer_cb",1)
@@ -5293,7 +5324,7 @@ if EventMesh.model == "D15":
         def video_no_network(self,event,msg):#视频通话无网络
             if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#
                 if EventMesh.publish("get_video_state") != 0:
-                    EventMesh.publish("video_reject_cb",None)
+                    EventMesh.publish("video_newwork_reject_cb",None)
                 pass
 
 
@@ -5306,19 +5337,23 @@ if EventMesh.model == "D15":
 
 
         def video_answer_cb(self,event,msg):#手表端拒绝视频通话
-            EventMesh.publish("set_video_in_out_state",0)
             EventMesh.publish("stop_led_timer")#关闭亮灯模式
             EventMesh.publish("close_timer_all")##关闭统一的计时器
-            EventMesh.publish("set_vedio_init")#
+            EventMesh.publish("set_video_in_out_state",0)
             EventMesh.publish("open_vedio_infor")#启动视频通话的SDK相关配置
 
         
         def clear_video_timer_state(self,event,msg):#清除标识
             self.video_timer = 0
-
-        def video_reject_cb(self,event,msg):#手表端挂断视频通话
-            if self.video_timer == 0:
-                # print("close_jrtc_event start",self.video_timer)
+            self.video_network_end = 0
+        
+        def video_newwork_reject_cb(self,event,msg):#信号不好底层SDK挂断
+            if self.video_led_state != 2:#2表示app挂断
+                if self.video_network_end == 1:
+                    return
+                self.video_network_end = 1
+                self.video_timer = 1
+                self.video_init = 0
                 EventMesh.publish("stop_led_timer")#设置参数
                 EventMesh.publish("close_timer_all")#
                 EventMesh.publish("close_video_timer")
@@ -5329,23 +5364,32 @@ if EventMesh.model == "D15":
                 meet_id = str(EventMesh.publish("get_vedio_meet_id"))#
                 call_type = int(EventMesh.publish("get_vedio_call_type"))#
                 
-                # print("video_reject_cb1111",self.video_led_state,self.video_answer)
-                # print("close_jrtc_event ens")
-                if msg == 2:
-                    self.video_led_state = 1
-                    EventMesh.publish("dev_video_end_timer_cb")#手表设备已挂断
-                else:
-                    self.video_led_state = 0
-                    EventMesh.publish("video_answer_mode_timer_cb",4)##提示对方已挂断
-                EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
-                self.video_timer = 1
-                call_state = jrtc.get_state()
-                # print("close_jrtc_event ens1",call_state)
                 jrtc.close(0)
-                # print("close_jrtc_event ens2",call_state)
                 
+                if self.video_led_state == 0:
+                    EventMesh.publish("video_answer_mode_timer_cb",4)#提示对方已挂断
+                    EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+
+
+        def video_dev_reject_cb(self,event,msg):#手表主动挂断
+            if self.video_timer == 0:
+                self.video_init = 0
+                EventMesh.publish("stop_led_timer")#设置参数
+                EventMesh.publish("close_timer_all")#
+                EventMesh.publish("close_video_timer")
+                EventMesh.publish("set_video_state", 0)
+                EventMesh.publish("set_dev_app_mode", 0)
+                EventMesh.publish("set_video_in_out_state",0)
+                call_id = str(EventMesh.publish("get_vedio_call_id"))#
+                meet_id = str(EventMesh.publish("get_vedio_meet_id"))#
+                call_type = int(EventMesh.publish("get_vedio_call_type"))#
+
+                self.video_led_state = 1
+                jrtc.close(0)
+                self.video_timer = 1
+                EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+
 
-               
             
         def set_app_dev_end_state(self,event,msg):#app拒绝视频通话
             self.video_led_state = 0 #手表挂断不在进入
@@ -5356,38 +5400,30 @@ if EventMesh.model == "D15":
         def app_rtalk_cb(self,event,msg):#app拒绝视频通话
             dev_mode = EventMesh.publish("get_dev_app_mode")#如果是app主动挂断需要提示音频文件
             video_state = EventMesh.publish("get_video_state")#清除视频通话状态
-            # print("app_rtalk_cb return 1",self.video_led_state,dev_mode,video_state)
-            if self.video_led_state == 1 or self.video_timer == 1:#手表挂断不在进入
+            if self.video_led_state != 0 or self.video_timer != 0:#手表挂断不在进入
                 return
-            # print("app_rtalk_cb return 2",self.video_led_state,dev_mode,video_state)
+            
+            self.video_init = 0
             self.video_timer = 1
-            self.video_led_state = 0
+            self.video_led_state = 2
             EventMesh.publish(constants.EVENT.SYSTEM_UP)#
-            
-
-            video_in_out_state = EventMesh.publish("get_video_in_out_state")#设置参数
-            if video_in_out_state != 0:
-                EventMesh.publish("stop_led_timer")#设置参数
-                EventMesh.publish("close_timer_all")#
-                EventMesh.publish("set_video_in_out_state",0)#清除视频通话拨进还是拨出的状态
 
+            EventMesh.publish("stop_led_timer")#设置参数
+            EventMesh.publish("close_timer_all")#
             EventMesh.publish("close_video_timer")
-            # print("app_rtalk_cb ",dev_mode,self.video_led_state,video_state)
             EventMesh.publish("set_dev_app_mode", 0)
             EventMesh.publish("set_video_state",0)#清除视频通话状态
             EventMesh.publish("set_video_in_out_state",0)#清除视频通话拨进还是拨出的状态
-            
             EventMesh.publish("video_answer_mode_timer_cb",4)##提示对方已挂断
-            video_state = EventMesh.publish("get_video_state")
-            # print("app_rtalk_cb end",video_state)
+            jrtc.close(0)
 
     def jrtc_cb(close_sta):#注册回调
         print("jrtc callback:", close_sta)
         if close_sta == 0 or close_sta == 1:
             EventMesh.publish("set_video_state", 0)
             EventMesh.publish("set_video_in_out_state",0)
-            # if EventMesh.publish("get_app_dev_end_state") == 0:
-            #     jrtc.close(0)
+            EventMesh.publish("set_vedio_init")
+            jrtc.close(0)
 
     jrtc.set_callback(jrtc_cb)
 
index 5ca1eb4..be0fd6e 100644 (file)
@@ -301,7 +301,10 @@ class SockManager(Abstract):
                                             EventMesh.publish("set_com",self.server_port)
                                         EventMesh.publish("set_new_key", str(secretKey))#获取pid和key
                                         EventMesh.publish("set_new_pid",str(pid))#获取pid和key
-                                        self.reconnect_timer_cb()#重连设备
+                                        # self.reconnect_timer_cb()#重连设备
+                                        print("self.reconnect_flag",self.reconnect_flag)
+                                        self.reconnect_flag = 0
+                                        self.reconnect()#重连设备
                 EventMesh.publish("set_server_state",1)#获取修改服务器状态
         
         
@@ -616,7 +619,9 @@ class PING_ProtoCol(ProtoCol):
         data_tmp = data_tmp.split(']')[0] #去掉]   
         EventMesh.publish(constants.EVENT.SET_PING, data_tmp.split(',')[1])
         if EventMesh.model == 'D15':
-            EventMesh.publish(constants.PROTOCOL.JPREG_SEND) 
+            if str(data_tmp) == "1":
+                EventMesh.publish(constants.PROTOCOL.JPREG_SEND) 
+                EventMesh.publish(constants.PROTOCOL.MEMBERS_SEND)
 
 class KA_ProtoCol(ProtoCol):
     """心跳"""
@@ -3026,7 +3031,7 @@ class CALLING_ProtoCol(ProtoCol):#app发起视频通话
         send_data = EventMesh.publish("get_new_pid")+"*%s*0007*CALLING"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
-        print("CALLING:send data:%s"%(data))
+        # print("CALLING:send data:%s"%(data))
         # print("WLKEY!!!!!!!!!!!!!")
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
@@ -3057,12 +3062,9 @@ class CALLING_ProtoCol(ProtoCol):#app发起视频通话
         fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识
         usb_state = EventMesh.publish("get_usb")#
         video_state = EventMesh.publish("get_video_state")
-        usb_state = 0
-        if flag != 0 or usb_state == 1 or usb_state == 3 or fall_down != 0 or video_state != 0: #电话在打入或者 在充电不允许视频通话
+        sos_dialing = EventMesh.publish("get_sos_state_out")#正在拨打sos电话
+        if flag != 0 or usb_state == 1 or usb_state == 3 or fall_down != 0 or video_state != 0 or sos_dialing != 0: #电话在打入或者 在充电不允许视频通话
             EventMesh.publish(constants.PROTOCOL.CALLING_SEND,1)
-            EventMesh.publish("set_video_in_out_state", 0)
-            EventMesh.publish("set_video_state", 0)
-            EventMesh.publish("set_dev_app_mode", 0)#
         else:
             EventMesh.publish(constants.PROTOCOL.CALLING_SEND,0)
             EventMesh.publish("set_video_state", 6)
@@ -3086,11 +3088,11 @@ class RCALLING_ProtoCol(ProtoCol):#设备拒接接听
         send_data = EventMesh.publish("get_new_pid")+"*%s*0008*RCALLING"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s,%s,%s,%d]"%(str(MD5_SIGN),send_data,msg[0],msg[1],msg[2])
-        print("RCALLING:send data:%s"%(data))
+        # print("RCALLING:send data:%s"%(data))
         # print("WLKEY!!!!!!!!!!!!!")
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-        print("RCALLING:send data end:%s"%(data))
+        # print("RCALLING:send data end:%s"%(data))
 
     def recv(self, event, msg):
         """
@@ -3120,19 +3122,18 @@ class AGTALK_ProtoCol(ProtoCol):#设备发起视频通话与app接听视频通
         @param msg: 接收到的下行数据
         """
         # b'[SZKW*876226002021444*007B*AGTALK,0,01lqlyqzzQHpfwv5g7jFVC2H6Ha2tHFpMlfSm5sd2uo7o55JEcc=OVxewje6MjP0NgEODwsLDwkJCwkLCA0NDQ==,8762260020214441701226895]'
-        print("AGTALK!!!!!!!!!!!!!")
+        # print("AGTALK!!!!!!!!!!!!!")
         msg = msg[1:-1]
         msg_tmp = msg.decode('ascii')
         msg_tmp_d = msg_tmp.split(',')
         call_state = int(msg_tmp_d[1])#返回是否可以视频通话
         if call_state == 0:#可正常通话
             if EventMesh.publish("get_video_state") != 0: 
-                print("AGTALK!!!!!!!!!!!!!answer")
+                # print("AGTALK!!!!!!!!!!!!!answer")
                 tokens_data = msg_tmp_d[2]#会议id
                 meet_id = msg_tmp_d[3]#会议id
                 EventMesh.publish("set_vedio_meet_id", meet_id)#
                 EventMesh.publish("set_vedio_tokens_data", tokens_data)#
-                EventMesh.publish("set_vedio_init")#
                 EventMesh.publish("open_vedio_infor")
 
         else:
@@ -3141,8 +3142,8 @@ class AGTALK_ProtoCol(ProtoCol):#设备发起视频通话与app接听视频通
             meet_id = msg_tmp_d[3]#会议id
             EventMesh.publish("set_vedio_meet_id", meet_id)#
             EventMesh.publish("set_vedio_tokens_data", tokens_data)#
-            EventMesh.publish("video_reject_cb",None)#挂断视频通话
-            print("AGTALK no!!!!!!!!!!!!!")
+            EventMesh.publish("video_newwork_reject_cb",None)#挂断视频通话
+            # print("AGTALK no!!!!!!!!!!!!!")
 
         print("AGTALK!!!!!!!!!!!!!")
 
@@ -3156,7 +3157,7 @@ class RTALK_ProtoCol(ProtoCol):#app拒接视频通话
         send_data = EventMesh.publish("get_new_pid")+"*%s*0005*RTALK"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s,%d,%s]"%(str(MD5_SIGN),send_data,msg[0],msg[1])
-        print("AGTALK:send data:%s"%(data))
+        # print("AGTALK:send data:%s"%(data))
         # print("WLKEY!!!!!!!!!!!!!")
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
index 903f1f1..31f2970 100644 (file)
@@ -1,51 +1,19 @@
-import uos
-import ql_fs
-import EventMesh
-if ql_fs.path_exists("/ext") == False:
-    ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3)
-    uos.mount(ldev,'/ext')
-res = uos.statvfs("/ext")
-res = list(res)
-
-from btn_device_ec800m import BtnDevice
-
-import lvgl as lv
+# import lvgl as lv
+from machine import LCD, Pin
 import utime
-import osTimer
-import pm
-import ql_fs
-from machine import Pin
 from misc import PWM
-import uos
-from machine import I2C
-from Hsensor import GH3018
-from Gsensor import SC7A20
-btn_device = BtnDevice()
-btn_device.start()
-i2c0 = I2C(I2C.I2C0, I2C.FAST_MODE)
-WHO_AM_I = bytearray([0x01, 0])
-I2C_SLAVE_ADDR = 0x49
-r_data = bytearray(2)
-data = bytearray([0x60A0, 0])   #休眠
-i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
-def gsensor_cb(self, para):
-        EventMesh.debug_log("gsensor_cb:{}".format(para))
-gsensor = SC7A20()
-EventMesh.debug_log("DeviceInfoManager:1.0")
-gsensor.activate()
-EventMesh.debug_log("DeviceInfoManager:1.1")
-gsensor.init()
-EventMesh.debug_log("DeviceInfoManager:2")
-gsensor.set_callback(gsensor_cb)
-hsensor = GH3018()
-hsensor.activate()
-hsensor.init()
-hsensor.open_blood_oxygen()
-utime.sleep(5)
-# PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 0, 1)
-# PWM_backlight.open()
-hsensor.close()
-#lcd_ctrl.write(0)
+import camera
+import jrtc
+
+jrtc.init()
+jrtc.config_server("119.3.54.56:1050")
+jrtc.config("e99697f86096a74dbf635096", "us144a", "1234567890abcdef", "")
+jrtc.open("us145c", "",[],[15,120,240,320])
+
+# jrtc.init()
+# jrtc.config_server("119.3.54.56:1050")
+# jrtc.config("e99697f86096a74dbf635096", "us145a", "1234567890abcdef", "")
+# jrtc.open("us144a", "",[],[15,129,128,128])
+jrtc.set_cam_angle(jrtc.CAM_ROTATE_180)
 
-pm.autosleep(1)
-EventMesh.debug_log("test end2")
\ No newline at end of file
+print("jrtc closed !!!!...")
index bb8465c..2dfaebe 100644 (file)
@@ -168,6 +168,8 @@ def main_init():
     ui.add_screen(_ui.VdieoVoiceScreen())
     ui.add_screen(_ui.VoiceShowScreen())
     ui.add_screen(_ui.voiceInCallScreen())
+    ui.add_screen(_ui.videoModeScreen())
+    ui.add_screen(_ui.voiceOutCallScreen())
 
     from pp_main import allppPopupScreen,delOnePopupScreen,ppListScreen,noppPopupScreen,delppsucessPopupScreen,ppMainScreen,addfaileppPopupScreen,ppMainPopupScreen,addppPopupScreen,addedppPopupScreen,ownaddppPopupScreen
     ui.add_screen(ppMainScreen())
index 23d8cef..75f4986 100644 (file)
@@ -574,6 +574,7 @@ class PING_ProtoCol(ProtoCol):
         data_tmp =  msg.decode('ascii')   
         data_tmp = data_tmp.split(']')[0] #去掉]    
         EventMesh.publish(constants.PROTOCOL.JPREG_SEND)
+        EventMesh.publish(constants.PROTOCOL.MEMBERS_SEND)
         EventMesh.publish(constants.EVENT.SET_PING, data_tmp.split(',')[1])
 
 class KA_ProtoCol(ProtoCol):
@@ -2485,7 +2486,7 @@ class CALLING_ProtoCol(ProtoCol):#app发起视频通话
         tokens_data = msg_tmp_d[4]#tokens
         EventMesh.publish("set_vedio_call_id", call_id)#
         EventMesh.publish("set_vedio_meet_id", meet_id)#
-        EventMesh.publish("set_vedio_call_type", call_type)#
+        EventMesh.publish("set_vedio_call_type", int(call_type))#
         EventMesh.publish("set_vedio_tokens_data", tokens_data)#
 
         get_ui = EventMesh.publish("get_UI_high_priority")
@@ -2566,8 +2567,12 @@ class AGTALK_ProtoCol(ProtoCol):#设备发起视频通话与app接听视频通
             meet_id = msg_tmp_d[3]#会议id
             EventMesh.publish("set_vedio_meet_id", meet_id)#
             EventMesh.publish("set_vedio_tokens_data", tokens_data)#
+            EventMesh.publish("clear_jrtc_init_state")
             EventMesh.publish("open_vedio_infor")
+
         else:
+            EventMesh.publish("set_UI_high_priority",0)
+            EventMesh.publish("clear_jrtc_init_state")
             EventMesh.publish("return_prev_screen")
 
         print("AGTALK!!!!!!!!!!!!!")
@@ -2582,7 +2587,7 @@ class RTALK_ProtoCol(ProtoCol):#app拒接视频通话
         send_data = EventMesh.publish("get_new_pid")+"*%s*0005*RTALK"%(self.imei)
         MD5_SIGN = self.pack_MD5_head(send_data)
         data = "[%s%s,%d,%s]"%(str(MD5_SIGN),send_data,msg[0],msg[1])
-        print("AGTALK:send data:%s"%(data))
+        print("RTALK:send data:%s"%(data))
         # print("WLKEY!!!!!!!!!!!!!")
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
@@ -2600,8 +2605,9 @@ class RTALK_ProtoCol(ProtoCol):#app拒接视频通话
         msg_tmp_d = msg_tmp.split(',')
         screen_NAME = EventMesh.publish("get_screen_NAME")
         if screen_NAME != None:
-            if screen_NAME == "vedioing" or screen_NAME == "voiceing" or screen_NAME == "video_outcall" or screen_NAME == "vedio_incall" or screen_NAME == "voice_incall":
-                # EventMesh.publish("close_jrtc_event")
+            if screen_NAME == "vedioing" or screen_NAME == "voiceing" or screen_NAME == "video_outcall" \
+                or screen_NAME == "vedio_incall" or screen_NAME == "voice_incall" or screen_NAME == "voice_outcall":
+                EventMesh.publish("close_jrtc_event",None)
                 EventMesh.publish("set_UI_high_priority", 0)
                 EventMesh.publish("return_prev_screen")
         
index 1232a45..55dfb19 100644 (file)
@@ -8119,6 +8119,8 @@ class VoiceShowScreen(Screen):#正在语音通话中
         self.second_count = 0
         self.time_out = 0
         self.meta_type = "popup"
+        EventMesh.subscribe("set_dev_end_video",self.set_dev_end_video)
+        EventMesh.subscribe("get_dev_end_video",self.get_dev_end_video)
 
 
     def initialization(self):
@@ -8197,6 +8199,12 @@ class VoiceShowScreen(Screen):#正在语音通话中
         
         EventMesh.publish("close_jrtc_event")
         EventMesh.publish("return_prev_screen")
+    
+    def get_dev_end_video(self,event,msg):#手表挂断app
+        return self.statu_open
+
+    def set_dev_end_video(self,event,msg):#手表挂断app
+        self.statu_open = msg
 
     def fun(self,*argc):
         EventMesh.publish("system_sleep_rest")#防止黑屏
@@ -8212,24 +8220,10 @@ class VoiceShowScreen(Screen):#正在语音通话中
             
             self.second_count+=1
             self.show_time()
-        # print("call_state",call_state)
-        if call_state == 0 and self.statu_open == 0:
-            self.timer.stop()
-            
-            call_id = str(EventMesh.publish("get_vedio_call_id"))#
-            meet_id = str(EventMesh.publish("get_vedio_meet_id"))#
-            call_type = int(EventMesh.publish("get_vedio_call_type"))#
-            EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
-            # EventMesh.publish("load_screen", {"screen": "main_menu"})
-            EventMesh.publish("set_UI_high_priority", 0)
-            EventMesh.publish("close_jrtc_event")
-            EventMesh.publish("return_prev_screen")
-            
-            return
         
         if call_state != 5:
             self.time_out+=1
-            if self.time_out >= 60 or (call_state == 0 and self.time_out >= 5):
+            if self.time_out >= 60 or (call_state == 0 and self.statu_open == 0 and self.second_count != 0 and  self.time_out >= 5 and EventMesh.publish("get_jrtc_init_state") == 1):
                 self.time_out = 0
                 self.timer.stop()
                 
@@ -8367,8 +8361,8 @@ video_img_test = None
 def jrtc_cb(close_sta):
     print("jrtc callback:", close_sta)
     if close_sta == 0 or close_sta == 1:
-        pass
-        # jrtc.close(0)
+        jrtc.close(0)
+
 jrtc.set_callback(jrtc_cb)
 class VedioShowScreen(Screen):#正在视频通话中
     #
@@ -8383,51 +8377,66 @@ class VedioShowScreen(Screen):#正在视频通话中
         self.show_label = 0
         self.second_count = 0
         self.time_out = 0
+        self.jrtc_init_state = 0
         self.meta_type = "popup"
         EventMesh.subscribe("open_vedio_infor",self.open_vedio_infor)
         EventMesh.subscribe("close_jrtc_event",self.close_jrtc_event)
+        EventMesh.subscribe("clear_jrtc_init_state",self.clear_jrtc_init_state)#清楚jrtcinit标志防止重复init
+        EventMesh.subscribe("get_jrtc_init_state",self.get_jrtc_init_state)#获取jrtcinit标志防止重复init
 
     def open_vedio_infor(self,event,msg):
-        call_id = EventMesh.publish("get_vedio_call_id")#对方的账号
-        meet_id = EventMesh.publish("get_vedio_meet_id")#共有的会议id
-        call_type = EventMesh.publish("get_vedio_call_type")#呼叫类型
-        tokens_data = EventMesh.publish("get_vedio_tokens_data")#tookens数据#云米平台不需要tokens
-    
-        
-        
-        # data = ['6951832', '876226002021444', '1', '01lqlyqzQ4Gozdz8OJv1Mij2Y3PBq2y3+rtIA26Ge+m2QHTc/Vk=gufkGNMBiYhPjbq1tLCwtLKysLKws7a2tg==']
-        jrtc.init()
-        # jrtc.config_server("119.3.54.56:1050")#测试服地址
-        tokens = str(tokens_data)
-        appkey = "efe9f8800a39d96244234097"#小见
-        uid_key = "25v9C652123QL3N8"
-
-        # appkey = "249e7d505516af0a7ed44097"
-        # uid_key = "qQI4gkB9FxH8J2cb"
-        imei = EventMesh.publish(constants.EVENT.GET_IMEI)
-        oneself_id = str(imei)#自己的账号默认是imei号
-        jrtc.config(appkey,oneself_id,uid_key,tokens)#只初始化一次发起通话
-        uid = str(call_id)
-        ticket = str(meet_id)
-        
-        print("uid ",uid,ticket,oneself_id)
-               #jrtc.set_rotate(0)
-        if call_type == 0:
-            jrtc.open(uid,ticket,[],[])
-        else:
-            jrtc.open(uid,ticket,[15,129,128,128],[15,120,240,320])
+        if self.jrtc_init_state == 0:
+            self.jrtc_init_state = 1
+            EventMesh.publish("set_dev_end_video",0)
+            call_id = EventMesh.publish("get_vedio_call_id")#对方的账号
+            meet_id = EventMesh.publish("get_vedio_meet_id")#共有的会议id
+            call_type = EventMesh.publish("get_vedio_call_type")#呼叫类型
+            tokens_data = EventMesh.publish("get_vedio_tokens_data")#tookens数据#云米平台不需要tokens
+
+            # jrtc.init()
+            # jrtc.config_server("119.3.54.56:1050")
+            # jrtc.config("e99697f86096a74dbf635096", "us145a", "1234567890abcdef", "")
+            # jrtc.open("us144a", "",[15,129,128,128],[15,120,240,320])
+            # jrtc.set_cam_angle(jrtc.CAM_ROTATE_180)
+
+            # data = ['6951832', '876226002021444', '1', '01lqlyqzQ4Gozdz8OJv1Mij2Y3PBq2y3+rtIA26Ge+m2QHTc/Vk=gufkGNMBiYhPjbq1tLCwtLKysLKws7a2tg==']
+            jrtc.init()
+            tokens = str(tokens_data)
+            appkey = "efe9f8800a39d96244234097"#小见
+            uid_key = "25v9C652123QL3N8"
+
+            # appkey = "249e7d505516af0a7ed44097"
+            # uid_key = "qQI4gkB9FxH8J2cb"
+            imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+            oneself_id = str(imei)#自己的账号默认是imei号
+            jrtc.config(appkey,oneself_id,uid_key,tokens)#只初始化一次发起通话
+            uid = str(call_id)
+            ticket = str(meet_id)
+            
+            print("uid ",uid,ticket,oneself_id)
+            #jrtc.set_rotate(0)
+            if call_type == 0:#语音通话不需要设置参数
+                jrtc.open(uid,ticket,[],[])
+            else:
+                jrtc.open(uid,ticket,[15,129,128,128],[15,120,240,320])
+            jrtc.set_cam_angle(jrtc.CAM_ROTATE_180)
+
 
     def close_jrtc_event(self,event,msg):
-        call_state = jrtc.get_state()
-        # print("close_jrtc_event1",call_state)
-        # jrtc.remove_img()
-        # print("close_jrtc_event2",call_state)
+        print("close_jrtc_event")
+        
         jrtc.close(0)
-        # print("close_jrtc_event3",call_state)
+        pass
+    def clear_jrtc_init_state(self,event,msg):
+        self.jrtc_init_state = 0
+        pass
+
+    def get_jrtc_init_state(self,event,msg):
+        return self.jrtc_init_state
         pass
 
     def initialization(self):
-        jrtc.set_rotate(jrtc.CAM_ROTATE_90)
+        
         global camera_video_answer_screen,video_img_test,camera_video_answer_btn_label,camera_video_answer_label,camera_video_answer_second_label,camera_video_answer_btn,vcamera_video_answer_btn_label
         if camera_video_answer_screen == None:
             camera_video_answer_screen = lv.obj()
@@ -8474,12 +8483,9 @@ class VedioShowScreen(Screen):#正在视频通话中
             self.meta = camera_video_answer_screen
         
         call_state = jrtc.get_state()
-
         self.second_count = 0
         self.statu_open = 0
-      
         self.time_out = 0
-        call_state = jrtc.get_state()
         
         EventMesh.publish("set_UI_high_priority", 1)
         if call_state == 5:#接通
@@ -8505,6 +8511,7 @@ class VedioShowScreen(Screen):#正在视频通话中
 
     def close_cb(self,e):
         self.statu_open = 1
+        EventMesh.publish("set_dev_end_video",1)
         call_id = str(EventMesh.publish("get_vedio_call_id"))#
         meet_id = str(EventMesh.publish("get_vedio_meet_id"))#
         call_type = int(EventMesh.publish("get_vedio_call_type"))#
@@ -8529,27 +8536,13 @@ class VedioShowScreen(Screen):#正在视频通话中
             video_img_test.clear_flag(lv.obj.FLAG.HIDDEN)
             self.second_count+=1
             self.show_time()
-        # print("call_state",call_state)
-        if call_state == 0 and self.statu_open == 0:
-            self.timer.stop()
-            
-            call_id = str(EventMesh.publish("get_vedio_call_id"))#
-            meet_id = str(EventMesh.publish("get_vedio_meet_id"))#
-            call_type = int(EventMesh.publish("get_vedio_call_type"))#
-            EventMesh.publish("set_UI_high_priority", 0)
-            EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
-            EventMesh.publish("set_UI_high_priority", 0)
-            EventMesh.publish("close_jrtc_event")
-            EventMesh.publish("return_prev_screen")
-            
-            return
-        
+        print("video call_state",call_state)
         if call_state != 5:
             self.time_out+=1
-            if self.time_out >= 60 or (call_state == 0 and self.time_out >= 5):
+            if self.time_out >= 60 or (call_state == 0 and self.time_out >= 5 and self.second_count != 0 and self.jrtc_init_state == 1):
                 self.time_out = 0
                 self.timer.stop()
-                
+                print("video call_state",call_state)
                 call_id = str(EventMesh.publish("get_vedio_call_id"))#
                 meet_id = str(EventMesh.publish("get_vedio_meet_id"))#
                 call_type = int(EventMesh.publish("get_vedio_call_type"))#
@@ -8558,11 +8551,8 @@ class VedioShowScreen(Screen):#正在视频通话中
                 EventMesh.publish("set_UI_high_priority", 0)
                 EventMesh.publish("close_jrtc_event")
                 EventMesh.publish("return_prev_screen")
-                
-        
 
         
-        
     def show_time(self):
 
         if self.second_count >= 99*60:
@@ -8703,6 +8693,7 @@ class voiceInCallScreen(Screen):#语音通话打入中
         self.call_timer.stop()
         self.aud.stop() 
         EventMesh.publish("set_UI_high_priority", 0)
+        EventMesh.publish("clear_jrtc_init_state")
         EventMesh.publish("open_vedio_infor")
         EventMesh.publish("load_screen", {"screen": "voiceing"})
 
@@ -8771,6 +8762,7 @@ class vedioCallingCallScreen(Screen):#视频通话打入中
         self.pro_state = 0
         self.meta = None
         self.timeout = 0
+        EventMesh.subscribe("test_answer",self.test_answer)
         
     def initialization(self):
         global vedio_call_screen,vedio_call_img,vedio_call_name_label,vedio_call_answer,vedio_call_hangup,vedio_call_label
@@ -8855,6 +8847,15 @@ class vedioCallingCallScreen(Screen):#视频通话打入中
         self.call_timer.stop()
         self.aud.stop() 
         EventMesh.publish("set_UI_high_priority", 0)
+        EventMesh.publish("clear_jrtc_init_state")
+        EventMesh.publish("open_vedio_infor")
+        EventMesh.publish("load_screen", {"screen": "vedioing"})
+    
+    def test_answer(self,event,msg):
+        self.call_timer.stop()
+        self.aud.stop() 
+        EventMesh.publish("set_UI_high_priority", 0)
+        EventMesh.publish("clear_jrtc_init_state")
         EventMesh.publish("open_vedio_infor")
         EventMesh.publish("load_screen", {"screen": "vedioing"})
 
@@ -8919,6 +8920,7 @@ class videoOutCallScreen(Screen):#正在拨号中...未打出
         self.timer1 = osTimer()
         self.time_count = 0
         self.second_count = 0
+        self.answer = 0
        
 
     def initialization(self):
@@ -8978,6 +8980,7 @@ class videoOutCallScreen(Screen):#正在拨号中...未打出
         
         self.time_count = 0
         self.second_count = 0
+        self.answer = 0
         EventMesh.publish("set_UI_high_priority", 1)
         call_state = jrtc.get_state()
         # print("video_outcall",call_state)
@@ -9010,7 +9013,7 @@ class videoOutCallScreen(Screen):#正在拨号中...未打出
         pass
     def fun_cb(self,*argc):
         call_state = jrtc.get_state()
-        # print("video_outcall",call_state)
+        print("video_outcall",call_state)
         EventMesh.publish("system_sleep_rest")#防止黑屏
         if call_state == 5:
             video_outcall_img_test.clear_flag(lv.obj.FLAG.HIDDEN)
@@ -9019,9 +9022,11 @@ class videoOutCallScreen(Screen):#正在拨号中...未打出
             video_outcall_call.set_pos(0, 50)
             self.second_count += 1
             self.show_time()
-        if call_state != 5:
+            self.answer = 1
+
+        if call_state != 5:#未接通 1分钟未接通挂断或者 接通后app 网络不好也主动手表挂断
             self.time_count+=1
-            if self.time_count >= 1*60 or (call_state == 0 and self.time_count >= 5):
+            if self.time_count >= 1*60 or (call_state == 0 and self.time_count >= 5 and self.second_count != 0):
                 self.time_count = 0
                 self.timer1.stop()
                 call_id = str(EventMesh.publish("get_vedio_call_id"))#
@@ -9059,6 +9064,164 @@ class videoOutCallScreen(Screen):#正在拨号中...未打出
     def btn8_press(self):
         pass
 
+
+voice_outcall_screen = None
+voice_outcall_img = None
+voice_outcall_name = None
+voice_outcall_hangup_imgbtn = None
+voice_outcall_call = None
+voice_outcall_img_test = None
+voice_outcall_hangup_imgbtnlabel = None
+class voiceOutCallScreen(Screen):#等待对方接接听中
+    NAME = "voice_outcall"
+
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.meta_type = "popup"
+        self.timer1 = osTimer()
+        self.time_count = 0
+        self.second_count = 0
+        self.answer = 0
+       
+
+    def initialization(self):
+        EventMesh.publish("set_UI_high_priority", 1)
+        self.time_count = 0
+        global voice_outcall_screen,voice_outcall_img,voice_outcall_hangup_imgbtnlabel,voice_outcall_name ,voice_outcall_call,voice_outcall_hangup_imgbtn 
+        if voice_outcall_screen == None:
+            voice_outcall_screen = lv.obj()
+            print("voice_outcall_screen")
+            voice_outcall_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            voice_outcall_name = lv.label(voice_outcall_screen)
+            voice_outcall_name.set_pos(0, 20)
+            voice_outcall_name.set_size(LCD_X, 20)
+            voice_outcall_name.set_text(" ")
+            voice_outcall_name.set_long_mode(lv.label.LONG.DOT)
+            voice_outcall_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            voice_outcall_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            voice_outcall_call = lv.label(voice_outcall_screen)
+            voice_outcall_call.set_pos(0, 50)
+            voice_outcall_call.set_size(LCD_X, 40)
+            voice_outcall_call.set_text("正在等待对方接听中...")
+            voice_outcall_call.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            voice_outcall_call.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            voice_outcall_hangup_imgbtn = lv.img(voice_outcall_screen)
+            voice_outcall_hangup_imgbtn.set_size(32, 32)
+            voice_outcall_hangup_imgbtn.set_src("U:/static/hang_up.png")
+            voice_outcall_hangup_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+            voice_outcall_hangup_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            voice_outcall_hangup_imgbtn.set_pos(48, 90)
+
+            voice_outcall_hangup_imgbtnlabel = lv.label(voice_outcall_screen)
+            voice_outcall_hangup_imgbtnlabel.set_pos(18, 50)
+            voice_outcall_hangup_imgbtnlabel.set_text(" ")
+            voice_outcall_hangup_imgbtnlabel.set_size(90, 78)
+            voice_outcall_hangup_imgbtnlabel.add_flag(lv.obj.FLAG.CLICKABLE)
+
+            voice_outcall_hangup_imgbtnlabel.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+                                    lv.EVENT.SHORT_CLICKED, None)
+            
+            voice_outcall_hangup_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+                                    lv.EVENT.SHORT_CLICKED, None)
+            
+
+            
+            self.meta = voice_outcall_screen
+        if voice_outcall_name != None:
+            voice_outcall_name.set_text(self.meta_info)#名称
+        
+        self.time_count = 0
+        self.second_count = 0
+        self.answer =  0
+        EventMesh.publish("set_UI_high_priority", 1)
+        call_state = jrtc.get_state()
+        # print("video_outcall",call_state)
+        if call_state == 5:
+            # video_outcall_img_test.clear_flag(lv.obj.FLAG.HIDDEN)
+            voice_outcall_name.set_text("正在通话中...")#
+            voice_outcall_name.set_pos(0, 20)
+        else:
+            # video_outcall_img_test.add_flag(lv.obj.FLAG.HIDDEN)
+            voice_outcall_call.set_text("正在等待对方接听中...")
+            voice_outcall_call.set_pos(0, 50)
+            voice_outcall_name.set_text(self.meta_info)#名称
+            voice_outcall_name.set_pos(0, 20)
+
+        self.timer1.start(1*1000,1,self.fun_cb)
+
+    def post_processor_after_initialization(self):
+        pass
+   
+    def hangup(self,e):
+        self.timer1.stop()
+        call_id = str(EventMesh.publish("get_vedio_call_id"))#
+        meet_id = str(EventMesh.publish("get_vedio_meet_id"))#
+        call_type = int(EventMesh.publish("get_vedio_call_type"))#
+        EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+        # EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+        EventMesh.publish("set_UI_high_priority", 0)
+        EventMesh.publish("load_screen", {"screen": "videolist"})
+
+        pass
+    def fun_cb(self,*argc):
+        call_state = jrtc.get_state()
+        print("voice_outcall",call_state)
+        EventMesh.publish("system_sleep_rest")#防止黑屏
+        if call_state == 5:
+            voice_outcall_name.set_text("正在通话中...")#
+            voice_outcall_name.set_pos(0, 20)
+            voice_outcall_call.set_pos(0, 50)
+            self.second_count += 1
+            self.show_time()
+            
+
+        if call_state != 5:
+            self.time_count+=1
+            if self.time_count >= 1*60 or (call_state == 0 and self.time_count >= 5 and self.second_count != 0):
+                self.time_count = 0
+                self.timer1.stop()
+                call_id = str(EventMesh.publish("get_vedio_call_id"))#
+                meet_id = str(EventMesh.publish("get_vedio_meet_id"))#
+                call_type = int(EventMesh.publish("get_vedio_call_type"))#
+                EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+                # EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+                EventMesh.publish("set_UI_high_priority", 0)
+                EventMesh.publish("load_screen", {"screen": "videolist"})
+
+    def show_time(self):
+
+        if self.second_count >= 99*60:
+            total_hour = self.second_count//3600#小时
+            total_min = (self.second_count%3600)//60#分钟
+            total_sec = (self.second_count%3600)%60#秒
+            voice_outcall_call.set_text("{}:{}:{}".format("%02d"%(total_hour),"%02d"%(total_min),"%02d"%(total_sec)))
+            
+        else:
+            total_min = self.second_count//60
+            total_sec = self.second_count%60
+            voice_outcall_call.set_text("{}:{}".format("%02d"%(total_min),"%02d"%(total_sec)))
+
+    def Close(self):
+        self.timer1.stop()
+
+    def done_return(self):
+        pass
+        #EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+    def btn1_release(self):
+        pass
+        #EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+    def btn8_press(self):
+        pass
+
+
+
+
 videolist_screen = None
 videolist_cont = None
 videolist_top_title = None
@@ -9117,10 +9280,10 @@ class videolistScreen(Screen):
             videolist_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
         
 
-            videolist_none_label = lv.label(videolist_screen_list_screen)
-            videolist_none_label.set_pos(0, 20)
+            videolist_none_label = lv.label(videolist_screen)
+            videolist_none_label.set_pos(0, 60)
             videolist_none_label.set_size(LCD_X, 60)
-            videolist_none_label.set_text("无网络或者无SIM卡或者无添加账号")
+            videolist_none_label.set_text("无SIM卡或未添加账号")
             videolist_none_label.set_long_mode(lv.label.LONG.WRAP)
             videolist_none_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
             videolist_none_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
@@ -9166,8 +9329,8 @@ class videolistScreen(Screen):
         if videolist_screen == None:
             return
         if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#有卡时触发sos报警 无卡时自动关机
-            self.videolist_detail_list.clear_flag(lv.obj.FLAG.HIDDEN)
-            videolist_none_label.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
+            self.videolist_detail_list.add_flag(lv.obj.FLAG.HIDDEN)
+            videolist_none_label.clear_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
         else:
             #读取json文件中的键作为label文本;
             if self.check_json == True and len(self.videobook) != 0:
@@ -9247,7 +9410,8 @@ class videolistScreen(Screen):
                 self.is_sliding = 0
                 if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡时触发sos报警 无卡时自动关机
                     msg_text = e.get_target().get_child(1).get_text()
-                    EventMesh.publish("publish_message_event_ui",{"func":self.calling,"data":msg_text})
+                    # EventMesh.publish("publish_message_event_ui",{"func":self.calling,"data":msg_text})
+                    EventMesh.publish("load_screen", {"screen": "vedio_mode","meta":msg_text})
                 else:
                     EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
                 
@@ -9255,12 +9419,13 @@ class videolistScreen(Screen):
             
 
     def calling(self,msg_text):    
-        _msg = msg_text
-        print("calling",_msg)
-        EventMesh.publish("set_vedio_call_id", _msg)#
-        EventMesh.publish("set_vedio_call_type", 1)#
-        EventMesh.publish(constants.PROTOCOL.AGTALK_SEND,[1,_msg])
-        EventMesh.publish("load_screen", {"screen": "video_outcall","meta":_msg})
+        pass
+        # _msg = msg_text
+        # print("calling",_msg)
+        # EventMesh.publish("set_vedio_call_id", _msg)#
+        # EventMesh.publish("set_vedio_call_type", 1)#
+        # EventMesh.publish(constants.PROTOCOL.AGTALK_SEND,[1,_msg])
+        # EventMesh.publish("load_screen", {"screen": "video_outcall","meta":_msg})
 
 
     def done_return(self):
@@ -9277,7 +9442,163 @@ class videolistScreen(Screen):
 
 
 
+video_select_mode_screen = None
+video_select_mode_label1 = None
+video_select_mode_label2 = None
+video_select_mode_btn_label1 = None
+video_select_mode_name = None
+video_select_mode_btn =None
+video_select_mode_btn1 = None
+class videoModeScreen(Screen):#通话模式选择
+    #
+    NAME = "vedio_mode"
+    
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.timer = osTimer()
+        self.meta_type = "popup"
+        self.count = 0
+        self.is_sliding = 0
+
+    def initialization(self):
+        global video_select_mode_screen,video_select_mode_btn1,video_select_mode_btn,video_select_mode_label1,video_select_mode_label2,video_answer_btn_label1,video_select_mode_name
+        self.count = 0
+        self.is_sliding = 0
+        if video_select_mode_screen == None:
+            video_select_mode_screen = lv.obj()
+            print("video_select_mode_screen")
+            video_select_mode_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            video_select_mode_name = lv.label(video_select_mode_screen)
+            video_select_mode_name.set_pos(0, 20)
+            video_select_mode_name.set_text(" ")
+            video_select_mode_name.set_size(128, 40)
+            video_select_mode_name.add_flag(lv.obj.FLAG.CLICKABLE)
+            video_select_mode_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            video_select_mode_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            video_select_mode_btn = lv.btn(video_select_mode_screen)
+            video_select_mode_btn.set_pos(4, 60)
+            video_select_mode_btn.set_size(120, 26)
+            video_select_mode_btn.add_style(style_press_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+            video_select_mode_btn.add_style(style_press_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+            video_select_mode_btn.set_style_radius(30,0)
+
+            video_select_mode_label1 = lv.label(video_select_mode_btn)
+            video_select_mode_label1.set_text("语音通话")
+            video_select_mode_label1.set_size(128, 25)
+            video_select_mode_label1.set_pos(0,5)
+            video_select_mode_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            video_select_mode_label1.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            # video_select_mode_label1 = lv.label(video_select_mode_screen)
+            # video_select_mode_label1.set_pos(0, 60)
+            # video_select_mode_label1.set_text("语音通话")
+            # video_select_mode_label1.set_size(128, 30)
+            # video_select_mode_label1.add_flag(lv.obj.FLAG.CLICKABLE)
+            # video_select_mode_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            # video_select_mode_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            video_select_mode_btn1 = lv.btn(video_select_mode_screen)
+            video_select_mode_btn1.set_pos(4, 90)
+            video_select_mode_btn1.set_size(120, 26)
+            video_select_mode_btn1.add_style(style_press_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+            video_select_mode_btn1.add_style(style_press_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+            video_select_mode_btn1.set_style_radius(30,0)
+
+            video_select_mode_label2 = lv.label(video_select_mode_btn1)
+            video_select_mode_label2.set_text("视频通话")
+            video_select_mode_label2.set_size(128, 25)
+            video_select_mode_label2.set_pos(0,5)
+            video_select_mode_label2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            video_select_mode_label2.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            # video_select_mode_label2 = lv.label(video_select_mode_screen)
+            # video_select_mode_label2.set_pos(0, 90)
+            # video_select_mode_label2.set_text("视频通话")
+            # video_select_mode_label2.set_size(128, 38)
+            # video_select_mode_label2.add_flag(lv.obj.FLAG.CLICKABLE)
+            # video_select_mode_label2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            # video_select_mode_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            self.meta = video_select_mode_screen
+
+            video_select_mode_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_vedio_cb(e,0)),
+                                        lv.EVENT.SHORT_CLICKED, None)
+            video_select_mode_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_vedio_cb(e,0)), lv.EVENT.PRESSING, None)
+
+            video_select_mode_btn1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_vedio_cb(e,1)),
+                                        lv.EVENT.SHORT_CLICKED, None)
+            video_select_mode_btn1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_vedio_cb(e,1)), lv.EVENT.PRESSING, None)
+
+        if self.meta_info != None:
+            if len(str(self.meta_info)) != 0:
+                video_select_mode_name.set_text("{}".format(self.meta_info))
+            else:
+                video_select_mode_name.set_text(" ")
+        else:
+            video_select_mode_name.set_text(" ")
+
+        self.timer.start(1*1000,1,self.fun)
+        
+
+    def fun(self,*argc):
+        self.count+=1
+        if self.count <= 30:
+           EventMesh.publish("system_sleep_rest")#防止黑屏
+        else:
+           self.timer.stop()
+           EventMesh.publish("return_prev_screen") 
+        pass
+    def calling_vedio_cb(self,e,data):#视频通话
+        code = e.get_code()
+        if code == lv.EVENT.PRESSING:
+            #print("PRESSING")
+            self.is_sliding += 1
+
+        elif  code == lv.EVENT.SHORT_CLICKED:
+            #utime.sleep_ms(10)
+            print("1self.is_sliding",self.is_sliding)
+            if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件
+                self.is_sliding = 0
+                if data == 1:
+                    msg_text = [self.meta_info,1]
+                    EventMesh.publish("publish_message_event_ui",{"func":self.calling,"data":msg_text})
+                else:
+                    msg_text = [self.meta_info,0]
+                    EventMesh.publish("publish_message_event_ui",{"func":self.calling,"data":msg_text})
+            self.is_sliding = 0
+        pass
+
+    def calling(self,msg_text):    
+        _msg = msg_text[0]
+        mode = msg_text[1]
+        print("calling",msg_text,_msg,mode)
+        if mode == 1:#0是语音 1是视频通话
+            EventMesh.publish("load_screen", {"screen": "video_outcall","meta":_msg})
+        else:
+            EventMesh.publish("load_screen", {"screen": "voice_outcall","meta":_msg})
+
+        EventMesh.publish("set_vedio_call_id", _msg)#
+        EventMesh.publish("set_vedio_call_type", mode)#
+        EventMesh.publish(constants.PROTOCOL.AGTALK_SEND,[mode,_msg])
+
+    def Close(self):
+        self.timer.stop()
+
+    def done_return(self):
+        pass
+        EventMesh.publish("return_prev_screen")
+        
 
+    def btn1_release(self):
+        EventMesh.publish("return_prev_screen")
+        pass
+
+    def btn8_press(self):
+        EventMesh.publish("return_prev_screen")
+        pass
 
 
 style_screen_calendar_1_extra_header_main_default = lv.style_t()
index 3849e74..bb2db90 100644 (file)
@@ -25,7 +25,7 @@ import usys
 def server_init(server_type = None):
     #服务器选择1,防走丢,2大锤,3三基同创,4童信,5云米,6荣为
     if server_type == None:
-        server_type = 1
+        server_type = 2
     #print("server_init:server_type:{}".format(server_type))
     d_server_addr = "api.xcloudtech.com"
     d_server_port = 9000
@@ -39,7 +39,14 @@ def server_init(server_type = None):
         # PID = "SZKW"
     elif server_type == 2:
         
-        d_server_addr = "8.134.110.49"
+        d_server_addr = "iot.socket.thisiot.com"
+        d_server_port = 9999
+        d_md5_key = "SZYhyGhroQ3xFKFWZq1g"
+        d_PID = "oxLwDqcwJCtiPSRu"
+
+    elif server_type == 3:
+        
+        d_server_addr = "8.134.110.49" 
         d_server_port = 30346
         d_md5_key = "3JyCjsw4ryXKzjzudayY"
         d_PID = "qAELPTKmFanR4RHe"
index 098ae42..5727111 100644 (file)
@@ -135,30 +135,30 @@ class BtnDevice(Abstract):
             self.pwk_count += 1
             #
             if(self.pwk_count >= 1): #防抖100ms
-                if self.pwk_count > (15000//100): #长按
-                    self.pwk_count = 0
-                    self.pwk_press = 0
-                    self.__pwk_timer.stop()
-                    self.GPIO26_flag = 0
-                    # print("power end")
-                    Power.powerDown()
-
-                    return
-                elif self.pwk_count > (3000//100): #长按
-                    screen_NAME = EventMesh.publish("get_screen_NAME")
-                    if screen_NAME != None:
-                        if screen_NAME == "no_sim_screen" or screen_NAME == "imei_new":
-                            if 1:
-                                if self.GPIO26_flag == 0:
-                                    self.GPIO26_flag = 1
-                                    Power.powerRestart()
-                                    return
-                                if self.GPIO26_status == 1:#松开
-                                    self.__pwk_timer.stop()
-                                    self.pwk_count = 0
-                                    self.pwk_press = 0
-                                    self.GPIO26_flag = 0
-                                    return
+                # if self.pwk_count > (15000//100): #长按
+                #     self.pwk_count = 0
+                #     self.pwk_press = 0
+                #     self.__pwk_timer.stop()
+                #     self.GPIO26_flag = 0
+                #     # print("power end")
+                #     Power.powerDown()
+
+                #     return
+                if self.pwk_count > (5000//100): #长按
+                    # screen_NAME = EventMesh.publish("get_screen_NAME")
+                    # if screen_NAME != None:
+                    #     if screen_NAME == "no_sim_screen" or screen_NAME == "imei_new":
+                    #         if 1:
+                    if self.GPIO26_flag == 0:
+                        self.GPIO26_flag = 1
+                        EventMesh.publish("load_screen", {"screen": "poweroff"}) 
+                        return
+                    if self.GPIO26_status == 1:#松开
+                        self.__pwk_timer.stop()
+                        self.pwk_count = 0
+                        self.pwk_press = 0
+                        self.GPIO26_flag = 0
+                        return
                     
             if self.GPIO26_status == 1:#松开
                 self.__pwk_timer.stop()
index 732c017..726005d 100644 (file)
@@ -1161,7 +1161,7 @@ class DeviceInfoManager(Abstract):
                     if self.no_smi_count > (15*60) and self.no_smi_state == 0:
                         self.no_smi_count = 0
                         self.no_smi_state = 1
-                        EventMesh.publish("load_screen", {"screen": "no_sim_auto_screen"})  
+                        # EventMesh.publish("load_screen", {"screen": "no_sim_auto_screen"})  
                 else:
                     self.no_smi_count = 0
                     self.no_smi_state = 0
index 67c9727..1f6c3ba 100644 (file)
@@ -1414,10 +1414,10 @@ class NoSimAutoScreen(Screen):#无sim卡是否关机
     def fun(self,*argc):
         EventMesh.publish("system_sleep_rest")#防止黑屏
         self.count+=1
-        if self.count > 30:
+        if self.count >= 30:
             self.count = 0
             self.timer.stop()
-            EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
+            EventMesh.publish("return_prev_screen")
             
 
     def Close(self):
@@ -6766,7 +6766,7 @@ class no_sim_screenScreen(Screen):
         self.count = 0
         
     def initialization(self):
-        EventMesh.publish("set_UI_high_priority",1)
+        #EventMesh.publish("set_UI_high_priority",1)
         global no_sim_screen,no_sim_screenn_label,no_sim_screenn_img
         if no_sim_screen == None :
             no_sim_screen = lv.obj()
@@ -6785,7 +6785,7 @@ class no_sim_screenScreen(Screen):
             no_sim_screenn_label = lv.label(no_sim_screen)
             no_sim_screenn_label.set_pos(0, 220)
             no_sim_screenn_label.set_size(240, 80)
-            no_sim_screenn_label.set_text("请插入SIM卡,插卡后长按【POWER】键3S重启")
+            no_sim_screenn_label.set_text("请插入SIM卡,长按【开关】5S关机再重启")
             no_sim_screenn_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
             no_sim_screenn_label.set_long_mode(lv.label.LONG.WRAP)
             no_sim_screenn_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
@@ -6817,12 +6817,15 @@ class no_sim_screenScreen(Screen):
         pass
 
     def btn8_press(self):
-        flag = EventMesh.publish("get_lcd_state")
-        if flag == 1:
-            EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
-        else:
-            EventMesh.publish(constants.EVENT.SYSTEM_UP)
+        EventMesh.publish("set_UI_high_priority",0)
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
         pass
+        # flag = EventMesh.publish("get_lcd_state")
+        # if flag == 1:
+        #     EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
+        # else:
+        #     EventMesh.publish(constants.EVENT.SYSTEM_UP)
+        # pass
     def btn1_press(self):
         
         pass
@@ -6886,7 +6889,7 @@ class ImeiNewScreen(Screen):
         EventMesh.subscribe("get_login_exit",self.get_login_exit)
 
     def initialization(self):
-        EventMesh.publish("set_UI_high_priority",1)
+        #EventMesh.publish("set_UI_high_priority",1)
         imei = EventMesh.publish(constants.EVENT.GET_IMEI)
         iccid = str(sim.getIccid())
         
@@ -6956,11 +6959,8 @@ class ImeiNewScreen(Screen):
             EventMesh.publish(constants.EVENT.SYSTEM_UP)
         
     def btn8_press(self):
-        flag = EventMesh.publish("get_lcd_state")
-        if flag == 1:
-            EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
-        else:
-            EventMesh.publish(constants.EVENT.SYSTEM_UP)
+        EventMesh.publish("set_UI_high_priority",0)
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
 
 
 no_network_screen = None
@@ -6978,7 +6978,7 @@ class no_network_Screen(Screen):#开机未联网
 
 
     def initialization(self):
-        EventMesh.publish("set_UI_high_priority",1)
+        #EventMesh.publish("set_UI_high_priority",1)
         global no_network_screen ,no_network_screen_label,no_network_screen_img
         if no_network_screen == None :
             no_network_screen = lv.obj()
@@ -7059,12 +7059,9 @@ class no_network_Screen(Screen):#开机未联网
         pass
 
     def btn8_press(self):
-        flag = EventMesh.publish("get_lcd_state")
-        if flag == 1:
-            EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
-        else:
-            EventMesh.publish(constants.EVENT.SYSTEM_UP)
-        pass
+        EventMesh.publish("set_UI_high_priority",0)
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
     def btn1_press(self):
         
         pass