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()
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('!')]
# 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)
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)
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)
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()
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 = ""
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)
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()
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:#说话完成 已有录音文字返回
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:
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):#连接超时弹窗提示
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()
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) #隐藏
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 = ''
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)
#按下录音
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()#关闭录音
#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")#防止黑屏
#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")
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)
##############################################################################
#文字转语音链路
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:
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
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:#没找到句号或者逗号,切割字符串
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()
"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)
}
}
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()}}
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
# 死循环接收数据
recv_data = cli.recv()
+
if not recv_data:
# 服务器关闭连接或客户端关闭连接
print("AI_client_tts_recv close!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n")
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()#断开
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
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")
#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):
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"])
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()
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:
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)
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()
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"})
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)
# 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)
# 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)
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
#相机,相册,视频通话,支付宝
# 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)
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
#工具箱 设置
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)
# 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)
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)
###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)
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)
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)
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)