W8:
authordxy15521469561 <1731678236@qq.com>
Wed, 3 Jul 2024 03:08:56 +0000 (11:08 +0800)
committerdxy15521469561 <1731678236@qq.com>
Wed, 3 Jul 2024 03:08:56 +0000 (11:08 +0800)
AI图片更新

2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ai.py
2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/capacitive_hynitron_cst816d_update.py
2.sdk/project/W8/sdk/services/microPython/ports/quectel/core/ui_main_menu.py
2.sdk/project/W8/usr/static/IMAGE_ONE_PAGE_AI.png
2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png
2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png
2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png

index 4fbeb5f..6b3b82f 100644 (file)
@@ -13,6 +13,7 @@ import lvgl as lv
 import urandom
 import uhashlib
 import ubinascii
+import gc
 from ui import style_font_youyuan_20,style_screen,Screen,style_img,LCD_SIZE_H,LCD_SIZE_W
 style_font_youyuan_ai_20 = lv.style_t()
 style_font_youyuan_ai_20.init()
@@ -20,25 +21,33 @@ style_font_youyuan_ai_20.set_text_color(lv.color_make(253, 82, 19))
 style_font_youyuan_ai_20.set_text_font_v2("font_28.bin",28,0)
 #length长度内,返回string句号或逗号的分割字符串
 def split_string(string,start,end):
+    count = string.find('\n',start,end)
+    if count != -1:
+        return string[:count+1]
     count = string.find(',',start,end)
     if count != -1:
-        return string[:count]
+        return string[:count+1]
     count = string.find('.',start,end)
     if count != -1:
-        return string[:count]
+        return string[:count+1]
     count = string.find('!',start,end)
     if count != -1:
-        return string[:count]
+        return string[:count+1]
     count = string.find('?',start,end)
     if count != -1:
-        return string[:count]
-
+        return string[:count+1]
+    
+    
     count = string.find(',',start,end)
     if count != -1:
         return string[:count+len(',')]
     count = string.find('。',start,end)
     if count != -1:
         return string[:count+len('。')]
+    count = string.find('、',start,end)
+    if count != -1:
+        return string[:count+len('、')]
+    
     count = string.find('!',start,end)
     if count != -1:
         return string[:count+len('!')]
@@ -207,46 +216,6 @@ style_font_28_green_bg_gray.init()
 # style_font_28_green_bg_gray.set_pad_bottom(0)
 style_font_28_green_bg_gray.set_text_color(lv.color_make(255, 255, 255)) #字体文本颜色
 style_font_28_green_bg_gray.set_text_font_v2("font_28.bin",28,0)
-
-#列表obj
-style_wechat_s_btn =  lv.style_t()
-style_wechat_s_btn.init()
-style_wechat_s_btn.set_radius(5)
-style_wechat_s_btn.set_bg_opa(255)
-style_wechat_s_btn.set_border_width(0)
-style_wechat_s_btn.set_pad_left(0)
-style_wechat_s_btn.set_pad_right(0)
-style_wechat_s_btn.set_pad_top(0)
-style_wechat_s_btn.set_pad_bottom(0)
-style_wechat_s_btn.set_bg_color(lv.color_make(79,195,76))
-style_wechat_s_btn.set_shadow_opa(0)
-
-AI_end_screen_list_screen = lv.obj(AI_talk_end_screen)
-AI_end_screen_list_screen.set_pos(10, 5)
-AI_end_screen_list_screen.set_size(LCD_SIZE_W-10,205)
-AI_end_screen_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-AI_end_screen_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-AI_end_screen_list_screen.set_flex_flow(lv.FLEX_FLOW.COLUMN)#自动排成一列对齐
-
-AI_end_screen_list_detail_screen = lv.obj(AI_end_screen_list_screen)
-AI_end_screen_list_detail_screen.set_pos(0, 5)
-AI_end_screen_list_detail_screen.set_size(230,lv.SIZE.CONTENT)
-AI_end_screen_list_detail_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-AI_end_screen_list_detail_screen1 = lv.obj(AI_end_screen_list_detail_screen)
-AI_end_screen_list_detail_screen1.set_pos(30,10)
-AI_end_screen_list_detail_screen1.set_size(190,lv.SIZE.CONTENT)
-AI_end_screen_list_detail_screen1.add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-AI_listen_text = lv.label(AI_end_screen_list_detail_screen1)
-AI_listen_text.set_pos(5, 10)
-AI_listen_text.set_size(175, lv.SIZE.CONTENT)
-AI_listen_text.set_text(" ")
-AI_listen_text.set_long_mode(lv.label.LONG.WRAP)
-AI_listen_text.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-AI_listen_text.add_style(style_font_28_green_bg_gray, lv.PART.MAIN | lv.STATE.DEFAULT)
-
 style_gray_screen = lv.style_t()
 style_gray_screen.init()
 style_gray_screen.set_radius(5)
@@ -284,13 +253,49 @@ style_wechat_r_btn.set_pad_bottom(0)
 style_wechat_r_btn.set_bg_color(lv.color_make(66,66,66))
 style_wechat_r_btn.set_border_width(0)
 style_wechat_r_btn.set_shadow_opa(0)
+#列表obj
+style_wechat_s_btn =  lv.style_t()
+style_wechat_s_btn.init()
+style_wechat_s_btn.set_radius(5)
+style_wechat_s_btn.set_bg_opa(255)
+style_wechat_s_btn.set_border_width(0)
+style_wechat_s_btn.set_pad_left(0)
+style_wechat_s_btn.set_pad_right(0)
+style_wechat_s_btn.set_pad_top(0)
+style_wechat_s_btn.set_pad_bottom(0)
+style_wechat_s_btn.set_bg_color(lv.color_make(79,195,76))
+style_wechat_s_btn.set_shadow_opa(0)
+
+AI_end_screen_list_screen = lv.obj(AI_talk_end_screen)
+AI_end_screen_list_screen.set_pos(10, 5)
+AI_end_screen_list_screen.set_size(LCD_SIZE_W-10,205)
+AI_end_screen_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+AI_end_screen_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+AI_end_screen_list_screen.set_flex_flow(lv.FLEX_FLOW.COLUMN)#自动排成一列对齐
+
+AI_end_screen_list_detail_screen = lv.obj(AI_end_screen_list_screen)
+AI_end_screen_list_detail_screen.set_pos(0, 5)
+AI_end_screen_list_detail_screen.set_size(230,lv.SIZE.CONTENT)
+AI_end_screen_list_detail_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
 
+#ASR结果1
+AI_end_screen_list_detail_screen1 = lv.obj(AI_end_screen_list_detail_screen)
+AI_end_screen_list_detail_screen1.set_pos(30,10)
+AI_end_screen_list_detail_screen1.set_size(190,lv.SIZE.CONTENT)
+AI_end_screen_list_detail_screen1.add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+AI_listen_text = lv.label(AI_end_screen_list_detail_screen1)
+AI_listen_text.set_pos(5, 10)
+AI_listen_text.set_size(175, lv.SIZE.CONTENT)
+AI_listen_text.set_text(" ")
+AI_listen_text.set_long_mode(lv.label.LONG.WRAP)
+AI_listen_text.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+AI_listen_text.add_style(style_font_28_green_bg_gray, lv.PART.MAIN | lv.STATE.DEFAULT)
 
