K01:
authordxy15521469561 <1731678236@qq.com>
Tue, 16 Jul 2024 09:48:22 +0000 (17:48 +0800)
committerdxy15521469561 <1731678236@qq.com>
Tue, 16 Jul 2024 09:48:22 +0000 (17:48 +0800)
添加缺失的文件

2.sdk-ZY/project/K01/sdk/services/microPython/ports/quectel/core/ui_video.py [new file with mode: 0644]

diff --git a/2.sdk-ZY/project/K01/sdk/services/microPython/ports/quectel/core/ui_video.py b/2.sdk-ZY/project/K01/sdk/services/microPython/ports/quectel/core/ui_video.py
new file mode 100644 (file)
index 0000000..e66d9d3
--- /dev/null
@@ -0,0 +1,1989 @@
+import modem
+import osTimer
+import utime
+import lvgl as lv
+import EventMesh
+from machine import Timer
+from ui import Screen
+from common import Abstract, LogAdapter
+from machine import RTC
+import ujson
+import ql_fs
+from misc import Power
+import audio
+from ui import LCD_X,LCD_Y,style_press_btn,style_font_youyuan_20,style_screen,style_font_youyuan_20_black,style_font_youyuan_20_gray,style_img,style_video_btn,style_screen,style_font_youyuan_20
+import ntptime
+import constants
+import camera
+import uos
+
+camera_popup_screen = None
+camera_popup_label = None
+camera_img_test = None
+def camCapturecallback(result_list):
+    print("camCapturecallback",result_list)
+    if result_list[0] == 0:#保存成功
+        file = str(result_list[1])
+        tmp = file.split('/')[3]
+        tmp = tmp.split("_camera")[0]
+        time = int(tmp)
+        album_data = int(EventMesh.publish("get_camera_num"))
+        if album_data >= 1:
+            album_data=1
+        print("album_data",album_data)
+        EventMesh.publish("set_camera_num",album_data+1)
+        EventMesh.publish("save_album_succ",1)
+        pass
+    pass
+#gpio_CAM_PWDN = Pin(Pin.GPIO42, Pin.OUT, Pin.PULL_DISABLE, 0)
+dec = camera.camCapture(0,240,320,1,128,128)
+dec.callback(camCapturecallback)
+
+camera_full_popup_screen = None
+camera_full_label_popup_screen = None
+class cameraFullScreen(Screen):#相册已满
+    #
+    NAME = "camera_full"
+    
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.meta_type = "popup"
+
+
+    def initialization(self):
+        global camera_full_popup_screen ,camera_full_label_popup_screen
+        
+        
+        if camera_full_popup_screen == None:
+            camera_full_popup_screen = lv.obj()
+            print("camera_full")
+            camera_full_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            camera_full_label_popup_screen = lv.label(camera_full_popup_screen)
+            camera_full_label_popup_screen.set_pos(0, 50)
+            camera_full_label_popup_screen.set_size(128, 40)
+            camera_full_label_popup_screen.set_text("相册已满,删除即可拍照")
+            camera_full_label_popup_screen.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            camera_full_label_popup_screen.set_long_mode(lv.label.LONG.WRAP)
+            camera_full_label_popup_screen.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            self.meta = camera_full_popup_screen
+
+
+    def done_click(self):
+        EventMesh.publish("return_prev_screen")
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+   
+            
+    def done_return(self):
+        EventMesh.publish("return_prev_screen")
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
+
+    def btn1_release(self):
+        EventMesh.publish("return_prev_screen")
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+    def btn8_press(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+delete_album_popup_screen = None
+delete_album_label_popup_screen = None
+class deletealbumScreen(Screen):#删除图片
+    #
+    NAME = "delete_album"
+    
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.meta_type = "popup"
+
+
+    def initialization(self):
+        global delete_album_popup_screen ,delete_album_label_popup_screen
+        
+        
+        if delete_album_popup_screen == None:
+            delete_album_popup_screen = lv.obj()
+            print("delete_album_popup_screen")
+            delete_album_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            delete_album_label_popup_screen = lv.label(delete_album_popup_screen)
+            delete_album_label_popup_screen.set_pos(0, 50)
+            delete_album_label_popup_screen.set_size(128, 40)
+            delete_album_label_popup_screen.set_text("删除成功")
+            delete_album_label_popup_screen.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            delete_album_label_popup_screen.set_long_mode(lv.label.LONG.WRAP)
+            delete_album_label_popup_screen.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            self.meta = delete_album_popup_screen
+
+
+    def done_click(self):
+        EventMesh.publish("return_prev_screen")
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+   
+            
+    def done_return(self):
+        EventMesh.publish("return_prev_screen")
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
+
+    def btn1_release(self):
+        EventMesh.publish("return_prev_screen")
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+    def btn8_press(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+import jrtc
+class cameraScreen(Screen):#相机拍照二级界面
+    #
+    NAME = "camera"
+    
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.preview1 = None
+        self.timer = osTimer()
+        self.timer2 = osTimer()
+        self.timer3 = osTimer()
+        self.camera_num = 0
+        EventMesh.subscribe("save_album_succ",self.save_album_succ)
+
+    def initialization(self):
+        global camera_popup_screen ,camera_popup_label,camera_img_test
+        # dec = camera.camCapture(0,240,320,1,128,128)
+        # dec.callback(camCapturecallback)
+        #gpio_CAM_PWDN.write(0)
+        state = dec.open()
+        dec.set_cam_angle(3)
+
+        if camera_popup_screen == None:
+            camera_popup_screen = lv.obj()
+            print("camera_popup_screen")
+            camera_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            
+            camera_img_test = lv.img(camera_popup_screen)
+                # img_test.set_src("U:/hang_up.png")
+            ret = dec.set_img(camera_img_test)
+            
+            camera_img_test.align(lv.ALIGN.CENTER, 0, 0)
+            camera_img_test.set_size(128,128)
+            
+        
+            camera_camera_btn = lv.img(camera_popup_screen)
+            camera_camera_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_camera_btn.set_pos(48, 90)
+            camera_camera_btn.set_size(30,30)
+            camera_camera_btn.set_src("U:/static/camera_btn.png")
+            # camera_camera_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.camera_click(e)), lv.EVENT.SHORT_CLICKED, None)
+
+            camera_camera_album_btn = lv.img(camera_popup_screen)
+            camera_camera_album_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_camera_album_btn.set_pos(100, 10)
+            camera_camera_album_btn.set_size(20,20)
+            camera_camera_album_btn.set_src("U:/static/camera_album_btn.png")
+            # camera_camera_album_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.camera_album_click(e)), lv.EVENT.SHORT_CLICKED, None)
+
+            camera_camera_return_btn = lv.img(camera_popup_screen)
+            camera_camera_return_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_camera_return_btn.set_pos(0, 10)
+            camera_camera_return_btn.set_size(18,18)
+            camera_camera_return_btn.set_src("U:/static/RED_RETURN_PNG.png")
+            # camera_camera_return_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.camera_album_click(e)), lv.EVENT.SHORT_CLICKED, None)
+
+            camera_camera_return_btn_label = lv.label(camera_popup_screen)
+            camera_camera_return_btn_label.set_pos(0, 0)
+            camera_camera_return_btn_label.set_size(40, 40)
+            camera_camera_return_btn_label.set_text(" ")
+            camera_camera_return_btn_label.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_camera_return_btn_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.camera_return_click(e)), lv.EVENT.SHORT_CLICKED, None)
+
+            camera_camera_album_btn_label = lv.label(camera_popup_screen)
+            camera_camera_album_btn_label.set_pos(80, 0)
+            camera_camera_album_btn_label.set_size(48, 40)
+            camera_camera_album_btn_label.set_text(" ")
+            camera_camera_album_btn_label.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_camera_album_btn_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.camera_album_click(e)), lv.EVENT.SHORT_CLICKED, None)
+
+            camera_camera_btn_label = lv.label(camera_popup_screen)
+            camera_camera_btn_label.set_pos(40, 88)
+            camera_camera_btn_label.set_size(50, 40)
+            camera_camera_btn_label.set_text(" ")
+            camera_camera_btn_label.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_camera_btn_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.camera_click(e)), lv.EVENT.SHORT_CLICKED, None)
+
+            camera_popup_label = lv.label(camera_popup_screen)
+            camera_popup_label.set_pos(0, 40)
+            camera_popup_label.set_size(128, 20)
+            camera_popup_label.set_text("保存成功")
+            camera_popup_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            camera_popup_label.set_long_mode(lv.label.LONG.WRAP)
+            camera_popup_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            camera_popup_label.add_flag(lv.obj.FLAG.HIDDEN)
+
+            self.meta = camera_popup_screen
+
+        
+
+        album_data = EventMesh.publish("get_camera_num")
+        if int(album_data) >= 1:#相册已满
+            # EventMesh.publish("load_screen", {"screen": "camera_full"})
+            pass
+        if camera_popup_label != None:
+            camera_popup_label.add_flag(lv.obj.FLAG.HIDDEN)
+        self.timer.start(1*1000,1,self.fun)
+
+    def save_album_succ(self,event,msg):
+        global camera_popup_label
+        if camera_popup_label != None:
+            if msg == 1:
+                camera_popup_label.clear_flag(lv.obj.FLAG.HIDDEN)
+            else:
+                camera_popup_label.add_flag(lv.obj.FLAG.HIDDEN)
+
+        self.timer3.start(1*2000,0,self.save_suc_album)#延迟1s保存图片
+        pass
+
+    def fun(self,*argc):
+        EventMesh.publish("system_sleep_rest")#防止黑屏
+
+    def camera_click(self,e):
+        self.timer3.stop()
+        EventMesh.publish("save_album_succ",2)
+        album_data = EventMesh.publish("get_camera_num")
+        if album_data != None:
+            if int(album_data) >= 1:#相册已满
+                EventMesh.publish("load_screen", {"screen": "camera_full"})
+                return
+        self.timer2.start(1*1000,0,self.save_album)#延迟1s保存图片
+
+    def camera_album_click(self,e):
+        EventMesh.publish("load_screen", {"screen": "camera_album"})
+
+    def camera_return_click(self,e):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+    def Close(self):
+        self.timer.stop()
+        self.timer2.stop()
+        self.timer3.stop()
+        # dec.remove_img()
+        state = dec.close()
+        #gpio_CAM_PWDN.write(1)
+        print("close camera {}!!!!!!!".format(state))
+
+    def save_suc_album(self,*argc):
+        EventMesh.publish("save_album_succ",2)
+    # def done_click(self):
+    #     self.timer2.start(1*1000,0,self.save_album)#延迟1s保存图片
+    #     pass
+    def save_album(self,*argc):
+        album_data = EventMesh.publish("get_camera_num")
+        if int(album_data) <= 1:
+            date_tmp = utime.localtime()
+            time_tmp = utime.mktime(date_tmp)
+            dec.start(128,128, "U:/static/album/1_camera.jpg")
+        else:
+            EventMesh.publish("load_screen", {"screen": "camera_full"})
+            
+    def done_return(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
+
+    def btn1_release(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+    def btn8_press(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+
+
+camera_album_popup_screen = None
+camera_album_popup_label = None
+camera_album_popup_img = None
+imgbt_contanier = None
+camera_album_popup_img1 = None
+camera_album_popup_img2 = None
+camera_album_popup_img3 = None
+camera_album_popup_img4 = None
+camera_album_popup_img5 = None
+class cameraalbumScreen(Screen):#相册
+    #
+    NAME = "camera_album"
+    
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+
+    def initialization(self):
+        global camera_album_popup_screen ,camera_album_popup_label,camera_album_popup_img1,camera_album_popup_img2,camera_album_popup_img3,camera_album_popup_img4,camera_album_popup_img5
+        
+        if camera_album_popup_screen == None:
+            camera_album_popup_screen = lv.obj()
+            print("camera_album_popup_screen")
+            camera_album_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            camera_album_popup_label = lv.label(camera_album_popup_screen)
+            camera_album_popup_label.set_pos(0, 60)
+            camera_album_popup_label.set_size(128, 20)
+            camera_album_popup_label.set_text("还没有照片")
+            camera_album_popup_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            camera_album_popup_label.set_long_mode(lv.label.LONG.WRAP)
+            camera_album_popup_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+            camera_album_popup_img1 = lv.img(camera_album_popup_screen)
+            camera_album_popup_img1.set_pos(0, 0)
+            camera_album_popup_img1.set_size(128, 128)
+            
+            # camera_album_popup_img1.add_flag(lv.obj.FLAG.HIDDEN)
+            # camera_album_popup_img1.add_flag(lv.obj.FLAG.CLICKABLE)
+            # # camera_album_popup_img1.set_zoom(256)
+            # camera_album_popup_img1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.click_album(e,0)), lv.EVENT.SHORT_CLICKED, None)
+
+            camera_album_popup_img2 = lv.img(camera_album_popup_screen)
+            camera_album_popup_img2.set_pos(51, 100)
+            camera_album_popup_img2.set_size(25, 25)
+            camera_album_popup_img2.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_album_popup_img2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.click_album(e,0)), lv.EVENT.SHORT_CLICKED, None)
+
+            camera_album_popup_img3 = lv.img(camera_album_popup_screen)
+            camera_album_popup_img3.set_pos(0, 10)
+            camera_album_popup_img3.set_size(18,18)
+            camera_album_popup_img3.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_album_popup_img3.set_src("U:/static/RED_RETURN_PNG.png")
+            camera_album_popup_img3.add_event_cb(lambda e: EventMesh.callback_wrapper(self.click_album(e,1)), lv.EVENT.SHORT_CLICKED, None)
+
+            self.meta = camera_album_popup_screen
+        read_album = 0
+        read_album = EventMesh.publish("get_camera_num")
+        print("read_album",read_album)
+        IFEXIST = ql_fs.path_exists("/usr/static/album/1_camera.jpg") 
+        if IFEXIST == True:
+            camera_album_popup_img1.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_album_popup_img1.set_src("U:/static/album/1_camera.jpg") #'U:/6_camera.jpeg'"U:/static/album/1_camera.jpg"
+            camera_album_popup_img2.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_album_popup_img2.set_src("U:/static/album_delete.png")
+            camera_album_popup_label.add_flag(lv.obj.FLAG.HIDDEN)
+        else:
+            camera_album_popup_img1.add_flag(lv.obj.FLAG.HIDDEN)
+            camera_album_popup_img2.add_flag(lv.obj.FLAG.HIDDEN)
+            camera_album_popup_label.clear_flag(lv.obj.FLAG.HIDDEN)
+        
+    
+    def click_album(self,e,i):
+        if i == 0:
+            check_img = ql_fs.path_exists("/usr/static/album/1_camera.jpg")
+            if check_img == True :#图片存在
+                uos.remove("/usr/static/album/1_camera.jpg")#删除单张图片
+                album_data = int(EventMesh.publish("get_camera_num"))
+
+                EventMesh.publish("set_camera_num",album_data-1)
+
+                EventMesh.publish("load_screen", {"screen": "delete_album"})
+                return
+        
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+        # read_album = {}
+        # read_album = EventMesh.publish("get_camera_num")
+        # if len(read_album) != 0 and i < len(read_album):
+        #     sort_new = {}
+        #     sort_new = sorted(read_album.keys())
+        #     key = sort_new[i]
+        #     value = int(read_album[key]["timeSec"])
+        #     self.meta_info = value
+        #     print(self.meta_info,i)
+        #     EventMesh.publish("load_screen", {"screen": "album_preview","meta": self.meta_info})#点击进入相册预览大图显示
+        # print(i)
+        pass
+
+    def Close(self):
+        pass
+
+    def done_click(self):
+        
+        pass
+
+    def done_return(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
+
+    def btn1_release(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+    def btn8_press(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+album_preview_popup_screen = None
+album_preview_popup_img = None
+album_preview_popup_delet_con_label = None
+album_preview_popup_delet_con_label = None
+album_preview_popup_delet_label = None
+class albumPreviewScreen(Screen):#点击预览
+    #
+    NAME = "album_preview"
+    
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+
+    def initialization(self):
+        global album_preview_popup_screen ,album_preview_popup_delet_label,album_preview_popup_img,album_preview_popup_delet_can_label,album_preview_popup_delet_con_label
+        
+        if album_preview_popup_screen == None:
+            album_preview_popup_screen = lv.obj()
+            print("album_preview_popup_screen")
+            album_preview_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+            album_preview_popup_img = lv.img(album_preview_popup_screen)
+            album_preview_popup_img.set_pos(0, 0)
+            album_preview_popup_img.set_size(120,120)
+            # album_preview_popup_img.set_zoom(400)
+
+            album_preview_popup_delet_label = lv.label(album_preview_popup_screen)
+            album_preview_popup_delet_label.set_pos(0, 65)
+            album_preview_popup_delet_label.set_size(128, 20)
+            album_preview_popup_delet_label.set_text("是否删除")
+            album_preview_popup_delet_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            album_preview_popup_delet_label.set_long_mode(lv.label.LONG.WRAP)
+            album_preview_popup_delet_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+            album_preview_popup_delet_con_label = lv.label(album_preview_popup_screen)
+            album_preview_popup_delet_con_label.set_pos(0, 95)
+            album_preview_popup_delet_con_label.set_size(64, 33)
+            album_preview_popup_delet_con_label.set_text("确定")
+            album_preview_popup_delet_con_label.add_flag(lv.obj.FLAG.CLICKABLE)
+            album_preview_popup_delet_con_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            album_preview_popup_delet_con_label.set_long_mode(lv.label.LONG.WRAP)
+            album_preview_popup_delet_con_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+
+            album_preview_popup_delet_can_label = lv.label(album_preview_popup_screen)
+            album_preview_popup_delet_can_label.set_pos(64, 95)
+            album_preview_popup_delet_can_label.set_size(64, 33)
+            album_preview_popup_delet_can_label.set_text("取消")
+            album_preview_popup_delet_can_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            album_preview_popup_delet_can_label.set_long_mode(lv.label.LONG.WRAP)
+            album_preview_popup_delet_can_label.add_flag(lv.obj.FLAG.CLICKABLE)
+            album_preview_popup_delet_can_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+            self.meta = album_preview_popup_screen
+        album_num_tmp = None
+        album_num_tmp = int(self.meta_info)
+        print(album_num_tmp)
+        album_preview_popup_delet_can_label.add_event_cb(lambda e:EventMesh.callback_wrapper(self.cancel_pop(e)),lv.EVENT.SHORT_CLICKED,None)
+        album_preview_popup_delet_con_label.add_event_cb(lambda e:EventMesh.callback_wrapper(self.confirm_pop(e)),lv.EVENT.SHORT_CLICKED,None)
+        
+        album_preview_popup_img.set_src("U:/static/album/%d_camera.jpg"%(album_num_tmp))#'U:/6_camera.jpeg'
+
+    def cancel_pop(self,e):#取消删除
+        EventMesh.publish("load_screen", {"screen": "main_menu"})#点击回到相册界面
+        pass
+
+    def confirm_pop(self,e):#确认删除
+        # album_num = int(self.meta_info.split(':')[1])
+        # album_num_tmp = None
+        # album_num_tmp = int(self.meta_info)
+        # print(album_num_tmp)
+       
+        # check_img = ql_fs.path_exists("/usr/static/album/%d_camera.jpg"%(album_num_tmp))
+        # if check_img == True :#图片存在
+        #     uos.remove("/usr/static/album/%d_camera.jpg"%(album_num_tmp))#删除单张图片
+        #     read_album = {}
+        #     read_album = EventMesh.publish("get_camera_num")#删除的同时把数据部分也清掉
+        #     print("img is exit1",read_album)
+        #     if read_album != {}:
+        #         key_tmp = album_num_tmp
+        #         del read_album[key_tmp]#删除内容
+        #         EventMesh.publish("set_camera_num",read_album)
+        #     print("img is exit2",read_album)
+        #     pass
+        # else:#图片不存在
+        #     print("img is not exit")
+        #     pass
+        EventMesh.publish("load_screen", {"screen": "camera_album"})#点击回到相册界面
+        pass
+
+    def Close(self):
+        pass
+
+    def done_click(self):
+        pass
+
+    def done_return(self):
+       
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
+        
+
+    def btn1_release(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+    def btn8_press(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+
+camera_voice_answer_second_label = None
+camera_voice_answer_screen = None
+camera_voice_answer_label = None
+camera_voice_answer_btn = None
+camera_voice_answer_btn_label =None
+
+class VoiceShowScreen(Screen):#正在语音通话中
+    #
+    NAME = "voiceing"
+    
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.preview1 = None
+        self.timer = osTimer()
+        self.aud = audio.Audio(0)
+        self.statu_open = -1
+        self.show_label = 0
+        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):
+        global camera_voice_answer_screen,camera_voice_answer_second_label ,camera_voice_answer_btn_label,camera_voice_answer_label,camera_voice_answer_btn
+        if camera_voice_answer_screen == None:
+            camera_voice_answer_screen = lv.obj()
+            print("camera_voice_answer_screen")
+            camera_voice_answer_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+            camera_voice_answer_label = lv.label(camera_voice_answer_screen)
+            camera_voice_answer_label.set_pos(0, 20)
+            camera_voice_answer_label.set_text("正在通话中...")
+            camera_voice_answer_label.set_size(128, 40)
+            camera_voice_answer_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            camera_voice_answer_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            camera_voice_answer_second_label = lv.label(camera_voice_answer_screen)
+            camera_voice_answer_second_label.set_pos(0, 50)
+            camera_voice_answer_second_label.set_text(" ")
+            camera_voice_answer_second_label.set_size(128, 40)
+            camera_voice_answer_second_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            camera_voice_answer_second_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            camera_voice_answer_btn = lv.img(camera_voice_answer_screen)
+            camera_voice_answer_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_voice_answer_btn.set_pos(48, 90)
+            camera_voice_answer_btn.set_size(32,32)
+            camera_voice_answer_btn.set_src("U:/static/hang_up.png")
+
+            camera_voice_answer_btn_label = lv.label(camera_voice_answer_screen)
+            camera_voice_answer_btn_label.set_pos(38, 80)
+            camera_voice_answer_btn_label.set_text(" ")
+            camera_voice_answer_btn_label.set_size(52, 48)
+            camera_voice_answer_btn_label.add_flag(lv.obj.FLAG.CLICKABLE)
+
+            camera_voice_answer_btn_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.close_cb(e)), lv.EVENT.SHORT_CLICKED, None)
+            
+            camera_voice_answer_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.close_cb(e)), lv.EVENT.SHORT_CLICKED, None)
+            
+            self.meta = camera_voice_answer_screen
+        call_state = jrtc.get_state()
+
+        self.second_count = 0
+        self.statu_open = 0
+      
+        self.time_out = 0
+        
+        EventMesh.publish("set_UI_high_priority", 1)
+        if call_state == 5:#接通
+            camera_voice_answer_label.set_text("正在通话中...")
+            camera_voice_answer_label.set_pos(0, 20)
+            camera_voice_answer_second_label.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_voice_answer_second_label.set_text("00:00")
+            camera_voice_answer_second_label.set_pos(0, 50)
+            # camera_voice_answer_btn.clear_flag(lv.obj.FLAG.HIDDEN)
+            # camera_voice_answer_btn_label.clear_flag(lv.obj.FLAG.HIDDEN)
+        else:
+            camera_voice_answer_label.set_text("正在接听中...")
+            camera_voice_answer_label.set_pos(0, 50)
+            camera_voice_answer_second_label.add_flag(lv.obj.FLAG.HIDDEN)
+            # camera_voice_answer_btn.add_flag(lv.obj.FLAG.HIDDEN)
+            # camera_voice_answer_btn_label.add_flag(lv.obj.FLAG.HIDDEN)
+        self.timer.start(1*1000,1,self.fun)
+
+
+    def close_cb(self,e):
+        self.statu_open = 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"))#
+        
+        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")
+    
+    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("publish_message_event_ui",{"func":self.fun_cb,"data":0})
+
+    def fun_cb(self,data):
+        EventMesh.publish("system_sleep_rest")#防止黑屏
+        call_state = jrtc.get_state()
+        if call_state == 5:
+            camera_voice_answer_label.set_text("正在通话中...")
+            camera_voice_answer_label.set_pos(0, 20)
+            # camera_video_answer_label.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_voice_answer_second_label.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_voice_answer_second_label.set_pos(0, 50)
+            camera_voice_answer_btn.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_voice_answer_btn_label.clear_flag(lv.obj.FLAG.HIDDEN)
+            
+            self.second_count+=1
+            self.show_time()
+        
+        if call_state != 5:
+            self.time_out+=1
+            if self.time_out >= 60 or (call_state == 0 and self.statu_open == 0 and  self.time_out >= 5):
+                self.time_out = 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("load_screen", {"screen": "main_menu"})
+                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:
+            total_hour = self.second_count//3600#小时
+            total_min = (self.second_count%3600)//60#分钟
+            total_sec = (self.second_count%3600)%60#秒
+            camera_voice_answer_second_label.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
+            camera_voice_answer_second_label.set_text("{}:{}".format("%02d"%(total_min),"%02d"%(total_sec)))
+
+    def Close(self):
+        num = EventMesh.publish("get_volum_size")
+        if num == None:
+            num = 8
+        self.aud.setVolume(num)#恢复原始音量
+        self.timer.stop()
+
+    def done_return(self):
+        pass
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
+
+    def btn1_release(self):
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+    def btn8_press(self):
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+
+
+camera_video_answer_screen = None
+camera_video_answer_second_label = None
+camera_video_answer_label = None
+camera_video_answer_btn = None
+camera_video_answer_btn_label = None
+video_img_test = None
+def jrtc_cb(close_sta):
+    print("jrtc callback:", close_sta)
+    if close_sta == 0 or close_sta == 1:
+        jrtc.close(0)
+
+jrtc.set_callback(jrtc_cb)
+class VedioShowScreen(Screen):#正在视频通话中
+    #
+    NAME = "vedioing"
+    
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.preview1 = None
+        self.aud = audio.Audio(0)
+        self.timer = osTimer()
+        self.statu_open = -1
+        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):
+        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_270)
+
+
+    def close_jrtc_event(self,event,msg):
+        # print("close_jrtc_event")
+        jrtc.close(0)
+        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):
+        
+        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()
+            print("camera_video_answer_screen")
+            camera_video_answer_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            video_img_test = lv.img(camera_video_answer_screen)
+            ret = jrtc.set_img(video_img_test)
+            video_img_test.align(lv.ALIGN.CENTER, 0, 0)
+            video_img_test.set_size(128,128)
+        
+
+            camera_video_answer_label = lv.label(camera_video_answer_screen)
+            camera_video_answer_label.set_pos(0, 20)
+            camera_video_answer_label.set_text("正在通话中...")
+            camera_video_answer_label.set_size(128, 40)
+            camera_video_answer_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            camera_video_answer_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+            camera_video_answer_second_label = lv.label(camera_video_answer_screen)
+            camera_video_answer_second_label.set_pos(0, 50)
+            camera_video_answer_second_label.set_text(" ")
+            camera_video_answer_second_label.set_size(128, 40)
+            camera_video_answer_second_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            camera_video_answer_second_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            camera_video_answer_btn = lv.img(camera_video_answer_screen)
+            camera_video_answer_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+            camera_video_answer_btn.set_pos(48, 90)
+            camera_video_answer_btn.set_size(32,32)
+            camera_video_answer_btn.set_src("U:/static/hang_up.png")
+
+            camera_video_answer_btn_label = lv.label(camera_video_answer_screen)
+            camera_video_answer_btn_label.set_pos(38, 80)
+            camera_video_answer_btn_label.set_text(" ")
+            camera_video_answer_btn_label.set_size(52, 48)
+            camera_video_answer_btn_label.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+            camera_video_answer_btn_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.close_cb(e)), lv.EVENT.SHORT_CLICKED, None)
+            camera_video_answer_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.close_cb(e)), lv.EVENT.SHORT_CLICKED, None)
+            self.meta = camera_video_answer_screen
+        
+        call_state = jrtc.get_state()
+        self.second_count = 0
+        self.statu_open = 0
+        self.time_out = 0
+        
+        EventMesh.publish("set_UI_high_priority", 1)
+        if call_state == 5:#接通
+            camera_video_answer_label.set_text("正在通话中...")
+            camera_video_answer_label.set_pos(0, 20)
+            camera_video_answer_second_label.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_video_answer_second_label.set_text("00:00")
+            camera_video_answer_second_label.set_pos(0, 50)
+            video_img_test.clear_flag(lv.obj.FLAG.HIDDEN)
+        else:
+            camera_video_answer_label.set_text("正在接听中...")
+            camera_video_answer_label.set_pos(0, 50)
+            camera_video_answer_second_label.add_flag(lv.obj.FLAG.HIDDEN)
+            video_img_test.add_flag(lv.obj.FLAG.HIDDEN)
+        self.timer.start(1*1000,1,self.fun)
+
+
+    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"))#
+        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")
+    
+    def fun(self,*argc):  
+        EventMesh.publish("publish_message_event_ui",{"func":self.fun_cb,"data":0})
+
+
+    def fun_cb(self,data):
+        EventMesh.publish("system_sleep_rest")#防止黑屏
+        call_state = jrtc.get_state()
+        if call_state == 5:
+            camera_video_answer_label.set_text("正在通话中...")
+            camera_video_answer_label.set_pos(0, 20)
+            # camera_video_answer_label.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_video_answer_second_label.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_video_answer_btn.clear_flag(lv.obj.FLAG.HIDDEN)
+            camera_video_answer_btn_label.clear_flag(lv.obj.FLAG.HIDDEN)
+            
+            video_img_test.clear_flag(lv.obj.FLAG.HIDDEN)
+            self.second_count+=1
+            self.show_time()
+        
+        if call_state != 5:
+            self.time_out+=1
+            if self.time_out >= 60 or (call_state == 0 and self.time_out >= 2 and self.statu_open != 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"))#
+                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")
+
+        
+    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#秒
+            camera_video_answer_second_label.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
+            camera_video_answer_second_label.set_text("{}:{}".format("%02d"%(total_min),"%02d"%(total_sec)))
+            # camera_video_answer_second_label.set_text("%02d"%(total_min),"%02d"%(total_sec))
+
+    def Close(self):
+        num = EventMesh.publish("get_volum_size")
+        if num == None:
+            num = 8
+        self.aud.setVolume(num)#恢复原始音量
+        self.timer.stop()
+
+    def done_return(self):
+        pass
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
+
+    def btn1_release(self):
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+    def btn8_press(self):
+        # EventMesh.publish("load_screen", {"screen": "main_menu"})
+        pass
+
+
+
+
+
+voice_call_screen = None
+voice_call_img = None
+voice_call_name_label = None
+voice_call_answer = None
+voice_call_hangup = None
+voice_call_label = None
+class voiceInCallScreen(Screen):#语音通话打入中
+    NAME = "voice_incall"
+
+    def __init__(self):
+        super().__init__()
+        self.meta_type = "popup"
+        self.aud = audio.Audio(0)
+        self.call_timer = osTimer()
+        self.call_timer1 = osTimer()
+        self.meta = None
+        self.timeout = 0
+        
+    def initialization(self):
+        global voice_call_screen,voice_call_img,voice_call_name_label,voice_call_answer,voice_call_hangup,voice_call_label
+        if voice_call_screen == None :
+            # -------------------------------------------vedio_call screen----------------------------------------------------------
+            voice_call_screen = lv.obj()
+            print("voice_call_screen")
+            voice_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            voice_call_label = lv.label(voice_call_screen)
+            voice_call_label.set_pos(0, 10)
+            voice_call_label.set_text("是否接听语音通话")
+            voice_call_label.set_size(128, 40)
+            voice_call_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            voice_call_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            # vedio_call_img = lv.img(voice_call_screen)
+            # vedio_call_img.set_pos(48, 10)
+            # vedio_call_img.set_size(32, 32)
+            # vedio_call_img.set_src("U:/static/IMAGE_NOTICE_CALL.png")
+            # vedio_call_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            voice_call_name_label = lv.label(voice_call_screen)
+            voice_call_name_label.set_pos(0, 40)
+            voice_call_name_label.set_text(" ")
+            voice_call_name_label.set_size(128, 40)
+            voice_call_name_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            voice_call_name_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            voice_call_answer = lv.img(voice_call_screen)
+            voice_call_answer.set_size(32, 32)
+            voice_call_answer.add_flag(lv.obj.FLAG.CLICKABLE)
+            voice_call_answer.set_pos(84, 85)
+            voice_call_answer.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            voice_call_answer.set_src("U:/static/answer.png")
+
+            voice_call_hangup = lv.img(voice_call_screen)
+            voice_call_hangup.set_size(32, 32)
+            voice_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
+            voice_call_hangup.set_pos(11, 85)
+            voice_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            voice_call_hangup.set_src("U:/static/hang_up.png")
+
+            voice_call_answer.add_event_cb(lambda e: EventMesh.callback_wrapper(self.answer(e)),
+                                     lv.EVENT.SHORT_CLICKED, None)
+            voice_call_hangup.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+                                     lv.EVENT.SHORT_CLICKED, None)
+            self.meta = voice_call_screen 
+    
+
+        EventMesh.publish("set_UI_high_priority", 1)
+        call_id = str(EventMesh.publish("get_vedio_call_id"))#
+        voice_call_name_label.set_text(self.meta_info)
+
+    def post_processor_after_initialization(self):
+        global voice_call_screen,voice_call_img,voice_call_name_label,voice_call_answer,voice_call_hangup  
+        self.call_timer.start(6000, 1, self.call_timer_cb)
+        self.timeout = 0
+        self.call_timer1.start(1*1000, 1, self.get_video_state)
+        self.aud.play(1, 1, 'U:/static/R_CALL_mp3.mp3')  #播放来电铃声
+
+    def call_timer_cb(self,e):
+       self.aud.play(1, 1, 'U:/static/R_CALL_mp3.mp3')  #播放来电铃声
+
+    def get_video_state(self,*argc):  
+        EventMesh.publish("publish_message_event_ui",{"func":self.get_video_state_cb,"data":0})
+
+    def get_video_state_cb(self,data):
+        EventMesh.publish("system_sleep_rest")#防止黑屏
+        self.timeout+=1
+        if self.timeout >= 1*30:
+            self.timeout = 0
+            self.aud.stop() 
+            self.call_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("set_UI_high_priority", 0)
+            EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+            EventMesh.publish("return_prev_screen")
+
+    def answer(self,e):
+        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"})
+
+    def Close(self):
+        self.call_timer.stop()
+        self.call_timer1.stop()
+        self.aud.stop() 
+    
+    def hangup(self,e):
+        EventMesh.publish("set_UI_high_priority", 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"))#
+        EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+
+        EventMesh.publish("return_prev_screen")
+
+    def btn1_release(self):
+        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
+
+    def done_left_to_right(self):
+        pass
+    
+    def done_right_to_left(self):
+        pass
+
+    def done_bottom_to_top(self):
+        pass
+    
+    def done_top_to_bottom(self):
+        pass
+    
+    def done_return(self):
+        pass
+
+
+
+vedio_call_screen = None
+vedio_call_img = None
+vedio_call_name_label = None
+vedio_call_answer = None
+vedio_call_hangup = None
+vedio_call_label = None
+class vedioCallingCallScreen(Screen):#视频通话打入中
+    NAME = "vedio_incall"
+
+    def __init__(self):
+        super().__init__()
+        self.meta_type = "popup"
+        self.aud = audio.Audio(0)
+        self.call_timer = osTimer()
+        self.call_timer1 = osTimer()
+        self.meta = None
+        self.timeout = 0
+        
+    def initialization(self):
+        global vedio_call_screen,vedio_call_img,vedio_call_name_label,vedio_call_answer,vedio_call_hangup,vedio_call_label
+        if vedio_call_screen == None :
+            # -------------------------------------------vedio_call screen----------------------------------------------------------
+            vedio_call_screen = lv.obj()
+            print("vedio_call_screen")
+            vedio_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            vedio_call_label = lv.label(vedio_call_screen)
+            vedio_call_label.set_pos(0, 10)
+            vedio_call_label.set_text("是否接听视频通话")
+            vedio_call_label.set_size(128, 40)
+            vedio_call_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            vedio_call_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            # vedio_call_img = lv.img(vedio_call_screen)
+            # vedio_call_img.set_pos(48, 10)
+            # vedio_call_img.set_size(32, 32)
+            # vedio_call_img.set_src("U:/static/IMAGE_NOTICE_CALL.png")
+            # vedio_call_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            vedio_call_name_label = lv.label(vedio_call_screen)
+            vedio_call_name_label.set_pos(0, 40)
+            vedio_call_name_label.set_text(" ")
+            vedio_call_name_label.set_size(128, 40)
+            vedio_call_name_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            vedio_call_name_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            vedio_call_answer = lv.img(vedio_call_screen)
+            vedio_call_answer.set_size(32, 32)
+            vedio_call_answer.add_flag(lv.obj.FLAG.CLICKABLE)
+            vedio_call_answer.set_pos(84, 85)
+            vedio_call_answer.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            vedio_call_answer.set_src("U:/static/answer.png")
+
+            vedio_call_hangup = lv.img(vedio_call_screen)
+            vedio_call_hangup.set_size(32, 32)
+            vedio_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
+            vedio_call_hangup.set_pos(11, 85)
+            vedio_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            vedio_call_hangup.set_src("U:/static/hang_up.png")
+
+            vedio_call_answer.add_event_cb(lambda e: EventMesh.callback_wrapper(self.answer(e)),
+                                     lv.EVENT.SHORT_CLICKED, None)
+            vedio_call_hangup.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+                                     lv.EVENT.SHORT_CLICKED, None)
+            self.meta = vedio_call_screen 
+        
+        vedio_call_label.set_text("是否接听视频通话")
+
+        EventMesh.publish("set_UI_high_priority", 1)
+        
+        call_id = str(EventMesh.publish("get_vedio_call_id"))#
+
+        vedio_call_name_label.set_text(self.meta_info)
+
+
+    def post_processor_after_initialization(self):
+        global vedio_call_screen,vedio_call_img,vedio_call_name_label,vedio_call_answer,vedio_call_hangup  
+        self.call_timer.start(6000, 1, self.call_timer_cb)
+        self.timeout = 0
+        self.call_timer1.start(1*1000, 1, self.get_video_state)
+        self.aud.play(1, 1, 'U:/static/R_CALL_mp3.mp3')  #播放来电铃声
+
+    def call_timer_cb(self,e):
+       self.aud.play(1, 1, 'U:/static/R_CALL_mp3.mp3')  #播放来电铃声
+
+    def get_video_state(self,*argc):  
+        EventMesh.publish("publish_message_event_ui",{"func":self.get_video_state_cb,"data":0})
+
+    def get_video_state_cb(self,data):
+        EventMesh.publish("system_sleep_rest")#防止黑屏
+        call_state = jrtc.get_state()
+        # print("vedio_incall",call_state)
+        self.timeout+=1
+        if self.timeout >= 1*30:
+            self.aud.stop() 
+            self.timeout = 0
+            self.call_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("set_UI_high_priority", 0)
+            EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+            EventMesh.publish("return_prev_screen")
+
+    def answer(self,e):
+        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 Close(self):
+        self.call_timer.stop()
+        self.call_timer1.stop()
+        num = EventMesh.publish("get_volum_size")
+        if num == None:
+            num = 8
+        self.aud.setVolume(num)#恢复原始音量
+        self.aud.stop() 
+    
+    def hangup(self,e):
+        EventMesh.publish("set_UI_high_priority", 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"))#
+        EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+
+        EventMesh.publish("return_prev_screen")
+
+    def btn1_release(self):
+        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
+
+    def done_left_to_right(self):
+        pass
+    
+    def done_right_to_left(self):
+        pass
+
+    def done_bottom_to_top(self):
+        pass
+    
+    def done_top_to_bottom(self):
+        pass
+    
+    def done_return(self):
+        pass
+
+
+
+
+
+video_outcall_screen = None
+video_outcall_img = None
+video_outcall_name = None
+video_outcall_hangup_imgbtn = None
+video_outcall_call = None
+video_outcall_img_test = None
+video_outcall_hangup_imgbtnlabel = None
+class videoOutCallScreen(Screen):#正在拨号中...未打出
+    NAME = "video_outcall"
+
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.meta_type = "popup"
+        self.timer1 = osTimer()
+        self.aud = audio.Audio(0)
+        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 video_outcall_screen,video_outcall_img,video_outcall_hangup_imgbtnlabel,video_outcall_img_test,video_outcall_name ,video_outcall_call,video_outcall_hangup_imgbtn 
+        if video_outcall_screen == None:
+            video_outcall_screen = lv.obj()
+            print("video_outcall_screen")
+            video_outcall_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            video_outcall_img_test = lv.img(video_outcall_screen)
+            ret = jrtc.set_img(video_outcall_img_test)
+            video_outcall_img_test.align(lv.ALIGN.CENTER, 0, 0)
+            video_outcall_img_test.set_size(128,128)
+            video_outcall_img_test.add_flag(lv.obj.FLAG.HIDDEN)
+
+            video_outcall_name = lv.label(video_outcall_screen)
+            video_outcall_name.set_pos(0, 5)
+            video_outcall_name.set_size(LCD_X, 35)
+            video_outcall_name.set_text(" ")
+            video_outcall_name.set_long_mode(lv.label.LONG.DOT)
+            video_outcall_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            video_outcall_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            video_outcall_call = lv.label(video_outcall_screen)
+            video_outcall_call.set_pos(0, 50)
+            video_outcall_call.set_size(LCD_X, 40)
+            video_outcall_call.set_text("正在等待对方接听中...")
+            video_outcall_call.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            video_outcall_call.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            video_outcall_hangup_imgbtn = lv.img(video_outcall_screen)
+            video_outcall_hangup_imgbtn.set_size(32, 32)
+            video_outcall_hangup_imgbtn.set_src("U:/static/hang_up.png")
+            video_outcall_hangup_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+            video_outcall_hangup_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+            video_outcall_hangup_imgbtn.set_pos(48, 90)
+
+            video_outcall_hangup_imgbtnlabel = lv.label(video_outcall_screen)
+            video_outcall_hangup_imgbtnlabel.set_pos(38, 80)
+            video_outcall_hangup_imgbtnlabel.set_text(" ")
+            video_outcall_hangup_imgbtnlabel.set_size(52, 48) 
+            video_outcall_hangup_imgbtnlabel.add_flag(lv.obj.FLAG.CLICKABLE)
+
+            video_outcall_hangup_imgbtnlabel.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+                                    lv.EVENT.SHORT_CLICKED, None)
+            
+            video_outcall_hangup_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+                                    lv.EVENT.SHORT_CLICKED, None)
+            
+
+            
+            self.meta = video_outcall_screen
+        if video_outcall_name != None:
+            video_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)
+            video_outcall_name.set_text("正在通话中...")#
+            video_outcall_name.set_pos(0, 20)
+        else:
+            video_outcall_img_test.add_flag(lv.obj.FLAG.HIDDEN)
+            video_outcall_call.set_text("正在等待对方接听中...")
+            video_outcall_call.set_pos(0, 45)
+            video_outcall_name.set_text(self.meta_info)#名称
+            video_outcall_name.set_pos(0, 5)
+
+        self.timer1.start(1*1000,1,self.fun_cb)
+
+    def post_processor_after_initialization(self):
+        pass
+   
+    def hangup(self,e):
+        self.answer = 1
+        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):  
+        EventMesh.publish("publish_message_event_ui",{"func":self.fun,"data":0})
+
+    def fun(self,data):
+        call_state = jrtc.get_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)
+            video_outcall_name.set_text("正在通话中...")#
+            video_outcall_name.set_pos(0, 20)
+            video_outcall_call.set_pos(0, 50)
+            self.second_count += 1
+            self.show_time()
+
+        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 and self.answer != 1):
+            # if self.time_count >= 1*60:
+                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#秒
+            video_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
+            video_outcall_call.set_text("{}:{}".format("%02d"%(total_min),"%02d"%(total_sec)))
+
+    def Close(self):
+        num = EventMesh.publish("get_volum_size")
+        if num == None:
+            num = 8
+        self.aud.setVolume(num)#恢复原始音量
+        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
+
+
+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.aud = audio.Audio(0)
+        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, 5)
+            voice_outcall_name.set_size(LCD_X, 35)
+            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(38, 80)
+            voice_outcall_hangup_imgbtnlabel.set_text(" ")
+            voice_outcall_hangup_imgbtnlabel.set_size(52, 48) 
+            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, 45)
+            voice_outcall_name.set_text(self.meta_info)#名称
+            voice_outcall_name.set_pos(0, 5)
+
+        self.timer1.start(1*1000,1,self.fun_cb)
+
+    def post_processor_after_initialization(self):
+        pass
+   
+    def hangup(self,e):
+        self.answer = 1
+        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):  
+        EventMesh.publish("publish_message_event_ui",{"func":self.fun,"data":0})
+
+    def fun(self,data):
+        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.answer != 1):
+           
+                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):
+        num = EventMesh.publish("get_volum_size")
+        if num == None:
+            num = 8
+        self.aud.setVolume(num)#恢复原始音量
+        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
+videolist_none_label = None
+videolist_screen_list_screen = None
+class videolistScreen(Screen):
+    NAME = "videolist"
+
+    def __init__(self):
+        super().__init__()
+        # -------------------------------------------popup_menu screen----------------------------------------------------------
+        self.meta = None
+        self.videobook = {}
+        self.count = 0
+        self.phone_num_count = 0
+        self.phone_num = {}
+        self.name = []
+        self.check_json = 0
+        self.timer = osTimer()
+        self.videolist_detail_list = None
+        EventMesh.subscribe("video_updata_list_show", self.video_updata_list_show)
+        self.MXA_phone_num = 50 #最大显示号码个数
+        self.videolist_detail_listt_dict = []
+        self.calling_btn = []
+        self.is_sliding = 0
+
+    def post_processor_before_initialization(self):
+        data = EventMesh.publish("get_videobook_list")
+        if data != None:
+            self.check_json = data[0]
+            self.videobook = data[1]
+            self.count = 0
+
+    def initialization(self):
+        self.is_sliding = 0
+        global videolist_screen,videolist_cont,videolist_top_title,videolist_none_label,videolist_screen_list_screen
+        if videolist_screen == None:
+            videolist_screen = lv.obj()
+            print("videolist_screen")
+            videolist_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+            videolist_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+            videolist_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e,0)), lv.EVENT.GESTURE, None)
+
+            videolist_screen_list_screen = lv.obj(videolist_screen)
+            videolist_screen_list_screen.set_pos(0, 30)
+            videolist_screen_list_screen.set_size(LCD_X, LCD_Y-30)
+            videolist_screen_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+            videolist_screen_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+            videolist_screen_list_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e,0)), lv.EVENT.GESTURE, None)
+
+
+            videolist_top_title = lv.label(videolist_screen)
+            videolist_top_title.set_pos(0, 5)
+            videolist_top_title.set_size(LCD_X, 20)
+            videolist_top_title.set_text("视频通话账号")
+            videolist_top_title.set_long_mode(lv.label.LONG.WRAP)
+            videolist_top_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            videolist_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+        
+
+            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_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)
+            
+
+            self.videolist_detail_list = lv.obj(videolist_screen_list_screen)
+            self.videolist_detail_list.set_pos(0, 0)
+            self.videolist_detail_list.set_size(LCD_X, LCD_Y-30+1)
+            self.videolist_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+            self.videolist_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+            self.videolist_detail_list.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e,0)), lv.EVENT.GESTURE, None)
+
+            for i in range(self.MXA_phone_num):
+                contact_btn = lv.btn(self.videolist_detail_list)
+                contact_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+                contact_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e,1)),
+                                        lv.EVENT.SHORT_CLICKED, None)
+                
+                contact_btn.add_flag(lv.obj.FLAG.HIDDEN)
+                contact_btn.add_style(style_video_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+                
+                contact_btn_label_1 = lv.label(contact_btn)
+                contact_btn_label_1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+                contact_btn_label_2 = lv.label(contact_btn)
+                contact_btn_label_3 = lv.label(contact_btn)
+                # # contact_btn_label_2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+                # contact_btn_label_3 = lv.label(contact_btn)
+                # contact_btn_label_3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+                # contact_btn_label_4 = lv.label(contact_btn)
+
+                self.videolist_detail_listt_dict.append({"contact_btn":contact_btn,"contact_btn_label_1":contact_btn_label_1,"contact_btn_label_2":contact_btn_label_2,"contact_btn_label_3":contact_btn_label_3})
+            self.meta = videolist_screen
+        self.count = 0
+        self.btn_create_list_show(0)
+
+    def video_updata_list_show(self,event,msg):
+        self.post_processor_before_initialization()
+        self.timer.start(1 * 1000, 0, self.OutTime_s)
+
+    def OutTime_s(self,e):
+        self.btn_create_list_show(1)
+
+    def btn_create_list_show(self,state):
+        EventMesh.publish("publish_message_event_ui",{"func":self.btn_create_list_show_screen,"data":state})
+
+    def btn_create_list_show_screen(self,state):
+        global videolist_screen,videolist_cont,videolist_top_title,videolist_none_label,videolist_screen_list_screen
+        print("btn_create_list_show_screen!!!!!!!!!!!")
+        if videolist_screen == None:
+            return
+        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#有卡时触发sos报警 无卡时自动关机
+            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:
+                self.videolist_detail_list.clear_flag(lv.obj.FLAG.HIDDEN)
+                videolist_none_label.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
+                j =0
+                print("self.videobook sorted :{} len(self.videobook) :{}".format(sorted(self.videobook.keys()),self.videobook))
+                phonebook_keys = sorted(self.videobook.keys())
+
+
+                if len(self.videobook) > self.MXA_phone_num:
+                    j = len(self.videobook) - self.MXA_phone_num
+                for i in range(self.MXA_phone_num): #字典 key value
+                    if(j >= len(self.videobook)):
+                        self.videolist_detail_listt_dict[i]["contact_btn"].add_flag(lv.obj.FLAG.HIDDEN)
+                        continue
+                    name = self.videobook[phonebook_keys[j]]
+                    key_tmp = phonebook_keys[j]
+
+                    print("name :{} key_tmp:{}".format(name,key_tmp))
+                    
+                    #contact_btn = lv.btn(self.contact_detail_list)
+                    self.videolist_detail_listt_dict[i]["contact_btn"].set_size(LCD_X-10,30)
+                    self.videolist_detail_listt_dict[i]["contact_btn"].set_pos(5,32*i )
+                    # self.videolist_detail_listt_dict[i]["contact_btn"].set_style_bg_color(lv.color_make(128, 128, 128), lv.PART.MAIN | lv.STATE.DEFAULT)
+                    # add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+                    # contact_btn.add_style(style_contact_btn_pressed, lv.PART.MAIN | lv.STATE.PRESSED)
+                    # self.contact_detail_listt_dict[i]["contact_btn"].add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling(e)),
+                    #                         lv.EVENT.SHORT_CLICKED, None)
+
+                    #contact_btn_label_1 = lv.label(contact_btn)
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_1"].set_pos(0, 0)
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_1"].set_size(LCD_X-5, 16)
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_1"].set_text(key_tmp[4:])
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_1"].set_long_mode(lv.label.LONG.DOT)
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_1"].set_long_mode(lv.label.LONG.DOT)
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_1"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+                    #contact_btn_label_2 = lv.label(contact_btn)
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_2"].set_pos(0, 0)
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_2"].set_size(0, 0)
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_2"].set_text(key_tmp[4:])
+                    
+                   
+
+                    #contact_btn_label_3 = lv.label(contact_btn)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_1"].set_pos(5, 5)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_1"].set_size(LCD_X-18, 25)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_1"].set_text(name)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_1"].set_long_mode(lv.label.LONG.DOT)
+                    # self.videolist_detail_listt_dict[i]["contact_btn_label_3"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+                    
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_2"].set_pos(0, 0)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_2"].set_size(0, 0)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_2"].set_text(name)
+                    
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_3"].set_pos(0, 0)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_3"].set_size(0, 0)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_3"].set_text(key_tmp[4:])
+
+                    self.videolist_detail_listt_dict[i]["contact_btn"].clear_flag(lv.obj.FLAG.HIDDEN)
+                    #self.contact_detail_listt_dict[i]["contact_btn"].scroll_to_view(lv.ANIM.OFF)
+                    j+=1
+
+                    if state == 1:
+                        self.videolist_detail_listt_dict[i]["contact_btn"].scroll_to_view(lv.ANIM.OFF)  
+                
+            else:
+                if videolist_screen_list_screen != None:
+                    videolist_none_label.clear_flag(lv.obj.FLAG.HIDDEN) #显示空文本
+                if self.videolist_detail_list != None:
+                    self.videolist_detail_list.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
+    def calling_cb(self,e,msg):       
+        code = e.get_code()
+        indev = lv.indev_get_act()
+        lv.indev_t.wait_release(indev)
+        dir = lv.indev_t.get_gesture_dir(indev)
+        if code == lv.EVENT.GESTURE: #手势向左还是向右 还是向下向上
+            if dir == lv.DIR.RIGHT:
+               pass
+
+        elif  code == lv.EVENT.SHORT_CLICKED:
+            if msg == 1:
+                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:
+                    msg_text = str(e.get_target().get_child(1).get_text())
+                    call_id = str(e.get_target().get_child(2).get_text())
+                    # EventMesh.publish("publish_message_event_ui",{"func":self.calling,"data":msg_text})
+                    EventMesh.publish("load_screen", {"screen": "vedio_mode","meta":[msg_text,call_id]})
+                else:
+                    EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+     
+
+    def calling(self,msg_text):    
+        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):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+    def btn1_release(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+    def btn8_press(self):
+        EventMesh.publish("watch_top_show")
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
+
+
+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_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_vedio_cb(e,0)), lv.EVENT.GESTURE, None)
+
+            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,1)),
+                                        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,2)),
+                                        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])) != 0:
+                video_select_mode_name.set_text("{}".format(self.meta_info[0]))
+            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()
+        indev = lv.indev_get_act()
+        lv.indev_t.wait_release(indev)
+        dir = lv.indev_t.get_gesture_dir(indev)
+        if code == lv.EVENT.GESTURE:
+            if dir == lv.DIR.RIGHT:
+                pass
+
+        elif  code == lv.EVENT.SHORT_CLICKED:
+            if data == 1: #语音通话
+                msg_text = [self.meta_info,0]
+                EventMesh.publish("publish_message_event_ui",{"func":self.calling,"data":msg_text})
+                
+            elif data == 2:# 视频通话
+                msg_text = [self.meta_info,1]
+                EventMesh.publish("publish_message_event_ui",{"func":self.calling,"data":msg_text})
+
+    def calling(self,msg_text):    
+        _msg = msg_text[0][0]
+        call_id = msg_text[0][1]
+        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", call_id)#
+        EventMesh.publish("set_vedio_call_type", mode)#
+        EventMesh.publish(constants.PROTOCOL.AGTALK_SEND,[mode,call_id])
+
+    def Close(self):
+        self.timer.stop()
+
+    def done_return(self):
+        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
+