K01:
authordxy15521469561 <1731678236@qq.com>
Thu, 30 Nov 2023 06:57:43 +0000 (14:57 +0800)
committerdxy15521469561 <1731678236@qq.com>
Thu, 30 Nov 2023 06:57:43 +0000 (14:57 +0800)
视频通话优化

19 files changed:
2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/camera_capture.c
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modVideoCall_juphoon.c
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/K01/new.bat
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/appWechat.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/constants.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/main_init.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/mgr.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/K01/sdk/services/microPython/ports/quectel/core/ui_main_menu.py
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/include/app_link_start_addr.h
2.sdk/project/K01/usr/static/album/camer.txt [new file with mode: 0644]
2.sdk/project/K01/usr/static/album_delete.png [new file with mode: 0644]
2.sdk/project/K01/usr/static/camera_album_btn.png [new file with mode: 0644]
2.sdk/project/K01/usr/static/camera_btn.png [new file with mode: 0644]

index 2109dc2..3a835ed 100644 (file)
Binary files a/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a and b/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a differ
index 6ce1f54..4852001 100644 (file)
@@ -105,7 +105,7 @@ void Helios_SaveImage(unsigned char* pYUVBuffer, int width, int height) {
        char name[256] = {0};
 
        
-       sprintf(name, "U:/%s.jpeg",image_info.image_name);
+       sprintf(name, "U:/%s.jpg",image_info.image_name);
        CAPTURE_LOG("SaveImage %d %d %d %d\n", width, height, image_info.img_width, image_info.img_height);
 
        if(image_info.img_width <= width && image_info.img_height <= height && pYUVBuffer != NULL) {
index 0a0a086..7f419b4 100644 (file)
@@ -120,7 +120,6 @@ static Helios_Thread_t int_handle_task_id = 0;
 
 //mp_buffer_info_t roomid, ticket;
 static struct jrtc_t* test = NULL;
-int self_close_sta = 0;
 static c_callback_t *usr_callback = NULL;
 static c_callback_t cb = {0};
 
@@ -204,11 +203,12 @@ void jrtc_handle(void * argv) {
                        continue;
                }
         if (open_state == 1) {
-            if (jrtc_state(test) == JRTC_CLOSED) {
-                //HELIOS_JRTC_LOG("105\n");
+            if (test == NULL) {
                 test = jrtc_open(roomid_temp, ticket_temp, &recieve, &send);
-                //lcd_init();
-                HELIOS_JRTC_LOG("107\n");
+                if (test == NULL) {
+                    HELIOS_JRTC_LOG("jrtc_open fail\n");
+                    continue;
+                }
                 jrtc_activate(test, JRTC_AUDIO|JRTC_CAMERA);
                 // 等待对方视频对讲结束
                 while(jrtc_state(test) != JRTC_CLOSED)
@@ -216,22 +216,23 @@ void jrtc_handle(void * argv) {
                     struct jrtc_image_t* image;
                     image = &recieve;
                     if (image->get != image->put) {
-                        //Helios_LCD_Write(image->data, 0, 0, image->width - 1, image->height - 1);
                         update_display(image->data, image->width, image->height);
                         image->get = image->put;
                     }
                     Helios_msleep(20);
                 }
-                if (self_close_sta == 0) {
-                    // 判断是对方挂断,产生回调
-                    st_CallBack_jrtc *jrtc_int = malloc(sizeof(st_CallBack_jrtc));
-                                       if(NULL != jrtc_int) { 
-                        jrtc_int->result = self_close_sta;
-                                               jrtc_int->callback = cb;
-                                               qpy_send_msg_to_callback_deal_thread(CALLBACK_TYPE_ID_JRTC, jrtc_int);
-                                       }
+
+                // 判断是对方挂断,产生回调
+                st_CallBack_jrtc *jrtc_int = malloc(sizeof(st_CallBack_jrtc));
+                if(NULL != jrtc_int) { 
+                    jrtc_int->result = 0;
+                    jrtc_int->callback = cb;
+                    qpy_send_msg_to_callback_deal_thread(CALLBACK_TYPE_ID_JRTC, jrtc_int);
                 }
             }
+            else {
+                HELIOS_JRTC_LOG("jrtc has opened\n");
+            }
         } 
     }
 }
@@ -314,6 +315,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mp_jrtc_config_obj, 4 ,mp_jrtc_config);
 STATIC mp_obj_t mp_jrtc_open (size_t n_args, const mp_obj_t *args, mp_map_t *kw_args)
 {
     int ret = 0;
+
+    HELIOS_JRTC_LOG("mp_jrtc_open execute!!!");
     if(protect != 1){
         HELIOS_JRTC_LOG("Not config\n");
         ret = -1;
@@ -357,7 +360,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mp_jrtc_open_obj, 4, mp_jrtc_open);
 STATIC mp_obj_t mp_jrtc_close (mp_obj_t err_j)
 {
     int ret = 0;
-    HELIOS_JRTC_LOG("257");
+    HELIOS_JRTC_LOG("mp_jrtc_close execute!!!");
     int err = mp_obj_get_int(err_j);
     if((err != 0) && (err != 1) && (err != 64) && (err != 71) && (err != 90) && (err != 104) && 
     (err != 101) && (err != 111) && (err != 128) && (err != 129) && (err != 130) && (err != 131) && 
@@ -369,17 +372,14 @@ STATIC mp_obj_t mp_jrtc_close (mp_obj_t err_j)
         return mp_obj_new_int(ret);
     }
     else {
-        //err = err_j;
         if (test == NULL) {
-        mp_raise_ValueError("point fail\n");
+            return mp_obj_new_int(1);
         }
         MP_THREAD_GIL_EXIT();
         jrtc_close(test, err);
         MP_THREAD_GIL_ENTER();
         test = NULL;
         ret = 1;
-        self_close_sta = 1;
-        //Helios_DataCall_Stop(1, 0, 0);
         return mp_obj_new_int(ret);
     }
     
@@ -387,7 +387,13 @@ STATIC mp_obj_t mp_jrtc_close (mp_obj_t err_j)
 
 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);
 
+    return mp_obj_new_int(sta);
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_jrtc_get_state_obj, mp_jrtc_get_state);
 
 
 
@@ -402,6 +408,7 @@ STATIC const mp_rom_map_elem_t jrtc_globals_table[] = {
     {MP_ROM_QSTR(MP_QSTR_config_server), MP_ROM_PTR(&mp_jrtc_config_server_obj)},
     {MP_ROM_QSTR(MP_QSTR_set_img), MP_ROM_PTR(&set_img_obj)},
     {MP_ROM_QSTR(MP_QSTR_remove_img), MP_ROM_PTR(&remove_img_obj)},
+    {MP_ROM_QSTR(MP_QSTR_get_state), MP_ROM_PTR(&mp_jrtc_get_state_obj)},
 };
 
 /* 把modjrtc_globals_table注册到 mp_module_modjrtc_globals里面去 */
index e6bd4bb..35ed304 100644 (file)
@@ -697,6 +697,8 @@ class DeviceInfoManager(Abstract):
         self.no_smi_count = 0
         self.no_smi_state = 0
 
+        self.alarm_count = 0
+
         self.charge_full_count = 0
         self.GPS_step_t = 0#记录步数
         self.usb = USB()
@@ -850,6 +852,11 @@ class DeviceInfoManager(Abstract):
             # print("date_tmp......01....{} time_tmp:{}\r\n".format(date_tmp,time_tmp))
             
             """电量小于20% 5分钟提醒一次"""
+            if self.alarm_count <= 120:
+                self.alarm_count+=10
+                if self.alarm_count == 60:
+                    EventMesh.publish("set_rtc_alarm")
+
             get_low_btn = EventMesh.publish("get_low_bat_btn")#
             battery = EventMesh.publish("screen_get_battery")
             # print("get_low_btn:{} self.bat_time:{}".format(get_low_btn,self.bat_time))
index 3bca18b..a17e678 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 = 4
+        server_type = 1
     #print("server_init:server_type:{}".format(server_type))
     d_server_addr = "api.xcloudtech.com"
     d_server_port = 9000
index 424606e..3e007de 100644 (file)
@@ -5,31 +5,31 @@ del images /q
 @GOTO :STEP1
 ..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c ext -b 4096 -r 4096 -p 4096 -s 1048576 -i .\images\ext_fs.bin
 if errorlevel 1 (
-    echo "ext_fs.binÉú³Éʧ°Ü !!!!!!!!!!!!!!! "
+    echo "ext_fs.bin生成失败 !!!!!!!!!!!!!!! "
     goto exit
 )
 if errorlevel 0 (
-    echo "ext_fs.binÉú³É³É¹¦ !!!!!!!!!!!!!!! "
+    echo "ext_fs.bin生成成功 !!!!!!!!!!!!!!! "
 )
 :STEP1
 
-..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c usr -b 4096 -r 4096 -p 4096 -s 819200 -i .\images\customer_fs.bin
+..\..\Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c usr -b 4096 -r 4096 -p 4096 -s 716800 -i .\images\customer_fs.bin
 if errorlevel 1 (
-    echo "customer_fs.binÉú³Éʧ°Ü Çë¼ì²éusrĿ¼ÊÇ·ñ´óÓÚ316K!!!!!!!!!!!!!!!"
+    echo "customer_fs.bin生成失败 请检查usr目录是否大于316K!!!!!!!!!!!!!!!"
     goto exit
 )
 if errorlevel 0 (
-    echo "customer_fs.binÉú³É³É¹¦ !!!!!!!!!!!!!!! "
+    echo "customer_fs.bin生成成功 !!!!!!!!!!!!!!! "
 )
 
 %copy font\ext_font.bin images\ext_font.bin%
 
 ..\..\Helios_SDK\tools\common\win32\7z\7z a sdk\system\platform\ASR_1606\boards\EG810MCN_GA_VOLTE\images\firmware_base_release_pack.zip .\images\
 if errorlevel 0 (
-    echo imagesѹËõ³É¹¦!!!!!!!!!!!!!!
+    echo images压缩成功!!!!!!!!!!!!!!
 )
 if errorlevel 1 (
-    echo imagesѹËõʧ°Ü!!!!!!!!!!!!!!!!!!
+    echo images压缩失败!!!!!!!!!!!!!!!!!!
     goto exit
 )
 xcopy  sdk\ ..\..\Helios_SDK\ /e/h/y
index f6a0f76..63837fa 100644 (file)
@@ -516,7 +516,7 @@ class WechatScreen(Screen):
                 buf = bytearray(ql_fs.path_getsize(path))
                 fd.readinto(buf)
                 senddata = [self.countdown_old,buf]
-                EventMesh.publish(constants.PROTOCOL.TK_SEND,senddata)
+                EventMesh.publish(constants.PROTOCOL.TKS_SEND,senddata)
             
             
         Wechat_log("sending2") 
index 604a3c4..49a6927 100644 (file)
@@ -26,6 +26,9 @@ class PROTOCOL:
     TK_SEND = "TK_SEND"
     TK_RECV = "TK_RECV"
 
+    TKS_SEND = "TKS_SEND"
+    TKS_RECV = "TKS_RECV"
+
     MESSAGE_SEND = "MESSAGE_SEND"
     MESSAGE_RECV = "MESSAGE_RECV"
 
@@ -137,6 +140,12 @@ class PROTOCOL:
     RCALLING_SEND  = "RCALLING_SEND"
     RCALLING_RECV  = "RCALLING_RECV"
 
+    AGTALK_SEND = "AGTALK_SEND"
+    AGTALK_RECV = "AGTALK_RECV"
+
+    RTALK_SEND = "RTALK_SEND"
+    RTALK_RECV = "RTALK_RECV"
+
 class EVENT:
     CHANNEL_SOCKET_SEND = "CHANNEL_SOCKET_SEND"
     START_LOCATION = "START_LOCATION" 
index 6de8b06..ae05827 100644 (file)
@@ -79,6 +79,7 @@ def main_init():
     print("init5:{}".format(utime.localtime()))
     ui.add_screen(MainMenuScreen()) 
 
+    ui.add_screen(_ui.deletealbumScreen())
     ui.add_screen(_ui.PopupScreen()) 
     ui.add_screen(_ui.PhoneScreen()) 
     ui.add_screen(_ui.HeartrateScreen()) 
@@ -93,6 +94,9 @@ def main_init():
     ui.add_screen(_ui.TemperatureScreen()) 
     ui.add_screen(_ui.ContactsScreen()) 
     ui.add_screen(_ui.cameraVdieoAnswerScreen())
+    ui.add_screen(_ui.vedioCallingCallScreen())
+    ui.add_screen(_ui.VedioShowScreen())
+    ui.add_screen(_ui.videoOutCallScreen())
     from appWechat import WechatScreen,NewWechatPopupScreen
     ui.add_screen(WechatScreen()) 
   
@@ -161,6 +165,7 @@ def main_init():
     ui.add_screen(_ui.restore_confirmScreen())
     ui.add_screen(_ui.down_Screen())
     ui.add_screen(_ui.up_Screen())
+    ui.add_screen(_ui.videolistScreen())
 
     from pp_main import allppPopupScreen,delOnePopupScreen,ppListScreen,noppPopupScreen,delppsucessPopupScreen,ppMainScreen,addfaileppPopupScreen,ppMainPopupScreen,addppPopupScreen,addedppPopupScreen,ownaddppPopupScreen
     ui.add_screen(ppMainScreen())
@@ -180,7 +185,7 @@ def main_init():
     # ui.add_screen(_ui.Setting3Screen())  
     print("init6:{}".format(utime.localtime()))
     
-    from protocol import RCALLING_ProtoCol,AGTALK_ProtoCol,CALLING_ProtoCol,MEMBERS_ProtoCol,JPREG_ProtoCol,ppsrvvoicemsg_ProtoCol,ppdevvoicemsg_ProtoCol,srvtextmsg_ProtoCol,TK_ProtoCol,MESSAGE_ProtoCol,APPVOICEMSG_ProtoCol,restart_ProtoCol,factory_ProtoCol,SILENCETIMEFS_ProtoCol,WLKEY_ProtoCol,SILENCETIME2_ProtoCol,KEYBRD_ProtoCol,LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
+    from protocol import RTALK_ProtoCol,TKS_ProtoCol,RCALLING_ProtoCol,AGTALK_ProtoCol,CALLING_ProtoCol,MEMBERS_ProtoCol,JPREG_ProtoCol,ppsrvvoicemsg_ProtoCol,ppdevvoicemsg_ProtoCol,srvtextmsg_ProtoCol,TK_ProtoCol,MESSAGE_ProtoCol,APPVOICEMSG_ProtoCol,restart_ProtoCol,factory_ProtoCol,SILENCETIMEFS_ProtoCol,WLKEY_ProtoCol,SILENCETIME2_ProtoCol,KEYBRD_ProtoCol,LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
         TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,Time_ProtoCol,\
         pp_ProtoCol,ppfriends_ProtoCol,revpp_ProtoCol,reqpp_ProtoCol,delpp_ProtoCol,ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol,WDSTART_ProtoCol,LOWBAT_ProtoCol,sosHome_dial_ProtoCol,SockManager,NetManager
     
@@ -207,7 +212,8 @@ def main_init():
            
         # .append_manager(mgr.StopwatchManager()) \
         # .append_manager(mgr.CountdownManager()) \
-
+    app.append_manager(mgr.vedioInforManager())
+    app.append_manager(mgr.videoBookManager())
     app.append_manager(setkeyboardManager())
     app.append_manager(ConfigStoreManager())
     app.append_manager(NetManager())
@@ -250,6 +256,7 @@ def main_init():
     pcr.add_support(POWEROFF_ProtoCol())
     pcr.add_support(PHL_ProtoCol())
     pcr.add_support(TK_ProtoCol())
+    pcr.add_support(TKS_ProtoCol())
     pcr.add_support(MESSAGE_ProtoCol())
     pcr.add_support(APPVOICEMSG_ProtoCol())
     pcr.add_support(srvtextmsg_ProtoCol())
@@ -289,6 +296,7 @@ def main_init():
     pcr.add_support(AGTALK_ProtoCol())
     pcr.add_support(CALLING_ProtoCol())
     pcr.add_support(RCALLING_ProtoCol())
+    pcr.add_support(RTALK_ProtoCol())
     EventMesh.publish("load_screen", {"screen": "poweron"})
     sm = SockManager()
     sm.add_support_resolver(pcr)
index e721cbf..168e8c9 100644 (file)
@@ -1579,6 +1579,7 @@ class DeviceInfoManager(Abstract):
     def get_imei(self, topic, msg):
         if not self.imei:
             self.imei = modem.getDevImei()
+        self.imei = "876226002021444"
         return self.imei
 
     def get_cid(self, topic, msg):
@@ -2223,6 +2224,31 @@ class AddrBookManager(Abstract):
         self.check_json = msg[0]
         self.read_phonebook = msg[1]
 
+class videoBookManager(Abstract):
+    # 视频通话账号
+    def __init__(self):
+        self.videobook = {}
+        self.check_json = 0
+        self.check_json = ql_fs.path_exists("/usr/static/storage_file/videobook.json")
+
+        if self.check_json == True:
+            with open("/usr/static/storage_file/videobook.json","r",encoding="utf-8") as fd:
+                self.videobook = ujson.load(fd)
+                print("读取视频通话账号列表")
+
+    def post_processor_after_instantiation(self):
+        EventMesh.subscribe("get_videobook_list", self.get)
+        EventMesh.subscribe("set_videobook_list", self.set)
+
+    def get(self, event, msg):
+        self.check_json = ql_fs.path_exists("/usr/static/storage_file/videobook.json")
+        return [self.check_json,self.videobook]
+    
+    def set(self, event, msg):
+        print("videolist",msg)
+        self.check_json = msg[0]
+        self.videobook = msg[1]
+
 class AddPPManager(Abstract):
     # 添加碰碰好友
     def __init__(self):
@@ -2974,16 +3000,25 @@ class getBootOffManager(Abstract):#开关机时间
 class testSmsSetIPManager(Abstract):#
     def __init__(self):
         self.timer = osTimer()
-        self.newip = "test.iot.socket.thisiot.com"
+        # self.newip = "test.iot.socket.thisiot.com"
+        self.newip = "api.xcloudtech.com"
         # "8.134.110.49"#默认大锤服务器 在大锤服务器更改要连接新的服务器地址
-        self.newcom = 9999
+        # self.newcom = 9999
+        self.newcom = 9000
         # 31379
         
-        self.new_key = "3JyCjsw4ryXKzjzudayY"
-        self.new_pid = "qAELPTKmFanR4RHe"
+        # self.new_key = "3JyCjsw4ryXKzjzudayY"
+        # self.new_pid = "qAELPTKmFanR4RHe"
+
+        self.new_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+        self.new_pid = "SZKW"
         self.server_sate = 0
-        #  d_server_addr = "tcp.tx.kidxin.com"
-        #  d_server_port = 20500
+
+        #  d_server_addr = "api.xcloudtech.com"
+        # d_server_port = 9000
+        # d_md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+        # d_PID = "SZKW"
+
         tmp_data = EventMesh.publish("get_storage_config","set_new_ip_addr")
         if tmp_data != None:
             self.newip = tmp_data
@@ -3125,6 +3160,52 @@ class setkeyboardManager(Abstract):#设置键盘开关状态
         
         return self.key_state
     
+class vedioInforManager(Abstract):#
+    def __init__(self):
+        self.call_id = ""
+        self.meet_id = ""#会议id
+        self.call_type = 0 #会议id
+        self.tokens_data= ""#tokens
+        pass
+
+    def post_processor_after_instantiation(self):
+        EventMesh.subscribe("set_vedio_call_id", self.set_vedio_call_id)#
+        EventMesh.subscribe("set_vedio_meet_id", self.set_vedio_meet_id)#
+        EventMesh.subscribe("set_vedio_call_type", self.set_vedio_call_type)#
+        EventMesh.subscribe("set_vedio_tokens_data", self.set_vedio_tokens_data)#
+
+        EventMesh.subscribe("get_vedio_call_id", self.get_vedio_call_id)#
+        EventMesh.subscribe("get_vedio_meet_id", self.get_vedio_meet_id)#
+        EventMesh.subscribe("get_vedio_call_type", self.get_vedio_call_type)#
+        EventMesh.subscribe("get_vedio_tokens_data", self.get_vedio_tokens_data)#
+        
+    def set_vedio_call_id(self, event, msg): 
+        self.call_id = msg
+
+    def set_vedio_meet_id(self, event, msg): 
+        self.meet_id = msg
+
+    def set_vedio_call_type(self, event, msg): 
+        self.call_type = msg
+
+    def set_vedio_tokens_data(self, event, msg): 
+        self.tokens_data= msg
+        
+
+    def get_vedio_call_id(self, event, msg): 
+        return self.call_id
+    
+    def get_vedio_meet_id(self, event, msg): 
+        return self.meet_id
+    
+    def get_vedio_call_type(self, event, msg): 
+        return self.call_type
+    
+    def get_vedio_tokens_data(self, event, msg): 
+        return self.tokens_data
+    
+
+
 class simFactoryManager(Abstract):#恢复出厂设置
     def __init__(self):
         self.timer= osTimer()
@@ -3164,7 +3245,7 @@ class simFactoryManager(Abstract):#恢复出厂设置
 class cameraAlbumManager(Abstract):#保存相册数目
     def __init__(self):
         self.album_list = {}
-
+        self.album_num = 0
         check_txt = ql_fs.path_exists("/usr/static/storage_file/album_config.json")
         if check_txt == True :
             with open("/usr/static/storage_file/album_config.json","r") as fd:#音频文件编号
@@ -3184,21 +3265,23 @@ class cameraAlbumManager(Abstract):#保存相册数目
 
 
     def post_processor_after_instantiation(self):
-        EventMesh.subscribe("set_camera_num", self.set_camera_num)#设置关机时间
+        EventMesh.subscribe("set_camera_num", self.set_camera_num)#
         EventMesh.subscribe("get_camera_num", self.get_camera_num)
 
-    def set_camera_num(self, event, msg): 
+       
 
-        self.album_list = msg
-        with open("/usr/static/storage_file/album_config.json","w+",encoding="utf-8") as fd:
-            ujson.dump(self.album_list,fd)
-        # sorted_keys = sorted(self.album_list.keys())
-        # print("self.album_list",self.album_list,sorted_keys)
+    def set_camera_num(self, event, msg): 
+        self.album_num = msg
+        # self.album_list = msg
+        # with open("/usr/static/storage_file/album_config.json","w+",encoding="utf-8") as fd:
+        #     ujson.dump(self.album_list,fd)
+        # # sorted_keys = sorted(self.album_list.keys())
+        # # print("self.album_list",self.album_list,sorted_keys)
         
 
     def get_camera_num(self, event, msg):
         
-        return self.album_list
+        return self.album_num
     
 class setclassTimeManager(Abstract):#设置上课禁用时间
     def __init__(self):
index d2b5391..8ed6663 100644 (file)
@@ -25,7 +25,7 @@ import usys
 def server_init(server_type = None):
     #服务器选择1,防走丢,2大锤,3三基同创,4童信 5云米
     if server_type == None:
-        server_type = 2
+        server_type = 1
     #print("server_init:server_type:{}".format(server_type))
     d_server_addr = "api.xcloudtech.com"
     d_server_port = 9000
@@ -181,7 +181,7 @@ class SockManager(Abstract):
         self.reconnect_flag = 0
     def publish_timer_cb(self, *args):
         EventMesh.publish(constants.PROTOCOL.LK_SEND)
-        self.authen_set()
+        # self.authen_set()
     def authen_set(self):
         sever_state = EventMesh.publish("get_server_state")#获取修改服务器状态
         if sever_state != None:
@@ -236,12 +236,12 @@ class SockManager(Abstract):
                                     secretKey = data_tmp["secretKey"]#
                                     pid = data_tmp["bid"]#产品型号
                                     port = data_tmp["port"]#端口号
-                                    
-                                    # host = "device.miwitracker.com"#童信
-                                    # port = 8505
 
-                                    # d_md5_key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+                                    host = "api.xcloudtech.com"#童信
+                                    port = 9000
 
+                                    secretKey = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
+                                    pid = "SZKW"
                                     if secretKey != '':
                                         EventMesh.publish("set_new_key", str(secretKey))#获取pid和key
                                     if pid != '':
@@ -291,7 +291,7 @@ class SockManager(Abstract):
                 if data != None:
                     try:
                         self.sock.send(data)
-                        print("TCP:send data2 len:{}".format(len(data)))    
+                        print("TCP:send data2 len:{}".format(data))    
                     except Exception as e:
                         self.reconnect()
                         self.socket_send_queue.put(data)#重新把数据加回队列
@@ -2030,6 +2030,135 @@ class TK_ProtoCol(ProtoCol):
     TYPE = "TK"
     
 
+    def send(self, event, msg):
+        # print("TK send:{}".format(msg))
+        if len(str(msg)) == 1:
+
+            len_size = len(str(msg))+len("TK,")
+            #  实例:[XT*334588000000156*0009*TK,1]
+            send_data = EventMesh.publish("get_new_pid")+"*%s*%04X*TK"%(self.imei,len_size)
+            MD5_head_data = EventMesh.publish("get_new_pid")+"*%s*%04X*%s"%(self.imei,len_size,"TK")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
+            print("TK:data:%s"%(data))
+            # 通过socket发送到服务器端
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+        else:
+            # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
+            #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
+            arm_data = msg[1]
+            arm_sec = msg[0]
+            # print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(len(msg[1]),arm_sec))
+
+            arm = bytearray()
+            for i in range(len(arm_data)):
+                if arm_data[i] == 0x7d:
+                    arm.extend(b'\x7d\x01')
+                elif arm_data[i] == 0x5b :
+                    arm.extend(b'\x7d\x02')
+                elif arm_data[i] == 0x5d :
+                    arm.extend(b'\x7d\x03')
+                elif arm_data[i] == 0x2c :
+                    arm.extend(b'\x7d\x04')
+                elif arm_data[i] == 0x2a :
+                    arm.extend(b'\x7d\x05')
+                else :
+                    arm.append(arm_data[i])
+                
+            datalen = len(arm) + len("TK,")+len(str(arm_sec))+1
+            #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
+            send_data = bytearray(EventMesh.publish("get_new_pid")+"*%s*%04X*TK,%d,"%(self.imei,datalen,arm_sec))
+            send_data.extend(arm)
+            MD5_head_data = EventMesh.publish("get_new_pid")+"*%s*%04X*%s"%(self.imei,datalen,"TK")
+            MD5_SIGN = self.pack_MD5_head(MD5_head_data)
+            data = bytearray('[')
+            data.extend(MD5_SIGN)
+            data.extend(send_data)
+            data.extend(']')
+            # print("TK:send data:%s MD5_head_data:%s"%(data,MD5_head_data))
+            EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+
+    def recv(self, event, msg):
+        """
+
+        ("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+        @param event: 微聊
+        @param msg: 接收到的下行数据
+        [SZKW*860132060004322*20BD*TK,#!AMR...]
+        """
+        #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
+        # print("TK recv:{}".format(msg))
+        msg_tmp = msg.decode('ascii')
+        str = msg_tmp.split('TK,')
+        # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
+        if  msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
+            # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
+            arm_data = bytearray(str[1])#获取amr输出
+            get_wechat_data = EventMesh.publish("get_wechat_data")
+            
+            MXA_MSG = get_wechat_data[0]
+            wechat_recode_list = get_wechat_data[1]
+            wechat_num = wechat_recode_list["num"]
+            # Wechat_log("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
+            
+            if wechat_num >= MXA_MSG:
+                wechat_num = 0 
+            if wechat_num == 0:
+                wechat_num += 1 
+            elif wechat_num > 0:
+                wechat_num += 1 
+          
+
+            print("num_total:datalen:{} {}".format(MXA_MSG,wechat_recode_list))
+            wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
+            wechat_recode_list['num'] = wechat_num
+            EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_recode_list])
+            #写语音文件数据
+            screen_NAME = EventMesh.publish("get_screen_NAME")
+            get_lcd_state = EventMesh.publish("get_lcd_state")
+            if screen_NAME != "wechat" or get_lcd_state == 0:
+                EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+            else:
+                EventMesh.publish("wechat_updata_list_show")
+            # path = "/ext/static/storage_file/audio_amr/amr/{}.wav".format(wechat_num)
+            path = "/usr/static/storage_file/{}.wav".format(wechat_num)
+            with open(path,"w") as fd:
+                arm = bytearray()
+                j = 0
+                for i in range(len(arm_data)):
+                    if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
+                        arm.extend(b'\x7d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
+                        arm.extend(b'\x5b')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
+                        arm.extend(b'\x5d')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
+                        arm.extend(b'\x2c')
+                        j+=1
+                    elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
+                        arm.extend(b'\x2a')
+                        j+=1
+                    else :
+                        arm.append(arm_data[j])
+                    j+=1
+                    if j >= len(arm_data):
+                        break
+                fd.write(arm)
+            EventMesh.publish(constants.PROTOCOL.TK_SEND,1)
+
+            
+            
+     
+class TKS_ProtoCol(ProtoCol):
+    """微聊"""
+    TYPE = "TKS"
+    
+
     def send(self, event, msg):
         # print("TK send:{}".format(msg))
         if len(str(msg)) == 1:
@@ -2066,7 +2195,7 @@ class TK_ProtoCol(ProtoCol):
                 else :
                     arm.append(arm_data[i])
                 
-            datalen = len(arm) + 4+len(str(arm_sec))+1
+            datalen = len(arm) +len("TKS,")+len(str(arm_sec))+1
             #Wechat_log("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
             send_data = bytearray(EventMesh.publish("get_new_pid")+"*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
             send_data.extend(arm)
@@ -2091,7 +2220,7 @@ class TK_ProtoCol(ProtoCol):
         #Wechat_log("K_ProtoCol:recv:data:{}".format(msg))
         # print("TK recv:{}".format(msg))
         msg_tmp = msg.decode('ascii')
-        str = msg_tmp.split('TK,')
+        str = msg_tmp.split('TKS,')
         # Wechat_log("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
         if  msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
             # Wechat_log("TK_ProtoCol:recv:datalen{}".format(len(msg)))
@@ -2149,11 +2278,10 @@ class TK_ProtoCol(ProtoCol):
                     if j >= len(arm_data):
                         break
                 fd.write(arm)
-            EventMesh.publish(constants.PROTOCOL.TK_SEND,1)
+            EventMesh.publish(constants.PROTOCOL.TKS_SEND,1)
 
             
-            
-            
+                  
 
 class MESSAGE_ProtoCol(ProtoCol):
     """微聊"""
@@ -2339,52 +2467,49 @@ class MEMBERS_ProtoCol(ProtoCol):#获取账号列表
         @param event:
         @param msg: 接收到的下行数据
         """
-        # b'[SZKW*867387060319166*000A*KEYBRD]'
+        # b'[SZKW*876226002021444*0048*MEMBERS,0036003900350031003800330032002C563F563FD83CDF410020D83CDF42002C]'
         print("MEMBERS!!!!!!!!!!!!!",msg)
-        # EventMesh.publish(constants.PROTOCOL.MEMBERS_SEND)  
+        msg = msg[1:-1]
+        msg_tmp = msg.decode('ascii')
+        msg_tmp = msg_tmp.split(',')
 
-# [XT*YYYYYYYYYYYYYYY*LEN*AGTALK,通话类型,对方账号]
-# 通话类型:0表示语音通话,1表示视频通话
-# 实例:
-# XT*334588000000156*0007*AGTALK,0,d3e2f759f9d5af3858f3530b]
-# 或[XT*334588000000156*0007*AGTALK,1,d3e2f759f9d5af3858f3530b]
-# 注:如果佰锐视频,则账号为佰锐账号(整型)
-# 平台回复:[XT*设备ID*LEN*AGTALK,结果,Token,声网频道名/会议号(如有的话,没有则不带)]
-# 结果:0表示可正常通话,-1表示余额不足,不能通话,1表示对方不在线或未登陆成功
-# 实例:[XT*334588000000156*0006*AGTALK,0,efef2323423423,123]或[XT*334588000000156*0006*AGTALK,1]
-class AGTALK_ProtoCol(ProtoCol):#设备发起视频通话
-    """"""
-    TYPE = "AGTALK"
-    def send(self, event, msg):
-        
-        # [XT*334588000000156*0005*WLKEY]
-        send_data = EventMesh.publish("get_new_pid")+"*%s*0006*AGTALK"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        # print("WLKEY:data:%s"%(data))
-        # print("WLKEY!!!!!!!!!!!!!")
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+        videobook = {}
+        msg_tmp = msg_tmp[1:]
+        msg_tmp = msg_tmp[0]
 
-    def recv(self, event, msg):
-        """
-        @param event:
-        @param msg: 接收到的下行数据
-        """
-        # b'[SZKW*867387060319166*000A*KEYBRD]'
-        print("AGTALK!!!!!!!!!!!!!",msg)
+        j = 0
+        i = 0
+        videobook_old = {}
+        videobook_name_tmp = UnicodeHexStr_To_Utf8Str(msg_tmp)
+        lst = videobook_name_tmp.split(",")
+        
+        print("msg_tmp:{} phonebook_oldtmp:{} type:{}".format(msg_tmp,videobook_name_tmp,lst))
+        # 0 1 2 3
+        for vediobook_tmp in lst: 
+            
+            if (j % 3) == 0:#账号
+                videobook_old = vediobook_tmp
+            elif (j % 3) == 1:#名称
+                i+=1
+                videobook_name_cont= "{}:{}".format("%03d"%(i),videobook_old)                                      
+                videobook[videobook_name_cont] = vediobook_tmp
+            j+=1
+        print("videobook!!!:{}".format(str(videobook)))
+        # print("phonebook!!!:{}".format(str(phonebook)))
+        with open("/usr/static/storage_file/videobook.json","w",encoding="utf-8") as fd:
+            ujson.dump(videobook,fd)
+            print("创建视频通话账号")
+        
+        EventMesh.publish("set_videobook_list",[1,videobook])
+        EventMesh.publish("video_updata_list_show")
         # EventMesh.publish(constants.PROTOCOL.MEMBERS_SEND)  
 
-# [XT*YYYYYYYYYYYYYYY*LEN*AGTALK,通话类型,对方账号]
-# 通话类型:0表示语音通话,1表示视频通话
-# 实例:
-# XT*334588000000156*0007*AGTALK,0,d3e2f759f9d5af3858f3530b]
-# 或[XT*334588000000156*0007*AGTALK,1,d3e2f759f9d5af3858f3530b]
-# 注:如果佰锐视频,则账号为佰锐账号(整型)
-# 平台回复:[XT*设备ID*LEN*AGTALK,结果,Token,声网频道名/会议号(如有的话,没有则不带)]
-# 结果:0表示可正常通话,-1表示余额不足,不能通话,1表示对方不在线或未登陆成功
-# 实例:[XT*334588000000156*0006*AGTALK,0,efef2323423423,123]或[XT*334588000000156*0006*AGTALK,1]
-class CALLING_ProtoCol(ProtoCol):#设备发起视频通话
+# [X*Y*LEN*CALLING,呼叫者id,会议id,通话类型,Token]
+
+# 设备回复
+# [X*Y*LEN*CALLING,音视频状态]
+# 音视频状态:为0表示正常可通讯状态,否则填上用音视频返回的状态码,比如200,如果未获取到返回状态码,则填1
+class CALLING_ProtoCol(ProtoCol):#app发起视频通话
     """"""
     TYPE = "CALLING"
     def send(self, event, msg):
@@ -2404,9 +2529,23 @@ class CALLING_ProtoCol(ProtoCol):#设备发起视频通话
         @param msg: 接收到的下行数据
         """
         # b'[SZKW*867387060319166*000A*KEYBRD]'
-        print("AGTALK!!!!!!!!!!!!!",msg)
+        print("CALLING!!!!!!!!!!!!!",msg)
+        msg = msg[1:-1]
+        msg_tmp = msg.decode('ascii')
+        msg_tmp_d = msg_tmp.split(',')
+        call_id = msg_tmp_d[1]#id
+        meet_id = msg_tmp_d[2]#会议id
+        call_type = msg_tmp_d[3]#会议id
+        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_tokens_data", tokens_data)#
+
+
+        # EventMesh.publish("set_vedio_infor",[call_id,meet_id,call_type,tokens_data])#
         EventMesh.publish(constants.PROTOCOL.CALLING_SEND,0)
-        EventMesh.publish("load_screen", {"screen": "camera_answer"})
+        EventMesh.publish("load_screen", {"screen": "vedio_incall"})
 
 # [XT*YYYYYYYYYYYYYYY*LEN*RCALLING,呼叫者id,会议id/声网频道名(没有则留空,但位置保留),音频还是视频(0为音频,1为视频)]
 # 实例:
@@ -2415,7 +2554,7 @@ class CALLING_ProtoCol(ProtoCol):#设备发起视频通话
 # [XT*设备ID*LEN*RCALLING]
 # 实例:[XT*334588000000156*0009*RCALLING]  
 #   
-class RCALLING_ProtoCol(ProtoCol):#设å¤\87æ\8c\82æ\96­
+class RCALLING_ProtoCol(ProtoCol):#设å¤\87æ\8b\92æ\8e¥æ\8e¥å\90¬
     """"""
     TYPE = "RCALLING"
     def send(self, event, msg):
@@ -2423,8 +2562,8 @@ class RCALLING_ProtoCol(ProtoCol):#设备挂断
         # [XT*334588000000156*0005*WLKEY]
         send_data = EventMesh.publish("get_new_pid")+"*%s*0008*RCALLING"%(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))
+        data = "[%s%s,%s,%s,%d]"%(str(MD5_SIGN),send_data,msg[0],msg[1],msg[2])
+        print("RCALLING:send data:%s"%(data))
         # print("WLKEY!!!!!!!!!!!!!")
         # 通过socket发送到服务器端
         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
@@ -2434,10 +2573,83 @@ class RCALLING_ProtoCol(ProtoCol):#设备挂断
         @param event:
         @param msg: 接收到的下行数据
         """
-        # b'[SZKW*867387060319166*000A*KEYBRD]'
-        print("AGTALK!!!!!!!!!!!!!",msg)
-        EventMesh.publish(constants.PROTOCOL.CALLING_SEND,0)
-        EventMesh.publish("load_screen", {"screen": "camera_answer"})
+        # b'[SZKW*867387060319166*000A*RCALLING]'
+        print("RCALLING!!!!!!!!!!!!!")
+
+class AGTALK_ProtoCol(ProtoCol):#设备发起视频通话与app接听视频通话
+    """"""
+    TYPE = "AGTALK"
+    def send(self, event, msg):
+        
+        # [XT*334588000000156*0005*WLKEY]
+        send_data = EventMesh.publish("get_new_pid")+"*%s*0006*AGTALK"%(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("WLKEY!!!!!!!!!!!!!")
+        # 通过socket发送到服务器端
+        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+    def recv(self, event, msg):
+        """
+        @param event:
+        @param msg: 接收到的下行数据
+        """
+        # b'[SZKW*876226002021444*007B*AGTALK,0,01lqlyqzzQHpfwv5g7jFVC2H6Ha2tHFpMlfSm5sd2uo7o55JEcc=OVxewje6MjP0NgEODwsLDwkJCwkLCA0NDQ==,8762260020214441701226895]'
+        
+        msg = msg[1:-1]
+        msg_tmp = msg.decode('ascii')
+        msg_tmp_d = msg_tmp.split(',')
+        call_state = int(msg_tmp_d[1])#id
+       
+        if call_state == 0:#可正常通话
+            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("open_vedio_infor")
+            # EventMesh.publish("set_UI_high_priority", 0)
+            # EventMesh.publish("load_screen", {"screen": "vedio_answer"})
+            # EventMesh.publish("set_vedio_infor",[call_id,meet_id,call_type,tokens_data])#
+        
+        
+
+        print("AGTALK!!!!!!!!!!!!!")
+
+
+class RTALK_ProtoCol(ProtoCol):#app拒接视频通话
+    """"""
+    TYPE = "RTALK"
+    def send(self, event, msg):
+        
+        # [XT*334588000000156*0005*WLKEY]
+        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("WLKEY!!!!!!!!!!!!!")
+        # 通过socket发送到服务器端
+        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
+
+    def recv(self, event, msg):
+        """
+        @param event:
+        @param msg: 接收到的下行数据
+        """
+        # b'[SZKW*867387060319166*000A*RTALK]'
+        print("RTALK!!!!!!!!!!!!!")  
+        # [SZKW*876226002021444*003A*RTALK,3ef20e64f3abb84b27f7d764,8762260020214441701226522,1]'
+        msg = msg[1:-1]
+        msg_tmp = msg.decode('ascii')
+        msg_tmp_d = msg_tmp.split(',')
+        screen_NAME = EventMesh.publish("get_screen_NAME")
+        if screen_NAME != None:
+            if screen_NAME == "video_outcall":
+                # EventMesh.publish("close_jrtc_event")
+                EventMesh.publish("set_UI_high_priority", 0)
+                EventMesh.publish("load_screen", {"screen": "videolist"})
+        
+
 
 class ProtoColResolver(object):
     def __init__(self):
@@ -2450,7 +2662,7 @@ class ProtoColResolver(object):
     def handler(self, data):
         # 这里接收数据
         
-        # print("handler -> {}".format(data))
+        print("handler -> {}".format(data))
         # if data.startswith('Init;'):
         #     data = data[5:]
         #     EventMesh.publish(constants.EVENT.SET_KEY, {"value": ujson.loads(data)['KEY']})
index 6679bdd..242220d 100644 (file)
@@ -4397,6 +4397,9 @@ class ContactsScreen(Screen):
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
         EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
 # -------------------------------------------temperature screen----------------------------------------------------------
 
 temperature_screen = None
@@ -7251,41 +7254,37 @@ class down_Screen(Screen):#下滑界面
         # volum_slider_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e)), lv.EVENT.VALUE_CHANGED, None)
         # volum_slider_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.save_choice(e)), lv.EVENT.RELEASED, None)
 
-        down_show_bright_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"brightness")), lv.EVENT.CLICKED, None)
-        down_show_volume_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"totalvolume")), lv.EVENT.CLICKED, None)
-        down_show_setting_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"setting")), lv.EVENT.CLICKED, None)
-
-    def img_cb(self,e,msg):
-        if msg == "brightness":
-            # volum_slider_1.add_flag(lv.obj.FLAG.HIDDEN)
-            # brightress_slider_1.clear_flag(lv.obj.FLAG.HIDDEN)
-            EventMesh.publish("load_screen", {"screen": "brightness"})
-        elif msg == "totalvolume":
-            # brightress_slider_1.add_flag(lv.obj.FLAG.HIDDEN)
-            # volum_slider_1.clear_flag(lv.obj.FLAG.HIDDEN)
-            EventMesh.publish("load_screen", {"screen": "totalvolume"})
-        else:
-            if msg == 'setting':
-                EventMesh.publish("load_screen", {"screen": "setting"})
-                pass
+        down_show_bright_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"brightness")), lv.EVENT.SHORT_CLICKED, None)
+        down_show_volume_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"totalvolume")), lv.EVENT.SHORT_CLICKED, None)
+        down_show_setting_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"setting")), lv.EVENT.SHORT_CLICKED, None)
 
+        down_show_bright_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"brightness")), lv.EVENT.PRESSING, None)
+        down_show_volume_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"totalvolume")), lv.EVENT.PRESSING, None)
+        down_show_setting_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,"setting")), lv.EVENT.PRESSING, None)
 
-    # def change_bright(self,e):#调节亮度
-    #     code = e.get_code()
-    #     value_slider = brightress_slider_1.get_value()
-    #     if code == lv.EVENT.RELEASED:
-    #         value_slider = brightress_slider_1.get_value()
-    #         print("bright value_slider",value_slider)
-            
+    def img_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)
+        # LV_DIR_TOP
+        if code == lv.EVENT.GESTURE:
+            if dir == lv.DIR.BOTTOM:
+                EventMesh.publish("load_screen", {"screen": "main_menu"})
 
-    # def change_volum(self,e):#调节音量
-    #     code = e.get_code()
-    #     value_slider = volum_slider_1.get_value()
-    #     if code == lv.EVENT.RELEASED:
-    #         value_slider = volum_slider_1.get_value()
-    #         print("volum value_slider",value_slider)
-        
-        
+        elif  code == lv.EVENT.SHORT_CLICKED:
+            if msg == "brightness":
+                # volum_slider_1.add_flag(lv.obj.FLAG.HIDDEN)
+                # brightress_slider_1.clear_flag(lv.obj.FLAG.HIDDEN)
+                EventMesh.publish("load_screen", {"screen": "brightness"})
+            elif msg == "totalvolume":
+                # brightress_slider_1.add_flag(lv.obj.FLAG.HIDDEN)
+                # volum_slider_1.clear_flag(lv.obj.FLAG.HIDDEN)
+                EventMesh.publish("load_screen", {"screen": "totalvolume"})
+            else:
+                if msg == 'setting':
+                    EventMesh.publish("load_screen", {"screen": "setting"})
+                    pass
 
        
     
@@ -7481,11 +7480,10 @@ def camCapturecallback(result_list):
         tmp = file.split('/')[3]
         tmp = tmp.split("_camera")[0]
         time = int(tmp)
-        album_data = EventMesh.publish("get_camera_num")
-        album_data_tmp = {}
-        album_data_tmp["timeSec"] = time
-        album_data[time] = album_data_tmp
-        EventMesh.publish("set_camera_num",album_data)
+        album_data = int(EventMesh.publish("get_camera_num"))
+
+        EventMesh.publish("set_camera_num",album_data+1)
+        EventMesh.publish("save_album_succ",1)
         pass
     pass
 dec = camera.camCapture(0,240,320,1,128,128)
@@ -7531,6 +7529,54 @@ class cameraFullScreen(Screen):#相册已满
         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
+
+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("load_screen", {"screen": "main_menu"})
+        pass
+   
+            
+    def done_return(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
+
     def btn1_release(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
         pass
@@ -7549,60 +7595,134 @@ class cameraScreen(Screen):#相机拍照二级界面
         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
         
-        
+        state = dec.open()
         if camera_popup_screen == None:
             camera_popup_screen = lv.obj()
             print("Lowpower_screen")
             camera_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
 
+            
+
+            img_test = lv.img(camera_popup_screen)
+                # img_test.set_src("U:/hang_up.png")
+            ret = dec.set_img(img_test)
+            print("set img:", ret)
+            img_test.align(lv.ALIGN.CENTER, 0, 0)
+            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.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.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.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.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.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.CLICKED, None)
+
             camera_popup_label = lv.label(camera_popup_screen)
-            camera_popup_label.set_pos(0, 20)
+            camera_popup_label.set_pos(0, 40)
             camera_popup_label.set_size(128, 20)
-            camera_popup_label.set_text("点击屏幕保存")
+            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 len(album_data) >= 2:#相册已满
+        if int(album_data) >= 1:#相册已满
             EventMesh.publish("load_screen", {"screen": "camera_full"})
             pass
-
-       
-        state = dec.open()
-        img_test = lv.img(camera_popup_screen)
-        img_test.set_src("U:/static/hang_up.png")
-        ret = jrtc.set_img(img_test)
-        print("set img:", ret)
-        img_test.set_pos(48, 90)
-        img_test.set_size(32,32)
+        if camera_popup_label != None:
+            camera_popup_label.add_flag(lv.obj.FLAG.HIDDEN)
         self.timer.start(1*1000,1,self.fun)
-        print("state",state)
+
+    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 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()
         state = dec.close()
 
-    def done_click(self):
-        self.timer2.start(1*1000,0,self.save_album)#延迟1s保存图片
-        pass
+    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 len(album_data) < 2:
+        if int(album_data) <= 1:
             date_tmp = utime.localtime()
             time_tmp = utime.mktime(date_tmp)
-            dec.start(50,50, "U:/static/album/%d_camera"%(time_tmp))
+            dec.start(128,128, "static/album/1_camera")
         else:
             EventMesh.publish("load_screen", {"screen": "camera_full"})
             
@@ -7646,112 +7766,76 @@ class cameraalbumScreen(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, 5)
+            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.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(5, 30)
-            camera_album_popup_img1.set_size(50, 50)
-            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(160)
-            camera_album_popup_img1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.click_album(e,0)), lv.EVENT.CLICKED, None)
+            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.CLICKED, None)
 
             camera_album_popup_img2 = lv.img(camera_album_popup_screen)
-            camera_album_popup_img2.set_pos(65, 30)
-            camera_album_popup_img2.set_size(50, 50)
-            camera_album_popup_img2.add_flag(lv.obj.FLAG.HIDDEN)
+            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.set_zoom(160)
-            camera_album_popup_img2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.click_album(e,1)), lv.EVENT.CLICKED, None)
+            camera_album_popup_img2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.click_album(e,0)), lv.EVENT.CLICKED, None)
 
             camera_album_popup_img3 = lv.img(camera_album_popup_screen)
-            camera_album_popup_img3.set_pos(5, 90)
-            camera_album_popup_img3.set_size(50, 50)
-            camera_album_popup_img3.add_flag(lv.obj.FLAG.HIDDEN)
+            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_zoom(160)
-            camera_album_popup_img3.add_event_cb(lambda e: EventMesh.callback_wrapper(self.click_album(e,2)), lv.EVENT.CLICKED, None)
-
-            camera_album_popup_img4 = lv.img(camera_album_popup_screen)
-            camera_album_popup_img4.set_pos(50, 90)
-            camera_album_popup_img4.set_size(65, 50)
-            camera_album_popup_img4.add_flag(lv.obj.FLAG.HIDDEN)
-            camera_album_popup_img4.add_flag(lv.obj.FLAG.CLICKABLE)
-            # camera_album_popup_img4.set_zoom(160)
-            camera_album_popup_img4.add_event_cb(lambda e: EventMesh.callback_wrapper(self.click_album(e,3)), lv.EVENT.CLICKED, None)
-
-            camera_album_popup_img5 = lv.img(camera_album_popup_screen)
-            camera_album_popup_img5.set_pos(5, 140)
-            camera_album_popup_img5.set_size(50, 50)
-            camera_album_popup_img5.add_flag(lv.obj.FLAG.HIDDEN)
-            camera_album_popup_img5.add_flag(lv.obj.FLAG.CLICKABLE)
-            # camera_album_popup_img5.set_zoom(160)
-            camera_album_popup_img5.add_event_cb(lambda e: EventMesh.callback_wrapper(self.click_album(e,4)), lv.EVENT.CLICKED, None)
+            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.CLICKED, None)
 
             self.meta = camera_album_popup_screen
-        read_album = {}
+        read_album = 0
         read_album = EventMesh.publish("get_camera_num")
-        sort_new = {}
-        sort_new = sorted(read_album.keys())#按照key的升序排序
-        count = 0
-        camera_album_popup_img1.add_flag(lv.obj.FLAG.HIDDEN)
-        camera_album_popup_img2.add_flag(lv.obj.FLAG.HIDDEN)
-        camera_album_popup_img3.add_flag(lv.obj.FLAG.HIDDEN)
-        camera_album_popup_img4.add_flag(lv.obj.FLAG.HIDDEN)
-        camera_album_popup_img5.add_flag(lv.obj.FLAG.HIDDEN)
-
-        # print("sort_new read_album ",sort_new,read_album)
-        for i in range(0,len(sort_new)):
-            key = sort_new[i]
-            value = int(read_album[key]["timeSec"])
-            print(value)
-            check_img = ql_fs.path_exists("/usr/static/album/%d_camera.jpg"%(value))
-            if check_img == True :#图片存着
-                print("图片存在显示")
-                pass
-            else:
-                print("图片不存在不显示循环下一个显示")
-                continue
-            
-            if count == 0:
-                camera_album_popup_img1.clear_flag(lv.obj.FLAG.HIDDEN)
-                camera_album_popup_img1.set_src("U:/static/album/%d_camera.jpg"%(value)) #'U:/6_camera.jpeg'
-                pass
-            elif count == 1:
-                camera_album_popup_img2.clear_flag(lv.obj.FLAG.HIDDEN)
-                camera_album_popup_img2.set_src("U:/static/album/%d_camera.jpg"%(value))#'U:/6_camera.jpeg'
-                pass
-            elif count == 2:
-                camera_album_popup_img3.clear_flag(lv.obj.FLAG.HIDDEN)
-                camera_album_popup_img3.set_src("U:/static/album/%d_camera.jpg"%(value))#'U:/6_camera.jpeg'
-                pass
-            elif count == 3:
-                camera_album_popup_img4.clear_flag(lv.obj.FLAG.HIDDEN)
-                camera_album_popup_img4.set_src("U:/static/album/%d_camera.jpg"%(value))#'U:/6_camera.jpeg'
-                pass
-            elif count == 4:
-                camera_album_popup_img5.clear_flag(lv.obj.FLAG.HIDDEN)
-                camera_album_popup_img5.set_src("U:/static/album/%d_camera.jpg"%(value))#'U:/6_camera.jpeg'
-                pass
-            count+=1
+        print("read_album",read_album)
+        if int(read_album) != 0:
+            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):
-        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)
+        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):
@@ -7796,8 +7880,8 @@ class albumPreviewScreen(Screen):#点击预览
 
 
             album_preview_popup_img = lv.img(album_preview_popup_screen)
-            album_preview_popup_img.set_pos(39, 5)
-            album_preview_popup_img.set_size(50,50)
+            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)
@@ -7842,25 +7926,25 @@ class albumPreviewScreen(Screen):#点击预览
 
     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)
+        # 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
+        # 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
 
@@ -7886,7 +7970,7 @@ class albumPreviewScreen(Screen):#点击预览
 camera_video_screen = None
 camera_video_label = None
 
-class cameraVdieoScreen(Screen):#相机拍照二级界面
+class cameraVdieoScreen(Screen):#
     #
     NAME = "camera_video"
     
@@ -7948,12 +8032,91 @@ class cameraVdieoScreen(Screen):#相机拍照二级界面
 
 
 
+video_answer_screen = None
+video_answer_label = None
+video_answer_btn1 = None
+video_answer_btn_label1 = None
+class cameraVdieoAnswerScreen(Screen):#接听画面
+    #
+    NAME = "vedio_answer"
+    
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.timer = osTimer()
+        self.count = 0
+
+    def initialization(self):
+        global video_answer_screen ,video_answer_btn_label1
+        self.count = 0
+        if video_answer_screen == None:
+            video_answer_screen = lv.obj()
+            print("video_answer_screen")
+            video_answer_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            video_answer_btn_label1 = lv.label(video_answer_screen)
+            video_answer_btn_label1.set_pos(0, 50)
+            video_answer_btn_label1.set_text("正在接听中...")
+            video_answer_btn_label1.set_size(128, 40)
+            video_answer_btn_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+            video_answer_btn_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            self.meta = video_answer_screen
+        self.timer.start(1*1000,1,self.fun)
+
+    def fun(self,*argc):
+        call_state = jrtc.get_state()
+        if call_state == 5:
+            self.timer.stop()
+            EventMesh.publish("load_screen", {"screen": "vedioing"})
+            return
+        if call_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"))#
+       
+            EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+            EventMesh.publish("load_screen", {"screen": "main_menu"})
+            return
+        print("vedio_answer call_state",call_state)
+        self.count+=1
+        if self.count >= 20:
+            EventMesh.publish("close_jrtc_event")
+            self.timer.stop()
+            EventMesh.publish("load_screen", {"screen": "main_menu"})
+            return
+
+        EventMesh.publish("system_sleep_rest")#防止黑屏
+
+
+    def Close(self):
+        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_label = None
 camera_video_answer_btn = None
-class cameraVdieoAnswerScreen(Screen):#相机拍照二级界面
+vcamera_video_answer_btn_label = None
+camera_video_answer_label = None
+def jrtc_cb(close_sta):
+    print("jrtc callback:", close_sta)
+    if close_sta == 0 or close_sta == 1:
+        jrtc.close(1)
+jrtc.set_callback(jrtc_cb)
+class VedioShowScreen(Screen):#正在视频通话中
     #
-    NAME = "camera_answer"
+    NAME = "vedioing"
     
     def __init__(self):
         super().__init__()
@@ -7961,50 +8124,92 @@ class cameraVdieoAnswerScreen(Screen):#相机拍照二级界面
         self.preview1 = None
         self.timer = osTimer()
         self.statu_open = -1
-        self.count = 0
-
-    def initialization(self):
-        global camera_video_answer_screen ,camera_video_answer_label,camera_video_answer_btn
-        self.count = 0
+        self.show_label = 0
+        EventMesh.subscribe("open_vedio_infor",self.open_vedio_infor)
+        EventMesh.subscribe("close_jrtc_event",self.close_jrtc_event)
+
+    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数据
+    
+        
+        print("vedio infor",call_id,meet_id,call_type,tokens_data)
+        # data = ['6951832', '876226002021444', '1', '01lqlyqzQ4Gozdz8OJv1Mij2Y3PBq2y3+rtIA26Ge+m2QHTc/Vk=gufkGNMBiYhPjbq1tLCwtLKysLKws7a2tg==']
         jrtc.init()
-        jrtc.config_server("119.3.54.56:1050")
-        jrtc.config("6c06d1b0d9015e47ec144097", "us145b", "1234567890abcdef", "")
-        self.statu_open = jrtc.open("us144a", "",[15,120,240,320],[15,129,128,128])
+        # jrtc.config_server("119.3.54.56:1050")#测试服地址
+        tokens = str(tokens_data)
+        oneself_id = str(876226002021444)#自己的账号
+        jrtc.config("efe9f8800a39d96244234097", oneself_id, "25v9C652123QL3N8", tokens)
+        uid = str(call_id)
+        ticket = str(meet_id)
+        
+        print("uid ",uid,ticket,tokens)
+        jrtc.open(uid,ticket,[15,120,240,320],[15,129,128,128])
+        
+        pass
 
+    def close_jrtc_event(self,event,msg):
+        call_state = jrtc.get_state()
+        print("close_jrtc_event",call_state)
+        jrtc.close(1)
+        pass
+
+    def initialization(self):
+        global camera_video_answer_screen ,camera_video_answer_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)
 
-        
-            
-        
             img_test = lv.img(camera_video_answer_screen)
-                # img_test.set_src("U:/hang_up.png")
             ret = jrtc.set_img(img_test)
-            print("set img:", ret)
             img_test.align(lv.ALIGN.CENTER, 0, 0)
             img_test.set_size(128,128)
         
+            # camera_video_answer_label = lv.label(camera_video_answer_screen)
+            # camera_video_answer_label.set_pos(0, 50)
+            # 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_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.add_event_cb(lambda e: EventMesh.callback_wrapper(self.close_cb(e)), lv.EVENT.CLICKED, None)
+            
             self.meta = camera_video_answer_screen
-
+        # camera_video_answer_label.clear_flag(lv.obj.FLAG.HIDDEN)
+        # camera_video_answer_btn.add_flag(lv.obj.FLAG.HIDDEN)
+        self.statu_open = 0
         self.timer.start(1*1000,1,self.fun)
 
 
     def close_cb(self,e):
-        if self.statu_open == 0:
-            jrtc.close(1)
-            EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,0)
-            EventMesh.publish("load_screen", {"screen": "main_menu"})
+        self.statu_open = 1
+        EventMesh.publish("close_jrtc_event")
+        
+        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"})
 
     def fun(self,*argc):
         EventMesh.publish("system_sleep_rest")#防止黑屏
+        call_state = jrtc.get_state()
+        print("call_state",call_state)
+        if call_state == 0 and self.statu_open == 0:
+            self.timer.stop()
+            EventMesh.publish("close_jrtc_event")
+            EventMesh.publish("load_screen", {"screen": "main_menu"})
+        
+        
 
 
     def Close(self):
@@ -8025,75 +8230,485 @@ class cameraVdieoAnswerScreen(Screen):#相机拍照二级界面
 
 
 
+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
+# CALL_LOG_MAX = 50
+class vedioCallingCallScreen(Screen):#视频通话打入中
+    NAME = "vedio_incall"
+
+    def __init__(self):
+        super().__init__()
+        self.CALL_LOG_MAX = CALL_LOG_MAX
+        self.read_data = {}
+        self.meta_type = "popup"
+        self.aud = audio.Audio(0)
+        self.call_timer = osTimer()
+        self.call_timer1 = osTimer()
+        self.name = None
+        self.phonebook = {}
+        self.pro_state = 0
+        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, 50)
+            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.CLICKED, None)
+            vedio_call_hangup.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+                                     lv.EVENT.CLICKED, None)
+            self.meta = vedio_call_screen 
+        EventMesh.publish("set_UI_high_priority", 1)
+        call_id = str(EventMesh.publish("get_vedio_call_id"))#
+
+        vedio_call_name_label.set_text(call_id)
+
+
+    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,e):
+        call_state = jrtc.get_state()
+        print("vedio_incall",call_state)
+        self.timeout+=1
+        if self.timeout >= 1*60:
+            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("load_screen", {"screen": "main_menu"})
+
+    def answer(self,e):
+        self.call_timer.stop()
+        self.aud.stop() 
+        EventMesh.publish("set_UI_high_priority", 0)
+        EventMesh.publish("open_vedio_infor")
+        EventMesh.publish("load_screen", {"screen": "vedio_answer"})
+
+    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("set_UI_high_priority", 0)
+        EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])
+
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
 
-# class cameraVdieoScreen(Screen):#视频通话
-#     #
-#     NAME = "camera_video"
+    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 __init__(self):
-#         super().__init__()
-#         self.meta = camera_video_screen
-#         self.preview1 = None
-#         self.timer = osTimer()
-#         self.open_preview1 = 0
-
-#     def initialization(self):
-#         global camera_video_screen,camera_video_label_screen
-#         print("Lowpower_screen")
-#         if camera_video_screen == None:
-#             camera_video_screen = lv.obj()
-#             print("Lowpower_screen")
-#             camera_video_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-#             camera_video_label_screen = lv.label(camera_video_screen)
-#             camera_video_label_screen.set_pos(0, 40)
-#             camera_video_label_screen.set_size(128, 40)
-#             camera_video_label_screen.set_text(" ")
-#             camera_video_label_screen.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-#             camera_video_label_screen.set_long_mode(lv.label.LONG.WRAP)
-#             camera_video_label_screen.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-
-#             # self.meta = camera_video_screen
-
-#         if EventMesh.publish(constants.EVENT.GET_CONNECT) != 0:#未联网提示关机
-#             self.preview1 = camera.camPreview(0,240,320,128,128,1)
-#             state = self.preview1.open()
-#             self.timer.start(1*1000,1,self.fun)
-#             camera_video_label_screen.set_text(" ")
-#             self.open_preview1 = 1
-#             print("init preview!!!!!!!!")
-#         else:
-#             self.open_preview1 = 0
-#             camera_video_label_screen.set_text("无SIM卡或无网络")
-
-#     def fun(self,*argc):
-#         pass
-#         # EventMesh.publish("system_sleep_rest")#防止黑屏
-
-
-#     def Close(self):
-#         self.timer.stop()
-#         if self.open_preview1 == 1:
-#             self.timer.stop()
-#             self.preview1.close()
-
-#     def done_click(self):
-#         pass
-
-
-
-
-#     def done_return(self):
-#         EventMesh.publish("load_screen", {"screen": "main_menu"})
+    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
+class videoOutCallScreen(Screen):#正在拨号中...未打出
+    NAME = "video_outcall"
+
+    def __init__(self):
+        super().__init__()
+        self.meta = None
+        self.meta_type = "popup"
+        self.timer1 = osTimer()
+        self.time_count = 0
+        self.timer2 = osTimer()
+        self.CALL_LOG_MAX = CALL_LOG_MAX
+        self.read_call_log = {}
+       
+    def initialization(self):
+        EventMesh.publish("set_UI_high_priority", 1)
+        self.time_count = 0
+        global video_outcall_screen,video_outcall_img,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)
+
+            # img_test = lv.img(video_outcall_screen)
+            # ret = jrtc.set_img(img_test)
+            # img_test.align(lv.ALIGN.CENTER, 0, 0)
+            # img_test.set_size(128,128)
+
+            # dialing_popup_img = lv.img(video_outcall_screen)
+            # dialing_popup_img.set_pos(32, 5)
+            # dialing_popup_img.set_size(64, 64)
+            # dialing_popup_img.set_src("U:/static/IMAGE_NOTICE_CALL.png")
+            # dialing_popup_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+            video_outcall_name = lv.label(video_outcall_screen)
+            video_outcall_name.set_pos(0, 15)
+            video_outcall_name.set_size(LCD_X, 20)
+            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_imgbtn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hangup(e)),
+                                    lv.EVENT.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.timer1.start(1*1000,1,self.fun_cb)
+        # video_outcall_call.clear_flag(lv.obj.FLAG.HIDDEN)
+        # video_outcall_name.clear_flag(lv.obj.FLAG.HIDDEN)
+
+    def post_processor_after_initialization(self):
+        pass
+   
+    def hangup(self,e):
+        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("video_outcall",call_state)
+        EventMesh.publish("system_sleep_rest")#防止黑屏
+        if call_state == 5:
+            self.timer1.stop()
+            EventMesh.publish("set_UI_high_priority", 0)
+            EventMesh.publish("load_screen", {"screen": "vedioing"})
+        self.time_count+=1
+        if self.time_count >= 1*60:
+            self.time_count = 0
+            self.timer1.stop()
+            EventMesh.publish("set_UI_high_priority", 0)
+            EventMesh.publish("load_screen", {"screen": "videolist"})
+
+    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
+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_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_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)
         
 
-#     def btn1_release(self):
-#         EventMesh.publish("load_screen", {"screen": "main_menu"})
-#         pass
+            videolist_none_label = lv.label(videolist_screen_list_screen)
+            videolist_none_label.set_pos(0, 20)
+            videolist_none_label.set_size(LCD_X, 40)
+            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)
+            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)),
+                                        lv.EVENT.CLICKED, None)
+                contact_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.calling_cb(e)), lv.EVENT.PRESSING, None)
+                contact_btn.add_flag(lv.obj.FLAG.HIDDEN)
+                # contact_btn.add_style(style_press_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+                
+                contact_btn_label_1 = lv.label(contact_btn)
+                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)
+                # contact_btn_label_2.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+                contact_btn_label_3 = lv.label(contact_btn)
+                contact_btn_label_3.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+                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.clear_flag(lv.obj.FLAG.HIDDEN)
+            videolist_none_label.add_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()),len(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,45)
+                    self.videolist_detail_listt_dict[i]["contact_btn"].set_pos(0,47*i )
+                    self.videolist_detail_listt_dict[i]["contact_btn"].set_style_bg_color(lv.color_make(0xff, 0xff, 0xff), 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.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-15, 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.CLIP)
+                    # 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_3"].set_pos(0, 20)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_3"].set_size(LCD_X-15, 16)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_3"].set_text(name)
+                    self.videolist_detail_listt_dict[i]["contact_btn_label_3"].set_long_mode(lv.label.LONG.CLIP)
+                    # 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"].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):
+        code = e.get_code()
+        if code == lv.EVENT.PRESSING:
+            #print("PRESSING")
+            self.is_sliding += 1
+
+        elif  code == lv.EVENT.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 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})
+                else:
+                    EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
+                
+            self.is_sliding =0
+            
+
+    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})
+
+
+    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"})
+
+
+
+
+
+
 
-#     def btn8_press(self):
-#         EventMesh.publish("load_screen", {"screen": "main_menu"})
-#         pass
 
 style_screen_calendar_1_extra_header_main_default = lv.style_t()
 style_screen_calendar_1_extra_header_main_default.init()
index 16f2b5c..55d67c6 100644 (file)
@@ -369,9 +369,9 @@ class MainMenuScreen(Screen):
         MainMenu2_img_toolbox.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "toolbox")), lv.EVENT.CLICKED, None)
         MainMenu2_img_setting.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "setting")), lv.EVENT.CLICKED, None)
         MainMenu2_img_add_friends.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "pp_main")), lv.EVENT.CLICKED, None)
-        MainMenu2_img_camera_video.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_answer")), lv.EVENT.CLICKED, None)
+        MainMenu2_img_camera_video.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "videolist")), lv.EVENT.CLICKED, None)
         MainMenu2_img_camera.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera")), lv.EVENT.CLICKED, None)
-        # MainMenu2_img_camera_album.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_album")), lv.EVENT.CLICKED, None)
+        MainMenu2_img_camera_album.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_album")), lv.EVENT.CLICKED, None)
         MainMenu2_img_contacts.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "contacts")), lv.EVENT.CLICKED, None)
         MainMenu2_img_wechat.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.CLICKED, None)
         # MainMenu2_img_spo2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "spo2")), lv.EVENT.CLICKED, None)
@@ -381,9 +381,9 @@ class MainMenuScreen(Screen):
         MainMenu2_img_toolbox.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "toolbox")), lv.EVENT.PRESSING, None)
         MainMenu2_img_setting.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "setting")), lv.EVENT.PRESSING, None)
         MainMenu2_img_add_friends.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "pp_main")), lv.EVENT.PRESSING, None)
-        MainMenu2_img_camera_video.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_answer")), lv.EVENT.PRESSING, None)
+        MainMenu2_img_camera_video.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "videolist")), lv.EVENT.PRESSING, None)
         MainMenu2_img_camera.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera")), lv.EVENT.PRESSING, None)
-        # MainMenu2_img_camera_album.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_album")), lv.EVENT.CLICKED, None)
+        MainMenu2_img_camera_album.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_album")), lv.EVENT.PRESSING, None)
         MainMenu2_img_contacts.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "contacts")), lv.EVENT.PRESSING, None)
         MainMenu2_img_wechat.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.PRESSING, None)
         # MainMenu2_img_spo2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "spo2")), lv.EVENT.CLICKED, None)
index 116856a..45d3d8d 100644 (file)
Binary files a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip and b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip differ
index 00a6fa7..4567775 100644 (file)
@@ -2,8 +2,8 @@
 #ifndef __APP_LINK_START_ADDR_H__
 #define __APP_LINK_START_ADDR_H__
 
-#define APP_LINK_START_ADDR  0x804D5000
-#define APP_FLASH_MAX_SIZE 0x1DB000
+#define APP_LINK_START_ADDR  0x804DA000
+#define APP_FLASH_MAX_SIZE 0x208000
 
 #define APP_RAM_START 0x7E3E0000
 #define APP_RAM_MAX_SIZE 0x180000
diff --git a/2.sdk/project/K01/usr/static/album/camer.txt b/2.sdk/project/K01/usr/static/album/camer.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/2.sdk/project/K01/usr/static/album_delete.png b/2.sdk/project/K01/usr/static/album_delete.png
new file mode 100644 (file)
index 0000000..a6cc75c
Binary files /dev/null and b/2.sdk/project/K01/usr/static/album_delete.png differ
diff --git a/2.sdk/project/K01/usr/static/camera_album_btn.png b/2.sdk/project/K01/usr/static/camera_album_btn.png
new file mode 100644 (file)
index 0000000..6e1bf64
Binary files /dev/null and b/2.sdk/project/K01/usr/static/camera_album_btn.png differ
diff --git a/2.sdk/project/K01/usr/static/camera_btn.png b/2.sdk/project/K01/usr/static/camera_btn.png
new file mode 100644 (file)
index 0000000..9474e7e
Binary files /dev/null and b/2.sdk/project/K01/usr/static/camera_btn.png differ