+#chat结果1
 msg_detail_cont_obj = lv.obj(AI_end_screen_list_screen)
 msg_detail_cont_obj.set_pos(0, 5)
 msg_detail_cont_obj.set_size(220,lv.SIZE.CONTENT)
 msg_detail_cont_obj.add_style(style_wechat_r_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
-
 AI_label = lv.label(msg_detail_cont_obj)
 AI_label.set_pos(5, 10)
 AI_label.set_size(205, lv.SIZE.CONTENT)
@@ -298,7 +303,26 @@ AI_label.set_long_mode(lv.label.LONG.WRAP)
 AI_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
 AI_label.add_style(style_font_28_black_bg_gray, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-
+#222222222222222222222222222222222222
+AI_end_screen_list_screen2 = lv.obj(AI_talk_end_screen)
+AI_end_screen_list_screen2.set_pos(10, 5)
+AI_end_screen_list_screen2.set_size(LCD_SIZE_W-10,205)
+AI_end_screen_list_screen2.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+AI_end_screen_list_screen2.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+AI_end_screen_list_screen2.set_flex_flow(lv.FLEX_FLOW.COLUMN)#自动排成一列对齐
+
+#chat结果2
+msg_detail_cont_obj2 = lv.obj(AI_end_screen_list_screen2)
+msg_detail_cont_obj2.set_pos(0, 5)
+msg_detail_cont_obj2.set_size(220,lv.SIZE.CONTENT)
+msg_detail_cont_obj2.add_style(style_wechat_r_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+AI_label2 = lv.label(msg_detail_cont_obj2)
+AI_label2.set_pos(5, 10)
+AI_label2.set_size(205, lv.SIZE.CONTENT)
+AI_label2.set_long_mode(lv.label.LONG.WRAP)
+AI_label2.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+AI_label2.add_style(style_font_28_black_bg_gray, lv.PART.MAIN | lv.STATE.DEFAULT)
+AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2
 
 #开始对话
 AI_talk_screen = lv.obj(AI_screen)
@@ -626,6 +650,7 @@ class AIScreen(Screen):#AI_GUI
         super().__init__()
         self.meta = AI_screen
         # self.meta_type = "popup"
+        self._1S_timer = osTimer()
         self.Audio_buf_size = 8*1024
         self.record_timer = osTimer()
         self.record = audio.Record()
@@ -669,6 +694,7 @@ class AIScreen(Screen):#AI_GUI
         self.press_state = 0
         self.AI_label_answer = ""
         self.AI_label_str = ""
+
         self.AI_client_tts_play_data_len = 0
         self.refresh_texttimer = osTimer()
         self.AI_listen_text = ""
@@ -676,7 +702,14 @@ class AIScreen(Screen):#AI_GUI
         self.refresh_count = 0
         self.AI_send_data_queue = Queue(100)
         self.AI_audio_queue = Queue(100)
-
+        self.page_num = 0
+        self.page_num_tmp = 0
+        self.text_max = 400 #一次最大显示字数
+        self.scroll_flag_next = 0
+        self.scroll_flag_prev = 0
+        self.hard_flag_next = 0
+        self.hard_flag_prev = 0
+        self.scroll_timer_count = 0
         AI_screen.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,1)),
                                       lv.EVENT.GESTURE, None)
         
@@ -704,6 +737,9 @@ class AIScreen(Screen):#AI_GUI
 
         al_not_listen_icon1_bt.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,8)), lv.EVENT.SHORT_CLICKED, None)
         al_not_listen_icon1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.button_cb(e,8)), lv.EVENT.SHORT_CLICKED, None)
+        AI_end_screen_list_screen2.add_event_cb(self.scroll_event_cb, lv.EVENT.SCROLL_END, None)
+        AI_end_screen_list_screen.add_event_cb(self.scroll_event_cb, lv.EVENT.SCROLL_END, None)
+
     def button_cb(self,e,msg):
         code = e.get_code()
         indev = lv.indev_get_act()
@@ -810,6 +846,166 @@ class AIScreen(Screen):#AI_GUI
         AI_talk_screen.add_flag(lv.obj.FLAG.HIDDEN) #
         AI_not_listen_text_screen.clear_flag(lv.obj.FLAG.HIDDEN) #
         
+    def scroll_event_cb(self,e):
+        try:
+            
+            # 获取事件源对象
+            obj = e.get_target()
+            code = e.get_code()
+            # 如果事件是滚动条事件
+            if code == lv.EVENT.SCROLL_END:
+                
+                # 获取滚动条对象
+                
+                # 获取滚动条的位置
+                sb_value = obj.get_scroll_y()
+                
+                # 获取对象的高度和内容的总高度
+                content_height = obj.get_scroll_bottom()#obj.get_child(0).get_height()+obj.get_child(1).get_height()
+                #obj_height= obj.get_height()
+                #print("scroll_event_cb:sb_value:{},content_height:{}".format(sb_value,content_height))
+                #print("scroll_event_cb:scroll_flag_next:{},scroll_flag_prev:{}".format(self.scroll_flag_next,self.scroll_flag_prev))
+                # 检查滚动条是否已经到达最大值,即内容是否已经到达底部
+                if self.hard_flag_next == 1 or self.hard_flag_prev == 1:
+                    self.scroll_timer_count = 10 #滑动计时器初始化
+                if content_height < 0:
+                    self.scroll_flag_next = 1
+                elif self.hard_flag_next == 1 and self.scroll_flag_next == 1 and content_height == 0:
+                    print("下一页")
+                    
+                    self.page_change(2,self.AI_label_str)
+                    self.scroll_flag_next = 0
+                    self.hard_flag_next = 0
+                else:
+                    self.scroll_flag_next = 0
+                    self.hard_flag_next = 0
+                if  sb_value < 0:
+                    self.scroll_flag_prev = 1
+                elif self.hard_flag_prev == 1 and self.scroll_flag_prev == 1 and sb_value == 0:
+                    print("上一页")
+                    self.page_change(1,self.AI_label_str)
+                    self.scroll_flag_prev = 0
+                    self.hard_flag_prev = 0
+                else:
+                    self.scroll_flag_prev = 0
+                    self.hard_flag_prev = 0
+        except Exception as e:
+                usys.print_exception(e)
+
+    def page_change(self,dir,text_str):#翻页,dir: = 0跳转第一页,=1上一页,=2下一页,=3最后一页,最后的内容
+        text_str_list = []
+        text_str_list_len = 0
+        while 1:#分割字符串,获取列表
+            str_tmp = split_string(text_str[text_str_list_len:],self.text_max,self.text_max+150)#按逗号,句号切割
+            if str_tmp =="" :#没找到句号或者逗号,切割字符串
+                str_tmp = sub_utf8_String(text_str[text_str_list_len:],self.text_max)#按中文切割字符串
+            #print("page_change:str_tmp:{}".format((str_tmp)))
+            #str_tmp = sub_utf8_String(text_str[text_str_list_len:],self.text_max)
+            text_str_list_len+=len(str_tmp)
+            
+            if len(text_str) <= text_str_list_len:
+                text_str_list.append(str_tmp)
+                break
+            text_str_list.append(str_tmp)    
+        
+        if self.AI_client_chat_end_flag ==1:#char回答完后,使最后一页字数大于一页
+            #if len(text_str_list[-1]) < 50:
+            if len(self.AI_label_str ) <= len(text_str):
+                text_str_list[-1]+="\n\n\n\n~~~~~END~~~~~"
+                if len(text_str_list[-1])<30:
+                    text_str_list[-1]+="\n\n"
+        else: #chat未完成,创造中
+            if dir != 3:
+                text_str_list[-1]+="\n\n      创作中...\n\n"
+        
+        if dir == 0:#第一页
+            self.page_num = 0
+            if len(text_str_list)>self.page_num:
+                AI_label.set_text(text_str_list[self.page_num]+'\n       ...{}/{}...'.format(self.page_num+1,len(text_str_list)))
+            AI_end_screen_list_screen2.scroll_to_y(0,lv.ANIM.OFF)
+            AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2
+            AI_end_screen_list_screen.clear_flag(lv.obj.FLAG.HIDDEN) #
+        elif dir == 1:#上一页
+            if self.page_num == 1: #第二页,
+                
+                self.page_num-=1
+                if len(text_str_list)>self.page_num:
+                    AI_label.set_text(text_str_list[self.page_num]+'\n       ...{}/{}...'.format(self.page_num+1,len(text_str_list)))
+                    #AI_label.set_text(text_str_list[self.page_num]+'\n   ...{}/{}...'.format(self.page_num+1,len(text_str_list)))
+                scroll_bottom = AI_label.get_height()
+                print("page_change:scroll_bottom:{}".format(scroll_bottom))
+                AI_end_screen_list_screen.scroll_to_y(scroll_bottom,lv.ANIM.OFF)
+                AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2
+                AI_end_screen_list_screen.clear_flag(lv.obj.FLAG.HIDDEN) #
+                #AI_end_screen_list_screen.scroll_to_view(lv.ANIM.OFF)
+            elif self.page_num > 1:
+                self.page_num-=1
+                if len(text_str_list)>self.page_num:
+                    AI_label2.set_text(text_str_list[self.page_num]+'\n       ...{}/{}...'.format(self.page_num+1,len(text_str_list)))
+                scroll_bottom = AI_label2.get_height()
+                print("page_change:scroll_bottom:{}".format(scroll_bottom))
+                
+                AI_end_screen_list_screen2.scroll_to_y(scroll_bottom,lv.ANIM.OFF)
+                #AI_end_screen_list_screen2.scroll_to_view(lv.ANIM.OFF)
+        elif dir == 2:#下一页
+            if len(text_str_list)<=self.page_num+1:#最大页
+                return
+            self.page_num+=1    
+            if len(text_str_list)>self.page_num:
+                #AI_label2.set_text('         ...\n\n'+text_str_list[self.page_num]+'\n   ...{}/{}...'.format(self.page_num+1,len(text_str_list)))
+                #print("page_change:next:{}".format(text_str_list[self.page_num]))
+                AI_label2.set_text(text_str_list[self.page_num]+'\n   ...{}/{}...'.format(self.page_num+1,len(text_str_list)))
+            AI_end_screen_list_screen2.scroll_to_y(0,lv.ANIM.OFF)
+            if self.page_num == 1: #显示第二页
+                AI_end_screen_list_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏1
+                AI_end_screen_list_screen2.clear_flag(lv.obj.FLAG.HIDDEN) #
+        elif dir == 3:#最后一页,最后的内容
+            if len(text_str_list)>1:#大于一页
+                
+                self.page_num = len(text_str_list)-1
+                #if len(text_str_list)>self.page_num:
+                str_tmp = sub_utf8_String(text_str_list[self.page_num-1],self.text_max-80)#在开头加上上一页的最后30字节数据
+                #print("str_tmp123:{}".format(str_tmp))
+                if len(text_str_list[self.page_num-1])>len(str_tmp):
+                    str_tmp = text_str_list[self.page_num-1][len(str_tmp):]
+                else:
+                    str_tmp = ''
+                # 
+                AI_label2.set_text(str_tmp+text_str_list[self.page_num])#+'\n   ...{}/{}...'.format(self.page_num+1,len(text_str_list)))
+                scroll_bottom = AI_label2.get_height()
+                AI_end_screen_list_screen2.scroll_to(0,scroll_bottom,lv.ANIM.ON)
+                #print("最后内容,大于一页 scroll_bottom:{}".format(scroll_bottom))
+                if self.page_num_tmp == self.page_num:#解决切换页面的时候不跳动问题
+                    # AI_label2.set_text("\n\n"+str_tmp+text_str_list[self.page_num])
+                    # scroll_bottom = AI_label2.get_height()
+                    AI_end_screen_list_screen2.scroll_to(0,scroll_bottom,lv.ANIM.ON)
+                else:
+                    # AI_label2.set_text("\n\n\n\n\n\n"+str_tmp+text_str_list[self.page_num])
+                    # scroll_bottom = AI_label2.get_height()
+                    AI_end_screen_list_screen2.scroll_to(0,scroll_bottom,lv.ANIM.OFF)
+                self.page_num_tmp = self.page_num
+                print("text_str_list[self.page_num]:{}".format(str_tmp+text_str_list[self.page_num]))
+                #AI_end_screen_list_screen2.scroll_to_view(lv.ANIM.OFF)
+                AI_end_screen_list_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏1
+                AI_end_screen_list_screen2.clear_flag(lv.obj.FLAG.HIDDEN) #
+                if len(self.AI_label_str ) > len(text_str):#处理播放音频的时候,获取下一页数据
+                    self.page_num-=1
+            elif len(text_str_list) == 1:#只有一页
+                self.page_num = 0
+                if len(text_str_list)>self.page_num:
+                    AI_label.set_text(text_str_list[self.page_num])#+'\n   ...{}/{}...'.format(self.page_num+1,len(text_str_list)))
+                scroll_bottom = AI_label.get_height()
+                #print("最后内容,只有一页 scroll_bottom:{}".format(scroll_bottom))
+                # if(scroll_bottom>200):
+                #     scroll_bottom -= 200
+
+                AI_end_screen_list_screen.scroll_to(0,scroll_bottom,lv.ANIM.ON)
+                #AI_end_screen_list_screen.scroll_to_view(lv.ANIM.OFF)
+                AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2
+                AI_end_screen_list_screen.clear_flag(lv.obj.FLAG.HIDDEN) #
+        print("page_change1:page_num:{},text_str_list len:{}".format(self.page_num,len(text_str_list)))
+        #print("page_change2:page_num:{}".format(self.page_num))   
+        #print("page_change3:str:{}".format(text_str_list[self.page_num])) 
 
     def listen_end_btcb(self,e):#说话完成确定按钮回调
         if self.AI_listen_end == 1:#说话完成 已有录音文字返回
@@ -847,20 +1043,16 @@ class AIScreen(Screen):#AI_GUI
             self.not_talk_cb()
 
     def ai_talk_end(self):#语言识别完 思考结束显示最后的文本和音频数据
-        AI_no_net_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏
-        AI_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
-        AI_think_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏
-        AI_connect_timerout_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏
-        AI_talk_screen.add_flag(lv.obj.FLAG.HIDDEN) #
-        AI_not_listen_text_screen.add_flag(lv.obj.FLAG.HIDDEN) #
-        AI_talk_end_screen.clear_flag(lv.obj.FLAG.HIDDEN) #
+        
+        
 
-        # self.AI_label_answer = ""
+        self.AI_label_answer = ""
         AI_end_screen_list_screen.scroll_to(0, 0, lv.ANIM.OFF)
         AI_label.set_pos(5, 10)
-        AI_label.set_text(self.AI_label_answer)
-        AI_label.set_text("数据解析中...")
-        
+        #AI_label.set_text(self.AI_label_answer)
+        AI_label.set_text("思考中...")
+        AI_label2.set_text(" ")
+        self.scroll_timer_count = 0
         # self.AI_listen_text = "嗯。"
         str_len = len(self.AI_listen_text)*20
         if str_len > 165:
@@ -875,15 +1067,21 @@ class AIScreen(Screen):#AI_GUI
         AI_listen_text.set_text(self.AI_listen_text)
         EventMesh.publish("system_sleep_rest")#防止黑屏
         self.refresh_count = 0
-        self.refresh_texttimer.start(500,1,self.ai_talk_end_show_text)#stop() #(500,1,self.ai_talk_end_show_text)
-    def ai_talk_end_show_text(self,*argc):
-        EventMesh.publish("publish_message_event_ui",{"func":self.ai_talk_end_lcd_on,"data":0})
-    def ai_talk_end_lcd_on(self,data):
-        EventMesh.publish("system_sleep_rest")#防止黑屏
+        AI_no_net_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏
+        AI_listen_screen.add_flag(lv.obj.FLAG.HIDDEN)
+        AI_think_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏
+        AI_connect_timerout_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏
+        AI_talk_screen.add_flag(lv.obj.FLAG.HIDDEN) #
+        AI_not_listen_text_screen.add_flag(lv.obj.FLAG.HIDDEN) #
+        AI_talk_end_screen.clear_flag(lv.obj.FLAG.HIDDEN) #
+        AI_end_screen_list_screen2.add_flag(lv.obj.FLAG.HIDDEN) #隐藏2
+        AI_end_screen_list_screen.clear_flag(lv.obj.FLAG.HIDDEN) #
 
     def ai_talk_end_show_text_cb(self,data):
-        AI_label.set_text(self.AI_label_answer)
-        
+        #AI_label.set_text(self.AI_label_answer)
+        #print("ai_talk_end_show_text_cb:scroll_timer_count{}".format(self.scroll_timer_count))
+        if self.scroll_timer_count <= 0:
+            self.page_change(3,self.AI_label_answer)#刷新到最后内容
         pass
 
     def connect_timerout_popup(self,msg):#连接超时弹窗提示
@@ -903,14 +1101,7 @@ class AIScreen(Screen):#AI_GUI
 
     def text_show_think(self,*argc):
         EventMesh.publish("publish_message_event_ui",{"func":self.text_show_think_cb,"data":0})
-    def think_end_result(self):
-        if self.timer_out_count > 1:
-            if self.img_show_count_flag == 1:
-                return
-            self.timer_out_count = 0
-            self.img_show_count_flag = 1
-            self.refresh_texttimer.stop()
-            self.ai_talk_end()
+    
     def text_show_think_cb(self,data): #文本刷新
         if self.img_show_count_flag == 1:
             self.refresh_texttimer.stop()
@@ -953,6 +1144,18 @@ class AIScreen(Screen):#AI_GUI
         elif self.refresh_count == 3:
             al_think_screen_title1.set_text("正在思考...")
         pass
+    
+    def think_end_result(self):
+        EventMesh.publish("publish_message_event_ui",{"func":self.think_end_result_cb,"data":0})  
+    def think_end_result_cb(self,data):
+        if self.timer_out_count > 1:
+            if self.img_show_count_flag == 1:
+                return
+            self.timer_out_count = 0
+            self.img_show_count_flag = 1
+            self.refresh_texttimer.stop()
+            self.ai_talk_end()
+            
     def img_cb(self,e): #无网络 无数据按钮回调
         self.refresh_texttimer.stop()
         AI_no_net_screen.add_flag(lv.obj.FLAG.HIDDEN) #隐藏
@@ -972,7 +1175,7 @@ class AIScreen(Screen):#AI_GUI
         AI_talk_end_screen.add_flag(lv.obj.FLAG.HIDDEN) #先隐藏
         AI_not_listen_text_screen.add_flag(lv.obj.FLAG.HIDDEN) #
         AI_talk_screen.clear_flag(lv.obj.FLAG.HIDDEN) #先隐藏
-        self.aud.setVolume(11)#设置最大声录音
+        #self.aud.setVolume(11)#设置最大声录音
 
         self.AI_label_answer = ""
         self.AI_client_chat_play_str = ''
@@ -1014,7 +1217,7 @@ class AIScreen(Screen):#AI_GUI
     def AI_init(self):
         self.AI_audio_queue_thread_id = _thread.start_new_thread(self.AI_audio_queue_thread, ())
         self.AI_send_data_queue_thread_id = _thread.start_new_thread(self.AI_send_data_queue_thread, ())
-        
+        self._1S_timer.start(1000,1,self._1S_timer_cb)
         
         
     #按下录音
@@ -1060,23 +1263,33 @@ class AIScreen(Screen):#AI_GUI
             
             EventMesh.publish("publish_message_event_ui",{"func":self.talking,"data":e})
             
-
-    def text_show_refresh(self,*argc):
-        EventMesh.publish("publish_message_event_ui",{"func":self.text_show_refresh_cb,"data":0})
     def talk_ars_end(self):
-        if self.AI_listen_text == "":
-            return
+        
+        
         self.record.stop()#关闭录音
         self.record_timer.stop()#关闭定时器
         self.timer_out_count = 0
-        print("talk_ars_end!!!!!!!!!!!\r\n")
-        self.AI_client_chat_send(self.AI_listen_text) 
+        self.AI_send_data_queue.clear()
+        Record_read_buf = bytearray(self.Audio_buf_size)
+        for i in range(10):
+            Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)
+            print("Record_len:!!!!!!{}\r\n".format(Record_len))
+            if Record_len <= 0:
+                break
+        print("talk_ars_end2!!!!!!!!!!!\r\n")
+        
         try:
             self.websocket_deconnect_asr()
         except Exception as e:
             usys.print_exception(e)
+        if self.AI_listen_text == "":
+            return
+        self.AI_client_chat_send(self.AI_listen_text) 
        
     
+    def text_show_refresh(self,*argc):
+        EventMesh.publish("publish_message_event_ui",{"func":self.text_show_refresh_cb,"data":0})
+    
     def text_show_refresh_cb(self,data):
         if self.AI_listen_end == 1 or self.timer_out_count >= 120:#语音识别结束
             self.record.stop()#关闭录音
@@ -1189,6 +1402,10 @@ class AIScreen(Screen):#AI_GUI
                 #EventMesh.publish("load_screen", {"screen": "no_sim_popup_screen"})
         else:
             pass
+    def _1S_timer_cb(self,*argc):
+        EventMesh.publish("system_sleep_rest")#防止黑屏
+        if self.scroll_timer_count > 0:
+            self.scroll_timer_count-=1
     #定时器
     def record_timer_cb(self,*argc):
         EventMesh.publish("system_sleep_rest")#防止黑屏
@@ -1218,7 +1435,7 @@ class AIScreen(Screen):#AI_GUI
         #if self.AI_client_chat_isconnect == 0:
         # 创建客户端, debug=True输出日志, ip和端口需要自己填写, 或者是域名
         try:
-            self.AI_client_chat = uwebsocket.Client.connect('ws://121.40.67.151:9099/chat/ws', debug=False)
+            self.AI_client_chat = uwebsocket.Client.connect('ws://118.145.158.207:80/chat/ws', debug=False)
         except Exception as e: #网络连接异常
             usys.print_exception(e)
             print("websocket_connect_chat error!!!\r\n")
@@ -1271,15 +1488,18 @@ class AIScreen(Screen):#AI_GUI
                     else:
                         # if self.AI_label_str:
                         #     self.AI_client_tts_send(self.AI_label_str)#TTS语音播放AI结果
-                        print("AI_client_chat_recv chat_data start\r\n")
+                        #print("AI_client_chat_recv chat_data start\r\n")
                         if jsload_data['type']=='start':
                             self.AI_label_str = ""
                             self.AI_client_chat_end_flag = 0
+                            self.AI_client_tts_data_len = 0
                             self.websocket_connect_tts() #连接tts
                             #
                         elif jsload_data['type']=='end':
                             print("chat end!!!!!!!!!!!!!!")
                             self.AI_client_chat_end_flag = 1
+                    if len(self.AI_client_chat_play_str) > 100:
+                        utime.sleep_ms(100)
                 except Exception as e:
                     usys.print_exception(e)
                 
@@ -1291,17 +1511,17 @@ class AIScreen(Screen):#AI_GUI
 ##############################################################################
     #文字转语音链路
     def websocket_connect_tts(self):
-        print("websocket_connect_tts:{}!!!!!!!!!!!!!!!!!!!!!!".format(self.AI_client_tts_isconnect))
+        #print("websocket_connect_tts:{}!!!!!!!!!!!!!!!!!!!!!!".format(self.AI_client_tts_isconnect))
         if self.AI_client_tts_isconnect == 0:
             try:
                 # self.AI_client_tts = uwebsocket.Client.connect('ws://40.67.151:9099/tts/', debug=False)
-                self.AI_client_tts = uwebsocket.Client.connect('ws://121.40.67.151:9099/tts/long-text-stream', debug=False)
+                self.AI_client_tts = uwebsocket.Client.connect('ws://118.145.158.207:80/tts/long-text-stream', debug=False)
             except Exception as e: #网络连接异常
                 usys.print_exception(e)
                 print("websocket_connect_tts ERROR:{}\r\n".format(e))
                 self.connect_timerout_popup(2)
                 return
-            print("websocket_connect_tts:self.AI_client_tts {}\r\n".format(self.AI_client_tts))
+            #print("websocket_connect_tts:self.AI_client_tts {}\r\n".format(self.AI_client_tts))
         # 线程接收数据
         if self.AI_client_tts_recv_id != 0:
             try:
@@ -1328,9 +1548,9 @@ class AIScreen(Screen):#AI_GUI
         if self.TTS_PRO_TYPE == 1:
             #tts数据入队
             self.AI_client_tts_put_data()
-        print("AI_audio_queue.size:{},AI_send_data_queue.size:{} self.AI_client_chat_play_str:{} self.AI_client_tts_tra_flag:{}\r\n".format(self.AI_audio_queue.size(),self.AI_send_data_queue.size(),self.AI_client_chat_play_str,self.AI_client_tts_tra_flag) )
+        #print("AI_audio_queue.size:{},AI_send_data_queue.size:{} self.AI_client_chat_play_str:{} self.AI_client_tts_tra_flag:{}\r\n".format(self.AI_audio_queue.size(),self.AI_send_data_queue.size(),self.AI_client_chat_play_str,self.AI_client_tts_tra_flag) )
         #字符串分段发送,等待播放缓存变小
-        if len(self.AI_client_chat_play_str) >0  and self.AI_client_tts_data_len < 150*1024 :#and (self.AI_client_tts_str_total_len <100 or self.AI_client_tts_str_total_len - self.AI_client_tts_data_total_len//672 < 60)缓存200k以下,且tts发送文字字节数比返回音频数据少60字节
+        if len(self.AI_client_chat_play_str) >0  and self.AI_client_tts_data_len < 130*1024 :#and (self.AI_client_tts_str_total_len <100 or self.AI_client_tts_str_total_len - self.AI_client_tts_data_total_len//672 < 60)缓存200k以下,且tts发送文字字节数比返回音频数据少60字节
             # play_str = split_string(self.AI_client_chat_play_str,40)#
             # if play_str =="":#没找到句号或者逗号,切割字符串
             self.tts_time_outcount+=1
@@ -1339,7 +1559,7 @@ class AIScreen(Screen):#AI_GUI
                 play_str = sub_utf8_String(self.AI_client_chat_play_str,20)#按中文切割字符串
                 self.AI_client_tts_str_total_len += len(play_str)
             elif self.TTS_PRO_TYPE == 0:
-                if self.AI_audio_queue.size() >= 5 or self.AI_client_tts_tra_flag == 1 or (self.tts_time_outcount < 3 and len(self.AI_client_chat_play_str) < 100):#存了超过4句,就等小于3次在转化
+                if self.AI_audio_queue.size() >= 4 or self.AI_client_tts_tra_flag == 1 or (self.tts_time_outcount < 3 and len(self.AI_client_chat_play_str) < 100):#存了超过4句,就等小于3次在转化
                     return
                 play_str = split_string(self.AI_client_chat_play_str,50,100)#按逗号,句号切割
                 if play_str =="" or len(play_str)>100:#没找到句号或者逗号,切割字符串
@@ -1350,8 +1570,8 @@ class AIScreen(Screen):#AI_GUI
                 return
             self.AI_client_tts_send(play_str)#TTS语音播放AI结果
             self.AI_client_chat_play_str = self.AI_client_chat_play_str[len(play_str):]
-            print("TTS play:len{},data{}".format(len(play_str),play_str))
-        if len(self.AI_client_chat_play_str) <=0 and self.AI_client_chat_end_flag ==1 :
+            #print("TTS play:len{},data{}".format(len(play_str),play_str))
+        if self.TTS_PRO_TYPE == 1 and len(self.AI_client_chat_play_str) <=0 and self.AI_client_chat_end_flag ==1 :
             self.AI_client_chat_end_flag=0
             self.AI_client_tts_end()
         
@@ -1367,11 +1587,11 @@ class AIScreen(Screen):#AI_GUI
                     "trace_id": self.get_trace_id()
                 },
                 "payload": {
-                    "voice":"xiaoyun",
+                    "voice":"zhixiaomei",#"xiaoyun",
                     "format":"mp3",
                     "sample_rate":8000,
                     "volume":90,
-                    "speech_rate":2,
+                    "speech_rate":30,
                     "text":"%s"%(data_str)
                 }
             }
@@ -1387,16 +1607,18 @@ class AIScreen(Screen):#AI_GUI
         self.record_timer.stop()#关闭定时器
         self.tts_time_count = 0
         self.tts_data_tmp = b''
-        self.AI_client_tts_data_len = 0
+        
         self.AI_client_tts_data_total_len = 0
         self.AI_client_tts_str_total_len=  0
         
         #self.AI_client_tts_str_sen = ""
         if self.TTS_PRO_TYPE == 1:
+            self.AI_client_tts_data_len = 0
             self.AI_client_tts_tra_flag = 1
             self.AI_client_tts.send(json_data)
             utime.sleep_ms(100)
         #self.AI_send_data_queue.put([self.AI_client_tts_num,json_data]) 
+        
     def AI_client_tts_end(self):
         if self.TTS_PRO_TYPE == 1:
             data_l ={"header": {"event": "StopSynthesis","trace_id": self.get_trace_id()}}
@@ -1419,6 +1641,7 @@ class AIScreen(Screen):#AI_GUI
             self.tts_data_tmp = b''
             if self.TTS_PRO_TYPE == 1:
                 self.AI_client_tts_tra_flag = 0
+            gc.collect()#GC主动回收内存
     #文字转语音链路读数据       
     def AI_client_tts_recv(self,cli):
         recv_data_len_same_count = 0
@@ -1428,6 +1651,7 @@ class AIScreen(Screen):#AI_GUI
                 # 死循环接收数据
                 
                 recv_data = cli.recv()
+                
                 if not recv_data:
                     # 服务器关闭连接或客户端关闭连接
                     print("AI_client_tts_recv close!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n")
@@ -1437,10 +1661,10 @@ class AIScreen(Screen):#AI_GUI
                     print("AI_client_tts_recv :{}".format(len(recv_data)))
                     #结束标志{"header":{"event":"EndSynthesis","msg":"success","status":20000000,"task_id":"ffd727e620000803280c5a6498d0e321"}}
                     if isinstance(recv_data, str):
-                        print("AI_client_tts_recv:str recv_data:{}".format(recv_data))
+                        #print("AI_client_tts_recv:str recv_data:{}".format(recv_data))
                         if recv_data.find('\"event\":\"EndSynthesis\"') != -1:
-                            print("EndSynthesis!!!!!!!!!!!!!!!!!\r\n")
-                            print("EndSynthesis!!!!!!!!!!!!!!!!!!\r\n")
+                            #print("EndSynthesis!!!!!!!!!!!!!!!!!\r\n")
+                            #print("EndSynthesis!!!!!!!!!!!!!!!!!!\r\n")
                             #self.tts_data_tmp=self.tts_data_tmp[9:-100]
                             try:
                                 self.websocket_deconnect_tts()#断开
@@ -1478,7 +1702,8 @@ class AIScreen(Screen):#AI_GUI
                     usys.print_exception(e)
                     # print(recv_data)
                     # print(type(recv_data))
-                
+                    mem = gc.mem_free()
+                    print('2剩余内存RAM:{} KB'.format(mem / 1024))
             except Exception as e:
                     usys.print_exception(e)
                     break
@@ -1495,7 +1720,7 @@ class AIScreen(Screen):#AI_GUI
             usys.print_exception(e)   
         
         try:
-            self.AI_client_asr = uwebsocket.Client.connect('ws://121.40.67.151:9099/asr/ws', debug=False)
+            self.AI_client_asr = uwebsocket.Client.connect('ws://118.145.158.207:80/asr/ws', debug=False)
         except Exception as e: #网络连接异常
             usys.print_exception(e)
             print("websocket_connect_asr error!!!\r\n")
@@ -1518,8 +1743,7 @@ class AIScreen(Screen):#AI_GUI
         #self.AI_client_asr.send(data_bytes)
         self.AI_send_data_queue.put([self.AI_client_asr_num,data_bytes]) 
     def AI_client_asr_start(self):
-        
-        self.AI_send_data_queue.put([self.AI_client_asr_num,"{\"header\":{\"event\":\"StartTranscription\",\"trace_id\":\"3fa6b9e6a30b407ea38ad7ae69e6c291\"},\"payload\":{\"format\":\"amr\",\"sample_rate\":8000}}"]) 
+        self.AI_send_data_queue.put([self.AI_client_asr_num,"{\"header\":{\"event\":\"StartTranscription\",\"trace_id\":\"%s\"},\"payload\":{\"format\":\"amr\",\"sample_rate\":8000}}"%(self.get_trace_id())]) 
     #语音转文字链路读数据       
     def AI_client_asr_recv(self,cli):
         
@@ -1537,7 +1761,12 @@ class AIScreen(Screen):#AI_GUI
                     if isinstance(recv_data, str):
                         jsload_data =  ujson.loads(recv_data)
                         print("jsload_data = {}".format(jsload_data))
+                        if recv_data.find('\"result\"') == -1:
+                        #if jsload_data["result"] == None:
+                            print("continue recv_data:{}".format(recv_data))
+                            continue 
                         if jsload_data["result"] == None:
+                            print("continue recv_data:{}".format(recv_data))
                             continue 
                         if jsload_data["result"]["result"]:
                             self.AI_listen_text = str(jsload_data["result"]["result"])
@@ -1596,6 +1825,8 @@ class AIScreen(Screen):#AI_GUI
                         tmp = self.AI_client_chat.send(data[1])
                         print("chat send_data:{} tmp:{}".format(len(data[1]),tmp))
                     if data[0] == self.AI_client_asr_num:
+                        if isinstance(data[1], str):
+                            print("ASR:AI_client_asr_isconnect:{},data:{}",self.AI_client_asr_isconnect,data[1])
                         if self.AI_client_asr_isconnect == 0:
                             try:
                                 self.websocket_connect_asr()
@@ -1656,7 +1887,7 @@ class AIScreen(Screen):#AI_GUI
                     data = self.AI_audio_queue.get()
                     
                     #self.AI_client_tts_data_len=len(data)
-                    print("audio_queue:len:{},data{}".format(len(data[0]),data[1]))
+                    #print("audio_queue:len:{},data{}".format(len(data[0]),data[1]))
                     if len(data[0]) > 1:
                         if self.TTS_PRO_TYPE == 0:
                             
@@ -1670,6 +1901,8 @@ class AIScreen(Screen):#AI_GUI
                             if tmp != 0:
                                 print("2playStream:error tmp:{} data len:{}!!!!!!!!!!!!".format(tmp,len(data[0])))
                             self.AI_client_tts_data_len -=len(data[0])
+                            mem = gc.mem_free()
+                            print('1剩余内存RAM:{} KB'.format(mem / 1024))
                         except Exception as e:
                             print("AI_audio_queue_thread:ERROR:")
                             usys.print_exception(e)
@@ -1711,6 +1944,7 @@ class AIScreen(Screen):#AI_GUI
                 self.AI_client_asr_recv_id = 0
         except Exception as e:
             usys.print_exception(e)
+        self._1S_timer.stop()
         self.AI_send_data_queue.clear()
         print("close:AI_send_data_queue:size:{}".format(self.AI_send_data_queue.size()))
         self.AI_audio_queue.clear()
@@ -1738,6 +1972,17 @@ class AIScreen(Screen):#AI_GUI
             self.websocket_deconnect_chat()
         except Exception as e:
             usys.print_exception(e)
+    
+    def done_bottom_to_top(self):
+        print("done_bottom_to_top:")
+        self.hard_flag_next = 1
+        
+    def done_top_to_bottom(self):
+        # self.timer_start_cb()
+        print("done_top_to_bottom")
+        self.hard_flag_prev = 1
+        pass
+
     def done_return(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
     
index f165c72..f0f8f6c 100644 (file)
@@ -966,7 +966,7 @@ app_bin_816d = [
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0xb6, 0x02, 0x40, 0x52, 0x48, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x79, 
+0xb6, 0x02, 0x40, 0x52, 0x48, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x79,
 ]
 
 #endif /*CAPACITIVE_HYNITRON_CST816D_UPDATE_H__*/
index 98b9861..1ce91a6 100644 (file)
@@ -244,28 +244,28 @@ MainMenu2_img_sms_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STAT
 MainMenu2_num+=1
 MainMenu2x+=1
 
-# #AI助手
-# MainMenu2_ai = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
-# label_text = lv.label(MainMenu2_ai)
-# label_text.set_pos(0, LCD_SIZE_H)
-# label_text.set_size(0, 0)
-# label_text.set_text("{}".format(MainMenu2_num))
-# MainMenu2_img_ai = lv.img(MainMenu2_ai)
-# MainMenu2_img_ai.set_size(MAIN_ICON_SZIE,MAIN_ICON_SZIE)
-# MainMenu2_img_ai.set_pos(MAIN_ICON_X,MAIN_ICON_Y)
-# MainMenu2_img_ai.set_src("U:/static/IMAGE_ONE_PAGE_AI.png")
-# MainMenu2_img_ai.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu2_img_ai.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# MainMenu2_img_ai_txt = lv.label(MainMenu2_ai)
-# MainMenu2_img_ai_txt.set_pos(int(0),int(MAIN_LABEL_Y))
-# MainMenu2_img_ai_txt.set_size(LCD_SIZE_W,LCD_SIZE_H-MAIN_LABEL_Y)
-# MainMenu2_img_ai_txt.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu2_img_ai_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu2_img_ai_txt.set_text("AI助手")
-# MainMenu2_img_ai_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
-# MainMenu2_num+=1
-# MainMenu2x+=1
+#AI助手
+MainMenu2_ai = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_ai)
+label_text.set_pos(0, LCD_SIZE_H)
+label_text.set_size(0, 0)
+label_text.set_text("{}".format(MainMenu2_num))
+MainMenu2_img_ai = lv.img(MainMenu2_ai)
+MainMenu2_img_ai.set_size(MAIN_ICON_SZIE,MAIN_ICON_SZIE)
+MainMenu2_img_ai.set_pos(MAIN_ICON_X,MAIN_ICON_Y)
+MainMenu2_img_ai.set_src("U:/static/IMAGE_ONE_PAGE_AI.png")
+MainMenu2_img_ai.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_ai.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_ai_txt = lv.label(MainMenu2_ai)
+MainMenu2_img_ai_txt.set_pos(int(0),int(MAIN_LABEL_Y))
+MainMenu2_img_ai_txt.set_size(LCD_SIZE_W,LCD_SIZE_H-MAIN_LABEL_Y)
+MainMenu2_img_ai_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_ai_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_ai_txt.set_text("AI助手")
+MainMenu2_img_ai_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+MainMenu2_num+=1
+MainMenu2x+=1
 
 #微聊
 MainMenu2_wechat = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
@@ -312,6 +312,8 @@ MainMenu2x+=1
 # MainMenu2_img_health_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
 # MainMenu2_num+=1
 # MainMenu2x+=1
+
+
 #血样检测
 # MainMenu2_spo2 = MainMenu2_til.add_tile(4, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
 # label_text = lv.label(MainMenu2_spo2)
@@ -580,27 +582,32 @@ MainMenu1_img_wechat.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STA
 # MainMenu1_img_health_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
 
 
-# MainMenu1_img_ai_text = lv.label(MainMenu1_three)
-# MainMenu1_img_ai_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5)
-# MainMenu1_img_ai_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
-# MainMenu1_img_ai_text.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu1_img_ai_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu1_img_ai_text.set_text(" ")
-# MainMenu1_img_ai_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
-
+MainMenu1_img_ai_text = lv.label(MainMenu1_three)
+MainMenu1_img_ai_text.set_pos(MAIN1_ICON_X*2,MAIN1_ICON_Y+5)
+MainMenu1_img_ai_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
+MainMenu1_img_ai_text.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu1_img_ai_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu1_img_ai_text.set_text(" ")
+MainMenu1_img_ai_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
 
 
 MainMenu1_img_wechat_text = lv.label(MainMenu1_three)
-MainMenu1_img_wechat_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5)
+MainMenu1_img_wechat_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5)
 MainMenu1_img_wechat_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
 MainMenu1_img_wechat_text.add_flag(lv.obj.FLAG.CLICKABLE)
 MainMenu1_img_wechat_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 MainMenu1_img_wechat_text.set_text(" ")
 MainMenu1_img_wechat_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
 
+# MainMenu1_img_alarm= lv.img(MainMenu1_three)
+# MainMenu1_img_alarm.set_size(THEME1_ICON_X,THEME1_ICON_Y)
+# MainMenu1_img_alarm.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5)
+# MainMenu1_img_alarm.set_src("U:/static/theme1/THEME1_ALARM.png")
+# MainMenu1_img_alarm.add_flag(lv.obj.FLAG.CLICKABLE)
+# MainMenu1_img_alarm.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 MainMenu1_img_alarm_text = lv.label(MainMenu1_three)
-MainMenu1_img_alarm_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5)
+MainMenu1_img_alarm_text.set_pos(MAIN1_ICON_X,140+5)
 MainMenu1_img_alarm_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
 MainMenu1_img_alarm_text.add_flag(lv.obj.FLAG.CLICKABLE)
 MainMenu1_img_alarm_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
@@ -608,22 +615,13 @@ MainMenu1_img_alarm_text.set_text(" ")
 MainMenu1_img_alarm_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
 
 MainMenu1_img_camera_text = lv.label(MainMenu1_three)
-MainMenu1_img_camera_text.set_pos(MAIN1_ICON_X,140+5)
+MainMenu1_img_camera_text.set_pos(MAIN1_ICON_X*2+85,140+5)
 MainMenu1_img_camera_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
 MainMenu1_img_camera_text.add_flag(lv.obj.FLAG.CLICKABLE)
 MainMenu1_img_camera_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 MainMenu1_img_camera_text.set_text(" ")
 MainMenu1_img_camera_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
 
-MainMenu1_img_picture_text = lv.label(MainMenu1_three)
-MainMenu1_img_picture_text.set_pos(int(MAIN1_ICON_X*2+85),int(140+5))
-MainMenu1_img_picture_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
-MainMenu1_img_picture_text.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu1_img_picture_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-MainMenu1_img_picture_text.set_text(" ")
-MainMenu1_img_picture_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-
 MainMenu1_num+=1
 MainMenu1x+=1
 #相机,相册,视频通话,支付宝
@@ -640,10 +638,24 @@ MainMenu1_img_toolbox.set_src("U:/static/theme1/THEME1_CAMERA.png")
 # MainMenu1_img_toolbox.add_flag(lv.obj.FLAG.CLICKABLE)
 MainMenu1_img_toolbox.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
 
+# MainMenu1_img_camera_text = lv.label(MainMenu1_four)
+# MainMenu1_img_camera_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5)
+# MainMenu1_img_camera_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
+# MainMenu1_img_camera_text.add_flag(lv.obj.FLAG.CLICKABLE)
+# MainMenu1_img_camera_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# MainMenu1_img_camera_text.set_text(" ")
+# MainMenu1_img_camera_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
 
+MainMenu1_img_picture_text = lv.label(MainMenu1_four)
+MainMenu1_img_picture_text.set_pos(int(MAIN1_ICON_X),int(MAIN1_ICON_Y+5))
+MainMenu1_img_picture_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
+MainMenu1_img_picture_text.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu1_img_picture_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu1_img_picture_text.set_text(" ")
+MainMenu1_img_picture_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
 
 MainMenu1_img_video_text = lv.label(MainMenu1_four)
-MainMenu1_img_video_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5)
+MainMenu1_img_video_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5)
 MainMenu1_img_video_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
 MainMenu1_img_video_text.add_flag(lv.obj.FLAG.CLICKABLE)
 MainMenu1_img_video_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
@@ -651,63 +663,21 @@ MainMenu1_img_video_text.set_text(" ")
 MainMenu1_img_video_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
 
 MainMenu1_img_alipay_text = lv.label(MainMenu1_four)
-MainMenu1_img_alipay_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5)
+MainMenu1_img_alipay_text.set_pos(MAIN1_ICON_X,140+5)
 MainMenu1_img_alipay_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
 MainMenu1_img_alipay_text.add_flag(lv.obj.FLAG.CLICKABLE)
 MainMenu1_img_alipay_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 MainMenu1_img_alipay_text.set_text(" ")
 MainMenu1_img_alipay_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
 
-# MainMenu1_img_camera_text = lv.label(MainMenu1_four)
-# MainMenu1_img_camera_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5)
-# MainMenu1_img_camera_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
-# MainMenu1_img_camera_text.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu1_img_camera_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu1_img_camera_text.set_text(" ")
-# MainMenu1_img_camera_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-# MainMenu1_img_picture_text = lv.label(MainMenu1_four)
-# MainMenu1_img_picture_text.set_pos(int(MAIN1_ICON_X*2+85),int(MAIN1_ICON_Y+5))
-# MainMenu1_img_picture_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
-# MainMenu1_img_picture_text.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu1_img_picture_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu1_img_picture_text.set_text(" ")
-# MainMenu1_img_picture_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
-
 MainMenu1_img_stopwatch_text = lv.label(MainMenu1_four)
-MainMenu1_img_stopwatch_text.set_pos(MAIN1_ICON_X,140+5)
+MainMenu1_img_stopwatch_text.set_pos(MAIN1_ICON_X*2+85,140+5)
 MainMenu1_img_stopwatch_text.set_size(THEME1_ICON_X,THEME1_ICON_Y)
 MainMenu1_img_stopwatch_text.add_flag(lv.obj.FLAG.CLICKABLE)
 MainMenu1_img_stopwatch_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 MainMenu1_img_stopwatch_text.set_text(" ")
 MainMenu1_img_stopwatch_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
 
-
-MainMenu1_img_countdown_text = lv.label(MainMenu1_four)
-MainMenu1_img_countdown_text.set_pos(MAIN1_ICON_X*2+85,140+5)
-MainMenu1_img_countdown_text.set_size(THEME1_ICON_X,THEME1_ICON_Y)
-MainMenu1_img_countdown_text.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu1_img_countdown_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-MainMenu1_img_countdown_text.set_text(" ")
-MainMenu1_img_countdown_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-# MainMenu1_img_video_text = lv.label(MainMenu1_four)
-# MainMenu1_img_video_text.set_pos(MAIN1_ICON_X,140+5)
-# MainMenu1_img_video_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
-# MainMenu1_img_video_text.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu1_img_video_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu1_img_video_text.set_text(" ")
-# MainMenu1_img_video_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-# MainMenu1_img_alipay_text = lv.label(MainMenu1_four)
-# MainMenu1_img_alipay_text.set_pos(MAIN1_ICON_X*2+85,140+5)
-# MainMenu1_img_alipay_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
-# MainMenu1_img_alipay_text.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu1_img_alipay_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu1_img_alipay_text.set_text(" ")
-# MainMenu1_img_alipay_text.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-
 MainMenu1_num+=1
 MainMenu1x+=1
 #工具箱 设置 
@@ -718,7 +688,7 @@ label_text.set_size(0, 0)
 label_text.set_text("{}".format(MainMenu1_num))
 
 MainMenu1_img_setting = lv.img(MainMenu1_setting)
-MainMenu1_img_setting.set_size(240,140)
+MainMenu1_img_setting.set_size(240,282)
 MainMenu1_img_setting.set_pos(0,0)
 MainMenu1_img_setting.set_src("U:/static/theme1/THEME1_SETING.png")
 # MainMenu1_img_setting.add_flag(lv.obj.FLAG.CLICKABLE)
@@ -733,16 +703,16 @@ MainMenu1_img_setting.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.ST
 # MainMenu1_img_stopwatch_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
 
 
-# MainMenu1_img_countdown_text = lv.label(MainMenu1_setting)
-# MainMenu1_img_countdown_text.set_pos(MAIN1_ICON_X*2+85,MAIN1_ICON_Y+5)
-# MainMenu1_img_countdown_text.set_size(THEME1_ICON_X,THEME1_ICON_Y)
-# MainMenu1_img_countdown_text.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu1_img_countdown_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu1_img_countdown_text.set_text(" ")
-# MainMenu1_img_countdown_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
+MainMenu1_img_countdown_text = lv.label(MainMenu1_setting)
+MainMenu1_img_countdown_text.set_pos(MAIN1_ICON_X,MAIN1_ICON_Y+5)
+MainMenu1_img_countdown_text.set_size(THEME1_ICON_X,THEME1_ICON_Y)
+MainMenu1_img_countdown_text.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu1_img_countdown_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu1_img_countdown_text.set_text(" ")
+MainMenu1_img_countdown_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
 
 MainMenu1_img_toolbox_text = lv.label(MainMenu1_setting)
-MainMenu1_img_toolbox_text.set_pos(int(MAIN1_ICON_X),int(MAIN1_ICON_Y+5))
+MainMenu1_img_toolbox_text.set_pos(int(MAIN1_ICON_X*2+85),int(MAIN1_ICON_Y+5))
 MainMenu1_img_toolbox_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
 MainMenu1_img_toolbox_text.add_flag(lv.obj.FLAG.CLICKABLE)
 MainMenu1_img_toolbox_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
@@ -750,7 +720,7 @@ MainMenu1_img_toolbox_text.set_text(" ")
 MainMenu1_img_toolbox_text.add_style(style_font_youyuan_20_black, lv.PART.MAIN|lv.STATE.DEFAULT)
 
 MainMenu1_img_setting_text = lv.label(MainMenu1_setting)
-MainMenu1_img_setting_text.set_pos(int(MAIN1_ICON_X*2+85),int(MAIN1_ICON_Y+5))
+MainMenu1_img_setting_text.set_pos(int(MAIN1_ICON_X),int(140+5))
 MainMenu1_img_setting_text.set_size(THEME1_ICON_X,THEME1_ICON_X)
 MainMenu1_img_setting_text.add_flag(lv.obj.FLAG.CLICKABLE)
 MainMenu1_img_setting_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
@@ -791,6 +761,7 @@ class MainMenuScreen(Screen):
         ###1
         MainMenu1_til.add_event_cb(lambda e: EventMesh.callback_wrapper(self.scroll_begin_event_cb(e)),lv.EVENT.SCROLL_END,None)
 
+
         MainMenu1_img_contacts_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "contacts")), lv.EVENT.SHORT_CLICKED, None)
         MainMenu1_img_contacts_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "contacts")), lv.EVENT.PRESSING, None)
 
@@ -804,6 +775,12 @@ class MainMenuScreen(Screen):
         MainMenu1_img_phone_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "Phone")), lv.EVENT.PRESSING, None)
 
 
+        # MainMenu1_img_health_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "health")), lv.EVENT.SHORT_CLICKED, None)
+        # MainMenu1_img_health_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "health")), lv.EVENT.PRESSING, None)
+
+        MainMenu1_img_ai_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.SHORT_CLICKED, None)
+        MainMenu1_img_ai_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.PRESSING, None)
+
 
         MainMenu1_img_wechat_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.SHORT_CLICKED, None)
         MainMenu1_img_wechat_text.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.PRESSING, None)
@@ -840,12 +817,12 @@ class MainMenuScreen(Screen):
         print("MainMenu1:__init__")    
         MainMenu2_til.add_event_cb(lambda e: EventMesh.callback_wrapper(self.scroll_begin_event_cb(e)),lv.EVENT.SCROLL_END,None)
         #lv_obj_add_event_cb(lv_tabview_get_content(tabview), scroll_begin_event, LV_EVENT_SCROLL_END, NULL);
-        MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "Phone")), lv.EVENT.SHORT_CLICKED, None)
+        MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "aigc_mainlist")), lv.EVENT.SHORT_CLICKED, None)
         MainMenu2_img_toolbox.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "toolbox")), lv.EVENT.SHORT_CLICKED, None)
         MainMenu2_img_setting.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "setting")), lv.EVENT.SHORT_CLICKED, None)
         # MainMenu2_img_health.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "health")), lv.EVENT.SHORT_CLICKED, None)
         MainMenu2_img_contacts.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "contacts")), lv.EVENT.SHORT_CLICKED, None)
-        # MainMenu2_img_ai.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.SHORT_CLICKED, None)
+        MainMenu2_img_ai.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "AI_success")), lv.EVENT.SHORT_CLICKED, None)
 
         MainMenu2_img_wechat.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.SHORT_CLICKED, None)
         # MainMenu2_img_spo2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "spo2")), lv.EVENT.SHORT_CLICKED, None)
@@ -856,12 +833,12 @@ class MainMenuScreen(Screen):
         MainMenu2_img_camera.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera")), lv.EVENT.SHORT_CLICKED, None)
         MainMenu2_img_camera_album.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_album")), lv.EVENT.SHORT_CLICKED, None)
 
-        MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "Phone")), lv.EVENT.PRESSING, None)
+        MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "aigc_mainlist")), lv.EVENT.PRESSING, None)
         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_health.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "health")), 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_ai.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "AI_success")), lv.EVENT.PRESSING, None)
+        MainMenu2_img_ai.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "AI_success")), 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)
         MainMenu2_img_sms.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "popup")), lv.EVENT.PRESSING, None)
index a12ac93..4bbe185 100644 (file)
Binary files a/2.sdk/project/W8/usr/static/IMAGE_ONE_PAGE_AI.png and b/2.sdk/project/W8/usr/static/IMAGE_ONE_PAGE_AI.png differ
index bce60a9..b175b0f 100644 (file)
Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png and b/2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png differ
index 82a1ee4..2464976 100644 (file)
Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png and b/2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png differ
index d2e01bc..2ab9e3e 100644 (file)
Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png and b/2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png differ