整理文件结构,删除无用的代码
authorsnickersun <snickersun@163.com>
Tue, 19 May 2026 01:45:39 +0000 (09:45 +0800)
committersnickersun <snickersun@163.com>
Tue, 19 May 2026 01:45:39 +0000 (09:45 +0800)
19 files changed:
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC_coze.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/btn_device_ec800m_d15.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/led.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/led_d15.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/main_1.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/mgr.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/mgr_d15.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/test/TTS音频生成.py [moved from 2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/TTS音频生成.py with 100% similarity]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/test/pcm_stream_play_test.py [moved from 2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/pcm_stream_play_test.py with 100% similarity]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/test/sleep_test.py [moved from 2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/sleep_test.py with 100% similarity]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/test/tesr.mp3 [moved from 2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/tesr.mp3 with 100% similarity]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/test/tts_tesr.mp3 [moved from 2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/tts_tesr.mp3 with 100% similarity]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/test/tts_tesr_01.wav [moved from 2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/tts_tesr_01.wav with 100% similarity]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/tiktok_rtc_demo.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/R_READ_TIME_AB.mp3 [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/ai_test.py [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/test.mp3 [deleted file]
2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/test1.py [deleted file]

diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC_coze.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/ai_VC_coze.py
deleted file mode 100644 (file)
index a209000..0000000
+++ /dev/null
@@ -1,3630 +0,0 @@
-from common import Abstract, LogAdapter\r
-import EventMesh\r
-import uwebsocket\r
-import usys\r
-import gc\r
-import urandom\r
-import uhashlib\r
-import ubinascii\r
-import ujson\r
-import osTimer\r
-import _thread\r
-from queue import Queue\r
-import utime\r
-import audio\r
-import uos\r
-from machine import Pin\r
-from machine import ExtInt\r
-from machine import WDT\r
-import modem\r
-import sim\r
-import net\r
-import base64\r
-import ucryptolib\r
-import urandom as random\r
-import request\r
-import ql_fs\r
-from misc import Power,USB,PowerKey\r
-import ntptime\r
-import machine\r
-import dataCall\r
-import constants\r
-import versions\r
-\r
-dev_type = "G10"\r
-#dev_type = "7PIN_BK"#小瑞\r
-#dev_type = "7PIN"#柒牌\r
-#dev_type = 'momo'#食梦貘\r
-#dev_type = 'sjgq'#四季甘泉\r
-class AI_led(Abstract):\r
-    def __init__(self):\r
-        if dev_type == "G10":\r
-            self.led_red = Pin(Pin.GPIO36, Pin.OUT, Pin.PULL_PD, 0)\r
-            self.led_green = Pin(Pin.GPIO44, Pin.OUT, Pin.PULL_PD, 1)\r
-            self.led_blue = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_PD, 1)\r
-        else:\r
-            self.led_red = Pin(Pin.GPIO36, Pin.OUT, Pin.PULL_PD, 0)\r
-            self.led_green = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_PD, 1)\r
-            self.led_blue = Pin(Pin.GPIO19, Pin.OUT, Pin.PULL_PD, 1)\r
-\r
-        #=1 红灯闪,=2白灯闪,=3绿灯闪,=4全部灯闪\r
-        self.led_flicker_flag = 0\r
-        self.led_flicker_on_off_flag = 0\r
-        self.led_flicker_timer = osTimer()\r
-        \r
-        EventMesh.subscribe("open_led_red",self.open_led_red)\r
-        EventMesh.subscribe("open_led_blue",self.open_led_blue)\r
-        EventMesh.subscribe("open_led_green",self.open_led_green)\r
-        EventMesh.subscribe("open_led_all",self.open_led_all)\r
-        EventMesh.subscribe("open_led_red_blue",self.open_led_red_blue)\r
-        EventMesh.subscribe("open_led_red_green",self.open_led_red_green)\r
-        EventMesh.subscribe("flicker_led_red",self.flicker_led_red)\r
-        EventMesh.subscribe("flicker_led_blue",self.flicker_led_blue)\r
-        EventMesh.subscribe("flicker_led_green",self.flicker_led_green)\r
-        EventMesh.subscribe("flicker_led_all",self.flicker_led_all)\r
-        EventMesh.subscribe("close_led",self.close_led)\r
-        EventMesh.publish("open_led_red")\r
-\r
-    def flicker_led_red(self,event,msg):\r
-        self.led_flicker_flag = 1\r
-        self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)\r
-\r
-    def flicker_led_blue(self,event,msg):\r
-        self.led_flicker_flag = 2\r
-        self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)\r
-\r
-    def flicker_led_green(self,event,msg):\r
-        self.led_flicker_flag = 3\r
-        self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)\r
-\r
-    def flicker_led_all(self,event,msg):\r
-        self.led_flicker_flag = 4\r
-        self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)\r
-\r
-    def led_flicker_timer_cb(self, *args, **kwargs):\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.led_flicker_timer_cb_})  \r
-    def led_flicker_timer_cb_(self):\r
-        if self.led_flicker_flag == 0:\r
-            self.led_flicker_timer.stop()\r
-            return\r
-        if self.led_flicker_on_off_flag == 0:\r
-            self.led_red.write(0)\r
-            self.led_blue.write(0)\r
-            self.led_green.write(0)\r
-            self.led_flicker_on_off_flag = 1\r
-        else:\r
-            self.led_flicker_on_off_flag = 0\r
-            if self.led_flicker_flag == 1:\r
-                self.led_blue.write(0)\r
-                self.led_green.write(0)\r
-                self.led_red.write(1)\r
-            elif self.led_flicker_flag == 2:\r
-                self.led_red.write(0)\r
-                self.led_green.write(0)\r
-                self.led_blue.write(1)\r
-            elif self.led_flicker_flag == 3:\r
-                self.led_red.write(0)\r
-                self.led_blue.write(0)\r
-                self.led_green.write(1)\r
-            elif self.led_flicker_flag == 4:\r
-                self.led_blue.write(1)\r
-                self.led_green.write(1)\r
-                self.led_red.write(1)\r
-\r
-    def open_led_red(self,event,msg):\r
-        #print("open_led_red")\r
-        self.led_flicker_flag = 0\r
-        #self.led_red.write(0)\r
-        self.led_blue.write(0)\r
-        self.led_green.write(0)\r
-        self.led_red.write(1)\r
-\r
-    def open_led_blue(self,event,msg):\r
-        #print("open_led_blue")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(0)\r
-        #self.led_blue.write(0)\r
-        self.led_green.write(0)\r
-        self.led_blue.write(1)\r
-\r
-    def open_led_green(self,event,msg):\r
-        #print("open_led_green")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(0)\r
-        self.led_blue.write(0)\r
-        #self.led_green.write(0)\r
-        self.led_green.write(1)\r
-\r
-    def open_led_red_blue(self,event,msg):\r
-        #print("open_led_blue")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(1)\r
-        #self.led_blue.write(0)\r
-        self.led_green.write(0)\r
-        self.led_blue.write(1)\r
-\r
-    def open_led_red_green(self,event,msg):\r
-        #print("open_led_blue")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(1)\r
-        #self.led_blue.write(0)\r
-        self.led_green.write(1)\r
-        self.led_blue.write(0)\r
-\r
-    def open_led_all(self,event,msg):\r
-        #print("open_led_all")\r
-        self.led_flicker_flag = 0\r
-        #self.led_red.write(0)\r
-        self.led_blue.write(1)\r
-        self.led_green.write(1)\r
-        self.led_red.write(1)\r
-\r
-    def close_led(self,event,msg):\r
-        #print("close_led")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(0)\r
-        self.led_blue.write(0)\r
-        self.led_green.write(0)\r
-\r
-audio_buf = ['chenggong', 'didianguanji', 'IMEIhao', 'jianquancuowu', 'key_prompt', 'liuliangtishi', 'Low_power_warning', 'R_CHARGE_FULL', 'R_CHARGE_IN', 'R_CHARGE_OUT', 'R_READ_TIME_0', 'R_READ_TIME_1', 'R_READ_TIME_2', 'R_READ_TIME_3', 'R_READ_TIME_4', 'R_READ_TIME_5', 'R_READ_TIME_6', 'R_READ_TIME_7', 'R_READ_TIME_8', 'R_READ_TIME_9', 'R_READ_TIME_A', 'R_READ_TIME_B', 'R_READ_TIME_C', 'R_READ_TIME_D', 'R_READ_TIME_E', 'R_READ_TIME_F', 'R_READ_TIME_G', 'R_READ_TIME_H', 'R_READ_TIME_I', 'R_READ_TIME_J', 'R_READ_TIME_K', 'R_READ_TIME_L', 'R_READ_TIME_M', 'R_READ_TIME_N', 'R_READ_TIME_O', 'R_READ_TIME_P', 'R_READ_TIME_Q', 'R_READ_TIME_R', 'R_READ_TIME_S', 'R_READ_TIME_T', 'R_READ_TIME_U', 'R_READ_TIME_V', 'R_READ_TIME_W', 'R_READ_TIME_X', 'R_READ_TIME_Y', 'R_READ_TIME_Z', 'send_tone', 'shouhou', 'xinhaoruo1', 'zhengzaiguanji']\r
-class AI_dev(Abstract):\r
-    # AI\r
-    def __init__(self):\r
-        self.is_wdt = 0 #是否开启看门狗\r
-\r
-        self.VBATT_tab = {"charge_full":4300,"100" :4250 ,  "90":4179 , "80":4070, "60": 3883, "40":3770, "20":3699,  "10":3652,"5":3600,}\r
-        self.KeyAI_status = 0\r
-        self.KeyAI_timer_count = 0\r
-        self.KeyAI_long_press = 0\r
-        self.KeyAI_press = 0\r
-        if self.is_wdt == 1:\r
-            self.wdt = WDT(30) #开启看门狗\r
-        # self.wdt_timer = osTimer()\r
-        # self.wdt_timer.start(5000, 1, self.wdt_timer_cb)\r
-        count = 0\r
-        while True:\r
-            count += 1\r
-            if count > 20 :\r
-                break\r
-            data = dataCall.getInfo(1, 0)\r
-            print("data call INFO {}".format(data))\r
-            if data[2][0]:\r
-                self.network_state = 1\r
-                break\r
-            print("等待网络 {}...".format(count))\r
-            utime.sleep_ms(500)\r
-        self.KeyAI_timer = osTimer()\r
-        if dev_type == "G10":\r
-            self.extint_AI = ExtInt(ExtInt.GPIO19,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.keyAI_extint_cb)\r
-            self.pwk_key = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.pwk_extint_cb)\r
-        else:\r
-            self.pwk_key = ExtInt(ExtInt.GPIO41, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.pwk_extint_cb)\r
-            #self.extint_AI = ExtInt(ExtInt.GPIO19,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.keyAI_extint_cb)\r
-            self.extint_AI = ExtInt(ExtInt.GPIO22,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.keyAI_extint_cb)\r
-        self.extint_AI.enable()\r
-        self.pwk_key_status = 0\r
-        self.pwk_key_timer_count = 0\r
-        self.pwk_key_long_press = 0\r
-        self.pwk_key_press = 0\r
-        self.pwk_key_timer = osTimer()\r
-        #self.pwk_key = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, self.pwk_extint_cb)\r
-        \r
-        self.pwk_key.enable() \r
-        print("AI_dev:1")\r
-        self.btnInfo_queue = Queue(100)\r
-        self.btnInfo_queue_count = 0\r
-        _thread.stack_size(16*1024)\r
-        self.btnInfo_queue_thread_id = _thread.start_new_thread(self.btnInfo_queue_thread, ())\r
-        _thread.stack_size(8*1024)\r
-        EventMesh.subscribe("publish_AI_btnInfo",self.publish_AI_btnInfo)\r
-        EventMesh.subscribe("get_battery",self.get_battery)\r
-        EventMesh.subscribe("audio_montage_play",self.audio_montage_play)\r
-        EventMesh.subscribe("paly_iccid_imei",self.paly_iccid_imei)\r
-        EventMesh.subscribe("paly_device_res_error",self.paly_device_res_error)\r
-        print("AI_dev:2")\r
-        self.pk = PowerKey()\r
-        self.pk.powerKeyEventRegister(self.powerKey_callback)\r
-        self.usb = USB()\r
-        self.usb.setCallback(self.usb_event_cb)\r
-        self.usb_status = self.usb.getStatus()\r
-        self.usb_charge_flag = 0 \r
-        self.Low_power_warning_timer = 0\r
-        self.AI_dev_timer = osTimer()\r
-        self.AI_dev_timer.start(10000, 1, self.AI_dev_timer_cb)\r
-        print("AI_dev:AI_dev_timer")\r
-        self.aud = audio.Audio(0)\r
-        self.Low_power_warning_flag = 0\r
-        self.VC_TTS_volume =  EventMesh.publish("get_storage_config","VC_TTS_volume")#音量配置\r
-        if self.VC_TTS_volume == None:\r
-            self.VC_TTS_volume = 100\r
-        self.aud.setVolume(self.VC_TTS_volume //10)\r
-        #self.aud.play(1,0,'U:/static/xianyikaiji.mp3')#开机音频\r
-        #EventMesh.publish("audio_montage_play",["xianyikaiji.mp3"])\r
-        #EventMesh.publish("publish_AI_btnInfo",{"func":self.ntptime_cb})\r
-        self.check_rest_timer_count = 0\r
-        print("AI_dev:end")\r
-    def ntptime_cb(self):\r
-        #ntptime.settime(8)\r
-        print("timer:{}!!!!!!!!\r\n".format(utime.localtime()))\r
-    def usb_event_cb(self, state):\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.usb_event,"data":state})\r
-\r
-    def usb_event(self, state):    \r
-        status = state\r
-        self.usb_charge_flag = 0\r
-        if status == 1:#插入USB\r
-            print("charge R_CHARGE_in")\r
-            self.usb_status = 1\r
-            VC_satrt_flag = EventMesh.publish("get_VC_satrt_flag")#获取vc是否在运行\r
-            if VC_satrt_flag == None:\r
-                VC_satrt_flag = 0\r
-            if VC_satrt_flag == 0:\r
-                self.aud.stop()\r
-                #EventMesh.publish("flicker_led_red")#充电闪灯\r
-                #self.aud.play(1,1,'U:/static/R_CHARGE_IN.mp3')\r
-                EventMesh.publish("open_led_red")#充电红灯常亮\r
-                EventMesh.publish("audio_montage_play",["R_CHARGE_IN.mp3"])\r
-            self.Low_power_warning_flag  = 0\r
-            pass\r
-        elif status == 0:#拨出usbs\r
-            self.usb_status = 0\r
-            VC_satrt_flag = EventMesh.publish("get_VC_satrt_flag")#获取vc是否在运行\r
-            if VC_satrt_flag == None:\r
-                VC_satrt_flag = 0\r
-            if VC_satrt_flag == 0:\r
-                self.aud.stop()\r
-                EventMesh.publish("close_led")\r
-                EventMesh.publish("audio_montage_play",["R_CHARGE_OUT.mp3"])\r
-                #self.aud.play(1,1,'U:/static/R_CHARGE_OUT.mp3')\r
-    def btnInfo_queue_thread(self):\r
-        while True:\r
-            data = self.btnInfo_queue.get()\r
-            self.btnInfo_queue_count-=1\r
-            #EventMesh.debug_log("Info_queue:data = {}".format(data))\r
-            if data != None:\r
-                try:\r
-                    if "data" in data :\r
-                        data["func"](data["data"])\r
-                    else :\r
-                        data["func"]()\r
-                except Exception as e:\r
-                    #EventMesh.debug_log("btnInfo_queue:ERROR:{}".format(e))\r
-                    usys.print_exception(e)\r
-    def publish_AI_btnInfo(self,event,msg):\r
-        #print("publish_AI_btnInfo 1")\r
-        self.btnInfo_queue.put(msg)\r
-        self.btnInfo_queue_count+=1\r
-        if self.btnInfo_queue_count > 80:\r
-            self.btnInfo_queue_count =0\r
-            print("事件处理线程队列出问题,重启!!!!!!!!!!!!!!")\r
-            print("线程:{} 队列:{}".format(_thread.threadIsRunning(self.btnInfo_queue_thread_id),self.btnInfo_queue.size()))\r
-            # if _thread.threadIsRunning(self.btnInfo_queue_thread_id):\r
-            #     _thread.stop_thread(self.btnInfo_queue_thread_id)\r
-            # _thread.stack_size(10*1024)\r
-            # self.btnInfo_queue_thread_id = _thread.start_new_thread(self.btnInfo_queue_thread, ())\r
-            # _thread.stack_size(8*1024)\r
-            # self.btnInfo_queue.clear()\r
-            # self.btnInfo_queue = Queue(100)\r
-            EventMesh.publish("VC_error") #播放报错\r
-            utime.sleep_ms(1000)\r
-            self.aud.stopPlayStream()\r
-            self.aud.stopAll()\r
-            Power.powerRestart()\r
-            EventMesh.publish("set_storage_config",["powerRestart",1])\r
-        #print("publish_AI_btnInfo 2")\r
-    def powerKey_callback(self, status):\r
-        print("powerKey_callback:{}".format(status))\r
-\r
-    def pwk_extint_cb(self,args):#pwk\r
-        try:\r
-            self.pwk_key_status = int(args[1])\r
-            if self.pwk_key_status == 0:\r
-                self.pwk_key_status = 1\r
-            else:\r
-                self.pwk_key_status = 0\r
-                pass\r
-            if self.pwk_key_status == 0:#按下\r
-                \r
-                if self.pwk_key_press == 0 :\r
-                    self.pwk_key.disable()\r
-                    self.pwk_key_press = 1\r
-                    self.pwk_key_long_press = 0\r
-                    self.pwk_key_timer.start(100, 1, self.pwk_key_timer_cb)\r
-                    self.pwk_key_timer_count = 0\r
-                    #EventMesh.publish("AI_key_press")\r
-        except Exception as e: \r
-            usys.print_exception(e)\r
-    def pwk_key_timer_cb(self, *args, **kwargs):\r
-    #     EventMesh.publish("publish_AI_btnInfo",{"func":self.pwk_key_timer_cb_})\r
-    # def pwk_key_timer_cb_(self) :\r
-        try:\r
-            self.pwk_key_status = self.pwk_key.read_level()\r
-            self.pwk_key_timer_count +=1\r
-            if self.pwk_key_timer_count >= 10*3: #长按3s \r
-                #print("pwk_key_long_press {}".format(self.pwk_key_long_press))\r
-                if self.pwk_key_long_press == 0:\r
-                        self.pwk_key_long_press = 1\r
-                        #EventMesh.publish("AI_key_long_press")\r
-                        EventMesh.publish("audio_montage_play",["zhengzaiguanji.mp3"])\r
-                        #self.aud.play(1,0,'U:/static/zhengzaiguanji.mp3')#关机音频\r
-                        EventMesh.publish("open_led_red")\r
-                        utime.sleep_ms(2000)\r
-                        self.aud.stopPlayStream()\r
-                        self.aud.stopAll()\r
-                        Power.powerDown()\r
-                        #print("AI_key_release")\r
-                        EventMesh.publish("pwk_key_long_press")\r
-                        #EventMesh.publish("publish_AI_btnInfo",{"func":self.pwk_key_Long_Press})  \r
-            if self.pwk_key_status == 1:#松开\r
-                #print("pwk_key_timer_cb:{}".format(self.pwk_key_timer_count))\r
-                key_count = 5\r
-                if dev_type == "7PIN_BK":\r
-                    key_count = 3\r
-                if self.pwk_key_timer_count >= key_count: #防抖200ms\r
-                    #EventMesh.publish("AI_key_release")\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.pwk_key_release})\r
-                    self.pwk_key.enable()\r
-                    self.pwk_key_timer.stop()\r
-                    self.pwk_key_timer_count = 0\r
-                    self.pwk_key_press = 0\r
-            \r
-        except Exception as e: \r
-            usys.print_exception(e) \r
-            \r
-    def keyAI_extint_cb(self,args):#call 2\r
-        try:\r
-            #print("AI_btn:keyAI_extint_cb{}".format(args[1]))\r
-            self.KeyAI_status = int(args[1])\r
-            if self.KeyAI_status == 0:\r
-                self.KeyAI_status = 1\r
-            else:\r
-                self.KeyAI_status = 0\r
-            \r
-            if self.KeyAI_status == 0:#按下\r
-                if self.KeyAI_press == 0 :\r
-                    EventMesh.publish(constants.EVENT.SYSTEM_UP)#唤醒休眠\r
-                    self.extint_AI.disable()\r
-                    self.KeyAI_press = 1\r
-                    self.KeyAI_long_press = 0\r
-                    self.KeyAI_timer.start(100, 1, self.KeyAI_timer_cb)\r
-                    self.KeyAI_timer_count = 0\r
-                    #EventMesh.publish("AI_key_press")\r
-                    if dev_type == "7PIN" :\r
-                        self.aud.aud_tone_play(10,200)#播放按键音\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_key_press})  \r
-        except Exception as e: \r
-            usys.print_exception(e)\r
-    def KeyAI_timer_cb(self, *args, **kwargs):\r
-    #     EventMesh.publish("publish_AI_btnInfo",{"func":self.KeyAI_timer_cb_})\r
-    # def KeyAI_timer_cb_(self):\r
-        try:\r
-            self.KeyAI_status = self.extint_AI.read_level()\r
-            self.KeyAI_timer_count +=1\r
-            if self.KeyAI_timer_count >= 10*1: #长按3s \r
-                if self.KeyAI_long_press == 0:\r
-                        self.KeyAI_long_press = 1\r
-                        #EventMesh.publish("AI_key_long_press")\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_key_long_press})  \r
-            if self.KeyAI_status == 1:#松开\r
-                #print("KeyAI_timer_cb:{}".format(self.KeyAI_timer_count))\r
-                key_count = 5\r
-                if dev_type == "7PIN_BK":\r
-                    key_count = 3\r
-                if self.KeyAI_timer_count >= key_count: #防抖200ms\r
-                    #EventMesh.publish("AI_key_release")\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_key_release})  \r
-                    self.extint_AI.enable()\r
-                    self.KeyAI_timer.stop()\r
-                    self.KeyAI_timer_count = 0\r
-                    self.KeyAI_press = 0\r
-            \r
-        except Exception as e: \r
-            usys.print_exception(e) \r
-       \r
-    def AI_key_press(self):\r
-        self.check_rest_timer_count = 0\r
-        print("AI_key_press")\r
-        EventMesh.publish("AI_key_press")\r
-\r
-    def AI_key_long_press(self):\r
-        self.check_rest_timer_count = 0\r
-        print("AI_key_long_press")\r
-        EventMesh.publish("AI_key_long_press")\r
-        \r
-    def AI_key_release(self):\r
-        print("AI_key_release")\r
-        EventMesh.publish("AI_key_release")\r
-        \r
-    def pwk_key_Long_Press(self):\r
-        self.check_rest_timer_count = 0\r
-        print("pwk_key_long_press!!!!!!!")\r
-        print("pwk_key_long_press!!!!!!!")\r
-        \r
-        # EventMesh.publish("paly_iccid_imei")\r
-        # return\r
-        EventMesh.publish("audio_montage_play",["zhengzaiguanji.mp3"])\r
-        #self.aud.play(1,0,'U:/static/zhengzaiguanji.mp3')#关机音频\r
-        EventMesh.publish("open_led_red")\r
-        utime.sleep_ms(3000)\r
-        self.aud.stopPlayStream()\r
-        self.aud.stopAll()\r
-        Power.powerDown()\r
-        #print("AI_key_release")\r
-        EventMesh.publish("pwk_key_long_press")\r
-        \r
-    def pwk_key_release(self):\r
-        self.check_rest_timer_count = 0\r
-        #print("pwk_key_release")\r
-        EventMesh.publish("pwk_key_release")\r
-\r
-    \r
-    def wdt_timer_cb(self, *args, **kwargs):\r
-        if self.is_wdt == 1:\r
-            self.wdt.feed()\r
-\r
-    def AI_dev_timer_cb(self, *args, **kwargs):\r
-        #print("AI_dev_timer_cb")\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_dev_timer_event})  \r
-    def AI_dev_timer_event(self):\r
-        if self.is_wdt == 1:\r
-            self.wdt.feed()\r
-        VC_satrt_flag = EventMesh.publish("get_VC_satrt_flag")#获取vc是否在运行\r
-        if VC_satrt_flag == None:\r
-            VC_satrt_flag = 0\r
-        Vbatt = Power.getVbatt()\r
-        if self.usb_status == 1 and VC_satrt_flag == 0:\r
-            EventMesh.publish("open_led_red")#充电红灯常亮\r
-        if  self.usb_status == 1 and Vbatt>=self.VBATT_tab["charge_full"]and VC_satrt_flag == 0:#充电充满\r
-            EventMesh.publish("open_led_green")\r
-            if self.usb_charge_flag == 0 :\r
-                EventMesh.publish("audio_montage_play",["R_CHARGE_FULL.mp3"])\r
-                #self.aud.play(1,0,'U:/static/R_CHARGE_FULL.mp3')#充电已满\r
-                self.usb_charge_flag = 1\r
-        if  self.usb_status == 0 and Vbatt<self.VBATT_tab["20"]and VC_satrt_flag == 0 and self.Low_power_warning_flag ==0:#低电报警\r
-            self.Low_power_warning_flag  = 1\r
-            EventMesh.publish("flicker_led_red")\r
-            #self.aud.play(1,0,'Low_power_warning.mp3')\r
-            # self.Low_power_warning_timer+=1\r
-            # if self.Low_power_warning_timer >= 2:\r
-            #     self.Low_power_warning_timer = 0\r
-            EventMesh.publish("audio_montage_play",["Low_power_warning.mp3"])\r
-\r
-        if  self.usb_status == 0 and Vbatt<self.VBATT_tab["5"]:    \r
-            EventMesh.publish("audio_montage_play",["didianguanji.mp3"])\r
-            utime.sleep_ms(4500)\r
-            self.aud.stopPlayStream()\r
-            self.aud.stopAll()\r
-            Power.powerDown()\r
-\r
-        self.check_rest_timer_count += 1\r
-        if self.check_rest_timer_count >= 8640:#24小时没按键,则关机\r
-            self.pwk_key_Long_Press()\r
-        \r
-    def get_battery(self, event=None, msg=None):\r
-        Vbatt = Power.getVbatt()\r
-        if Vbatt>self.VBATT_tab["90"]:\r
-            return 100\r
-        if Vbatt>self.VBATT_tab["80"]:\r
-            return 90\r
-        if Vbatt>self.VBATT_tab["60"]:\r
-            return 80\r
-        if Vbatt>self.VBATT_tab["40"]:\r
-            return 60\r
-        if Vbatt>self.VBATT_tab["20"]:\r
-            return 40\r
-        if Vbatt>self.VBATT_tab["10"]:\r
-            return 20\r
-        if Vbatt<=self.VBATT_tab["10"]:\r
-            return 10\r
-    def audio_montage_play(self,event,msg):\r
-        self.aud.stopPlayStream()\r
-        self.aud.stopAll()\r
-        str_data='mp3files='\r
-        for i in msg:\r
-            try:\r
-                str_tmp = i.replace(".mp3","")\r
-                str_data+="{}.mp3+".format(audio_buf.index(str_tmp))\r
-            except Exception as e:\r
-                    usys.print_exception(e)    \r
-        str_data = str_data[:-1]\r
-        print("audio_montage_play:{}".format(str_data))\r
-        self.aud.montage_play('U:/static/audio.bin',1,1,str_data)\r
-        \r
-    def paly_iccid_imei(self,event,msg):\r
-        str_data = 'mp3files={}.mp3+'.format(audio_buf.index("liuliangtishi"))#流量提示\r
-        imei  = modem.getDevImei()\r
-        iccid = sim.getIccid()\r
-        print("paly_iccid_imei:ICCID:{}".format(iccid))\r
-        if iccid != -1 and len(iccid) > 5:\r
-            iccid = iccid.upper()\r
-            if len(iccid) <20:\r
-                for i in range(20-len(iccid)):\r
-                    iccid = "0"+iccid\r
-            str_data += '{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+'.format(audio_buf.index("R_READ_TIME_{}".format(iccid[0]))\\r
-                ,audio_buf.index("R_READ_TIME_{}".format(iccid[1])),audio_buf.index("R_READ_TIME_{}".format(iccid[2])),audio_buf.index("R_READ_TIME_{}".format(iccid[3])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(iccid[4])),audio_buf.index("R_READ_TIME_{}".format(iccid[5])),audio_buf.index("R_READ_TIME_{}".format(iccid[6])),audio_buf.index("R_READ_TIME_{}".format(iccid[7])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(iccid[8])),audio_buf.index("R_READ_TIME_{}".format(iccid[9])),audio_buf.index("R_READ_TIME_{}".format(iccid[10])),audio_buf.index("R_READ_TIME_{}".format(iccid[11])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(iccid[12])),audio_buf.index("R_READ_TIME_{}".format(iccid[13])),audio_buf.index("R_READ_TIME_{}".format(iccid[14])),audio_buf.index("R_READ_TIME_{}".format(iccid[15])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(iccid[16])),audio_buf.index("R_READ_TIME_{}".format(iccid[17])),audio_buf.index("R_READ_TIME_{}".format(iccid[18])),audio_buf.index("R_READ_TIME_{}".format(iccid[19])))\r
-        str_data += '{}.mp3+'.format(audio_buf.index("shouhou"))#可联系售后解决,联系方式见售后客服电话是400-886-8777或到微信公众号柒牌SEVENBRAND自行充值:\r
-        self.aud.montage_play('U:/static/audio.bin',1,1,str_data)\r
-    #鉴权出错,播放imei号\r
-    def paly_device_res_error(self,event,msg):\r
-        str_data = 'mp3files={}.mp3+'.format(audio_buf.index("jianquancuowu"))#AI功能异常,请联系客户查询,设备号为:\r
-        imei  = modem.getDevImei()\r
-        imei = imei.upper()\r
-        str_data += '{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(imei[0]))\\r
-                ,audio_buf.index("R_READ_TIME_{}".format(imei[1])),audio_buf.index("R_READ_TIME_{}".format(imei[2])),audio_buf.index("R_READ_TIME_{}".format(imei[3])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[4])),audio_buf.index("R_READ_TIME_{}".format(imei[5])),audio_buf.index("R_READ_TIME_{}".format(imei[6])),audio_buf.index("R_READ_TIME_{}".format(imei[7])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[8])),audio_buf.index("R_READ_TIME_{}".format(imei[9])),audio_buf.index("R_READ_TIME_{}".format(imei[10])),audio_buf.index("R_READ_TIME_{}".format(imei[11])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[12])),audio_buf.index("R_READ_TIME_{}".format(imei[13])),audio_buf.index("R_READ_TIME_{}".format(imei[14])))\r
-        #print("str_data:{}".format(str_data))\r
-        self.aud.montage_play('U:/static/audio.bin',1,1,str_data)\r
-\r
-#存储信息\r
-class getStorageDataManager(Abstract):#获取内存数据\r
-        def __init__(self):\r
-            self.config_data = {}\r
-            check = ql_fs.path_exists("/usr/static/storage_file/config.json")\r
-            if check == True:\r
-                with open("/usr/static/storage_file/config.json","r") as fd:\r
-                    self.config_data = ujson.load(fd)\r
-            else :\r
-                self.config_data = {'old_time': 0, 'flip_sw': 0}\r
-                pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_storage_data", self.set_storage_data)\r
-            EventMesh.subscribe("set_storage_config", self.set_storage_config)\r
-            EventMesh.subscribe("get_storage_data", self.get_storage_data)\r
-            EventMesh.subscribe("get_storage_config", self.get_storage_config)\r
-\r
-        def set_storage_data(self, event, msg): \r
-            # EventMesh.debug_log("set_storage_data:{}".format(msg))\r
-            if msg != None:\r
-                self.config_data = msg\r
-                with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:\r
-                    ujson.dump(self.config_data,fd)\r
-        \r
-\r
-        def set_storage_config(self,event,msg): \r
-            # EventMesh.debug_log("set_storage_key_data1:{}".format(msg))\r
-            if len(msg) >= 2:\r
-                self.config_data[msg[0]]=msg[1]\r
-                # EventMesh.debug_log("set_storage_key_data2:{}".format(self.config_data[msg[0]]))\r
-                EventMesh.publish("publish_message_event_ui",{"func":self.set_storage_save,"data":0})\r
-        def set_storage_save(self, data): \r
-            with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:\r
-                ujson.dump(self.config_data,fd)\r
-        def get_storage_data(self, event, msg): \r
-            # EventMesh.debug_log("get_storage_data:{}".format(self.config_data))\r
-            return self.config_data \r
-        def get_storage_config(self,event,msg):\r
-            # EventMesh.debug_log("get_storage_key_data1:{}".format(msg))\r
-            b = msg in self.config_data.keys()\r
-            if b == True:\r
-                # EventMesh.debug_log("get_storage_key_data2:{}".format(self.config_data[msg]))\r
-                return self.config_data[msg]\r
-            else :\r
-                return None\r
-            # try:\r
-            #     return self.config_data[msg]\r
-            # except:\r
-            #     EventMesh.debug_log("get_storage_key_data:none key:{}",msg)\r
-            #     return None\r
-#设备资源授权平台\r
-class device_res_author(Abstract):\r
-   \r
-    def __init__(self) :\r
-        print("device_res_author __init__ start !!!!!!!!!!!!!!!!!")\r
-        self.deviceId = modem.getDevImei()#"876226002022574"\r
-        self.SHA1_BLOCK_SIZE = 64\r
-        self.PAD_BLOCK_SIZE = 16\r
-        self.SHA256 = uhashlib.sha256\r
-        self.pad = lambda s: s + chr(self.PAD_BLOCK_SIZE - len(s) % self.PAD_BLOCK_SIZE) * (self.PAD_BLOCK_SIZE - len(s) % self.PAD_BLOCK_SIZE)\r
-        # 除去补16字节的多余字符\r
-        self.unpad = lambda s: s[:-s[-1]]\r
-        #K01\r
-        # self.key = b"MWrMZjdtcPhj41jWuoqFAhTmqyFluqj1" \r
-        # self.pid = "qAtdDOGXgXYjT2HGFr3a"\r
-        #G15\r
-        # self.key = b"3LWfBicxfRZ3ZAqmZCFuvMdGUXdAFWkb" \r
-        # self.pid = "qLx4Pu4mSUQxyfVKGLXG"\r
-        #7pin\r
-        self.key = b"uKLrChwrxA1LklgBc3VwawYjUkbT3BgX" \r
-        self.pid = "cqxJZi5CNgzjS3mX21Zw"\r
-        \r
-        self.dev_res_timer = osTimer()\r
-        self.dev_res_timer.start(20000, 1, self.dev_timer_cb)\r
-        self.dev_res_timerCount = 0\r
-        self.ud_token_timer = osTimer()\r
-        self.ud_token_timer.start(10000, 1, self.ud_token_timer_cb)\r
-        self.ud_token_timer_Count = 0\r
-        self.dev_token = None\r
-        self.res_error_count = 0\r
-        self.ntptime_flag = 0\r
-        EventMesh.subscribe("get_dev_token", self.get_dev_token)\r
-        EventMesh.subscribe("update_dev_token", self.update_dev_token)\r
-        EventMesh.subscribe("dev_active", self.dev_active)\r
-        EventMesh.subscribe("dev_sign_in", self.dev_sign_in)\r
-        EventMesh.subscribe("dev_NTP", self.dev_NTP)\r
-        #EventMesh.publish_async("dev_NTP",thread_size = 8192)\r
-\r
-        # count = 0\r
-        # while True:\r
-        #     if self.ntptime_flag == 1:\r
-        #         break\r
-        #     utime.sleep_ms(1)\r
-        #     count+=1\r
-        #     if count>600:\r
-        #         break\r
-        # EventMesh.publish_async("dev_active",thread_size = 8192)\r
-        # EventMesh.publish_async("dev_sign_in",thread_size = 8192)\r
-\r
-        self.dev_NTP()#获取时间\r
-        self.dev_active() #设备激活\r
-        self.dev_sign_in() #设备登入\r
-        print("device_res_author __init__ end !!!!!!!!!!!!!!!!!")\r
-\r
-    def get_dev_token(self, event, msg): \r
-        return self.dev_token\r
-    #网络校时\r
-    def dev_NTP(self, event=None, msg=None):\r
-        response = None\r
-        try:\r
-            print("dev_NTP1")\r
-            url = "http://dmp.raisound.com/bz-api/dev/time"\r
-            response = request.get(url,timeout=5)\r
-            data = response.json()\r
-            print("dev_NTP:{}".format(data))\r
-            if data:\r
-                try:\r
-                    timeSecond = data["data"]["timestamp"]//1000\r
-                    \r
-                    next_alarm_time = utime.localtime(timeSecond)\r
-                    print("timeSecond {} next_alarm_time {}".format(timeSecond,next_alarm_time))\r
-                    machine.RTC().datetime((next_alarm_time[0],next_alarm_time[1],next_alarm_time[2],next_alarm_time[6],next_alarm_time[3],next_alarm_time[4],next_alarm_time[5],0))\r
-                    self.ntptime_flag  = 1\r
-                except Exception as e:\r
-                        usys.print_exception(e)\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        if response != None:\r
-            response.close() \r
-        print("dev_NTP end")\r
-    def dev_timer_cb(self, *args): #设备资源管理鉴权平台定时器\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.dev_timer_cb_}) \r
-\r
-    def dev_timer_cb_(self):    \r
-        #if EventMesh.DEV_RES_MANAGE_AUTHEN_PLATFORM == 1:\r
-        try:\r
-            if self.dev_token == None:\r
-                if self.ntptime_flag == 0:\r
-                    self.ntptime_flag  = 1\r
-                    EventMesh.publish_async("dev_NTP",thread_size = 8192)\r
-                    #EventMesh.publish("publish_AI_btnInfo",{"func":self.dev_NTP})\r
-                print("timer:{}!!!!!!!!\r\n".format(utime.localtime()))\r
-                EventMesh.publish_async("dev_active",thread_size = 8192)\r
-                EventMesh.publish_async("dev_sign_in",thread_size = 8192)\r
-                # self.dev_active() #设备激活\r
-                # self.dev_sign_in() #设备登入\r
-                self.dev_res_timerCount+=1\r
-                if self.dev_res_timerCount > 3: #开机一分钟内没有获取到密码和token 等下一次更新令牌在走登入 激活流程\r
-                    self.dev_res_timerCount=0\r
-                    self.dev_res_timer.stop()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-    def ud_token_timer_cb(self, *args): \r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.ud_token_timer_cb_}) \r
-\r
-    def ud_token_timer_cb_(self):   \r
-        try:\r
-            #print("ud_token_timer_!!!!")\r
-            self.ud_token_timer_Count+=1\r
-            if self.ud_token_timer_Count >= 720: #定时10*3000s时更新token\r
-                self.ud_token_timer_Count = 0\r
-                EventMesh.publish_async("dev_sign_in",thread_size = 8192)\r
-        except Exception as e:\r
-            usys.print_exception(e)    \r
-    def get_sim_Status(self):\r
-        return sim.getStatus() \r
-    def HMAC(self,k, m):\r
-    \r
-        KEY_BLOCK = k + (b'\0' * (self.SHA1_BLOCK_SIZE - len(k)))\r
-        KEY_INNER = bytes((x ^ 0x36) for x in KEY_BLOCK)\r
-        KEY_OUTER = bytes((x ^ 0x5C) for x in KEY_BLOCK)\r
-        inner_message = KEY_INNER + m\r
-        outer_message = KEY_OUTER + self.SHA256(inner_message).digest()\r
-        return self.SHA256(outer_message)\r
-    def get_hmac_sha256(self,k, m):\r
-        data = self.HMAC(k, m).digest()\r
-        # print("HMAC(k, m).digest():", data)\r
-        # print("HMAC(k, m).digest():", ubinascii.hexlify(data))\r
-        hex_data = ubinascii.hexlify(data)\r
-        hex_data = hex_data.decode('ascii')\r
-        return hex_data\r
-    # 加密函数\r
-    def aes_CBC_Encrypt(self,data, key, iv):  # CBC模式的加密函数,data为明文,key为16字节密钥,iv为16字节的偏移量\r
-        key = key.encode('utf-8')\r
-        iv = iv.encode('utf-8')  # CBC 模式下的偏移量\r
-        data = self.pad(data)  # 补位\r
-        data = data.encode('utf-8')\r
-        aes = ucryptolib.aes(key,ucryptolib.MODE_CBC,iv)\r
-        result = base64.b64encode(aes.encrypt(data))\r
-        return str(result, 'utf-8')  # 以字符串的形式返回\r
-\r
-    # 解密函数\r
-    def aes_CBC_Decrypt(self,data, key, iv):  # CBC模式的解密函数,data为密文,key为16字节密钥\r
-        key = key.encode('utf-8')\r
-        iv = iv.encode('utf-8')\r
-        \r
-        aes = ucryptolib.aes(key,ucryptolib.MODE_CBC,iv) #CBC模式\r
-\r
-        # decrypt AES解密  B64decode为base64 转码\r
-        result = aes.decrypt(base64.b64decode(data))\r
-        result = self.unpad(result)  # 除去补16字节的多余字符\r
-        return str(result, 'utf-8')  # 以字符串的形式返回\r
-    #激活接口 没有密码走激活\r
-    def dev_active(self, event=None, msg=None):\r
-        signal = net.csqQueryPoll()\r
-        if signal == -1 or self.get_sim_Status() != 1:#网络不正常\r
-            print("dev_active 无 SIM卡!!!!!!!!\r\n")\r
-            return\r
-        print("dev_active 1\r\n")\r
-        # 签名内容: = deviceId+pid+timeStamp\r
-        dev_pass = ""\r
-        dev_pass = EventMesh.publish("get_storage_config","dev_pass")\r
-        print("dev_pass:{}\r\n".format(dev_pass))\r
-        if dev_pass == None:\r
-            dev_pass = ""\r
-        if dev_pass == "" or dev_pass == None:\r
-            try:\r
-                date_tmp = utime.localtime() #获取当前时间\r
-                print("date_tmp:{}\r\n".format(date_tmp)) #转换时间戳s\r
-                timeStamp = (utime.mktime(date_tmp))*1000#获取时间戳ms\r
-                deviceId = self.deviceId #"876226002022574" #以imei号\r
-                pid = self.pid\r
-                key = self.key\r
-                sign_data = "{}{}{}".format(deviceId,pid,timeStamp)  #签名内容\r
-                print("sign_data:{}\r\n".format(sign_data))\r
-                sha256_hex = self.get_hmac_sha256(key,sign_data)\r
-                print("sha256_hex:{}\r\n".format(sha256_hex))\r
-\r
-                data = {\r
-                    "deviceId":"{}".format(deviceId), #设备名\r
-                    "pid":pid, #产品PID\r
-                    "sign":"{}".format(sha256_hex), #HMACSHA256签名后的数据\r
-                    "timeStamp":timeStamp, #要以ms的形式\r
-                    "signMethod":"HMACSHA256" #签名方式 HMACSHA256\r
-                }\r
-                print(ujson.dumps(data))\r
-                headers_T ={"Content-Type":"application/json"}\r
-                url = "http://dmp.raisound.com/bz-api/dev/auth/active"\r
-                data =ujson.dumps(data)\r
-                response = None\r
-                response_result = 0\r
-                try:\r
-                    response = request.put(url,data=data,headers = headers_T,timeout=5)\r
-                    response_result = 1\r
-                except Exception as e:\r
-                    usys.print_exception(e)   \r
-                    print("put error!!!!!\r\n")\r
-                    response_result = 0\r
-                \r
-                IV = "" #偏移量\r
-                PASSWORD= "" #服务器返回后的加密内容 密码\r
-                if response_result == 1: #访问成功ip\r
-                    if response.status_code == 200:\r
-                        print("headers:{}".format(response.headers))\r
-                        content = response.content\r
-                        c = next(content)\r
-                        # "api.xcloudtech.com"\r
-                        # d_server_port = 9000\r
-                        data =  ujson.loads(c)\r
-                        # data = response.json()\r
-                        print("data-{}".format(data))\r
-                        if data != None:\r
-                            if "success" in data:\r
-                                if data['success'] == True:\r
-                                    if "data" in data:\r
-                                        data_tmp = data["data"]\r
-                                        if "nonce" in data_tmp: #偏移量\r
-                                            IV = data_tmp["nonce"]\r
-                                        if "password" in data_tmp:\r
-                                            PASSWORD = data_tmp["password"]\r
-                                            # EventMesh.publish("set_storage_config",["dev_pass",PASS])\r
-                                if data["code"] == 20001:#鉴权成功\r
-                                    pass\r
-                                elif data["code"] > 50000:#时间错误\r
-                                    self.res_error_count+=1\r
-                                    if self.res_error_count>=3:\r
-                                        self.res_error_count = 0\r
-                                        #EventMesh.publish("paly_device_res_error")\r
-                                    if data["code"] == 50003:#时间错误\r
-                                        self.ntptime_flag  = 0\r
-                        if PASSWORD != None and IV != None:\r
-                            if len(PASSWORD) != 0 and len(IV) != 0:\r
-                                password = PASSWORD\r
-                                iv = IV\r
-                                #解密 之后保存本地下一次登入做使用\r
-                                decrypt_data = self.aes_CBC_Decrypt(password, self.key, iv) #对服务器下发的密码进行解密\r
-                                print("decrypt_data {}".format(decrypt_data))\r
-                                EventMesh.publish("set_storage_config",["dev_pass",decrypt_data])    \r
-                    print("IV:{}\r\n PASS:{}".format(IV,PASSWORD))\r
-                if response != None:\r
-                    response.close()  \r
-            except Exception as e:\r
-                usys.print_exception(e)   \r
-            print("dev_active end\r\n")\r
-            return [response_result,PASSWORD,IV]\r
-    #随机生成16个字节的字符串作为加密的IV 偏移量\r
-    def generate_random_string(self,length=16): \r
-        random_str = ""\r
-        chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'\r
-        for i in range(length):\r
-            random_str+=chars[random.randint(0,length)]\r
-        return random_str\r
-\r
-    #设备登入 没有Token 走登入获取token\r
-    def dev_sign_in(self, event=None, msg=None):\r
-        signal = net.csqQueryPoll()\r
-        if signal == -1 or self.get_sim_Status() != 1:#网络不正常\r
-            print("dev_sign_in 无 SIM卡!!!!!!!!\r\n")\r
-            return\r
-        print("dev_sign_in 1")\r
-        token = ""\r
-        try:\r
-            token = self.dev_token\r
-            dev_pass = EventMesh.publish("get_storage_config","dev_pass") \r
-            #print("token:{}\r\n".format(token))\r
-            if token == None:\r
-                token = ""\r
-            if dev_pass == None:\r
-                dev_pass = ""\r
-            if len(dev_pass) == 0:#没有密码\r
-                return\r
-            #if token == None or token == "":\r
-            if 1: #返回结果成功\r
-                #获取本地保存的密码\r
-                decrypt_data=EventMesh.publish("get_storage_config","dev_pass")\r
-                # decrypt_data = self.aes_CBC_Decrypt(password, self.key, iv) #对服务器下发的密码进行解密\r
-                print("decrypt_data {}".format(decrypt_data))\r
-                #随机生成16个字符串 设备生成做加密使用\r
-                random_string = self.generate_random_string(16) #随机的16个字符串\r
-                enc_iv = random_string #加密的IV偏移量\r
-                #设备端进行密码加密\r
-                encrypt_data = self.aes_CBC_Encrypt(decrypt_data, self.key, enc_iv)\r
-                print("encrypt_data {}".format(encrypt_data))\r
-\r
-                #登入数据\r
-                deviceId = self.deviceId\r
-                sign_in_data = {\r
-                    "deviceId":"{}".format(deviceId), #设备ID\r
-                    "password":"{}".format(encrypt_data), #加密的数据\r
-                    "nonce":"{}".format(random_string) #随机的16个字符串\r
-                }\r
-                print(ujson.dumps(sign_in_data))\r
-                sign_url = "http://dmp.raisound.com/bz-api/dev/auth/sign_in" #登入地址\r
-                headers_T ={"Content-Type":"application/json"}\r
-                response_result = 0\r
-                response = 0\r
-                try:\r
-                    response = request.post(sign_url,data=ujson.dumps(sign_in_data),headers = headers_T,timeout=5)\r
-                    response_result = 1\r
-                except Exception as e:\r
-                    usys.print_exception(e)   \r
-                    print("post error!!!!!\r\n")\r
-                    response_result = 0\r
-                # {'msg': '', 'code': 20001, 'success': True, \r
-                # 'data': {'deviceId': '876226002022574', \r
-                # 'token': '95436a9e09fd0ff89feb8825257dca982f'}\r
-                # }\r
-                \r
-                #self.dev_token = ""\r
-                if response_result == 1:\r
-                    if response.status_code == 200:\r
-                        content = response.content\r
-                        c = next(content)\r
-                        data =  ujson.loads(c)\r
-                        print("data-{}".format(data))\r
-                        if data != None:\r
-                            if "success" in data:\r
-                                if data['success'] == True: #登入成功\r
-                                    if "data" in data:\r
-                                        data_tmp = data["data"]\r
-                                        if "token" in data_tmp: #token\r
-                                            self.dev_token = data_tmp["token"]\r
-                                if data["code"] == 50003:#时间错误\r
-                                    self.ntptime_flag  = 0\r
-                print("token:{}\r\n".format(self.dev_token))\r
-                if response != None:\r
-                    response.close()\r
-                pass\r
-        except Exception as e:\r
-                    print("post error!!!!!\r\n")\r
-                    response_result = 0\r
-        print("dev_sign_in end")\r
-    #获取新的令牌 更新token\r
-    def update_dev_token(self, event=None, msg=None):\r
-        print("update_dev_token")\r
-        try:\r
-            dev_pass = ""\r
-            dev_pass = EventMesh.publish("get_storage_config","dev_pass")\r
-            \r
-            if dev_pass == None:\r
-                dev_pass = ""\r
-            if len(dev_pass) == 0: #没有密码走激活\r
-                print("no dev_pass:{}\r\n".format(dev_pass))\r
-                EventMesh.publish("dev_active")\r
-            token = self.dev_token\r
-            if token == None:\r
-                token = ""\r
-            if len(token) == 0: #没有token走登入\r
-                print("no dev_token:{}\r\n".format(token))\r
-                #self.dev_sign_in()\r
-                EventMesh.publish("dev_sign_in")\r
-            dev_tokenip = "http://dmp.raisound.com/bz-api/dev/auth/token" #设备新令牌更新地址\r
-\r
-            token = self.dev_token\r
-            if token == None:\r
-                token = ""\r
-            if len(token) != 0:\r
-                response_result=0\r
-                response = None\r
-                headers_T = {"bz-dt":"{}".format(token)}\r
-                try:\r
-                    response = request.get(dev_tokenip,headers = headers_T,timeout=5)\r
-                    response_result = 1\r
-                except Exception as e:\r
-                    print("get error!!!!!\r\n")\r
-                    response_result = 0\r
-                if response_result == 1:\r
-                    if response.status_code == 200:\r
-                        try:\r
-                            headers_data = response.headers\r
-                            # print("headers_data!!!!! headers_data:{}\r\n".format(headers_data))\r
-                            if "bz-dt" in headers_data: #bz-dt字段是否在头部数据里面 如果有就需要更新\r
-                                bz_dt = headers_data["bz-dt"] \r
-                                self.dev_token = bz_dt.replace(" ", "") #去掉所有的空格符\r
-                                print("update_dev_token:{}".format(self.dev_token))\r
-                        except Exception as e:\r
-                            print("headers_data!!!!! error\r\n")\r
-                if response != None:\r
-                    response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)   \r
-        print("update_dev_token end")\r
-        \r
-#OTA升级\r
-class OTA():\r
-    def __init__(self):\r
-        #EventMesh.subscribe("min_sys_ota",self.min_sys_ota)\r
-        self.downloadFileVoURL1= ""\r
-        self.downloadFileVoURL2= ""\r
-    #小系统升级,返回0,没有升级;返回,1有升级,正在执行升级;返回2,电压不够\r
-    def min_sys_ota(self,event=None,msg=None):\r
-        print("min_sys_ota")\r
-        signal = net.csqQueryPoll()\r
-        if signal == -1 or sim.getStatus()  != 1:#网络不正常\r
-            print("min_sys_ota 无 SIM卡!!!!!!!!\r\n")\r
-            return 0\r
-        # return 0\r
-        response = None\r
-        ret_str =0\r
-        self.downloadFileVoURL1= ""\r
-        self.downloadFileVoURL2= ""\r
-        try:\r
-            sourceVersion = versions.Build_Time\r
-            sourceVersion = "7PIN-"+sourceVersion[:10]+"-"+sourceVersion[11:-3]\r
-            print("sourceVersion:{}".format(sourceVersion))\r
-            sourceVersion = sourceVersion.replace(" ", "0")\r
-            print("sourceVersion2:{}".format(sourceVersion))\r
-            #url = "http://iot.api.thisiot.com/ota/task?deviceId=860132060348836&sourceVersion=2024-12-20-15:35-1"\r
-            url = "http://dmp.raisound.com/bz-api/ota/task?deviceId={}&sourceVersion={}".format(modem.getDevImei(),sourceVersion)\r
-            print(url)\r
-            response = request.get(url,timeout=5)\r
-            if response.status_code == 200:\r
-                data = response.json()\r
-                print("min_sys_ota1:{}".format(data))\r
-                \r
-                if data:\r
-                    try:\r
-                        if data["code"] == 20007:#有新版本\r
-                            if "fileList"in data["data"]:\r
-                                if len(data["data"]["fileList"]) == 2:\r
-                                    for fileList in data["data"]["fileList"]:\r
-                                        if fileList["fileName"] == "dfota_2.bin":\r
-                                            self.downloadFileVoURL2 = fileList["url"]\r
-                                        elif fileList["fileName"] == "dfota_1.bin":\r
-                                            self.downloadFileVoURL1 = fileList["url"]\r
-                            \r
-                        if data["code"] == 20006:#已是最新版本\r
-                            ret_str = 0\r
-                                    \r
-                    except Exception as e:\r
-                            usys.print_exception(e)\r
-            else:\r
-                print("min_sys_ota get error")\r
-            response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-            if response != None:\r
-                response.close()\r
-        \r
-        print("min_sys_ota:downloadFileVoURL1:{},\ndownloadFileVoURL2:{}".format(self.downloadFileVoURL1,self.downloadFileVoURL2))\r
-        print("min_sys_ota end") \r
-        if self.downloadFileVoURL2!="" and self.downloadFileVoURL1!="":\r
-            battery = EventMesh.publish("get_battery")\r
-            if battery>=40:\r
-                self.ota_timer = osTimer()\r
-                self.ota_timer.start(15000, 0, self.ota_timer_cb)\r
-                ret_str =  1  \r
-            else:\r
-                ret_str =  2\r
-        return ret_str\r
-    \r
-    def ota_timer_cb(self, *args, **kwargs):\r
-        import fota\r
-        fota_obj = fota() \r
-        fota_obj.httpDownload(url1=self.downloadFileVoURL1,url2=self.downloadFileVoURL2)\r
-    #ota升级结果返回,开机时调用一次即可\r
-    def ota_result(self,event=None,msg=None):\r
-        response = None\r
-        try:\r
-            currentVersion = versions.Build_Time\r
-            currentVersion = "7PIN-"+currentVersion[:10]+"-"+currentVersion[11:-3]\r
-            print("currentVersion1:{}".format(currentVersion))\r
-            currentVersion = currentVersion.replace(" ", "0")\r
-            print("currentVersion2:{}".format(currentVersion))\r
-            url = "http://dmp.raisound.com/bz-api/ota/result?deviceId={}&currentVersion={}".format(modem.getDevImei(),currentVersion)\r
-            print(url)\r
-            response = request.post(url,timeout=5)\r
-            if response.status_code == 200:\r
-                data = response.json()\r
-                print("ota_result:{}".format(data))\r
-            else:\r
-                print("ota_result  error!!!!")\r
-                for i in response.text:\r
-                    print(i)\r
-            response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-            if response != None:\r
-                response.close()\r
-    #ICCID上传\r
-    def pots_ICCID(self,event=None,msg=None):\r
-        response = None\r
-        try:\r
-            iccid = sim.getIccid()\r
-            if iccid != -1 and len(iccid) > 5:\r
-                print("pots_ICCID:{}".format(iccid))\r
-                #Headers = {'Transfer-Encodong':'chunked'}\r
-                #http://dmp.raisound.com/bz-api/dev/iccid?deviceId=866610001099679&iccid=89860002192307889057\r
-                url = "http://dmp.raisound.com/bz-api/dev/iccid?deviceId={}&iccid={}".format(modem.getDevImei(),iccid)\r
-                print(url)\r
-                response = request.post(url,timeout=5)\r
-                if response.status_code == 200:\r
-                    data = response.json()\r
-                    print("pots_ICCID:{}".format(data))\r
-                else:\r
-                    print("pots_ICCID  error!!!!")\r
-                    for i in response.text:\r
-                        print(i)\r
-                response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-            if response != None:\r
-                response.close()\r
-#阿里VC状态枚举\r
-VC_State_None=0\r
-VC_State_Listening=1#听\r
-VC_State_SpeechStart=2#说开始\r
-VC_State_SpeechIng=3#正在说\r
-VC_State_SpeechEnd=4#说结束\r
-VC_State_RequestToRespond=5 #TTS请求或者chat请求\r
-VC_State_Thinking=6#想(chat)\r
-VC_State_Responding=7#音频播放\r
-VC_State_TTSStart=8\r
-VC_State_TTSData=9\r
-VC_State_TTSFinish=10\r
-VC_State_TTSEnd=11\r
-VC_State_TTSError=12\r
-VC_State_DialogError=13\r
-VC_State_End=14\r
-\r
-VC_record_TYPE_PCM = 0\r
-VC_record_TYPE_AMR = 1\r
-VC_play_TYPE_PCM = 0\r
-VC_play_TYPE_MP3 = 1\r
-\r
-#websocket发送数据编号\r
-# AI_client_asr_num = 0\r
-# AI_client_chat_num = 1\r
-# AI_client_tts_num = 2\r
-AI_client_VC_num = 3\r
-AI_client_asr_num = 4\r
-\r
-\r
-class AI_VC(Abstract):\r
-    # AI\r
-    \r
-    def __init__(self):\r
-        try:\r
-            self.http_get_config()#获取/更新配置参数\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        self.VC_30S_timer = osTimer()\r
-        self.VC_30S_timer.start(30000, 1, self.VC_30S_timer_cb)\r
-        self.get_config_timer_count = 0\r
-        self.record_data_save_flag = 0 #是否保存录音文件\r
-        self.play_data_save_flag = 0 #是否保存tts数据到文件\r
-        self.record_fd = None\r
-        self.play_fd = None\r
-        self.is_VC_ACK = 0 #是否开启ack应答模式\r
-        self.is_long_record = 0 #是否开启长录音模式(语音打断模式)\r
-        self.ai_OTA = OTA()\r
-        self.is_auth = 0 #是否开启dmp鉴权\r
-        #self.VC_mode = 0 #0:短按连续问答模式 1:长按录音模式\r
-        self.VC_mode = EventMesh.publish("get_storage_config","VC_mode")#\r
-        if self.VC_mode == None :\r
-            self.VC_mode = 0\r
-        self.is_up_error= 0 #是否上传错误id\r
-        self.error_data = []\r
-        self.asr_taskid  = ""\r
-        self.VC_taskid  = ""\r
-        self.VC_server = 2 #0柒牌正式服务器,1:测试服务器1,2:测试服务器2\r
-\r
-        self.server_ip = EventMesh.publish("get_storage_config","server_ip")#\r
-        if self.server_ip == None:\r
-            if self.VC_server == 1:# \r
-                self.server_ip="118.145.158.207:22083"\r
-            elif self.VC_server == 2:# \r
-                self.server_ip="118.145.158.207:22082"\r
-            elif self.VC_server == 4:# \r
-                self.server_ip="118.145.158.207:22084"\r
-            elif self.VC_server == 5:# \r
-                self.server_ip="amp-wss.raisound.com"\r
-            elif self.VC_server == 6:# \r
-                self.server_ip="118.145.158.207:22080"\r
-            else:\r
-                self.server_ip="sevenpin.qipai.com.cn"\r
-\r
-            if dev_type == 'momo':# \r
-                self.server_ip="118.145.158.207:22080"\r
-            elif dev_type == "7PIN":\r
-                self.server_ip="sevenpin.qipai.com.cn"\r
-            elif dev_type == "sjgq":\r
-                self.server_ip="118.145.158.207:22084"\r
-        #开机提示音\r
-        self.power_on_tone = EventMesh.publish("get_storage_config","power_on_tone")#\r
-        if dev_type != "7PIN":\r
-            self.power_on_tone = None\r
-        if self.power_on_tone == None:\r
-            if dev_type == "G10":\r
-                self.power_on_tone = "已开机,您好!我是北科瑞讯智能 AI bot_name"\r
-            elif dev_type == "7PIN_BK":\r
-                self.power_on_tone = "小瑞来了!我们一起来愉快地聊天吧!" \r
-            elif dev_type == "momo":\r
-                self.power_on_tone = "DuloDulo,我是上古神兽食梦貘,主人可以叫我momo,我来自《山海经》,是一只以梦为食的神秘灵兽,每当颜色朦胧、人们入睡时,我就会悄悄飞到人们的床头,用我长长的鼻子把噩梦统统吞噬掉,只留下甜甜的美梦。从今往后,就由我守护在主人身边,一起度过每一个星河璀璨的夜晚。"\r
-            elif dev_type == "sjgq":\r
-                self.power_on_tone = "您好!我是巴马四季甘泉的智能助手。我可以为你解答各种各样的问题,像是有关巴马四季甘泉知识库、中基长寿科学产品、卫斯曼院士国际先进医疗中心的问题,还有日常生活与工作、旅游信息、健康咨询、教育与学习、情感交流、全球资讯、世界文化等方面的问题哦。你有没有这方面的问题想要问我呀?"\r
-            else:\r
-                self.power_on_tone = "您好!我是世界首创柒牌男装AI生活好帮手-bot_name, 很高兴为您服务,我可以帮您解答柒牌公司知识库、日常生活与工作、旅游信息、健康与运动咨询、教育与学习、情感交流、全球资讯、世界文化等问题!请问您有什么需要我帮忙的吗?" \r
-                \r
-\r
-        self.VC_record_TYPE = VC_record_TYPE_PCM #0:PCM 1:AMR\r
-        self.VC_play_TYPE = VC_play_TYPE_PCM #0:PCM 1:mp3 \r
-        self.VC_record_samplerate = 16000\r
-        self.VC_play_samplerate = 16000\r
-        \r
-        self.VC_TTS_voice_type = EventMesh.publish("get_storage_config","VC_TTS_voice_type")#音色配置\r
-        if self.VC_TTS_voice_type == None or ("男" in self.VC_TTS_voice_type) == False:\r
-            if dev_type == "G10" or  dev_type == "7PIN_BK":\r
-                self.VC_TTS_voice_type = {   \r
-                                            "女":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_female_wanwanxiaohe_moon_bigtts" ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "男":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_male_wennuanahu_moon_bigtts"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "童":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"ICL_zh_female_huoponvhai_tob"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "粤":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_female_wanqudashu_moon_bigtts" ,\r
-                                            "lang":"zh-hk" \r
-                                            },\r
-                                            "四川":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_female_daimengchuanmei_moon_bigtts",\r
-                                            "lang":"&lang=zh-cn-sc"  \r
-                                            },\r
-                                            "个性":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_male_sunwukong_mars_bigtts" ,\r
-                                            "lang":"zh-cn" \r
-                                            }\r
-                                           \r
-                                        }\r
-            elif dev_type == 'momo':\r
-                self.VC_TTS_voice_type = {   \r
-                                            "女":{\r
-                                            "bot_name":"食梦貘",\r
-                                            "voice":"zh_female_shaoergushi_mars_bigtts" ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "男":{\r
-                                            "bot_name":"食梦貘",\r
-                                            "voice":"zh_male_yangguangqingnian_mars_bigtts"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "童":{\r
-                                            "bot_name":"食梦貘",\r
-                                            "voice":"ICL_zh_female_huoponvhai_tob"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                }\r
-            elif dev_type == 'sjgq':\r
-                self.VC_TTS_voice_type = {   \r
-                                            "女":{\r
-                                            "bot_name":"小巴",\r
-                                            "voice":"zh_female_wanwanxiaohe_moon_bigtts" ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "男":{\r
-                                            "bot_name":"小巴",\r
-                                            "voice":"zh_male_wennuanahu_moon_bigtts"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "童":{\r
-                                            "bot_name":"小巴",\r
-                                            "voice":"ICL_zh_female_huoponvhai_tob"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                }\r
-            else:\r
-                #女,男,童,粤,川,个性声\r
-                self.VC_TTS_voice_type = {   \r
-                                            "女":{\r
-                                            "bot_name":"柒妹妹",\r
-                                            "voice":"huoshan::zh_female_wanwanxiaohe_moon_bigtts" ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "男":{\r
-                                            "bot_name":"柒先生",\r
-                                            "voice":"huoshan::zh_male_wennuanahu_moon_bigtts"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "童":{\r
-                                            "bot_name":"柒乐乐",\r
-                                            "voice":"huoshan::ICL_zh_female_huoponvhai_tob"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "粤":{\r
-                                            "bot_name":"柒先生",\r
-                                            "voice":"huoshan::zh_female_wanqudashu_moon_bigtts" ,\r
-                                            "lang":"zh-hk" \r
-                                            },\r
-                                            "四川":{\r
-                                            "bot_name":"柒妹妹",\r
-                                            "voice":"huoshan::zh_female_daimengchuanmei_moon_bigtts",\r
-                                            "lang":"&lang=zh-cn-sc"  \r
-                                            },\r
-                                            "个性":{\r
-                                            "bot_name":"柒先生",\r
-                                            "voice":"huoshan::zh_male_sunwukong_mars_bigtts" ,\r
-                                            "lang":"zh-cn" \r
-                                            },\r
-                                            "英语":{\r
-                                            "bot_name":"柒先生",\r
-                                            "voice":"huoshan::en_male_smith_mars_bigtts" ,\r
-                                            "lang":"zh-cn" \r
-                                            }\r
-                                            \r
-                                           \r
-                                        }\r
-            \r
-            # self.VC_TTS_voice_type = {0:"zh_female_xinlingjitang_moon_bigtts",1:"zh_male_wennuanahu_moon_bigtts",2:"ICL_zh_female_huoponvhai_tob",\r
-            #                           3:"aliyun::longjiaxin",4:"zh_female_daimengchuanmei_moon_bigtts"}\r
-            #self.VC_TTS_voice_type = ["aliyun::longxiaoxia","aliyun::longnan","aliyun::longling"]\r
-            \r
-            #EventMesh.publish("set_storage_config",["VC_TTS_voice_type",self.VC_TTS_voice_type])\r
-\r
-        try:\r
-            self.VC_TTS_voice_key = EventMesh.publish("get_storage_config","VC_TTS_voice_key")#音色配置\r
-            if self.VC_TTS_voice_key == None :\r
-                if dev_type == "7PIN_BK":\r
-                    self.VC_TTS_voice_key = "童"\r
-                elif dev_type == "momo":\r
-                    self.VC_TTS_voice_key = "男"\r
-                else:\r
-                    self.VC_TTS_voice_key = "男"\r
-            if self.VC_TTS_voice_key in self.VC_TTS_voice_type:\r
-                pass\r
-            else:\r
-                self.VC_TTS_voice_key = list(self.VC_TTS_voice_type.keys())[0]\r
-            print("音色配置:{}:{}\r\n\r\n".format(self.VC_TTS_voice_key,self.VC_TTS_voice_type[self.VC_TTS_voice_key]))\r
-            self.VC_TTS_volume =  EventMesh.publish("get_storage_config","VC_TTS_volume")#音量配置\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-\r
-        if self.VC_TTS_volume == None:\r
-            self.VC_TTS_volume = 100\r
-        self.AI_audio_queue_thread_id = 0\r
-        self.AI_audio_queue_thread_lock = 0\r
-        self.AI_VC_send_data_queue_thread_id = 0\r
-        self.AI_VC_send_data_queue_thread_lock = 0\r
-        self.AI_ASR_send_data_queue_thread_id = 0\r
-        self.AI_ASR_send_data_queue_thread_lock = 0\r
-        self.AI_record_tmp_queue = Queue(100)\r
-        self.AI_ASR_send_data_queue = Queue(200)\r
-        self.AI_VC_send_data_queue = Queue(100)\r
-        self.AI_audio_queue = Queue(100)\r
-        #self.AI_WS_connect_Queue = Queue(100) #释放用\r
-        self.AI_TTS_str = ""\r
-        self.AI_ASR_str = ""\r
-        self.AI_ASR_flag = 0\r
-        self.AI_ASR_str_tmp = ""\r
-        self.AI_ASR_send_buf_len = 0\r
-        self.AI_ASR_text_tmp = ""\r
-        self.AI_ASR_text_repet_count = 0\r
-        # #开始线程\r
-        # if self.AI_audio_queue_thread_id ==0:\r
-        #     self.AI_audio_queue_thread_id = _thread.start_new_thread(self.AI_audio_queue_thread, ())\r
-        # else:\r
-        #     print("AI_VC_start :AI_audio_queue_thread_id != 0 ")\r
-        # if self.AI_VC_send_data_queue_thread_id == 0:    \r
-        #     self.AI_VC_send_data_queue_thread_id = _thread.start_new_thread(self.AI_VC_send_data_queue_thread, ())\r
-            \r
-        self.VC_state = VC_State_None #阿里ai VC状态\r
-        self.VC_dialog_id = ""#\r
-        self.VC_message_id=None\r
-        self.VC_task_id =None\r
-        self.AI_client_VC = None\r
-        self.AI_client_VC_recv_id = 0\r
-        self.AI_client_VC_recv_lock = 0\r
-        self.AI_client_VC_isconnect =0\r
-        self.AI_client_VC_debug =0\r
-\r
-        self.asr_state = VC_State_None #阿里VC_ASR VC状态\r
-        self.key_state = 0\r
-\r
-        self.AI_client_asr = None\r
-        self.AI_client_asr_recv_id = 0\r
-        self.AI_client_asr_recv_lock = 0\r
-        self.AI_client_asr_isconnect =0\r
-        self.AI_ASR_timer =  osTimer()\r
-        self.AI_ASR_timer_count = 0\r
-        self.AI_client_asr_debug =0\r
-        self.AI_ASR_check_timeout = 0\r
-        self.AI_ASR_error_timeout = 0\r
-        self.VC_Thinking_timerout = 0\r
-        self.VC_Speech_end_timerout = 0\r
-\r
-        self.record_pcm = None\r
-        self.play_pcm = None\r
-        self.VC_record_thread_id = 0\r
-        self.VC_record_thread_lock = 0\r
-        self.VC_pingping_timerout = 0\r
-        self.asr_pingping_timerout = 0\r
-        self.factory_timer = osTimer()\r
-        self._1S_timer = osTimer()\r
-        self.Audio_buf_size = 16*1024\r
-        self.record = audio.Record()\r
-        #self.record.end_callback(self.record_callback)\r
-        self.record.gain_set(4,10)\r
-        #self.record.gain_set(4,12)\r
-        self.aud = audio.Audio(0)\r
-        self.aud.setCallback(self.audio_cb)\r
-        #self.aud.setVolume(self.VC_TTS_volume //10)\r
-        self.audio_play_state = 1 #音频播放完状态\r
-        self.close_timerout = 0\r
-        self.LocalRespondingEnded_timerout = 0\r
-        \r
-        self.play_flag = 0\r
-        self.VC_record_state_flag = 0\r
-        self.AI_key_long_press_flag = 0\r
-        self.websocket_error_count = 0\r
-\r
-        self.tts_in_data_len = 0\r
-        self.tts_out_data_len = 0\r
-        self.VC_satrt_flag = 0\r
-        self.session_id = ""\r
-        EventMesh.subscribe("AI_key_press", self.AI_key_press)\r
-        EventMesh.subscribe("AI_key_release", self.AI_key_release)\r
-        EventMesh.subscribe("AI_key_long_press", self.AI_key_long_press)\r
-        EventMesh.subscribe("pwk_key_release", self.pwk_key_release)\r
-        EventMesh.subscribe("get_AI_audio_queue", self.get_AI_audio_queue)\r
-        EventMesh.subscribe("get_VC_satrt_flag", self.get_VC_satrt_flag)\r
-        EventMesh.subscribe("VC_error", self.VC_error)\r
-        \r
-        EventMesh.publish("close_led")\r
-\r
-        self.bot_name = "柒先生"\r
-        try:\r
-            if "bot_name" in self.VC_TTS_voice_type[self.VC_TTS_voice_key]:\r
-                self.bot_name = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["bot_name"]\r
-            else:\r
-                print("not bot_name!!!!!!!!!!!!!!!!!!!!!!")\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        try:\r
-            if self.ai_OTA.min_sys_ota()==1:\r
-            #if 0:    \r
-                self.AI_TTS_str = "检测到有新版本需要升级啦!升级时可千万别断电或乱按哦,升级完成后设备会自动重启,重启就代表升级成功"\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-            # if self.ai_OTA.min_sys_ota()==2:\r
-            #     self.AI_TTS_str = "检测到有新版本需要升级啦!电量低于40%,无法保证升级正常执行,请充满电后重启设备再次升级!"\r
-            #     EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-            else:\r
-                try:\r
-                    self.ai_OTA.ota_result()\r
-                    self.ai_OTA.pots_ICCID()\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                #开机提示语,如果联网失败,直接提示信号弱\r
-                \r
-                #"voice":{"女":"柒妹妹-huoshan::zh_female_wanwanxiaohe_moon_bigtts","男":"柒先生-huoshan::zh_male_wennuanahu_moon_bigtts","童":"柒乐乐huoshan::ICL_zh_female_huoponvhai_tob","广东":"柒先生-huoshan::zh_female_wanqudashu_moon_bigtts","四川":"柒妹妹-huoshan::zh_female_daimengchuanmei_moon_bigtts","个性":"柒先生-zh_male_sunwukong_mars_bigtts"}\r
-                #EventMesh.publish("get_storage_config",["powerRestart",1])\r
-                powerRestart =  EventMesh.publish("get_storage_config","powerRestart")#=1非正常重启\r
-                if powerRestart == None:\r
-                    powerRestart = 0\r
-                if powerRestart == 1:\r
-                    EventMesh.publish("set_storage_config",["powerRestart",0])\r
-                    \r
-                else:\r
-                    \r
-                    self.AI_TTS_str = self.power_on_tone.replace("bot_name", self.bot_name)\r
-                    print("开机提示:{}".format(self.AI_TTS_str))\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                \r
-                \r
-\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-\r
-        \r
-    def post_processor_after_instantiation(self):\r
-        pass\r
-    def get_AI_audio_queue(self, event, msg):\r
-        return self.AI_audio_queue\r
-    def get_VC_satrt_flag(self, event, msg):\r
-        return self.VC_satrt_flag\r
-\r
-\r
-    def VC_30S_timer_cb(self, *args): #\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_30S_timer_cb_}) \r
-\r
-    def VC_30S_timer_cb_(self):    \r
-        self.get_config_timer_count += 1\r
-        if self.get_config_timer_count >= 2*60*2:#2小时更新配置参数\r
-            self.get_config_timer_count = 0\r
-            try:\r
-                self.http_get_config()#获取/更新配置参数\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-    #提交错误id           \r
-    def ud_error(self,error_data):\r
-        response = None\r
-        if self.is_up_error == 1:\r
-            try:\r
-                # currentVersion = versions.Build_Time\r
-                # currentVersion = "7PIN-"+currentVersion[:10]+"-"+currentVersion[11:-3]\r
-                url = "http://{}/health?task_id={}".format(self.server_ip,error_data[0]+error_data[1])\r
-                print(url)\r
-                response = request.get(url,timeout=5)\r
-                if response.status_code == 200:\r
-\r
-                    print("ud_error:ok")\r
-                else:\r
-                    print("ud_error  error!!!!")\r
-                    for i in response.text:\r
-                        print(i)\r
-                response.close()\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-                if response != None:\r
-                    response.close()\r
-    #获取配置参数\r
-    def http_get_config(self, event=None, msg=None):\r
-        print("http_get_config")\r
-\r
-        response = None\r
-        #http://180.184.206.142/bz-api/dev/config?deviceId=xxx\r
-        try:\r
-            url = "http://dmp.raisound.com/bz-api/dev/config/{}".format(modem.getDevImei())\r
-            print(url)\r
-            response = request.get(url,timeout=5)\r
-            if response.status_code == 200:\r
-                data = response.json()\r
-                print("http_get_config:{}".format(data))\r
-                \r
-                if data:\r
-                    try:\r
-                        if data["code"] == 20000:#有配置\r
-                            if data["data"] :\r
-                                if "version" in data["data"]:\r
-                                    config_version = EventMesh.publish("get_storage_config","config_version")#音量配置\r
-                                    if config_version != data["data"]["version"]:\r
-                                        config_version = data["data"]["version"]\r
-                                        EventMesh.publish("set_storage_config",["config_version",config_version])\r
-                                        if "VC_TTS_voice_type" in data["data"]:\r
-                                            self.VC_TTS_voice_type = data["data"]["VC_TTS_voice_type"]\r
-                                            EventMesh.publish("set_storage_config",["VC_TTS_voice_type",self.VC_TTS_voice_type])\r
-                                            print("配置VC_TTS_voice_type成功")\r
-                                        if "server_ip" in data["data"]:\r
-                                            self.server_ip = data["data"]["server_ip"]\r
-                                            EventMesh.publish("set_storage_config",["server_ip",self.server_ip])\r
-                                            print("配置server_ip成功")\r
-                                        if "power_on_tone" in data["data"]:\r
-                                            self.power_on_tone = data["data"]["power_on_tone"]\r
-                                            EventMesh.publish("set_storage_config",["power_on_tone",self.power_on_tone])\r
-                                            print("配置power_on_tone成功")\r
-\r
-                    except Exception as e:\r
-                            usys.print_exception(e)\r
-            else:\r
-                print("status_code:{}".format(response.status_code))\r
-                print("http_get_config:error!!!!!!!!!!")\r
-            response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-            if response != None:\r
-                response.close()\r
-\r
-    def audio_cb(self,event):\r
-        if event == 0:\r
-            self.audio_play_state =1\r
-            #EventMesh.publish("set_audio_state", 1)\r
-            print('audio-play start.')\r
-        elif event == 7:\r
-            self.audio_play_state = 0\r
-            #EventMesh.publish("set_audio_state", 0)   \r
-            print('audio-play finish.!!!!!!')\r
-\r
-    def AI_key_press(self, event, msg):#按键按下\r
-        print("AI_key_press")\r
-        self.get_config_timer_count = 0\r
-        self.key_state = 1\r
-        #self.aud.aud_tone_play(10,200)#播放按键音\r
-        self.AI_TTS_str = ""#"你好,有什么吩咐"\r
-        self.AI_ASR_str = ""\r
-        self.AI_ASR_str_tmp = ""\r
-        self.VC_state = VC_State_None\r
-        # if self.VC_state != VC_State_None:\r
-        #     EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-        #     EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(10)})\r
-        #if self.VC_record_state_flag >1:#如果在录音,就先停止录音\r
-        self.VC_Speech_End()\r
-\r
-        self.VC_Speech_Start()    \r
-        self.AI_VC_start() \r
-        # self.Close()\r
-        # self.AI_VC_start()\r
-        self.AI_key_long_press_flag = 0\r
-\r
-    def AI_key_release(self, event, msg):#按键弹起\r
-        print("AI_key_release123")\r
-        self.key_state = 0\r
-        if self.AI_key_long_press_flag == 1 :#有长按\r
-            #self.AI_client_VC_end_speech()\r
-            EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(1000)})\r
-            EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_asr_StopTranscription_requset})\r
-            #self.AI_client_asr_StopTranscription_requset()#请求停止\r
-            if self.VC_mode == 1 :#长按单次问答模式\r
-                if self.AI_ASR_str_tmp != "":\r
-                    print("AI_key_release:asr_str:{}".format(self.AI_ASR_str))  \r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})\r
-            \r
-        else :\r
-            if self.VC_mode == 1 :#长按单次问答模式\r
-                # try:\r
-                #     EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                # except Exception as e:\r
-                #     usys.print_exception(e)\r
-                # EventMesh.publish("publish_AI_btnInfo",{"func":self.key_prompt})  #提示请您按住中间的按钮开始讲话,讲完松开即可   \r
-                self.AI_TTS_str = "请您按住中间的按钮开始讲话,讲完松开即可 "\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})\r
-\r
-                \r
-                #self.VC_Speech_End()\r
-    def AI_key_long_press(self, event, msg):#按键长按\r
-        print("AI_key_long_press")\r
-        self.AI_key_long_press_flag = 1\r
-\r
-    def pwk_key_release(self, event, msg):#电源键短按,关闭\r
-        print("pwk_key_release")\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-\r
-    def key_prompt(self):\r
-        EventMesh.publish("audio_montage_play",["key_prompt.mp3"])\r
-        #self.aud.play(1,1,'U:/static/key_prompt.mp3')#提示请您按住中间的按钮开始讲话,讲完松开即可\r
-    def VC_error(self, event, msg):#错误播报\r
-        self.websocket_error()\r
-        #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error}) \r
-#****************************************ASR连接**********************************************************************\r
-    def websocket_connect_asr(self):\r
-        print("websocket_connect_asr:{} e:{}!!!!!!!!!!!!!!!!!!!!!".format(self.AI_client_asr_isconnect,self.AI_client_asr_debug))\r
-        self.AI_ASR_text_repet_count = 0\r
-        self.AI_ASR_check_timeout = 0\r
-        self.AI_ASR_error_timeout = 0\r
-        self.AI_ASR_text_tmp = ""\r
-        if self.AI_client_asr_isconnect == 1:\r
-            return\r
-        # 创建ASR客户端\r
-        try:\r
-            signal = net.csqQueryPoll()\r
-            if signal == -1 or sim.getStatus() != 1:#网络正常\r
-                self.websocket_error()\r
-                return\r
-\r
-            # self.AI_client_asr = uwebsocket.Client.connect('wss://nls-gateway-cn-beijing.aliyuncs.com/ws/v1',headers=Headers, debug=False)\r
-            req_str = ""\r
-            platform = "platform=huoshan"\r
-            #platform= "platform=xfyun-ita"\r
-            platform= "platform=xfyun-bigmodel-ita"\r
-            lang = "lang=zh-cn"#普通话测试环境\r
-            try:\r
-                if "loang" in self.VC_TTS_voice_type[self.VC_TTS_voice_key]:\r
-                    lang = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["lang"]\r
-                else:\r
-                    print("not lang!!!!!!!!!!!!!!!!!!!!!!")\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-            req_str = "asr/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)\r
-            print("req_str:{}".format(req_str))\r
-            token = EventMesh.publish("get_dev_token")\r
-            print("token:{}".format(token))\r
-            url = 'ws://{}/{}&dt={}'.format(self.server_ip,req_str,token)\r
-            print("websocket_connect_asr URL:{}".format(url))\r
-            self.AI_client_asr = uwebsocket.Client.connect(url, debug=True)#\r
-            #self.AI_WS_connect_Queue.put(self.AI_client_asr)\r
-            \r
-        except Exception as e: #网络连接异常\r
-            usys.print_exception(e)\r
-            \r
-            print("websocket_connect_asr error!!!\r\n")\r
-            #self.connect_timerout_popup(2)  \r
-            str_error = str(e)\r
-            if str_error.find("[Errno 22] EINVAL")!= -1: \r
-                self.websocket_error()\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                EventMesh.publish("set_storage_config",["powerRestart",1])#调试临时关闭\r
-                utime.sleep_ms(1000)\r
-                self.aud.stopPlayStream()\r
-                self.aud.stopAll()\r
-                Power.powerRestart()\r
-                \r
-            self.websocket_error()\r
-            \r
-            return\r
-        if self.AI_client_asr == None:\r
-            EventMesh.publish_async("update_dev_token",thread_size = 8192)#获取token\r
-            return \r
-        self.AI_client_asr_debug+=1\r
-        utime.sleep_ms(10)\r
-        #self.AI_client_asr.settimeout(5)\r
-        #开启发送线程\r
-        if self.AI_ASR_send_data_queue_thread_id == 0:    \r
-            _thread.stack_size(self.Audio_buf_size+8*1024)\r
-            self.AI_ASR_send_data_queue_thread_id = _thread.start_new_thread(self.AI_ASR_send_data_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            print("AI_VC_start :AI_ASR_send_data_queue_thread_id :{} ".format(self.AI_ASR_send_data_queue_thread_id))\r
-        print("websocket_connect_asr 222!!!\r\n")\r
-        self.AI_client_asr_recv_thread_close()#关闭读线程\r
-        # 创建线程接收数据\r
-        _thread.stack_size(self.Audio_buf_size+8*1024)\r
-        self.AI_client_asr_recv_id = _thread.start_new_thread(self.AI_client_asr_recv, (self.AI_client_asr,))\r
-        _thread.stack_size(8*1024)\r
-        self.AI_client_asr_isconnect = 1\r
-        self.AI_ASR_timer.start(1000, 1, self.AI_ASR_timer_cb)\r
-        self.AI_client_asr_start_requset()#开始请求\r
-        print("websocket_connect_asr:OK!!!!!!!!!!!!!!!!!!!!!")\r
-\r
-    def websocket_deconnect_asr(self):\r
-        print("websocket_deconnect_asr {}!!!!!!!".format(self.AI_client_asr_isconnect))\r
-        print("websocket_deconnect_asr!!!!!!!")\r
-        self.AI_ASR_text_repet_count = 0\r
-        self.AI_ASR_text_tmp = ""\r
-        self.AI_ASR_timer.stop()\r
-        #self.AI_ASR_send_data_queue_thread_close()#关闭发送线程\r
-        self.AI_client_asr_recv_thread_close()#关闭读线程\r
-        if self.AI_client_asr_isconnect == 1 or self.AI_client_asr!= None:\r
-            try:\r
-                self.AI_client_asr_isconnect = 0\r
-                count = 500\r
-                while True:#等待发完数据\r
-                    count-=1\r
-                    if count <=0 or self.AI_ASR_send_data_queue_thread_lock == 0:\r
-                        break\r
-                    print("等待发送完成:{}".format(count))\r
-                    if self.AI_ASR_send_data_queue.empty()!=True:\r
-                        self.AI_ASR_send_data_queue.clear()\r
-                    utime.sleep_ms(1)\r
-                \r
-                try:\r
-                    self.AI_client_asr_StopTranscription_requset()#发送停止ASR\r
-                    self.AI_client_asr.close()\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                    utime.sleep_ms(200)#再尝试关闭一次\r
-                    try:\r
-                        self.AI_client_asr.close()\r
-                        \r
-                    except Exception as e:\r
-                        usys.print_exception(e)\r
-                self.AI_client_asr_debug-=1\r
-                try:\r
-                    self.AI_client_asr._close()\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                self.AI_client_asr = None\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        print("websocket_deconnect_asr {}!!!!!!!".format(self.AI_client_asr_isconnect))\r
-\r
-    #websocket发送数据    \r
-    def AI_client_asr_send(self,data_str):\r
-        # if isinstance(data_str, str):#是字符串\r
-        #     print("ASR ASR AI_client_asr_send:{}".format(data_str))\r
-        #     pass\r
-        # else:\r
-        #     pass\r
-        #     #print("ASR ASR AI_client_asr_send:len:{}".format(len(data_str)))\r
-        self.AI_ASR_send_data_queue.put([AI_client_asr_num,data_str]) \r
-\r
-    def AI_client_asr_ping(self):\r
-        pass\r
-        if self.AI_client_asr_isconnect == 1:\r
-            #self.AI_client_asr.write_frame(0x09,b'ping ping')\r
-            self.AI_client_asr_send("ping")\r
-    def set_AI_ASR_flag(self,data):\r
-        self.AI_ASR_flag = data\r
-    def AI_ASR_timer_cb(self, *args): #\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_ASR_timer_cb_}) \r
-\r
-    def AI_ASR_timer_cb_(self):    \r
-        if self.AI_ASR_check_timeout > 0:\r
-            print("AI_ASR_check_timeout:{}".format(self.AI_ASR_check_timeout))\r
-            self.AI_ASR_check_timeout-=1\r
-            if self.AI_ASR_check_timeout <=0:\r
-                self.AI_ASR_check_timeout = 0\r
-                self.AI_ASR_error_timeout = 3#发送停止后3秒后没正式结果就提示\r
-                #EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_asr_StopTranscription_requset})\r
-                \r
-        if self.AI_ASR_error_timeout>0:\r
-            self.AI_ASR_error_timeout-=1\r
-            print("AI_ASR_error_timeout:{}".format(self.AI_ASR_error_timeout))  \r
-            if self.AI_ASR_error_timeout <= 0:\r
-                self.AI_ASR_error_timeout = 0\r
-                #if self.AI_ASR_str == "":\r
-                if self.AI_ASR_str_tmp == "" and self.AI_ASR_str == "" and self.AI_ASR_text_tmp == "":\r
-                    self.AI_TTS_str = "没有识别到您说话,请重试" \r
-                else :\r
-                    self.AI_ASR_str = self.AI_ASR_str_tmp + self.AI_ASR_str+self.AI_ASR_text_tmp\r
-                    self.AI_ASR_str_tmp = self.AI_ASR_str\r
-                print("AI_ASR_error_timeout2:重连:{}!!!!!!!!!!\r\n".format(self.AI_ASR_str) )\r
-                print("AI_ASR_error_timeout2:重连:{}!!!!!!!!!!\r\n".format(self.AI_ASR_str) )\r
-                print("AI_ASR_error_timeout2:重连:{}!!!!!!!!!!\r\n".format(self.AI_ASR_str) )\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr}) \r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_connect_asr}) #重连ASR\r
-                #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End}) #重连ASR\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.set_AI_ASR_flag,"data":1})#设置以打断过一次\r
-                if self.VC_record_state_flag > 1:\r
-                    self.VC_record_state_flag =1\r
-        pass\r
-    #关闭ASR数据发送线程\r
-    def AI_ASR_send_data_queue_thread_close(self):\r
-        if self.AI_ASR_send_data_queue_thread_id != 0:\r
-            count =500\r
-            while True:\r
-                count -= 1     \r
-                if self.AI_ASR_send_data_queue_thread_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    self.AI_ASR_send_data_queue_thread_lock = 2\r
-                    print("AI_ASR_send_data_queue_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-            self.AI_ASR_send_data_queue_thread_lock = 0\r
-            print("AI_ASR_send_data_queue_thread_close")\r
-            try:\r
-                _thread.stop_thread(self.AI_ASR_send_data_queue_thread_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.AI_ASR_send_data_queue_thread_id = 0\r
-    #发送数据队列\r
-    def AI_ASR_send_data_queue_thread(self):\r
-        print("AI_ASR_send_data_queue_thread:start")\r
-        count_t = 0\r
-        while True:\r
-            if self.AI_ASR_send_data_queue_thread_lock == 2:\r
-                print("AI_ASR_send_data_queue_thread:该退出了")\r
-                break\r
-            if self.AI_ASR_send_data_queue.empty() :#不能去掉,去掉会卡死\r
-                self.AI_ASR_send_data_queue_thread_lock = 0  \r
-                count_t+=1\r
-                utime.sleep_ms(1)\r
-            else:\r
-                #data[0]是websocket连接对象编号,data[1]是数据\r
-                #print("AI_ASR_send_data_queue_thread:get")\r
-                \r
-                self.AI_ASR_send_data_queue_thread_lock = 1\r
-                data = self.AI_ASR_send_data_queue.get()\r
-                #print("AI_ASR_send_data_queue_thread:num{} len{}".format(data[0],len(data[1])))\r
-                if data != None:\r
-                    try:\r
-                        # 发送数据\r
-                        if data[0] == AI_client_asr_num:\r
-                            self.AI_ASR_send_buf_len -= len(data[1])\r
-                            self.asr_pingping_timerout = 0\r
-                            if self.AI_client_asr != None and self.AI_client_asr_isconnect == 1:\r
-                                self.AI_client_asr.send(data[1])\r
-                                if isinstance(data[1], str):#是字符串\r
-                                    print("ASR ASR: send_data:{}".format(data[1]))\r
-                                # else:\r
-                                #     print("ASR ASR: send_data!:{}".format(len(data[1])))\r
-                            else:\r
-                                if isinstance(data[1], str):#是字符串\r
-                                    print("ASR ASR: send_data error!!!:{}".format(data[1]))\r
-                                else:\r
-                                    print("ASR ASR: send_data error!!!:{}".format(len(data[1])))\r
-\r
-                    except Exception as e:\r
-                        usys.print_exception(e)\r
-                        if data[0] == AI_client_asr_num: \r
-                            if self.AI_client_asr_isconnect != 0:\r
-                                print("ASR发送数据错误,退出")\r
-                                EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR发送出错了,请重试"}) \r
-                                self.ud_error(["asr",self.asr_taskid])\r
-                            #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_connect_asr}) #重连\r
-                    utime.sleep_ms(1)\r
-        self.AI_ASR_send_data_queue_thread_lock = 0    \r
-\r
-    #ASR关闭读线程\r
-    def AI_client_asr_recv_thread_close(self):\r
-        if self.AI_client_asr_recv_id != 0:\r
-            count =500\r
-            while True:\r
-                count -= 1\r
-                if self.AI_client_asr_recv_lock == 1:\r
-                    self.AI_client_asr_recv_lock = 2\r
-                if self.AI_client_asr_recv_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    print("AI_client_asr_recv_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-            self.AI_client_asr_recv_lock = 0\r
-            print("AI_client_asr_recv_thread_close")\r
-            try:\r
-                _thread.stop_thread(self.AI_client_asr_recv_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.AI_client_asr_recv_id = 0\r
-\r
-    #Ai ASR websocket返回数据       \r
-    def AI_client_asr_recv(self,cli):\r
-        while True:\r
-            try:\r
-                # 死循环接收数据\r
-                self.AI_client_asr_recv_lock = 0\r
-                utime.sleep_ms(1)\r
-                recv_data = cli.recv()\r
-                if self.AI_client_asr_recv_lock == 2:#要关闭线程了\r
-                    print("AI_client_asr_recv 该退出了")\r
-                    break\r
-                self.AI_client_asr_recv_lock = 1\r
-                self.close_timerout = 0#服务器有返回清零退出时间\r
-                if recv_data == "websocket close":\r
-                    # 服务器关闭连接\r
-                    print("ASR 服务器主动关闭连接!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-                    \r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR连接断开了,请重试"}) \r
-                    self.ud_error(["asr",self.asr_taskid])\r
-                    break\r
-                elif recv_data == "":#客户端关闭连接\r
-                    print("ASR ASR :客户端关闭连接")\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR连接断开了,请重试"}) \r
-                    self.ud_error(["asr",self.asr_taskid])\r
-                    break\r
-                try:\r
-                    if isinstance(recv_data, str):\r
-                        jsload_data =  ujson.loads(recv_data)\r
-                        print("ASR ASR recv_data: {}".format(jsload_data))\r
-                        if jsload_data["status"] != 20000000:#返回错误\r
-                            print("ASR返回非20000000状态码,退出")\r
-                            EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR出错了,请重试"}) \r
-                            self.ud_error(["asr",self.asr_taskid])\r
-                            break\r
-                        \r
-                        if jsload_data["task_id"] != None:\r
-                            self.asr_taskid  = jsload_data["task_id"]\r
-                        if jsload_data["event"] != None:\r
-                            if jsload_data["event"] == "TranscriptionStarted": #开始录音\r
-                                self.VC_record_state_flag = 2\r
-                                self.VC_state =  VC_State_SpeechStart\r
-                                EventMesh.publish("open_led_blue")\r
-                                self.AI_ASR_error_timeout = 0\r
-                                \r
-                                pass\r
-\r
-                            elif jsload_data["event"] == "Changed" or jsload_data["event"] == "SentenceEnd" : #开始录音Changed\r
-                                # if self.VC_record_state_flag == 2:\r
-                                #     \r
-                                \r
-                                self.AI_ASR_timer_count = 0\r
-                                if jsload_data["result"]["result"]:\r
-                                    #self.AI_listen_text = str(jsload_data["result"]["result"])\r
-                                    text= str(jsload_data["result"]["result"])\r
-                                    print("ASR recv self.VC_state :{}".format(self.VC_state))\r
-                                    if self.is_long_record == 0:\r
-                                        if self.VC_state >= VC_State_TTSStart:#开始播音后不响应asr结果\r
-                                            print("asr continue")\r
-                                            continue\r
-                                    EventMesh.publish("open_led_blue")\r
-                                    \r
-                                    if jsload_data["result"]["is_end"] == True:  #asr结束\r
-                                        self.AI_ASR_check_timeout = 0\r
-                                        self.AI_ASR_error_timeout = 0\r
-                                        self.AI_ASR_text_repet_count = 0\r
-                                        self.AI_ASR_text_tmp = ""\r
-                                        self.VC_record_state_flag = 4\r
-                                        ret= self.check_text(text)\r
-                                        if ret == 0:#配置指令\r
-                                            \r
-                                            if self.AI_VC_send_data_queue.empty()!=True:\r
-                                                self.AI_VC_send_data_queue.clear()\r
-                                            if self.AI_ASR_send_data_queue.empty()!=True:\r
-                                                self.AI_ASR_send_data_queue.clear()\r
-                                            self.AI_ASR_send_buf_len = 0\r
-                                            EventMesh.publish("open_led_all")\r
-                                            try:\r
-                                                \r
-                                                EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})\r
-                                                #print("AI_client_asr_recv VC_Speech_End") \r
-                                                EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC}) \r
-                                                #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr})\r
-                                                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                                            except Exception as e:\r
-                                                usys.print_exception(e)\r
-                                            continue\r
-                                        elif ret == 1:#不处理\r
-                                            pass\r
-                                        else:#正常asr\r
-                                            if self.VC_mode == 0 :#连续问答模式\r
-                                                self.AI_ASR_str = text#\r
-                                                if self.AI_ASR_flag == 0:#d第一次识别,没有打断\r
-                                                    self.AI_ASR_str_tmp = self.AI_ASR_str\r
-                                                else:#第二次识别,打断了\r
-                                                    self.AI_ASR_str = self.AI_ASR_str_tmp+text\r
-                                                    print("ASR ASR 打断 续集 AI_ASR_str {}".format(self.AI_ASR_str))\r
-                                                    self.AI_ASR_str_tmp = self.AI_ASR_str\r
-                                                    if self.is_long_record != 0:\r
-                                                        #if self.VC_state >= VC_State_TTSStart:#如果已经播放了,关闭VC连接,重新打开,处理音频数据太多问题\r
-                                                        EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC})#关闭vc连接\r
-                                                self.AI_ASR_flag  = 1\r
-                                                print("asr recv :asr_str:{}".format(self.AI_ASR_str))  \r
-                                                #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,"data":(500)}) #等一秒\r
-                                                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                                            elif self.VC_mode == 1:#单对话模式\r
-                                                self.AI_ASR_str += text#\r
-                                                self.AI_ASR_str_tmp = self.AI_ASR_str\r
-                                                if self.key_state == 0:#按键已经弹起\r
-                                                    self.AI_ASR_str_tmp =""\r
-                                                    print("asr recv :asr_str:{}".format(self.AI_ASR_str))  \r
-                                                    #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,"data":(500)}) #等一秒\r
-                                                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                                        self.VC_state =  VC_State_SpeechEnd\r
-                                    elif jsload_data["result"]["is_end"] == False:\r
-                                        \r
-                                        self.VC_state =  VC_State_SpeechIng\r
-                                        if self.AI_ASR_text_tmp != "" and self.AI_ASR_text_tmp  == text:\r
-                                            pass\r
-                                            # self.AI_ASR_text_repet_count+=1\r
-                                            # if self.AI_ASR_text_repet_count>=40:#重复30次下发一样结果,就报错\r
-                                            #     print("asr 错误,无正式结果:{}".format(text))\r
-                                            #     #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error})#\r
-                                            #     EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR出错了,请重试"}) \r
-                                        else:\r
-                                            self.AI_ASR_check_timeout = 5 #5秒没更新结果,强制stop\r
-                                            self.AI_ASR_error_timeout = 0\r
-                                            self.AI_ASR_text_repet_count = 0\r
-                                        if self.VC_mode == 0 :#连续问答模式\r
-                                            self.AI_ASR_text_tmp = text\r
-                                            self.VC_record_state_flag = 3\r
-                                            if self.AI_ASR_flag ==1 :#如果已经识别过一次asr\r
-                                                self.AI_ASR_flag = 2\r
-                                                print("asr 打断,关闭VC连接")\r
-                                                self.AI_ASR_str = ""\r
-                                                if self.is_long_record != 0:\r
-                                                    self.VC_Play_End()\r
-                                                    EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC})#关闭vc连接\r
-                                                # EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_connect_VC})#连接服务器\r
-                                                # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_start_requset})#请求\r
-                                                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                                                EventMesh.publish("publish_AI_btnInfo",{"func":EventMesh.publish,"data":"open_led_blue"})#\r
-                                        elif self.VC_mode ==1:#单对话模式\r
-                                            self.AI_ASR_str_tmp =""\r
-                        \r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                \r
-            except Exception as e:\r
-                    error_str = str(e)\r
-                    print("ASR ASR:e:{}".format(error_str))\r
-                    #usys.print_exception(e)\r
-                    if error_str.find("[Errno 110]")!= -1:\r
-                        #print("ASR ASR:recv TIMEDOUT 正常")\r
-                        pass\r
-                    else:\r
-                        usys.print_exception(e)\r
-                        print("{}".format(cli))\r
-                        #self.websocket_error()\r
-                        print("ASR读数据报错,退出")\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR出错了,请重试"})#\r
-                        self.ud_error(["asr",self.asr_taskid])\r
-                        break\r
-        self.AI_client_asr_isconnect = 0\r
-        self.AI_client_asr_recv_id = 0 \r
-        self.AI_client_asr_recv_lock = 0\r
-        print("AI_client_asr_recv END!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-    #ASR开始会话\r
-    def AI_client_asr_start_requset(self):\r
-        self.session_id  = self.get_session_id()\r
-        json_data = \\r
-        { \r
-            "header":{\r
-                "event":"StartTranscription",\r
-                "trace_id":self.get_trace_id()\r
-                },\r
-            "payload":{\r
-                "format":"pcm",\r
-                "sample_rate":self.VC_record_samplerate,\r
-                 "session_id": self.session_id ,\r
-                }\r
-            \r
-        }\r
-        if self.VC_record_TYPE == VC_record_TYPE_AMR :\r
-            json_data["payload"]["format"]='amr'\r
-            pass\r
-        \r
-        self.AI_ASR_error_timeout = 5\r
-        self.AI_client_asr_send(ujson.dumps(json_data))\r
-    #ASR终止\r
-    def AI_client_asr_StopTranscription_requset(self):   \r
-        print("AI_client_asr_StopTranscription_requset!!!!!")\r
-        json_data = \\r
-        {\r
-            "header":{\r
-                "event":"StopTranscription",\r
-                "trace_id":self.get_trace_id()\r
-                }\r
-        }\r
-\r
-        #self.AI_client_asr_send(ujson.dumps(json_data))\r
-        if self.AI_client_asr != None and self.AI_client_asr_isconnect == 1:\r
-            self.AI_client_asr.send(ujson.dumps(json_data))\r
-                \r
-     #开始录音\r
-    def VC_Speech_Start(self):\r
-        try:\r
-            \r
-            #self.VC_state =  VC_State_SpeechStart\r
-            print("VC_Speech_Start VC_record_state_flag:{} self.AI_ASR_flag:{}!!!!!!!!".format(self.VC_record_state_flag,self.AI_ASR_flag))  \r
-            if self.AI_ASR_flag  != 0:\r
-                return\r
-            \r
-            if self.VC_record_state_flag  == 0:\r
-                if dev_type != "7PIN" :\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.chenggong_tone}) \r
-                #self.websocket_connect_asr()   \r
-                self.VC_record_thread_close()#关闭录音线程\r
-                _thread.stack_size(self.Audio_buf_size+8*1024)\r
-                self.VC_record_thread_id = _thread.start_new_thread(self.VC_record_thread,())\r
-                _thread.stack_size(8*1024)\r
-                print("self.VC_record_thread_id:{}".format(self.VC_record_thread_id))\r
-                try:\r
-                    \r
-                    if self.VC_record_TYPE == VC_record_TYPE_AMR :\r
-                        try :\r
-                            self.record.stream_start(audio.Record.AMRNB, self.VC_record_samplerate, 0)\r
-                        except Exception as e:\r
-                                usys.print_exception(e)\r
-                    elif self.VC_record_TYPE == VC_record_TYPE_PCM:\r
-                        print("record_pcm.stream_read_start()!!!!!!!!!!!!")\r
-                        self.record.stream_start(audio.Record.WAV, self.VC_record_samplerate, 0)\r
-                        # if self.record_pcm != None:\r
-                        #     try:\r
-                        #         self.record_pcm.stream_stop()\r
-                        #         self.record_pcm.close()\r
-                        #         self.record_pcm = None\r
-                        #     except Exception as e:\r
-                        #         usys.print_exception(e)\r
-                        # if self.record_pcm == None:        \r
-                        #     ret = self.record_pcm = audio.Audio.PCM(0,1,16000,0,1,2)\r
-                        #     print("audio.Audio.PCM:ret:{}".format(ret))\r
-                        #     ret = self.record_pcm.stream_read_start()\r
-                        #     print("self.record_pcm.stream_read_start:ret:{}".format(ret))\r
-                except Exception as e:\r
-                    usys.print_exception(e) \r
-                    \r
-                self.VC_record_state_flag = 2\r
-        except Exception as e:\r
-            self.websocket_error()\r
-            self.VC_record_state_flag = 1\r
-            self.VC_Speech_End()#关闭录音\r
-            usys.print_exception(e)\r
-\r
-    #停止录音\r
-    def VC_Speech_End(self):\r
-        try:\r
-            self.AI_ASR_flag = 0\r
-            self.AI_ASR_str_tmp = ""\r
-            self.AI_ASR_str = ""\r
-            #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr})\r
-              \r
-            if self.VC_record_state_flag == 0:\r
-                return\r
-            #self.AI_client_asr_StopTranscription_requset()#请求停止\r
-            if self.VC_record_TYPE == VC_record_TYPE_AMR:\r
-                self.record.stream_stop()\r
-                self.record.stop()#关闭录音\r
-                Record_read_buf = bytearray(self.Audio_buf_size)\r
-                for i in range(10):\r
-                    Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)\r
-                    print("Record_len:!!!!!!{}".format(Record_len))\r
-                    if Record_len <= 0:\r
-                        break\r
-            elif self.VC_record_TYPE == VC_record_TYPE_PCM:\r
-                self.record.stream_stop()\r
-                self.record.stop()#关闭录音\r
-                Record_read_buf = bytearray(self.Audio_buf_size)\r
-                for i in range(10):\r
-                    Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)\r
-                    print("Record_len:!!!!!!{}".format(Record_len))\r
-                    if Record_len <= 0:\r
-                        break\r
-                # if self.record_pcm != None:\r
-                #     try:\r
-                #         self.record_pcm.stream_stop()\r
-                #         self.record_pcm.close()\r
-                #         self.record_pcm = None\r
-                #     except Exception as e:\r
-                #         usys.print_exception(e)\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        self.VC_record_thread_close()#关闭录音线程\r
-        if self.AI_record_tmp_queue.empty() != True:\r
-            self.AI_record_tmp_queue.clear()\r
-        # try:\r
-        #     self.websocket_deconnect_asr()\r
-        # except Exception as e:\r
-        #     usys.print_exception(e)  \r
-        self.VC_record_state_flag = 0\r
-        print("VC_Speech_End VC_record_state_flag:{}!!!!!!!!".format(self.VC_record_state_flag))   \r
-    #关闭录音线程   \r
-    def VC_record_thread_close(self): \r
-        if self.VC_record_thread_id != 0:\r
-            count =50\r
-            while True:\r
-                count -= 1\r
-                if self.VC_record_thread_lock == 1:\r
-                    self.VC_record_thread_lock = 2\r
-                if self.VC_record_thread_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    print("VC_record_thread_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-            self.VC_record_thread_lock = 0\r
-            print("VC_record_thread_thread_close")\r
-            try:\r
-                _thread.stop_thread(self.VC_record_thread_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.VC_record_thread_id = 0\r
-    #获取录音数据\r
-    def VC_record_thread(self):\r
-        ##return\r
-        print("VC_record_thread start!!!!!!!!!!!!!!!!!!!!\r\n")\r
-        count = 0\r
-        # try:\r
-        #     uos.remove('/usr/test.pcm')\r
-        # except Exception as e:\r
-        #     usys.print_exception(e)\r
-        #record_data_queue = Queue(100)\r
-        #fd = open('/usr/test.pcm','w')\r
-        # if self.VC_record_TYPE == 1:\r
-        #     h_data= [0x23,0x21 ,0x41 ,0x4D ,0x52 ,0x0A ]\r
-        #     h_data_b = bytes(h_data)\r
-        #     self.AI_client_VC_send(h_data_b)\r
-        AI_record_tmp_queue_len = 0\r
-        while True:\r
-            try:\r
-                if self.VC_record_thread_lock == 2:\r
-                    break\r
-                self.VC_record_thread_lock = 1\r
-                # 死循环接收数据\r
-                #if self.VC_state ==  VC_State_SpeechStart:\r
-                Record_read_buf = bytearray(self.Audio_buf_size)\r
-                \r
-                Record_len = 0\r
-                if self.VC_record_TYPE == VC_record_TYPE_PCM:#pcm\r
-                    Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)\r
-                    utime.sleep_ms(20)\r
-                    \r
-                else :\r
-                    \r
-                    Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)\r
-                    utime.sleep_ms(600)\r
-\r
-                #Record_len = 1024*2\r
-                #print("VC_record_thread:{}".format(Record_len))\r
-                if Record_len > 0:\r
-                    read_buf = bytes(Record_read_buf[:Record_len])\r
-                    if self.record_data_save_flag == 1:\r
-                        if self.record_fd == None:\r
-                            try:\r
-                                uos.remove('/usr/record_data.pcm')\r
-                            except Exception as e:\r
-                                usys.print_exception(e)\r
-                            self.record_fd = open('/usr/record_data.pcm','w')\r
-                        if self.record_fd != None:\r
-                            self.record_fd.write(read_buf)\r
-                            print("write record:{}".format(len(read_buf)))\r
-                            # count+=Record_len\r
-                            # if count >150*1024:\r
-                            #     self.record_fd.close()\r
-                                #self.record_fd = None\r
-                    # if self.VC_record_state_flag >= 2:\r
-                    #     self.AI_client_asr_send(read_buf)\r
-                    \r
-                    if self.VC_record_state_flag <=1 :#没发送前先存起来\r
-                        self.AI_record_tmp_queue.put(read_buf)\r
-                        AI_record_tmp_queue_len += len(read_buf)\r
-                    else:\r
-                        AI_record_tmp_queue_len = 0\r
-                        while True:\r
-                            if self.AI_record_tmp_queue.empty() == True:\r
-                                break\r
-                            else:\r
-                                self.AI_client_VC_input_audio_buffer_append(self.AI_record_tmp_queue.get())\r
-                                #self.AI_client_asr_send(self.AI_record_tmp_queue.get())  #发送之前存的数据\r
-                        #self.AI_client_asr_send(read_buf)   \r
-                        self.AI_client_VC_input_audio_buffer_append(read_buf)\r
-                    #print("VC_record_thread:{}".format(len(read_buf)))\r
-                    #count+=len(read_buf)\r
-                # if count>=500*1024:#结束\r
-                #     self.AI_client_VC_end_speech()\r
-                #     break\r
-                # count+=1\r
-                # if count %10 == 0:\r
-                #     print("VC_record_thread on line {} asr recv :{} send:{}".format(self.VC_record_state_flag,_thread.threadIsRunning(self.AI_client_asr_recv_id),_thread.threadIsRunning(self.AI_VC_send_data_queue_thread_id)))\r
-                \r
-                # if self.VC_state >=  VC_State_SpeechEnd:\r
-                #     break\r
-                \r
-            except Exception as e:\r
-                    usys.print_exception(e)\r
-                    #break\r
-            self.VC_record_thread_lock = 0\r
-            utime.sleep_ms(100)\r
-        #fd.close()\r
-        print("VC_record_thread:exit")\r
-        self.VC_record_thread_id = 0#线程退出\r
-        self.VC_record_thread_lock = 0\r
-###################################################### VC ###################################################################################\r
-    def websocket_connect_VC(self):\r
-        print("websocket_connect_VC:{} e:{}!!!!!!!!!!!!!!!!!!!!!".format(self.AI_client_VC_isconnect,self.AI_client_VC_debug))\r
-        if self.AI_client_VC_isconnect == 1:\r
-            return\r
-        # 创建VC客户端\r
-        try:\r
-            signal = net.csqQueryPoll()\r
-            if signal == -1 or sim.getStatus() != 1:#网络正常\r
-                self.websocket_error()\r
-                return\r
-            try:\r
-                if "bot_name" in self.VC_TTS_voice_type[self.VC_TTS_voice_key]:\r
-                    self.bot_name = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["bot_name"]\r
-                else:\r
-                    print("not bot_name!!!!!!!!!!!!!!!!!!!!!!")\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-            \r
-            # Headers = {'X-NLS-Token':'0c8b8f05a46f423096be64a9c4c46310'}\r
-            # self.AI_client_VC = uwebsocket.Client.connect('wss://nls-gateway-cn-beijing.aliyuncs.com/ws/v1',headers=Headers, debug=False)\r
-            \r
-            url="wss://ws.coze.cn/v1/chat?bot_id=7462617881076351002"\r
-            print("VC VC:url{}".format(url))\r
-            Headers = {"Authorization":"Bearer pat_SSaiOzccrRLaQEaB4sdshvHZQzqjeWD5jq2GWPVoWRx4N8XcdraHWYqdDjK5zpR1"}\r
-            self.AI_client_VC = uwebsocket.Client.connect(url, headers=Headers,debug=True)\r
-            #self.AI_WS_connect_Queue.put(self.AI_client_VC)\r
-\r
-       \r
-            print("websocket_connect_VC:OK!!!!!!!!!!!!!!!!!!!!!")\r
-        except Exception as e: #网络连接异常\r
-            usys.print_exception(e)\r
-            print("websocket_connect_VC error!!!\r\n")\r
-            str_error = str(e)\r
-            if str_error.find("[Errno 22] EINVAL")!= -1: \r
-                print("websocket_connect_VC:str_error:{}".format(str_error))\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                self.websocket_error()\r
-                EventMesh.publish("set_storage_config",["powerRestart",1])#调试临时关闭\r
-                utime.sleep_ms(1000)\r
-                self.aud.stopPlayStream()\r
-                self.aud.stopAll()\r
-                Power.powerRestart()\r
-                \r
-            self.websocket_error()\r
-            return\r
-        #print("AI_client_VC:{}".format(self.AI_client_VC))\r
-        if self.AI_client_VC == None:\r
-            EventMesh.publish("update_dev_token")#获取token\r
-            self.websocket_error()\r
-            return\r
-        self.AI_client_VC_debug+=1\r
-        utime.sleep_ms(10)\r
-        #self.AI_client_VC.settimeout(5)\r
-        #self.AI_VC_send_data_queue_thread_close()#关闭发送线程\r
-        if self.AI_VC_send_data_queue_thread_id == 0:    \r
-            _thread.stack_size(self.Audio_buf_size+8*1024)\r
-            self.AI_VC_send_data_queue_thread_id = _thread.start_new_thread(self.AI_VC_send_data_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            print("AI_VC_start :AI_VC_send_data_queue_thread_id :{} ".format(self.AI_VC_send_data_queue_thread_id))\r
-        self.AI_client_VC_recv_thread_close()#关闭读线程\r
-        # 线程接收数据\r
-        _thread.stack_size(self.Audio_buf_size+8*1024)\r
-        self.AI_client_VC_recv_id = _thread.start_new_thread(self.AI_client_VC_recv, (self.AI_client_VC,))\r
-        _thread.stack_size(8*1024)\r
-        self.AI_client_VC_isconnect = 1\r
-        print("websocket_connect_VC end")\r
-\r
-    def websocket_error(self,TTS_str=None):\r
-        print("websocket_error1!!!!")\r
-        self.Close()\r
-        print("websocket_error1.1!!!!")\r
-        print("websocket_error!!!!")\r
-        print("websocket_error!!!!")\r
-        self.VC_Thinking_timerout = 0\r
-        self.VC_satrt_flag = 0\r
-        self.AI_TTS_str = ""\r
-        self.AI_ASR_str = ""\r
-        self.AI_ASR_str_tmp = ""\r
-        self.AI_ASR_flag  = 0\r
-        self.VC_Speech_End()\r
-        EventMesh.publish("close_led")\r
-        if TTS_str == None:\r
-            self.websocket_error_count+=1\r
-            # if self.websocket_error_count <=3:\r
-            #     EventMesh.publish("audio_montage_play",["xinhaoruo1.mp3"])\r
-            if self.websocket_error_count <10 :\r
-                EventMesh.publish("audio_montage_play",["xinhaoruo1.mp3"])\r
-            elif self.websocket_error_count >=10:\r
-                EventMesh.publish("paly_iccid_imei")    \r
-            # else:\r
-            #     EventMesh.publish("audio_montage_play",["R_SIM_FAILE.mp3"])\r
-            #self.aud.play(1,1,'U:/static/R_SIM_FAILE.mp3')\r
-            if self.websocket_error_count <3 :\r
-                utime.sleep_ms(3000)\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})\r
-        else:\r
-            print("websocket_error:tts:{}".format(TTS_str))\r
-            self.AI_TTS_str = TTS_str\r
-            EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})\r
-        print("websocket_error2")\r
-       \r
-        \r
-        print("websocket_error4")\r
-        \r
-\r
-    def websocket_deconnect_VC(self):\r
-        #print("websocket_deconnect_VC {}!!!!!!!".format(self.AI_client_VC_isconnect))\r
-        print("websocket_deconnect_VC!!!!!!!")\r
-        self.AI_client_VC_recv_thread_close()#关闭读线程\r
-        self.AI_client_VC_recv_id = 0\r
-        if self.AI_client_VC_isconnect == 1 or self.AI_client_VC!=None:\r
-            try:\r
-                self.AI_client_VC_isconnect = 0\r
-                count = 500\r
-                while True:#等待发完数据\r
-                    count-=1\r
-                    if count <=0 or self.AI_VC_send_data_queue_thread_lock == 0:\r
-                        break\r
-                    utime.sleep_ms(1)\r
-                \r
-                try:\r
-                    self.AI_client_VC.close()\r
-                    self.AI_client_VC_debug -=1\r
-                    #self.AI_client_VC=None\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                    try :\r
-                        self.AI_client_VC.close()\r
-                        self.AI_client_VC_debug -=1\r
-                        #self.AI_client_VC=None\r
-                    except Exception as e:\r
-                        usys.print_exception(e)\r
-                try :\r
-                    self.AI_client_VC._close()\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                self.AI_client_VC = None\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        print("websocket_deconnect_VC {}!!!!!!!".format(self.AI_client_VC_isconnect))\r
-    #websocket发送ping\r
-    def AI_client_VC_ping(self):\r
-        pass\r
-        if self.AI_client_VC_isconnect == 1:\r
-            #self.AI_client_VC.write_frame(0x09,b'ping ping')\r
-            self.AI_client_VC_send("ping")\r
-            #print("websocket ping ping")\r
-\r
-    #websocket发送数据    \r
-    def AI_client_VC_send(self,data_str):\r
-        # if isinstance(data_str, str):#是字符串\r
-        #     print("AI_client_VC_send:{}".format(data_str))\r
-        #     pass\r
-        # else:\r
-        #     print("AI_client_VC_send:len{}".format(len(data_str)))\r
-        self.AI_VC_send_data_queue.put([AI_client_VC_num,data_str]) \r
-     #关闭数据发送线程\r
-    def AI_VC_send_data_queue_thread_close(self):\r
-        if self.AI_VC_send_data_queue_thread_id != 0:\r
-            count =500\r
-            while True:\r
-                count -= 1\r
-                if self.AI_VC_send_data_queue_thread_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    self.AI_VC_send_data_queue_thread_lock = 2\r
-                    print("AI_VC_send_data_queue_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-                    if self.AI_VC_send_data_queue.empty()!=True:\r
-                        self.AI_VC_send_data_queue.clear()\r
-            self.AI_VC_send_data_queue_thread_lock = 0\r
-            print("AI_VC_send_data_queue_thread_close")\r
-            try:\r
-                _thread.stop_thread(self.AI_VC_send_data_queue_thread_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.AI_VC_send_data_queue_thread_id = 0\r
-    #发送数据队列\r
-    def AI_VC_send_data_queue_thread(self):\r
-        print("AI_VC_send_data_queue_thread:start")\r
-        count_t = 0\r
-        while True:\r
-            if self.AI_VC_send_data_queue_thread_lock == 2:\r
-                print("AI_VC_send_data_queue_thread,该退出了")\r
-                break  \r
-            if self.AI_VC_send_data_queue.empty() :#不能去掉,去掉会卡死\r
-                self.AI_VC_send_data_queue_thread_lock = 0  \r
-                count_t+=1\r
-                # if count_t%200 == 0:\r
-                #     print("self.AI_VC_send_data_queue.empty")\r
-                utime.sleep_ms(1)\r
-            else:\r
-                #data[0]是websocket连接对象编号,data[1]是数据\r
-                #print("AI_VC_send_data_queue_thread:get")\r
-                \r
-                self.AI_VC_send_data_queue_thread_lock = 1\r
-                data = self.AI_VC_send_data_queue.get()\r
-                \r
-                \r
-                #print("AI_VC_send_data_queue_thread:num{} len{}".format(data[0],len(data[1])))\r
-                if data != None:\r
-                    try:\r
-                        #data["func"](data["data"])\r
-                        # 发送数据\r
-                        #bytes_data = bytes(data[1])\r
-                        #data[0].send(data[1])\r
-                        #print("AI_VC_send_data_queue_thread:len:{}".format(len(data[1])))\r
-                        #print("AI_VC_send_data_queue_thread on line asr recv :{} vc recv:{}".format(_thread.threadIsRunning(self.AI_client_asr_recv_id),_thread.threadIsRunning(self.AI_client_VC_recv_id)))\r
-                        if data[0] == AI_client_VC_num:\r
-                            self.VC_pingping_timerout = 0\r
-                            if isinstance(data[1], str):#是字符串\r
-                                if len(data[1])<600:\r
-                                    print("VC VC: send_data:{}".format(data[1]))\r
-                                else:\r
-                                    pass\r
-                                    #print("VC VC: send_data:{}...".format(data[1][:300]))\r
-                            #print("VC: send_data len:{}".format(len(data[1])))\r
-                            if self.AI_client_VC != None and self.AI_client_VC_isconnect == 1:\r
-                                self.AI_client_VC.send(data[1])\r
-                            else:\r
-                                print("VC VC: send_data:ERROR:{}".format(data[1]))\r
-                            #print("VC: send_data end")\r
-    \r
-                        #print("VC: send_data end")\r
-                    except Exception as e:\r
-                        print("DeviceInfo_queue_thread:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-                        if data[0] == AI_client_VC_num:\r
-                            #self.websocket_error()\r
-                            pass\r
-\r
-                            \r
-                            try:\r
-                                if self.AI_client_VC_isconnect != 0:\r
-                                    print("VC发送数据错误,退出")\r
-                                    EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC发送出错了,请重试"}) \r
-                                    self.ud_error(["VC",self.VC_taskid])\r
-                            except Exception as e: #网络连接异常\r
-                                usys.print_exception(e)\r
-\r
-                    utime.sleep_ms(1)\r
-        self.AI_VC_send_data_queue_thread_lock = 0              \r
-    #VC关闭读线程\r
-    def AI_client_VC_recv_thread_close(self):\r
-        if self.AI_client_VC_recv_id != 0:\r
-            count =500\r
-            while True:\r
-                count -= 1\r
-                if self.AI_client_VC_recv_lock == 1:\r
-                    self.AI_client_VC_recv_lock = 2\r
-                if self.AI_client_VC_recv_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    print("AI_client_VC_recv_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-            self.AI_client_VC_recv_lock = 0\r
-            print("AI_client_VC_recv_thread_close")\r
-            try:\r
-                _thread.stop_thread(self.AI_client_VC_recv_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.AI_client_VC_recv_id = 0\r
-    #Ai VC websocket返回数据       \r
-    def AI_client_VC_recv(self,cli):\r
-        count = 0\r
-\r
-        while True:\r
-            try:\r
-                # 死循环接收数据\r
-                self.AI_client_VC_recv_lock = 0\r
-                if self.is_VC_ACK == 1:\r
-                    self.AI_client_VC_Read()\r
-                #EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_Read})\r
-                count+=1\r
-                if self.VC_state >= VC_State_TTSStart and (self.tts_in_data_len - self.tts_out_data_len > 64*1024 or count>5):\r
-                    count = 0\r
-                    utime.sleep_ms(1)\r
-                if self.VC_state < VC_State_TTSStart:\r
-                    utime.sleep_ms(1)\r
-                recv_data = cli.recv()\r
-                if self.AI_client_VC_recv_lock == 2:\r
-                    print("AI_client_VC_recv 该退出了")\r
-                    break\r
-                self.AI_client_VC_recv_lock = 1\r
-                self.close_timerout = 0#服务器有返回清零退出时间\r
-                if recv_data == "websocket close":\r
-                    # 服务器关闭连接\r
-                    print("VC 服务器关闭连接!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-                    #self.AI_client_VC_isconnect = 0\r
-                    #self.websocket_deconnect_VC()\r
-                    #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr}) \r
-                    # #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(1500)})\r
-                    #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_connect_asr}) \r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC连接断开了,请重试"}) \r
-                    self.ud_error(["VC",self.VC_taskid])\r
-                    break\r
-                elif recv_data == "":#客户端关闭连接\r
-                    print("VC VC :客户端关闭连接")\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC连接断开了,请重试"}) \r
-                    self.ud_error(["VC",self.VC_taskid])\r
-                    break\r
-                try:\r
-                    self.websocket_error_count = 0\r
-                    if isinstance(recv_data, str):#返回的是字符串\r
-                        if len(recv_data)<300:\r
-                            print("VC VC:recv_data:{}".format(recv_data))\r
-                        else:\r
-                            print("VC VC:recv_data long :{}".format(recv_data[:300]))\r
-                        jsload_data =  ujson.loads(recv_data)\r
-                        #print("AI_client_VC_recv jsload_data = {}".format(jsload_data))\r
-                        if jsload_data["event_type"] == "chat.updated" :#会话开始\r
-                            print("VC:Started!!!!!!!!\r\n")\r
-                            print("VC:Started!!!!!!!!\r\n")\r
-                            print("VC:Started!!!!!!!!\r\n")\r
-                            \r
-                            self.AI_client_VC_send_speech()#开始上传语音\r
-                        elif jsload_data["event_type"] == "conversation.audio_transcript.update" :#音频转译\r
-                            self.VC_Speech_end_timerout = 2\r
-                            self.AI_ASR_str = jsload_data["data"]['content']\r
-                            if self.AI_ASR_str.find("。") != -1 or self.AI_ASR_str.find("?") != -1 or self.AI_ASR_str.find("!") != -1:\r
-                                self.VC_Speech_end_timerout = 0\r
-                                self.AI_client_VC_end_speech()#发送说话终止\r
-\r
-                        elif jsload_data["event_type"] == "conversation.chat.created" :#开始对话    \r
-                            self.open_play_flag = 0\r
-                            if self.play_data_save_flag == 1:\r
-                                try:\r
-                                    uos.remove('/usr/play_data.pcm')\r
-                                except Exception as e:\r
-                                    usys.print_exception(e)\r
-                                self.play_fd = open('/usr/play_data.pcm','w')\r
-                        \r
-                        elif  jsload_data["event_type"] == "conversation.message.delta":#返回大模型回答数据\r
-                            if self.open_play_flag == 0:\r
-                                EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})#打开播放\r
-                                self.open_play_flag =1\r
-                        elif  jsload_data["event_type"] == "conversation.audio.delta":#下发音频数据\r
-                            \r
-                            audio_data = ubinascii.a2b_base64(jsload_data["data"]['content'])\r
-                            print("下发音频数据1:{}".format(len(audio_data)))\r
-                            EventMesh.publish("publish_AI_btnInfo",{"func":self.put_record_data,"data":[audio_data,""]}) \r
-                            if self.play_data_save_flag == 1:\r
-                                if self.play_fd !=None:\r
-                                    self.play_fd.write(audio_data)\r
-                        elif  jsload_data["event_type"] == "conversation.audio.completed":#结束播放\r
-                            if self.play_data_save_flag == 1:\r
-                                if self.play_fd !=None:\r
-                                    print("输出音频文件关闭")\r
-                                    self.play_fd.close()\r
-\r
-                        # elif jsload_data["event"]  == "SpeechContent" :#asr转译\r
-                        #     print("VC:SpeechContent!!!!!!!!\r\n")\r
-                        #     payload = jsload_data["payload"]\r
-                            \r
-                            \r
-                        #     if(payload['finished'] == True):#asr结束\r
-                        #         self.VC_state =  VC_State_SpeechEnd\r
-                        #         #self.VC_Speech_End()#停止录音\r
-                        #         text = payload["text"]\r
-                        #         if self.check_text(text) == 0:\r
-                        #             if self.AI_VC_send_data_queue.empty()!=True:\r
-                        #                 self.AI_VC_send_data_queue.clear()\r
-                        #             if self.AI_ASR_send_data_queue.empty()!=True:\r
-                        #                 self.AI_ASR_send_data_queue.clear()\r
-                        #             self.AI_ASR_send_buf_len = 0\r
-                        #             EventMesh.publish("open_led_all")\r
-                        #             try:\r
-                        #                 EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC}) \r
-                        #                 EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End}) \r
-                                        \r
-                        #                 # EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr})\r
-                        #                 EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                        #             except Exception as e:\r
-                        #                 usys.print_exception(e)\r
-                                \r
-                        #         pass\r
-                        #     else:\r
-                        #         pass\r
-\r
-                        # elif jsload_data["event"]  == "SpeechEnded" :#服务器下发ASR说话结束\r
-                        #     self.VC_state =  VC_State_SpeechEnd\r
-                        # elif jsload_data["event"]  == "RespondingContent" :#chat回答      \r
-                        #     pass\r
-                            \r
-                        # elif jsload_data["event"]  == "RespondingStarted" :#音频开始下发\r
-                        #     self.play_flag = 0\r
-                        #     self.VC_state = VC_State_TTSStart\r
-                        #     if self.is_long_record == 0:\r
-                        #         EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})#\r
-                        #     else:\r
-                        #         self.AI_ASR_str_tmp = ""\r
-                        #         self.AI_ASR_str = ""\r
-                        #     EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})\r
-                        #     self.VC_Thinking_timerout = 0#关闭超时重试\r
-                        #     # self.VC_Play_Start()\r
-                        #     EventMesh.publish("open_led_green")#绿色\r
-                        #     #self.tts_fd = open('/usr/tts_tesr.pcm','w')\r
-                        #     if self.play_data_save_flag == 1:\r
-                        #         try:\r
-                        #             uos.remove('/usr/play_data.pcm')\r
-                        #         except Exception as e:\r
-                        #             usys.print_exception(e)\r
-                        #         self.play_fd = open('/usr/play_data.pcm','w')\r
-                            \r
-                        #     pass\r
-                        # elif jsload_data["event"]  == "RespondingEnded" :#音频下发结束\r
-                        #     #if self.VC_state == VC_State_TTSStart:\r
-                            \r
-                        #     print("RespondingEnded!!!!!!" )\r
-                        #     self.VC_state = VC_State_TTSEnd\r
-                        #     self.LocalRespondingEnded_timerout = 10 #最长倒数10秒发送音频结束或者终止对话\r
-                        #     if self.VC_mode == 0 :#连续问答模式\r
-                        #         #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})#调试临时打开\r
-                        #         if dev_type != "7PIN_BK":\r
-                        #             EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start})#开始录音 \r
-                        #         pass\r
-                        #     if self.play_data_save_flag == 1:\r
-                        #         if self.play_fd !=None:\r
-                        #             self.play_fd.close()\r
-                        #     #self.tts_fd.close()\r
-                        #     #pass\r
-                        # elif jsload_data["event"]  == "DialogStateChanged" :#状态切换事件\r
-                        #     payload = jsload_data["payload"]\r
-                        #     if payload["state"] == "Listening":#可以说了\r
-                        #         self.VC_state = VC_State_Listening\r
-                        #         if self.AI_TTS_str != "" or self.AI_ASR_str != "":#有tts数据,则请求TTS数据,没有就请求开始上传语音\r
-                        #             self.AI_client_VC_RequestToRespond()\r
-                        #         else:\r
-                        #             pass\r
-                        #             #self.VC_Speech_Start()#开启线程获取录音数据\r
-                        #             if self.is_long_record == 0:\r
-                        #                 EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start})#\r
-                        #             #self.AI_client_VC_send_speech()#开始上传语音\r
-                                \r
-                        #         #EventMesh.publish("open_led_red")\r
-                        #     if payload["state"] == "Thinking":#思考\r
-                        #         self.VC_state = VC_State_Thinking\r
-                        #         if self.VC_Thinking_timerout == 0:\r
-                        #             self.VC_Thinking_timerout = 15#倒计时15秒,如果没有音频数据返回就重试\r
-                        #         EventMesh.publish("open_led_red_green")#黄色\r
-                        #     if payload["state"] == "Responding":#开始音频播放\r
-                        #         #self.VC_state = VC_State_Responding#\r
-                        #         pass\r
-                        # elif jsload_data["event"]  == "RequestAccepted" :#请求上传语音被允许\r
-                        #     #self.VC_state =  VC_State_Responding\r
-                        #     #self.AI_client_VC_send_speech()#开始上传语音\r
-                        #     pass\r
-                    else:#下发音频数据\r
-                        #self.AI_ASR_str = ""#下发音频后清掉asr结果\r
-                        \r
-                        print("下发音频数据1:{}".format(len(recv_data)))\r
-                        \r
-                        if self.play_data_save_flag == 1:\r
-                            if self.play_fd !=None:\r
-                                self.play_fd.write(recv_data)\r
-                        # print("下发音频数据2:{}".format(len(recv_data)))\r
-                        if self.VC_state >= VC_State_TTSStart:\r
-                            #self.put_record_data([recv_data,""])\r
-                            EventMesh.publish("publish_AI_btnInfo",{"func":self.put_record_data,"data":[recv_data,""]}) \r
-                        utime.sleep_ms(1)\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                \r
-            except Exception as e:\r
-                    \r
-                    error_str = str(e)\r
-                    #print("VC VC:e:{}".format(error_str))\r
-                    if error_str.find("[Errno 110] ETIMEDOUT")!= -1:\r
-                        #print("VC VC:recv TIMEDOUT 正常")\r
-                        pass\r
-                    else:\r
-                        usys.print_exception(e)\r
-                        #self.websocket_error()\r
-                        print("VC VC :读数据报错,退出")\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC出错了,请重试"}) \r
-                        self.ud_error(["VC",self.VC_taskid])\r
-                        break\r
-        self.AI_client_VC_isconnect = 0\r
-        self.AI_client_VC_recv_id = 0 \r
-        self.AI_client_VC_recv_lock = 0\r
-        print("AI_client_VC_recv END!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-    def put_record_data(self,data):\r
-        #print("下发音频数据1:{}".format(len(data[0])))\r
-        ret=self.AI_audio_queue.put(data)\r
-        self.tts_in_data_len += len(data[0])\r
-        #print("下发音频数据2:{},{}".format(len(data[0]),self.tts_in_data_len))\r
-    def check_text(self,text):\r
-        if len(text)>60:\r
-            return -1\r
-        try:\r
-            if isinstance(text, str): \r
-                if text.find("声音") != -1 and text.find("改") != -1:\r
-                    try:\r
-                        for key in self.VC_TTS_voice_type:\r
-                            if  text.find(key) != -1 :\r
-                                self.VC_TTS_voice_key = key\r
-                                EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                                self.AI_TTS_str = "更改成功" \r
-                                return 0\r
-                    except Exception as e:\r
-                        usys.print_exception(e)    \r
-                    if  text.find("男") != -1 :\r
-                        if "男" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "男"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("女") != -1 :\r
-                        if "女" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "女"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("同声") != -1 or text.find("童") != -1 :\r
-                        if "童" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "童"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("粤") != -1 or text.find("越野") != -1 or text.find("广东话") != -1:\r
-                        if "粤" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "粤"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("四川") != -1 :\r
-                        if "四川" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "四川"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("个性") != -1 :\r
-                        if "个性" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "个性"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("英语") != -1 :\r
-                        if "英语" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "英语"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    self.AI_TTS_str = "更改失败,没找到对应声音" \r
-                    return 0\r
-                if text.find("切换对话模式") != -1:\r
-                    if self.VC_mode == 0:\r
-                       self.VC_mode = 1\r
-                       self.AI_TTS_str = "已切换到单对话模式" \r
-                    else:\r
-                        self.VC_mode = 0 \r
-                        self.AI_TTS_str = "已切换到长对话模式" \r
-                    EventMesh.publish("set_storage_config",["VC_mode",self.VC_mode])\r
-                    # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                    #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-\r
-                    return 0\r
-                if text.find("音量") != -1:\r
-                    if  text.find("加") != -1 :\r
-                        self.VC_TTS_volume += 10\r
-                        if self.VC_TTS_volume > 100:\r
-                            #EventMesh.publish("audio_montage_play",["yinliangyizuida.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/yinliangyizuida.mp3')#音量已最大\r
-                            self.AI_TTS_str = "音量已最大" \r
-                            self.VC_TTS_volume = 100\r
-                        else:\r
-                            self.aud.setVolume(self.VC_TTS_volume //10)\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume])\r
-                            #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功\r
-                            self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)\r
-                            \r
-                        return 0\r
-                    if text.find("减") != -1:\r
-                        self.VC_TTS_volume -= 10\r
-                        if self.VC_TTS_volume < 0:\r
-                            self.VC_TTS_volume = 0\r
-                            #EventMesh.publish("audio_montage_play",["yinliangyizuixiao.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/yinliangyizuixiao.mp3')#音量已最小\r
-                            self.AI_TTS_str = "音量已最小"\r
-                        else:\r
-                            self.aud.setVolume(self.VC_TTS_volume //10)\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume])\r
-                            #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功\r
-                            self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)\r
-                        return 0\r
-                \r
-                if text.find("进入工厂模式") != -1 :\r
-                    self.factory_mode()\r
-                    return 1\r
-                if text.find("查询") != -1:\r
-\r
-                    if text.find("信号") != -1 :\r
-                        signal = net.csqQueryPoll()\r
-                        \r
-                        self.AI_TTS_str = "当前信号{}".format(signal)\r
-                        return 0\r
-                    if text.find("电量") != -1 :\r
-                        battery = EventMesh.publish("get_battery")\r
-                        print("电量查询:{}".format(battery))\r
-                        #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])\r
-                        #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余\r
-                        self.AI_TTS_str = "电量剩余百分之{}".format(battery)\r
-                        return 0\r
-                    if text.find("电压") != -1 :\r
-                        Vbatt = Power.getVbatt()\r
-                        #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])\r
-                        #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余\r
-                        self.AI_TTS_str = "当前电池电压{}".format(Vbatt)\r
-                        return 0\r
-\r
-                    if text.find("卡号") != -1 :\r
-                        iccid = sim.getIccid()\r
-                        if iccid != -1 and len(iccid) > 5:\r
-                            print("iccid{}".format(iccid))\r
-                            self.AI_TTS_str = "当前卡号为:{}".format(iccid)\r
-                        else:\r
-                            self.AI_TTS_str = "卡号查询失败"\r
-                        return 0\r
-                    if text.find("设备号") != -1 :\r
-                        imei = modem.getDevImei()\r
-                        if imei != -1 and len(imei) > 5:\r
-                            print("IMEI:{}".format(imei))\r
-                            self.AI_TTS_str = "当前设备号为:{}".format(imei)\r
-                        else:\r
-                            self.AI_TTS_str = "设备号查询失败"\r
-                        return 0\r
-                    if text.find("版本") != -1 :\r
-                        sourceVersion = versions.Build_Time\r
-                        self.AI_TTS_str ="Mr-Seven-"+sourceVersion\r
-                        return 0\r
-                    if text.find("服务器地址") != -1 :\r
-                        self.AI_TTS_str ="服务器地址"+self.server_ip\r
-                        return 0\r
-                if text.find("升级") != -1 and (text.find("OTA") != -1 or text.find("ota") != -1):\r
-                    if self.ai_OTA.min_sys_ota()==1:\r
-                        self.AI_TTS_str = "有新版本,准备开始升级,升级过程会多次重启设备,请保证流量充足及电量充足"\r
-                    else:\r
-                        self.AI_TTS_str = "当前已是最新版本"\r
-                    return 0\r
-                \r
-                if len(text)<12 and (text.find("再见") != -1 or text.find("拜拜") != -1):\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                    return 1\r
-        except Exception as e:\r
-                usys.print_exception(e)\r
-        return -1\r
-    #获取trace_id\r
-    def get_trace_id(self):\r
-        t = utime.mktime(utime.localtime())\r
-        t = t*1000+urandom.randint(0, 1000)\r
-        md5_data = "{}".format(t)#md5签名\r
-        sign_data = ""\r
-        hash_obj = uhashlib.md5(md5_data)\r
-        res = hash_obj.digest()\r
-\r
-        # 转成十六进制表示\r
-        sign_data = ubinascii.hexlify(res)\r
-        sign_data = sign_data.decode('ascii')\r
-        return sign_data\r
-    \r
-    def get_session_id(self,data = "session_id"):\r
-        t = utime.mktime(utime.localtime())\r
-        t = t*1000+urandom.randint(0, 1000)\r
-        md5_data = "{}{}".format(data,t)#md5签名\r
-        sign_data = ""\r
-        hash_obj = uhashlib.md5(md5_data)\r
-        res = hash_obj.digest()\r
-\r
-        # 转成十六进制表示\r
-        sign_data = ubinascii.hexlify(res)\r
-        sign_data = sign_data.decode('ascii')\r
-        return sign_data\r
-    \r
-    def get_new_message_id(self):\r
-        message_id = self.get_trace_id()+"aaa"+self.get_trace_id()\r
-        self.VC_message_id=message_id[:32]\r
-        return self.VC_message_id \r
-    def get_new_task_id(self):\r
-        task_id = self.get_trace_id()+"aaa"+self.get_trace_id()\r
-        self.VC_task_id=task_id[:32]\r
-        return self.VC_task_id\r
-    #开始播放声音\r
-    def VC_Play_Start(self):\r
-        self.tts_in_data_len = 0\r
-        self.tts_out_data_len = 0\r
-        if self.VC_play_TYPE == VC_play_TYPE_PCM:\r
-            # if self.VC_play_samplerate == 8000:\r
-            #     pass\r
-            # elif self.VC_play_samplerate == 16000:\r
-            #     if self.play_pcm == None:        \r
-            #         self.play_pcm = audio.Audio.PCM(0,1,16000,1,1,2)\r
-            #         #self.play_pcm.setVolume(11)\r
-            #         ret = self.play_pcm.stream_write_start()\r
-            #         print("self.record_pcm.stream_write_start:ret:{}".format(ret))\r
-            if self.play_pcm == None:\r
-                self.play_pcm = audio.Audio.PCM(0,1,self.VC_play_samplerate,1,1,2)\r
-                #self.play_pcm.setVolume(11)\r
-            ret = self.play_pcm.stream_write_start()\r
-            print("音频初始化:self.record_pcm.stream_write_start:ret:{}".format(ret))       \r
-        elif self.VC_play_TYPE == VC_play_TYPE_MP3:\r
-            pass\r
-    #停止播放声音\r
-    def VC_Play_End(self):\r
-        if self.VC_play_TYPE == VC_play_TYPE_PCM:\r
-            if self.VC_play_samplerate == 8000:\r
-                self.aud.stopPlayStream()\r
-                self.aud.stopAll()\r
-            else:\r
-                if self.play_pcm != None:\r
-                    print("Close:play_pcm.close()!!!!!!!!!!!!!!!!!!")\r
-                    try:\r
-                        self.play_pcm.stream_stop()\r
-                        self.play_pcm.close()\r
-                    except Exception as e:\r
-                        usys.print_exception(e)\r
-                    self.play_pcm=None\r
-                self.aud.stopPlayStream()\r
-                self.aud.stopAll()\r
-        elif self.VC_play_TYPE == VC_play_TYPE_MP3:\r
-            self.aud.stopPlayStream()\r
-            self.aud.stopAll()\r
-   \r
-    def _1S_timer_cb(self,*argc):\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self._1S_timer_cb_}) \r
-\r
-    def _1S_timer_cb_(self):    \r
-    \r
-        EventMesh.publish("system_sleep_rest")#防止黑屏\r
-        self.close_timerout += 1\r
-        if self.close_timerout > 60:#20秒没数据就close\r
-            \r
-            if self.VC_state >= VC_State_SpeechIng:\r
-                print("接口无响应,超时退出")\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"接口超时了。请重试"}) \r
-                self.ud_error(["VC",self.VC_taskid])\r
-            else:\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-        # print("get_audio_state !!!!!{} {} {}\r\n".format(self.play_end,EventMesh.publish("get_audio_state"),self.play_flag))\r
-        if self.LocalRespondingEnded_timerout>0  :#\r
-            self.LocalRespondingEnded_timerout -= 1\r
-            print("LocalRespondingEnded_timerout:{}".format(self.LocalRespondingEnded_timerout))\r
-            if self.LocalRespondingEnded_timerout <= 0 or (self.play_pcm != None and self.play_pcm.stream_is_empty() == 1) :#超时或者音频播放完,\r
-                self.LocalRespondingEnded_timerout = 0\r
-                if self.VC_mode == 1 :#长按单次问答模式\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                else:\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start})#开始录音\r
-                    #通知服务器播放结束\r
-                    self.AI_client_VC_LocalRespondingEnded()\r
-        self.VC_pingping_timerout+=1\r
-        if self.VC_pingping_timerout>3:\r
-            self.VC_pingping_timerout=0\r
-            #self.AI_client_VC_ping()\r
-        self.asr_pingping_timerout += 1\r
-        if self.asr_pingping_timerout>3:\r
-            self.asr_pingping_timerout=0\r
-            self.AI_client_asr_ping()    \r
-        if self.VC_Thinking_timerout > 0 and self.VC_Thinking_timerout < 100:#VC Thinking超时后重新开始\r
-            print("VC_Thinking_timerout:{}!!!!!!!!!!!!!!!!!!!!!".format(self.VC_Thinking_timerout))\r
-            self.VC_Thinking_timerout -=1\r
-            if self.VC_Thinking_timerout == 0:\r
-                self.VC_Thinking_timerout = 100\r
-                print("Thinking重试,重试!!!!!!!!!!!!!!!!!!!!!")\r
-                self.VC_state = VC_State_None\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                pass\r
-        if self.VC_Speech_end_timerout >0:\r
-            self.VC_Speech_end_timerout-=1\r
-            if self.VC_Speech_end_timerout <=0:\r
-                self.VC_Speech_end_timerout = 0\r
-                self.AI_client_VC_end_speech()#发送说话终止\r
-    #VC开始\r
-    def AI_VC_start(self):\r
-        print("AI_VC_start1")\r
-        self.VC_satrt_flag = 1\r
-        if self.VC_Thinking_timerout < 100:\r
-            self.VC_Thinking_timerout = 0\r
-        EventMesh.publish("open_led_all")\r
-        self.VC_Play_End()#关闭音频播放\r
-        print("AI_VC_start2")\r
-        #self.aud.aud_tone_play(16,200)#播放按键音\r
-        self.LocalRespondingEnded_timerout = 0\r
-        self.close_timerout = 0\r
-\r
-        \r
-        #\r
-        if self.AI_client_VC_isconnect == 0:#没连接的时候请求开始\r
-            self.websocket_connect_VC()#连接服务器\r
-            self.AI_client_VC_start_requset()\r
-            #utime.sleep_ms(50)\r
-        else:\r
-            print("self.VC_state :{}".format(self.VC_state ))\r
-            if self.VC_state > VC_State_SpeechStart:\r
-                #客户端打断对话\r
-                print("打断对话")\r
-                # self.websocket_deconnect_VC()\r
-                # self.websocket_connect_VC()#连接服务器\r
-                # self.AI_client_VC_start_requset()\r
-                self.AI_client_VC_RequestToSpeak()\r
-            elif self.VC_state == VC_State_Listening:\r
-                #直接chat\r
-                print("直接chat")\r
-                self.AI_client_VC_RequestToRespond()\r
-                return \r
-            else:\r
-                print("异常状态")\r
-                #self.AI_client_VC_RequestToSpeak()\r
-                self.websocket_deconnect_VC()\r
-                self.websocket_connect_VC()#连接服务器\r
-                self.AI_client_VC_start_requset()\r
-        if self.AI_client_VC_isconnect == 0:\r
-            return\r
-        print("AI_VC_start3")\r
-         \r
-        self.VC_state = VC_State_None\r
-        if self.AI_TTS_str == "":#没有tts要播放的时候才开始录音\r
-            #开始asr录音\r
-            self.VC_Speech_Start()\r
-        #     pass\r
-        print("AI_VC_start4")\r
-        \r
-        #开始线程\r
-        \r
-        # if self.AI_VC_send_data_queue_thread_id == 0:    \r
-        #     _thread.stack_size(self.Audio_buf_size+8*1024)\r
-        #     self.AI_VC_send_data_queue_thread_id = _thread.start_new_thread(self.AI_VC_send_data_queue_thread, ())\r
-        #     _thread.stack_size(8*1024)\r
-        #     print("AI_VC_start :AI_VC_send_data_queue_thread_id :{} ".format(self.AI_VC_send_data_queue_thread_id))\r
-        \r
-        if self.AI_audio_queue_thread_id ==0:\r
-            _thread.stack_size(24*1024)\r
-            self.AI_audio_queue_thread_id = _thread.start_new_thread(self.AI_audio_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            print("AI_VC_start :AI_audio_queue_thread_id :{} ".format(self.AI_audio_queue_thread_id))\r
-        else:\r
-            print("AI_VC_start :AI_audio_queue_thread_id != 0 ")\r
-        self._1S_timer.start(1000,1,self._1S_timer_cb)\r
-        # self.VC_pingping_timerout = 0\r
-        # self.asr_pingping_timerout = 0\r
-        print("AI_VC_start5")\r
-    #开始会话\r
-    def AI_client_VC_start_requset(self):\r
-        voice="huoshan::zh_male_wennuanahu_moon_bigtts"\r
-        try:\r
-            voice = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["voice"]\r
-        except Exception as e:\r
-            usys.print_exception(e)    \r
-        json_data =\\r
-        {\r
-            "id": "event_id",\r
-            "event_type": "chat.update",\r
-            "data": {\r
-                "chat_config": {\r
-                    "auto_save_history": True, #保存历史记录。默认 true\r
-                    #"conversation_id": "1235984as1d54", #conversation_id\r
-                    "user_id": "86952145024",  #标识当前与智能体的用户,由使用方自行定义、生成与维护。user_id 用于标识对话中的不同用户,不同的 user_id,其对话的上下文消息、数据库等对话记忆数据互相隔离。如果不需要用户数据隔离,可将此参数固定为一个任意字符串\r
-                    "meta_data": {}, #附加信息,通常用于封装一些业务相关的字段。查看对话消息详情时,系统会透传此附加信息。\r
-                    "custom_variables": {}, #智能体中定义的变量。在智能体prompt中设置变量{{key}}后,可以通过该参数传入变量值,同时支持Jinja2语法。详细说明可参考变量示例。变量名只支持英文字母和下划线。\r
-                    "extra_params": {},   #附加参数,通常用于特殊场景下指定一些必要参数供模型判断,例如指定经纬度,并询问智能体此位置的天气。自定义键值对格式,其中键(key)仅支持设置为:latitude:纬度,此时值(Value)为纬度值,例如39.9800718。longitude:经度,此时值(Value)为经度值,例如116.309314。\r
-                    "parameters": {"custom_var_1": "测试"}\r
-                },\r
-                "input_audio": {         #输入音频格式\r
-                    "format": "pcm",       #输入音频格式,支持 pcm/wav/ogg。默认 wav\r
-                    "codec": "pcm",         #输入音频编码。 pcm/opus。默认 pcm\r
-                    "samplate_rate": self.VC_record_samplerate,  #采样率\r
-                    "channel": 1, #通道数\r
-                    "bit_depth": 16 #位深\r
-                },\r
-                "output_audio": {        #输出音频格式\r
-                    "codec": "pcm",        #pcm/opus 输出音频格式, 默认 pcm\r
-                    "pcm_config": {\r
-                        "sample_rate": self.VC_play_samplerate,   #码率\r
-                        \r
-                    },\r
-                    "speech_rate": 50,  #回复的语速,取值范围 [-50, 100],默认为 0,-50 表示 0.5 倍速,100 表示 2倍速\r
-                    #"voice_id": "zh_female_shaoergushi_mars_bigtts"\r
-                },\r
-                "turn_detection": {\r
-                               "type":                "server_vad",\r
-                               "prefix_padding_ms":   600,\r
-                               "silence_duration_ms": 500,\r
-                       },\r
-            }\r
-        }\r
-        # if self.VC_play_TYPE == VC_play_TYPE_PCM:\r
-        #     json_data["payload"]["out_format"]='pcm'\r
-        # if self.VC_record_TYPE == VC_record_TYPE_AMR :\r
-        #     json_data["payload"]["in_format"]='amr'\r
-        #     pass\r
-        # if self.VC_mode == 1:\r
-        #     json_data["payload"]["voice_detection"]='disable'\r
-        self.VC_state = VC_State_None\r
-        self.AI_client_VC_send(ujson.dumps(json_data))\r
- \r
-    #开始上传语音\r
-    def AI_client_VC_send_speech(self):\r
-        json_data = \\r
-        {\r
-            "header":{\r
-                "trace_id":self.get_trace_id(),\r
-                "event":"SendSpeech"\r
-                },\r
-            "payload":\r
-            {\r
-                "dialog_id":self.VC_dialog_id,\r
-                "session_id": self.session_id ,\r
-            }\r
-        }\r
-        #self.AI_client_VC_send(ujson.dumps(json_data))\r
-        self.VC_Speech_Start()#开启线程获取录音数据\r
-        self.VC_state =  VC_State_SpeechStart\r
-    def AI_client_VC_input_audio_buffer_append(self,data):\r
-        json_data = \\r
-        {\r
-            "id": "event_id",\r
-            "event_type": "input_audio_buffer.append",\r
-            "data": {\r
-            "delta": ubinascii.b2a_base64(data)\r
-            }\r
-        }\r
-        self.AI_client_VC_send(ujson.dumps(json_data))\r
-    #结束上传语音\r
-    def AI_client_VC_end_speech(self):\r
-        json_data = \\r
-        {\r
-            "id": "event_id",\r
-            "event_type": "input_audio_buffer.complete",\r
-            "data": {}\r
-        }\r
-        self.AI_client_VC_send(ujson.dumps(json_data))\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.send_tone}) \r
-\r
-    #通知服务器开始播放\r
-    def AI_client_VC_LocalRespondingStarted(self):\r
-        json_data = \\r
-        {\r
-            "header":{\r
-                "trace_id":self.get_trace_id(),\r
-                "event":"LocalRespondingStarted"\r
-                },\r
-            "payload":{\r
-                "dialog_id":self.VC_dialog_id,\r
-                "session_id": self.session_id ,\r
-                }\r
-        }\r
-        self.AI_client_VC_send(ujson.dumps(json_data))\r
-    #通知服务器播放结束\r
-    def AI_client_VC_LocalRespondingEnded(self):\r
-        json_data = \\r
-        {\r
-            "header":{\r
-                "trace_id":self.get_trace_id(),\r
-                "event":"LocalRespondingEnded"\r
-                },\r
-            "payload":{\r
-                "dialog_id":self.VC_dialog_id,\r
-                "session_id": self.session_id ,\r
-                }\r
-        }\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_init}) \r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)}) \r
-        # json_data = \\r
-        # {\r
-        #     "header":{\r
-        #         "trace_id":self.get_trace_id(),\r
-        #         "event":"AAAAAAAAAAAAAA1"\r
-        #         },\r
-        #     "payload":{\r
-        #         "dialog_id":self.VC_dialog_id,\r
-        #         "session_id": self.session_id ,\r
-        #         }\r
-        # }\r
-        # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)}) \r
-        # utime.sleep_ms(1)\r
-        # self.AI_client_VC_send(ujson.dumps(json_data))\r
-        self.VC_state = VC_State_End\r
-    #客户端打断对话\r
-    def AI_client_VC_RequestToSpeak(self):\r
-        json_data = \\r
-        {\r
-            "header":{\r
-                "trace_id":self.get_trace_id(),\r
-                "event":"RequestToSpeak"\r
-                },\r
-            "payload":{\r
-                "dialog_id":self.VC_dialog_id,\r
-                "session_id": self.session_id ,\r
-                }\r
-        }\r
-        print("AI_client_VC_RequestToSpeak!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_init}) \r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)}) \r
-        # utime.sleep_ms(1)\r
-    #请求TTS或者chat事件\r
-    def AI_client_VC_RequestToRespond(self):\r
-        self.session_id  = self.get_session_id()#调试临时打开\r
-        json_data = \\r
-        {\r
-            "header":{\r
-                "trace_id":self.get_trace_id(),\r
-                "event":"RequestToRespond"\r
-                },\r
-            "payload":{\r
-                "dialog_id":self.VC_dialog_id,\r
-                "session_id": self.session_id ,\r
-                "type":"transcript",#prompt是跳过asr,transcript是跳过asr和大模型\r
-                "text":""\r
-                }\r
-        }\r
-\r
-        print("AI_client_VC_RequestToRespond!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        # if self.VC_state == VC_State_RequestToRespond:\r
-        #     print("AI_client_VC_RequestToRespond 重复 tts_str:{}\nasr_str:{}".format(self.AI_TTS_str,self.AI_ASR_str))\r
-        self.VC_state = VC_State_RequestToRespond\r
-        if self.AI_TTS_str != "":\r
-            json_data["payload"]["text"] = self.AI_TTS_str\r
-            json_data["payload"]["type"] = "transcript"\r
-            EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_init}) \r
-            EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)}) \r
-            self.AI_TTS_str = ""\r
-        elif self.AI_ASR_str != "":\r
-            json_data["payload"]["text"] = self.AI_ASR_str\r
-            json_data["payload"]["type"] = "prompt"\r
-            EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_init}) \r
-            EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)})\r
-            if dev_type != "7PIN" :\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.send_tone}) \r
-            #\r
-            #self.AI_ASR_str = ""\r
-        # utime.sleep_ms(1)\r
-    def chenggong_tone(self):\r
-        EventMesh.publish("audio_montage_play",["chenggong.mp3"])    \r
-    def send_tone(self):\r
-        EventMesh.publish("audio_montage_play",["send_tone.mp3"])\r
-    #给服务器回应ack\r
-    def AI_client_VC_Read(self):\r
-        json_data = \\r
-        {\r
-            "header":{\r
-                "trace_id":self.get_trace_id(),\r
-                "event":"Read"\r
-                },\r
-            "payload":{\r
-                "dialog_id":self.VC_dialog_id\r
-                }\r
-        }\r
-        print("AI_client_VC_Read!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        \r
-        #for i in range(6): \r
-            #EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)}) \r
-        # utime.sleep_ms(1)\r
-        if self.AI_client_VC != None and self.AI_client_VC_isconnect == 1:\r
-            self.AI_client_VC.send(ujson.dumps(json_data))\r
-      \r
-    ############################################\r
-    #关闭音频播放线程\r
-    def AI_audio_queue_thread_close(self):\r
-        print("AI_audio_queue_thread_close1!!!!!!!!!!!!!!!!!!!!!!")\r
-        if self.AI_audio_queue_thread_id != 0:\r
-            count =500\r
-            while True:\r
-                count -= 1\r
-                if self.AI_audio_queue_thread_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    self.AI_audio_queue_thread_lock = 2\r
-                    print("AI_audio_queue_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-            self.AI_audio_queue_thread_lock = 0\r
-            print("AI_audio_queue_thread_close2!!!!!!!!!!!!!!!!!")\r
-            try:\r
-                _thread.stop_thread(self.AI_audio_queue_thread_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.AI_audio_queue_thread_id = 0\r
-    # 音频队列        \r
-    def AI_audio_queue_thread(self):\r
-        print("AI_audio_queue_thread start")\r
-        count = 0\r
-        while True:\r
-            try:\r
-                if self.AI_audio_queue_thread_lock == 2:\r
-                        print("AI_audio_queue_thread 该退出了")\r
-                        break\r
-                #\r
-                count+=1\r
-                if count%500 == 1:\r
-                    print("AI_audio_queue_thread on")\r
-                utime.sleep_ms(1)\r
-                #print("AI_audio_queue_thread")\r
-                if self.AI_audio_queue.empty() :\r
-                    self.AI_audio_queue_thread_lock = 0\r
-                    \r
-                    \r
-                else:\r
-                    self.AI_audio_queue_thread_lock = 1\r
-                    data = self.AI_audio_queue.get()\r
-                    self.close_timerout = 0\r
-                    if self.play_flag == 0:\r
-                        self.play_flag =1\r
-                        print("AI_client_VC_LocalRespondingStarted!!!")\r
-                        self.AI_client_VC_LocalRespondingStarted()#通知服务器开始播放\r
-                    #self.AI_client_tts_data_len=len(data)\r
-                    print("audio_queue:len:{}".format(len(data[0])))\r
-                    if len(data[0]) > 10:\r
-                        try:\r
-                            if self.VC_play_TYPE == VC_play_TYPE_PCM:\r
-                                # if self.VC_play_samplerate == 8000:\r
-                                #     tmp= self.aud.playStream(1,data[0] )\r
-                                # elif self.VC_play_samplerate == 16000:\r
-                                \r
-                                \r
-                                    \r
-                                    write_buf = bytearray(data[0])\r
-                                    #print("play_pcm.stream_write1!!")\r
-                                    if self.play_pcm != None:\r
-                                        print("play_pcm.stream_write !!!")\r
-                                        ret = self.play_pcm.stream_write(write_buf,len(write_buf))\r
-                                        #ret= self.aud.playStream(1, data[0])#播放音频流\r
-                                        self.tts_out_data_len += ret\r
-                                        #print("play_pcm.stream_write:{}".format(self.tts_out_data_len))\r
-                            elif self.VC_play_TYPE == VC_play_TYPE_MP3:\r
-                                tmp= self.aud.playStream(3, data[0])#播放音频流\r
-                                \r
-                                if tmp != 0:\r
-                                    print("2playStream:error tmp:{} data len:{}!!!!!!!!!!!!".format(tmp,len(data[0])))\r
-                                    # # #播放失败的时候填充WAV头\r
-                                    # data_len = len(data[0])\r
-                                    # data_len_b = data_len.to_bytes(4,'little')#数据长度转16进制数组\r
-                                    # h_data = [ 0x52 ,0x49 ,0x46 ,0x46 #,0x24 ,0x00 ,0x00 ,0x00 #文件标识、文件大小\r
-                                    #         ,0x57 ,0x41 ,0x56 ,0x45 ,0x66 ,0x6D ,0x74 ,0x20  #文件格式、格式块标识符\r
-                                    #         ,0x10 ,0x00 ,0x00 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x80 ,0x3E ,0x00 ,0x00  #格式块大小4、音频格式2、声道数2、采样率4\r
-                                    #         ,0x80 ,0x3E ,0x00 ,0x00 ,0x02 ,0x00 ,0x10 ,0x00 ,0x64 ,0x61 ,0x74 ,0x61]#每秒字节数4、数据块对齐2、位深度2、data4\r
-                                    # h_data_b = bytes(h_data)\r
-                                    # file_len = data_len+len(h_data_b)+4+4\r
-                                    # file_len_b = file_len.to_bytes(4,'little')#文件长度转16进制数组\r
-                                    # h_data_b = h_data_b[:4]+file_len_b+h_data_b[4:]+data_len_b\r
-                                    # #self.aud.playStream(2, h_data_b)#播放音频流\r
-                                    # tmp= self.aud.playStream(2, h_data_b+data[0])#播放音频流\r
-                                    # print("3playStream:tmp:{} !!!!!!!!!!!!".format(tmp))\r
-                            \r
-                            \r
-                            mem = gc.mem_free()\r
-                            #print('1剩余内存RAM:{} KB'.format(mem / 1024))\r
-                        except Exception as e:\r
-                            print("AI_audio_queue_thread:ERROR:")\r
-                            usys.print_exception(e)\r
-                    \r
-                    # if self.VC_state == VC_State_TTSEnd and self.AI_audio_queue.empty() :#self.AI_audio_queue为空且tts下发结束\r
-                    #     #通知服务器播放结束\r
-                    #     self.AI_client_VC_LocalRespondingEnded()\r
-            except Exception as e:\r
-                print("AI_audio_queue_thread:ERROR:")\r
-                usys.print_exception(e)\r
-        self.AI_audio_queue_thread_lock = 0\r
-        #print("AI_audio_queue_thread:exit")\r
-    def factory_mode(self):\r
-        print("factory_mode")\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.factory_start}) \r
-    def factory_start(self):\r
-        self.factory_timer.start(3000, 1, self.factory_timer_cb)\r
-    def factory_timer_cb(self, *args, **kwargs):\r
-        print("factory_timer_cb play......")\r
-        #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-        EventMesh.publish("audio_montage_play",["xinhaoruo1.mp3"])\r
-\r
-    def Close(self):\r
-        self.VC_Thinking_timerout = 0\r
-        self.VC_satrt_flag = 0\r
-        self.AI_TTS_str = ""\r
-        self.AI_ASR_str = ""\r
-        self.AI_ASR_str_tmp = ""\r
-        self.AI_ASR_flag  = 0\r
-        self.AI_ASR_check_timeout = 0\r
-        self.AI_ASR_error_timeout = 0\r
-        print("ai_VC Close1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        EventMesh.publish("close_led")\r
-        self.tts_in_data_len = 0\r
-        self.tts_out_data_len = 0\r
-        #必须先销毁线程,不然线程会容易报错\r
-        try:\r
-            self.AI_ASR_send_data_queue_thread_close()#销毁ASR发送线程\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        try:\r
-            self.AI_audio_queue_thread_close()#销毁音频线程\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        try:\r
-            self.AI_VC_send_data_queue_thread_close()#销毁数据发送线程\r
-        except Exception as e: \r
-            usys.print_exception(e)\r
-        \r
-        self.VC_Speech_End()\r
-        print("ai_VC Close1.1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        self.VC_init()\r
-        \r
-        print("ai_VC Close1.2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        \r
-        try:\r
-            self.websocket_deconnect_asr()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        try:\r
-            self.websocket_deconnect_VC()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        print("ai_VC Close1.3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        \r
-        print("ai_VC Close2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        \r
-        \r
-        self.AI_ASR_timer.stop()\r
-        self._1S_timer.stop()\r
-        self.factory_timer.stop()\r
-        \r
-        if self.record_data_save_flag == 1:\r
-            if self.record_fd :\r
-                self.record_fd.close()\r
-            self.record_fd = None\r
-        if self.play_data_save_flag == 1:\r
-            if self.play_fd !=None:\r
-                self.play_fd.close()\r
-        print("ai_VC Close3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n")\r
-        \r
-        if self.AI_VC_send_data_queue.empty()!=True:\r
-            self.AI_VC_send_data_queue.clear()\r
-        if self.AI_ASR_send_data_queue.empty()!=True:\r
-            self.AI_ASR_send_data_queue.clear()\r
-        self.AI_ASR_send_buf_len = 0\r
-        #self.AI_WS_connect_Queue.put(self.AI_client_VC)\r
-\r
-        # try:\r
-        #     while True:\r
-        #         if self.AI_WS_connect_Queue.empty()!=True:\r
-        #             AI_WS_connect = self.AI_WS_connect_Queue.get()\r
-        #             if AI_WS_connect :\r
-        #                 try:\r
-        #                     AI_WS_connect._close()\r
-        #                     AI_WS_connect = None\r
-        #                 except Exception as e:\r
-        #                     usys.print_exception(e)\r
-        #             else:\r
-        #                 print("websocket链接已为空")\r
-        #         else:\r
-        #             break\r
-        # except Exception as e:\r
-        #     usys.print_exception(e)\r
-\r
-    def VC_init2(self):\r
-        self.VC_init()\r
-        \r
-        print("ai_VC VC_init2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        try:\r
-            self.websocket_deconnect_VC()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        print("ai_VC Close3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n")\r
-        self._1S_timer.stop()\r
-        if self.AI_VC_send_data_queue.empty()!=True:\r
-            self.AI_VC_send_data_queue.clear()\r
-        if self.AI_ASR_send_data_queue.empty()!=True:\r
-            self.AI_ASR_send_data_queue.clear()\r
-        self.AI_ASR_send_buf_len = 0\r
-        if self.AI_audio_queue.empty()!=True:\r
-            self.AI_audio_queue.clear()\r
-    def VC_init(self):\r
-        \r
-        print("VC_init:AI_VC_send_data_queue:size:{}".format(self.AI_VC_send_data_queue.size()))\r
-        \r
-        \r
-        print("VC_init2")\r
-        #self.VC_Speech_End()\r
-        print("VC_init3")\r
-        self.VC_Play_End()\r
-        print("VC_init4")\r
-        \r
-        if self.AI_audio_queue.empty()!=True:\r
-            self.AI_audio_queue.clear()\r
-        # num = EventMesh.publish("get_volum_size")\r
-        # if num == None:\r
-        #     num = 8\r
-        # self.aud.setVolume(num)#恢复原始音量\r
-        
\ No newline at end of file
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py
deleted file mode 100644 (file)
index e289ba3..0000000
+++ /dev/null
@@ -1,3069 +0,0 @@
-try:\r
-    from qp_log import qp_print as print\r
-except Exception:\r
-    pass\r
-\r
-\r
-from common import Abstract\r
-import machine\r
-import osTimer\r
-from misc import PowerKey\r
-import EventMesh\r
-from machine import Pin\r
-from machine import ExtInt\r
-import constants\r
-import utime\r
-import audio\r
-import ql_fs\r
-import ujson\r
-import voiceCall\r
-from misc import Power\r
-from led import red_green_light,green_light_fast,led_mode,open_led_red,close_led_red,open_led_green,open_led_white,close_led_green,close_led_white\r
-from machine import RTC\r
-from queue import Queue\r
-import _thread\r
-import usys\r
-import sms\r
-from Gsensor import SC7A20\r
-def _sos_feature_enabled():\r
-    try:\r
-        import vc_config\r
-        return vc_config.get_bool("SOS_ENABLED", True)\r
-    except Exception:\r
-        return True\r
-\r
-\r
-def _btn_cfg():\r
-    try:\r
-        import vc_config\r
-        return vc_config\r
-    except Exception:\r
-        return None\r
-\r
-\r
-def _btn_int(name, default):\r
-    c = _btn_cfg()\r
-    return c.get_int(name, default) if c else default\r
-\r
-\r
-def _btn_bool(name, default):\r
-    c = _btn_cfg()\r
-    return c.get_bool(name, default) if c else default\r
-\r
-\r
-def _btn_device_enabled():\r
-    return _btn_bool("BTN_DEVICE_ENABLED", True)\r
-\r
-\r
-if EventMesh.model == "D10" :\r
-    audio_buf = ['audio_find_haixiu', 'R_ALARM_NEW', 'R_BLOOD_SUGAR', 'R_CALL_mp3', 'R_CHARGE_FULL', 'R_CHARGE_IN', 'R_CHARGE_OUT', 'R_CUR_BATTERY_LEVEL', 'R_DRINK_ALARM', 'R_FALL_ALARM', 'R_HOME_ALARM', 'R_HSENSOR_RESULT_FAILE', 'R_HSENSOR_RESULT_HR_TITLE', 'R_HSENSOR_RESULT_OK', 'R_HSENSOR_SPO2_TITLE', 'R_HSENSOR_TEMP_TITLE', 'R_MEDICINE_ALARM', 'R_NO_SET_SOS_DIAL', 'R_NO_SET_VIDOE', 'R_NO_SIM', 'R_POWER_OFF_1', 'R_READ_STEP_0', 'R_READ_STEP_1', 'R_READ_STEP_2', 'R_READ_STEP_3', 'R_READ_STEP_4', 'R_READ_TIME_0', 'R_READ_TIME_1', 'R_READ_TIME_2', 'R_READ_TIME_3', 'R_READ_TIME_4', 'R_READ_TIME_5', 'R_READ_TIME_6', 'R_READ_TIME_7', 'R_READ_TIME_8', 'R_READ_TIME_9', 'R_READ_TIME_MIN', 'R_READ_TIME_ZHENG', 'R_RESET_ALARM', 'R_RESET_END_ALARM', 'R_SIM_CONNECT', 'R_SIM_FAILE', 'R_SLEEP_ALARM', 'R_SOS_ALERT', 'R_TSENSOR_RESULT_VALUE_DOT', 'R_UNREAD_WECHAT', 'R_VIDEO_ANSWER', 'R_VIDEO_ANSWERING', 'R_VIDEO_CALL_CONNECT', 'R_VIDEO_CALL_ENDING', 'R_VIDEO_CALL_IN', 'R_VIDEO_VOICE_IN', 'R_VIDEO_WAITING', 'R_WAKEUP_ALARM', 'R_WECHAT_RECV']\r
-\r
-\r
-    class intervManager(Abstract):\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-\r
-            self.pwk_timer1 = osTimer()\r
-            self.pwk_timer2 = osTimer()\r
-            self.timer1 = osTimer()\r
-            self.sos_timer2 = osTimer()\r
-            self.sos_timer1 = osTimer()\r
-\r
-            self.sos_sendtime = osTimer()\r
-\r
-            self.fall_timer1 = osTimer()\r
-            self.fall_timer2 = osTimer()\r
-\r
-            self.alarm_timer1 = osTimer()\r
-\r
-            self.find_timer1 = osTimer()\r
-            self.fall_flag = 0\r
-\r
-            self.factory_timer = osTimer()\r
-            \r
-            self.restart_timer = osTimer()\r
-\r
-            self.aud = audio.Audio(0)\r
-            self.aud.set_pa(Pin.GPIO29)\r
-            self.aud.setVolume(11)\r
-            self.play_count = 0\r
-            self.count = 0\r
-\r
-            self.get_hr_state  = 0\r
-            self.get_spo2_state = 0\r
-            self.timeSec = 0\r
-            self.timeTempSec = 0\r
-\r
-            self.hr_value = 0\r
-            self.spo2_value = 0\r
-            self.temp_value = 0\r
-\r
-            self.usbState = 0\r
-\r
-            self.setp_old = 0\r
-            self.step_tmp = ""\r
-            self.step_num = 0\r
-            self.power_off = 0\r
-            self.call_state = 0\r
-\r
-            self.find_state = 0\r
-            self.FIND_timer_count = 0\r
-\r
-            self.old_hour = 0\r
-            self.alarm_state = 0\r
-            self.alarm_timer_count = 0\r
-            self.old_min = 0\r
-            self.interInfo_queue = Queue()\r
-            _thread.stack_size(10*1024+64)\r
-            _thread.start_new_thread(self.interInfo_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            EventMesh.subscribe("publish_message_event_interInfo",self.publish_message_event_interInfo)\r
-            \r
-\r
-            self.audio_event_queue = Queue()\r
-            _thread.stack_size(10*1024+128)\r
-            _thread.start_new_thread(self.audio_event_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            EventMesh.subscribe("publish_message_event_audio",self.publish_message_event_audio)\r
-\r
-            self.record_test = audio.Record()\r
-            self.record_test.gain_set(4,12)\r
-\r
-            self.timeSecond = 0\r
-            self.wechat_show = 0\r
-            self.sort_new = {}\r
-            self.time_min = 0\r
-            self.press_btn = 0\r
-            self.countdown_old = 0\r
-            self.set_unread_wechat = 0\r
-            self.updateTime = 0\r
-            \r
-            self.power_on_flag = 0\r
-\r
-            self.MXA_MSG = 1\r
-            self.wechat_recode_list = {"num":0}\r
-            self.wechat_num = 0\r
-            self.read_data = {}\r
-            self.volum_size = 8 \r
-            self.phone_num = ''\r
-            self.sos_phone_num = ''\r
-            self.msg_tmp = ""\r
-            self.time_count = 0\r
-            self.alarm_count = 0\r
-            self.audio_int = 0\r
-\r
-            self.hr_auto = 0\r
-\r
-            self.temp_auto = 0\r
-            \r
-            check_txt = ql_fs.path_exists("/usr/static/storage_file/wechat_record.json")\r
-            if check_txt == True :\r
-                with open("/usr/static/storage_file/wechat_record.json","r") as fd:#音频文件编号\r
-                    self.wechat_recode_list = ujson.load(fd)\r
-                    if not self.wechat_recode_list:\r
-                        self.wechat_recode_list = {"num":0}\r
-                        self.wechat_num = 0\r
-            else:\r
-                self.wechat_recode_list = {"num":0}\r
-                with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                    ujson.dump(self.wechat_recode_list,fd)         \r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("open_power_on", self.open_power_on)#开机关机\r
-\r
-            EventMesh.subscribe("play_imei_event", self.play_imei_event)#播報imei号\r
-            EventMesh.subscribe("play_center_phone", self.play_center_phone)#拨打快捷号码\r
-            EventMesh.subscribe("play_cur_time_event", self.play_cur_time_event)#播放当前时间\r
-\r
-            EventMesh.subscribe("OPEN_FIND_WATCH", self.send_find_watch)#查找设备\r
-            EventMesh.subscribe("STOP_FIND_WATCH", self.stop_find_watch)#是否需要关闭查找设备\r
-            EventMesh.subscribe("close_timer_all", self.close_timer_all)#关闭相关定时器\r
-\r
-            EventMesh.subscribe("dial_sos_phone", self.dial_sos_phone)#长按3s拨打sos求助号码\r
-\r
-            EventMesh.subscribe("set_sim_mode", self.set_sim_mode)#sim检测\r
-\r
-            EventMesh.subscribe("close_hr_sop2", self.close_hr_sop2)#关闭健康测试\r
-            EventMesh.subscribe("set_manual_measure_mode", self.set_manual_measure_mode)#设置测试模式\r
-            EventMesh.subscribe("set_start_measure_time", self.set_start_measure_time)#设置开始测量的时间戳时间\r
-            EventMesh.subscribe("get_start_measure_time", self.get_start_measure_time)#获取开始测量的时间戳时间\r
-            EventMesh.subscribe("set_start_temp_measure_time", self.set_start_temp_measure_time)#设置体温开始测量的时间戳时间\r
-            EventMesh.subscribe("get_start_temp_measure_time", self.get_start_temp_measure_time)#获取体温开始测量的时间戳时间\r
-            EventMesh.subscribe("play_hr_value", self.play_hr_value)#播放心率数值\r
-            EventMesh.subscribe("play_spo2_value", self.play_spo2_value)#播放心率数值\r
-            EventMesh.subscribe("play_temp_value", self.play_temp_value)#播放体温数值\r
-\r
-            EventMesh.subscribe("play_sugar_value", self.play_sugar_value)#播放血糖数值\r
-\r
-\r
-            EventMesh.subscribe("set_usb", self.set_usb)#\r
-            EventMesh.subscribe("get_usb", self.get_usb)#\r
-\r
-            EventMesh.subscribe("play_cur_step_event", self.play_cur_step_event)#\r
-\r
-            EventMesh.subscribe("set_call_state", self.set_call_state)#1是 拨出去呼叫中 2是播进来 3 是正在通话中 0是无效\r
-            EventMesh.subscribe("get_call_state", self.get_call_state)#\r
-            EventMesh.subscribe("interup_call_event", self.interup_call_event)#\r
-            EventMesh.subscribe("answer_call_event", self.answer_call_event)#接听电话\r
-            EventMesh.subscribe("dialin_call_event", self.dialin_call_event)#电话拨进响铃\r
-            EventMesh.subscribe("dialing_out_event", self.dialing_out_event)#电话呼叫中\r
-            EventMesh.subscribe("call_test_event", self.call_test_event)#电话拨进响铃测试\r
-\r
-            EventMesh.subscribe("dial_out_call_center_cb", self.dial_out_call_center_cb)#电话拨出去\r
-            EventMesh.subscribe("sos_out_call_center_cb", self.sos_out_call_center_cb)#sos拨打\r
-\r
-            EventMesh.subscribe("close_audio_play", self.close_audio_play)#关闭音频\r
-\r
-\r
-            EventMesh.subscribe("start_wechat_record", self.start_wechat_record)#手表开始录音\r
-            EventMesh.subscribe("send_wechat_record", self.send_wechat_record)#发送微聊语音文件to app\r
-            EventMesh.subscribe("play_wechat_last_amr", self.play_wechat_last_amr)#播放微聊语音最后一条语音文件\r
-            EventMesh.subscribe("get_wechat_data", self.get_wechat_data)\r
-            EventMesh.subscribe("set_wechat_data", self.set_wechat_data)\r
-            EventMesh.subscribe("play_unread_wechat_infor", self.play_unread_wechat_infor)#按键播放最近一条微聊语音\r
-            EventMesh.subscribe("set_unread_wechat_state", self.set_unread_wechat_state)#设置未读标识\r
-            EventMesh.subscribe("get_unread_wechat_state", self.get_unread_wechat_state)#获取未读标志\r
-            EventMesh.subscribe("get_wechat_time", self.get_wechat_time)#获取微聊时间戳\r
-            EventMesh.subscribe("get_wechat_state", self.get_wechat_state)#获取微聊状态\r
-            EventMesh.subscribe("set_wechat_state", self.set_wechat_state)#设置微聊状态\r
-\r
-\r
-            EventMesh.subscribe("get_power_on_state", self.get_power_on_state)#获取开机标识\r
-            EventMesh.subscribe("get_power_off_state", self.get_power_off_state)#获取关机标识\r
-\r
-            EventMesh.subscribe("play_audio_file", self.play_audio_file)#获取播放音频文件\r
-\r
-            EventMesh.subscribe("OPEN_ALARM_RING", self.send_alarm_ring)#闹钟到点响铃\r
-            EventMesh.subscribe("STOP_ALARM_RING", self.stop_alarm_ring)#是否需要关闭闹钟\r
-\r
-            EventMesh.subscribe("recv_wechat_audio", self.recv_wechat_audio)#\r
-\r
-\r
-            EventMesh.subscribe("sos_short_press", self.sos_short_press)#sos短按事件\r
-\r
-            EventMesh.subscribe("falldown_alarm_event", self.falldown_alarm_event)#跌倒报警\r
-\r
-            EventMesh.subscribe("close_falldown_alarm_event", self.close_falldown_alarm_event)#关闭跌倒报警\r
-\r
-            EventMesh.subscribe("drink_alarm_event", self.drink_alarm_event)#该喝水了\r
-\r
-            EventMesh.subscribe("medicine_alarm_event", self.medicine_alarm_event)#该吃药了\r
-\r
-            EventMesh.subscribe("wakeup_alarm_event", self.wakeup_alarm_event)#该起床了\r
-\r
-            EventMesh.subscribe("home_alarm_event", self.home_alarm_event)#该回家了\r
-\r
-            EventMesh.subscribe("sleep_alarm_event", self.sleep_alarm_event)#该睡觉了\r
-\r
-            EventMesh.subscribe("reset_alarm_event", self.reset_alarm_event)#该休息了\r
-\r
-            EventMesh.subscribe("reset_end_alarm_event", self.reset_end_alarm_event)#休息结束了\r
-\r
-            EventMesh.subscribe("get_fall_down_state", self.get_fall_down_state)#跌倒报警标识\r
-\r
-            EventMesh.subscribe("app_factory", self.app_factory)#app恢复出厂\r
-\r
-            EventMesh.subscribe("app_restart", self.app_restart)#远程重启\r
-\r
-        \r
-\r
-        def interInfo_queue_thread(self):\r
-            while True:\r
-                data = self.interInfo_queue.get()\r
-                #EventMesh.debug_log("interInfo_queue_thread:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        EventMesh.debug_log("interInfo_queue_thread:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-\r
-        def publish_message_event_interInfo(self,event,msg):\r
-            self.interInfo_queue.put(msg)\r
-\r
-        def publish_call_event_cb(self, *args, **kwargs):#拨打电话\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.call_timer_cb,"data":0})  \r
-\r
-        def publish_resatrt_down_event_cb(self, *args, **kwargs):#重启设备\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.powe_resatrt_down_fun,"data":0})  \r
-        \r
-        def publish_power_down_event_cb(self, *args, **kwargs):#关机\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.power_down_fun,"data":0})  \r
-\r
-        def publish_find_watch_event_cb(self, *args, **kwargs):#查找设备\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.FIND_timer_cb,"data":0})  \r
-\r
-        def publish_alarm_ring_event_cb(self, *args, **kwargs):#闹钟响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.Alarm_timer_cb,"data":0})  \r
-\r
-        def publish_reset_alarm_ring_event_cb(self, *args, **kwargs):#休息响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.reset_alarm_event_cb,"data":0})  \r
-        \r
-        def publish_reset_end_alarm_ring_event_cb(self, *args, **kwargs):#休息结束响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.reset_end_alarm_event_cb,"data":0})  \r
-        \r
-        def publish_sleep_alarm_ring_event_cb(self, *args, **kwargs):#睡觉响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.sleep_alarm_event_cb,"data":0})  \r
-        \r
-        def publish_home_ring_event_cb(self, *args, **kwargs):#回家响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.home_alarm_event_cb,"data":0})  \r
-\r
-        def publish_wakeup_ring_event_cb(self, *args, **kwargs):#起床响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.wakeup_alarm_event_cb,"data":0})  \r
-\r
-        def publish_medicine_ring_event_cb(self, *args, **kwargs):#吃药响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.medicine_alarm_event_cb,"data":0})  \r
-\r
-        def publish_drink_ring_event_cb(self, *args, **kwargs):#喝水响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.drink_alarm_event_cb,"data":0})  \r
-\r
-        def publish_fall_done_ring_event_cb(self, *args, **kwargs):#跌倒提醒\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.falldown_alarm_cb,"data":0})  \r
-\r
-\r
-        def reset_alarm_event(self,args,msg):#该休息了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_reset_alarm_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        def reset_alarm_event_cb(self,args):#该休息了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-        def reset_end_alarm_event(self,args,msg):#休息结束了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.reset_end_alarm_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_END_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        \r
-        def reset_end_alarm_event_cb(self,args):#休息结束了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_END_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-        \r
-        def sleep_alarm_event(self,args,msg):#该睡觉了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_sleep_alarm_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SLEEP_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        def sleep_alarm_event_cb(self,args):#该睡觉了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SLEEP_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-\r
-        def home_alarm_event(self,args,msg):#该回家了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_home_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HOME_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        \r
-        def home_alarm_event_cb(self,args):#该回家了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HOME_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-        \r
-        def wakeup_alarm_event(self,args,msg):#该起床了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_wakeup_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_WAKEUP_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        \r
-        def wakeup_alarm_event_cb(self,args):#该起床了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_WAKEUP_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-\r
-        def medicine_alarm_event(self,args,msg):#该吃药了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_medicine_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_MEDICINE_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-\r
-        def medicine_alarm_event_cb(self,args):#该吃药了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_MEDICINE_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-        def drink_alarm_event(self,args,msg):#该喝水了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_drink_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_DRINK_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            \r
-\r
-\r
-        def drink_alarm_event_cb(self,args):#该喝水了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                self.alarm_count += 1# 1 2 \r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_DRINK_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-            \r
-        def falldown_alarm_event(self,args,msg):#跌倒报警启动中提示\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if flag == 0 and wechat_state == 0:\r
-                EventMesh.publish("close_timer_all")#\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_FALL_ALARM"))\r
-                self.time_count = 0\r
-                self.fall_flag = 0\r
-                self.fall_timer1.stop()\r
-                self.fall_flag = 1\r
-                self.fall_timer1.start(4000, 1, self.publish_fall_done_ring_event_cb)\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-\r
-        def falldown_alarm_cb(self,*args):\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and wechat_state == 0:\r
-                self.time_count+=1\r
-                if self.time_count >= 5:\r
-                    self.time_count = 0\r
-                    self.fall_timer1.stop()\r
-                    EventMesh.publish_async("dial_sos_phone")#拨打sos号码\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_FALL_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.time_count = 0\r
-                self.fall_timer1.stop()\r
-        \r
-        def close_falldown_alarm_event(self,event,msg):#跌倒挂断挂断\r
-            if self.fall_flag == 1:#跌倒标志\r
-                self.fall_flag = 0\r
-                self.fall_timer1.stop()\r
-                self.sos_timer1.stop()\r
-                self.sos_timer2.stop()\r
-                if self.call_state != 0:\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                sos_flag = EventMesh.publish("get_sos_flag")\r
-                if sos_flag == 1:\r
-                    self.call_state = 0\r
-                    EventMesh.publish("set_sos_flag",0)\r
-                    EventMesh.publish("set_sos_num",0)\r
-                    EventMesh.publish("set_hangup_mode",0)\r
-\r
-        \r
-\r
-        def send_find_watch(self, event, msg): #发送查找设备指令\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if flag == 0 and wechat_state == 0 and self.fall_flag == 0: \r
-                EventMesh.publish("close_timer_all")#\r
-                self.find_state = 1\r
-                self.FIND_timer_count = 0\r
-                self.alarm_timer1.start(3000,1,self.publish_find_watch_event_cb)\r
-                EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                # EventMesh.publish("set_led_time_arg",[1000,33000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("audio_find_haixiu"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-        \r
-        def stop_find_watch(self, event, msg): \r
-            if self.find_state == 1:\r
-                self.find_state = 0\r
-                self.FIND_timer_count = 0\r
-                # EventMesh.publish("stop_led_timer")#设置参数\r
-                self.aud.stopPlayStream()  #播放声音 \r
-                self.alarm_timer1.stop()\r
-\r
-        def FIND_timer_cb(self, data):\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if flag == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                if self.find_state == 1:\r
-                    # EventMesh.debug_log("self.FIND_timer_count:{}".format(self.FIND_timer_count))\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("audio_find_haixiu"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    self.FIND_timer_count += 1\r
-                    if self.FIND_timer_count > 10: #120秒30s\r
-                        EventMesh.publish("STOP_FIND_WATCH")\r
-            else:\r
-                self.FIND_timer_count = 0\r
-                self.alarm_timer1.stop()\r
-                \r
-        \r
-        def stop_FIND(self) :\r
-            self.alarm_timer1.stop()\r
-\r
-        def send_alarm_ring(self, event, msg): #发送查找设备指令\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if flag == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                EventMesh.publish("close_timer_all")#\r
-                self.alarm_state = 1\r
-                self.alarm_timer_count = 0\r
-                self.alarm_timer1.start(3000,1,self.publish_alarm_ring_event_cb)\r
-                # EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                # EventMesh.publish("set_led_time_arg",[1000,33000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_ALARM_NEW"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-        \r
-        def stop_alarm_ring(self, event, msg): #停止闹钟响铃\r
-            if self.alarm_state == 1:\r
-                self.alarm_state = 0\r
-                self.alarm_timer_count = 0\r
-                # EventMesh.publish("stop_led_timer")#设置参数\r
-                self.aud.stopPlayStream()  #停止播放\r
-                self.alarm_timer1.stop()\r
-\r
-        def Alarm_timer_cb(self, data):\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if flag == 0 and wechat_state == 0 and self.fall_flag == 0:\r
-                if self.alarm_state == 1:\r
-                    # EventMesh.debug_log("self.alarm_timer_count:{}".format(self.alarm_timer_count))\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_ALARM_NEW"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    self.alarm_timer_count += 1\r
-                    if self.alarm_timer_count > 15: #120秒30s\r
-                        EventMesh.publish("STOP_ALARM_RING")\r
-            else:\r
-                self.alarm_timer_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-        def get_fall_down_state(self,event,msg):\r
-            return self.fall_flag\r
-\r
-        def sos_short_press(self,args,msg):\r
-            EventMesh.publish("interup_call_event")#如果在电话中强制挂断电话\r
-            EventMesh.publish("close_audio_play")#强制关闭音频文件播放\r
-            EventMesh.publish("STOP_FIND_WATCH")#停止查找设备\r
-            EventMesh.publish("STOP_ALARM_RING")#停止闹钟响铃\r
-            EventMesh.publish("play_cur_time_event")#播报当前时间\r
-            #播报当前时间\r
-\r
-        def recv_wechat_audio(self,event,str_data):#接收微聊语音播放\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            if self.call_state == 0 and self.fall_flag == 0 and wechat_state == 0: \r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_WECHAT_RECV"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-\r
-\r
-\r
-        def audio_event_queue_thread(self):\r
-            while True:\r
-                data = self.audio_event_queue.get()\r
-                #EventMesh.debug_log("audio_event_queue:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        EventMesh.debug_log("audio_event_queue:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-        def publish_message_event_audio(self,event,msg):\r
-            self.audio_event_queue.put(msg)\r
-\r
-        def play_audio_file(self, *args, **kwargs):#播放音频文件\r
-            # EventMesh.debug_log("args",args)\r
-            # EventMesh.publish("publish_message_event_audio",{"func":self.play_audio_file_do,"data":args[1]})  \r
-            data = args[1]\r
-            self.play_audio_file_do(data)\r
-\r
-        def play_audio_file_do(self,data):#msg 拼接的路径文件\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            # EventMesh.debug_log("play_audio_file",data[0],data[1],open_power,power_off)#路径 str_data[1] 是否需要被打断\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            self.aud.montage_play('U:/static/audio.bin',1,data[1],data[0])\r
-            # EventMesh.debug_log("play_audio_file end",data[0],data[1])#路径 str_data[1] 是否需要被打断\r
-            \r
-\r
-\r
-\r
-\r
-        def powe_resatrt_down_fun(self, *args):#重启设备\r
-            EventMesh.publish("close_led_pin")\r
-            self.aud.stopPlayStream()\r
-            Power.powerRestart()\r
-\r
-        def power_down_fun(self, *args):\r
-            EventMesh.publish("close_led_pin")\r
-            self.aud.stopPlayStream()\r
-            Power.powerDown()\r
-\r
-\r
-\r
-        def close_audio_play(self, event, msg): #msg\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            self.aud.stopPlayStream()\r
-\r
-\r
-\r
-        def close_timer_all(self, event, msg): \r
-            # EventMesh.debug_log("close_timer_all!!!!!!!!!!!!!!!!!!!")\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            self.aud.stopPlayStream()\r
-            \r
-            \r
-            self.timer.stop()\r
-            self.sos_timer2.stop()\r
-            self.sos_timer1.stop()\r
-            self.fall_flag = 0\r
-            self.fall_timer1.stop()\r
-            self.alarm_timer1.stop()\r
-        \r
-\r
-        def answer_call_event(self, event, msg): #\r
-            if self.call_state == 2:\r
-                sos_flag = EventMesh.publish("get_sos_flag")\r
-                if sos_flag == 1:\r
-                    self.call_state = 0\r
-                    EventMesh.publish("set_sos_flag",0)\r
-                    EventMesh.publish("set_sos_num",0)\r
-                    EventMesh.publish("set_hangup_mode",0)\r
-                EventMesh.publish("close_timer_all")#\r
-                voiceCall.callAnswer()\r
-\r
-        def set_call_state(self, event, msg): #\r
-            self.call_state = msg\r
-\r
-        def dialin_call_event(self, event, msg):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            EventMesh.publish("close_timer_all")#\r
-            EventMesh.publish("close_wechat_btn_timer")#\r
-            EventMesh.publish("set_led_time_arg",[1,2,10*10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-            self.timer.start(6000, 1, self.publish_call_event_cb)\r
-            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CALL_mp3"))\r
-            EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-            # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-        \r
-        def call_timer_cb(self,data):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            if self.call_state != 2:\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("close_timer_all")#\r
-                return\r
-            EventMesh.publish("set_led_time_arg",[1,2,10*10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CALL_mp3"))\r
-            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        \r
-        def dial_out_call_center_cb(self, event, msg):#电话拨出去\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            # EventMesh.debug_log("dial_out_call_center_cb",msg)\r
-            if self.call_state == 0:\r
-                self.phone_num = ''\r
-                EventMesh.publish("close_timer_all")#\r
-                if msg == None:\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-                    # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:\r
-                    self.phone_num = str(msg)\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))\r
-                    EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-                    self.timer1.start(2000, 0, self.time_out_phone)\r
-                    \r
-        \r
-        def time_out_phone(self, msg):#电话拨出去\r
-            voiceCall.callStart(self.phone_num)\r
-\r
-        def sos_out_call_center_cb(self, event, msg):#sos电话呼叫中\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            self.sos_phone_num = ''\r
-            # EventMesh.debug_log("sos_out_call_center_cb",msg)\r
-            if self.call_state == 0:\r
-            \r
-                EventMesh.publish("close_timer_all")#\r
-                if msg == None:\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-                    # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:\r
-                    sos_state =  EventMesh.publish("get_dev_state")\r
-\r
-                    tmp = 1 << 16\r
-                    sos_state = sos_state|tmp #第21位=1\r
-                    EventMesh.publish("set_dev_state",sos_state)\r
-\r
-                    EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,sos_state]) #开始AL定位\r
-                    EventMesh.publish("close_timer_all")#\r
-                    self.sos_phone_num = msg\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))\r
-                    EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-                    self.sos_timer1.start(2000, 0, self.sos_call_out_phone)\r
-                    self.sos_timer2.start(30000, 0, self.sos_time_out_phone)\r
-                    \r
-                    \r
-        def sos_time_out_phone(self, msg):#30s超时未打通或者信号不好则重新拨打\r
-            sos_flag = EventMesh.publish("get_sos_flag")\r
-            if sos_flag == 1:\r
-                if self.call_state == 0:\r
-                    EventMesh.publish("set_sos_info_call") \r
-                    \r
-        def sos_call_out_phone(self, msg):#电话拨出去\r
-            voiceCall.callStart(self.sos_phone_num)\r
-        \r
-\r
-        def call_test_event(self, event, msg):\r
-            voiceCall.callStart(str("10086"))\r
-\r
-        def get_call_state(self, event, msg):\r
-            return self.call_state\r
-        \r
-        def interup_call_event(self, event, msg):#侧边金属按钮挂断来电\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 2 or flag == 3:#电话通话中 或者呼叫中挂断中断\r
-                self.call_state = 0\r
-                voiceCall.callEnd()\r
-        \r
-        def dialing_out_event(self, event, msg):#侧边金属按键挂断电话呼叫中\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 1 or flag == 3:#电话呼叫中\r
-                self.call_state = 0\r
-                voiceCall.callEnd()\r
-                \r
-\r
-\r
-        def play_cur_step_event(self, event, msg): #msg 1 播放当前步数\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                if self.fall_flag == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                step = EventMesh.publish("get_old_step_value")\r
-                EventMesh.debug_log("step",step)\r
-                self.setp_old = step\r
-                if step <= 10:#\r
-                    if step == 10:#十步\r
-                        str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:# 9步\r
-                        str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(step)),audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                elif step <= 100:#十 90\r
-                    if step == 100:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),audio_buf.index("R_READ_STEP_2"),\\r
-                            audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        step_tmp = str(step)\r
-                        shi_value = int(step_tmp[0])#十\r
-                        ge_value = int(step_tmp[1])#个\r
-                        if shi_value > 1:#大于19步\r
-                            if ge_value == 0:#9十步 70十步\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:#9十2步\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:#十9步\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                            audio_buf.index("R_READ_STEP_4"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                elif step <= 1000:\r
-                    if step == 1000:#1千步\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\\r
-                        audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        step_tmp = str(step)#500\r
-                        bai_value = int(step_tmp[0])#百\r
-                        shi_value = int(step_tmp[1])#十\r
-                        ge_value = int(step_tmp[2])#个\r
-                        #101 110 1\r
-                        if shi_value > 0:#110\r
-                            if ge_value == 0:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:\r
-                            if shi_value == 0 and ge_value == 0:#500 600\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                pass\r
-                            else:\r
-\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-                elif step <= 10000:#千\r
-                    if step == 10000:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\\r
-                        audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        pass\r
-                    else:\r
-                        one_thousand = step//1000 #千\r
-                        one_hundred = step%1000 #百\r
-                        baishu = step%100 #十\r
-                        shishu = step%10 #个\r
-                        step_tmp = str(step)\r
-                        qian = int(step_tmp[0])#千\r
-                        bai_value = int(step_tmp[1])#百\r
-                        shi_value = int(step_tmp[2])#十\r
-                        ge_value = int(step_tmp[3])#个\r
-                        if bai_value <= 0:\r
-                            if shi_value <= 0:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                if ge_value == 0:#1020 1040\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                else:#1021 \r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:\r
-                            if shi_value <= 0:#1109\r
-                                if ge_value == 0:#1110\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\r
-                                    audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                else:\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\r
-                                    audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                    audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                if ge_value == 0:#1110\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\r
-                                    audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                else:#1117\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\r
-                                    audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                        pass\r
-                elif step <= 100000:#万\r
-                            if step == 100000:#10万步\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),\\r
-                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                step_tmp = str(step)\r
-                                wang = int(step_tmp[0])#万\r
-                                qian = int(step_tmp[1])#千\r
-                                bai_value = int(step_tmp[2])#百\r
-                                shi_value = int(step_tmp[3])#十\r
-                                ge_value = int(step_tmp[4])#个\r
-                                if wang > 0 and qian > 0 and bai_value > 0:#11109 11111\r
-                                    if shi_value <= 0:#11109\r
-                                        if ge_value == 0:#11100\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#11108\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                            audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            pass\r
-                                    else:\r
-                                        if ge_value == 0:#11110\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                            audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#11116\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                            audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            pass\r
-                                elif wang > 0 and qian > 0:#11000 11010 11012 11008\r
-                                    if shi_value > 0:\r
-                                        if ge_value == 0:#11010\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                            audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#11016\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                            audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    else:   \r
-                                        if ge_value == 0:#11000\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#11004\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                            audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                \r
-                                elif wang > 0:#1\r
-                                    if bai_value > 0:#百\r
-                                        if shi_value > 0:#10110\r
-                                            if ge_value == 0:#10150\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                                audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            else:\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                                audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#10108\r
-                                            if ge_value == 0:#10100\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            else:#10108\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                                audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    else:\r
-                                        if shi_value > 0:\r
-                                            if ge_value == 0:#10090\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                                audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            else:#10098\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                                audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                            audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-        def set_usb(self, event, msg): #msg 1 正在充电 2充电已移出 3 充电已满 0\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            flag = EventMesh.publish("get_call_state") \r
-            get_hr_state = EventMesh.publish("get_hr_state")\r
-            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-            get_bp_state  = EventMesh.publish("get_bp_state")\r
-            get_bg_state  = EventMesh.publish("get_bg_state")\r
-            get_temp_state  = EventMesh.publish("get_temp_state")\r
-            if msg == 1:\r
-                if get_hr_state != None and get_spo2_state != None and get_bp_state != None and get_bg_state != None and get_temp_state != None:\r
-                    if get_hr_state != 0:\r
-                        \r
-                        EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                        if get_hr_state == 1:\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            EventMesh.publish("set_start_measure_time",0)#设置开始测量的时间戳时间\r
-\r
-                        EventMesh.debug_log("stop debug8")\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART) \r
-                    if get_spo2_state != 0:\r
-                        EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                        if get_spo2_state == 1:\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                        EventMesh.debug_log("stop debug13")\r
-                    if get_bp_state != 0:\r
-                        EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                        if get_bp_state == 1:\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                        EventMesh.debug_log("stop bp debug1")\r
-                    if get_bg_state != 0:\r
-                        EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                        if get_bg_state == 1:#手动开灯关闭灯\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                        EventMesh.debug_log("stop BG  debug14")\r
-                    if get_temp_state != 0:\r
-                        \r
-                        EventMesh.publish("set_temp_state",0)#2代表后台进入测试\r
-                        if get_temp_state == 1:\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            EventMesh.publish("set_start_temp_measure_time",0)#\r
-                        EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-                        EventMesh.debug_log("stop temp  debug14")\r
-            if msg == 1:\r
-                self.usbState = msg\r
-                str_buf = [1,1,10,led_mode.LONG_LIGHT_RED,4,2,led_mode.CHARGE_IN_MODE]\r
-                EventMesh.publish("set_led_time_arg",str_buf)#\r
-                if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                    EventMesh.publish("close_timer_all")#\r
-                    self.aud.stop()\r
-                    self.aud.play(1,1,'U:/static/R_CHARGE_IN.mp3')\r
-                    # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_IN"))\r
-                    # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                EventMesh.debug_log("charge R_CHARGE_IN")\r
-                \r
-                \r
-            elif msg == 2:\r
-                self.usbState = msg\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,4,led_mode.CHARGE_OUT_MODE])#測量成功\r
-                EventMesh.debug_log("charge R_CHARGE_OUT")\r
-                if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                    EventMesh.publish("close_timer_all")#\r
-                    self.aud.stop()\r
-                    self.aud.play(1,1,'U:/static/R_CHARGE_OUT.mp3')\r
-                    # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_OUT"))\r
-                    # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                \r
-\r
-\r
-            elif msg == 3:\r
-                self.usbState = msg\r
-                EventMesh.debug_log("charge full")\r
-                str_buf = [1,1,10,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.CHARGE_FULL_MODE]\r
-                EventMesh.publish("set_led_time_arg",str_buf)#\r
-                # if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                #     EventMesh.publish("close_timer_all")#\r
-                #     str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_FULL"))\r
-                #     EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                \r
-\r
-\r
-        def get_usb(self, event, msg):\r
-            return self.usbState\r
-        \r
-\r
-\r
-        def app_factory(self,event,msg):\r
-            if msg != None:\r
-                number = str(msg)\r
-                sms.sendPduMsg(number, 'factory# send ok', 'UCS2')\r
-            ret = 0\r
-            ret = ql_fs.path_exists("/usr/static/storage_file")#\r
-            if ret == True:\r
-                ql_fs.rmdirs("/usr/static/storage_file")\r
-                ql_fs.mkdirs("/usr/static/storage_file")\r
-            if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:\r
-                EventMesh.publish(constants.PROTOCOL.DLT_SEND)\r
-        \r
-            self.factory_timer.start(6*1000,0,self.factory_cb)\r
-            pass\r
-        def factory_cb(self,*argc):\r
-            self.aud.stopPlayStream()\r
-            Power.powerRestart()\r
-\r
-        def app_restart(self,event,msg):#远程发短信重启\r
-            if msg != None:\r
-                number = str(msg)\r
-                sms.sendPduMsg(number, 'reset# send ok', 'UCS2')\r
-            self.restart_timer.start(3*1000,0,self.app_restart_cb)\r
-            pass\r
-        def app_restart_cb(self,*argc):\r
-            Power.powerRestart()\r
-\r
-        def open_power_on(self, event, msg): #msg 1 开机 2 关机 3 重启  4恢复出厂设置 5静音关机\r
-            EventMesh.publish("close_timer_all")#\r
-            if msg == 1:\r
-                EventMesh.publish("close_hr_sop2")#\r
-                # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-                # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                self.pwk_timer1.start(1000,0,self.power_on_audio_cb)\r
-                \r
-            elif msg == 2:\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 0:#电话呼叫中\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                step = EventMesh.publish("get_old_step_value")\r
-                # step1 = SC7A20().get_step()\r
-                # step1 = EventMesh.publish(constants.EVENT.GET_STEP)\r
-                # step2 = EventMesh.publish("get_storage_config","old_step")\r
-                self.read_data = EventMesh.publish("get_storage_data")\r
-                # EventMesh.publish("set_test_data5",[1,step,step1,step2])\r
-                if step != 0:\r
-                    EventMesh.publish("set_storage_config",["old_step",step])\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-                # step3 = EventMesh.publish("get_old_step_value")\r
-                # step4 = SC7A20().get_step()\r
-                # step4 = EventMesh.publish(constants.EVENT.GET_STEP)\r
-                # step5 = EventMesh.publish("get_storage_config","old_step")\r
-                # EventMesh.publish("set_test_data6",[1,step3,step4,step5])\r
-                EventMesh.publish("set_storage_config",["old_time",time_tmp])#关机保存一个是时间\r
-                EventMesh.publish("set_storage_config",["power_state",0])\r
-                # self.pwk_timer1.start(3000,0,self.power_off_audio_cb)\r
-                EventMesh.publish("close_hr_sop2")#\r
-                # EventMesh.debug_log("power_off_audio_cb")\r
-                self.aud.stop()\r
-                self.aud.play(1,0,'U:/static/R_POWER_OFF_1.mp3')\r
-                # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-                # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_RED,6,3,led_mode.POWER_OFF_MODE])#\r
-                self.power_off = 1\r
-                self.pwk_timer2.start(6000,0,self.publish_power_down_event_cb)\r
-            elif msg == 3:\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 0:#电话呼叫中\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                EventMesh.publish("close_hr_sop2")#\r
-                self.aud.stop()\r
-                self.aud.play(1,0,'U:/static/R_POWER_OFF_1.mp3')\r
-                # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-                # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                self.power_off = 1\r
-                self.timer.start(8000,0,self.publish_resatrt_down_event_cb)\r
-                #EventMesh.publish("set_led_time_arg",[3000,4000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE])#\r
-            elif msg == 4:\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 0:#电话呼叫中\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                EventMesh.publish("close_hr_sop2")#\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                self.power_off = 1\r
-                ret = 0\r
-                ret = ql_fs.path_exists("/usr/static/storage_file")#\r
-                if ret == True:\r
-                    ql_fs.rmdirs("/usr/static/storage_file")\r
-                    ql_fs.mkdirs("/usr/static/storage_file")\r
-                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:\r
-                    EventMesh.publish(constants.PROTOCOL.DLT_SEND)\r
-                self.aud.stopPlayStream()\r
-                self.timer.start(6*1000,0,self.fun)\r
-            elif msg == 5:\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 0:#电话呼叫中\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                step = EventMesh.publish("get_old_step_value")\r
-                # step1 = SC7A20().get_step()\r
-                # step1 = EventMesh.publish(constants.EVENT.GET_STEP)\r
-                # step2 = EventMesh.publish("get_storage_config","old_step")\r
-                self.read_data = EventMesh.publish("get_storage_data")\r
-                # EventMesh.publish("set_test_data7",[1,step,step1,step2])\r
-                if step != 0:\r
-                    EventMesh.publish("set_storage_config",["old_step",step])\r
-\r
-                # step3 = EventMesh.publish("get_old_step_value")\r
-                # step4 = SC7A20().get_step()\r
-                # step4 = EventMesh.publish(constants.EVENT.GET_STEP)\r
-                # step5 = EventMesh.publish("get_storage_config","old_step")\r
-                # EventMesh.publish("set_test_data8",[1,step3,step4,step5])\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-                EventMesh.publish("set_storage_config",["old_time",time_tmp])#关机保存一个是时间\r
-                EventMesh.publish("set_storage_config",["power_state",1])\r
-                \r
-                EventMesh.publish("close_hr_sop2")#\r
-                EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_RED,6,3,led_mode.POWER_OFF_MODE])#\r
-                self.power_off = 1\r
-                self.pwk_timer2.start(6000,0,self.publish_power_down_event_cb)\r
-                # self.pwk_timer1.start(3000,0,self.power_off_no_audio_cb)#不需要关机铃声\r
-\r
-        def fun(self,*argc):\r
-            self.aud.stopPlayStream()\r
-            Power.powerRestart()\r
-            \r
-\r
-        def power_on_cb(self, msg): #msg 开机标识\r
-            self.power_on_flag = 1\r
-        def clear_power_on_cb(self, msg): #msg 开机标识\r
-            self.power_on_flag = 0\r
-        \r
-        def power_on_audio_cb(self, msg):\r
-            self.power_on_flag = 1\r
-            # EventMesh.debug_log("power_on_audio_cb")\r
-            power_state = EventMesh.publish("get_storage_config","power_state")\r
-            if power_state == None:\r
-                power_state = 0\r
-            # print("power_state",power_state)\r
-            if power_state <= 0:\r
-                self.aud.stop()\r
-                self.aud.play(1,1,'U:/static/R_POWER_OFF_1.mp3')\r
-            # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-            # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_GREEN,6,3,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-            # EventMesh.publish("set_led_time_arg",[1000,200,10,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-            self.power_on_flag = 0\r
-            self.pwk_timer2.start(5000,0,self.power_on_cb)\r
-\r
-        def get_power_on_state(self, event, msg):\r
-            return self.power_on_flag\r
-        \r
-        def power_off_audio_cb(self, msg):\r
-            # EventMesh.debug_log("power_off_audio_cb")\r
-            self.aud.stop()\r
-            self.aud.play(1,0,'U:/static/R_POWER_OFF_1.mp3')\r
-            # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-            # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_RED,6,3,led_mode.POWER_OFF_MODE])#\r
-            self.power_off = 1\r
-            self.pwk_timer2.start(6000,0,self.publish_power_down_event_cb)\r
-        \r
-        def power_off_no_audio_cb(self, msg):\r
-            EventMesh.debug_log("power_off_no_audio_cb")\r
-            EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_RED,6,3,led_mode.POWER_OFF_MODE])#\r
-            self.power_off = 1\r
-            self.pwk_timer2.start(6000,0,self.publish_power_down_event_cb)\r
-\r
-        def set_power_off_cb(self, msg):\r
-            self.power_off = 1\r
-\r
-        def get_power_off_state(self, event, msg):\r
-            return self.power_off\r
-\r
-        def close_hr_sop2(self, event, msg): #msg 关闭心率血氧体温测试\r
-            get_hr_state = EventMesh.publish("get_hr_state")\r
-            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-            get_temp_state = EventMesh.publish("get_temp_state")\r
-            get_bg_state = EventMesh.publish("get_bg_state")\r
-            get_bp_state = EventMesh.publish("get_bp_state")\r
-            if get_hr_state != None and get_spo2_state != None and get_temp_state != None and get_bg_state != None and get_bp_state != None:\r
-                if get_hr_state != 0:\r
-                    EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                    EventMesh.debug_log("sstop hr")\r
-                    EventMesh.publish(constants.EVENT.STOP_HEART) \r
-                if get_spo2_state != 0 :\r
-                    EventMesh.debug_log("stop spo2")\r
-                    EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                    EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                if get_temp_state != 0:\r
-                    EventMesh.debug_log("stop temp")\r
-                    EventMesh.publish("set_temp_state",0)\r
-                    EventMesh.publish(constants.EVENT.STOP_TEMP)#手动体温测试\r
-                if  get_bg_state != 0:\r
-                    EventMesh.publish("set_bg_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                    EventMesh.debug_log("sstop bg")\r
-                    EventMesh.publish(constants.EVENT.STOP_HEART) \r
-\r
-                if  get_bp_state != 0:\r
-                    EventMesh.publish("set_bp_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                    EventMesh.debug_log("sstop bp")\r
-                    EventMesh.publish(constants.EVENT.STOP_HEART) \r
-\r
-        def set_manual_measure_mode(self, event, msg): #手动测试 1心率 2 血氧 3 体温\r
-            get_hr_state = EventMesh.publish("get_hr_state")\r
-            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-            get_temp_state = EventMesh.publish("get_temp_state")\r
-            if msg == 1:\r
-                if get_hr_state != 1:#不是手动测试直接打断\r
-                    EventMesh.debug_log("set_manual_measure_mode",msg)\r
-                    EventMesh.publish("set_spo2_state",0)\r
-                    EventMesh.publish("set_bg_state",0)\r
-                    EventMesh.publish("set_bp_state",0)\r
-                    \r
-                    EventMesh.publish("set_hr_state",1)\r
-                    EventMesh.publish("clear_manual_hr_flag")\r
-                    EventMesh.publish("set_start_measure_time",1)#设置开始测量的时间戳时间\r
-                    EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN) #停止测试血氧\r
-                    EventMesh.publish("set_hr_blood_led",1)\r
-                    EventMesh.publish(constants.EVENT.START_HEART) #手动心率测试\r
-            elif msg == 2:\r
-                if get_hr_state == 0:\r
-                    if get_spo2_state != 1:\r
-                        EventMesh.debug_log("set_manual_measure_mode",msg)\r
-                        EventMesh.publish("set_spo2_state",1)\r
-                        EventMesh.publish("set_start_measure_time",1)#设置开始测量的时间戳时间\r
-                        EventMesh.publish("set_hr_blood_led",1)\r
-                        EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN) #手动血氧测试\r
-            elif msg == 3:\r
-                if get_temp_state != 1:\r
-                    EventMesh.debug_log("set_manual_measure_mode",msg)\r
-                    EventMesh.publish("clear_manual_temp_flag")\r
-                    EventMesh.publish("set_temp_state",1)\r
-                    EventMesh.publish("set_start_temp_measure_time",1)#设置开始测量的时间戳时间\r
-                    EventMesh.publish("set_hr_blood_led",1)\r
-                    EventMesh.publish(constants.EVENT.START_TEMP)#手动体温测试\r
-            pass\r
-\r
-\r
-        def set_start_measure_time(self, event, msg): #手动测试 1心\r
-            self.hr_auto = msg\r
-            pass\r
-\r
-        def get_start_measure_time(self, event, msg): #手动测试 \r
-\r
-            return  self.hr_auto\r
-        \r
-        def set_start_temp_measure_time(self, event, msg): #\r
-            self.temp_auto = msg\r
-            pass\r
-\r
-        def get_start_temp_measure_time(self, event, msg): #\r
-            return self.temp_auto\r
-\r
-        def mearsure_cb(self, event, msg):\r
-            if msg == 1:\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            elif msg == 2:\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data) \r
-            elif msg == 3:\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data) \r
-            elif msg == 4:\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data) \r
-            \r
-            \r
-            \r
-        def play_temp_value(self, event, msg): #播放体温数值\r
-            flag = EventMesh.publish("get_call_state") \r
-            if msg != None:\r
-                if flag == 0 and self.fall_flag == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                    if msg > 0:\r
-                        # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                        # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                        self.temp_value = msg\r
-                        # self.timer.start(2*1000,1,self.play_temp_fun)\r
-                        self.play_temp_fun(0)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-                else:\r
-                    EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-\r
-        def play_temp_fun(self,argc): #播放体温数值\r
-            data = self.temp_value\r
-            if data > 42:\r
-                data = 42\r
-            data_tmp = str(data)\r
-            if data_tmp.find(".") != -1:\r
-                temp_shi = int(data_tmp.split('.')[0])//10\r
-                temp_ge = int(data_tmp.split('.')[0])%10\r
-                dot_ge = int(data_tmp.split('.')[1][:1])\r
-                if temp_ge > 0:#37.0\r
-                    if dot_ge > 0:#37.5\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),\\r
-                        audio_buf.index("R_READ_TIME_{}".format(dot_ge)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                    else:#37.0\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:#30.0 30.6\r
-                    if dot_ge > 0:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(dot_ge)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                        audio_buf.index("R_READ_STEP_3"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-            else:\r
-                temp_shi = int(data_tmp)//10\r
-                temp_ge = int(data_tmp)%10\r
-\r
-                if temp_ge > 0:#45\r
-                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:\r
-                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                    audio_buf.index("R_READ_STEP_3"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            \r
-\r
-        def play_hr_value(self, event, msg): #播放心率数值\r
-            flag = EventMesh.publish("get_call_state") \r
-            if msg != None:\r
-                if flag == 0 and self.fall_flag == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                    if msg >= 50:\r
-                        # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                        # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        self.hr_value = msg\r
-                        EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                        # self.timer.start(2*1000,1,self.play_hr_fun)\r
-                        self.play_hr_fun(0)\r
-                    else:\r
-                        str_data ='mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-                else:\r
-                    EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-        \r
-\r
-        def play_hr_fun(self,argc):#播放心率测试值\r
-            flag = EventMesh.publish("get_call_state") \r
-            \r
-            if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                data = self.hr_value\r
-                if data > 220:\r
-                    data = 220\r
-                if data < 100:\r
-                    if data%10 == 0:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else: \r
-                    shi = (data%100)//10 #210\r
-                    ge = (data%100)%10\r
-                    #210 234\r
-                    if shi > 0:\r
-                        if ge == 0:#210 230 120\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\\r
-                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\\r
-                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"),\\r
-                            audio_buf.index("R_READ_TIME_{}".format(ge)))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        if ge == 0:#200 100 209 108\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\\r
-                            audio_buf.index("R_READ_STEP_2"))\r
-                            EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\\r
-                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge)))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-        def play_sugar_value(self, event, msg): #播放血糖数值\r
-            flag = EventMesh.publish("get_call_state") \r
-            if msg != None:\r
-                if flag == 0 and self.fall_flag == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                    if msg != 0:\r
-                        # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                        # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                        # self.timer.start(2*1000,1,self.play_spo2_fun)\r
-                        self.play_sugar_fun(msg)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-                else:\r
-                    EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-\r
-        def play_sugar_fun(self,argc):#播放血糖测试值\r
-            flag = EventMesh.publish("get_call_state") \r
-            \r
-            if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                data = str(argc)\r
-                data_shi = 0\r
-                data_ge = 0\r
-                if data.find(".") != -1:\r
-                    data_shi = int(data.split(".")[0])\r
-                    data_ge = int(data.split(".")[1])\r
-                else:\r
-                    data_shi = int(data)\r
-                    data_ge = 0\r
-\r
-                if data_shi != 0 and data_ge != 0:\r
-                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_BLOOD_SUGAR"),audio_buf.index("R_READ_TIME_{}".format(data_shi)),\\r
-                    audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(data_ge)))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            else:\r
-                EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-\r
-\r
-\r
-        def play_spo2_value(self, event, msg): #播放血样数值\r
-            flag = EventMesh.publish("get_call_state") \r
-            if msg != None:\r
-                if flag == 0 and self.fall_flag == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                    if msg >= 85:\r
-                        # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                        # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                        self.spo2_value = msg\r
-                        # self.timer.start(2*1000,1,self.play_spo2_fun)\r
-                        self.play_spo2_fun(0)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-                else:\r
-                    EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-\r
-        def play_spo2_fun(self,argc):#播放血氧测试值\r
-            flag = EventMesh.publish("get_call_state") \r
-            \r
-            if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                data = self.spo2_value\r
-                if data > 100:\r
-                    data = 100\r
-                if data == 100:\r
-                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                    audio_buf.index("R_READ_STEP_2"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:\r
-                    if data % 10 == 0:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        pass\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-        def set_sim_mode(self, event, msg): #mode 1 蓝灯闪烁 可识别卡 但未联网 2 可绑定appsim正常 3 手表不识别卡或者未插卡\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                # EventMesh.publish("stop_led_timer")#设置参数\r
-                mode = 0\r
-                signal = EventMesh.publish("get_sim_Status")\r
-                if signal != None:\r
-                    if signal == 1:#有卡 \r
-                        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机\r
-                            mode = 2\r
-                        else:\r
-                            mode = 1\r
-                    else:#未插卡\r
-                        mode = 3\r
-                if mode == 1:#白色灯\r
-                    EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_WHITE,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_WHITE,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    pass\r
-                elif mode == 2:#蓝灯色灯\r
-                    EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_GREEN,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_CONNECT"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    pass\r
-                elif mode == 3:#红灯闪烁\r
-                    EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SIM"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                pass\r
-            \r
-        def dial_sos_phone(self, event, msg): #拨打紧急求助电话\r
-            if not _sos_feature_enabled():\r
-                return\r
-            flag = EventMesh.publish("get_call_state")\r
-            if flag == 0:\r
-            \r
-                signal = EventMesh.publish("screen_get_sig")\r
-                if signal != None:\r
-                    if signal >= 0 and signal <= 31:#有卡 \r
-                        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机\r
-                            sos_number = EventMesh.publish("get_dial_sos_number")\r
-                            if sos_number != None:\r
-                                if len(sos_number) != 0:\r
-                                    EventMesh.publish("close_timer_all")#\r
-                                    EventMesh.publish("set_sos_flag",1)\r
-                                        \r
-                                else:#未设置sos紧急求助号码\r
-                                    EventMesh.publish("close_timer_all")#\r
-                                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    pass\r
-                        else:\r
-                            EventMesh.publish("close_timer_all")#\r
-                            EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_WHITE,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:#未插卡\r
-                        EventMesh.publish("close_timer_all")#\r
-                        EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SIM"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-        \r
-        def play_cur_time_event(self, event, msg): #播放当前时间\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                \r
-                data = RTC().datetime()\r
-                hour = data[4]\r
-                min = data[5]\r
-                # EventMesh.debug_log("hour",hour,min)\r
-                self.old_hour = hour\r
-                self.old_min = min\r
-                if self.old_hour == 0:\r
-                    if self.old_min <= 9:#00:09\r
-                        if self.old_min == 0:#0点整\r
-                            str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:#0点09分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min))\\r
-                            ,audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-\r
-                    else:\r
-                        if self.old_min % 10 == 0:#0点2十分 0点3十分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-                        else:#0点2十8分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-\r
-                elif self.old_hour <= 9:#8:09 9:20 9:45\r
-                    if self.old_min <= 9:#9点09分\r
-                        if self.old_min <= 0:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-                        else:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min))\\r
-                            ,audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                    else:\r
-                        if self.old_min % 10 == 0:#9点2十分 9点4十分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:#9点2十4分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-                else:#12:0\r
-                    if self.old_min == 0:#12:00 13:00 15:00 20 10 11 12 13 14 15\r
-                        self.play_count+=1\r
-                        hour_shi = self.old_hour//10\r
-                        hour_ge = self.old_hour%10\r
-                        if self.old_hour == 10:#十点整\r
-                            str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                        elif self.old_hour == 20:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                        else:\r
-                            if hour_shi <= 1:#十3点整\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                ,audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                            else:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                    else:\r
-                        if self.old_hour == 10:#10:09 10:10\r
-                            if self.old_min <= 9:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\\r
-                                ,audio_buf.index("R_READ_TIME_{}".format(self.old_min)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                if self.old_min % 10 == 0:#十点2十分\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                    ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\\r
-                                    ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                else:#十点2十1分\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                    ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\\r
-                                    ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min%10))\\r
-                                    ,audio_buf.index("R_READ_TIME_MIN"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                        else:\r
-                            if self.old_hour < 20:#19:00\r
-                                if self.old_min <= 9:#19:09 \r
-                                    if self.old_min == 0:\r
-                                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        pass\r
-                                    else:\r
-                                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\\r
-                                        ,audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10))\\r
-                                        ,audio_buf.index("R_READ_TIME_MIN"))\r
-                                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    \r
-                                else:#19:18 19:40 19:56\r
-                                    if self.old_min % 10 == 0:#十9点2十分 十9点3十分\r
-                                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    else:#十9点2十1分\r
-                                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                            else:\r
-                                hour_shi = self.old_hour//10\r
-                                hour_ge = self.old_hour%10\r
-\r
-                                min_shi = self.old_min//10\r
-                                min_ge = self.old_min%10\r
-\r
-                                #20:08 20:18  20:20\r
-                                if hour_ge == 0:\r
-                                    if self.old_min <= 9:\r
-                                        if self.old_min == 0:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            pass\r
-                                        else:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\\r
-                                            ,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                                    else:\r
-                                        if min_ge == 0:#2十点2十分\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#2十点2十1分\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                                else:#21:08 21:18\r
-                                    if self.old_min <= 9:\r
-                                        if self.old_min == 0:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\\r
-                                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            pass\r
-                                        else:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\\r
-                                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\\r
-                                            ,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    else:\r
-                                        if min_ge == 0:#2十3点3十分\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\\r
-                                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#2十3点3十1分\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\\r
-                                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-        def play_timer_cb_1(self,*agrs):\r
-            return\r
-\r
-        def play_center_phone(self, event, msg): #msg\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许设备再次拨出\r
-            if flag == 0 and self.fall_flag == 0:\r
-                EventMesh.publish("close_timer_all")#\r
-            \r
-                center_dial = EventMesh.publish("get_storage_config","center_dial")\r
-                if center_dial != None:\r
-                    if len(center_dial) > 0:\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))\r
-                        EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        voiceCall.callStart(str(center_dial))\r
-                        \r
-                    \r
-                else:#未设置号码\r
-                    # EventMesh.debug_log("play_center_phone")\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    pass\r
-        def center_phone_cb(self,*argc): #msg\r
-            pass\r
-\r
-\r
-\r
-\r
-        def play_imei_event(self, event, msg): #msg\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                imei = EventMesh.publish(constants.EVENT.GET_IMEI)\r
-                EventMesh.debug_log(imei)\r
-                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(imei[0]))\\r
-                ,audio_buf.index("R_READ_TIME_{}".format(imei[1])),audio_buf.index("R_READ_TIME_{}".format(imei[2])),audio_buf.index("R_READ_TIME_{}".format(imei[3])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[4])),audio_buf.index("R_READ_TIME_{}".format(imei[5])),audio_buf.index("R_READ_TIME_{}".format(imei[6])),audio_buf.index("R_READ_TIME_{}".format(imei[7])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[8])),audio_buf.index("R_READ_TIME_{}".format(imei[9])),audio_buf.index("R_READ_TIME_{}".format(imei[10])),audio_buf.index("R_READ_TIME_{}".format(imei[11])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[12])),audio_buf.index("R_READ_TIME_{}".format(imei[13])),audio_buf.index("R_READ_TIME_{}".format(imei[14])))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-        def get_unread_wechat_state(self,event, msg): \r
-\r
-            return self.set_unread_wechat\r
-        \r
-        def set_unread_wechat_state(self, event, msg): \r
-            self.set_unread_wechat = msg\r
-\r
-        def get_wechat_data(self,event, msg): \r
-\r
-            return [self.MXA_MSG ,self.wechat_recode_list]\r
-        \r
-        def set_wechat_data(self, event, msg): \r
-            # EventMesh.debug_log("set_wechat_data1 ",msg,self.wechat_num)\r
-            self.MXA_MSG = msg[0]\r
-            self.wechat_recode_list = msg[1]\r
-            self.wechat_num = self.wechat_recode_list["num"]\r
-            with open("/usr/static/storage_file/wechat_record.json","w",encoding="utf-8") as fd:\r
-                ujson.dump(self.wechat_recode_list,fd)\r
-                #写编号\r
-            # EventMesh.debug_log("set_wechat_data2:{} ".format(self.wechat_num))\r
-        \r
-\r
-        def get_wechat_time(self, event, msg):\r
-            return  [self.press_btn,self.timeSecond]\r
-\r
-        def start_wechat_record(self, event, msg): #开始录音相关配置\r
-            if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                    if self.press_btn == 0:\r
-                        self.press_btn = 1\r
-                        audio_state = EventMesh.publish("get_audio_state")\r
-                        if audio_state == 1:\r
-                            self.aud.stop()\r
-                        EventMesh.publish("close_timer_all")#\r
-                        EventMesh.publish("set_led_time_arg",[1,1,160,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.WECHAT_LED_MODE])#測量成功\r
-                        # EventMesh.publish("set_led_time_arg",[1000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE,led_mode.WECHAT_LED_MODE])#測量成功\r
-                    \r
-                        date_tmp = utime.localtime()\r
-                        time_tmp = utime.mktime(date_tmp)\r
-                        self.timeSecond = time_tmp#保存按下的时间长s\r
-                        self.aud.setVolume(11)#设置音量最大\r
-                        \r
-                        EventMesh.debug_log("talking1.0")\r
-                        # if self.wechat_num >= self.MXA_MSG:\r
-                        #     self.wechat_num = 0 \r
-                        # self.wechat_num += 1\r
-                        # self.wechat_show = self.wechat_num\r
-                        # self.record_test.start("/usr/static/storage_file/{}.amr".format(self.wechat_show),16) \r
-                        self.record_test.start("/usr/static/storage_file/wechat.amr",16) \r
-                \r
-            else:\r
-                self.timeSecond = 0\r
-                self.press_btn = 0\r
-        def get_wechat_state(self, event, msg):\r
-            return self.press_btn\r
-        def set_wechat_state(self, event, msg):\r
-            self.press_btn = msg\r
-\r
-        def send_wechat_record(self, event, msg): #发送录音文件\r
-            if self.press_btn == 1:\r
-                self.press_btn = 0\r
-                self.record_test.stop() #停止錄音\r
-                EventMesh.publish("stop_led_timer")#关闭灯\r
-                EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                # EventMesh.publish("set_led_time_arg",[0,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                self.countdown_old = 0\r
-\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-\r
-                self.countdown_old = msg\r
-                if self.countdown_old >= 15:\r
-                    self.countdown_old = 15\r
-                if self.countdown_old <= 0:\r
-                    #录音时间太短\r
-                    return\r
-                else:\r
-                    # self.wechat_recode_list["%02d"%(self.wechat_show)] = "read:0"\r
-                    # self.wechat_recode_list["num"] = self.wechat_show\r
-                    EventMesh.debug_log("self.wechat_recode_list :{}".format(self.wechat_recode_list))\r
-\r
-                    # with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                    #     ujson.dump(self.wechat_recode_list,fd)\r
-                    EventMesh.debug_log("send wechat data!!!!!!!!!!!!!!!!!!!!!")\r
-\r
-                    check_txt = ql_fs.path_exists("/usr/static/storage_file/wechat.amr")\r
-                    if check_txt == True :\r
-                        path = "/usr/static/storage_file/wechat.amr"\r
-                        with open(path,"rb") as fd:\r
-                            buf = bytearray(ql_fs.path_getsize(path))\r
-                            fd.readinto(buf)\r
-                            senddata = [self.countdown_old,buf]\r
-                            EventMesh.publish(constants.PROTOCOL.TKS_SEND,senddata)\r
-\r
-                    # with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                    #     ujson.dump(self.wechat_recode_list,fd)\r
-                    # EventMesh.debug_log("send wechat data!!!!!!!!!!!!!!!!!!!!!")\r
-\r
-                    # check_txt = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(self.wechat_show))\r
-                    # if check_txt == True :\r
-                    #     path = "/usr/static/storage_file/{}.amr".format(self.wechat_show)\r
-                    #     with open(path,"rb") as fd:\r
-                    #         buf = bytearray(ql_fs.path_getsize(path))\r
-                    #         fd.readinto(buf)\r
-                    #         senddata = [self.countdown_old,buf]\r
-                    #         EventMesh.publish(constants.PROTOCOL.TKS_SEND,senddata)\r
-            else:\r
-                self.press_btn = 0\r
-\r
-\r
-\r
-        def play_wechat_last_amr(self, event, msg):#播放微聊最后一条语音文件\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                if self.wechat_recode_list != None:\r
-                    num = 0\r
-                    play_state = 0\r
-                    if len(self.wechat_recode_list) > 1:\r
-                        num = int(self.wechat_recode_list["num"])\r
-                        #EventMesh.debug_log("self.wechat_recode_list1:{}".format(self.wechat_recode_list))\r
-                        if num != 0:\r
-                            last_num = str("%02d"%(num))\r
-                            last_tmp = self.wechat_recode_list[last_num]\r
-                            last_read = int(last_tmp.split(":")[1])\r
-                            if last_read == 1:#如果最后一条没有读则读最新的一条\r
-                                self.wechat_recode_list[last_num] = "read:0"\r
-                                self.wechat_recode_list["num"] = num \r
-                                with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                                    ujson.dump(self.wechat_recode_list,fd)\r
-                            else:\r
-                                sotr_new = {}\r
-                                sotr_new = sorted(self.wechat_recode_list.keys(), reverse=True)#降序排序\r
-                                # EventMesh.debug_log("sotr_new:{}".format(sotr_new))\r
-                                for i in range(len(self.wechat_recode_list)-1):#1 01 02 \r
-                                    key = sotr_new[i+1]\r
-                                    num_id = int(key)\r
-                                    #EventMesh.debug_log("key:{} num_id:{}".format(key,num_id))\r
-                                    if key in self.wechat_recode_list:#\r
-                                        str_tmp = self.wechat_recode_list[key]\r
-                                        read = int(str_tmp.split(":")[1])\r
-                                        if read != 0:#未读是按一下播放下一条同时删除\r
-                                            check_amr = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(num_id))#还要检测这个文件是否存在\r
-                                            if check_amr == True:\r
-                                                self.wechat_recode_list[key] = "read:0"\r
-                                                self.wechat_recode_list["num"] = num \r
-                                                EventMesh.debug_log("self.wechat_recode_list2:{} num_id:{} num:{}".format(self.wechat_recode_list,num_id,num))\r
-                                                # self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(num))  #文件名前面要加上路径\r
-                                                play_state = 1\r
-                                                with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                                                    ujson.dump(self.wechat_recode_list,fd)\r
-                                                break\r
-                                            else:\r
-                                                continue\r
-                                        else:\r
-                                            continue\r
-                                    else:\r
-                                        continue\r
-                            #EventMesh.debug_log("play_state:{}".format(play_state))\r
-                            # if play_state == 0:#\r
-                            check_amr = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(num))#还要检测这个文件是否存在\r
-                            if check_amr == True:\r
-                                self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(num))  #文件名前面要加上路径\r
-\r
-\r
-        def play_unread_wechat_infor(self,event,msg):#未读微聊语音\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 0 and self.press_btn == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                if self.wechat_recode_list != None:\r
-                    num = 0\r
-                    play_state = 0\r
-                    if len(self.wechat_recode_list) > 1:\r
-                        num = int(self.wechat_recode_list["num"])\r
-                        if num != 0:\r
-                            for i in range(len(self.wechat_recode_list)-1):#1 01 02 \r
-                                key = "%02d"%(i+1)\r
-                                if key in self.wechat_recode_list:#\r
-                                    str_tmp = self.wechat_recode_list[key]\r
-                                    read = int(str_tmp.split(":")[1])\r
-                                    if read == 1:#未读是按一下播放下一条同时删除\r
-                                        play_state = 1\r
-                                    else:\r
-                                        continue\r
-                                else:\r
-                                    continue\r
-                            if play_state == 1:#设置未读语音状态\r
-                                EventMesh.publish("set_unread_wechat_state",1)\r
-                            else:\r
-                                EventMesh.publish("set_unread_wechat_state",0)\r
-                                self.updateTime = 0\r
-\r
-                state = EventMesh.publish("get_unread_wechat_state")#\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-                if state != None:\r
-                    if state == 1:\r
-                        EventMesh.publish("set_led_time_arg",[1,2,8,led_mode.FLASH_LIGHT_GREEN,8,4,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                        # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                        if self.updateTime == 0:\r
-                            self.updateTime = time_tmp\r
-                        if self.updateTime != 0:\r
-                            if time_tmp - self.updateTime >= 10*60:\r
-                                self.updateTime = time_tmp\r
-                                #播放音频文件\r
-                                EventMesh.publish("close_timer_all")\r
-                                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_UNREAD_WECHAT"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        self.updateTime = 0\r
-            \r
-\r
-\r
-\r
-    class BtnDevice(Abstract):\r
-\r
-        def __init__(self, tp=None):\r
-            self.pk = PowerKey()\r
-            self.__pwk_timer = osTimer()\r
-            self.aud = audio.Audio(0)\r
-            vc = _btn_cfg()\r
-            pa_gpio = vc.pin_gpio_attr("BTN_AUDIO_PA_GPIO", "GPIO29", Pin) if vc else Pin.GPIO29\r
-            if pa_gpio is not None:\r
-                self.aud.set_pa(pa_gpio)\r
-            else:\r
-                self.aud.set_pa(Pin.GPIO29)\r
-            self.aud.setVolume(_btn_int("BTN_AUDIO_VOLUME", 11))\r
-            # self.keypad = machine.KeyPad(1, 2)\r
-            self.__PowerDownTimeOut = _btn_int("BTN_POWER_DOWN_TIMEOUT_MS", 3000)\r
-            self.__btn_poll_ms = _btn_int("BTN_POLL_MS", 100)\r
-            self.__btn_release_timeout_ms = _btn_int("BTN_RELEASE_TIMEOUT_MS", 500)\r
-            self.__pwk_led_on_ticks = _btn_int("BTN_PWK_LED_ON_TICKS", 5)\r
-            self.__pwk_power_off_ticks = _btn_int("BTN_PWK_POWER_OFF_TICKS", 100)\r
-            self.__pwk_power_off_no_sim_ticks = _btn_int("BTN_PWK_POWER_OFF_NO_SIM_TICKS", 30)\r
-            self.__pwk_release_debounce_ticks = _btn_int("BTN_PWK_RELEASE_DEBOUNCE_TICKS", 1)\r
-            self.__sos_long_press_ticks = _btn_int("BTN_SOS_LONG_PRESS_TICKS", 30)\r
-            self.__sos_release_debounce_ticks = _btn_int("BTN_SOS_RELEASE_DEBOUNCE_TICKS", 1)\r
-            self.__wechat_long_press_ticks = _btn_int("BTN_WECHAT_LONG_PRESS_TICKS", 15)\r
-            self.__wechat_release_debounce_ticks = _btn_int("BTN_WECHAT_RELEASE_DEBOUNCE_TICKS", 1)\r
-            self.__tp = tp\r
-            self.pwk_press = 0\r
-            self.pwk_count = 0\r
-            self.GPIO26_status = 1#默认是低电平\r
-            self.powerKey_status = 0\r
-            self.sosKey = 0\r
-            self.wechatKey = 0\r
-            self.sosKey_status = 1#默认是低电平\r
-            self.WeChatKey_status = 1#默认是低电平\r
-\r
-            self.wechatKey_timer = osTimer()\r
-            self.wechatKey_count = 0\r
-            self.wechatKey_press = 0 \r
-\r
-            self.sosKey_timer = osTimer()\r
-            self.sosKey_count = 0\r
-            self.sosKey_press = 0 \r
-            self.sosKey_long_press = 0\r
-\r
-            self.wechatKey_press_count = 0\r
-\r
-            self.timeSeconOld = 0\r
-            self.wechat_state = 0 #按下录音时的状态\r
-\r
-            \r
-            self.sosKey_press_count = 0\r
-\r
-\r
-            self.pwkey_timer = osTimer()\r
-            self.pwKey_press_count = 0\r
-            self.pwkey_count = 0\r
-            self.pwkey_press = 0\r
-            self.led_state = 0\r
-            self.hsensorTest_timer = osTimer()\r
-            self.factoryTest_timer = osTimer()\r
-            self.factoryTest_count = 0\r
-            self.factory_timesec = 0\r
-            self.factoryTest_led_count = 0\r
-            self.factoryTest_flag = 0\r
-            self.btnInfo_queue = Queue()\r
-            _thread.stack_size(10*1024+192)\r
-            _thread.start_new_thread(self.btnInfo_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            \r
-            EventMesh.subscribe("publish_message_event_btnInfo",self.publish_message_event_btnInfo)\r
-\r
-            EventMesh.subscribe("close_wechat_btn_timer", self.close_wechat_btn_timer)#来电强制关闭微聊语音\r
-\r
-        def btnInfo_queue_thread(self):\r
-            while True:\r
-                data = self.btnInfo_queue.get()\r
-                #EventMesh.debug_log("Info_queue:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        EventMesh.debug_log("btnInfo_queue:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-        def publish_message_event_btnInfo(self,event,msg):\r
-            self.btnInfo_queue.put(msg)\r
-            EventMesh.publish(constants.EVENT.SYSTEM_UP)#唤醒休眠\r
-            \r
-        def publish_wechat_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.wechatKey_press_cb,"data":0})  \r
-\r
-        def publish_soskey_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.sosKey_press_cb,"data":0})  \r
-\r
-        def publish_pwkKey_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.pwKey_press_cb,"data":0})  \r
-\r
-    \r
-\r
-        def post_processor_after_instantiation(self):\r
-            # self.keypad.init()\r
-            # self.keypad.set_callback(self.key_callback)\r
-        \r
-            self.pk.powerKeyEventRegister(self.powerKey_callback)\r
-            if not _btn_device_enabled():\r
-                return\r
-\r
-            vc = _btn_cfg()\r
-            pwk_gpio = vc.extint_gpio_attr("BTN_PWK_GPIO", "GPIO26", ExtInt) if vc else ExtInt.GPIO26\r
-            if pwk_gpio is not None:\r
-                pwk_pull = vc.extint_pull_attr("BTN_PWK_PULL", "PULL_DISABLE", ExtInt) if vc else ExtInt.PULL_DISABLE\r
-                self.extint = ExtInt(pwk_gpio, ExtInt.IRQ_RISING_FALLING, pwk_pull, self.pwk_extint_cb)\r
-                self.extint.enable()\r
-\r
-            sos_gpio = vc.extint_gpio_attr("BTN_SOS_GPIO", "GPIO22", ExtInt) if vc else ExtInt.GPIO22\r
-            if sos_gpio is not None:\r
-                sos_pull = vc.extint_pull_attr("BTN_SOS_PULL", "PULL_PU", ExtInt) if vc else ExtInt.PULL_PU\r
-                self.sosKey = ExtInt(sos_gpio, ExtInt.IRQ_RISING_FALLING, sos_pull, self.sosKey_extint_cb)\r
-                self.sosKey.enable()\r
-\r
-            wechat_gpio = vc.extint_gpio_attr("BTN_WECHAT_GPIO", "GPIO20", ExtInt) if vc else ExtInt.GPIO20\r
-            if wechat_gpio is not None:\r
-                wechat_pull = vc.extint_pull_attr("BTN_WECHAT_PULL", "PULL_PU", ExtInt) if vc else ExtInt.PULL_PU\r
-                self.wechatKey = ExtInt(wechat_gpio, ExtInt.IRQ_RISING_FALLING, wechat_pull, self.wechatKey_extint_cb)\r
-                self.wechatKey.enable()\r
-\r
-            aux_gpio = vc.get_attr("BTN_AUX_OUT_GPIO", "GPIO19") if vc else "GPIO19"\r
-            if aux_gpio:\r
-                aux_init = _btn_int("BTN_AUX_OUT_INIT", 0)\r
-                aux_pull = vc.pin_pull_attr("BTN_AUX_OUT_PULL", "PULL_PU", Pin) if vc else Pin.PULL_PU\r
-                Pin(getattr(Pin, aux_gpio), Pin.OUT, aux_pull, aux_init)\r
-\r
-        def pwk_extint_cb(self,args):#侧边按键\r
-            # self.GPIO26_status = self.extint.read_level()\r
-            \r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    return\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-            if fall_down != None:\r
-                if fall_down != 0 or flag == 2:\r
-                    return\r
-            self.GPIO26_status = int(args[1])\r
-            if self.GPIO26_status == 0:\r
-                self.GPIO26_status = 1\r
-            else:\r
-                self.GPIO26_status = 0\r
-                pass\r
-            self.WeChatKey_status = self.wechatKey.read_level()\r
-            if self.sosKey_status != 0 and self.WeChatKey_status != 0:\r
-                if self.GPIO26_status == 0:#按下\r
-                    EventMesh.publish("close_wechat_btn_timer")\r
-                    if self.pwkey_press == 0 :\r
-                        self.aud.stop()  #播放声音 \r
-                        # self.wechatKey_timeout_cb(0)\r
-                        # self.sosKey_timeout_cb(0)\r
-                        self.wechatKey_timer.stop()\r
-                        self.pwkey_timer.stop()\r
-                        self.sosKey_timer.stop()\r
-                        \r
-                        self.sosKey_press_count = 0\r
-                        self.sosKey_press = 0\r
-                        self.sosKey_long_press = 0\r
-                        self.wechatKey_press = 0\r
-                        self.wechat_state = 0\r
-                        self.wechatKey_press_count = 0\r
-\r
-                        self.pwkey_press = 1\r
-                        self.pwkey_count = 0\r
-                        self.led_state = 0\r
-                        self.pwkey_timer.start(self.__btn_poll_ms, 1, self.publish_pwkKey_btn_event_cb)\r
-                        # EventMesh.debug_log("key22_extint_cb:self.key22_timer.start!!!!\n")\r
-\r
-        def pwKey_press_cb(self, data):\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.pwkey_timer.stop()\r
-                    self.pwkey_count = 0\r
-                    self.pwkey_press = 0\r
-                    self.led_state = 0\r
-                    self.pwKey_press_count=0\r
-                    return\r
-            self.GPIO26_status = self.extint.read_level()\r
-            if self.pwkey_press == 1 :\r
-                self.pwkey_count += 1\r
-                if self.pwkey_count > self.__pwk_led_on_ticks:\r
-                    if self.led_state == 0:\r
-                        self.led_state = 1\r
-                        EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    if self.pwkey_count >= self.__pwk_power_off_ticks:\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        self.pwkey_timer.stop()\r
-                        self.pwkey_count = 0\r
-                        self.pwkey_press = 0\r
-                        self.pwKey_press_count = 0\r
-                        self.led_state = 0\r
-                        # if EventMesh.publish("get_sim_Status") != 1:\r
-                        #     EventMesh.publish("open_power_on", 2)#\r
-                        # else:\r
-                        EventMesh.publish("open_power_on", 3)#\r
-                        return\r
-                    \r
-                    if self.pwkey_count >= self.__pwk_power_off_no_sim_ticks:\r
-                        if EventMesh.publish("get_sim_Status") != 1:\r
-                            EventMesh.debug_log("长3秒关机")\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            self.pwkey_timer.stop()\r
-                            self.pwkey_count = 0\r
-                            self.pwkey_press = 0\r
-                            self.pwKey_press_count = 0\r
-                            self.led_state = 0\r
-                            EventMesh.publish("open_power_on", 2)#\r
-                            return\r
-                            \r
-                    \r
-                if self.GPIO26_status == 1:#松开\r
-                    if self.pwkey_count >= self.__pwk_release_debounce_ticks: #防抖\r
-                        # EventMesh.debug_log("self.GPIO26_status == 1")\r
-                        self.pwkey_timer.stop()\r
-                        self.pwkey_count = 0\r
-                        self.pwkey_press = 0\r
-                        self.led_state = 0\r
-                        self.pwKey_press_count+=1\r
-                        self.pwkey_timer.start(self.__btn_release_timeout_ms, 0, self.publish_pwKey_timeout_cb_do)#松手超时判断\r
-\r
-        def  hsensorTest_timer_cb(self,e):\r
-            EventMesh.publish("system_sleep_rest")#防止黑屏 \r
-            w_data = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据\r
-            #EventMesh.debug_log("FactoryModeHsensorTest{}".format(data))\r
-        \r
-            c_data = self.Hsensor.get_test_data()#校准数据和工厂数据\r
-            # text_data = "   佩戴状态\n红外:{}活体:{}佩戴:{}\n{},{} \n{},{} \n{},{}\n校准数据:{},{},{},{}\n漏光数据:{},{},{}".format(\r
-            #                                             c_data[3],c_data[4],w_data,c_data[5],c_data[6],c_data[7],c_data[8],c_data[9],c_data[10],\r
-            #                                                 c_data[11],c_data[12],c_data[13],c_data[14],c_data[0],c_data[1],c_data[2],)\r
-                \r
-            if(self.hsensorTest_timer_count != 0):\r
-                    self.hsensorTest_timer_count -= 1\r
-                    if self.hsensorTest_timer_count%5 == 0:\r
-                        EventMesh.debug_log("c_data:{} {} {} {}".format(c_data[11],c_data[12],c_data[13],c_data[14]))\r
-                        if c_data[11] != 0 and c_data[13] != 0: #校准成功\r
-                            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            self.Hsensor.close() \r
-                            self.Hsensor.init()\r
-                            self.hsensorTest_timer.stop()\r
-                            return\r
-                    if self.hsensorTest_timer_count == 0:#50秒超时,失败\r
-                        self.Hsensor.close() \r
-                        self.Hsensor.init(); \r
-                        self.hsensorTest_timer.stop()\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                \r
-        def publish_pwKey_timeout_cb_do(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.pwKey_timeout_cb,"data":0})  \r
-        \r
-        def pwKey_timeout_cb(self, data):#侧边按键\r
-            boot_count = EventMesh.publish("get_boot_time_count")\r
-            try :\r
-                if boot_count < 50 :#开机50秒内按键次数大于10就校准\r
-                    #EventMesh.debug_log("boot_count:{}".format(boot_count))\r
-                    if self.pwKey_press_count >= 6:\r
-                        self.Hsensor =  EventMesh.publish("get_Hsensor")\r
-                        self.hsensorTest_timer.start(1000,1,self.hsensorTest_timer_cb) \r
-                        EventMesh.debug_log("打开校准模式")\r
-                        self.Hsensor.set_sar(1)\r
-                        self.Hsensor.open_test(255) #打开校准模式\r
-                        utime.sleep_ms(500)\r
-                        self.Hsensor.open_heart()\r
-                        self.hsensorTest_timer_count = 50\r
-                        self.hsensorTest_timer.start(1000,1,self.hsensorTest_timer_cb)\r
-                        str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_HSENSOR_SPO2_TITLE"),)\r
-                        EventMesh.publish("play_audio_file",[str_data,1])\r
-                        self.pwKey_press_count = 0\r
-                        return\r
-\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.pwkey_timer.stop()\r
-                    self.pwkey_count = 0\r
-                    self.pwkey_press = 0\r
-                    self.led_state = 0\r
-                    self.pwKey_press_count=0\r
-                    return\r
-            if self.pwKey_press_count >= 1:\r
-                self.pwKey_press_count = 0\r
-\r
-                # flag = EventMesh.publish("get_call_state") \r
-                # if flag != 2:#如果是电话拨出去或者不在打电话中都可以执行\r
-                #     EventMesh.publish("stop_led_timer")#设置参数\r
-                #     if flag == 1:#如果是sos电话拨出去\r
-                #         sos_flag = EventMesh.publish("get_sos_flag")\r
-                #         if sos_flag == 1:\r
-                #             EventMesh.publish("set_sos_flag",0)\r
-                #             EventMesh.publish("set_sos_num",0)\r
-                #             EventMesh.publish("set_hangup_mode",0)\r
-                #     EventMesh.publish("close_hr_sop2")#\r
-                #     flag = EventMesh.publish("get_call_state") \r
-                #     # if flag == 0 or flag == 2:#在拨出去或者通话中就不播报入网成功的语音\r
-                #     if flag != 1:#在拨出去或者通话中就不播报入网成功的语音\r
-                #         EventMesh.publish("set_sim_mode")#\r
-                #     EventMesh.publish("dialing_out_event")#电话呼叫中voiceCall.callEnd()\r
-                \r
-                # EventMesh.debug_log("pwKey_timeout_cb:self.pwKey_press_count >= 1")\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 2:\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("dialing_out_event")#电话呼叫中voiceCall.callEnd()\r
-\r
-                    if flag == 1:#如果是sos电话拨出去\r
-                        sos_flag = EventMesh.publish("get_sos_flag")\r
-                        if sos_flag == 1:\r
-                            EventMesh.publish("set_sos_flag",0)\r
-                            EventMesh.publish("set_sos_num",0)\r
-                            EventMesh.publish("set_hangup_mode",0)\r
-                    EventMesh.publish("close_hr_sop2")#\r
-                    flag = EventMesh.publish("get_call_state") \r
-                    if flag != 1:\r
-                        EventMesh.publish("set_sim_mode")#\r
-            \r
-            self.pwKey_press_count = 0\r
-\r
-        def sosKey_extint_cb(self,args):\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if power_off != None and open_power != None:\r
-                if power_off == 1 or open_power == 0:\r
-                    return\r
-            # self.sosKey_status = self.sosKey.read_level()\r
-            self.sosKey_status = int(args[1])\r
-            if self.sosKey_status == 0:\r
-                self.sosKey_status = 1\r
-            else:\r
-                self.sosKey_status = 0\r
-                pass\r
-            # wechat_state = EventMesh.publish("get_wechat_state")\r
-            # EventMesh.debug_log('### key22_extint_cb  {} {} self.GPIO22_status:{} {} {}'.format(wechat_state,args,self.WeChatKey_status,self.GPIO26_status,self.sosKey_status)) # args[0]:gpio号 args[1]:上升沿或下降沿\r
-            if self.WeChatKey_status != 0 and self.GPIO26_status != 0:\r
-                if self.sosKey_status == 0:#按下\r
-                    EventMesh.publish("close_falldown_alarm_event")#sos短按事件\r
-                    EventMesh.publish("close_wechat_btn_timer")\r
-                    if self.sosKey_press == 0 :\r
-                        self.led_state = 0\r
-                        self.wechatKey_timer.stop()\r
-                        self.pwkey_timer.stop()\r
-                        self.sosKey_timer.stop()\r
-                        self.wechatKey_press_count = 0\r
-                        self.wechat_state = 0\r
-                        self.wechatKey_count = 0\r
-                        self.pwKey_press_count = 0\r
-                        \r
-                        self.pwkey_press = 0\r
-                        self.wechatKey_press = 0\r
-                        \r
-                        self.sosKey_long_press = 0\r
-                        self.sosKey_count = 0\r
-                        self.sosKey_press = 1\r
-                        self.sosKey_timer.start(self.__btn_poll_ms, 1, self.publish_soskey_btn_event_cb)\r
-            # EventMesh.debug_log("key22_extint_cb:self.key22_timer.start!!!!\n")\r
-\r
-        def sosKey_press_cb(self, data):\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.sosKey_timer.stop()\r
-                    self.sosKey_count = 0\r
-                    self.sosKey_press = 0\r
-                    self.sosKey_long_press = 0\r
-                    self.sosKey_press_count = 0\r
-                    return\r
-            self.sosKey_status = self.sosKey.read_level()\r
-            if self.sosKey_press == 1 :\r
-                # if self.sosKey_count <= 2:\r
-                    # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音\r
-                    #     EventMesh.publish("set_led_time_arg",[1000,200,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                    # else:\r
-                    #     EventMesh.publish("set_led_time_arg",[1000,200,1,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                self.sosKey_count += 1\r
-                if self.sosKey_count >= self.__sos_long_press_ticks: #长按 sos拨号\r
-                    if self.sosKey_long_press == 0:\r
-                        self.sosKey_long_press = 1\r
-                        flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-                        fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                        if fall_down != None:\r
-                            if fall_down != 0 or flag == 2:\r
-                                return\r
-                        EventMesh.publish_async("dial_sos_phone")#拨打sos号码\r
-                        return\r
-                    if self.sosKey_status == 1:#松开\r
-                        self.sosKey_count = 0\r
-                        self.sosKey_long_press = 0\r
-                        self.sosKey_press = 0\r
-                        self.sosKey_timer.stop()\r
-                        return\r
-\r
-                # EventMesh.debug_log("self.sosKey_count {}",self.sosKey_count)\r
-                if self.sosKey_status == 1:#松开\r
-                    if self.sosKey_count >= self.__sos_release_debounce_ticks: #防抖\r
-                        self.sosKey_timer.stop()\r
-                        self.sosKey_count = 0\r
-                        self.sosKey_press = 0\r
-                        self.sosKey_long_press = 0\r
-                        self.sosKey_press_count+=1\r
-                        self.sosKey_timer.start(self.__btn_release_timeout_ms, 0, self.publish_sosKey_timeout_cb_do)#松手超时判断\r
-        def publish_sosKey_timeout_cb_do(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.sosKey_timeout_cb,"data":0})  \r
-        \r
-        def close_factory_test(self):#关闭老化测试\r
-            if self.factoryTest_flag == 1:\r
-                self.factoryTest_flag = 0\r
-                close_led_white()\r
-                close_led_red()\r
-                close_led_green()\r
-                self.factoryTest_led_count = 0\r
-                self.factoryTest_count = 0\r
-                self.aud.stopPlayStream()\r
-                self.factoryTest_timer.stop()\r
-\r
-        def factoryTest_timer_cb(self,e):\r
-            # self.factoryTest_count+=1\r
-            date_tmp = utime.localtime()\r
-            time_tmp = utime.mktime(date_tmp)\r
-\r
-            if time_tmp - self.factory_timesec > 60*60*2:#老化测试2小时自动退出\r
-                # self.factoryTest_count = 0\r
-                self.close_factory_test()\r
-                return\r
-            #播放音频 \r
-            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_ALARM_NEW"))\r
-            if EventMesh.publish("get_audio_state") == 0:\r
-                self.aud.montage_play('U:/static/audio.bin',1,1,str_data)\r
-            #led灯常亮\r
-            self.factoryTest_led_count+=1\r
-            if self.factoryTest_led_count == 1:#1  4 7  10 \r
-                open_led_red()\r
-                close_led_green()\r
-                close_led_white()\r
-            elif self.factoryTest_led_count == 2:\r
-                open_led_green()\r
-                close_led_red()\r
-                close_led_white()\r
-            elif self.factoryTest_led_count == 3: #3  6 9 12 \r
-                open_led_white()\r
-                close_led_red()\r
-                close_led_green()\r
-            if self.factoryTest_led_count >= 3+1:\r
-                self.factoryTest_led_count = 0\r
-            \r
-            \r
-\r
-\r
-            pass\r
-        def sosKey_timeout_cb(self, data):#\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.sosKey_timer.stop()\r
-                    self.sosKey_count = 0\r
-                    self.sosKey_press = 0\r
-                    self.sosKey_long_press = 0\r
-                    self.sosKey_press_count = 0\r
-                    return\r
-            factory_count = EventMesh.publish("get_factory_test_time")\r
-            print("factory_count:%d",factory_count)\r
-            try :\r
-                if factory_count <= 30 :#开机30秒内按键次数大于15进入测试模式\r
-                    #EventMesh.debug_log("boot_count:{}".format(boot_count))\r
-                    if self.sosKey_press_count >= 15:\r
-                        self.factoryTest_timer.start(1000,1,self.factoryTest_timer_cb)\r
-                        date_tmp = utime.localtime()\r
-                        time_tmp = utime.mktime(date_tmp)\r
-                        self.factory_timesec = time_tmp\r
-                        self.sosKey_press_count = 0\r
-                        self.factoryTest_led_count = 0\r
-                        self.factoryTest_flag = 1\r
-                        return\r
-\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-\r
-            # EventMesh.debug_log("sosKey_press_count!!!!!!!!!!!!!! ",self.sosKey_press_count)\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-            if self.sosKey_press_count > 1:#短按十次解绑app\r
-                if fall_down != None:\r
-                    if fall_down != 0 or flag == 2:\r
-                        self.sosKey_press_count = 0\r
-                        return\r
-            if self.sosKey_press_count == 10:#\r
-                self.sosKey_press_count = 0\r
-                pass\r
-            elif self.sosKey_press_count == 6:#\r
-                self.sosKey_press_count = 0\r
-                self.close_factory_test()\r
-                pass\r
-            elif self.sosKey_press_count == 5:#功能暂时屏蔽\r
-                self.sosKey_press_count = 0\r
-                call_state = EventMesh.publish("get_call_state")\r
-                battery = EventMesh.publish("screen_get_battery")\r
-                if call_state == None:\r
-                    call_state = 0\r
-                if call_state == 0: \r
-                    if battery != None:\r
-                        if battery[0] != "1":#在充电得时候\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            EventMesh.publish("set_manual_measure_mode",3)#测量体温\r
-                pass\r
-            elif self.sosKey_press_count == 4:#拨打app快捷号码\r
-                self.sosKey_press_count = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("play_center_phone")#拨打快捷号码\r
-                # EventMesh.publish("call_phonebook_num",3)\r
-                pass\r
-            elif self.sosKey_press_count == 3:#测试心率\r
-                self.sosKey_press_count = 0\r
-                \r
-                call_state = EventMesh.publish("get_call_state")\r
-                battery = EventMesh.publish("screen_get_battery")\r
-                if call_state == None:\r
-                    call_state = 0\r
-                if call_state == 0: \r
-                    if battery != None:\r
-                        if battery[0] != "1":#在充电得时候\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            EventMesh.publish("set_manual_measure_mode",1)#\r
-                pass\r
-            elif self.sosKey_press_count == 2:#播报当前步数\r
-                self.sosKey_press_count = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("play_cur_step_event")#\r
-                pass\r
-            elif self.sosKey_press_count == 1:#挂断来电 短语音播报\r
-                self.sosKey_press_count = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("sos_short_press")#sos短按事件\r
-                \r
-                pass\r
-            self.sosKey_press_count = 0\r
-\r
-\r
-        def wechatKey_extint_cb(self,args):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    return\r
-            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-            if fall_down != None:\r
-                if fall_down != 0:\r
-                    return\r
-            # self.WeChatKey_status = self.wechatKey.read_level()\r
-            self.WeChatKey_status = int(args[1])\r
-            if self.WeChatKey_status == 0:\r
-                self.WeChatKey_status = 1\r
-            else:\r
-                self.WeChatKey_status = 0\r
-                pass\r
-            \r
-            # EventMesh.debug_log('### wechatKey_extint_cb  {} {} self.WeChatKey_status:{} {} {}'.format(wechat_state,args,self.sosKey_status,self.GPIO26_status,self.WeChatKey_status)) # args[0]:gpio号 args[1]:上升沿或下降沿\r
-            if self.sosKey_status != 0 and self.GPIO26_status != 0:\r
-                if self.WeChatKey_status == 0:#按下\r
-                    if self.wechatKey_press == 0:\r
-                        # self.pwKey_timeout_cb(0)\r
-                        # self.sosKey_timeout_cb(0)\r
-                        self.wechatKey_timer.stop()\r
-                        self.pwkey_timer.stop()\r
-                        self.sosKey_timer.stop()\r
-                        self.sosKey_press_count = 0\r
-                        self.sosKey_long_press = 0\r
-                        self.pwKey_press_count = 0\r
-                        self.sosKey_press = 0\r
-                        self.pwkey_press = 0\r
-                        self.wechatKey_press = 1\r
-                        self.led_state = 0\r
-                        self.wechatKey_count = 0\r
-                        self.wechat_state = 0\r
-                        self.wechatKey_timer.start(self.__btn_poll_ms, 1, self.publish_wechat_btn_event_cb)\r
-                else:\r
-                    # EventMesh.debug_log('### wechatKey_extint_cb end')\r
-                    EventMesh.publish("close_wechat_btn_timer")\r
-\r
-\r
-        def close_wechat_btn_timer(self,event,*argc):\r
-            tmp = EventMesh.publish("get_wechat_time")#获取微聊时间戳\r
-            wechat_time = 0\r
-            time_tmp = 0\r
-            time_sec = 0\r
-\r
-            if tmp != None:\r
-                if tmp[0] == 1:\r
-                    self.wechatKey_timer.stop()\r
-                    self.wechatKey_count = 0\r
-                    self.wechatKey_press = 0\r
-                    self.wechat_state = 0\r
-                    self.wechatKey_press_count=0\r
-                    \r
-                    date_tmp = utime.localtime()\r
-                    time_tmp = utime.mktime(date_tmp)\r
-                    time_sec = tmp[1]\r
-                    wechat_time = time_tmp - time_sec\r
-                    # EventMesh.debug_log("close_btn_timer",time_tmp,time_sec,wechat_time)\r
-                    if wechat_time >= 15:\r
-                        wechat_time = 15\r
-                    if wechat_time <= 0:\r
-                        wechat_time = 0\r
-                    EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容\r
-        \r
-\r
-        def wechatKey_press_cb(self,data):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.wechatKey_timer.stop()\r
-                    self.wechatKey_count = 0\r
-                    self.wechatKey_press = 0\r
-                    self.wechat_state = 0\r
-                    self.wechatKey_press_count=0\r
-                    return\r
-            self.WeChatKey_status = self.wechatKey.read_level()\r
-            # print("100ms self.WeChatKey_status",self.WeChatKey_status)\r
-            wechat_time = 0\r
-            tmp = None\r
-            time_sec = 0\r
-            time_tmp = 0\r
-            date_tmp = utime.localtime()\r
-            time_tmp = utime.mktime(date_tmp)\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            if self.wechatKey_press == 1 :#是否按下\r
-                tmp = EventMesh.publish("get_wechat_time")#获取微聊时间戳\r
-                self.wechatKey_count += 1\r
-                if self.wechatKey_count >= self.__wechat_long_press_ticks: #长按进入微聊录音\r
-                    flag = EventMesh.publish("get_call_state") \r
-                    fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                    if flag != None:\r
-                        if flag == 0 and fall_down == 0:\r
-                            if self.WeChatKey_status == 0:\r
-                                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音\r
-                                    if self.wechat_state == 0:#按下超过s开始录音\r
-                                        EventMesh.publish("start_wechat_record")#开始录音\r
-                                        self.wechat_state = 1\r
-                                else:\r
-                                    self.wechat_state = 0\r
-                                    self.wechatKey_timer.stop()\r
-                                    self.wechatKey_count = 0\r
-                                    self.wechatKey_press = 0\r
-                                    self.wechatKey_press_count=0\r
-                                    EventMesh.publish("set_sim_mode")#播報imei号\r
-                                    return\r
-\r
-                            if self.WeChatKey_status == 0:#未松手超过15s啧停止录音\r
-                                if self.wechat_state == 1:\r
-                                    if tmp != None:\r
-                                        if tmp[0] != 0:\r
-                                            time_sec = tmp[1]\r
-                                            if time_tmp - time_sec >= 15:\r
-                                                wechat_time = time_tmp - time_sec\r
-                                                if wechat_time >= 15:\r
-                                                    wechat_time = 15\r
-                                                EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容\r
-                                                \r
-                                                self.wechatKey_timer.stop()\r
-                                                self.wechatKey_count = 0\r
-                                                self.wechatKey_press = 0\r
-                                                self.wechat_state = 0\r
-                                                self.wechatKey_press_count=0\r
-                                                return\r
-                            else:\r
-                                if self.WeChatKey_status == 1:\r
-                                    if self.wechat_state == 1:#如果按下时长超过1s且小于长按的时间也认为是录微聊\r
-                                        if tmp != None:\r
-                                            if tmp[0] != 0:\r
-                                                time_sec = tmp[1]\r
-                                                wechat_time = time_tmp - time_sec\r
-                                            # EventMesh.debug_log("WECHAT TIEM",time_tmp,time_sec,wechat_time)\r
-                                            if wechat_time >= 15:\r
-                                                wechat_time = 15\r
-                                        \r
-                                        EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容\r
-                                        self.wechatKey_timer.stop()\r
-\r
-                                        self.wechatKey_count = 0\r
-                                        self.wechatKey_press = 0\r
-                                        self.wechat_state = 0\r
-                                        self.wechatKey_press_count=0\r
-                                        return\r
-                        else:\r
-                            self.wechatKey_timer.stop()\r
-                            self.wechatKey_count = 0\r
-                            self.wechat_state = 0\r
-                            self.wechatKey_press = 0\r
-                            self.wechatKey_press_count=0\r
-                            return\r
-                if self.WeChatKey_status == 1:#松开\r
-                    if self.wechatKey_count >= self.__wechat_release_debounce_ticks: #防抖\r
-                        # EventMesh.debug_log("WeChat time!!!!!!!!!!!!!!")\r
-                        self.wechatKey_timer.stop()\r
-                        self.wechatKey_count = 0\r
-                        self.wechatKey_press = 0\r
-                        self.wechat_state = 0\r
-                        self.wechatKey_press_count+=1\r
-                        self.wechatKey_timer.start(self.__btn_release_timeout_ms, 0, self.publish_wechatKey_btn_event_cb)#松手超时判断\r
-\r
-        def publish_wechatKey_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.wechatKey_timeout_cb,"data":0})  \r
-\r
-        def wechatKey_timeout_cb(self,data):#微聊键\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.wechatKey_timer.stop()\r
-                    self.wechatKey_count = 0\r
-                    self.wechatKey_press = 0\r
-                    self.wechat_state = 0\r
-                    self.wechatKey_press_count=0\r
-                    return\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-            if self.wechatKey_press_count > 1:#\r
-                if fall_down != None:\r
-                    if fall_down != 0 or flag == 2:\r
-                        self.wechatKey_press_count = 0\r
-                        return\r
-            # EventMesh.debug_log("wechatKey_timeout_cb!!!!!!!!!!!!!! ",self.wechatKey_press_count)\r
-            if self.wechatKey_press_count == 10:#短按十次解绑app\r
-                self.wechatKey_press_count = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("open_power_on", 4)#恢复出厂\r
-                pass\r
-            elif self.wechatKey_press_count == 6:#短按六次播报imei号\r
-                self.wechatKey_press_count = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("play_imei_event")#播報imei号\r
-                pass\r
-            elif self.wechatKey_press_count == 4:#拨打通讯录号码三\r
-                self.wechatKey_press_count = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("call_phonebook_num",3)\r
-                pass\r
-            elif self.wechatKey_press_count == 3:#拨打通讯录号码二\r
-                self.wechatKey_press_count = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("call_phonebook_num",2)\r
-                pass\r
-            elif self.wechatKey_press_count == 2:#拨打通讯录号码一\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                self.wechatKey_press_count = 0\r
-                EventMesh.publish("call_phonebook_num",1)\r
-            # EventMesh.publish("interup_call_event")#\r
-                pass\r
-            elif self.wechatKey_press_count == 1:#播放最后收到的语音\r
-                self.wechatKey_press_count = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                call_state = EventMesh.publish("get_call_state") \r
-                if call_state == 0:\r
-                    fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                    if fall_down != None:\r
-                        if fall_down != 0:\r
-                            EventMesh.publish_async("dial_sos_phone")#拨打sos号码\r
-                            return\r
-                else:\r
-                    if call_state == 2:#电话拨进需要接听\r
-                        EventMesh.publish("answer_call_event")#接听电话\r
-                        return\r
-                EventMesh.publish("play_wechat_last_amr")\r
-                # pass\r
-            self.wechatKey_press_count = 0\r
-\r
-\r
-        def pwk_press_cb(self, *args):\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            if self.pwk_press == 1 :\r
-                \r
-                self.pwk_count += 1\r
-                EventMesh.debug_log("self.pwk_count {}",self.pwk_count)\r
-                if self.GPIO26_status == 1:#松开\r
-                    if self.pwk_count >= 1: #防抖100ms\r
-                        self.__pwk_timer.stop()\r
-                        self.pwk_count = 0\r
-                        self.pwk_press = 0\r
-                        EventMesh.debug_log("self.GPIO22_status")\r
-\r
-                if self.pwk_count > (self.__PowerDownTimeOut//100): #长按\r
-                    self.__pwk_timer.stop()\r
-                    self.pwk_count = 0\r
-                    self.pwk_press = 0\r
-                    EventMesh.debug_log("btn8_long_press")\r
-\r
-        def __ui_callback(self, para):\r
-        # EventMesh.debug_log("para = {}".format(para))\r
-            if para == 0:\r
-                EventMesh.publish("done_left_to_right")\r
-                #EventMesh.debug_log("<-")\r
-            elif para == 1:\r
-                EventMesh.publish("done_right_to_left")\r
-                #EventMesh.debug_log("->")\r
-            elif para == 2:\r
-                EventMesh.publish("done_bottom_to_top")\r
-                #EventMesh.debug_log("^")\r
-            elif para == 3:\r
-                EventMesh.publish("done_top_to_bottom")\r
-                #EventMesh.debug_log("V")\r
-            elif para == 4:\r
-                EventMesh.publish("done_return")\r
-                #EventMesh.debug_log("return")\r
-            elif para == 5:\r
-                EventMesh.publish("done_click")\r
-                #EventMesh.debug_log("CLICK")\r
-            elif para == 6:\r
-                EventMesh.publish("done_press")\r
-                #EventMesh.debug_log("press")\r
-            elif (para == 6):\r
-                EventMesh.publish("done_error")\r
-                #EventMesh.debug_log("error")\r
-\r
-        def key_callback(self, l_list):\r
-            EventMesh.debug_log("key_callback:",str(l_list))\r
-            if l_list[0] == 1:\r
-                # 马达震动预留\r
-                pass\r
-            if (l_list[1] == 3) and (l_list[2] == 0):\r
-                if l_list[0] == 1:\r
-                    #self.pwk_press = 0\r
-                    EventMesh.publish("btn1_press")\r
-                else:\r
-                    pass\r
-                    # EventMesh.publish("btn1_press")\r
-\r
-\r
-\r
-\r
-        def powerKey_callback(self, status):\r
-            EventMesh.debug_log('==pwr:', status)# 0 1 0\r
-            self.powerKey_status = status\r
-            if self.pwk_press == 1: #按按钮时不处理\r
-                return\r
-        \r
-            \r
-                \r
-\r
-        def power_key_press_cb(self, *args):\r
-            pass\r
-            # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#未插卡的情况下强制关机\r
-                # EventMesh.publish("open_power_on", 2)#\r
-\r
-\r
-        def start(self):\r
-            self.post_processor_after_instantiation()\r
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/btn_device_ec800m_d15.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/btn_device_ec800m_d15.py
deleted file mode 100644 (file)
index 1889d47..0000000
+++ /dev/null
@@ -1,4012 +0,0 @@
-from common import Abstract\r
-import machine\r
-import osTimer\r
-from misc import PowerKey\r
-import EventMesh\r
-from machine import Pin\r
-from machine import ExtInt\r
-import constants\r
-import utime\r
-import audio\r
-import ql_fs\r
-import ujson\r
-import voiceCall\r
-from misc import Power\r
-\r
-from machine import RTC\r
-from queue import Queue\r
-import _thread\r
-import usys\r
-import sms\r
-\r
-NEW_ENABLE = 0 #1代表旧的按键功能定义 0代表新的按键功能定义\r
-if EventMesh.model == "D15" :\r
-    from led_d15 import red_green_light,green_light_fast,led_mode,open_led_red,open_led_white,close_led_red,open_led_green,close_led_green,close_led_white\r
-\r
-    motor_pin = Pin(Pin.GPIO20, Pin.OUT, Pin.PULL_PD, 0)\r
-\r
-    audio_buf = ['audio_find_haixiu', 'R_ALARM_NEW', 'R_BLOOD_SUGAR', 'R_CALL_mp3', 'R_CHARGE_FULL', 'R_CHARGE_IN', 'R_CHARGE_OUT', 'R_CUR_BATTERY_LEVEL', 'R_DRINK_ALARM', 'R_FALL_ALARM', 'R_HOME_ALARM', 'R_HSENSOR_RESULT_FAILE', 'R_HSENSOR_RESULT_HR_TITLE', 'R_HSENSOR_RESULT_OK', 'R_HSENSOR_SPO2_TITLE', 'R_HSENSOR_TEMP_TITLE', 'R_MEDICINE_ALARM', 'R_NO_SET_SOS_DIAL', 'R_NO_SET_VIDOE', 'R_NO_SIM', 'R_POWER_OFF_1', 'R_READ_STEP_0', 'R_READ_STEP_1', 'R_READ_STEP_2', 'R_READ_STEP_3', 'R_READ_STEP_4', 'R_READ_TIME_0', 'R_READ_TIME_1', 'R_READ_TIME_2', 'R_READ_TIME_3', 'R_READ_TIME_4', 'R_READ_TIME_5', 'R_READ_TIME_6', 'R_READ_TIME_7', 'R_READ_TIME_8', 'R_READ_TIME_9', 'R_READ_TIME_MIN', 'R_READ_TIME_ZHENG', 'R_RESET_ALARM', 'R_RESET_END_ALARM', 'R_SIM_CONNECT', 'R_SIM_FAILE', 'R_SLEEP_ALARM', 'R_SOS_ALERT', 'R_TSENSOR_RESULT_VALUE_DOT', 'R_UNREAD_WECHAT', 'R_VIDEO_ANSWER', 'R_VIDEO_ANSWERING', 'R_VIDEO_CALL_CONNECT', 'R_VIDEO_CALL_ENDING', 'R_VIDEO_CALL_IN', 'R_VIDEO_VOICE_IN', 'R_VIDEO_WAITING', 'R_WAKEUP_ALARM', 'R_WECHAT_RECV']\r
-\r
-\r
-    class call:\r
-        CALL_OUT = 1\r
-        CALL_IN = 2\r
-        ON_CALL = 3\r
-\r
-\r
-    class intervManager(Abstract):\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-\r
-            self.pwk_timer1 = osTimer()\r
-            self.pwk_timer2 = osTimer()\r
-            self.timer1 = osTimer()\r
-            self.sos_timer2 = osTimer()\r
-            self.sos_timer1 = osTimer()\r
-\r
-            self.sos_sendtime = osTimer()\r
-\r
-            self.fall_timer1 = osTimer()\r
-            self.fall_timer2 = osTimer()\r
-\r
-            self.alarm_timer1 = osTimer()\r
-\r
-            self.find_timer1 = osTimer()\r
-            self.fall_flag = 0\r
-\r
-            self.factory_timer = osTimer()\r
-            \r
-            self.restart_timer = osTimer()\r
-\r
-            self.aud = audio.Audio(0)\r
-            self.aud.set_pa(Pin.GPIO29)\r
-            self.aud.setVolume(11)\r
-            self.play_count = 0\r
-            self.count = 0\r
-\r
-            self.get_hr_state  = 0\r
-            self.get_spo2_state = 0\r
-            self.timeSec = 0\r
-            self.timeTempSec = 0\r
-\r
-            self.hr_value = 0\r
-            self.spo2_value = 0\r
-            self.temp_value = 0\r
-\r
-            self.usbState = 0\r
-\r
-            self.setp_old = 0\r
-            self.step_tmp = ""\r
-            self.step_num = 0\r
-            self.power_off = 0\r
-            self.call_state = 0\r
-\r
-            self.find_state = 0\r
-            self.FIND_timer_count = 0\r
-\r
-            self.old_hour = 0\r
-            self.alarm_state = 0\r
-            self.alarm_timer_count = 0\r
-            self.old_min = 0\r
-            self.interInfo_queue = Queue()\r
-            _thread.stack_size(10*1024+64)\r
-            _thread.start_new_thread(self.interInfo_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            EventMesh.subscribe("publish_message_event_interInfo",self.publish_message_event_interInfo)\r
-            \r
-\r
-            self.audio_event_queue = Queue()\r
-            _thread.stack_size(10*1024+128)\r
-            _thread.start_new_thread(self.audio_event_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            EventMesh.subscribe("publish_message_event_audio",self.publish_message_event_audio)\r
-\r
-            self.record_test = audio.Record()\r
-            self.record_test.gain_set(4,12)\r
-\r
-            self.timeSecond = 0\r
-            self.wechat_show = 0\r
-            self.sort_new = {}\r
-            self.time_min = 0\r
-            self.press_btn = 0\r
-            self.countdown_old = 0\r
-            self.set_unread_wechat = 0\r
-            self.updateTime = 0\r
-            \r
-            self.power_on_flag = 0\r
-\r
-            self.MXA_MSG = 1\r
-            self.wechat_recode_list = {"num":0}\r
-            self.wechat_num = 0\r
-            self.read_data = {}\r
-            self.volum_size = 8 \r
-            self.phone_num = ''\r
-            self.sos_phone_num = ''\r
-            self.msg_tmp = ""\r
-            self.time_count = 0\r
-            self.alarm_count = 0\r
-            self.audio_int = 0\r
-\r
-            self.hr_auto = 0\r
-\r
-            self.temp_auto = 0\r
-\r
-            self.video_count = 0\r
-\r
-            self.sos_state = 0\r
-\r
-            self.video_call_state = 0#视频通话拨进来还是拨出去的状态 1代表是正在拨进或者拨出去\r
-\r
-            self.video_call_in_mode = 0 #0是语音 1是视频通话\r
-            \r
-            check_txt = ql_fs.path_exists("/usr/static/storage_file/wechat_record.json")\r
-            if check_txt == True :\r
-                with open("/usr/static/storage_file/wechat_record.json","r") as fd:#音频文件编号\r
-                    self.wechat_recode_list = ujson.load(fd)\r
-                    if not self.wechat_recode_list:\r
-                        self.wechat_recode_list = {"num":0}\r
-                        self.wechat_num = 0\r
-            else:\r
-                self.wechat_recode_list = {"num":0}\r
-                with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                    ujson.dump(self.wechat_recode_list,fd)         \r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("open_power_on", self.open_power_on)#开机关机\r
-\r
-            EventMesh.subscribe("play_imei_event", self.play_imei_event)#播報imei号\r
-            EventMesh.subscribe("play_center_phone", self.play_center_phone)#拨打快捷号码\r
-            EventMesh.subscribe("play_cur_time_event", self.play_cur_time_event)#播放当前时间\r
-\r
-            EventMesh.subscribe("OPEN_FIND_WATCH", self.send_find_watch)#查找设备\r
-            EventMesh.subscribe("STOP_FIND_WATCH", self.stop_find_watch)#是否需要关闭查找设备\r
-            EventMesh.subscribe("close_timer_all", self.close_timer_all)#关闭相关定时器\r
-\r
-            EventMesh.subscribe("dial_sos_phone", self.dial_sos_phone)#长按3s拨打sos求助号码\r
-\r
-            EventMesh.subscribe("set_sim_mode", self.set_sim_mode)#sim检测\r
-\r
-            EventMesh.subscribe("close_hr_sop2", self.close_hr_sop2)#关闭健康测试\r
-            EventMesh.subscribe("set_manual_measure_mode", self.set_manual_measure_mode)#设置测试模式\r
-            EventMesh.subscribe("set_start_measure_time", self.set_start_measure_time)#设置开始测量的时间戳时间\r
-            EventMesh.subscribe("get_start_measure_time", self.get_start_measure_time)#获取开始测量的时间戳时间\r
-            EventMesh.subscribe("set_start_temp_measure_time", self.set_start_temp_measure_time)#设置体温开始测量的时间戳时间\r
-            EventMesh.subscribe("get_start_temp_measure_time", self.get_start_temp_measure_time)#获取体温开始测量的时间戳时间\r
-            EventMesh.subscribe("play_hr_value", self.play_hr_value)#播放心率数值\r
-            EventMesh.subscribe("play_spo2_value", self.play_spo2_value)#播放心率数值\r
-            EventMesh.subscribe("play_temp_value", self.play_temp_value)#播放体温数值\r
-\r
-            EventMesh.subscribe("play_sugar_value", self.play_sugar_value)#播放血糖数值\r
-\r
-            EventMesh.subscribe("play_battery_level_value", self.play_battery_level_value)\r
-\r
-\r
-            EventMesh.subscribe("set_usb", self.set_usb)#\r
-            EventMesh.subscribe("get_usb", self.get_usb)#\r
-\r
-            EventMesh.subscribe("play_cur_step_event", self.play_cur_step_event)#\r
-\r
-            EventMesh.subscribe("set_call_state", self.set_call_state)#1是 拨出去呼叫中 2是播进来 3 是正在通话中 0是无效\r
-            EventMesh.subscribe("get_call_state", self.get_call_state)#\r
-            EventMesh.subscribe("interup_call_event", self.interup_call_event)#\r
-            EventMesh.subscribe("answer_call_event", self.answer_call_event)#接听电话\r
-            EventMesh.subscribe("dialin_call_event", self.dialin_call_event)#电话拨进响铃\r
-            EventMesh.subscribe("dialing_out_event", self.dialing_out_event)#电话呼叫中\r
-            EventMesh.subscribe("call_test_event", self.call_test_event)#电话拨进响铃测试\r
-\r
-            EventMesh.subscribe("dial_out_call_center_cb", self.dial_out_call_center_cb)#电话拨出去\r
-            EventMesh.subscribe("sos_out_call_center_cb", self.sos_out_call_center_cb)#sos拨打\r
-\r
-            EventMesh.subscribe("close_audio_play", self.close_audio_play)#关闭音频\r
-\r
-            #视频通话\r
-            EventMesh.subscribe("video_call_in_event", self.video_call_in_event)#视频通话拨进中\r
-            EventMesh.subscribe("video_call_out_cb", self.video_call_out_cb)#视频通话拨进中\r
-            EventMesh.subscribe("video_waite_timer_cb", self.video_waite_timer_cb)#对方正在接听中\r
-\r
-            EventMesh.subscribe("video_answer_timer_cb", self.video_answer_timer_cb)#对方已接听\r
-            EventMesh.subscribe("video_answer_mode_timer_cb", self.video_answer_mode_timer_cb)#对方已接听\r
-\r
-            EventMesh.subscribe("dev_video_end_timer_cb", self.dev_video_end_timer_cb)#对方未接通挂断了\r
-\r
-            \r
-\r
-            EventMesh.subscribe("get_video_in_out_state", self.get_video_in_out_state)#获取拨进还是拨出的状态\r
-            EventMesh.subscribe("set_video_in_out_state", self.set_video_in_out_state)#清除标识\r
-            \r
-            \r
-            \r
-\r
-            EventMesh.subscribe("start_wechat_record", self.start_wechat_record)#手表开始录音\r
-            EventMesh.subscribe("send_wechat_record", self.send_wechat_record)#发送微聊语音文件to app\r
-            EventMesh.subscribe("play_wechat_last_amr", self.play_wechat_last_amr)#播放微聊语音最后一条语音文件\r
-            EventMesh.subscribe("get_wechat_data", self.get_wechat_data)\r
-            EventMesh.subscribe("set_wechat_data", self.set_wechat_data)\r
-            EventMesh.subscribe("play_unread_wechat_infor", self.play_unread_wechat_infor)#按键播放最近一条微聊语音\r
-            EventMesh.subscribe("set_unread_wechat_state", self.set_unread_wechat_state)#设置未读标识\r
-            EventMesh.subscribe("get_unread_wechat_state", self.get_unread_wechat_state)#获取未读标志\r
-            EventMesh.subscribe("get_wechat_time", self.get_wechat_time)#获取微聊时间戳\r
-            EventMesh.subscribe("get_wechat_state", self.get_wechat_state)#获取微聊时间戳\r
-\r
-\r
-            EventMesh.subscribe("get_power_on_state", self.get_power_on_state)#获取开机标识\r
-            EventMesh.subscribe("get_power_off_state", self.get_power_off_state)#获取关机标识\r
-\r
-            EventMesh.subscribe("play_audio_file", self.play_audio_file)#获取播放音频文件\r
-\r
-            EventMesh.subscribe("OPEN_ALARM_RING", self.send_alarm_ring)#闹钟到点响铃\r
-            EventMesh.subscribe("STOP_ALARM_RING", self.stop_alarm_ring)#是否需要关闭闹钟\r
-\r
-            EventMesh.subscribe("recv_wechat_audio", self.recv_wechat_audio)#\r
-\r
-\r
-            EventMesh.subscribe("sos_short_press", self.sos_short_press)#sos短按事件\r
-\r
-            EventMesh.subscribe("falldown_alarm_event", self.falldown_alarm_event)#跌倒报警\r
-\r
-            EventMesh.subscribe("close_falldown_alarm_event", self.close_falldown_alarm_event)#关闭跌倒报警\r
-\r
-            EventMesh.subscribe("drink_alarm_event", self.drink_alarm_event)#该喝水了\r
-\r
-            EventMesh.subscribe("medicine_alarm_event", self.medicine_alarm_event)#该吃药了\r
-\r
-            EventMesh.subscribe("wakeup_alarm_event", self.wakeup_alarm_event)#该起床了\r
-\r
-            EventMesh.subscribe("home_alarm_event", self.home_alarm_event)#该回家了\r
-\r
-            EventMesh.subscribe("sleep_alarm_event", self.sleep_alarm_event)#该睡觉了\r
-\r
-            EventMesh.subscribe("reset_alarm_event", self.reset_alarm_event)#该休息了\r
-\r
-            EventMesh.subscribe("reset_end_alarm_event", self.reset_end_alarm_event)#休息结束了\r
-\r
-            EventMesh.subscribe("get_fall_down_state", self.get_fall_down_state)#跌倒报警标识\r
-\r
-            EventMesh.subscribe("app_factory", self.app_factory)#app恢复出厂\r
-\r
-            EventMesh.subscribe("app_restart", self.app_restart)#远程重启\r
-\r
-            EventMesh.subscribe("get_sos_state_out", self.get_sos_state_out)#正在拨打sos电话\r
-\r
-            EventMesh.subscribe("set_sos_state_out", self.set_sos_state_out)#清除在拨打sos电话\r
-\r
-        def interInfo_queue_thread(self):\r
-            while True:\r
-                data = self.interInfo_queue.get()\r
-                #EventMesh.debug_log("interInfo_queue_thread:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        EventMesh.debug_log("interInfo_queue_thread:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-\r
-        def publish_message_event_interInfo(self,event,msg):\r
-            self.interInfo_queue.put(msg)\r
-\r
-        def publish_call_event_cb(self, *args, **kwargs):#拨打电话\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.call_timer_cb,"data":0})\r
-\r
-        def publish_video_in_event_cb(self, *args, **kwargs):#视频通话拨入\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.video_in_timer_cb,"data":0})  \r
-\r
-        def publish_video_out_event_cb(self, *args, **kwargs):#拨打视频通话\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.video_out_timer_cb,"data":0})  \r
-\r
-        def publish_resatrt_down_event_cb(self, *args, **kwargs):#重启设备\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.powe_resatrt_down_fun,"data":0})  \r
-        \r
-        def publish_power_down_event_cb(self, *args, **kwargs):#关机\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.power_down_fun,"data":0})  \r
-\r
-        def publish_find_watch_event_cb(self, *args, **kwargs):#查找设备\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.FIND_timer_cb,"data":0})  \r
-\r
-        def publish_alarm_ring_event_cb(self, *args, **kwargs):#闹钟响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.Alarm_timer_cb,"data":0})  \r
-\r
-        def publish_reset_alarm_ring_event_cb(self, *args, **kwargs):#休息响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.reset_alarm_event_cb,"data":0})  \r
-        \r
-        def publish_reset_end_alarm_ring_event_cb(self, *args, **kwargs):#休息结束响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.reset_end_alarm_event_cb,"data":0})  \r
-        \r
-        def publish_sleep_alarm_ring_event_cb(self, *args, **kwargs):#睡觉响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.sleep_alarm_event_cb,"data":0})  \r
-        \r
-        def publish_home_ring_event_cb(self, *args, **kwargs):#回家响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.home_alarm_event_cb,"data":0})  \r
-\r
-        def publish_wakeup_ring_event_cb(self, *args, **kwargs):#起床响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.wakeup_alarm_event_cb,"data":0})  \r
-\r
-        def publish_medicine_ring_event_cb(self, *args, **kwargs):#吃药响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.medicine_alarm_event_cb,"data":0})  \r
-\r
-        def publish_drink_ring_event_cb(self, *args, **kwargs):#喝水响铃\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.drink_alarm_event_cb,"data":0})  \r
-\r
-        def publish_fall_done_ring_event_cb(self, *args, **kwargs):#跌倒提醒\r
-            EventMesh.publish("publish_message_event_interInfo",{"func":self.falldown_alarm_cb,"data":0})  \r
-\r
-\r
-        def reset_alarm_event(self,args,msg):#该休息了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_reset_alarm_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        def reset_alarm_event_cb(self,args):#该休息了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-        def reset_end_alarm_event(self,args,msg):#休息结束了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.reset_end_alarm_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_END_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        \r
-        def reset_end_alarm_event_cb(self,args):#休息结束了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_RESET_END_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-        \r
-        def sleep_alarm_event(self,args,msg):#该睡觉了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_sleep_alarm_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SLEEP_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        def sleep_alarm_event_cb(self,args):#该睡觉了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SLEEP_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-\r
-        def home_alarm_event(self,args,msg):#该回家了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_home_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HOME_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        \r
-        def home_alarm_event_cb(self,args):#该回家了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HOME_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-        \r
-        def wakeup_alarm_event(self,args,msg):#该起床了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_wakeup_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_WAKEUP_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        \r
-        def wakeup_alarm_event_cb(self,args):#该起床了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_WAKEUP_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-\r
-        def medicine_alarm_event(self,args,msg):#该吃药了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_medicine_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_MEDICINE_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-\r
-        def medicine_alarm_event_cb(self,args):#该吃药了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count += 1\r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_MEDICINE_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-        def drink_alarm_event(self,args,msg):#该喝水了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.start(2000, 1, self.publish_drink_ring_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_DRINK_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            \r
-\r
-\r
-        def drink_alarm_event_cb(self,args):#该喝水了\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                self.alarm_count += 1# 1 2 \r
-                if self.alarm_count >= 3:\r
-                    self.alarm_count = 0\r
-                    self.alarm_timer1.stop()\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_DRINK_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.alarm_count = 0\r
-                self.alarm_timer1.stop()\r
-            \r
-        def falldown_alarm_event(self,args,msg):#跌倒报警启动中提示\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and wechat_state == 0 and video_state == 0:\r
-                EventMesh.publish("close_timer_all")#\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_FALL_ALARM"))\r
-                self.time_count = 0\r
-                self.fall_flag = 0\r
-                self.fall_timer1.stop()\r
-                self.fall_flag = 1\r
-                self.fall_timer1.start(4000, 1, self.publish_fall_done_ring_event_cb)\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-\r
-        def falldown_alarm_cb(self,*args):\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and self.call_state == 0 and wechat_state == 0 and video_state == 0:\r
-                self.time_count+=1\r
-                if self.time_count >= 5:\r
-                    self.time_count = 0\r
-                    self.fall_timer1.stop()\r
-                    EventMesh.publish_async("dial_sos_phone")#拨打sos号码\r
-                    return\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_FALL_ALARM"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                self.time_count = 0\r
-                self.fall_timer1.stop()\r
-        \r
-        def close_falldown_alarm_event(self,event,msg):#跌倒挂断挂断\r
-            if self.fall_flag == 1:#跌倒标志\r
-                self.fall_flag = 0\r
-                self.fall_timer1.stop()\r
-                self.sos_timer1.stop()\r
-                self.sos_timer2.stop()\r
-                if self.call_state != 0:\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                sos_flag = EventMesh.publish("get_sos_flag")\r
-                if sos_flag == 1:\r
-                    self.call_state = 0\r
-                    EventMesh.publish("set_sos_state_out")\r
-                    EventMesh.publish("set_sos_flag",0)\r
-                    EventMesh.publish("set_sos_num",0)\r
-                    EventMesh.publish("set_hangup_mode",0)\r
-\r
-        \r
-\r
-        def send_find_watch(self, event, msg): #发送查找设备指令\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0: \r
-                EventMesh.publish("close_timer_all")#\r
-                self.find_state = 1\r
-                self.FIND_timer_count = 0\r
-                self.alarm_timer1.start(3000,1,self.publish_find_watch_event_cb)\r
-                EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                # EventMesh.publish("set_led_time_arg",[1000,33000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("audio_find_haixiu"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                EventMesh.publish("set_motor_time",[1,2,8*3,8,4])#设置马达参数\r
-\r
-        def stop_find_watch(self, event, msg): \r
-            if self.find_state == 1:\r
-                self.find_state = 0\r
-                self.FIND_timer_count = 0\r
-                # EventMesh.publish("stop_led_timer")#设置参数\r
-                self.aud.stopPlayStream()  #播放声音 \r
-                self.alarm_timer1.stop()\r
-                EventMesh.publish("close_motor_infor")#关闭马达和定时器\r
-\r
-        def FIND_timer_cb(self, data):\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                if self.find_state == 1:\r
-                    # EventMesh.debug_log("self.FIND_timer_count:{}".format(self.FIND_timer_count))\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("audio_find_haixiu"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    #EventMesh.publish("set_motor_time",[1,2,8*2,8,4])#设置马达参数\r
-                    self.FIND_timer_count += 1\r
-                    if self.FIND_timer_count > 10: #120秒30s\r
-                        EventMesh.publish("STOP_FIND_WATCH")\r
-            else:\r
-                self.FIND_timer_count = 0\r
-                self.alarm_timer1.stop()\r
-                \r
-        \r
-        def stop_FIND(self) :\r
-            self.alarm_timer1.stop()\r
-\r
-        def send_alarm_ring(self, event, msg): #发送查找设备指令\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0 :\r
-                EventMesh.publish("close_timer_all")#\r
-                self.alarm_state = 1\r
-                self.alarm_timer_count = 0\r
-                self.alarm_timer1.start(3000,1,self.publish_alarm_ring_event_cb)\r
-                # EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                # EventMesh.publish("set_led_time_arg",[1000,33000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_ALARM_NEW"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-        \r
-        def stop_alarm_ring(self, event, msg): #停止闹钟响铃\r
-            if self.alarm_state == 1:\r
-                self.alarm_state = 0\r
-                self.alarm_timer_count = 0\r
-                # EventMesh.publish("stop_led_timer")#设置参数\r
-                self.aud.stopPlayStream()  #停止播放\r
-                self.alarm_timer1.stop()\r
-\r
-        def Alarm_timer_cb(self, data):\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0:\r
-                if self.alarm_state == 1:\r
-                    # EventMesh.debug_log("self.alarm_timer_count:{}".format(self.alarm_timer_count))\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_ALARM_NEW"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    self.alarm_timer_count += 1\r
-                    if self.alarm_timer_count > 15: #120秒30s\r
-                        EventMesh.publish("STOP_ALARM_RING")\r
-            else:\r
-                self.alarm_timer_count = 0\r
-                self.alarm_timer1.stop()\r
-\r
-        def get_fall_down_state(self,event,msg):\r
-            return self.fall_flag\r
-\r
-        def sos_short_press(self,args,msg):\r
-            EventMesh.publish("interup_call_event")#如果在电话中强制挂断电话\r
-            EventMesh.publish("close_audio_play")#强制关闭音频文件播放\r
-            EventMesh.publish("STOP_FIND_WATCH")#停止查找设备\r
-            EventMesh.publish("STOP_ALARM_RING")#停止闹钟响铃\r
-            if NEW_ENABLE == 0:#新的按键功能定义\r
-                video_state = EventMesh.publish("get_video_state")\r
-                if video_state != 0:#视频通话打入或者接听后允许挂断视频通话\r
-                    EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话\r
-                    return\r
-            EventMesh.publish("play_cur_time_event")#播报当前时间\r
-            #播报当前时间\r
-\r
-        def recv_wechat_audio(self,event,str_data):#接收微聊语音播放\r
-            wechat_state = EventMesh.publish("get_wechat_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if self.call_state == 0 and self.fall_flag == 0 and wechat_state == 0 and self.fall_flag == 0 and video_state == 0: \r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_WECHAT_RECV"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-                EventMesh.publish("set_motor_time",[1,2,10*3,10,5])#设置马达参数\r
-\r
-\r
-\r
-        def audio_event_queue_thread(self):\r
-            while True:\r
-                data = self.audio_event_queue.get()\r
-                #EventMesh.debug_log("audio_event_queue:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        EventMesh.debug_log("audio_event_queue:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-        def publish_message_event_audio(self,event,msg):\r
-            self.audio_event_queue.put(msg)\r
-\r
-        def play_audio_file(self, *args, **kwargs):#播放音频文件\r
-            # EventMesh.debug_log("args",args)\r
-            # EventMesh.publish("publish_message_event_audio",{"func":self.play_audio_file_do,"data":args[1]})  \r
-            data = args[1]\r
-            self.play_audio_file_do(data)\r
-\r
-        def play_audio_file_do(self,data):#msg 拼接的路径文件\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            # EventMesh.debug_log("play_audio_file",data[0],data[1],open_power,power_off)#路径 str_data[1] 是否需要被打断\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            self.aud.stopPlayStream()\r
-            self.aud.montage_play('U:/static/audio.bin',1,data[1],data[0])\r
-            # EventMesh.debug_log("play_audio_file end",data[0],data[1])#路径 str_data[1] 是否需要被打断\r
-            \r
-\r
-\r
-\r
-\r
-        def powe_resatrt_down_fun(self, *args):#重启设备\r
-            EventMesh.publish("close_led_pin")\r
-            self.aud.stopPlayStream()\r
-            Power.powerRestart()\r
-\r
-\r
-        def power_down_fun(self, *args):\r
-            EventMesh.publish("close_led_pin")\r
-            self.aud.stopPlayStream()\r
-            Power.powerDown()\r
-\r
-\r
-\r
-        def close_audio_play(self, event, msg): #msg\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            self.aud.stopPlayStream()\r
-\r
-\r
-\r
-        def close_timer_all(self, event, msg): \r
-            # EventMesh.debug_log("close_timer_all!!!!!!!!!!!!!!!!!!!")\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-                \r
-            self.aud.stopPlayStream()\r
-            self.timer.stop()\r
-            self.sos_timer2.stop()\r
-            self.sos_timer1.stop()\r
-            self.fall_flag = 0\r
-            self.fall_timer1.stop()\r
-            self.alarm_timer1.stop()\r
-        \r
-\r
-        def answer_call_event(self, event, msg): #\r
-            if self.call_state == 2:\r
-                sos_flag = EventMesh.publish("get_sos_flag")\r
-                if sos_flag == 1:\r
-                    self.call_state = 0\r
-                    EventMesh.publish("set_sos_state_out")\r
-                    EventMesh.publish("set_sos_flag",0)\r
-                    EventMesh.publish("set_sos_num",0)\r
-                    EventMesh.publish("set_hangup_mode",0)\r
-                EventMesh.publish("close_timer_all")#\r
-                voiceCall.callAnswer()\r
-\r
-        def set_call_state(self, event, msg): #\r
-            self.call_state = msg\r
-\r
-\r
-        def video_call_in_event(self, event, msg):#视频通话拨入\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            if open_power != None and power_off != None:\r
-                if open_power == 0 or power_off == 1:\r
-                    return\r
-            EventMesh.publish("close_timer_all")#\r
-            EventMesh.publish("close_wechat_btn_timer")#\r
-            EventMesh.publish("set_led_time_arg",[1,2,10*2,led_mode.FLASH_LIGHT_RED,10,5,led_mode.VIDEO_MEASURE_MODE])#測量成功\r
-            self.video_call_state = 1\r
-            self.video_count=0\r
-            self.video_call_in_mode = msg\r
-            EventMesh.publish("clear_video_timer_state")\r
-            EventMesh.publish("set_app_dev_end_state")\r
-            print("voice in!!!",msg,self.video_call_in_mode)\r
-            if self.video_call_in_mode == 0:\r
-                \r
-                self.timer.start(2000, 1, self.publish_video_in_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_VOICE_IN"))\r
-                EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-            else:\r
-                self.timer.start(2000, 1, self.publish_video_in_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_CALL_IN"))\r
-                EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-            # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            EventMesh.publish("set_motor_time",[1,2,10*3,10,5])#设置马达参数\r
-        def video_in_timer_cb(self,data):\r
-\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            if open_power != None and power_off != None:\r
-                if open_power == 0 or power_off == 1:\r
-                    return\r
-            \r
-            video_state = EventMesh.publish("get_video_state")\r
-            # print("video_state",video_state)\r
-            \r
-            self.video_count+=1\r
-            if self.video_count >= 30 or video_state == 0:#一分钟挂断视频通话\r
-                EventMesh.publish("video_newwork_reject_cb",None)#挂断视频通话\r
-                self.video_call_state = 0\r
-                self.video_count=0\r
-                self.timer.stop()\r
-                return\r
-            if video_state != 6 or self.video_call_state == 0:#视频电话呼入\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("close_timer_all")#\r
-                return\r
-            if self.video_call_in_mode == 0:\r
-                EventMesh.publish("set_led_time_arg",[1,2,10*2,led_mode.FLASH_LIGHT_RED,10,5,led_mode.VIDEO_MEASURE_MODE])#\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_VOICE_IN"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            else:\r
-                EventMesh.publish("set_led_time_arg",[1,2,10*2,led_mode.FLASH_LIGHT_RED,10,5,led_mode.VIDEO_MEASURE_MODE])#\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_CALL_IN"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-\r
-        def video_call_out_cb(self, event, msg):#视频通话拨出\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            if open_power != None and power_off != None:\r
-                if open_power == 0 or power_off == 1:\r
-                    return\r
-            EventMesh.publish("close_timer_all")#\r
-            EventMesh.publish("close_wechat_btn_timer")#\r
-            # EventMesh.publish("set_led_time_arg",[1,2,10*10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#\r
-            EventMesh.publish("clear_video_timer_state")\r
-            EventMesh.publish("set_app_dev_end_state")\r
-            if msg != None:\r
-                self.video_count = 0\r
-                self.video_call_state = 1\r
-                self.timer.start(2000, 1, self.publish_video_out_event_cb)\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_WAITING"))\r
-                EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-            else:\r
-                self.video_call_state = 0\r
-                self.video_count=0\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_VIDOE"))\r
-                EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-                pass\r
-        \r
-        def video_out_timer_cb(self,data):\r
-\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            if open_power != None and power_off != None:\r
-                if open_power == 0 or power_off == 1 :\r
-                    return\r
-            video_state = EventMesh.publish("get_video_state")#加入中\r
-            # print("video_out_timer_cb video_state",video_state)\r
-            \r
-            self.video_count+=1\r
-            if self.video_count >= 30 or video_state == 0:#40s挂断视频通话 对方无响应\r
-                self.timer.stop()\r
-                EventMesh.publish("video_newwork_reject_cb",None)#挂断视频通话\r
-                self.video_call_state = 0\r
-                self.video_count = 0\r
-                \r
-                return\r
-            if video_state == 4 or self.video_call_state == 0:#视频电话呼出 如果接通了就不需要了\r
-                self.video_call_state = 0\r
-                self.video_count=0\r
-                print("video calling")\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("close_timer_all")#\r
-                return\r
-            \r
-\r
-            # EventMesh.publish("set_led_time_arg",[1,2,10*10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_WAITING"))\r
-            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-\r
-        def video_waite_timer_cb(self,event,msg):#等待对方接听音频\r
-            print("video_waite_timer_cb 1")\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            if open_power != None and power_off != None:\r
-                if open_power == 0 or power_off == 1 or self.video_call_state == 0:\r
-                    return\r
-            play_state = EventMesh.publish("get_audio_state")\r
-            if play_state == 0:\r
-                print("video_waite_timer_cb 2")\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_WAITING"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        \r
-        \r
-        def video_answer_timer_cb(self,event,msg):#对方已接听可正常通话了\r
-            print("video_answer_timer_cb 1")\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            if open_power != None and power_off != None:\r
-                if open_power == 0 or power_off == 1  or self.video_call_state == 0 :\r
-                    return\r
-            print("video_answer_timer_cb 2")\r
-            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_ANSWER"))\r
-            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-\r
-        def video_answer_mode_timer_cb(self,event,msg):#1:#正在等待对方接听中,请稍候   2:#对方已接听可正常通话 3:#正在接听中\r
-            # print("video_answer_mode_timer_cb 1",msg)\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            if open_power != None and power_off != None:\r
-                if open_power == 0 or power_off == 1:\r
-                    return\r
-            # print("video_answer_mode_timer_cb 2",msg)\r
-            if msg == 1:#正在等待对方接听中,请稍候\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_WAITING"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-            elif msg == 2:#已接通\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_ANSWER"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-                pass\r
-            elif msg == 3:#正在连接中...\r
-                if EventMesh.publish("get_audio_state") == 0:\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_ANSWERING"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-                pass\r
-            elif msg == 4:#对方已挂断...\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_CALL_ENDING"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-                pass\r
-            elif msg == 5:#对方已挂断或网络不好\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_VIDEO_CALL_CONNECT"))#播放音频\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-\r
-        def dev_video_end_timer_cb(self,event,msg):#网络不好或者对方未接通挂断了\r
-            self.video_call_state = 0\r
-            self.video_count = 0\r
-            print("dev_video_end_timer_cb")\r
-            EventMesh.publish("stop_led_timer")#设置参数\r
-            EventMesh.publish("close_timer_all")#\r
-           \r
-        \r
-        def get_video_in_out_state(self,event,msg):\r
-            return self.video_call_state\r
-        \r
-        def set_video_in_out_state(self,event,msg):\r
-            self.video_call_state = msg\r
-        \r
-\r
-\r
-        def dialin_call_event(self, event, msg):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if video_state != 0:#视频电话呼入\r
-                self.call_state = 0\r
-                voiceCall.callEnd()\r
-                return\r
-            EventMesh.publish("close_timer_all")#\r
-            EventMesh.publish("close_wechat_btn_timer")#\r
-            EventMesh.publish("set_led_time_arg",[1,2,10*10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-            self.timer.start(6000, 1, self.publish_call_event_cb)\r
-            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CALL_mp3"))\r
-            EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-            # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            EventMesh.publish("set_motor_time",[1,2,10*3,10,5])#设置马达参数\r
-\r
-        def call_timer_cb(self,data):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if video_state != 0:#视频电话呼入\r
-                self.call_state = 0\r
-                voiceCall.callEnd()\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("close_timer_all")#\r
-                return\r
-            if self.call_state != 2:\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("close_timer_all")#\r
-                return\r
-            EventMesh.publish("set_led_time_arg",[1,2,10*10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CALL_mp3"))\r
-            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-        \r
-        def dial_out_call_center_cb(self, event, msg):#电话拨出去\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            # EventMesh.debug_log("dial_out_call_center_cb",msg)\r
-            if self.call_state == 0:\r
-                self.phone_num = ''\r
-                EventMesh.publish("close_timer_all")#\r
-                EventMesh.publish("set_led_time_arg",[1,2,8,led_mode.FLASH_LIGHT_GREEN,8,4,led_mode.OTHER_MEASURE_MODE])#\r
-                if msg == None:\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-                    # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:\r
-                    self.phone_num = str(msg)\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))\r
-                    EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-                    self.timer1.start(2000, 0, self.time_out_phone)\r
-\r
-        \r
-\r
-\r
-                    \r
-        \r
-        def time_out_phone(self, msg):#电话拨出去\r
-            voiceCall.callStart(self.phone_num)\r
-\r
-        def sos_out_call_center_cb(self, event, msg):#sos电话呼叫中\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            self.sos_phone_num = ''\r
-            EventMesh.debug_log("sos_out_call_center_cb",msg)\r
-            if self.call_state == 0:\r
-                self.sos_state = 0\r
-                EventMesh.publish("close_timer_all")#\r
-                if msg == None:\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件\r
-                    # EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:\r
-                    sos_state =  EventMesh.publish("get_dev_state")\r
-                    self.sos_state = 1\r
-                    tmp = 1 << 16\r
-                    sos_state = sos_state|tmp #第21位=1\r
-                    EventMesh.publish("set_dev_state",sos_state)\r
-\r
-                    EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,sos_state]) #开始AL定位\r
-                    EventMesh.publish("close_timer_all")#\r
-                    self.sos_phone_num = msg\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))\r
-                    EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件\r
-                    self.sos_timer1.start(2000, 0, self.sos_call_out_phone)\r
-                    self.sos_timer2.start(30000, 0, self.sos_time_out_phone)\r
-                    \r
-                    \r
-        def sos_time_out_phone(self, msg):#30s超时未打通或者信号不好则重新拨打\r
-            self.sos_state = 0\r
-            sos_flag = EventMesh.publish("get_sos_flag")\r
-            if sos_flag == 1:\r
-                if self.call_state == 0:\r
-                    EventMesh.publish("set_sos_state_out")\r
-                    EventMesh.publish("set_sos_info_call") \r
-                    \r
-        def sos_call_out_phone(self, msg):#电话拨出去\r
-            voiceCall.callStart(self.sos_phone_num)\r
-        \r
-        def get_sos_state_out(self, event, msg):#正在拨打sos电话\r
-            return self.sos_state\r
-        \r
-        def set_sos_state_out(self, event, msg):#清除在拨打sos电话\r
-            self.sos_state = 0\r
-\r
-        def call_test_event(self, event, msg):\r
-            voiceCall.callStart(str("10086"))\r
-\r
-        def get_call_state(self, event, msg):\r
-            return self.call_state\r
-        \r
-        def interup_call_event(self, event, msg):#侧边金属按钮挂断来电\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 2 or flag == 3:#电话通话中 或者呼叫中挂断中断\r
-                self.call_state = 0\r
-                voiceCall.callEnd()\r
-        \r
-        def dialing_out_event(self, event, msg):#侧边金属按键挂断电话呼叫中\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 1 or flag == 3:#电话呼叫中 或者在正在通话中\r
-                self.call_state = 0\r
-                voiceCall.callEnd()\r
-                \r
-\r
-\r
-        def play_cur_step_event(self, event, msg): #msg 1 播放当前步数\r
-            flag = EventMesh.publish("get_call_state") \r
-            video_state = EventMesh.publish("get_video_state")\r
-            if video_state != 0:\r
-                return\r
-            if flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                if self.fall_flag == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                step = EventMesh.publish("get_old_step_value")\r
-                EventMesh.debug_log("step",step)\r
-                self.setp_old = step\r
-                if step <= 10:#\r
-                    if step == 10:#十步\r
-                        str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:# 9步\r
-                        str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(step)),audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                elif step <= 100:#十 90\r
-                    if step == 100:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),audio_buf.index("R_READ_STEP_2"),\\r
-                            audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        step_tmp = str(step)\r
-                        shi_value = int(step_tmp[0])#十\r
-                        ge_value = int(step_tmp[1])#个\r
-                        if shi_value > 1:#大于19步\r
-                            if ge_value == 0:#9十步 70十步\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:#9十2步\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:#十9步\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                            audio_buf.index("R_READ_STEP_4"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                elif step <= 1000:\r
-                    if step == 1000:#1千步\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\\r
-                        audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        step_tmp = str(step)#500\r
-                        bai_value = int(step_tmp[0])#百\r
-                        shi_value = int(step_tmp[1])#十\r
-                        ge_value = int(step_tmp[2])#个\r
-                        #101 110 1\r
-                        if shi_value > 0:#110\r
-                            if ge_value == 0:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:\r
-                            if shi_value == 0 and ge_value == 0:#500 600\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                pass\r
-                            else:\r
-\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-                elif step <= 10000:#千\r
-                    if step == 10000:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_1"),\\r
-                        audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        pass\r
-                    else:\r
-                        one_thousand = step//1000 #千\r
-                        one_hundred = step%1000 #百\r
-                        baishu = step%100 #十\r
-                        shishu = step%10 #个\r
-                        step_tmp = str(step)\r
-                        qian = int(step_tmp[0])#千\r
-                        bai_value = int(step_tmp[1])#百\r
-                        shi_value = int(step_tmp[2])#十\r
-                        ge_value = int(step_tmp[3])#个\r
-                        if bai_value <= 0:\r
-                            if shi_value <= 0:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                if ge_value == 0:#1020 1040\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                else:#1021 \r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:\r
-                            if shi_value <= 0:#1109\r
-                                if ge_value == 0:#1110\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\r
-                                    audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                else:\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\r
-                                    audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                    audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                if ge_value == 0:#1110\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\r
-                                    audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                else:#1117\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                    audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\r
-                                    audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                        pass\r
-                elif step <= 100000:#万\r
-                            if step == 100000:#10万步\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3"),\\r
-                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_STEP_4"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                step_tmp = str(step)\r
-                                wang = int(step_tmp[0])#万\r
-                                qian = int(step_tmp[1])#千\r
-                                bai_value = int(step_tmp[2])#百\r
-                                shi_value = int(step_tmp[3])#十\r
-                                ge_value = int(step_tmp[4])#个\r
-                                if wang > 0 and qian > 0 and bai_value > 0:#11109 11111\r
-                                    if shi_value <= 0:#11109\r
-                                        if ge_value == 0:#11100\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#11108\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                            audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            pass\r
-                                    else:\r
-                                        if ge_value == 0:#11110\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                            audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#11116\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                            audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            pass\r
-                                elif wang > 0 and qian > 0:#11000 11010 11012 11008\r
-                                    if shi_value > 0:\r
-                                        if ge_value == 0:#11010\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                            audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#11016\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                            audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    else:   \r
-                                        if ge_value == 0:#11000\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#11004\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_{}".format(qian)),\\r
-                                            audio_buf.index("R_READ_STEP_1"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                            audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                \r
-                                elif wang > 0:#1\r
-                                    if bai_value > 0:#百\r
-                                        if shi_value > 0:#10110\r
-                                            if ge_value == 0:#10150\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                                audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            else:\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),audio_buf.index("R_READ_STEP_3"),\\r
-                                                audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#10108\r
-                                            if ge_value == 0:#10100\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            else:#10108\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(bai_value)),\\r
-                                                audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                                audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    else:\r
-                                        if shi_value > 0:\r
-                                            if ge_value == 0:#10090\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                                audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            else:#10098\r
-                                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                                audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(shi_value)),\\r
-                                                audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),audio_buf.index("R_READ_STEP_4"))\r
-                                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(wang)),\\r
-                                            audio_buf.index("R_READ_STEP_0"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge_value)),\\r
-                                            audio_buf.index("R_READ_STEP_4"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-        def set_usb(self, event, msg): #msg 1 正在充电 2充电已移出 3 充电已满 0\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            flag = EventMesh.publish("get_call_state") \r
-            video_state = EventMesh.publish("get_video_state")\r
-            get_hr_state = EventMesh.publish("get_hr_state")\r
-            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-            get_bp_state  = EventMesh.publish("get_bp_state")\r
-            get_bg_state  = EventMesh.publish("get_bg_state")\r
-            get_temp_state  = EventMesh.publish("get_temp_state")\r
-            if msg == 1:\r
-                if get_hr_state != None and get_spo2_state != None and get_bp_state != None and get_bg_state != None and get_temp_state != None:\r
-                    if get_hr_state != 0:\r
-                        \r
-                        EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                        if get_hr_state == 1:\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            EventMesh.publish("set_start_measure_time",0)#设置开始测量的时间戳时间\r
-\r
-                        EventMesh.debug_log("stop debug8")\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART) \r
-                    if get_spo2_state != 0:\r
-                        EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                        if get_spo2_state == 1:\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                        EventMesh.debug_log("stop debug13")\r
-                    if get_bp_state != 0:\r
-                        EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                        if get_bp_state == 1:\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                        EventMesh.debug_log("stop bp debug1")\r
-                    if get_bg_state != 0:\r
-                        EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                        if get_bg_state == 1:#手动开灯关闭灯\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                        EventMesh.debug_log("stop BG  debug14")\r
-                    if get_temp_state != 0:\r
-                        \r
-                        EventMesh.publish("set_temp_state",0)#2代表后台进入测试\r
-                        if get_temp_state == 1:\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            EventMesh.publish("set_start_temp_measure_time",0)#\r
-                        EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-                        EventMesh.debug_log("stop temp  debug14")\r
-            if msg == 1:\r
-                self.usbState = msg\r
-                str_buf = [1,1,10,led_mode.LONG_LIGHT_RED,4,2,led_mode.CHARGE_IN_MODE]\r
-                EventMesh.publish("set_led_time_arg",str_buf)#\r
-                if flag == 0 and self.fall_flag == 0 and video_state == 0:#电话通话中 或者呼叫中挂断中断\r
-                    EventMesh.publish("close_timer_all")#\r
-                    self.aud.stop()\r
-                    self.aud.play(1,1,'U:/static/R_CHARGE_IN.mp3')\r
-                    # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_IN"))\r
-                    # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                EventMesh.debug_log("charge R_CHARGE_IN")\r
-                \r
-                \r
-            elif msg == 2 or msg == 0:\r
-                self.usbState = msg\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                # EventMesh.publish("set_led_time_arg",[0,1000,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.CHARGE_OUT_MODE])#測量成功\r
-                EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,4,led_mode.CHARGE_OUT_MODE])#測量成功\r
-                EventMesh.debug_log("charge R_CHARGE_OUT")\r
-                if flag == 0 and self.fall_flag == 0 and video_state == 0:#电话通话中 或者呼叫中挂断中断\r
-                    EventMesh.publish("close_timer_all")#\r
-                    self.aud.stop()\r
-                    self.aud.play(1,1,'U:/static/R_CHARGE_OUT.mp3')\r
-                    # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_OUT"))\r
-                    # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                \r
-\r
-\r
-            elif msg == 3:\r
-                self.usbState = msg\r
-                EventMesh.debug_log("charge full")\r
-                str_buf = [1,1,10,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.CHARGE_FULL_MODE]\r
-                EventMesh.publish("set_led_time_arg",str_buf)#\r
-                # if flag == 0 and self.fall_flag == 0 and video_state == 0:#电话通话中 或者呼叫中挂断中断\r
-                #     EventMesh.publish("close_timer_all")#\r
-                #     str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_CHARGE_FULL"))\r
-                #     EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                \r
-\r
-\r
-        def get_usb(self, event, msg):\r
-            return self.usbState\r
-        \r
-\r
-\r
-        def app_factory(self,event,msg):\r
-            if msg != None:\r
-                number = str(msg)\r
-                sms.sendPduMsg(number, 'factory# send ok', 'UCS2')\r
-            ret = 0\r
-            ret = ql_fs.path_exists("/usr/static/storage_file")#\r
-            if ret == True:\r
-                ql_fs.rmdirs("/usr/static/storage_file")\r
-                ql_fs.mkdirs("/usr/static/storage_file")\r
-            if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:\r
-                EventMesh.publish(constants.PROTOCOL.DLT_SEND)\r
-        \r
-            self.factory_timer.start(6*1000,0,self.factory_cb)\r
-            pass\r
-        def factory_cb(self,*argc):\r
-            self.aud.stopPlayStream()\r
-            Power.powerRestart()\r
-\r
-        def app_restart(self,event,msg):#远程发短信重启\r
-            if msg != None:\r
-                number = str(msg)\r
-                sms.sendPduMsg(number, 'reset# send ok', 'UCS2')\r
-            self.restart_timer.start(3*1000,0,self.app_restart_cb)\r
-            pass\r
-        def app_restart_cb(self,*argc):\r
-            Power.powerRestart()\r
-\r
-        def open_power_on(self, event, msg): #msg 1 开机 2 关机 3 重启  4恢复出厂设置 5静音关机\r
-            EventMesh.publish("close_timer_all")#\r
-            if msg == 1:\r
-                EventMesh.publish("close_hr_sop2")#\r
-                # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-                # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                self.pwk_timer1.start(1000,0,self.power_on_audio_cb)\r
-                \r
-                print("open_power_on!!!!!!!\n\n\n\n")\r
-            elif msg == 2:\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 0:#电话呼叫中\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                step = EventMesh.publish("get_old_step_value")\r
-                # step1 = SC7A20().get_step()\r
-                # step1 = EventMesh.publish(constants.EVENT.GET_STEP)\r
-                # step2 = EventMesh.publish("get_storage_config","old_step")\r
-                self.read_data = EventMesh.publish("get_storage_data")\r
-                # EventMesh.publish("set_test_data5",[1,step,step1,step2])\r
-                if step != 0:\r
-                    EventMesh.publish("set_storage_config",["old_step",step])\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-                # step3 = EventMesh.publish("get_old_step_value")\r
-                # step4 = SC7A20().get_step()\r
-                # step4 = EventMesh.publish(constants.EVENT.GET_STEP)\r
-                # step5 = EventMesh.publish("get_storage_config","old_step")\r
-                # EventMesh.publish("set_test_data6",[1,step3,step4,step5])\r
-                EventMesh.publish("set_storage_config",["old_time",time_tmp])#关机保存一个是时间\r
-                EventMesh.publish("set_storage_config",["power_state",0])\r
-                # self.pwk_timer1.start(3000,0,self.power_off_audio_cb)\r
-                EventMesh.publish("close_hr_sop2")#\r
-                # EventMesh.debug_log("power_off_audio_cb")\r
-                self.aud.stop()\r
-                self.aud.play(1,0,'U:/static/R_POWER_OFF_1.mp3')\r
-                # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-                # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_RED,6,3,led_mode.POWER_OFF_MODE])#\r
-                self.power_off = 1\r
-                self.pwk_timer2.start(6000,0,self.publish_power_down_event_cb)\r
-            elif msg == 3:\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 0:#电话呼叫中\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                EventMesh.publish("close_hr_sop2")#\r
-                self.aud.stop()\r
-                self.aud.play(1,0,'U:/static/R_POWER_OFF_1.mp3')\r
-                # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-                # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                self.power_off = 1\r
-                self.timer.start(8000,0,self.publish_resatrt_down_event_cb)\r
-                #EventMesh.publish("set_led_time_arg",[3000,4000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE])#\r
-            elif msg == 4:\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 0:#电话呼叫中\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                EventMesh.publish("close_hr_sop2")#\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                self.power_off = 1\r
-                ret = 0\r
-                ret = ql_fs.path_exists("/usr/static/storage_file")#\r
-                if ret == True:\r
-                    ql_fs.rmdirs("/usr/static/storage_file")\r
-                    ql_fs.mkdirs("/usr/static/storage_file")\r
-                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:\r
-                    EventMesh.publish(constants.PROTOCOL.DLT_SEND)\r
-                self.aud.stopPlayStream()\r
-                self.timer.start(6*1000,0,self.fun)\r
-            elif msg == 5:\r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 0:#电话呼叫中\r
-                    self.call_state = 0\r
-                    voiceCall.callEnd()\r
-                step = EventMesh.publish("get_old_step_value")\r
-                # step1 = SC7A20().get_step()\r
-                # step1 = EventMesh.publish(constants.EVENT.GET_STEP)\r
-                # step2 = EventMesh.publish("get_storage_config","old_step")\r
-                self.read_data = EventMesh.publish("get_storage_data")\r
-                # EventMesh.publish("set_test_data7",[1,step,step1,step2])\r
-                if step != 0:\r
-                    EventMesh.publish("set_storage_config",["old_step",step])\r
-\r
-                # step3 = EventMesh.publish("get_old_step_value")\r
-                # step4 = SC7A20().get_step()\r
-                # step4 = EventMesh.publish(constants.EVENT.GET_STEP)\r
-                # step5 = EventMesh.publish("get_storage_config","old_step")\r
-                # EventMesh.publish("set_test_data8",[1,step3,step4,step5])\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-                EventMesh.publish("set_storage_config",["old_time",time_tmp])#关机保存一个是时间\r
-                EventMesh.publish("set_storage_config",["power_state",1])\r
-                \r
-                EventMesh.publish("close_hr_sop2")#\r
-                EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_RED,6,3,led_mode.POWER_OFF_MODE])#\r
-                self.power_off = 1\r
-                self.pwk_timer2.start(6000,0,self.publish_power_down_event_cb)\r
-                # self.pwk_timer1.start(3000,0,self.power_off_no_audio_cb)#不需要关机铃声\r
-\r
-\r
-\r
-        def fun(self,*argc):\r
-            self.aud.stopPlayStream()\r
-            Power.powerRestart()\r
-            \r
-\r
-        def power_on_cb(self, msg): #msg 开机标识\r
-            self.power_on_flag = 1\r
-        def clear_power_on_cb(self, msg): #msg 开机标识\r
-            self.power_on_flag = 0\r
-        \r
-        def power_on_audio_cb(self, msg):\r
-            self.power_on_flag = 1\r
-            # EventMesh.debug_log("power_on_audio_cb")\r
-            power_state = EventMesh.publish("get_storage_config","power_state")\r
-            #EventMesh.publish("set_motor_time",[1,2,10*2,10,5])#设置马达参数\r
-            if power_state == None:\r
-                power_state = 0\r
-            # print("power_state",power_state)\r
-            if power_state <= 0:\r
-                self.aud.stop()\r
-                self.aud.play(1,1,'U:/static/R_POWER_OFF_1.mp3')\r
-            # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-            # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_GREEN,6,3,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-            # EventMesh.publish("set_led_time_arg",[1000,200,10,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-            self.power_on_flag = 0\r
-            self.pwk_timer2.start(5000,0,self.power_on_cb)\r
-\r
-        def get_power_on_state(self, event, msg):\r
-            return self.power_on_flag\r
-        \r
-        def power_off_audio_cb(self, msg):\r
-            # EventMesh.debug_log("power_off_audio_cb")\r
-            self.aud.stop()\r
-            self.aud.play(1,0,'U:/static/R_POWER_OFF_1.mp3')\r
-            # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_POWER_OFF_1"))\r
-            # EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_RED,6,3,led_mode.POWER_OFF_MODE])#\r
-            self.power_off = 1\r
-            self.pwk_timer2.start(6000,0,self.publish_power_down_event_cb)\r
-        \r
-        def power_off_no_audio_cb(self, msg):\r
-            EventMesh.debug_log("power_off_no_audio_cb")\r
-            EventMesh.publish("set_led_time_arg",[1,2,6*8,led_mode.FLASH_LIGHT_RED,6,3,led_mode.POWER_OFF_MODE])#\r
-            self.power_off = 1\r
-            self.pwk_timer2.start(6000,0,self.publish_power_down_event_cb)\r
-\r
-        def set_power_off_cb(self, msg):\r
-            self.power_off = 1\r
-\r
-        def get_power_off_state(self, event, msg):\r
-            return self.power_off\r
-\r
-        def close_hr_sop2(self, event, msg): #msg 关闭心率血氧体温测试\r
-            get_hr_state = EventMesh.publish("get_hr_state")\r
-            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-            get_temp_state = EventMesh.publish("get_temp_state")\r
-            get_bg_state = EventMesh.publish("get_bg_state")\r
-            get_bp_state = EventMesh.publish("get_bp_state")\r
-            if get_hr_state != None and get_spo2_state != None and get_temp_state != None and get_bg_state != None and get_bp_state != None:\r
-                if get_hr_state != 0:\r
-                    EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                    EventMesh.debug_log("sstop hr")\r
-                    EventMesh.publish(constants.EVENT.STOP_HEART) \r
-                if get_spo2_state != 0 :\r
-                    EventMesh.debug_log("stop spo2")\r
-                    EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                    EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                if get_temp_state != 0:\r
-                    EventMesh.debug_log("stop temp")\r
-                    EventMesh.publish("set_temp_state",0)\r
-                    EventMesh.publish(constants.EVENT.STOP_TEMP)#手动体温测试\r
-                if  get_bg_state != 0:\r
-                    EventMesh.publish("set_bg_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                    EventMesh.debug_log("sstop bg")\r
-                    EventMesh.publish(constants.EVENT.STOP_HEART) \r
-\r
-                if  get_bp_state != 0:\r
-                    EventMesh.publish("set_bp_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                    EventMesh.debug_log("sstop bp")\r
-                    EventMesh.publish(constants.EVENT.STOP_HEART) \r
-\r
-        def set_manual_measure_mode(self, event, msg): #手动测试 1心率 2 血氧 3 体温\r
-            get_hr_state = EventMesh.publish("get_hr_state")\r
-            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-            get_temp_state = EventMesh.publish("get_temp_state")\r
-            if msg == 1:\r
-                if get_hr_state != 1:#不是手动测试直接打断\r
-                    EventMesh.debug_log("set_manual_measure_mode",msg)\r
-                    EventMesh.publish("set_spo2_state",0)\r
-                    EventMesh.publish("set_bg_state",0)\r
-                    EventMesh.publish("set_bp_state",0)\r
-                    \r
-                    EventMesh.publish("set_hr_state",1)\r
-                    EventMesh.publish("clear_manual_hr_flag")\r
-                    EventMesh.publish("set_start_measure_time",1)#设置开始测量的时间戳时间\r
-                    EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN) #停止测试血氧\r
-                    EventMesh.publish("set_hr_blood_led",1)\r
-                    EventMesh.publish(constants.EVENT.START_HEART) #手动心率测试\r
-            elif msg == 2:\r
-                if get_hr_state == 0:\r
-                    if get_spo2_state != 1:\r
-                        EventMesh.debug_log("set_manual_measure_mode",msg)\r
-                        EventMesh.publish("set_spo2_state",1)\r
-                        EventMesh.publish("set_start_measure_time",1)#设置开始测量的时间戳时间\r
-                        EventMesh.publish("set_hr_blood_led",1)\r
-                        EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN) #手动血氧测试\r
-            elif msg == 3:\r
-                if get_temp_state != 1:\r
-                    EventMesh.debug_log("set_manual_measure_mode",msg)\r
-                    EventMesh.publish("clear_manual_temp_flag")\r
-                    EventMesh.publish("set_temp_state",1)\r
-                    EventMesh.publish("set_start_temp_measure_time",1)#设置开始测量的时间戳时间\r
-                    EventMesh.publish("set_hr_blood_led",1)\r
-                    EventMesh.publish(constants.EVENT.START_TEMP)#手动体温测试\r
-            pass\r
-\r
-\r
-        def set_start_measure_time(self, event, msg): #手动测试 1心\r
-            self.hr_auto = msg\r
-            pass\r
-\r
-        def get_start_measure_time(self, event, msg): #手动测试 \r
-\r
-            return  self.hr_auto\r
-        \r
-        def set_start_temp_measure_time(self, event, msg): #\r
-            self.temp_auto = msg\r
-            pass\r
-\r
-        def get_start_temp_measure_time(self, event, msg): #\r
-            return self.temp_auto\r
-\r
-        def mearsure_cb(self, event, msg):\r
-            if msg == 1:\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            elif msg == 2:\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data) \r
-            elif msg == 3:\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data) \r
-            elif msg == 4:\r
-                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data) \r
-            \r
-            \r
-            \r
-        def play_temp_value(self, event, msg): #播放体温数值\r
-            video_state = EventMesh.publish("get_video_state")\r
-            flag = EventMesh.publish("get_call_state") \r
-            if msg != None:\r
-                if flag == 0 and self.fall_flag == 0 and video_state == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                    if msg > 0:\r
-                        # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                        # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                        self.temp_value = msg\r
-                        # self.timer.start(2*1000,1,self.play_temp_fun)\r
-                        self.play_temp_fun(0)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-                else:\r
-                    EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-\r
-        def play_temp_fun(self,argc): #播放体温数值\r
-            data = self.temp_value\r
-            if data > 42:\r
-                data = 42\r
-            data_tmp = str(data)\r
-            if data_tmp.find(".") != -1:\r
-                temp_shi = int(data_tmp.split('.')[0])//10\r
-                temp_ge = int(data_tmp.split('.')[0])%10\r
-                dot_ge = int(data_tmp.split('.')[1][:1])\r
-                if temp_ge > 0:#37.0\r
-                    if dot_ge > 0:#37.5\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),\\r
-                        audio_buf.index("R_READ_TIME_{}".format(dot_ge)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                    else:#37.0\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:#30.0 30.6\r
-                    if dot_ge > 0:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(dot_ge)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                        audio_buf.index("R_READ_STEP_3"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-            else:\r
-                temp_shi = int(data_tmp)//10\r
-                temp_ge = int(data_tmp)%10\r
-\r
-                if temp_ge > 0:#45\r
-                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                    audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(temp_ge)))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:\r
-                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_TEMP_TITLE"),audio_buf.index("R_READ_TIME_{}".format(temp_shi)),\\r
-                    audio_buf.index("R_READ_STEP_3"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            \r
-\r
-        def play_hr_value(self, event, msg): #播放心率数值\r
-            video_state = EventMesh.publish("get_video_state")\r
-            flag = EventMesh.publish("get_call_state") \r
-            if msg != None:\r
-                if flag == 0 and self.fall_flag == 0 and video_state == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                    if msg >= 50:\r
-                        # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                        # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        self.hr_value = msg\r
-                        EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                        # self.timer.start(2*1000,1,self.play_hr_fun)\r
-                        self.play_hr_fun(0)\r
-                    else:\r
-                        str_data ='mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-                else:\r
-                    EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-\r
-        def play_hr_fun(self,argc):#播放心率测试值\r
-            video_state = EventMesh.publish("get_video_state")\r
-            flag = EventMesh.publish("get_call_state") \r
-            \r
-            if flag == 0 and self.fall_flag == 0 and video_state == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                data = self.hr_value\r
-                if data > 220:\r
-                    data = 220\r
-                if data < 100:\r
-                    if data%10 == 0:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else: \r
-                    shi = (data%100)//10 #210\r
-                    ge = (data%100)%10\r
-                    #210 234\r
-                    if shi > 0:\r
-                        if ge == 0:#210 230 120\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\\r
-                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\\r
-                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_{}".format(shi)),audio_buf.index("R_READ_STEP_3"),\\r
-                            audio_buf.index("R_READ_TIME_{}".format(ge)))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        if ge == 0:#200 100 209 108\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\\r
-                            audio_buf.index("R_READ_STEP_2"))\r
-                            EventMesh.publish("play_audio_file",str_data)#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_HR_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//100)),\\r
-                            audio_buf.index("R_READ_STEP_2"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(ge)))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-        def play_battery_level_value(self, event, msg): #播放当前电量\r
-            flag = EventMesh.publish("get_call_state") \r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and self.fall_flag == 0 and video_state == 0 :#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                battery = EventMesh.publish("screen_get_battery")\r
-                print("cur level",battery)\r
-                level = 100\r
-                if battery == None:\r
-                    level = 100\r
-                else:\r
-                    level = battery[1]\r
-                \r
-                data = level\r
-                if data > 100:\r
-                    data = 100\r
-                if data == 100:\r
-                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_CUR_BATTERY_LEVEL"),audio_buf.index("R_READ_TIME_1"),\\r
-                    audio_buf.index("R_READ_STEP_2"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    return\r
-                if data > 10:\r
-                    if data%10 == 0:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_CUR_BATTERY_LEVEL"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_CUR_BATTERY_LEVEL"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:\r
-                    if data == 10:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_CUR_BATTERY_LEVEL"),audio_buf.index("R_READ_STEP_3"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else :\r
-                        str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_CUR_BATTERY_LEVEL"),audio_buf.index("R_READ_TIME_{}".format(data)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-\r
-\r
-        def play_sugar_value(self, event, msg): #播放血糖数值\r
-            video_state = EventMesh.publish("get_video_state")\r
-            flag = EventMesh.publish("get_call_state") \r
-            if msg != None:\r
-                if flag == 0 and self.fall_flag == 0 and video_state == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                    if msg != 0:\r
-                        # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                        # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                        # self.timer.start(2*1000,1,self.play_spo2_fun)\r
-                        self.play_sugar_fun(msg)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-                else:\r
-                    EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-\r
-        def play_sugar_fun(self,argc):#播放血糖测试值\r
-            flag = EventMesh.publish("get_call_state") \r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and self.fall_flag == 0 and video_state == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                data = str(argc)\r
-                data_shi = 0\r
-                data_ge = 0\r
-                if data.find(".") != -1:\r
-                    data_shi = int(data.split(".")[0])\r
-                    data_ge = int(data.split(".")[1])\r
-                else:\r
-                    data_shi = int(data)\r
-                    data_ge = 0\r
-\r
-                if data_shi != 0 and data_ge != 0:\r
-                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_BLOOD_SUGAR"),audio_buf.index("R_READ_TIME_{}".format(data_shi)),\\r
-                    audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(data_ge)))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-            else:\r
-                EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-\r
-\r
-\r
-        def play_spo2_value(self, event, msg): #播放血样数值\r
-            flag = EventMesh.publish("get_call_state") \r
-            video_state = EventMesh.publish("get_video_state")\r
-            if msg != None:\r
-                if flag == 0 and self.fall_flag == 0 and video_state == 0:\r
-                    EventMesh.publish("close_timer_all")#\r
-                    if msg >= 85:\r
-                        # str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_OK"))\r
-                        # EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                        self.spo2_value = msg\r
-                        # self.timer.start(2*1000,1,self.play_spo2_fun)\r
-                        self.play_spo2_fun(0)\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_HSENSOR_RESULT_FAILE"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-                else:\r
-                    EventMesh.publish("set_hr_blood_led",3)#测量异常\r
-\r
-        def play_spo2_fun(self,argc):#播放血氧测试值\r
-            flag = EventMesh.publish("get_call_state") \r
-            \r
-            if flag == 0 and self.fall_flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                data = self.spo2_value\r
-                if data > 100:\r
-                    data = 100\r
-                if data == 100:\r
-                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                    audio_buf.index("R_READ_STEP_2"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                else:\r
-                    if data % 10 == 0:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        pass\r
-                    else:\r
-                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_HSENSOR_SPO2_TITLE"),audio_buf.index("R_READ_TIME_{}".format(data//10)),\\r
-                        audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(data%10)))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-        def set_sim_mode(self, event, msg): #mode 1 蓝灯闪烁 可识别卡 但未联网 2 可绑定appsim正常 3 手表不识别卡或者未插卡\r
-            flag = EventMesh.publish("get_call_state") \r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and self.fall_flag == 0 and video_state == 0 :#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                # EventMesh.publish("stop_led_timer")#设置参数\r
-                mode = 0\r
-                signal = EventMesh.publish("get_sim_Status")\r
-                if signal != None:\r
-                    if signal == 1:#有卡 \r
-                        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机\r
-                            mode = 2\r
-                        else:\r
-                            mode = 1\r
-                    else:#未插卡\r
-                        mode = 3\r
-                if mode == 1:#白色灯\r
-                    EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_WHITE,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_WHITE,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    pass\r
-                elif mode == 2:#蓝灯色灯\r
-                    EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_GREEN,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_CONNECT"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    pass\r
-                elif mode == 3:#红灯闪烁\r
-                    EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SIM"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                pass\r
-            \r
-        def dial_sos_phone(self, event, msg): #拨打紧急求助电话\r
-            flag = EventMesh.publish("get_call_state")\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and video_state == 0:\r
-            \r
-                signal = EventMesh.publish("screen_get_sig")\r
-                if signal != None:\r
-                    if signal >= 0 and signal <= 31:#有卡 \r
-                        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机\r
-                            sos_number = EventMesh.publish("get_dial_sos_number")\r
-                            if sos_number != None:\r
-                                if len(sos_number) != 0:\r
-                                    EventMesh.publish("close_timer_all")#\r
-                                    EventMesh.publish("set_sos_flag",1)\r
-                                        \r
-                                else:#未设置sos紧急求助号码\r
-                                    EventMesh.publish("close_timer_all")#\r
-                                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    pass\r
-                        else:\r
-                            EventMesh.publish("close_timer_all")#\r
-                            EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_WHITE,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SIM_FAILE"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:#未插卡\r
-                        EventMesh.publish("close_timer_all")#\r
-                        EventMesh.publish("set_led_time_arg",[1,2,10,led_mode.FLASH_LIGHT_RED,10,5,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SIM"))\r
-                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-        \r
-        def play_cur_time_event(self, event, msg): #播放当前时间\r
-            flag = EventMesh.publish("get_call_state") \r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and self.fall_flag == 0 and video_state == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                \r
-                data = RTC().datetime()\r
-                hour = data[4]\r
-                min = data[5]\r
-                # EventMesh.debug_log("hour",hour,min)\r
-                self.old_hour = hour\r
-                self.old_min = min\r
-                if self.old_hour == 0:\r
-                    if self.old_min <= 9:#00:09\r
-                        if self.old_min == 0:#0点整\r
-                            str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:#0点09分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min))\\r
-                            ,audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-\r
-                    else:\r
-                        if self.old_min % 10 == 0:#0点2十分 0点3十分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-                        else:#0点2十8分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_0")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-\r
-                elif self.old_hour <= 9:#8:09 9:20 9:45\r
-                    if self.old_min <= 9:#9点09分\r
-                        if self.old_min <= 0:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            pass\r
-                        else:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min))\\r
-                            ,audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                    else:\r
-                        if self.old_min % 10 == 0:#9点2十分 9点4十分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        else:#9点2十4分\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(self.old_hour))\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min //10))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-                else:#12:0\r
-                    if self.old_min == 0:#12:00 13:00 15:00 20 10 11 12 13 14 15\r
-                        self.play_count+=1\r
-                        hour_shi = self.old_hour//10\r
-                        hour_ge = self.old_hour%10\r
-                        if self.old_hour == 10:#十点整\r
-                            str_data = 'mp3files={}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                        elif self.old_hour == 20:\r
-                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                        else:\r
-                            if hour_shi <= 1:#十3点整\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                ,audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                            else:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                    else:\r
-                        if self.old_hour == 10:#10:09 10:10\r
-                            if self.old_min <= 9:\r
-                                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\\r
-                                ,audio_buf.index("R_READ_TIME_{}".format(self.old_min)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                            else:\r
-                                if self.old_min % 10 == 0:#十点2十分\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                    ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\\r
-                                    ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                else:#十点2十1分\r
-                                    str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                    ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(self.old_min//10))\\r
-                                    ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(self.old_min%10))\\r
-                                    ,audio_buf.index("R_READ_TIME_MIN"))\r
-                                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                        else:\r
-                            if self.old_hour < 20:#19:00\r
-                                if self.old_min <= 9:#19:09 \r
-                                    if self.old_min == 0:\r
-                                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        pass\r
-                                    else:\r
-                                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\\r
-                                        ,audio_buf.index("R_READ_TIME_0"),audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10))\\r
-                                        ,audio_buf.index("R_READ_TIME_MIN"))\r
-                                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    \r
-                                else:#19:18 19:40 19:56\r
-                                    if self.old_min % 10 == 0:#十9点2十分 十9点3十分\r
-                                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    else:#十9点2十1分\r
-                                        str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_hour % 10)),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_min // 10)),audio_buf.index("R_READ_STEP_3")\\r
-                                        ,audio_buf.index("R_READ_TIME_{}".format(self.old_min % 10)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                        EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                            else:\r
-                                hour_shi = self.old_hour//10\r
-                                hour_ge = self.old_hour%10\r
-\r
-                                min_shi = self.old_min//10\r
-                                min_ge = self.old_min%10\r
-\r
-                                #20:08 20:18  20:20\r
-                                if hour_ge == 0:\r
-                                    if self.old_min <= 9:\r
-                                        if self.old_min == 0:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            pass\r
-                                        else:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\\r
-                                            ,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                                    else:\r
-                                        if min_ge == 0:#2十点2十分\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#2十点2十1分\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                                else:#21:08 21:18\r
-                                    if self.old_min <= 9:\r
-                                        if self.old_min == 0:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\\r
-                                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                            pass\r
-                                        else:\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\\r
-                                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_0")\\r
-                                            ,audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                    else:\r
-                                        if min_ge == 0:#2十3点3十分\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\\r
-                                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                                        else:#2十3点3十1分\r
-                                            str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(hour_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(hour_ge))\\r
-                                            ,audio_buf.index("R_TSENSOR_RESULT_VALUE_DOT"),audio_buf.index("R_READ_TIME_{}".format(min_shi))\\r
-                                            ,audio_buf.index("R_READ_STEP_3"),audio_buf.index("R_READ_TIME_{}".format(min_ge)),audio_buf.index("R_READ_TIME_MIN"))\r
-                                            EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-\r
-        def play_timer_cb_1(self,*agrs):\r
-            return\r
-\r
-        def play_center_phone(self, event, msg): #msg\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许设备再次拨出\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and self.fall_flag == 0 and video_state == 0:\r
-                EventMesh.publish("close_timer_all")#\r
-            \r
-                center_dial = EventMesh.publish("get_storage_config","center_dial")\r
-                if center_dial != None:\r
-                    if len(center_dial) > 0:\r
-                        str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_SOS_ALERT"))\r
-                        EventMesh.publish("play_audio_file",[str_data,0])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                        voiceCall.callStart(str(center_dial))\r
-                        \r
-                    \r
-                else:#未设置号码\r
-                    # EventMesh.debug_log("play_center_phone")\r
-                    str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_NO_SET_SOS_DIAL"))\r
-                    EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    pass\r
-        def center_phone_cb(self,*argc): #msg\r
-            pass\r
-\r
-\r
-\r
-\r
-        def play_imei_event(self, event, msg): #msg\r
-            flag = EventMesh.publish("get_call_state") \r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and self.fall_flag == 0 and video_state == 0:\r
-                EventMesh.publish("close_timer_all")#\r
-                imei = EventMesh.publish(constants.EVENT.GET_IMEI)\r
-                EventMesh.debug_log(imei)\r
-                str_data = 'mp3files={}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(imei[0]))\\r
-                ,audio_buf.index("R_READ_TIME_{}".format(imei[1])),audio_buf.index("R_READ_TIME_{}".format(imei[2])),audio_buf.index("R_READ_TIME_{}".format(imei[3])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[4])),audio_buf.index("R_READ_TIME_{}".format(imei[5])),audio_buf.index("R_READ_TIME_{}".format(imei[6])),audio_buf.index("R_READ_TIME_{}".format(imei[7])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[8])),audio_buf.index("R_READ_TIME_{}".format(imei[9])),audio_buf.index("R_READ_TIME_{}".format(imei[10])),audio_buf.index("R_READ_TIME_{}".format(imei[11])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[12])),audio_buf.index("R_READ_TIME_{}".format(imei[13])),audio_buf.index("R_READ_TIME_{}".format(imei[14])))\r
-                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-\r
-                str_data = 'mp3files=R_READ_TIME_1.mp3+R_READ_TIME_2.mp3+R_READ_TIME_3.mp3+R_READ_TIME_4.mp3+R_READ_TIME_5.mp3+R_READ_TIME_6.mp3+R_READ_TIME_7.mp3+R_READ_TIME_8.mp3+R_READ_TIME_9.mp3+R_READ_TIME_0.mp3+R_READ_TIME_1.mp3+R_READ_TIME_1.mp3+R_READ_TIME_2.mp3+R_READ_TIME_3.mp3+R_READ_TIME_4.mp3'\r
-                \r
-        def get_unread_wechat_state(self,event, msg): \r
-\r
-            return self.set_unread_wechat\r
-        \r
-        def set_unread_wechat_state(self, event, msg): \r
-            self.set_unread_wechat = msg\r
-\r
-        def get_wechat_data(self,event, msg): \r
-\r
-            return [self.MXA_MSG ,self.wechat_recode_list]\r
-        \r
-        def set_wechat_data(self, event, msg): \r
-            # EventMesh.debug_log("set_wechat_data1 ",msg,self.wechat_num)\r
-            self.MXA_MSG = msg[0]\r
-            self.wechat_recode_list = msg[1]\r
-            self.wechat_num = self.wechat_recode_list["num"]\r
-            with open("/usr/static/storage_file/wechat_record.json","w",encoding="utf-8") as fd:\r
-                ujson.dump(self.wechat_recode_list,fd)\r
-                #写编号\r
-            # EventMesh.debug_log("set_wechat_data2:{} ".format(self.wechat_num))\r
-        \r
-\r
-        def get_wechat_time(self, event, msg):\r
-            return  [self.press_btn,self.timeSecond]\r
-\r
-        def start_wechat_record(self, event, msg): #开始录音相关配置\r
-            if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音\r
-                flag = EventMesh.publish("get_call_state") \r
-                video_state = EventMesh.publish("get_video_state")\r
-                if flag == 0 and self.fall_flag == 0 and video_state == 0:\r
-                    if self.press_btn == 0:\r
-                        self.press_btn = 1\r
-                        audio_state = EventMesh.publish("get_audio_state")\r
-                        if audio_state == 1:\r
-                            self.aud.stop()\r
-                        EventMesh.publish("close_timer_all")#\r
-                        EventMesh.publish("set_led_time_arg",[1,1,160,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.WECHAT_LED_MODE])#測量成功\r
-                        # EventMesh.publish("set_led_time_arg",[1000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE,led_mode.WECHAT_LED_MODE])#測量成功\r
-                    \r
-                        date_tmp = utime.localtime()\r
-                        time_tmp = utime.mktime(date_tmp)\r
-                        self.timeSecond = time_tmp#保存按下的时间长s\r
-                        self.aud.setVolume(11)#设置音量最大\r
-                        \r
-                        EventMesh.debug_log("talking1.0")\r
-                        # if self.wechat_num >= self.MXA_MSG:\r
-                        #     self.wechat_num = 0 \r
-                        # self.wechat_num += 1\r
-                        # self.wechat_show = self.wechat_num\r
-                        # self.record_test.start("/usr/static/storage_file/{}.amr".format(self.wechat_show),16) \r
-                        self.record_test.start("/usr/static/storage_file/wechat.amr",16) \r
-                \r
-            else:\r
-                self.timeSecond = 0\r
-                self.press_btn = 0\r
-        def get_wechat_state(self, event, msg):\r
-            return self.press_btn\r
-\r
-        def send_wechat_record(self, event, msg): #发送录音文件\r
-            if self.press_btn == 1:\r
-                self.press_btn = 0\r
-                self.record_test.stop() #停止錄音\r
-                EventMesh.publish("stop_led_timer")#关闭灯\r
-                EventMesh.publish("set_led_time_arg",[1,1,0,led_mode.FLASH_LIGHT_GREEN,4,2,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                # EventMesh.publish("set_led_time_arg",[0,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.OPEN_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                self.countdown_old = 0\r
-\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-\r
-                self.countdown_old = msg\r
-                if self.countdown_old >= 15:\r
-                    self.countdown_old = 15\r
-                if self.countdown_old <= 0:\r
-                    #录音时间太短\r
-                    return\r
-                else:\r
-                    # self.wechat_recode_list["%02d"%(self.wechat_show)] = "read:0"\r
-                    # self.wechat_recode_list["num"] = self.wechat_show\r
-                    EventMesh.debug_log("self.wechat_recode_list :{}".format(self.wechat_recode_list))\r
-\r
-                    # with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                    #     ujson.dump(self.wechat_recode_list,fd)\r
-                    EventMesh.debug_log("send wechat data!!!!!!!!!!!!!!!!!!!!!")\r
-\r
-                    check_txt = ql_fs.path_exists("/usr/static/storage_file/wechat.amr")\r
-                    if check_txt == True :\r
-                        path = "/usr/static/storage_file/wechat.amr"\r
-                        with open(path,"rb") as fd:\r
-                            buf = bytearray(ql_fs.path_getsize(path))\r
-                            fd.readinto(buf)\r
-                            senddata = [self.countdown_old,buf]\r
-                            EventMesh.publish(constants.PROTOCOL.TKS_SEND,senddata)\r
-\r
-                    # with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                    #     ujson.dump(self.wechat_recode_list,fd)\r
-                    # EventMesh.debug_log("send wechat data!!!!!!!!!!!!!!!!!!!!!")\r
-\r
-                    # check_txt = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(self.wechat_show))\r
-                    # if check_txt == True :\r
-                    #     path = "/usr/static/storage_file/{}.amr".format(self.wechat_show)\r
-                    #     with open(path,"rb") as fd:\r
-                    #         buf = bytearray(ql_fs.path_getsize(path))\r
-                    #         fd.readinto(buf)\r
-                    #         senddata = [self.countdown_old,buf]\r
-                    #         EventMesh.publish(constants.PROTOCOL.TKS_SEND,senddata)\r
-            else:\r
-                self.press_btn = 0\r
-\r
-        def play_wechat_last_amr(self, event, msg):#播放微聊最后一条语音文件\r
-            flag = EventMesh.publish("get_call_state") \r
-            if flag == 0:#电话通话中 或者呼叫中挂断中断\r
-                EventMesh.publish("close_timer_all")#\r
-                if self.wechat_recode_list != None:\r
-                    num = 0\r
-                    play_state = 0\r
-                    if len(self.wechat_recode_list) > 1:\r
-                        num = int(self.wechat_recode_list["num"])\r
-                        #EventMesh.debug_log("self.wechat_recode_list1:{}".format(self.wechat_recode_list))\r
-                        if num != 0:\r
-                            last_num = str("%02d"%(num))\r
-                            last_tmp = self.wechat_recode_list[last_num]\r
-                            last_read = int(last_tmp.split(":")[1])\r
-                            if last_read == 1:#如果最后一条没有读则读最新的一条\r
-                                self.wechat_recode_list[last_num] = "read:0"\r
-                                self.wechat_recode_list["num"] = num \r
-                                with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                                    ujson.dump(self.wechat_recode_list,fd)\r
-                            else:\r
-                                sotr_new = {}\r
-                                sotr_new = sorted(self.wechat_recode_list.keys(), reverse=True)#降序排序\r
-                                # EventMesh.debug_log("sotr_new:{}".format(sotr_new))\r
-                                for i in range(len(self.wechat_recode_list)-1):#1 01 02 \r
-                                    key = sotr_new[i+1]\r
-                                    num_id = int(key)\r
-                                    #EventMesh.debug_log("key:{} num_id:{}".format(key,num_id))\r
-                                    if key in self.wechat_recode_list:#\r
-                                        str_tmp = self.wechat_recode_list[key]\r
-                                        read = int(str_tmp.split(":")[1])\r
-                                        if read != 0:#未读是按一下播放下一条同时删除\r
-                                            check_amr = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(num_id))#还要检测这个文件是否存在\r
-                                            if check_amr == True:\r
-                                                self.wechat_recode_list[key] = "read:0"\r
-                                                self.wechat_recode_list["num"] = num \r
-                                                EventMesh.debug_log("self.wechat_recode_list2:{} num_id:{} num:{}".format(self.wechat_recode_list,num_id,num))\r
-                                                # self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(num))  #文件名前面要加上路径\r
-                                                play_state = 1\r
-                                                with open("/usr/static/storage_file/wechat_record.json","w+",encoding="utf-8") as fd:\r
-                                                    ujson.dump(self.wechat_recode_list,fd)\r
-                                                break\r
-                                            else:\r
-                                                continue\r
-                                        else:\r
-                                            continue\r
-                                    else:\r
-                                        continue\r
-                            #EventMesh.debug_log("play_state:{}".format(play_state))\r
-                            # if play_state == 0:#\r
-                            check_amr = ql_fs.path_exists("/usr/static/storage_file/{}.amr".format(num))#还要检测这个文件是否存在\r
-                            if check_amr == True:\r
-                                self.aud.play(1, 1, '/usr/static/storage_file/{}.amr'.format(num))  #文件名前面要加上路径\r
-\r
-        def play_unread_wechat_infor(self,event,msg):#未读微聊语音\r
-            flag = EventMesh.publish("get_call_state") \r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag == 0 and self.press_btn == 0 and self.fall_flag == 0 and video_state == 0:#电话通话中 或者呼叫中挂断中断\r
-            \r
-                if self.wechat_recode_list != None:\r
-                    num = 0\r
-                    play_state = 0\r
-                    if len(self.wechat_recode_list) > 1:\r
-                        num = int(self.wechat_recode_list["num"])\r
-                        if num != 0:\r
-                            for i in range(len(self.wechat_recode_list)-1):#1 01 02 \r
-                                key = "%02d"%(i+1)\r
-                                if key in self.wechat_recode_list:#\r
-                                    str_tmp = self.wechat_recode_list[key]\r
-                                    read = int(str_tmp.split(":")[1])\r
-                                    if read == 1:#未读是按一下播放下一条同时删除\r
-                                        play_state = 1\r
-                                    else:\r
-                                        continue\r
-                                else:\r
-                                    continue\r
-                            if play_state == 1:#设置未读语音状态\r
-                                EventMesh.publish("set_unread_wechat_state",1)\r
-                            else:\r
-                                EventMesh.publish("set_unread_wechat_state",0)\r
-                                self.updateTime = 0\r
-\r
-                state = EventMesh.publish("get_unread_wechat_state")#\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-                if state != None:\r
-                    if state == 1:\r
-                        EventMesh.publish("set_led_time_arg",[1,2,8,led_mode.FLASH_LIGHT_GREEN,8,4,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                        # EventMesh.publish("set_led_time_arg",[1000,400,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                        if self.updateTime == 0:\r
-                            self.updateTime = time_tmp\r
-                        if self.updateTime != 0:\r
-                            if time_tmp - self.updateTime >= 10*60:\r
-                                self.updateTime = time_tmp\r
-                                #播放音频文件\r
-                                EventMesh.publish("close_timer_all")\r
-                                str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_UNREAD_WECHAT"))\r
-                                EventMesh.publish("play_audio_file",[str_data,1])#获取播放音频文件('U:/static/audio.bin',1,1,str_data)\r
-                    else:\r
-                        self.updateTime = 0\r
-            \r
-\r
-\r
-\r
-    class BtnDevice(Abstract):\r
-\r
-        def __init__(self, tp=None):\r
-            self.pk = PowerKey()\r
-            self.__pwk_timer = osTimer()\r
-            self.aud = audio.Audio(0)\r
-            self.aud.set_pa(Pin.GPIO29)\r
-            self.aud.setVolume(11)\r
-            # self.keypad = machine.KeyPad(4, 4)\r
-            self.__PowerDownTimeOut = 3000\r
-            self.__tp = tp\r
-            self.pwk_press = 0\r
-            self.pwk_count = 0\r
-\r
-            self.powerKey_status = 0\r
-            self.sosKey = 0\r
-            self.wechatKey = 0\r
-            self.sosKey_status = 1#默认是低电平\r
-            self.WeChatKey_status = 1#默认是低电平\r
-\r
-            self.wechatKey_timer = osTimer()\r
-            self.wechatKey_count = 0\r
-            self.wechatKey_press = 0 \r
-\r
-            self.sosKey_timer = osTimer()\r
-            self.sosKey_count = 0\r
-            self.sosKey_press = 0 \r
-            self.sosKey_long_press = 0\r
-\r
-            self.wechatKey_press_count = 0\r
-\r
-            self.timeSeconOld = 0\r
-            self.wechat_state = 0 #按下录音时的状态\r
-\r
-            \r
-            self.sosKey_press_count = 0\r
-\r
-\r
-           \r
-\r
-            self.extint_22 = 0\r
-            self.GPIO22_status = 1\r
-\r
-            self.extint_17 = 0\r
-            self.KeyCall2_status = 1\r
-\r
-            self.extint_7 = 1\r
-            self.extint_8 = 1\r
-\r
-            self.extint_19= 0\r
-            self.KeyCall1_status = 1\r
-\r
-            self.Keycall1_timer = osTimer()\r
-            self.Keycall1_count = 0\r
-            self.Keycall1_press = 0 \r
-            self.Keycall1_press_count = 0\r
-            self.Keycall1_long_press = 0\r
-\r
-            self.Keycall2_timer = osTimer()\r
-            self.Keycall2_count = 0\r
-            self.Keycall2_press = 0 \r
-            self.Keycall2_press_count = 0\r
-            self.Keycall2_long_press = 0\r
-\r
-            \r
-\r
-            self.pwkey_timer = osTimer()\r
-            self.pwk_key = 0\r
-            self.GPIO26_status = 1\r
-            self.pwKey_press_count = 0\r
-            self.pwkey_count = 0\r
-            self.pwkey_press = 0\r
-            self.led_state = 0\r
-            self.hsensorTest_timer = osTimer()\r
-            self.factoryTest_timer = osTimer()\r
-            self.factoryTest_count = 0\r
-            self.factoryTest_led_count = 0\r
-            self.factoryTest_flag = 0\r
-            self.factory_timesec = 0\r
-            self.btnInfo_queue = Queue()\r
-            _thread.stack_size(10*1024+192)\r
-            _thread.start_new_thread(self.btnInfo_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            \r
-            EventMesh.subscribe("publish_message_event_btnInfo",self.publish_message_event_btnInfo)\r
-\r
-            EventMesh.subscribe("close_wechat_btn_timer", self.close_wechat_btn_timer)#来电强制关闭微聊语音\r
-\r
-        def btnInfo_queue_thread(self):\r
-            while True:\r
-                data = self.btnInfo_queue.get()\r
-                #EventMesh.debug_log("Info_queue:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        #EventMesh.debug_log("btnInfo_queue:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-        def publish_message_event_btnInfo(self,event,msg):\r
-            self.btnInfo_queue.put(msg)\r
-            EventMesh.publish(constants.EVENT.SYSTEM_UP)#唤醒休眠\r
-            \r
-        def publish_wechat_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.wechatKey_press_cb,"data":0})  \r
-\r
-        def publish_soskey_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.sosKey_press_cb,"data":0})  \r
-\r
-        def publish_call1key_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.call1Key_press_cb,"data":0})  \r
-        \r
-        def publish_call2key_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.call2Key_press_cb,"data":0})  \r
-\r
-        def publish_pwkKey_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.pwKey_press_cb,"data":0})  \r
-\r
-    \r
-\r
-        def post_processor_after_instantiation(self):\r
-            # self.keypad.init()\r
-            # self.keypad.set_callback(self.key_callback)\r
-        \r
-            self.pk.powerKeyEventRegister(self.powerKey_callback)\r
-            \r
-            self.pwk_key26 = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, self.pwk_extint_cb)\r
-            self.pwk_key26.enable() \r
-\r
-            self.sosKey = ExtInt(ExtInt.GPIO6,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.sosKey_extint_cb)#S0S键\r
-            self.sosKey.enable()\r
-\r
-            self.extint_19 = ExtInt(ExtInt.GPIO19,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.key19_extint_cb)\r
-            self.extint_19.enable()\r
-\r
-            self.extint_17 = ExtInt(ExtInt.GPIO7,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.key17_extint_cb)\r
-            self.extint_17.enable()\r
-\r
-            self.wechatKey = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.wechatKey_extint_cb)\r
-            self.wechatKey.enable()\r
-\r
-        def key17_extint_cb(self,args):#call 1\r
-            print("call 1!!!!!!!")\r
-            # EventMesh.debug_log('key17_extint_cb :{}'.format(args))\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")#获取视频通话状态 5在通话状态不允许按键输入\r
-            get_video_state = EventMesh.publish("get_video_in_out_state")\r
-            dev_app_mode = EventMesh.publish("get_dev_app_mode")\r
-            if open_power != None and open_power_off != None and dev_app_mode != None:\r
-                if open_power == 0 or open_power_off == 1 or  (dev_app_mode == 1 and get_video_state != 0):\r
-                    return\r
-            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            if fall_down != None:\r
-                if fall_down != 0:\r
-                    return\r
-            \r
-            self.KeyCall1_status = int(args[1]) \r
-            # EventMesh.debug_log('key17_extint_cb :{}'.format(args))\r
-            if self.KeyCall1_status == 0:\r
-                self.KeyCall1_status = 1\r
-            else:\r
-                self.KeyCall1_status = 0\r
-                pass\r
-            if NEW_ENABLE == 0:#新的按键功能定义\r
-                if self.KeyCall1_status == 0:\r
-                    video_state = EventMesh.publish("get_video_state")\r
-                    if video_state != 0:#视频通话打入或者接听后允许挂断视频通话\r
-                        if video_state != 6:#6是app打手表需要接通\r
-                            # EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话\r
-                            return\r
-            self.WeChatKey_status = self.wechatKey.read_level()\r
-            self.GPIO26_status = self.pwk_key26.read_level()\r
-            self.KeyCall2_status = self.extint_19.read_level()\r
-            self.sosKey_status = self.sosKey.read_level()\r
-            # EventMesh.debug_log('key17_extint_cb',args,self.KeyCall2_status,self.WeChatKey_status,self.GPIO26_status,self.KeyCall1_status,self.sosKey_status) # args[0]:gpio号 args[1]:上升沿或下降沿\r
-            if self.WeChatKey_status != 0 and self.GPIO26_status != 0 and self.KeyCall2_status != 0 and self.sosKey_status != 0:\r
-                if self.KeyCall1_status == 0:#按下\r
-                    if NEW_ENABLE == 0:#新的按键功能定义\r
-                        video_state = EventMesh.publish("get_video_state")\r
-                        if video_state != 0:#视频通话打入或者接听后允许挂断视频通话\r
-                                if video_state == 6:#6 是app拨打手表 1 是手表打app 3 是正在视频通话中 0 关闭只有第一次视频通话打入才允许接听 接通之后不允许接听了\r
-                                    EventMesh.publish("video_answer_cb")\r
-                                else:\r
-                                    pass\r
-                                    # EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话\r
-                                    # self.Keycall1_press_count=0\r
-                                    # self.wechatKey_timer.stop()\r
-                                    # self.pwkey_timer.stop()\r
-                                    # self.sosKey_timer.stop()\r
-                                    # self.Keycall2_timer.stop()\r
-                                    # self.Keycall1_timer.stop()\r
-                            \r
-                                return\r
-                    EventMesh.publish("close_wechat_btn_timer")\r
-                    if self.Keycall1_press == 0 :\r
-                        self.wechatKey_timer.stop()\r
-                        self.pwkey_timer.stop()\r
-                        self.sosKey_timer.stop()\r
-                        self.Keycall2_timer.stop()\r
-                        self.Keycall1_timer.stop()\r
-\r
-                        self.pwkey_count = 0\r
-                        self.pwkey_press = 0\r
-                        self.led_state = 0\r
-                        self.pwKey_press_count=0 #电源键\r
-\r
-                        self.sosKey_count = 0\r
-                        self.sosKey_press = 0\r
-                        self.sosKey_press_count=0#sos键\r
-                        self.sosKey_long_press = 0\r
-\r
-                        self.wechatKey_count = 0\r
-                        self.wechatKey_press = 0\r
-                        self.wechatKey_press_count=0#微聊键\r
-                        self.wechat_state = 0\r
-\r
-                        self.Keycall2_count = 0\r
-                        self.Keycall2_press = 0\r
-                        self.Keycall2_press_count = 0#call 2键\r
-                        self.Keycall2_long_press = 0\r
-\r
-                        self.Keycall1_count = 0\r
-                        self.Keycall1_press = 1\r
-                        self.Keycall1_long_press = 0\r
-                        EventMesh.publish("AI_key_press")\r
-                        self.Keycall1_timer.start(100, 1, self.publish_call1key_btn_event_cb)\r
-\r
-        def call1Key_press_cb(self, data):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.Keycall1_timer.stop()\r
-                    self.Keycall1_count = 0\r
-                    self.Keycall1_press = 0\r
-                    self.Keycall1_press_count+=1\r
-                    self.Keycall1_long_press = 0\r
-                    return\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            self.KeyCall1_status = self.extint_17.read_level()\r
-            if self.Keycall1_press == 1 :\r
-                self.Keycall1_count += 1\r
-                if self.Keycall1_count >= 10*3: #长按3s \r
-                    flag = EventMesh.publish("get_call_state")#获取通话状态\r
-                    fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                    if fall_down != None:\r
-                        if fall_down != 0 or flag == 2:\r
-                            self.Keycall1_count = 0\r
-                            self.Keycall1_press = 0\r
-                            self.Keycall1_press_count = 0\r
-                            self.Keycall1_long_press = 0\r
-                            self.Keycall1_timer.stop()\r
-                            return\r
-                    if self.Keycall1_long_press == 0:\r
-                        self.Keycall1_long_press = 1\r
-                        \r
-                        flag = EventMesh.publish("get_call_state")#获取通话状态\r
-                        fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                        if fall_down != None:\r
-                            if fall_down != 0 or flag == 2:\r
-                                return\r
-                       \r
-                        return\r
-\r
-                    if self.KeyCall1_status == 1:\r
-                        self.Keycall1_count = 0\r
-                        self.Keycall1_press = 0\r
-                        self.Keycall1_press_count = 0\r
-                        self.Keycall1_long_press = 0\r
-                        self.Keycall1_timer.stop()\r
-                        return\r
-                    \r
-\r
-                if self.KeyCall1_status == 1:#松开\r
-                    if self.Keycall1_count >= 1: #防抖100ms\r
-                        \r
-                        self.Keycall1_timer.stop()\r
-                        self.Keycall1_count = 0\r
-                        self.Keycall1_press = 0\r
-                        self.Keycall1_press_count+=1\r
-                        self.Keycall1_timer.start(500, 0, self.publish_call1Key_timeout_cb_do)#松手超时1s判断\r
-                    \r
-\r
-        def publish_call1Key_timeout_cb_do(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.call1Key_timeout_cb,"data":0}) \r
-        \r
-        def call1Key_timeout_cb(self, data):#\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1 :\r
-                    self.Keycall1_timer.stop()\r
-                    self.Keycall1_count = 0\r
-                    self.Keycall1_press = 0\r
-                    self.Keycall1_press_count=0\r
-                    self.Keycall1_long_press = 0\r
-                    return\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-            print("call2Key_timeout_cb",self.Keycall2_press_count,flag)\r
-            if self.Keycall1_press_count > 1:#\r
-                if fall_down != None:\r
-                    if fall_down != 0 or flag != 0 or video_state != 0:#在打电话或者跌倒报警提醒中不允许按键触发\r
-                        self.Keycall1_press_count = 0\r
-                        return\r
-            if self.Keycall1_press_count == 3:#心率血压测试\r
-                self.Keycall1_press_count = 0\r
-                call_state = EventMesh.publish("get_call_state")\r
-                battery = EventMesh.publish("screen_get_battery")\r
-                if call_state == None:\r
-                    call_state = 0\r
-                if call_state == 0: \r
-                    if battery != None:\r
-                        if battery[0] != "1":#在充电得时候\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            EventMesh.publish("set_manual_measure_mode",1)#\r
-            elif self.Keycall1_press_count == 1:#\r
-                self.Keycall1_press_count = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                # print("video_state call",video_state)\r
-                # if video_state != 0:\r
-                #     if video_state == 6:#6 是app拨打手表 1 是手表打app 3 是正在视频通话中 0 关闭只有第一次视频通话打入才允许接听 接通之后不允许接听了\r
-                #         EventMesh.publish("video_answer_cb")\r
-                #     return\r
-                call_state = EventMesh.publish("get_call_state") \r
-                if call_state == 2:#电话拨进需要接听\r
-                    EventMesh.publish("answer_call_event")#接听电话\r
-                    return\r
-                EventMesh.publish("play_cur_step_event")##播放当前步数\r
-            \r
-\r
-            self.Keycall1_press_count = 0\r
-\r
-\r
-        def key19_extint_cb(self,args):#call 2\r
-            #print("key19_extint_cb call 2")\r
-            # EventMesh.txt_log('key19_extint_cb :{}'.format(args))\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            dev_app_mode = EventMesh.publish("get_dev_app_mode")\r
-            video_state = EventMesh.publish("get_video_state")#获取视频通话状态 5在通话状态不允许按键输入\r
-            get_video_state = EventMesh.publish("get_video_in_out_state")\r
-            if open_power != None and power_off != None and dev_app_mode != None:\r
-                if open_power == 0 or power_off == 1 or (dev_app_mode == 1 and get_video_state != 0): \r
-                    return\r
-                \r
-            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-            flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-            if fall_down != None:\r
-                if fall_down != 0:\r
-                    return\r
-            self.KeyCall2_status = int(args[1])\r
-            if self.KeyCall2_status == 0:\r
-                self.KeyCall2_status = 1\r
-            else:\r
-                self.KeyCall2_status = 0\r
-                pass\r
-            \r
-            if NEW_ENABLE == 0:#新的按键功能定义\r
-                if self.KeyCall2_status == 0:\r
-                    video_state = EventMesh.publish("get_video_state")\r
-                    if video_state != 0:#视频通话打入或者接听后允许挂断视频通话\r
-                        if video_state != 6:#6是app打手表需要接通\r
-                            # EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话\r
-                            return\r
-            self.WeChatKey_status = self.wechatKey.read_level()\r
-            self.GPIO26_status = self.pwk_key26.read_level()\r
-            self.KeyCall1_status = self.extint_17.read_level()\r
-            self.sosKey_status = self.sosKey.read_level()\r
-            # EventMesh.debug_log('self.KeyCall1_status :{}',args,self.KeyCall1_status) # args[0]:gpio号 args[1]:上升沿或下降沿\r
-            if self.WeChatKey_status != 0 and self.GPIO26_status != 0 and self.KeyCall1_status != 0 and self.sosKey_status != 0:\r
-                if self.KeyCall2_status == 0:#按下\r
-                    EventMesh.publish("close_wechat_btn_timer")\r
-                    if self.Keycall2_press == 0 :\r
-                        self.wechatKey_timer.stop()\r
-                        self.pwkey_timer.stop()\r
-                        self.sosKey_timer.stop()\r
-                        self.Keycall2_timer.stop()\r
-                        self.Keycall1_timer.stop()\r
-\r
-                        self.pwkey_count = 0\r
-                        self.pwkey_press = 0\r
-                        self.led_state = 0\r
-                        self.pwKey_press_count=0\r
-\r
-                        self.sosKey_count = 0\r
-                        self.sosKey_press = 0\r
-                        self.sosKey_long_press = 0\r
-                        self.sosKey_press_count=0\r
-\r
-                        self.wechatKey_count = 0\r
-                        self.wechatKey_press = 0\r
-                        self.wechatKey_press_count=0\r
-                        self.wechat_state = 0\r
-            \r
-                        self.Keycall1_count = 0\r
-                        self.Keycall1_press = 0 \r
-                        self.Keycall1_press_count = 0\r
-                        self.Keycall1_long_press = 0\r
-\r
-                        self.Keycall2_count = 0\r
-                        self.Keycall2_press = 1\r
-                        self.Keycall2_long_press = 0\r
-                        EventMesh.publish("AI_key_press")\r
-                        print("key19_extint_cb AI_key_press")\r
-                        self.Keycall2_timer.start(100, 1, self.publish_call2key_btn_event_cb)\r
-\r
-        def call2Key_press_cb(self, data):\r
-\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.Keycall2_timer.stop()\r
-                    self.Keycall2_count = 0\r
-                    self.Keycall2_press = 0\r
-                    self.Keycall2_press_count =0\r
-                    self.Keycall2_long_press = 0\r
-                    return\r
-            self.KeyCall2_status = self.extint_19.read_level()\r
-            if self.Keycall2_press == 1 :\r
-                self.Keycall2_count += 1\r
-                if self.Keycall2_count >= 10*3: #长按3s \r
-                    flag = EventMesh.publish("get_call_state")#获取通话状态\r
-                    fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                    if fall_down != None and video_state != None:\r
-                        if fall_down != 0 or flag != 0 or video_state != 0:\r
-                            self.Keycall2_count = 0\r
-                            self.Keycall2_press = 0\r
-                            self.Keycall2_press_count = 0\r
-                            self.Keycall2_long_press = 0\r
-                            self.Keycall2_timer.stop()\r
-                            return\r
-                    if self.Keycall2_long_press == 0:\r
-                        self.Keycall2_long_press = 1\r
-                        EventMesh.publish("AI_key_long_press")\r
-                        # EventMesh.publish("stop_led_timer")#设置参数\r
-                        # EventMesh.publish("call_phonebook_num",2)\r
-                        return\r
-                    if self.KeyCall2_status == 1:#松开\r
-                        self.Keycall2_count = 0\r
-                        self.Keycall2_press = 0\r
-                        self.Keycall2_press_count = 0\r
-                        self.Keycall2_long_press = 0\r
-                        self.Keycall2_timer.stop()\r
-                        EventMesh.publish("AI_key_release")\r
-                        return\r
-                    \r
-\r
-                if self.KeyCall2_status == 1:#松开\r
-                    if self.Keycall2_count >= 1: #防抖100ms\r
-                        EventMesh.publish("AI_key_release")\r
-                        self.Keycall2_timer.stop()\r
-                        self.Keycall2_count = 0\r
-                        self.Keycall2_press = 0\r
-                        self.Keycall2_press_count+=1\r
-                        #self.Keycall2_timer.start(500, 0, self.publish_call2Key_timeout_cb_do)#松手超时1s判断\r
-\r
-        def publish_call2Key_timeout_cb_do(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.call2Key_timeout_cb,"data":0}) \r
-        \r
-        def call2Key_timeout_cb(self, data):#\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1 :\r
-                    self.Keycall2_timer.stop()\r
-                    self.Keycall2_count = 0\r
-                    self.Keycall2_press = 0\r
-                    self.Keycall2_press_count=0\r
-                    return\r
-            flag = EventMesh.publish("get_call_state")#获取通话状态 \r
-            fall_down = EventMesh.publish("get_fall_down_state")#获取跌倒报警标识\r
-            # print("call1Key_timeout_cb",self.Keycall1_press_count,flag)\r
-            if self.Keycall2_press_count > 1:#\r
-                if fall_down != None:\r
-                    if fall_down != 0 or flag != 0 or video_state != 0:#在打电话或者跌倒报警提醒中不允许按键触发\r
-                        self.Keycall2_press_count = 0\r
-                        return\r
-            \r
-            if self.Keycall2_press_count == 3:#测试体温\r
-                self.Keycall2_press_count = 0\r
-                call_state = EventMesh.publish("get_call_state")\r
-                battery = EventMesh.publish("screen_get_battery")\r
-                if call_state == None:\r
-                    call_state = 0\r
-                if call_state == 0: \r
-                    if battery != None:\r
-                        if battery[0] != "1":#在充电得时候\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            EventMesh.publish("set_manual_measure_mode",3)#测量体温\r
-            elif self.Keycall2_press_count == 1:#\r
-                self.Keycall2_press_count = 0\r
-                video_state = EventMesh.publish("get_video_state") \r
-                # print("video_state ",video_state)\r
-                if video_state != 0:\r
-                    if video_state == 6:#6 是app拨打手表 1 是手表打app 3 是正在视频通话中 0 关闭只有第一次视频通话打入才允许接听 接通之后不允许接听了\r
-                        EventMesh.publish("video_answer_cb")\r
-                    return\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                call_state = EventMesh.publish("get_call_state") \r
-                \r
-                \r
-                if call_state == 2:#电话拨进需要接听\r
-                    EventMesh.publish("answer_call_event")#接听电话\r
-                    return\r
-                EventMesh.publish("play_battery_level_value")#播放当前电量\r
-                \r
-            self.Keycall2_press_count = 0\r
-\r
-\r
-\r
-        def pwk_extint_cb(self,args):#侧边按键\r
-            # EventMesh.txt_log('pwk_extint_cb :{}'.format(args))\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            get_video_state = EventMesh.publish("get_video_in_out_state")\r
-            dev_app_mode = EventMesh.publish("get_dev_app_mode")\r
-            if open_power != None and open_power_off != None and dev_app_mode != None:\r
-                if open_power == 0 or open_power_off == 1 or  (dev_app_mode == 1 and get_video_state != 0):\r
-                    return\r
-            \r
-            flag = EventMesh.publish("get_call_state")#获取通话状态\r
-            fall_down = EventMesh.publish("get_fall_down_state")#获取跌倒报警标识\r
-            if fall_down != None:\r
-                if fall_down != 0 or flag == 2:\r
-                    return\r
-            self.GPIO26_status = int(args[1])\r
-            if self.GPIO26_status == 0:\r
-                self.GPIO26_status = 1\r
-            else:\r
-                self.GPIO26_status = 0\r
-                pass\r
-            if NEW_ENABLE == 0:#新的按键功能定义\r
-                if self.GPIO26_status == 0:\r
-                    video_state = EventMesh.publish("get_video_state")\r
-                    if video_state != 0:#视频通话打入或者接听后允许挂断视频通话\r
-                        if video_state == 6:#6是app打手表需要接通\r
-                            print("pwk_extint_cb")\r
-                            # EventMesh.publish("video_answer_cb")\r
-                        else:\r
-                            pass\r
-                            # EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话\r
-                        return\r
-                    \r
-            self.WeChatKey_status = self.wechatKey.read_level()\r
-            self.KeyCall2_status = self.extint_17.read_level()\r
-            self.KeyCall1_status = self.extint_19.read_level()\r
-            self.sosKey_status = self.sosKey.read_level()\r
-\r
-            if self.WeChatKey_status != 0 and self.KeyCall1_status != 0 and self.sosKey_status != 0 and self.KeyCall2_status != 0:\r
-                if self.GPIO26_status == 0:#按下\r
-                    EventMesh.publish("close_wechat_btn_timer")\r
-                    if self.pwkey_press == 0 :\r
-                        self.aud.stop()  #播放声音 \r
-                        self.wechatKey_timer.stop()\r
-                        self.pwkey_timer.stop()\r
-                        self.sosKey_timer.stop()\r
-                        self.Keycall2_timer.stop()\r
-                        self.Keycall1_timer.stop()\r
-\r
-                        self.sosKey_count = 0\r
-                        self.sosKey_press = 0\r
-                        self.sosKey_press_count=0\r
-                        self.sosKey_long_press = 0\r
-\r
-                        self.wechatKey_count = 0\r
-                        self.wechatKey_press = 0\r
-                        self.wechatKey_press_count=0\r
-                        self.wechat_state = 0\r
-                       \r
-\r
-                        self.pwkey_press = 1\r
-                        self.pwkey_count = 0\r
-                        self.led_state = 0\r
-\r
-                        self.Keycall1_count = 0\r
-                        self.Keycall1_press = 0 \r
-                        self.Keycall1_long_press = 0\r
-                        self.Keycall1_press_count = 0\r
-                        \r
-                        self.Keycall2_count = 0\r
-                        self.Keycall2_press = 0 \r
-                        self.Keycall2_press_count = 0\r
-                        self.Keycall2_long_press = 0\r
-\r
-                        self.pwkey_timer.start(100, 1, self.publish_pwkKey_btn_event_cb)\r
-                        # EventMesh.debug_log("key22_extint_cb:self.key22_timer.start!!!!\n")\r
-\r
-\r
-\r
-\r
-        def pwKey_press_cb(self, data):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if open_power != None and open_power_off != None and video_state != None:\r
-                if open_power == 0 or open_power_off == 1 or video_state != 0:\r
-                    self.pwkey_timer.stop()\r
-                    self.pwkey_count = 0\r
-                    self.pwkey_press = 0\r
-                    self.led_state = 0\r
-                    self.pwKey_press_count=0\r
-                    return\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            self.GPIO26_status = self.pwk_key26.read_level()\r
-\r
-            if self.pwkey_press == 1 :\r
-                self.pwkey_count += 1\r
-                if self.pwkey_count > 5:\r
-                    if self.led_state == 0:\r
-                        self.led_state = 1\r
-                        EventMesh.publish("set_led_time_arg",[1,1,330,led_mode.LONG_LIGHT_GREEN,2,1,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    if self.pwkey_count >= 10*10:\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        self.pwkey_timer.stop()\r
-                        self.pwkey_count = 0\r
-                        self.pwkey_press = 0\r
-                        self.pwKey_press_count = 0\r
-                        self.led_state = 0\r
-                        # if EventMesh.publish("get_sim_Status") != 1:\r
-                        #     EventMesh.publish("open_power_on", 2)#\r
-                        # else:\r
-                        EventMesh.publish("open_power_on", 3)#\r
-                        return\r
-                    \r
-                    if self.pwkey_count >= 3*10 :\r
-                        if EventMesh.publish("get_sim_Status") != 1:\r
-                            EventMesh.debug_log("长3秒关机")\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            self.pwkey_timer.stop()\r
-                            self.pwkey_count = 0\r
-                            self.pwkey_press = 0\r
-                            self.pwKey_press_count = 0\r
-                            self.led_state = 0\r
-                            EventMesh.publish("open_power_on", 2)#\r
-                            return\r
-                            \r
-                    \r
-                if self.GPIO26_status == 1:#松开\r
-                    if self.pwkey_count >= 1: #防抖100ms\r
-                        # EventMesh.debug_log("self.GPIO26_status == 1")\r
-                        self.pwkey_timer.stop()\r
-                        self.pwkey_count = 0\r
-                        self.pwkey_press = 0\r
-                        self.led_state = 0\r
-                        self.pwKey_press_count+=1\r
-                        self.pwkey_timer.start(500, 0, self.publish_pwKey_timeout_cb_do)#松手超时1s判断\r
-\r
-        def  hsensorTest_timer_cb(self,e):\r
-            EventMesh.publish("system_sleep_rest")#防止黑屏 \r
-            w_data = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据\r
-            #EventMesh.debug_log("FactoryModeHsensorTest{}".format(data))\r
-        \r
-              \r
-        def publish_pwKey_timeout_cb_do(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.pwKey_timeout_cb,"data":0})  \r
-        \r
-        def pwKey_timeout_cb(self, data):#侧边按键\r
-            boot_count = EventMesh.publish("get_boot_time_count")\r
-\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if open_power != None and open_power_off != None and video_state != None:\r
-                if open_power == 0 or open_power_off == 1 or video_state != 0:\r
-                    self.pwkey_timer.stop()\r
-                    self.pwkey_count = 0\r
-                    self.pwkey_press = 0\r
-                    self.led_state = 0\r
-                    self.pwKey_press_count=0\r
-                    return\r
-\r
-            if self.pwKey_press_count >= 1:\r
-                self.pwKey_press_count = 0\r
-                # flag = EventMesh.publish("get_call_state") \r
-                # if flag != 2:#如果是电话拨出去或者不在打电话中都可以执行\r
-                #     EventMesh.publish("stop_led_timer")#设置参数\r
-                #     if flag == 1:#如果是sos电话拨出去\r
-                #         sos_flag = EventMesh.publish("get_sos_flag")\r
-                #         if sos_flag == 1:\r
-                #             EventMesh.publish("set_sos_flag",0)\r
-                #             EventMesh.publish("set_sos_num",0)\r
-                #             EventMesh.publish("set_hangup_mode",0)\r
-                #     EventMesh.publish("close_hr_sop2")#\r
-                #     flag = EventMesh.publish("get_call_state") \r
-                #     # if flag == 0 or flag == 2:#在拨出去或者通话中就不播报入网成功的语音\r
-                #     if flag != 1:#在拨出去或者通话中就不播报入网成功的语音\r
-                #         EventMesh.publish("set_sim_mode")#\r
-                #     EventMesh.publish("dialing_out_event")#电话呼叫中voiceCall.callEnd()\r
-                \r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag != 2:\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("dialing_out_event")#电话呼叫中voiceCall.callEnd()\r
-\r
-                    if flag == 1:#如果是sos电话拨出去\r
-                        sos_flag = EventMesh.publish("get_sos_flag")\r
-                        if sos_flag == 1:\r
-                            EventMesh.publish("set_sos_state_out")\r
-                            EventMesh.publish("set_sos_flag",0)\r
-                            EventMesh.publish("set_sos_num",0)\r
-                            EventMesh.publish("set_hangup_mode",0)\r
-                    EventMesh.publish("close_hr_sop2")#\r
-                    flag = EventMesh.publish("get_call_state") \r
-                    if flag != 1:\r
-                        EventMesh.publish("set_sim_mode")#\r
-            \r
-            self.pwKey_press_count = 0\r
-\r
-        def sosKey_extint_cb(self,args):\r
-            \r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if power_off != None and open_power != None:\r
-                if power_off == 1 or open_power == 0:\r
-                    return\r
-            self.sosKey_status = int(args[1])\r
-            if self.sosKey_status == 0:\r
-                self.sosKey_status = 1\r
-            else:\r
-                self.sosKey_status = 0\r
-                pass\r
-            get_video = EventMesh.publish("get_video_in_out_state")\r
-\r
-            self.WeChatKey_status = self.wechatKey.read_level()\r
-            self.GPIO26_status = self.pwk_key26.read_level()\r
-            self.KeyCall1_status = self.extint_19.read_level()\r
-            self.KeyCall2_status = self.extint_17.read_level()\r
-\r
-            # EventMesh.debug_log('sosKey_extint_cb ',args,self.sosKey_status,self.WeChatKey_status,self.KeyCall1_status,self.KeyCall2_status,self.GPIO26_status) # args[0]:gpio号 args[1]:上升沿或下降沿\r
-            if self.WeChatKey_status != 0 and self.GPIO26_status != 0 and self.KeyCall1_status != 0 and self.KeyCall2_status != 0:\r
-                if self.sosKey_status == 0:#按下\r
-                    if NEW_ENABLE == 0:#新的按键功能定义\r
-                        video_state = EventMesh.publish("get_video_state")\r
-                        if video_state != 0:#视频通话打入或者接听后允许挂断视频通话\r
-                            if video_state == 6 or get_video == 0:\r
-                                EventMesh.debug_log("sosKey_extint_cb",get_video,video_state)\r
-                                EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话\r
-                                self.sosKey_press_count=0\r
-                                self.wechatKey_timer.stop()\r
-                                self.pwkey_timer.stop()\r
-                                self.sosKey_timer.stop()\r
-                                self.Keycall2_timer.stop()\r
-                                self.Keycall1_timer.stop()\r
-                                return\r
-                    EventMesh.publish("close_falldown_alarm_event")#关闭跌倒报警提醒事件\r
-                    EventMesh.publish("close_wechat_btn_timer")\r
-\r
-                    if self.sosKey_press == 0 :\r
-                        self.wechatKey_timer.stop()\r
-                        self.pwkey_timer.stop()\r
-                        self.sosKey_timer.stop()\r
-                        self.Keycall2_timer.stop()\r
-                        self.Keycall1_timer.stop()\r
-\r
-                        \r
-                        self.pwkey_count = 0\r
-                        self.pwkey_press = 0\r
-                        self.led_state = 0\r
-                        self.pwKey_press_count=0 #电源键\r
-\r
-\r
-                        self.wechatKey_count = 0\r
-                        self.wechatKey_press = 0\r
-                        self.wechat_state = 0\r
-                        self.wechatKey_press_count=0#微聊键\r
-\r
-\r
-                        self.sosKey_press = 1\r
-                        self.sosKey_long_press = 0\r
-                        self.sosKey_count = 0\r
-\r
-                        self.Keycall1_count = 0\r
-                        self.Keycall1_press = 0 \r
-                        self.Keycall1_long_press = 0\r
-                        self.Keycall1_press_count = 0\r
-                        \r
-                        self.Keycall2_count = 0\r
-                        self.Keycall2_press = 0 \r
-                        self.Keycall2_long_press = 0\r
-                        self.Keycall2_press_count = 0\r
-\r
-                        self.sosKey_timer.start(100, 1, self.publish_soskey_btn_event_cb)\r
-                        # self.sosKey_timer.start(100, 1, self.sosKey_press_cb)\r
-            # EventMesh.debug_log("key22_extint_cb:self.key22_timer.start!!!!\n")\r
-\r
-        def sosKey_press_cb(self, data):\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.sosKey_timer.stop()\r
-                    self.sosKey_count = 0\r
-                    self.sosKey_press = 0\r
-                    self.sosKey_long_press = 0\r
-                    self.sosKey_press_count = 0\r
-                    return\r
-            self.sosKey_status = self.sosKey.read_level()\r
-            if self.sosKey_press == 1 :\r
-                # if self.sosKey_count <= 2:\r
-                    # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音\r
-                    #     EventMesh.publish("set_led_time_arg",[1000,200,1,led_mode.FLASH_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                    # else:\r
-                    #     EventMesh.publish("set_led_time_arg",[1000,200,1,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#设置参数\r
-                self.sosKey_count += 1\r
-                if self.sosKey_count >= 10*3: #长按3s sos拨号\r
-                    flag = EventMesh.publish("get_call_state")#获取通话状态\r
-                    fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                    video_state = EventMesh.publish("get_video_state")#获取视频通话状态\r
-                    if fall_down != None and video_state != None:\r
-                        if fall_down != 0 or flag == 2 or video_state != 0:\r
-                            self.sosKey_count = 0\r
-                            self.sosKey_long_press = 0\r
-                            self.sosKey_press = 0\r
-                            self.sosKey_timer.stop()\r
-                            return\r
-                    if self.sosKey_long_press == 0:\r
-                        self.sosKey_long_press = 1\r
-                       \r
-                        EventMesh.publish_async("dial_sos_phone")#拨打sos号码\r
-                        return\r
-                    if self.sosKey_status == 1:#松开\r
-                        self.sosKey_count = 0\r
-                        self.sosKey_long_press = 0\r
-                        self.sosKey_press = 0\r
-                        self.sosKey_timer.stop()\r
-                        return\r
-\r
-                # EventMesh.debug_log("self.sosKey_count {}",self.sosKey_count)\r
-                if self.sosKey_status == 1:#松开\r
-                    if self.sosKey_count >= 1: #防抖100ms\r
-                        self.sosKey_timer.stop()\r
-                        self.sosKey_count = 0\r
-                        self.sosKey_press = 0\r
-                        self.sosKey_long_press = 0\r
-                        self.sosKey_press_count+=1\r
-                        self.sosKey_timer.start(500, 0, self.publish_sosKey_timeout_cb_do)#松手超时1s判断\r
-        def publish_sosKey_timeout_cb_do(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.sosKey_timeout_cb,"data":0})  \r
-        # 1、长按3秒以上,进行SOS拔号;\r
-        # 2、短按挂断来电或挂断视频通话,平时短按一下语音报时;\r
-        # 3、短按三下,发起视频通话(默认第一个)\r
-        # 4、短按六次,播报IMEI号\r
-        # 5、短按十次,解绑APP,同时恢复出厂设置\r
-        def close_factory_test(self):#关闭老化测试\r
-            if self.factoryTest_flag == 1:\r
-                self.factoryTest_flag = 0\r
-                close_led_white()\r
-                close_led_red()\r
-                close_led_green()\r
-                self.factoryTest_led_count = 0\r
-                self.aud.stopPlayStream()\r
-                self.factoryTest_timer.stop()\r
-                EventMesh.publish("close_motor_infor")\r
-\r
-        def factoryTest_timer_cb(self,e):\r
-            # self.factoryTest_count+=1\r
-            date_tmp = utime.localtime()\r
-            time_tmp = utime.mktime(date_tmp)\r
-            # print("time_tmp - self.factory_timesec :%d time_tmp:%d self.factory_timesec %d\r\n",time_tmp - self.factory_timesec,time_tmp,self.factory_timesec)\r
-            if time_tmp - self.factory_timesec > 60*60*2:\r
-            # if self.factoryTest_count > 60*60*2:#老化测试2小时自动退出\r
-            #     self.factoryTest_count = 0\r
-                self.close_factory_test()\r
-                return\r
-            #播放音频 \r
-            str_data = 'mp3files={}.mp3'.format(audio_buf.index("R_ALARM_NEW"))\r
-            if EventMesh.publish("get_audio_state") == 0:\r
-                self.aud.montage_play('U:/static/audio.bin',1,1,str_data)\r
-            #led灯常亮\r
-            self.factoryTest_led_count+=1\r
-            if self.factoryTest_led_count == 1:#1  4 7  10 \r
-                open_led_red()\r
-                close_led_green()\r
-                close_led_white()\r
-            elif self.factoryTest_led_count == 2:\r
-                open_led_green()\r
-                close_led_red()\r
-                close_led_white()\r
-            elif self.factoryTest_led_count == 3: #3  6 9 12 \r
-                open_led_white()\r
-                close_led_red()\r
-                close_led_green()\r
-            if self.factoryTest_led_count >= 3+1:\r
-                self.factoryTest_led_count = 0\r
-\r
-            EventMesh.publish("set_motor_time",[1,2,10*1,10,5])#设置马达参数\r
-\r
-        def sosKey_timeout_cb(self, data):#\r
-            # print("sosKey_timeout_cb",self.sosKey_press_count)\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.sosKey_timer.stop()\r
-                    self.sosKey_count = 0\r
-                    self.sosKey_press = 0\r
-                    self.sosKey_long_press = 0\r
-                    self.sosKey_press_count = 0\r
-                    return\r
-            factory_count = EventMesh.publish("get_factory_test_time")\r
-            print("factory_count:%d",factory_count)\r
-            try :\r
-                if factory_count <= 30 :#开机30秒内按键次数大于15进入测试模式\r
-                    #EventMesh.debug_log("boot_count:{}".format(boot_count))\r
-                    if self.sosKey_press_count >= 15:\r
-                        self.factoryTest_timer.start(1000,1,self.factoryTest_timer_cb)\r
-                        self.sosKey_press_count = 0\r
-                        self.factoryTest_led_count = 0\r
-                        self.factoryTest_flag = 1\r
-                        date_tmp = utime.localtime()\r
-                        time_tmp = utime.mktime(date_tmp)\r
-                        self.factory_timesec = time_tmp\r
-                        return\r
-\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-\r
-            if NEW_ENABLE == 1:#旧的按键定义\r
-                # EventMesh.debug_log("sosKey_press_count!!!!!!!!!!!!!! ",self.sosKey_press_count)\r
-                flag = EventMesh.publish("get_call_state")#获取通话状态\r
-                fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                if self.sosKey_press_count > 1:#\r
-                    if fall_down != None:\r
-                        if fall_down != 0 or flag != 0:\r
-                            self.sosKey_press_count = 0\r
-                            return\r
-                if self.sosKey_press_count == 10:#\r
-                    self.sosKey_press_count = 0\r
-                    pass\r
-                elif self.sosKey_press_count == 6:#\r
-                    self.sosKey_press_count = 0\r
-                    self.close_factory_test()\r
-                    pass\r
-                elif self.sosKey_press_count == 5:#功能暂时屏蔽\r
-                    self.sosKey_press_count = 0\r
-                    call_state = EventMesh.publish("get_call_state")\r
-                    battery = EventMesh.publish("screen_get_battery")\r
-                    if call_state == None:\r
-                        call_state = 0\r
-                    if call_state == 0: \r
-                        if battery != None:\r
-                            if battery[0] != "1":#在充电得时候\r
-                                EventMesh.publish("stop_led_timer")#设置参数\r
-                                EventMesh.publish("set_manual_measure_mode",3)#测量体温\r
-                    pass\r
-                elif self.sosKey_press_count == 4:#拨打app快捷号码\r
-                    self.sosKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("play_center_phone")#拨打快捷号码\r
-                    # EventMesh.publish("call_phonebook_num",3)\r
-                    pass\r
-                elif self.sosKey_press_count == 3:#测试心率\r
-                    self.sosKey_press_count = 0\r
-                    \r
-                    call_state = EventMesh.publish("get_call_state")\r
-                    battery = EventMesh.publish("screen_get_battery")\r
-                    if call_state == None:\r
-                        call_state = 0\r
-                    if call_state == 0: \r
-                        if battery != None:\r
-                            if battery[0] != "1":#在充电得时候\r
-                                EventMesh.publish("stop_led_timer")#设置参数\r
-                                EventMesh.publish("set_manual_measure_mode",1)#\r
-                    pass\r
-                elif self.sosKey_press_count == 2:#播报当前步数\r
-                    self.sosKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("play_cur_step_event")#\r
-                    pass\r
-                elif self.sosKey_press_count == 1:#挂断来电 短语音播报\r
-                    self.sosKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    # EventMesh.publish("call_test_event")\r
-                    EventMesh.publish("sos_short_press")#sos短按事件\r
-                    \r
-                    pass\r
-                self.sosKey_press_count = 0\r
-            else:\r
-                # EventMesh.debug_log("sosKey_press_count!!!!!!!!!!!!!! ",self.sosKey_press_count)\r
-                flag = EventMesh.publish("get_call_state")#获取通话状态\r
-                fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                video_state = EventMesh.publish("get_video_state")#获取视频通话状态\r
-                \r
-                \r
-                if self.sosKey_press_count > 1:#短按十次解绑app\r
-                    if fall_down != None and video_state != None and flag != None:\r
-                        if fall_down != 0 or flag != 0 or video_state != 0:#获取视频通话状态:\r
-                            self.sosKey_press_count = 0\r
-                            return\r
-                if self.sosKey_press_count == 10:#\r
-                    self.sosKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("open_power_on", 4)#恢复出厂\r
-                    pass\r
-                elif self.sosKey_press_count == 6:#播报IMEI号\r
-                    self.sosKey_press_count = 0\r
-                    self.close_factory_test()\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("play_imei_event")#播報imei号\r
-                    pass\r
-                elif self.sosKey_press_count == 5:#\r
-                    self.sosKey_press_count = 0\r
-                    # call_state = EventMesh.publish("get_call_state")\r
-                    # battery = EventMesh.publish("screen_get_battery")\r
-                    # if call_state == None:\r
-                    #     call_state = 0\r
-                    # if call_state == 0: \r
-                    #     if battery != None:\r
-                    #         if battery[0] != "1":#在充电得时候\r
-                    #             EventMesh.publish("stop_led_timer")#设置参数\r
-                    #             EventMesh.publish("set_manual_measure_mode",3)#测量体温\r
-                    # pass\r
-                elif self.sosKey_press_count == 4:#\r
-                    self.sosKey_press_count = 0\r
-                    # EventMesh.publish("stop_led_timer")#设置参数\r
-                    # EventMesh.publish("play_center_phone")#拨打快捷号码\r
-                    # EventMesh.publish("call_phonebook_num",3)\r
-                    pass\r
-                elif self.sosKey_press_count == 3:#视频通话\r
-                    self.sosKey_press_count = 0\r
-                    call_state = EventMesh.publish("get_call_state")\r
-                    battery = EventMesh.publish("screen_get_battery")\r
-                    if call_state == None:\r
-                        call_state = 0\r
-                    if call_state == 0:\r
-                        flag = EventMesh.publish("get_call_state") \r
-                        fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                        usb_state = EventMesh.publish("get_usb")#\r
-                        video_state = EventMesh.publish("get_video_state")\r
-                        if flag != 0  or fall_down != 0:\r
-                            return\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish("call_viode_book_num")\r
-                    pass\r
-                elif self.sosKey_press_count == 2:#播报当前步数\r
-                    self.sosKey_press_count = 0\r
-                    # EventMesh.publish("stop_led_timer")#设置参数\r
-                    # EventMesh.publish("play_cur_step_event")#\r
-                    pass\r
-                elif self.sosKey_press_count == 1:#挂断来电 短语音播报\r
-                    self.sosKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    # EventMesh.publish("call_test_event")\r
-                    EventMesh.publish("sos_short_press")#sos短按事件\r
-                    \r
-                    pass\r
-                self.sosKey_press_count = 0\r
-\r
-\r
-        def wechatKey_extint_cb(self,args):\r
-            power_off = EventMesh.publish("get_power_off_state")#获取关机标识\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            dev_app_mode = EventMesh.publish("get_dev_app_mode")\r
-            video_state = EventMesh.publish("get_video_state")#获取视频通话状态 5在通话状态不允许按键输入\r
-            get_video_state = EventMesh.publish("get_video_in_out_state")\r
-\r
-            if open_power != None and power_off != None and dev_app_mode != None:\r
-                if open_power == 0 or power_off == 1 or  (dev_app_mode == 1 and get_video_state != 0):\r
-                    return\r
-            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-            if fall_down != None:\r
-                if fall_down != 0:\r
-                    return\r
-            # EventMesh.txt_log('wechatKey_extint_cb :{}'.format(args))\r
-            self.WeChatKey_status = int(args[1])\r
-            if self.WeChatKey_status == 0:\r
-                self.WeChatKey_status = 1\r
-            else:\r
-                self.WeChatKey_status = 0\r
-                pass\r
-            if NEW_ENABLE == 0:#新的按键功能定义\r
-                if self.WeChatKey_status == 0:\r
-                    video_state = EventMesh.publish("get_video_state")\r
-                    if video_state != 0:#视频通话打入或者接听后允许挂断视频通话\r
-                        if video_state != 6:#6是app打手表需要接通\r
-                            # EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话\r
-                            return\r
-                    \r
-            self.sosKey_status = self.sosKey.read_level()\r
-            self.GPIO26_status = self.pwk_key26.read_level()\r
-            self.KeyCall1_status = self.extint_19.read_level()\r
-            self.KeyCall2_status = self.extint_17.read_level()\r
-            # EventMesh.debug_log('wechatKey_extint_cb ',args,self.WeChatKey_status,self.sosKey_status,self.KeyCall1_status,self.KeyCall2_status,self.GPIO26_status) # args[0]:gpio号 args[1]:上升沿或下降沿\r
-            # if self.sosKey_status != 0 and self.GPIO26_status != 0:\r
-            if self.sosKey_status != 0 and self.GPIO26_status != 0 and self.KeyCall1_status != 0 and self.KeyCall2_status != 0:\r
-                if self.WeChatKey_status == 0:#按下\r
-                    video_state = EventMesh.publish("get_video_state")\r
-                    if video_state != 0:#视频通话打入或者接听后允许挂断视频通话\r
-                        if video_state != 6:#6是app打手表需要接通\r
-                            # EventMesh.publish("video_dev_reject_cb",2)#挂断视频通话\r
-                            # self.wechatKey_press_count = 0\r
-                            # self.wechatKey_timer.stop()\r
-                            # self.pwkey_timer.stop()\r
-                            # self.sosKey_timer.stop()\r
-                            # self.Keycall2_timer.stop()\r
-                            # self.Keycall1_timer.stop()\r
-                            return\r
-                    if self.wechatKey_press == 0:\r
-                        self.wechatKey_timer.stop()\r
-                        self.pwkey_timer.stop()\r
-                        self.sosKey_timer.stop()\r
-                        self.Keycall2_timer.stop()\r
-                        self.Keycall1_timer.stop()\r
-\r
-                        self.sosKey_press_count = 0\r
-                        self.sosKey_long_press = 0\r
-                        self.sosKey_press = 0\r
-                        self.sosKey_count = 0\r
-\r
-                        self.pwkey_press = 0\r
-                        self.pwkey_count = 0\r
-                        self.led_state = 0\r
-                        self.pwKey_press_count=0\r
-\r
-                        self.wechatKey_press = 1\r
-                        self.led_state = 0\r
-                        self.wechatKey_count = 0\r
-                        self.wechat_state = 0\r
-\r
-                        self.Keycall1_count = 0\r
-                        self.Keycall1_press = 0 \r
-                        self.Keycall1_long_press = 0\r
-                        self.Keycall1_press_count = 0\r
-                        \r
-                        self.Keycall2_count = 0\r
-                        self.Keycall2_press = 0 \r
-                        self.Keycall2_press_count = 0\r
-                        self.Keycall2_long_press = 0\r
-\r
-                        self.wechatKey_timer.start(100, 1, self.publish_wechat_btn_event_cb)\r
-                else:\r
-                    EventMesh.publish("close_wechat_btn_timer")\r
-\r
-        def close_wechat_btn_timer(self,event,*argc):\r
-            tmp = EventMesh.publish("get_wechat_time")#获取微聊时间戳\r
-            wechat_time = 0\r
-            time_tmp = 0\r
-            time_sec = 0\r
-\r
-            if tmp != None:\r
-                if tmp[0] == 1:\r
-                    self.wechatKey_timer.stop()\r
-                    self.wechatKey_count = 0\r
-                    self.wechatKey_press = 0\r
-                    self.wechatKey_press_count=0\r
-                    self.wechat_state = 0\r
-                    date_tmp = utime.localtime()\r
-                    time_tmp = utime.mktime(date_tmp)\r
-                    time_sec = tmp[1]\r
-                    wechat_time = time_tmp - time_sec\r
-                    # EventMesh.debug_log("close_btn_timer",time_tmp,time_sec,wechat_time)\r
-                    if wechat_time >= 15:\r
-                        wechat_time = 15\r
-                    if wechat_time <= 0:\r
-                        wechat_time = 0\r
-                    EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容\r
-        \r
-\r
-        def wechatKey_press_cb(self,data):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1 :\r
-                    \r
-                    self.wechatKey_timer.stop()\r
-                    self.wechatKey_count = 0\r
-                    self.wechatKey_press = 0\r
-                    self.wechat_state = 0\r
-                    self.wechatKey_press_count=0\r
-                    return\r
-            self.WeChatKey_status = self.wechatKey.read_level()\r
-            wechat_time = 0\r
-            tmp = None\r
-            time_sec = 0\r
-            time_tmp = 0\r
-            date_tmp = utime.localtime()\r
-            time_tmp = utime.mktime(date_tmp)\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            if self.wechatKey_press == 1 :#是否按下\r
-                tmp = EventMesh.publish("get_wechat_time")#获取微聊时间戳\r
-                self.wechatKey_count += 1\r
-                if self.wechatKey_count >= 15: #长按1s进入微聊录音\r
-                    flag = EventMesh.publish("get_call_state") \r
-                    fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                    if flag != None:\r
-                        if flag == 0 and fall_down == 0 and video_state == 0:\r
-                            if self.WeChatKey_status == 0:\r
-                                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网不需要录音\r
-                                    if self.wechat_state == 0:#按下超过s开始录音\r
-                                        EventMesh.publish("start_wechat_record")#开始录音\r
-                                        self.wechat_state = 1\r
-                                else:\r
-                                    self.wechat_state = 0\r
-                                    self.wechatKey_timer.stop()\r
-                                    self.wechatKey_count = 0\r
-                                    self.wechatKey_press = 0\r
-                                    self.wechatKey_press_count=0\r
-                                    EventMesh.publish("set_sim_mode")#播報imei号\r
-                                    return\r
-\r
-                            if self.WeChatKey_status == 0:#未松手超过15s啧停止录音\r
-                                if self.wechat_state == 1:\r
-                                    if tmp != None:\r
-                                        if tmp[0] != 0:\r
-                                            time_sec = tmp[1]\r
-                                            if time_tmp - time_sec >= 15:\r
-                                                wechat_time = time_tmp - time_sec\r
-                                                if wechat_time >= 15:\r
-                                                    wechat_time = 15\r
-                                                EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容\r
-                                                \r
-                                                self.wechatKey_timer.stop()\r
-                                                self.wechatKey_count = 0\r
-                                                self.wechatKey_press = 0\r
-                                                self.wechat_state = 0\r
-                                                self.wechatKey_press_count=0\r
-                                                return\r
-                            else:\r
-                                if self.WeChatKey_status == 1:\r
-                                    if self.wechat_state == 1:#如果按下时长超过1s且小于长按的时间也认为是录微聊\r
-                                        if tmp != None:\r
-                                            if tmp[0] != 0:\r
-                                                time_sec = tmp[1]\r
-                                                wechat_time = time_tmp - time_sec\r
-                                            # EventMesh.debug_log("WECHAT TIEM",time_tmp,time_sec,wechat_time)\r
-                                            if wechat_time >= 15:\r
-                                                wechat_time = 15\r
-                                        \r
-                                        \r
-                                        EventMesh.publish("send_wechat_record",wechat_time)#发送录音文件内容\r
-                                        self.wechatKey_timer.stop()\r
-                                        self.wechat_state = 0\r
-                                        self.wechatKey_count = 0\r
-                                        self.wechatKey_press = 0\r
-                                        self.wechatKey_press_count=0\r
-                                        return\r
-                        else:\r
-                            self.wechatKey_timer.stop()\r
-                            self.wechatKey_count = 0\r
-                            self.wechat_state = 0\r
-                            self.wechatKey_press = 0\r
-                            self.wechatKey_press_count = 0\r
-                            return\r
-\r
-                if self.WeChatKey_status == 1:#松开\r
-                    if self.wechatKey_count >= 1: #防抖100ms\r
-                        # EventMesh.debug_log("WeChat time!!!!!!!!!!!!!!")\r
-                        self.wechatKey_timer.stop()\r
-                        self.wechatKey_count = 0\r
-                        self.wechatKey_press = 0\r
-                        self.wechat_state = 0\r
-                        self.wechatKey_press_count+=1\r
-                        self.wechatKey_timer.start(500, 0, self.publish_wechatKey_btn_event_cb)#松手超时1s判断\r
-\r
-        def publish_wechatKey_btn_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_btnInfo",{"func":self.wechatKey_timeout_cb,"data":0})  \r
-\r
-        # 1、短按一下,播放最后收到的语音或接听电话,接听视频通话;短按一下,开始语音播报能否速度快一点,现在慢了体验感有点差\r
-        # 2、长按1.5秒后开始录音,松开按键后,发送录音至APP;\r
-        # 3、短按三次,拨打通信录号码三\r
-        # 4、短按四次,拨打通信录号码四\r
-        # 5、短按五次,拨打通信录号码五\r
-        # 6、短按六次,拨打通信录号码六\r
-        # 7、短按七次,拨打通信录号码七\r
-        # 8、短按八次,拨打通信录号码八\r
-    \r
-        def wechatKey_timeout_cb(self,data):#微聊键\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if open_power != None and open_power_off != None:\r
-                if open_power == 0 or open_power_off == 1:\r
-                    self.wechatKey_timer.stop()\r
-                    self.wechatKey_count = 0\r
-                    self.wechatKey_press = 0\r
-                    self.wechat_state = 0\r
-                    self.wechatKey_press_count=0\r
-                    return\r
-            \r
-            if NEW_ENABLE == 1: #旧的按键定义微聊键\r
-                flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-                fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                if self.wechatKey_press_count > 1:#\r
-                    if fall_down != None:\r
-                        if fall_down != 0 or flag == 2:\r
-                            self.wechatKey_press_count = 0\r
-                            return\r
-                # EventMesh.debug_log("wechatKey_timeout_cb!!!!!!!!!!!!!! ",self.wechatKey_press_count)\r
-                if self.wechatKey_press_count == 10:#短按十次解绑app\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("open_power_on", 4)#恢复出厂\r
-                    pass\r
-                elif self.wechatKey_press_count == 6:#短按六次播报imei号\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("play_imei_event")#播報imei号\r
-                    pass\r
-                elif self.wechatKey_press_count == 4:#拨打通讯录号码三\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("call_phonebook_num",3)\r
-                    pass\r
-                elif self.wechatKey_press_count == 3:#拨打通讯录号码二\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("call_phonebook_num",2)\r
-                    pass\r
-                elif self.wechatKey_press_count == 2:#拨打通讯录号码一\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("call_phonebook_num",1)\r
-                    # EventMesh.publish("interup_call_event")#\r
-                    pass\r
-                elif self.wechatKey_press_count == 1:#播放最后收到的语音\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    call_state = EventMesh.publish("get_call_state") \r
-                    if call_state == 0:\r
-                        fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                        if fall_down != None:\r
-                            if fall_down != 0:\r
-                                EventMesh.publish_async("dial_sos_phone")#拨打sos号码\r
-                                return\r
-                    else:\r
-                        if call_state == 2:#电话拨进需要接听\r
-                            EventMesh.publish("answer_call_event")#接听电话\r
-                            return\r
-                    EventMesh.publish("play_wechat_last_amr")\r
-                    # pass\r
-                self.wechatKey_press_count = 0\r
-            else:\r
-                flag = EventMesh.publish("get_call_state")#在通话或者电话拨进 或者拨出不允许寻找设备\r
-                fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                if self.wechatKey_press_count > 1:#\r
-                    if fall_down != None and flag != None and video_state != None:\r
-                        if fall_down != 0 or flag != 0 or video_state != 0:\r
-                            self.wechatKey_press_count = 0\r
-                            return\r
-                # EventMesh.debug_log("wechatKey_timeout_cb!!!!!!!!!!!!!! ",self.wechatKey_press_count)\r
-                if self.wechatKey_press_count == 10:#短按十次解绑app\r
-                    self.wechatKey_press_count = 0\r
-                    # EventMesh.publish("stop_led_timer")#设置参数\r
-                    # EventMesh.publish("open_power_on", 4)#恢复出厂\r
-                    pass\r
-                elif self.wechatKey_press_count == 8:#拨打通讯录号码八\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("call_phonebook_num",8)\r
-                    pass\r
-                elif self.wechatKey_press_count == 7:#拨打通讯录号码七\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("call_phonebook_num",7)\r
-                    pass\r
-                elif self.wechatKey_press_count == 6:#拨打通讯录号码六\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("call_phonebook_num",6)\r
-                    pass\r
-                elif self.wechatKey_press_count == 5:#拨打通讯录号码五\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("call_phonebook_num",5)\r
-                    pass\r
-                elif self.wechatKey_press_count == 4:#拨打通讯录号码四\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("call_phonebook_num",4)\r
-                    pass\r
-                elif self.wechatKey_press_count == 3:#拨打通讯录号码三\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("call_phonebook_num",3)\r
-                    pass\r
-                elif self.wechatKey_press_count == 2:#拨打通讯录号码一\r
-                    self.wechatKey_press_count = 0\r
-                    # EventMesh.publish("stop_led_timer")#设置参数\r
-                    # EventMesh.publish("call_phonebook_num",1)\r
-                    # EventMesh.publish("interup_call_event")#\r
-                    pass\r
-                elif self.wechatKey_press_count == 1:#播放最后收到的语音\r
-                    self.wechatKey_press_count = 0\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    video_state = EventMesh.publish("get_video_state") \r
-                    # print("video_state call",video_state)\r
-                    if video_state != 0:\r
-                        if video_state == 6:#2 是app拨打手表 1 是手表打app 3 是正在视频通话中 0 关闭只有第一次视频通话打入才允许接听 接通之后不允许接听了\r
-                            EventMesh.publish("video_answer_cb")\r
-                        return\r
-                    call_state = EventMesh.publish("get_call_state") \r
-                    if call_state == 0:\r
-                        fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                        if fall_down != None:\r
-                            if fall_down != 0:\r
-                                EventMesh.publish_async("dial_sos_phone")#拨打sos号码\r
-                                return\r
-                    else:\r
-                        if call_state == 2:#电话拨进需要接听\r
-                            EventMesh.publish("answer_call_event")#接听电话\r
-                            return\r
-                    EventMesh.publish("play_wechat_last_amr")\r
-                    # pass\r
-                self.wechatKey_press_count = 0\r
-            \r
-    \r
-\r
-\r
-        def pwk_press_cb(self, *args):\r
-            '''KEY2:联动屏幕右下角或返回键长按关机'''\r
-            if self.pwk_press == 1 :\r
-                \r
-                self.pwk_count += 1\r
-                EventMesh.debug_log("self.pwk_count {}",self.pwk_count)\r
-                if self.GPIO26_status == 1:#松开\r
-                    if self.pwk_count >= 1: #防抖100ms\r
-                        self.__pwk_timer.stop()\r
-                        self.pwk_count = 0\r
-                        self.pwk_press = 0\r
-                        EventMesh.debug_log("self.pwk_press_cb")\r
-\r
-                if self.pwk_count > (self.__PowerDownTimeOut//100): #长按\r
-                    self.__pwk_timer.stop()\r
-                    self.pwk_count = 0\r
-                    self.pwk_press = 0\r
-                    EventMesh.debug_log("btn8_long_press")\r
-\r
-        def __ui_callback(self, para):\r
-        # EventMesh.debug_log("para = {}".format(para))\r
-            if para == 0:\r
-                EventMesh.publish("done_left_to_right")\r
-                #EventMesh.debug_log("<-")\r
-            elif para == 1:\r
-                EventMesh.publish("done_right_to_left")\r
-                #EventMesh.debug_log("->")\r
-            elif para == 2:\r
-                EventMesh.publish("done_bottom_to_top")\r
-                #EventMesh.debug_log("^")\r
-            elif para == 3:\r
-                EventMesh.publish("done_top_to_bottom")\r
-                #EventMesh.debug_log("V")\r
-            elif para == 4:\r
-                EventMesh.publish("done_return")\r
-                #EventMesh.debug_log("return")\r
-            elif para == 5:\r
-                EventMesh.publish("done_click")\r
-                #EventMesh.debug_log("CLICK")\r
-            elif para == 6:\r
-                EventMesh.publish("done_press")\r
-                #EventMesh.debug_log("press")\r
-            elif (para == 6):\r
-                EventMesh.publish("done_error")\r
-                #EventMesh.debug_log("error")\r
-\r
-        def key_callback(self, l_list):\r
-            EventMesh.debug_log("key_callback:",str(l_list))\r
-            if l_list[0] == 1:\r
-                # 马达震动预留\r
-                pass\r
-            if (l_list[1] == 3) and (l_list[2] == 0):\r
-                if l_list[0] == 1:\r
-                    #self.pwk_press = 0\r
-                    EventMesh.publish("btn1_press")\r
-                else:\r
-                    pass\r
-                    # EventMesh.publish("btn1_press")\r
-\r
-\r
-\r
-\r
-        def powerKey_callback(self, status):\r
-            EventMesh.debug_log('==pwr:', status)# 0 1 0\r
-            self.powerKey_status = status\r
-            if self.pwk_press == 1: #按按钮时不处理\r
-                return\r
-        \r
-            \r
-                \r
-\r
-        def power_key_press_cb(self, *args):\r
-            pass\r
-            # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#未插卡的情况下强制关机\r
-                # EventMesh.publish("open_power_on", 2)#\r
-\r
-\r
-        def start(self):\r
-            self.post_processor_after_instantiation()\r
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/led.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/led.py
deleted file mode 100644 (file)
index 6a6ac13..0000000
+++ /dev/null
@@ -1,587 +0,0 @@
-from common import Abstract\r
-import osTimer\r
-import EventMesh\r
-from machine import Pin\r
-import utime\r
-\r
-from queue import Queue\r
-import _thread\r
-import usys\r
-\r
-led_red = Pin(Pin.GPIO36, Pin.OUT, Pin.PULL_PD, 0)\r
-\r
-led_green = Pin(Pin.GPIO44, Pin.OUT, Pin.PULL_PD, 0)\r
-\r
-led_white = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_PD, 0)\r
-\r
-\r
-\r
-def green_light_fast(num,freq):#快闪 num 循环闪烁次数 freq 交替闪烁的频率ms单位 \r
-    for i in range(num):\r
-        led_green.write(1)\r
-        utime.sleep_ms(freq)\r
-        led_green.write(0)\r
-        utime.sleep_ms(freq)\r
-\r
-def red_light_fast(num,freq):#快闪 #快闪 num 循环闪烁次数 freq 交替闪烁的频率ms单位 \r
-    for i in range(num):\r
-        led_red.write(1)\r
-        utime.sleep_ms(freq)\r
-        led_red.write(0)\r
-        utime.sleep_ms(freq)\r
-def red_light_slow(num,freq):#慢闪 #快闪 num 循环闪烁次数 freq 交替闪烁的频率ms单位 \r
-    for i in range(10):\r
-        led_red.write(1)\r
-        utime.sleep_ms(500)\r
-        led_red.write(0)\r
-        utime.sleep_ms(500)\r
-\r
-def red_green_light(num,freq):#红绿灯交替闪烁 \r
-    for i in range(num):\r
-        led_red.write(1)\r
-        utime.sleep_ms(freq)\r
-        led_red.write(0)\r
-        utime.sleep_ms(freq)\r
-        led_green.write(1)\r
-        utime.sleep_ms(freq)\r
-        led_green.write(0)\r
-        utime.sleep_ms(freq)\r
-\r
-def open_led_red():\r
-    led_red.write(1)\r
-\r
-def close_led_red():\r
-    led_red.write(0)\r
-\r
-def open_led_white():\r
-    led_white.write(1)\r
-\r
-def close_led_white():\r
-    led_white.write(0)\r
-\r
-def open_led_green():\r
-    led_green.write(1)\r
-\r
-def close_led_green():\r
-    led_green.write(0)\r
-\r
-\r
-\r
-LED_TIMER_OUT = 100 \r
-class led_mode:\r
-    LONG_LIGHT_RED = 1\r
-    LONG_LIGHT_GREEN = 2\r
-    LONG_LIGHT_WHITE = 3\r
-    FLASH_LIGHT_RED = 4\r
-    FLASH_LIGHT_GREEN = 5\r
-    FLASH_LIGHT_WHITE = 6\r
-    FLASH_LIGHT_RED_GREEN = 7\r
-    FLASH_LIGHT_RED_WHITE = 8\r
-    FLASH_LIGHT_GREEN_WHITE = 9\r
-    LIGHT_NONE = FLASH_LIGHT_GREEN_WHITE+1\r
-\r
-    DEFAULT_LONG_LIGHT_MODE = 0+LIGHT_NONE #默认是关闭\r
-    OPEN_LONG_LIGHT_MODE = 1+LIGHT_NONE#开启\r
-    CLOSE_LONG_LIGHT_MODE = 2+LIGHT_NONE#需要关闭\r
-    INTERVAL_LIGHT_RED  = 3+LIGHT_NONE\r
-    INTERVAL_LIGHT_GREEN  = 4+LIGHT_NONE\r
-    INTERVAL_LIGHT_WHITE  = 5+LIGHT_NONE\r
-\r
-    OTHER_MEASURE_MODE = 200\r
-\r
-    HEALTH_LED_MODE = 201 #健康测试模式\r
-    WECHAT_LED_MODE = 202 #微聊模式\r
-    CHARGE_IN_MODE = 203 #充电模式\r
-    CHARGE_OUT_MODE = 204 #充电已移出\r
-    CHARGE_FULL_MODE = 205 #充电已满\r
-    POWER_OFF_MODE = 206 #关机模式\r
-\r
-\r
-\r
-\r
-\r
-class ledEventManager(Abstract):#灯事件\r
-    def __init__(self):\r
-        self.timer = osTimer()\r
-        self.freq_time = 0#交替闪烁时间 最小100ms \r
-        self.freq_num = 0#交替闪烁的次数\r
-        self.flash_light = 0\r
-        self.total_time = 0\r
-        self.long_count = 0\r
-        self.timer_state = 0\r
-        self.total_count = 0\r
-        self.freq = 0\r
-        self.led_state = 0\r
-        self.long_light_mode = 0\r
-        self.hr_state = 0\r
-        self.wechat_btn = 1\r
-        self.need_hr_btn = 0\r
-        self.led_open_time = 0\r
-        self.led_close_time = 0\r
-        self.led_total_time = 0#闪的总时间\r
-        self.led_enable = 0\r
-        self.led_mode = 0\r
-        self.working_led_mode = None\r
-        self.ledInfo_queue = Queue()\r
-        _thread.stack_size(10*1024)\r
-        _thread.start_new_thread(self.ledInfo_queue_thread, ())\r
-        _thread.stack_size(8*1024)\r
-        EventMesh.subscribe("publish_message_event_ledInfo",self.publish_message_event_ledInfo)\r
-        pass\r
-    \r
-        \r
-\r
-    def post_processor_after_instantiation(self):\r
-        EventMesh.subscribe("set_led_time_arg", self.set_led_time_arg)#设置参数\r
-        EventMesh.subscribe("get_led_state", self.get_led_state)#设置参数\r
-\r
-        EventMesh.subscribe("set_hr_blood_led", self.set_hr_blood_led)#设置参数\r
-\r
-        EventMesh.subscribe("set_find_watch_led", self.set_find_watch_led)#设置参数\r
-\r
-        EventMesh.subscribe("close_all_led", self.close_all_led)#设置参数\r
-\r
-        EventMesh.subscribe("stop_led_timer", self.stop_led_timer)#设置参数\r
-\r
-        EventMesh.subscribe("read_red_led_level", self.read_red_led_level)#读取红灯的电平状态\r
-\r
-        EventMesh.subscribe("read_green_led_level", self.read_green_led_level)#读取绿灯的电平状态\r
-\r
-        EventMesh.subscribe("read_white_led_level", self.read_white_led_level)#读取白灯的电平状态\r
-\r
-        EventMesh.subscribe("close_led_pin", self.close_led_pin)#读取白灯的电平状态def close_led_pin(self, event, msg):\r
-\r
-\r
-    def ledInfo_queue_thread(self):\r
-        while True:\r
-            data = self.ledInfo_queue.get()\r
-            #EventMesh.debug_log("ledInfo_queue:data = {}".format(data))\r
-            if data != None:\r
-                try:\r
-                    data["func"](data["data"])\r
-                except Exception as e:\r
-                    EventMesh.debug_log("ledInfo_queue:ERROR:{}".format(e))\r
-                    usys.print_exception(e)\r
-    def publish_message_event_ledInfo(self,event,msg):\r
-        self.ledInfo_queue.put(msg)\r
-\r
-    def publish_led_event_cb(self, *args, **kwargs):\r
-        EventMesh.publish("publish_message_event_ledInfo",{"func":self.led_fun_cb,"data":0})  \r
-\r
-    def read_red_led_level(self, event, msg): #\r
-        red_level = led_red.read()\r
-        return red_level\r
-\r
-    def read_green_led_level(self, event, msg): #\r
-        green_level = led_green.read()\r
-        return green_level\r
-    \r
-    def read_white_led_level(self, event, msg): #\r
-        white_level = led_green.read()\r
-        return white_level\r
-\r
-    def set_hr_blood_led(self, event, msg): #\r
-        EventMesh.debug_log("set_hr_blood_led :{}".format(msg))\r
-        if msg != None:\r
-            if msg == 1:\r
-                EventMesh.publish("set_led_time_arg",[1,2,10*70*2,led_mode.FLASH_LIGHT_RED_GREEN,10,5,led_mode.HEALTH_LED_MODE])#測量成功\r
-                # EventMesh.publish("set_led_time_arg",[1000,200,300,led_mode.FLASH_LIGHT_RED_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.HEALTH_LED_MODE])#開始測量\r
-            elif msg == 2:\r
-                EventMesh.publish("set_led_time_arg",[1,2,60,led_mode.FLASH_LIGHT_GREEN,60,30,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                # EventMesh.publish("set_led_time_arg",[3000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-            elif msg == 3:#测量失败\r
-                EventMesh.publish("stop_led_timer")\r
-                # EventMesh.publish("set_led_time_arg",[1,1,1,led_mode.FLASH_LIGHT_RED,31,10*3,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                pass\r
-                # EventMesh.publish("set_led_time_arg",[1,1,30,led_mode.FLASH_LIGHT_RED,31,10*3,led_mode.OTHER_MEASURE_MODE])#测量失败\r
-                #加音频文件\r
-\r
-    def set_find_watch_led(self, event, msg): #查找设备\r
-        EventMesh.publish("OPEN_FIND_WATCH")#\r
-       \r
-        # EventMesh.publish("set_led_time_arg",[37000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#查找设备绿灯长亮37s\r
-\r
-    def get_led_state(self, event, msg): #\r
-        return self.timer_state\r
-    def open_timer(self,msg): #msg 0 使能 1总的时间 2 灯模式 3 开启时间 4 关闭时间 \r
-        if msg != None:\r
-            if len(msg) != 0:\r
-                self.led_total_time = msg[2]#\r
-                # EventMesh.debug_log("open_timer:{}".format(msg))\r
-                if self.led_total_time != None:\r
-\r
-                    if self.led_total_time > 0:\r
-                        self.led_enable=msg[0]\r
-                        if self.led_enable != 0:\r
-                            self.led_mode = msg[1]\r
-                            self.long_light_mode = msg[3]\r
-                            self.led_open_time = msg[4]\r
-                            self.led_close_time = msg[5]\r
-                            self.working_led_mode = msg[6]\r
-                            self.long_count = 0\r
-\r
-                            if self.timer_state == 0:\r
-                                self.timer_state = 1\r
-                                self.timer.stop()\r
-                                # self.timer.start(LED_TIMER_OUT,1,self.led_fun_cb)\r
-                                self.timer.start(LED_TIMER_OUT,1,self.publish_led_event_cb)\r
-                \r
-        \r
-\r
-\r
-    def set_led_time_arg(self, event, msg): #msg \r
-        \r
-        open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-        power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-        # EventMesh.debug_log("set_led_time_arg",msg,open_power,power_off)\r
-        if open_power != None:\r
-            if open_power == 0:\r
-                return\r
-        if power_off != None:\r
-            if power_off == 1:\r
-                return\r
-        usb_in = EventMesh.publish("get_usb")#\r
-        if msg != None:\r
-            if msg[6] != led_mode.POWER_OFF_MODE:#插入usb关机以防不亮红绿灯\r
-                # EventMesh.debug_log("usb_in",usb_in)\r
-                if usb_in != None:\r
-                    if usb_in == 1 or usb_in == 3:#正在充电或者充电已满都不要被打断\r
-                        if self.timer_state == 1:\r
-                            self.timer_state = 0\r
-                            self.timer.stop()\r
-                        if usb_in == 1:\r
-                            if self.working_led_mode != led_mode.CHARGE_IN_MODE:\r
-                                str_buf = [1,1,10,led_mode.LONG_LIGHT_RED,4,2,led_mode.CHARGE_IN_MODE]\r
-                                self.open_timer(str_buf)\r
-                            self.working_led_mode = led_mode.CHARGE_IN_MODE\r
-\r
-                        elif usb_in == 3:\r
-                            if self.working_led_mode != led_mode.CHARGE_FULL_MODE:\r
-                                str_buf = [1,1,10,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.CHARGE_FULL_MODE]\r
-                                self.open_timer(str_buf)\r
-                            self.working_led_mode = led_mode.CHARGE_FULL_MODE\r
-                        \r
-                        return\r
-                    else:\r
-                        if msg[5] != led_mode.HEALTH_LED_MODE:\r
-                            self.working_led_mode = led_mode.OTHER_MEASURE_MODE\r
-\r
-                        get_hr_state = EventMesh.publish("get_hr_state")\r
-                        get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                        \r
-                        wechat_state = EventMesh.publish("get_wechat_state")\r
-                        temp_state = EventMesh.publish("get_temp_state")\r
-                        bp_state = EventMesh.publish("get_bp_state")\r
-                        bg_state = EventMesh.publish("get_bg_state")\r
-                        EventMesh.debug_log("get_hr_state",get_hr_state,get_spo2_state,temp_state,wechat_state,self.working_led_mode)\r
-                        if wechat_state != None: #获取微聊状态\r
-                            if wechat_state == 1:\r
-                                if self.working_led_mode != led_mode.WECHAT_LED_MODE:#如果不在亮微聊模式需要亮微聊模式\r
-                                    self.timer_state = 0\r
-                                    self.timer.stop()\r
-                                    str_buf = [1,1,1,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.WECHAT_LED_MODE]\r
-                                    self.open_timer(str_buf)\r
-                                    self.working_led_mode = led_mode.WECHAT_LED_MODE\r
-                                    return\r
-                                else:\r
-                                    return\r
-                            else:\r
-                                self.wechat_btn = 0\r
-                                # if get_hr_state != 0 or get_spo2_state != 0 or temp_state != 0 or bp_state != 0 or bg_state != 0 :#心率血氧优先级高\r
-                                if get_hr_state == 1 or get_spo2_state == 1 or temp_state == 1 \\r
-                                or bp_state == 1  or bg_state == 1:\r
-                                    if self.working_led_mode != led_mode.HEALTH_LED_MODE:#如果不在亮微聊模式需要亮微聊模式\r
-                                        EventMesh.debug_log("set_hr_blood_led!!!!!!!!!!")\r
-                                        str_buf = [1,2,10*70*2,led_mode.FLASH_LIGHT_RED_GREEN,10,5,led_mode.HEALTH_LED_MODE]#測量成功\r
-                                        self.timer_state = 0\r
-                                        self.timer.stop()\r
-                                        self.open_timer(str_buf)\r
-                                        self.working_led_mode = led_mode.HEALTH_LED_MODE\r
-                                        return\r
-                                    else:\r
-                                        EventMesh.debug_log("set_hr_blood_led stop!!!!!!!!!!")\r
-                                        return\r
-                                else:# 0 2都认为其他模式灯亮 不是测试健康灯\r
-                                    self.working_led_mode = led_mode.OTHER_MEASURE_MODE\r
-        self.open_timer(msg)\r
-\r
-\r
-   \r
-    # EventMesh.publish("set_led_time_arg",[1,2,2*300,led_mode.FLASH_LIGHT_RED_GREEN,2,1,led_mode.HEALTH_LED_MODE])#測量成功\r
-    def led_fun_cb(self, data):#\r
-        if self.led_enable == 0 or self.led_total_time == 0:\r
-            return\r
-        call_state = EventMesh.publish("get_call_state")\r
-        if call_state == None:\r
-            call_state = 0\r
-        if call_state != 0:\r
-            battery = EventMesh.publish("screen_get_battery")\r
-            if battery != None:\r
-                if battery[0] != "1":#在充电得时候\r
-                    get_hr_state = EventMesh.publish("get_hr_state")\r
-                    get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                    get_temp_state = EventMesh.publish("get_temp_state")\r
-                    get_bp_state = EventMesh.publish("get_bp_state")\r
-                    get_bg_state = EventMesh.publish("get_bg_state")\r
-                    if get_hr_state != None and  get_spo2_state != None and get_temp_state != None and get_bp_state != None and get_bg_state != None:\r
-                        if get_hr_state == 1 or get_spo2_state == 1 or get_temp_state == 1 or get_bp_state == 1 or get_bg_state == 1:\r
-                                EventMesh.publish("close_hr_sop2")\r
-                                EventMesh.publish("close_led_pin")\r
-                                return\r
-        # EventMesh.debug_log("self.long_count",self.long_count)\r
-        if self.led_total_time != 0:\r
-            #红灯闪烁\r
-            if self.long_light_mode == led_mode.FLASH_LIGHT_RED :#\r
-                if self.led_mode == 1:\r
-                    if self.led_total_time > 0:\r
-                        self.led_total_time-=1\r
-                        if self.led_total_time > 0:\r
-                            close_led_green()\r
-                            close_led_white()\r
-                            open_led_red()\r
-                        else:\r
-                            EventMesh.publish("stop_led_timer")#关闭所有的灯\r
-                elif self.led_mode == 2:\r
-                    # EventMesh.debug_log("led red!!!!!!!")\r
-                    \r
-                    if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                        close_led_green()\r
-                        close_led_white()\r
-                        open_led_red()\r
-                    else:\r
-                        close_led_green()\r
-                        close_led_white()\r
-                        close_led_red()\r
-                    if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        return\r
-                    self.long_count+=1\r
-            #绿灯闪烁\r
-            elif self.long_light_mode == led_mode.FLASH_LIGHT_GREEN:#\r
-                if self.led_mode == 1:#长亮时间限制\r
-                    \r
-                    if self.led_total_time > 0:\r
-                        self.led_total_time-=1\r
-                        if self.led_total_time > 0:\r
-                            close_led_red()\r
-                            close_led_white()\r
-                            open_led_green()\r
-                        else:\r
-                            EventMesh.publish("stop_led_timer")#关闭所有的灯\r
-                        \r
-\r
-                elif self.led_mode == 2:\r
-                    \r
-                    if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                        close_led_red()\r
-                        close_led_white()\r
-                        open_led_green()\r
-                        pass\r
-                    else:\r
-                        close_led_green()\r
-                        close_led_white()\r
-                        close_led_red()\r
-                        pass\r
-                    \r
-                    if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        return\r
-                    self.long_count+=1\r
-            #蓝灯闪烁 暂时是白色灯\r
-            elif self.long_light_mode == led_mode.FLASH_LIGHT_WHITE:#\r
-                if self.led_mode == 1:#长亮时间限制\r
-                    if self.led_total_time > 0:\r
-                        self.led_total_time-=1\r
-                        if self.led_total_time > 0:\r
-                            close_led_red()\r
-                            close_led_green()\r
-                            open_led_white()\r
-                        else:\r
-                            EventMesh.publish("stop_led_timer")#关闭所有的灯\r
-                elif self.led_mode == 2:\r
-                    if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                        close_led_red()\r
-                        close_led_green()\r
-                        open_led_white()\r
-                        pass\r
-                    else:\r
-                        close_led_green()\r
-                        close_led_white()\r
-                        close_led_red()\r
-                        pass\r
-                    if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        return\r
-                    self.long_count+=1\r
-            #红绿灯闪烁\r
-            elif self.long_light_mode == led_mode.FLASH_LIGHT_RED_GREEN:#\r
-                \r
-                \r
-                if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                    close_led_white()#白色灯\r
-                    close_led_green()\r
-                    open_led_red()\r
-                    pass\r
-                else: \r
-                    close_led_white()\r
-                    close_led_red()\r
-                    open_led_green()\r
-                    pass\r
-                if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    return\r
-                self.long_count+=1\r
-            #红蓝灯闪烁 蓝变成白色灯\r
-            elif self.long_light_mode == led_mode.FLASH_LIGHT_RED_WHITE:#\r
-                if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                    close_led_white()#白色灯\r
-                    close_led_green()\r
-                    open_led_red()\r
-                    pass\r
-                else:\r
-                    close_led_green()\r
-                    close_led_red()\r
-                    open_led_white()\r
-                    pass\r
-                if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    return\r
-                self.long_count+=1\r
-            #蓝绿灯闪烁\r
-            elif self.long_light_mode == led_mode.FLASH_LIGHT_GREEN_WHITE:#\r
-\r
-                \r
-                if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                    close_led_white()#白色灯\r
-                    close_led_red()\r
-                    open_led_green()\r
-                    pass\r
-                else:\r
-                    close_led_green()\r
-                    close_led_red()\r
-                    open_led_white()\r
-                    pass\r
-                if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    return\r
-                self.long_count+=1\r
-            #红灯长亮\r
-            elif self.long_light_mode == led_mode.LONG_LIGHT_RED:#\r
-                close_led_white()#白色灯\r
-                close_led_green()\r
-                open_led_red()\r
-                self.timer.stop()\r
-                self.timer_state = 0\r
-                self.led_total_time = 0\r
-                self.led_enable = 0\r
-                self.led_mode = 0\r
-                self.long_light_mode = 0\r
-                self.led_open_time = 0\r
-                self.led_close_time = 0\r
-                self.working_led_mode = 0\r
-                self.long_count = 0\r
-\r
-            #绿灯长亮\r
-            elif self.long_light_mode == led_mode.LONG_LIGHT_GREEN:#\r
-                close_led_white()#白色灯\r
-                close_led_red()\r
-                open_led_green()\r
-                self.timer.stop()\r
-                self.timer_state = 0\r
-                self.led_total_time = 0\r
-                self.led_enable = 0\r
-                self.led_mode = 0\r
-                self.long_light_mode = 0\r
-                self.led_open_time = 0\r
-                self.led_close_time = 0\r
-                self.working_led_mode = 0\r
-                self.long_count = 0\r
-            #蓝灯长亮\r
-            elif self.long_light_mode == led_mode.LONG_LIGHT_WHITE:#\r
-                close_led_green()#白色灯\r
-                close_led_red()\r
-                open_led_white()\r
-                self.timer.stop()\r
-                self.timer_state = 0\r
-                self.led_total_time = 0\r
-                self.led_enable = 0\r
-                self.led_mode = 0\r
-                self.long_light_mode = 0\r
-                self.led_open_time = 0\r
-                self.led_close_time = 0\r
-                self.working_led_mode = 0\r
-                self.long_count = 0\r
-    \r
-    def close_led_pin(self, event, msg):\r
-        EventMesh.debug_log("close_led_pin!!!")\r
-\r
-        self.timer.stop()\r
-        self.timer_state = 0\r
-        self.led_total_time = 0\r
-        self.led_enable = 0\r
-        self.led_mode = 0\r
-        self.long_light_mode = 0\r
-        self.led_open_time = 0\r
-        self.led_close_time = 0\r
-        self.working_led_mode = 0\r
-        self.long_count = 0\r
-        close_led_red()\r
-        close_led_green()\r
-        close_led_white()\r
-\r
-    def stop_led_timer(self, event, msg):\r
-        EventMesh.publish("close_all_led")#关闭所有的灯\r
-    \r
-    def close_all_led(self, event, msg):\r
-        self.close_all_led_do(0)\r
-    def close_all_led_do(self,data):   \r
-        open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-        if open_power != None:\r
-            if open_power == 0:\r
-                return\r
-        open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-        if open_power_off != None:\r
-            if open_power_off == 1:\r
-                return\r
-        usb_in = EventMesh.publish("get_usb")#\r
-        open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-        if open_power_off != None:\r
-            if open_power_off != 1:\r
-                if usb_in != None:\r
-                    if usb_in == 1 or usb_in == 3:#正在充电或者充电已满都不要被打断\r
-                        if self.timer_state == 1:\r
-                            self.timer_state = 0\r
-                            self.timer.stop()\r
-                        return\r
-                    else:\r
-                        get_hr_state = EventMesh.publish("get_hr_state")\r
-                        get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                        \r
-                        wechat_state = EventMesh.publish("get_wechat_state")\r
-                        temp_state = EventMesh.publish("get_temp_state")\r
-                        bp_state = EventMesh.publish("get_bp_state")\r
-                        bg_state = EventMesh.publish("get_bg_state")\r
-                        # EventMesh.debug_log("get_hr_state",get_hr_state,get_spo2_state,wechat_state,self.working_led_mode)\r
-                        if wechat_state != None: #获取微聊状态\r
-                            if wechat_state == 1 or get_spo2_state == 1  or get_hr_state == 1  or temp_state == 1 or bp_state == 1 \\r
-                                or bg_state == 1 :\r
-                                return\r
-        if self.timer_state == 1:\r
-            self.timer.stop()\r
-        self.timer_state = 0\r
-        self.led_total_time = 0\r
-        self.led_enable = 0\r
-        self.led_mode = 0\r
-        self.long_light_mode = 0\r
-        self.led_open_time = 0\r
-        self.led_close_time = 0\r
-        self.working_led_mode = 0\r
-        self.long_count = 0\r
-        close_led_red()\r
-        close_led_green()\r
-        close_led_white()\r
-        # EventMesh.debug_log("close led!!!")\r
-\r
-    def led_test_fun_cb(self, data):\r
-        return\r
-   \r
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/led_d15.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/led_d15.py
deleted file mode 100644 (file)
index d31a50d..0000000
+++ /dev/null
@@ -1,590 +0,0 @@
-from common import Abstract\r
-import osTimer\r
-import EventMesh\r
-from machine import Pin\r
-import utime\r
-from queue import Queue\r
-import _thread\r
-import usys\r
-if EventMesh.model == "D15":\r
-\r
-    led_red = Pin(Pin.GPIO36, Pin.OUT, Pin.PULL_PD, 0)\r
-\r
-    led_green = Pin(Pin.GPIO44, Pin.OUT, Pin.PULL_PD, 0)\r
-\r
-    led_white = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_PD, 0)\r
-\r
-\r
-\r
-    def green_light_fast(num,freq):#快闪 num 循环闪烁次数 freq 交替闪烁的频率ms单位 \r
-        for i in range(num):\r
-            led_green.write(1)\r
-            utime.sleep_ms(freq)\r
-            led_green.write(0)\r
-            utime.sleep_ms(freq)\r
-\r
-    def red_light_fast(num,freq):#快闪 #快闪 num 循环闪烁次数 freq 交替闪烁的频率ms单位 \r
-        for i in range(num):\r
-            led_red.write(1)\r
-            utime.sleep_ms(freq)\r
-            led_red.write(0)\r
-            utime.sleep_ms(freq)\r
-    def red_light_slow(num,freq):#慢闪 #快闪 num 循环闪烁次数 freq 交替闪烁的频率ms单位 \r
-        for i in range(10):\r
-            led_red.write(1)\r
-            utime.sleep_ms(500)\r
-            led_red.write(0)\r
-            utime.sleep_ms(500)\r
-\r
-    def red_green_light(num,freq):#红绿灯交替闪烁 \r
-        for i in range(num):\r
-            led_red.write(1)\r
-            utime.sleep_ms(freq)\r
-            led_red.write(0)\r
-            utime.sleep_ms(freq)\r
-            led_green.write(1)\r
-            utime.sleep_ms(freq)\r
-            led_green.write(0)\r
-            utime.sleep_ms(freq)\r
-\r
-    def open_led_red():\r
-        led_red.write(1)\r
-\r
-    def close_led_red():\r
-        led_red.write(0)\r
-\r
-    def open_led_white():\r
-        led_white.write(1)\r
-\r
-    def close_led_white():\r
-        led_white.write(0)\r
-\r
-    def open_led_green():\r
-        led_green.write(1)\r
-\r
-    def close_led_green():\r
-        led_green.write(0)\r
-\r
-\r
-\r
-    LED_TIMER_OUT = 100 \r
-    class led_mode:\r
-        LONG_LIGHT_RED = 1\r
-        LONG_LIGHT_GREEN = 2\r
-        LONG_LIGHT_WHITE = 3\r
-        FLASH_LIGHT_RED = 4\r
-        FLASH_LIGHT_GREEN = 5\r
-        FLASH_LIGHT_WHITE = 6\r
-        FLASH_LIGHT_RED_GREEN = 7\r
-        FLASH_LIGHT_RED_WHITE = 8\r
-        FLASH_LIGHT_GREEN_WHITE = 9\r
-        LIGHT_NONE = FLASH_LIGHT_GREEN_WHITE+1\r
-\r
-        DEFAULT_LONG_LIGHT_MODE = 0+LIGHT_NONE #默认是关闭\r
-        OPEN_LONG_LIGHT_MODE = 1+LIGHT_NONE#开启\r
-        CLOSE_LONG_LIGHT_MODE = 2+LIGHT_NONE#需要关闭\r
-        INTERVAL_LIGHT_RED  = 3+LIGHT_NONE\r
-        INTERVAL_LIGHT_GREEN  = 4+LIGHT_NONE\r
-        INTERVAL_LIGHT_WHITE  = 5+LIGHT_NONE\r
-\r
-        OTHER_MEASURE_MODE = 200\r
-\r
-        HEALTH_LED_MODE = 201 #健康测试模式\r
-        WECHAT_LED_MODE = 202 #微聊模式\r
-        CHARGE_IN_MODE = 203 #充电模式\r
-        CHARGE_OUT_MODE = 204 #充电已移出\r
-        CHARGE_FULL_MODE = 205 #充电已满\r
-        POWER_OFF_MODE = 206 #关机模式\r
-\r
-        VIDEO_MEASURE_MODE = 207 #视频通话\r
-\r
-\r
-\r
-\r
-\r
-    class ledEventManager(Abstract):#灯事件\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-            self.freq_time = 0#交替闪烁时间 最小100ms \r
-            self.freq_num = 0#交替闪烁的次数\r
-            self.flash_light = 0\r
-            self.total_time = 0\r
-            self.long_count = 0\r
-            self.timer_state = 0\r
-            self.total_count = 0\r
-            self.freq = 0\r
-            self.led_state = 0\r
-            self.long_light_mode = 0\r
-            self.hr_state = 0\r
-            self.wechat_btn = 1\r
-            self.need_hr_btn = 0\r
-            self.led_open_time = 0\r
-            self.led_close_time = 0\r
-            self.led_total_time = 0#闪的总时间\r
-            self.led_enable = 0\r
-            self.led_mode = 0\r
-            self.working_led_mode = None\r
-            self.ledInfo_queue = Queue()\r
-            _thread.stack_size(10*1024)\r
-            _thread.start_new_thread(self.ledInfo_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            EventMesh.subscribe("publish_message_event_ledInfo",self.publish_message_event_ledInfo)\r
-            pass\r
-        \r
-            \r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_led_time_arg", self.set_led_time_arg)#设置参数\r
-            EventMesh.subscribe("get_led_state", self.get_led_state)#设置参数\r
-\r
-            EventMesh.subscribe("set_hr_blood_led", self.set_hr_blood_led)#设置参数\r
-\r
-            EventMesh.subscribe("set_find_watch_led", self.set_find_watch_led)#设置参数\r
-\r
-            EventMesh.subscribe("close_all_led", self.close_all_led)#设置参数\r
-\r
-            EventMesh.subscribe("stop_led_timer", self.stop_led_timer)#设置参数\r
-\r
-            EventMesh.subscribe("read_red_led_level", self.read_red_led_level)#读取红灯的电平状态\r
-\r
-            EventMesh.subscribe("read_green_led_level", self.read_green_led_level)#读取绿灯的电平状态\r
-\r
-            EventMesh.subscribe("read_white_led_level", self.read_white_led_level)#读取白灯的电平状态\r
-\r
-            EventMesh.subscribe("close_led_pin", self.close_led_pin)#读取白灯的电平状态def close_led_pin(self, event, msg):\r
-\r
-\r
-        def ledInfo_queue_thread(self):\r
-            while True:\r
-                data = self.ledInfo_queue.get()\r
-                #EventMesh.debug_log("ledInfo_queue:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        EventMesh.debug_log("ledInfo_queue:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-        def publish_message_event_ledInfo(self,event,msg):\r
-            self.ledInfo_queue.put(msg)\r
-\r
-        def publish_led_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_ledInfo",{"func":self.led_fun_cb,"data":0})  \r
-\r
-        def read_red_led_level(self, event, msg): #\r
-            red_level = led_red.read()\r
-            return red_level\r
-\r
-        def read_green_led_level(self, event, msg): #\r
-            green_level = led_green.read()\r
-            return green_level\r
-        \r
-        def read_white_led_level(self, event, msg): #\r
-            white_level = led_green.read()\r
-            return white_level\r
-\r
-        def set_hr_blood_led(self, event, msg): #\r
-            EventMesh.debug_log("set_hr_blood_led :{}".format(msg))\r
-            if msg != None:\r
-                if msg == 1:\r
-                    EventMesh.publish("set_led_time_arg",[1,2,10*70*2,led_mode.FLASH_LIGHT_RED_GREEN,10,5,led_mode.HEALTH_LED_MODE])#測量成功\r
-                    # EventMesh.publish("set_led_time_arg",[1000,200,300,led_mode.FLASH_LIGHT_RED_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.HEALTH_LED_MODE])#開始測量\r
-                elif msg == 2:\r
-                    EventMesh.publish("set_led_time_arg",[1,2,60,led_mode.FLASH_LIGHT_GREEN,60,30,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    # EventMesh.publish("set_led_time_arg",[3000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                elif msg == 3:#测量失败\r
-                    EventMesh.publish("stop_led_timer")\r
-                    # EventMesh.publish("set_led_time_arg",[1,1,1,led_mode.FLASH_LIGHT_RED,31,10*3,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    pass\r
-                    # EventMesh.publish("set_led_time_arg",[1,1,30,led_mode.FLASH_LIGHT_RED,31,10*3,led_mode.OTHER_MEASURE_MODE])#测量失败\r
-                    #加音频文件\r
-\r
-        def set_find_watch_led(self, event, msg): #查找设备\r
-            EventMesh.publish("OPEN_FIND_WATCH")#\r
-        \r
-            # EventMesh.publish("set_led_time_arg",[37000,1000,1,led_mode.LONG_LIGHT_GREEN,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#查找设备绿灯长亮37s\r
-\r
-        def get_led_state(self, event, msg): #\r
-            return self.timer_state\r
-        def open_timer(self,msg): #msg 0 使能 1总的时间 2 灯模式 3 开启时间 4 关闭时间 \r
-            if msg != None:\r
-                if len(msg) != 0:\r
-                    self.led_total_time = msg[2]#\r
-                    # EventMesh.debug_log("open_timer:{}".format(msg))\r
-                    if self.led_total_time != None:\r
-\r
-                        if self.led_total_time > 0:\r
-                            self.led_enable=msg[0]\r
-                            if self.led_enable != 0:\r
-                                self.led_mode = msg[1]\r
-                                self.long_light_mode = msg[3]\r
-                                self.led_open_time = msg[4]\r
-                                self.led_close_time = msg[5]\r
-                                self.working_led_mode = msg[6]\r
-                                self.long_count = 0\r
-\r
-                                if self.timer_state == 0:\r
-                                    self.timer_state = 1\r
-                                    self.timer.stop()\r
-                                    # self.timer.start(LED_TIMER_OUT,1,self.led_fun_cb)\r
-                                    self.timer.start(LED_TIMER_OUT,1,self.publish_led_event_cb)\r
-                    \r
-            \r
-\r
-\r
-        def set_led_time_arg(self, event, msg): #msg \r
-            \r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            # EventMesh.debug_log("set_led_time_arg",msg,open_power,power_off)\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            if power_off != None:\r
-                if power_off == 1:\r
-                    return\r
-            usb_in = EventMesh.publish("get_usb")#\r
-\r
-            if msg != None:\r
-                if msg[6] != led_mode.POWER_OFF_MODE:#插入usb关机以防不亮红绿灯\r
-                    # EventMesh.debug_log("usb_in",usb_in)\r
-                    if usb_in != None:\r
-                        if usb_in == 1 or usb_in == 3:#正在充电或者充电已满都不要被打断\r
-                            if self.timer_state == 1:\r
-                                self.timer_state = 0\r
-                                self.timer.stop()\r
-                            if usb_in == 1:\r
-                                if self.working_led_mode != led_mode.CHARGE_IN_MODE:\r
-                                    str_buf = [1,1,10,led_mode.LONG_LIGHT_RED,4,2,led_mode.CHARGE_IN_MODE]\r
-                                    self.open_timer(str_buf)\r
-                                self.working_led_mode = led_mode.CHARGE_IN_MODE\r
-\r
-                            elif usb_in == 3:\r
-                                if self.working_led_mode != led_mode.CHARGE_FULL_MODE:\r
-                                    str_buf = [1,1,10,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.CHARGE_FULL_MODE]\r
-                                    self.open_timer(str_buf)\r
-                                self.working_led_mode = led_mode.CHARGE_FULL_MODE\r
-                            \r
-                            return\r
-                        else:\r
-                            if msg[5] != led_mode.HEALTH_LED_MODE:\r
-                                self.working_led_mode = led_mode.OTHER_MEASURE_MODE\r
-\r
-                            get_hr_state = EventMesh.publish("get_hr_state")\r
-                            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                            \r
-                            wechat_state = EventMesh.publish("get_wechat_state")\r
-                            temp_state = EventMesh.publish("get_temp_state")\r
-                            bp_state = EventMesh.publish("get_bp_state")\r
-                            bg_state = EventMesh.publish("get_bg_state")\r
-                            EventMesh.debug_log("get_hr_state",get_hr_state,get_spo2_state,temp_state,wechat_state,self.working_led_mode)\r
-                            if wechat_state != None: #获取微聊状态\r
-                                if wechat_state == 1:\r
-                                    if self.working_led_mode != led_mode.WECHAT_LED_MODE:#如果不在亮微聊模式需要亮微聊模式\r
-                                        self.timer_state = 0\r
-                                        self.timer.stop()\r
-                                        str_buf = [1,1,1,led_mode.LONG_LIGHT_GREEN,4,2,led_mode.WECHAT_LED_MODE]\r
-                                        self.open_timer(str_buf)\r
-                                        self.working_led_mode = led_mode.WECHAT_LED_MODE\r
-                                        return\r
-                                    else:\r
-                                        return\r
-                                else:\r
-                                    self.wechat_btn = 0\r
-                                    # if get_hr_state != 0 or get_spo2_state != 0 or temp_state != 0 or bp_state != 0 or bg_state != 0 :#心率血氧优先级高\r
-                                    if get_hr_state == 1 or get_spo2_state == 1 or temp_state == 1 \\r
-                                    or bp_state == 1  or bg_state == 1:\r
-                                        if self.working_led_mode != led_mode.HEALTH_LED_MODE:#如果不在亮微聊模式需要亮微聊模式\r
-                                            EventMesh.debug_log("set_hr_blood_led!!!!!!!!!!")\r
-                                            str_buf = [1,2,10*70*2,led_mode.FLASH_LIGHT_RED_GREEN,10,5,led_mode.HEALTH_LED_MODE]#測量成功\r
-                                            self.timer_state = 0\r
-                                            self.timer.stop()\r
-                                            self.open_timer(str_buf)\r
-                                            self.working_led_mode = led_mode.HEALTH_LED_MODE\r
-                                            return\r
-                                        else:\r
-                                            EventMesh.debug_log("set_hr_blood_led stop!!!!!!!!!!")\r
-                                            return\r
-                                    else:# 0 2都认为其他模式灯亮 不是测试健康灯\r
-                                        self.working_led_mode = led_mode.OTHER_MEASURE_MODE\r
-\r
-            if EventMesh.publish("get_video_state") != 0:\r
-                if msg[6] != led_mode.VIDEO_MEASURE_MODE:\r
-                    return\r
-            self.open_timer(msg)\r
-\r
-\r
-    \r
-        # EventMesh.publish("set_led_time_arg",[1,2,2*300,led_mode.FLASH_LIGHT_RED_GREEN,2,1,led_mode.HEALTH_LED_MODE])#測量成功\r
-        def led_fun_cb(self, data):#\r
-            if self.led_enable == 0 or self.led_total_time == 0:\r
-                return\r
-            call_state = EventMesh.publish("get_call_state")\r
-            if call_state == None:\r
-                call_state = 0\r
-            if call_state != 0:\r
-                battery = EventMesh.publish("screen_get_battery")\r
-                if battery != None:\r
-                    if battery[0] != "1":#在充电得时候\r
-                        get_hr_state = EventMesh.publish("get_hr_state")\r
-                        get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                        get_temp_state = EventMesh.publish("get_temp_state")\r
-                        get_bp_state = EventMesh.publish("get_bp_state")\r
-                        get_bg_state = EventMesh.publish("get_bg_state")\r
-                        if get_hr_state != None and  get_spo2_state != None and get_temp_state != None and get_bp_state != None and get_bg_state != None:\r
-                            if get_hr_state == 1 or get_spo2_state == 1 or get_temp_state == 1 or get_bp_state == 1 or get_bg_state == 1:\r
-                                    EventMesh.publish("close_hr_sop2")\r
-                                    EventMesh.publish("close_led_pin")\r
-                                    return\r
-            # EventMesh.debug_log("self.long_count",self.long_count)\r
-            if self.led_total_time != 0:\r
-                #红灯闪烁\r
-                if self.long_light_mode == led_mode.FLASH_LIGHT_RED :#\r
-                    if self.led_mode == 1:\r
-                        if self.led_total_time > 0:\r
-                            self.led_total_time-=1\r
-                            if self.led_total_time > 0:\r
-                                close_led_green()\r
-                                close_led_white()\r
-                                open_led_red()\r
-                            else:\r
-                                EventMesh.publish("stop_led_timer")#关闭所有的灯\r
-                    elif self.led_mode == 2:\r
-                        # EventMesh.debug_log("led red!!!!!!!")\r
-                        \r
-                        if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                            close_led_green()\r
-                            close_led_white()\r
-                            open_led_red()\r
-                        else:\r
-                            close_led_green()\r
-                            close_led_white()\r
-                            close_led_red()\r
-                        if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            return\r
-                        self.long_count+=1\r
-                #绿灯闪烁\r
-                elif self.long_light_mode == led_mode.FLASH_LIGHT_GREEN:#\r
-                    if self.led_mode == 1:#长亮时间限制\r
-                        \r
-                        if self.led_total_time > 0:\r
-                            self.led_total_time-=1\r
-                            if self.led_total_time > 0:\r
-                                close_led_red()\r
-                                close_led_white()\r
-                                open_led_green()\r
-                            else:\r
-                                EventMesh.publish("stop_led_timer")#关闭所有的灯\r
-                            \r
-\r
-                    elif self.led_mode == 2:\r
-                        \r
-                        if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                            close_led_red()\r
-                            close_led_white()\r
-                            open_led_green()\r
-                            pass\r
-                        else:\r
-                            close_led_green()\r
-                            close_led_white()\r
-                            close_led_red()\r
-                            pass\r
-                        \r
-                        if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            return\r
-                        self.long_count+=1\r
-                #蓝灯闪烁 暂时是白色灯\r
-                elif self.long_light_mode == led_mode.FLASH_LIGHT_WHITE:#\r
-                    if self.led_mode == 1:#长亮时间限制\r
-                        if self.led_total_time > 0:\r
-                            self.led_total_time-=1\r
-                            if self.led_total_time > 0:\r
-                                close_led_red()\r
-                                close_led_green()\r
-                                open_led_white()\r
-                            else:\r
-                                EventMesh.publish("stop_led_timer")#关闭所有的灯\r
-                    elif self.led_mode == 2:\r
-                        if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                            close_led_red()\r
-                            close_led_green()\r
-                            open_led_white()\r
-                            pass\r
-                        else:\r
-                            close_led_green()\r
-                            close_led_white()\r
-                            close_led_red()\r
-                            pass\r
-                        if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            return\r
-                        self.long_count+=1\r
-                #红绿灯闪烁\r
-                elif self.long_light_mode == led_mode.FLASH_LIGHT_RED_GREEN:#\r
-                    \r
-                    \r
-                    if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                        close_led_white()#白色灯\r
-                        close_led_green()\r
-                        open_led_red()\r
-                        pass\r
-                    else: \r
-                        close_led_white()\r
-                        close_led_red()\r
-                        open_led_green()\r
-                        pass\r
-                    if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        return\r
-                    self.long_count+=1\r
-                #红蓝灯闪烁 蓝变成白色灯\r
-                elif self.long_light_mode == led_mode.FLASH_LIGHT_RED_WHITE:#\r
-                    if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                        close_led_white()#白色灯\r
-                        close_led_green()\r
-                        open_led_red()\r
-                        pass\r
-                    else:\r
-                        close_led_green()\r
-                        close_led_red()\r
-                        open_led_white()\r
-                        pass\r
-                    if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        return\r
-                    self.long_count+=1\r
-                #蓝绿灯闪烁\r
-                elif self.long_light_mode == led_mode.FLASH_LIGHT_GREEN_WHITE:#\r
-\r
-                    \r
-                    if self.long_count % (self.led_open_time) <=  self.led_close_time: # 4*cnt cnt 多少次 4 开启时间保护关闭时间 2 关闭时间 100ms 4-2关闭时间为200ms 开启时间也为200ms \r
-                        close_led_white()#白色灯\r
-                        close_led_red()\r
-                        open_led_green()\r
-                        pass\r
-                    else:\r
-                        close_led_green()\r
-                        close_led_red()\r
-                        open_led_white()\r
-                        pass\r
-                    if self.long_count >= self.led_total_time-1:#大于总的时间 4\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        return\r
-                    self.long_count+=1\r
-                #红灯长亮\r
-                elif self.long_light_mode == led_mode.LONG_LIGHT_RED:#\r
-                    close_led_white()#白色灯\r
-                    close_led_green()\r
-                    open_led_red()\r
-                    self.timer.stop()\r
-                    self.timer_state = 0\r
-                    self.led_total_time = 0\r
-                    self.led_enable = 0\r
-                    self.led_mode = 0\r
-                    self.long_light_mode = 0\r
-                    self.led_open_time = 0\r
-                    self.led_close_time = 0\r
-                    self.working_led_mode = 0\r
-                    self.long_count = 0\r
-\r
-                #绿灯长亮\r
-                elif self.long_light_mode == led_mode.LONG_LIGHT_GREEN:#\r
-                    close_led_white()#白色灯\r
-                    close_led_red()\r
-                    open_led_green()\r
-                    self.timer.stop()\r
-                    self.timer_state = 0\r
-                    self.led_total_time = 0\r
-                    self.led_enable = 0\r
-                    self.led_mode = 0\r
-                    self.long_light_mode = 0\r
-                    self.led_open_time = 0\r
-                    self.led_close_time = 0\r
-                    self.working_led_mode = 0\r
-                    self.long_count = 0\r
-                #蓝灯长亮\r
-                elif self.long_light_mode == led_mode.LONG_LIGHT_WHITE:#\r
-                    close_led_green()#白色灯\r
-                    close_led_red()\r
-                    open_led_white()\r
-                    self.timer.stop()\r
-                    self.timer_state = 0\r
-                    self.led_total_time = 0\r
-                    self.led_enable = 0\r
-                    self.led_mode = 0\r
-                    self.long_light_mode = 0\r
-                    self.led_open_time = 0\r
-                    self.led_close_time = 0\r
-                    self.working_led_mode = 0\r
-                    self.long_count = 0\r
-        \r
-        def close_led_pin(self, event, msg):\r
-            EventMesh.debug_log("close_led_pin!!!")\r
-\r
-            self.timer.stop()\r
-            self.timer_state = 0\r
-            self.led_total_time = 0\r
-            self.led_enable = 0\r
-            self.led_mode = 0\r
-            self.long_light_mode = 0\r
-            self.led_open_time = 0\r
-            self.led_close_time = 0\r
-            self.working_led_mode = 0\r
-            self.long_count = 0\r
-            close_led_red()\r
-            close_led_green()\r
-            close_led_white()\r
-\r
-        def stop_led_timer(self, event, msg):\r
-            EventMesh.publish("close_all_led")#关闭所有的灯\r
-        \r
-        def close_all_led(self, event, msg):\r
-            self.close_all_led_do(0)\r
-        def close_all_led_do(self,data):   \r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 0:\r
-                    return\r
-            usb_in = EventMesh.publish("get_usb")#\r
-            open_power_off = EventMesh.publish("get_power_off_state")#获取开机标识\r
-            if open_power_off != None:\r
-                if open_power_off != 1:\r
-                    if usb_in != None:\r
-                        if usb_in == 1 or usb_in == 3:#正在充电或者充电已满都不要被打断\r
-                            if self.timer_state == 1:\r
-                                self.timer_state = 0\r
-                                self.timer.stop()\r
-                            return\r
-                        else:\r
-                            get_hr_state = EventMesh.publish("get_hr_state")\r
-                            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                            \r
-                            wechat_state = EventMesh.publish("get_wechat_state")\r
-                            temp_state = EventMesh.publish("get_temp_state")\r
-                            bp_state = EventMesh.publish("get_bp_state")\r
-                            bg_state = EventMesh.publish("get_bg_state")\r
-                            # EventMesh.debug_log("get_hr_state",get_hr_state,get_spo2_state,wechat_state,self.working_led_mode)\r
-                            if wechat_state != None: #获取微聊状态\r
-                                if wechat_state == 1 or get_spo2_state == 1  or get_hr_state == 1  or temp_state == 1 or bp_state == 1 \\r
-                                    or bg_state == 1 :\r
-                                    return\r
-            if self.timer_state == 1:\r
-                self.timer.stop()\r
-            self.timer_state = 0\r
-            self.led_total_time = 0\r
-            self.led_enable = 0\r
-            self.led_mode = 0\r
-            self.long_light_mode = 0\r
-            self.led_open_time = 0\r
-            self.led_close_time = 0\r
-            self.working_led_mode = 0\r
-            self.long_count = 0\r
-            close_led_red()\r
-            close_led_green()\r
-            close_led_white()\r
-            # EventMesh.debug_log("close led!!!")\r
-\r
-        def led_test_fun_cb(self, data):\r
-            return\r
-    \r
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/main_1.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/main_1.py
deleted file mode 100644 (file)
index 16dbe9c..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-import sms\r
-\r
-class App(object):\r
-    def __init__(self):\r
-        self.managers = []\r
-\r
-    def append_manager(self, manager):\r
-        if isinstance(manager, Abstract):\r
-            manager.post_processor_after_instantiation()\r
-            self.managers.append(manager)\r
-        return self\r
-\r
-    def start(self):\r
-        for manager in self.managers:\r
-            manager.post_processor_before_initialization()\r
-            manager.initialization()\r
-            manager.post_processor_after_initialization()\r
-\r
-\r
-class watchApp(App):\r
-    def __init__(self):\r
-        super(watchApp, self).__init__()\r
-        self.__ui = None\r
-\r
-    def set_ui(self, ui):\r
-        self.__ui = ui\r
-\r
-    def start(self):\r
-        if self.__ui is not None:\r
-            self.__ui.start()\r
-        super().start()\r
-\r
-\r
-\r
-if __name__ == '__main__':\r
-    import uos\r
-    import ql_fs\r
-    import utime\r
-    if ql_fs.path_exists("/ext") == False:\r
-        ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3)\r
-        uos.mount(ldev,'/ext')\r
-    res = uos.statvfs("/ext")\r
-    res = list(res)\r
-    print('总ext空间:{} MB,剩余空间:{} MB'.format((((res[0] * res[2]) / 1024 / 1024)),((res[0] * res[3]) / 1024 / 1024)))\r
-    print("init1:{}".format(utime.localtime()))\r
-    import EventMesh\r
-    from common import Abstract\r
-    print("init2:{}".format(utime.localtime()))\r
-    from lcd import tp_cst816\r
-    print("init3:{}".format(utime.localtime()))\r
-\r
-    from usr.ui_main_menu import MainMenuScreen\r
-    # from ui_WatchFaceScreen import WatchFaceScreen\r
-    \r
-    from appFactoryMode import  FactoryModeLocationScreen,FactoryModeScreen ,FactoryModeAlipayInitScreen\r
-    import ui as _ui\r
-    # import ui as _ui\r
-    print("init4:{}".format(utime.localtime()))\r
-    ui = _ui.UI()\r
-    ui.post_processor_after_instantiation()\r
-    ui.add_screen(MainMenuScreen()) \r
-    EventMesh.publish("load_screen", {"screen": "main_menu"})\r
-    print("init5:{}".format(utime.localtime()))\r
-    \r
-    ui.add_screen(_ui.PopupScreen()) \r
-    ui.add_screen(_ui.PhoneScreen()) \r
-    ui.add_screen(_ui.HeartrateScreen()) \r
-    import ui_setting as _ui_setting\r
-    ui.add_screen(_ui_setting.SettingScreen()) \r
-    ui.add_screen(_ui.ToolboxScreen()) \r
-    ui.add_screen(_ui.StepScreen()) \r
-    ui.add_screen(_ui.CountdownScreen()) \r
-    ui.add_screen(_ui.StopwatchScreen()) \r
-    ui.add_screen(_ui.WeatherScreen()) \r
-    ui.add_screen(_ui.Spo2Screen()) \r
-    ui.add_screen(_ui.TemperatureScreen()) \r
-    ui.add_screen(_ui.ContactsScreen()) \r
-    from appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen\r
-    ui.add_screen(WechatScreen()) \r
-    from alarm import ClkListScreen,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen\r
-  \r
-    ui.add_screen(ClkListScreen()) \r
-    ui.add_screen(_ui.CountdownEndScreen()) \r
-    ui.add_screen(NewEditClk()) \r
-    ui.add_screen(CLKTimeScreen()) \r
-    ui.add_screen(ClkPeriod()) \r
-  \r
-    # ui.add_screen(_ui_setting.LanguageScreen()) \r
-    ui.add_screen(_ui_setting.DialswitchScreen()) \r
-    # ui.add_screen(_ui.ThemeswitchScreen()) \r
-    ui.add_screen(_ui_setting.ImeiScreen()) \r
-    ui.add_screen(_ui_setting.AppScreen()) \r
-    ui.add_screen(_ui_setting.BrightnessScreen()) \r
-    ui.add_screen(_ui_setting.VolumeScreen()) \r
-    ui.add_screen(_ui_setting.RestoreScreen()) \r
-    ui.add_screen(_ui_setting.PoweroffScreen()) \r
-    ui.add_screen(_ui_setting.VersionScreen()) \r
-    ui.add_screen(_ui_setting.UpdateScreen()) \r
-    ui.add_screen(_ui_setting.AlarmvolumeScreen()) \r
-    ui.add_screen(_ui_setting.MsgvolumeScreen()) \r
-    ui.add_screen(_ui_setting.PhoneringScreen()) \r
-    ui.add_screen(_ui_setting.totalvolumeScreen()) \r
-    ui.add_screen(_ui_setting.PoweroffConfirmScreen()) \r
-    ui.add_screen(_ui.DialingScreen()) \r
-    ui.add_screen(_ui.CallLogScreen()) \r
-    from appAlipay import Alipay ,AlipayOpenScreen,Alipay_1_1,Alipay_invite,Alipay_inviting,\\r
-    Alipay_success,Alipay_paycode,Alipay_pay_success,Alipay_collect,Alipay_parent\r
-    ui.add_screen(AlipayOpenScreen()) \r
-    ui.add_screen(Alipay_1_1())\r
-    ui.add_screen(Alipay_invite())  \r
-    ui.add_screen(Alipay_inviting()) \r
-    ui.add_screen(Alipay_success()) \r
-    ui.add_screen(Alipay_paycode()) \r
-    ui.add_screen(Alipay_pay_success()) \r
-    ui.add_screen(Alipay_collect()) \r
-    ui.add_screen(Alipay_parent()) \r
-    ui.add_screen(_ui.UIFINDScreen())\r
-    ui.add_screen(_ui.MsgDetailScreen())\r
-    ui.add_screen(_ui.IncomingCallScreen())\r
-    ui.add_screen(_ui.OnCallScreen())\r
-    ui.add_screen(_ui.MessageFullScreen())\r
-    # ui.add_screen(_ui.PowerOnScreen())\r
-    ui.add_screen(FactoryModeLocationScreen())\r
-    ui.add_screen(FactoryModeScreen())\r
-    ui.add_screen(FactoryModeAlipayInitScreen())\r
-    ui.add_screen(PopupAlarmScreen())\r
-    ui.add_screen(_ui.LowPowerScreen())\r
-    ui.add_screen(_ui.NewMessageScreen())\r
-    ui.add_screen(NewWechatPopupScreen())\r
-    ui.add_screen(HealthScreen())\r
-    # ui.add_screen(_ui.Setting3Screen())  \r
-    print("init6:{}".format(utime.localtime()))\r
-    \r
-\r
-    from protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\\r
-        TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,\\r
-            ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol,WDSTART_ProtoCol,LOWBAT_ProtoCol,sosHome_dial_ProtoCol,SockManager,NetManager\r
-    import mgr as mgr\r
-    print("init7:{}".format(utime.localtime()))\r
-    \r
-    from mgr import ConfigStoreManager,getBootOffManager,getSosFlagManager,CountdownManager, LocationManager, getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, getplayAudiodStateManager,\\r
-    AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldTimeManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getTempTimeManager,getLowBatManager\r
-    print("init8:{}".format(utime.localtime()))\r
-    \r
-    \r
-    #from ui_WatchFaceScreen import WatchFaceScreen \r
-    \r
-    \r
-    # from usr.test_sms import HRSTART_ProtoCol,getHrTimeManager,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,getBrightnessManager,\\r
-    # getStorageDataManager\r
-    print("init9:{}".format(utime.localtime()))\r
-   #from usr.ui_wechat import WechatScreen,TK_ProtoCol\r
-\r
-    print("init10:{}".format(utime.localtime()))\r
-    \r
-\r
-    app = watchApp()\r
-    app.set_ui(ui)\r
-    app.append_manager(mgr.AlarmVolumeLevelManager()) \\r
-        .append_manager(mgr.MsgVolumeLevelManager()) \\r
-        .append_manager(mgr.PhoneVolumeLevelManager()) \\r
-        .append_manager(mgr.DeviceInfoManager()) \\r
-        .append_manager(mgr.BatteryManager()) \\r
-           \r
-        # .append_manager(mgr.StopwatchManager()) \\r
-        # .append_manager(mgr.CountdownManager()) \\r
-\r
-   \r
-    app.append_manager(ConfigStoreManager())\r
-    app.append_manager(NetManager())\r
-    app.append_manager(LocationManager())\r
-    app.append_manager(AddrBookManager())\r
-    app.append_manager(mgr.MsgManager())\r
-    app.append_manager(MsgdetailManager())\r
-    app.append_manager(mgr.CallLogManager())\r
-    app.append_manager(mgr.getWeatherDataManager())\r
-    app.append_manager(PhoneCallingManager())\r
-    app.append_manager(ClockManager())\r
-    app.append_manager(gethistoryDataManager())\r
-    app.append_manager(getHrTimeManager())\r
-    app.append_manager(getBrightnessManager())\r
-    app.append_manager(getStorageDataManager())\r
-    app.append_manager(getUpLoadDataManager())\r
-    app.append_manager(getVolumSizeManager())\r
-    app.append_manager(getTempTimeManager())\r
-    app.append_manager(getplayAudiodStateManager())\r
-    app.append_manager(getLowBatManager())\r
-    app.append_manager(getBootOffManager())\r
-    app.append_manager(getOldTimeManager())\r
-    app.append_manager(getSosFlagManager())\r
-    app.append_manager(CountdownManager())\r
-\r
-    print("init21:{}".format(utime.localtime()))    \r
-    \r
-    print("init11:{}".format(utime.localtime()))    \r
-    pcr = ProtoColResolver()\r
-    pcr.add_support(LK_ProtoCol())\r
-    pcr.add_support(PING_ProtoCol())\r
-    pcr.add_support(KA_ProtoCol())\r
-    pcr.add_support(UD_ProtoCol())\r
-    pcr.add_support(CR_ProtoCol())\r
-    pcr.add_support(FIND_ProtoCol())\r
-    pcr.add_support(POWEROFF_ProtoCol())\r
-    pcr.add_support(PHL_ProtoCol())\r
-    pcr.add_support(TK_ProtoCol())\r
-    pcr.add_support(MESSAGE_ProtoCol())\r
-    pcr.add_support(WT_ProtoCol())\r
-    pcr.add_support(REMIND_ProtoCol())\r
-    pcr.add_support(HRSTART_ProtoCol())\r
-    pcr.add_support(HEART_ProtoCol())\r
-    pcr.add_support(OXYGEN_ProtoCol())\r
-    pcr.add_support(OXYGEN_One_ProtoCol())\r
-    pcr.add_support(TEMP_ProtoCol())\r
-    pcr.add_support(DLT_ProtoCol())\r
-    pcr.add_support(UPLOAD_ProtoCol())\r
-    pcr.add_support(MONITOR_ProtoCol())\r
-    # pcr.add_support(CENTER_ProtoCol())\r
-    pcr.add_support(CENTER_ProtoCol())\r
-    pcr.add_support(bootoff_ProtoCol())\r
-    pcr.add_support(WDSTART_ProtoCol())\r
-    pcr.add_support(LOWBAT_ProtoCol())\r
-    pcr.add_support(sosHome_dial_ProtoCol())\r
-\r
-    sm = SockManager()\r
-    sm.add_support_resolver(pcr)\r
-    app.append_manager(sm)\r
-    print("init11.0:{}".format(utime.localtime()))   \r
-    app.start()\r
-    sms_data = sms.getSaveLoc()\r
-    sms_lacv = sms_data[0][0]\r
-    if sms_lacv != 'SM':#每次开机设置一下短信的存储位置\r
-        sms.setSaveLoc('SM', 'SM', 'SM')\r
-    print("init12:{}".format(utime.localtime()))\r
-    import atcmd\r
-    resp=bytearray(50)\r
-    atcmd.sendSync('AT+log=52,1\r\n',resp,'',20)\r
-    print("AT+log=52,1:{}".format(resp))\r
-\r
-\r
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/mgr.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/mgr.py
deleted file mode 100644 (file)
index 945b027..0000000
+++ /dev/null
@@ -1,5074 +0,0 @@
-from common import Abstract, LogAdapter\r
-import EventMesh\r
-import usocket\r
-import ql_fs\r
-import ujson\r
-import _thread\r
-import modem\r
-import utime\r
-import sim\r
-import net\r
-import dataCall\r
-import checkNet\r
-import osTimer\r
-import constants\r
-import sms\r
-from common import Lock, Abstract, LogAdapter\r
-#from location import GPS, GPSMatch,CellLocator\r
-from misc import USB, Power, ADC\r
-from machine import ExtInt, Pin,Timer,RTC,UART\r
-import EventMesh\r
-import usys\r
-import audio\r
-from machine import I2C\r
-from Gsensor import SC7A20\r
-import pm\r
-import ure\r
-import urandom\r
-try :\r
-    from Hsensor import GH3018\r
-except Exception as e:\r
-    EventMesh.debug_log("Hsensor none GH3018:{}".format(e))   \r
-#\r
-try :\r
-    from Hsensor import HX3918\r
-except Exception as e:\r
-    EventMesh.debug_log("Hsensor none HX3918:{}".format(e))    \r
-from machine import RTC\r
-import quecgnss\r
-import wifiScan\r
-import math\r
-import voiceCall\r
-from misc import PWM\r
-from led import led_mode,open_led_green,close_led_green,open_led_red,close_led_red,close_led_white\r
-from queue import Queue\r
-if EventMesh.model == "D10":\r
-    heartbeat_time = 7*60 #心跳时间\r
-    gheartbeat_time = 5*60 #心跳时间\r
-\r
-    def get_autoblood_value():#血压值\r
-        data = RTC().datetime()\r
-        hour = int(data[4])\r
-        blood_Maxvalue = 0\r
-        blood_Minvalue = 0\r
-        if hour >= 6 and hour <= 10:\r
-            random_numMax = urandom.randint(0, 30)\r
-            random_numMin = urandom.randint(0, 20)\r
-            blood_Maxvalue = 120+random_numMax\r
-            blood_Minvalue = 75+random_numMin\r
-\r
-            print("get_autoblood_value 6 -10",blood_Maxvalue,blood_Minvalue)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        elif hour > 10 and hour <= 14:#10-14(10,14]\r
-            random_numMax = urandom.randint(0, 20)\r
-            random_numMin = urandom.randint(0, 25)\r
-            blood_Maxvalue = 115+random_numMax\r
-            blood_Minvalue = 60+random_numMin\r
-            print("get_autoblood_value 10 -14",blood_Maxvalue,blood_Minvalue)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        elif hour > 14 and hour <= 18:#14-18\r
-            random_numMax = urandom.randint(0, 25)\r
-            random_numMin = urandom.randint(0, 15)\r
-            blood_Maxvalue = 115+random_numMax\r
-            blood_Minvalue = 70+random_numMin\r
-\r
-            print("get_autoblood_value 14 -18",blood_Maxvalue,blood_Minvalue)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        elif hour > 2 and hour < 6:#2-6\r
-            random_numMax = urandom.randint(0, 30)\r
-            random_numMin = urandom.randint(0, 20)\r
-            blood_Maxvalu = 105+random_numMax\r
-            blood_Minvalue = 65+random_numMin\r
-\r
-            \r
-            print("get_autoblood_value 2 -6",blood_Maxvalue,blood_Minvalue)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        else:#18-2 19 20 21 22 23 1 2\r
-            random_numMax = urandom.randint(0, 30)\r
-            random_numMin = urandom.randint(0, 20)\r
-            blood_Maxvalue = 100+random_numMax\r
-            blood_Minvalue = 60+random_numMin\r
-            print("get_autoblood_value 18 -2",blood_Maxvalue,blood_Minvalue)\r
-        return [blood_Maxvalue,blood_Minvalue]\r
-\r
-    def get_blood_sugar_value():#血糖值\r
-        data = RTC().datetime()\r
-        hour = int(data[4])\r
-        blood_sugar = 0\r
-        if (hour >= 6 and hour <= 8) or (hour >= 12 and hour <= 13) or (hour >= 18 and hour <= 19):#6-8 12-13 18-19 \r
-            random_value = urandom.randint(39, 61)\r
-            blood_sugar = random_value/10\r
-            print("get_blood_sugar_value 6 -10",blood_sugar)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        elif (hour > 8 and hour <= 9) or (hour >= 14 and hour <= 15) or (hour >= 20 and hour <= 21):#8-9 14-15 20-21\r
-            random_value = urandom.randint(67, 90)\r
-            blood_sugar = random_value/10\r
-            print("get_blood_sugar_value 10 -14",blood_sugar)\r
-        else:#18-2 19 20 21 22 23 1 2 10-11 16-17 21-22\r
-            random_value = urandom.randint(39, 78)\r
-            blood_sugar = random_value/10\r
-            print("get_blood_sugar_value 18 -2",blood_sugar)\r
-        return blood_sugar\r
-\r
-\r
-\r
-\r
-    class PhoneVolumeLevelManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("push_add_phonering_level", self.add)\r
-            EventMesh.subscribe("push_reduce_phonering_level", self.reduce)\r
-            EventMesh.subscribe("get_phonering_level", self.get)\r
-\r
-        def add(self, event, msg):\r
-            if self.level < 7:\r
-                self.level = self.level + 1\r
-\r
-        def reduce(self, event, msg):\r
-            if self.level > 0:\r
-                self.level = self.level - 1\r
-\r
-        def get(self, event=None, msg=None):\r
-            return self.level\r
-\r
-    class MsgVolumeLevelManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("push_add_msgvolume_level", self.add)\r
-            EventMesh.subscribe("push_reduce_msgvolume_level", self.reduce)\r
-            EventMesh.subscribe("get_msgvolume_level", self.get)\r
-\r
-        def add(self, event, msg):\r
-            if self.level < 7:\r
-                self.level = self.level + 1\r
-\r
-        def reduce(self, event, msg):\r
-            if self.level > 0:\r
-                self.level = self.level - 1\r
-\r
-        def get(self, event=None, msg=None):\r
-            return self.level\r
-\r
-    class AlarmVolumeLevelManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("push_add_alarmvolume_level", self.add)\r
-            EventMesh.subscribe("push_reduce_alarmvolume_level", self.reduce)\r
-            EventMesh.subscribe("get_alarmvolume_level", self.get)\r
-\r
-        def add(self, event, msg):\r
-            if self.level < 7:\r
-                self.level = self.level + 1\r
-\r
-        def reduce(self, event, msg):\r
-            if self.level > 0:\r
-                self.level = self.level - 1\r
-\r
-        def get(self, event=None, msg=None):\r
-            return self.level\r
-            \r
-    class StopwatchManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-            self.ms_value = 0\r
-            self.sec_value = 0\r
-            self.min_value = 0\r
-            self.timer = Timer(Timer.Timer1)\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("stopwatch_start", self.start)\r
-            EventMesh.subscribe("stopwatch_stop", self.paused)\r
-            EventMesh.subscribe("stopwatch_reset", self.reset)\r
-            EventMesh.subscribe("get_stopwatch_ms", self.get_ms)\r
-            EventMesh.subscribe("get_stopwatch_sec", self.get_sec)\r
-            EventMesh.subscribe("get_stopwatch_min", self.get_min)\r
-\r
-        def start(self, event, msg):        \r
-            self.timer.start(period=100, mode=self.timer.PERIODIC, callback=self.fun)\r
-        \r
-        def paused(self, event, msg):        \r
-            self.timer.stop()\r
-        \r
-        def reset(self, event, msg):\r
-            self.timer.stop()\r
-\r
-            self.sec_value = 0\r
-            self.min_value = 0\r
-            self.ms_value = 0\r
-\r
-        def fun(self):\r
-            self.ms_value += 1\r
-            if self.ms_value > 9:\r
-                self.ms_value = 0   \r
-                self.sec_value += 1\r
-            if self.sec_value > 60:\r
-                self.sec_value = 0\r
-                self.min_value += 1\r
-            if self.min_value > 60:\r
-                self.timer.stop()\r
-\r
-        def get_ms(self, event=None, msg=None):\r
-            return self.ms_value\r
-\r
-        def get_min(self, event=None, msg=None):\r
-            return self.min_value\r
-\r
-        def get_sec(self, event=None, msg=None):\r
-            return self.sec_value\r
-\r
-    class CountdownManager(Abstract):\r
-        def __init__(self):\r
-            self.sec = 0\r
-            self.min = 0\r
-            self.hour = 0\r
-            self.timer = osTimer()\r
-            self.total = 0\r
-            self.time_cb = 0\r
-            self.time_play = 0\r
-            self.total_sec = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("add_countdown_sec", self.add_sec)\r
-            EventMesh.subscribe("reduce_countdown_sec", self.reduce_sec)\r
-            EventMesh.subscribe("add_countdown_min", self.add_min)\r
-            EventMesh.subscribe("reduce_countdown_min", self.reduce_min)\r
-            EventMesh.subscribe("add_countdown_hour", self.add_hour)\r
-            EventMesh.subscribe("reduce_countdown_hour", self.reduce_hour)\r
-            EventMesh.subscribe("get_countdown_sec", self.get_sec)\r
-            EventMesh.subscribe("get_countdown_min", self.get_min)\r
-            EventMesh.subscribe("get_countdown_hour", self.get_hour)\r
-\r
-            EventMesh.subscribe("set_countdown_off_state", self.set_countdown_off_state)\r
-            EventMesh.subscribe("get_countdown_off_state", self.get_countdown_off_state)\r
-\r
-\r
-            EventMesh.subscribe("set_countdown_all_time", self.set_countdown_all_time)\r
-            EventMesh.subscribe("get_countdown_all_time", self.get_countdown_all_time)\r
-\r
-            EventMesh.subscribe("countdown_end_cb", self.countdown_end_cb)\r
-\r
-            EventMesh.subscribe("reset_time_countdown",self.reset)\r
-\r
-        def set_countdown_all_time(self, event, msg):\r
-            self.total = msg[0]\r
-            self.total_sec = msg[1]\r
-            # EventMesh.debug_log("self.total:{} self.total_sec:{}".format(self.total,self.total_sec))\r
-\r
-\r
-        def get_countdown_all_time(self, event, msg):\r
-            return self.total\r
-        \r
-        def set_countdown_off_state(self, event, msg):\r
-\r
-            self.time_cb = msg[0]\r
-            self.time_play = msg[1]\r
-            # EventMesh.debug_log("self.time_cb:{} self.total_sec:{}".format(self.time_cb,self.time_play))\r
-\r
-\r
-        def get_countdown_off_state(self, event, msg):\r
-            return [self.time_cb,self.time_play]\r
-        \r
-        def countdown_end_cb(self, event, msg):\r
-            \r
-            if self.time_cb == 1 and self.time_play == 1:\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp) \r
-                reduce = time_tmp- self.total_sec\r
-                EventMesh.debug_log("self.time_cb:{} self.time_play:{} self.total:{} self.total_sec:{}".format(self.time_cb,self.time_play, self.total,self.total_sec))\r
-                self.total = self.total - reduce\r
-                if self.total <= 0:\r
-                    self.total = 0\r
-                    self.time_cb = 0\r
-                    self.time_play = 0\r
-                    self.sec = 0\r
-                    self.min = 0\r
-                    self.hour = 0\r
-                    \r
-                    EventMesh.publish("load_screen", {"screen": "countdown_end"})\r
-                    return\r
-                self.total_sec = time_tmp\r
-\r
-\r
-        def add_sec(self, event, msg):\r
-            if self.sec < 59:\r
-                self.sec = self.sec + 1\r
-\r
-        def reduce_sec(self, event, msg):\r
-            if self.sec > 0:\r
-                self.sec = self.sec - 1\r
-\r
-        def add_min(self, event, msg):\r
-            if self.min < 59:\r
-                self.min = self.min + 1\r
-\r
-        def reduce_min(self, event, msg):\r
-            if self.min > 0:\r
-                self.min = self.min - 1\r
-\r
-        def add_hour(self, event, msg):\r
-            if self.hour < 99:\r
-                self.hour = self.hour + 1\r
-\r
-        def reduce_hour(self, event, msg):\r
-            if self.hour > 0:\r
-                self.hour = self.hour - 1\r
-\r
-        def get_sec(self, event=None, msg=None):\r
-            return self.sec\r
-\r
-        def get_min(self, event=None, msg=None):\r
-            return self.min\r
-\r
-        def get_hour(self, event=None, msg=None):\r
-            return self.hour\r
-        \r
-\r
-        \r
-        def reset(self, event=None, msg=None):\r
-            self.hour = 0\r
-            self.min = 0\r
-            self.sec = 0\r
-        \r
-        \r
-\r
-    BATTERY_OCV_TABLE = {\r
-        "nix_coy_mnzo2": {\r
-            55: {\r
-                4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,\r
-                3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,\r
-            },\r
-            20: {\r
-                4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,\r
-                3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,\r
-            },\r
-            0: {\r
-                4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,\r
-                3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,\r
-            },\r
-        },\r
-    }\r
-\r
-\r
-\r
-    class Battery(object):\r
-        """This class is for battery info.\r
-\r
-        This class can get battery voltage and energy.\r
-        if adc_args is not None, use cbc to read battery\r
-\r
-        adc_args: (adc_num, adc_period, factor)\r
-\r
-            adc_num: ADC channel num\r
-            adc_period: Cyclic read ADC cycle period\r
-            factor: calculation coefficient\r
-        """\r
-\r
-        def __init__(self, adc_args=None, chrg_gpion=None, stdby_gpion=None):\r
-            self.__energy = 100\r
-            self.__temp = 55\r
-\r
-            # ADC params\r
-            self.__adc = None\r
-            if adc_args:\r
-                self.__adc_num, self.__adc_period, self.__factor = adc_args\r
-                if not isinstance(self.__adc_num, int):\r
-                    raise TypeError("adc_args adc_num is not int number.")\r
-                if not isinstance(self.__adc_period, int):\r
-                    raise TypeError("adc_args adc_period is not int number.")\r
-                if not isinstance(self.__factor, float):\r
-                    raise TypeError("adc_args factor is not int float.")\r
-                self.__adc = ADC()\r
-\r
-            # Charge params\r
-            self.__charge_callback = None\r
-            self.__charge_status = None\r
-            self.__chrg_gpion = chrg_gpion\r
-            self.__stdby_gpion = stdby_gpion\r
-            self.__chrg_gpio = None\r
-            self.__stdby_gpio = None\r
-            self.__chrg_exint = None\r
-            self.__stdby_exint = None\r
-            if self.__chrg_gpion is not None and self.__stdby_gpion is not None:\r
-                self.__init_charge()\r
-\r
-        def __chrg_callback(self, args):\r
-            self.__update_charge_status()\r
-            if self.__charge_callback is not None:\r
-                self.__charge_callback(self.__charge_status)\r
-\r
-        def __stdby_callback(self, args):\r
-            self.__update_charge_status()\r
-            if self.__charge_callback is not None:\r
-                self.__charge_callback(self.__charge_status)\r
-\r
-        def __update_charge_status(self):\r
-            if self.__chrg_gpio.read() == 1 and self.__stdby_gpio.read() == 1:\r
-                self.__charge_status = 0\r
-            elif self.__chrg_gpio.read() == 0 and self.__stdby_gpio.read() == 1:\r
-                self.__charge_status = 1\r
-            elif self.__chrg_gpio.read() == 1 and self.__stdby_gpio.read() == 0:\r
-                self.__charge_status = 2\r
-            else:\r
-                raise TypeError("CHRG and STDBY cannot be 0 at the same time!")\r
-\r
-        def __init_charge(self):\r
-            self.__chrg_gpio = Pin(self.__chrg_gpion, Pin.IN, Pin.PULL_DISABLE)\r
-            self.__stdby_gpio = Pin(self.__stdby_gpion, Pin.IN, Pin.PULL_DISABLE)\r
-            self.__chrg_exint = ExtInt(self.__chrg_gpion, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.__chrg_callback)\r
-            self.__stdby_exint = ExtInt(self.__stdby_gpion, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU,\r
-                                        self.__stdby_callback)\r
-            self.__chrg_exint.enable()\r
-            self.__stdby_exint.enable()\r
-            self.__update_charge_status()\r
-\r
-        def __get_soc_from_dict(self, key, volt_arg):\r
-            """Get battery energy from map"""\r
-            if key in BATTERY_OCV_TABLE["nix_coy_mnzo2"]:\r
-                volts = sorted(BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].keys(), reverse=True)\r
-                pre_volt = 0\r
-                volt_not_under = 0  # Determine whether the voltage is lower than the minimum voltage value of soc.\r
-                for volt in volts:\r
-                    if volt_arg > volt:\r
-                        volt_not_under = 1\r
-                        soc1 = BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].get(volt, 0)\r
-                        soc2 = BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].get(pre_volt, 0)\r
-                        break\r
-                    else:\r
-                        pre_volt = volt\r
-                # EventMesh.debug_log("__get_soc_from_dict:{}".format(soc2 - (soc2 - soc1) * (pre_volt - volt_arg) // (pre_volt - volt)))\r
-                if pre_volt == 0:  # Input Voltarg > Highest Voltarg\r
-                    return soc1\r
-                elif volt_not_under == 0:\r
-                    return 0\r
-                else:\r
-                    return soc2 - (soc2 - soc1) * (pre_volt - volt_arg) // (pre_volt - volt)\r
-\r
-        def __get_soc(self, temp, volt_arg, bat_type="nix_coy_mnzo2"):\r
-            """Get battery energy by temperature and voltage"""\r
-            if bat_type == "nix_coy_mnzo2":\r
-                if temp > 30:\r
-                    return self.__get_soc_from_dict(55, volt_arg)\r
-                elif temp < 10:\r
-                    return self.__get_soc_from_dict(0, volt_arg)\r
-                else:\r
-                    return self.__get_soc_from_dict(20, volt_arg)\r
-\r
-        def __get_power_vbatt(self):\r
-            return int(sum([Power.getVbatt() for i in range(100)]) / 100)\r
-\r
-        def __get_adc_vbatt(self):\r
-            self.__adc.open()\r
-            utime.sleep_ms(self.__adc_period)\r
-            adc_list = list()\r
-            for i in range(self.__adc_period):\r
-                adc_list.append(self.__adc.read(self.__adc_num))\r
-                utime.sleep_ms(self.__adc_period)\r
-            adc_list.remove(min(adc_list))\r
-            adc_list.remove(max(adc_list))\r
-            adc_value = int(sum(adc_list) / len(adc_list))\r
-            self.__adc.close()\r
-            vbatt_value = adc_value * (self.__factor + 1)\r
-            return vbatt_value\r
-\r
-        def set_temp(self, temp):\r
-            """Set now temperature."""\r
-            if isinstance(temp, int) or isinstance(temp, float):\r
-                self.__temp = temp\r
-                return True\r
-            return False\r
-\r
-        def get_voltage(self):\r
-            """Get battery voltage"""\r
-            if self.__adc is None:\r
-                return self.__get_power_vbatt()\r
-            else:\r
-                return self.__get_adc_vbatt()\r
-\r
-        def get_energy(self,volt_arg ):\r
-            """Get battery energy"""\r
-            if( volt_arg == None) :\r
-                volt_arg = self.get_voltage()\r
-            self.__energy = self.__get_soc(self.__temp, volt_arg)\r
-            # EventMesh.debug_log("get_energy:volt_arg {} __energy{}".format(volt_arg,self.__energy))\r
-            return self.__energy\r
-\r
-        def set_charge_callback(self, charge_callback):\r
-            if self.__chrg_gpion is not None and self.__stdby_gpion is not None:\r
-                if callable(charge_callback):\r
-                    self.__charge_callback = charge_callback\r
-                    return True\r
-            return False\r
-\r
-        def get_charge_status(self):\r
-            return self.__charge_status\r
-\r
-    class BatteryManager(Abstract):\r
-        def __init__(self):\r
-            """电池管理器"""\r
-            self.battery = Battery()\r
-            self.low_battery = False\r
-\r
-        def post_processor_after_instantiation(self):\r
-            """订阅此类所有的事件到 EventMesh中"""\r
-            EventMesh.subscribe("get_battery", self.get_battery)\r
-\r
-        def get_battery(self, event=None, msg=None):\r
-            battery = self.battery.get_energy(msg)\r
-            return battery\r
-\r
-        def get_voltage(self, event=None, msg=None):\r
-            voltage = self.battery.get_voltage()\r
-            return voltage\r
-\r
-    class ConfigStoreManager(Abstract):\r
-        """\r
-        持久化落盘存储\r
-        """\r
-\r
-        def __init__(self):\r
-            self.file_name = "/usr/conf_store.json"\r
-            self.lock = Lock()\r
-            self.map = dict()\r
-\r
-        def post_processor_after_instantiation(self):\r
-            if ql_fs.path_exists(self.file_name):\r
-                self.map = ql_fs.read_json(self.file_name)\r
-            else:\r
-                self.__store()\r
-            EventMesh.subscribe("persistent_config_get", self.__read)\r
-            EventMesh.subscribe("persistent_config_store", self.__store)\r
-\r
-        def __read(self, event, msg):\r
-            with self.lock:\r
-                return self.map.get(msg)\r
-\r
-        def __store(self, event=None, msg=None):\r
-            if msg is None:\r
-                msg = dict()\r
-            with self.lock:\r
-                self.map.update(msg)\r
-                ql_fs.touch(self.file_name, self.map)\r
-            \r
-    class sosInfoCallManager(Abstract):\r
-        # 通讯录\r
-        def __init__(self):\r
-            pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_sos_info_call", self.set_sos_info_call)\r
-\r
-        def set_sos_info_call(self, event, msg):\r
-            hangup_mode = EventMesh.publish("get_hangup_mode")\r
-            if hangup_mode == 1:\r
-                EventMesh.publish("set_sos_flag",0)\r
-                EventMesh.publish("set_sos_num",0)\r
-                EventMesh.publish("set_hangup_mode",0)\r
-            EventMesh.debug_log('hangup_mode disconnect',hangup_mode)\r
-            sos_flag = EventMesh.publish("get_sos_flag")\r
-            EventMesh.debug_log('voicecall sos_flag',sos_flag)\r
-            if sos_flag == 0 :\r
-                EventMesh.publish("set_sos_num",0)\r
-            else:\r
-                num = EventMesh.publish("get_sos_num")\r
-                number = EventMesh.publish("get_dial_sos_number")\r
-                if number != None:\r
-                    if len(number) > 0:\r
-                        if num == None:\r
-                            num = 0\r
-                        num+=1\r
-                        num_len = 0\r
-\r
-                        if len(number) == 1:\r
-                            num_len = len(number)+1#三次\r
-                        elif len(number) == 2:\r
-                            num_len = len(number)+1+2 #1+2+1+2\r
-                        elif len(number) == 3:\r
-                            num_len = len(number)+5 #1+3+5\r
-                        # EventMesh.debug_log("number:{} number_len :{} num:{} num_len:{}".format(number,len(number),num,num_len))\r
-                        if num > num_len :\r
-                            if len(number) == 1:\r
-                                number1 = str(number[0])\r
-                                sms.sendPduMsg(number1, '我需要你的帮助', 'UCS2')\r
-                            elif len(number) == 2:\r
-                                number1 = str(number[0])\r
-                                sms.sendPduMsg(number1, '我需要你的帮助', 'UCS2')\r
-\r
-                                number2 = str(number[1])\r
-                                sms.sendPduMsg(number2, '我需要你的帮助', 'UCS2')\r
-                            elif len(number) == 3:\r
-                                number1 = str(number[0])\r
-                                sms.sendPduMsg(number1, '我需要你的帮助', 'UCS2')\r
-                                number2 = str(number[1])\r
-                                sms.sendPduMsg(number2, '我需要你的帮助', 'UCS2')\r
-                                number3 = str(number[2])\r
-                                sms.sendPduMsg(number3, '我需要你的帮助', 'UCS2')\r
-                            EventMesh.publish("set_sos_flag",0)\r
-                            EventMesh.publish("set_sos_num",0)\r
-                        else:\r
-                        # EventMesh.debug_log("number:{} number_len :{}".format(number,len(number)))\r
-                            EventMesh.publish("set_sos_num",num)\r
-                            if len(number) == 1:\r
-                                if len(number[0]) != 0:\r
-                                    EventMesh.publish("set_callnumer_cb",number[0])\r
-                                    EventMesh.debug_log("phone 1")\r
-                            elif len(number) == 2:\r
-                                if num == 1 or num == 3 or num == 5: #1 2 3 4 5 \r
-                                    if len(number[1]) != 0:\r
-                                        EventMesh.debug_log("phone 2")\r
-                                        EventMesh.publish("set_callnumer_cb",number[1])\r
-                                elif num == 2 or num == 4:\r
-                                    if len(number[0]) != 0:\r
-                                        EventMesh.debug_log("phone 3")\r
-                                        EventMesh.publish("set_callnumer_cb",number[0])\r
-                            elif len(number) == 3:\r
-                                if num == 1 or num == 4 or num == 7:\r
-                                    if len(number[1]) != 0:\r
-                                        EventMesh.publish("set_callnumer_cb",number[1])\r
-                                        EventMesh.debug_log("phone 4")\r
-                                elif num == 2 or num == 5 or num == 8:\r
-                                    if len(number[2]) != 0:\r
-                                        EventMesh.debug_log("phone 5")\r
-                                        EventMesh.publish("set_callnumer_cb",number[2])\r
-                                elif num == 3 or num == 6 :\r
-                                    if len(number[0]) != 0:\r
-                                        EventMesh.debug_log("phone 6")\r
-                                        EventMesh.publish("set_callnumer_cb",number[0])   \r
-    \r
-    \r
-    WL_timer = osTimer()   \r
-    def WL_timer_cb(*args):   \r
-        get_call = EventMesh.publish("get_call_state") \r
-        if get_call == 2:#只有拨进来才给接听\r
-            EventMesh.publish("answer_call_event")#接听电话\r
-    def voice_callback(args):\r
-        EventMesh.debug_log('voicecall iinfo:{}'.format(args))\r
-        if args[0] == 10:\r
-                get_UI_high_priority = EventMesh.publish("get_UI_high_priority")#如果在拨出去或者通话中屏蔽来电\r
-                if get_UI_high_priority == 1:\r
-                    EventMesh.publish("set_interrup_incall",1)\r
-                    return\r
-                EventMesh.debug_log('voicecall incoming call, PhoneNO.: ', args[6])\r
-                size_len = len(str(args[6]))\r
-                tmp = []\r
-                tmp = args[6]\r
-                find_num = tmp[0]\r
-                b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了 判断号码是否大于11位数,如果大于11位数 并且第一个字符是数字就按照最后11位做存储\r
-\r
-                if b == True and size_len > 11:\r
-                    tmp = tmp[size_len-11:]\r
-                WLKEY = EventMesh.publish("get_storage_config","WLKEY") \r
-                if WLKEY == "1" or WLKEY == "2":#开启了白名单\r
-                    on_list_flag = 0\r
-                    phonebook = EventMesh.publish("get_phonebook_list")\r
-                    phonebook_list = phonebook[1]\r
-                    EventMesh.debug_log("voice_callback:phonebook_list{}".format(phonebook_list))\r
-                    try:\r
-                        for value in phonebook_list.values():\r
-                            if value == args[6]:\r
-                                on_list_flag = 1\r
-                                break\r
-                    except Exception as e:\r
-                        usys.print_exception(e)\r
-                    EventMesh.debug_log("voice_callback:on_list_flag{}".format(on_list_flag))\r
-                    if on_list_flag == 1:#在白名单里\r
-                        if WLKEY == "2":\r
-                            WL_timer.stop()\r
-                            WL_timer.start(30000, 0, WL_timer_cb)\r
-                    else:\r
-                        EventMesh.debug_log("voice_callback:不在白名单中,挂断")\r
-                        voiceCall.callEnd()\r
-                        return \r
-                fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                if fall_down != 0:\r
-                    voiceCall.callEnd()\r
-                    return\r
-                EventMesh.publish("set_call_state",2) \r
-                EventMesh.publish("dialin_call_event")#电话拨进响铃\r
-                # EventMesh.publish("load_screen", {"screen": "incoming_call","meta":str(tmp)})\r
-\r
-        elif args[0] == 11:\r
-                EventMesh.publish("set_UI_high_priority",0)\r
-                sos_flag = EventMesh.publish("get_sos_flag")\r
-                if sos_flag == 1:\r
-                    sos_flag = 0\r
-                    EventMesh.publish("set_sos_flag",0)\r
-\r
-                EventMesh.debug_log('voicecall connected, PhoneNO.: ', args[6])\r
-                size_len = len(str(args[6]))\r
-                tmp = []\r
-                tmp = args[6]\r
-                find_num = tmp[0]\r
-                b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了\r
-                if b == True and size_len > 11:\r
-                    tmp = tmp[size_len-11:]\r
-                EventMesh.publish("set_call_state",3) \r
-                # EventMesh.publish("load_screen", {"screen": "on_call","meta":str(tmp)})\r
-\r
-        elif args[0] == 12:\r
-                set_interrup_call = EventMesh.publish("get_interrup_incall")#打断这次不需要来电的ui事件 以免通话中退出当前界面进不去了\r
-                if set_interrup_call == 1:\r
-                    EventMesh.publish("set_interrup_incall",0)\r
-                    return\r
-\r
-                EventMesh.publish("set_interrup_incall",0)\r
-                EventMesh.publish("set_UI_high_priority",0)\r
-                \r
-\r
-                \r
-                \r
-                EventMesh.publish("set_sos_info_call")  \r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag == 2:\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("close_timer_all")#\r
-                EventMesh.publish("set_call_state",0) \r
-                EventMesh.debug_log('voicecall disconnect end')\r
-                \r
-\r
-        elif args[0] == 13:\r
-                EventMesh.debug_log('voicecall is waiting, PhoneNO.: ', args[6])\r
-        elif args[0] == 14:\r
-\r
-                EventMesh.debug_log('voicecall dialing, PhoneNO.: ', args[6])\r
-                EventMesh.publish("set_UI_high_priority",0)\r
-                EventMesh.publish("set_call_state",1) \r
-                # EventMesh.publish("load_screen", {"screen": "dialing"})\r
-\r
-                \r
-        elif args[0] == 15:\r
-                EventMesh.debug_log('voicecall alerting, PhoneNO.: ', args[6])\r
-                EventMesh.publish("set_call_state",1) \r
-                \r
-        elif args[0] == 16:\r
-                EventMesh.debug_log('voicecall holding, PhoneNO.: ', args[6])\r
-\r
-    class DeviceInfoManager(Abstract):\r
-        \r
-        """\r
-            设备信息管理\r
-        """\r
-\r
-        def __init__(self):\r
-\r
-            self.DeviceInfo_queue = Queue()\r
-            _thread.stack_size((9+6)*1024)\r
-            _thread.start_new_thread(self.DeviceInfo_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            self.boot_time_count = 0\r
-            self.factory_test_time = 0\r
-            EventMesh.subscribe("publish_message_event_DeviceInfo",self.publish_message_event_DeviceInfo)\r
-            self.key = ""\r
-            self.imei = ""\r
-            self.cid = "ETEST20221014010"\r
-            self.imsi = ""\r
-            self.password = "000000"\r
-            #self.__city = None\r
-            #self.__location = None\r
-            self.timer_push_schedule = osTimer()\r
-            self.timer_pusht_test = osTimer()\r
-            \r
-            #self.battery_push_schedule = osTimer()\r
-            self.check_battery_list = []\r
-            \r
-            self.step = [0,0,0,0]\r
-            self.timer_push=0\r
-            self.timer_push_tmp=60\r
-            self.PING = "0" #绑定状态\r
-            self.connect = 0 #服务器连接状态\r
-            self.KA_time = 0\r
-            self.HR_time = 0\r
-            self.hr_timeSecond = 0\r
-            self.HR_state = 0\r
-            self.HR_Onestate = 0\r
-            self.get_hr_state = 0\r
-            self.get_spo2_state = 0\r
-            self.set_hsenor_crt = 0\r
-            self.HR_OneTime = 0\r
-            self.Hr_Need_Open = 0\r
-            self.Spo2_Need_Open = 0\r
-            self.bat_time = 0\r
-            self.vbat_full_flag = 0\r
-            self.clear_step = 0\r
-            self.test = 0\r
-            self.old_time = 0\r
-            self.UD_time = 0\r
-            self.upload_time = 0\r
-            self.UD_timeout = 7*60\r
-\r
-            self.low_power_AL = 0\r
-\r
-            self.temp_timeSecond = 0\r
-            self.temp_state = 0\r
-            self.temp_one_state = 0\r
-            self.temp_warning = 0\r
-\r
-            self.bg_timeSecond = 0\r
-\r
-            self.bp_timeSecond = 0\r
-            self.bpauto_state = 0\r
-\r
-            self.spo2_timeSecond = 0\r
-            self.spo2auto_state = 0\r
-\r
-            self.vbat_count = 0\r
-\r
-            self.vbat_buf=[]\r
-\r
-            self.curr_battery_level = 4200\r
-            self.bat_count = 0\r
-\r
-            self.mearsure_btn = 0\r
-            self.mearsure_timer = 0\r
-\r
-            self.old_hr_time = 0\r
-            self.old_spo2_time = 0\r
-\r
-            self.no_smi_count = 0\r
-            self.no_smi_state = 0\r
-\r
-            self.old_bp_time = 0\r
-\r
-            self.medicine_count = 0\r
-            self.medicine_flag  = 0\r
-            self.medicine_oldtotalmin = 0\r
-            \r
-            self.wakeup_flag = 0\r
-            self.wakeup_count = 0\r
-            self.wakeup_oldtotalmin = 0\r
-\r
-            self.sleep_flag = 0\r
-            self.sleep_count = 0\r
-            self.sleep_oldtotalmin = 0\r
-\r
-            self.reset_flag = 0\r
-            self.reset_count = 0\r
-            self.reset_oldtotalmin = 0\r
-\r
-            self.home_flag = 0\r
-            self.home_count = 0\r
-            self.home_oldtotalmin = 0\r
-\r
-            self.normal_flag = 0\r
-            self.normal_count = 0\r
-            self.normal_oldtotalmin = 0\r
-            \r
-            self.charge_full_count = 0\r
-            self.GPS_step_t = 0#记录步数\r
-            self.usb = USB()\r
-            self.usb.setCallback(self.usb_event_cb)\r
-            self.log = LogAdapter(self.__class__.__name__)\r
-            self.rtc = RTC()\r
-            self.aud = audio.Audio(0)\r
-            EventMesh.debug_log("DeviceInfoManager:1")\r
-            self.gsensor = SC7A20()\r
-            EventMesh.debug_log("DeviceInfoManager:1.0")\r
-            self.gsensor.activate()\r
-            EventMesh.debug_log("DeviceInfoManager:1.1")\r
-            self.gsensor.init()\r
-            EventMesh.debug_log("DeviceInfoManager:2")\r
-            self.gsensor.set_callback(self.gsensor_cb)\r
-            try :\r
-                self.hsensor = HX3918()\r
-                \r
-            except Exception as e:\r
-                EventMesh.debug_log("Hsensor none HX3918:{}".format(e))   \r
-            try :\r
-                self.hsensor = GH3018()\r
-            except Exception as e:\r
-                EventMesh.debug_log("Hsensor none GH3018:{}".format(e))   \r
-            #\r
-            self.hsensor.activate()\r
-            self.hsensor.init()\r
-            self.hsensor.close()\r
-            try :\r
-                self.hsensor.set_sar(1)\r
-            except Exception as e:\r
-                EventMesh.debug_log("Hsensor none set_sar:{}".format(e)) \r
-            self.old_temp_time = 0\r
-            # #EventMesh.debug_log("hsensor.open_heart:%d\r\n"%(self.hsensor.open_heart()))\r
-            EventMesh.debug_log("DeviceInfoManager:3")\r
-            self.i2c0 = I2C(I2C.I2C0, I2C.FAST_MODE)\r
-            self.stop_temp( None, None)\r
-            self.dev_state = 0\r
-            self.wear = 1\r
-            self.BG_state = 0\r
-            self.old_bg_time = 0\r
-\r
-            self.pull_time = 0\r
-\r
-            self.drink_time = 0\r
-\r
-            self.alarm_count = 0\r
-            self.alarm_flag = 0\r
-\r
-            self.time_count = 0\r
-            \r
-            self.auto_spo2_count = 0\r
-\r
-            self.auto_hr_count = 0\r
-\r
-            self.auto_temp_count = 0\r
-\r
-            self.test_time = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.debug_log("post_processor_after_instantiation:1")\r
-            """订阅此类所有的事件到 EventMesh中"""\r
-            # voiceCall.setCallback(voice_callback)\r
-            EventMesh.subscribe("screen_get_ope", self.get_device_ope)\r
-            EventMesh.subscribe("screen_get_sig", self.get_signal)\r
-            EventMesh.subscribe("screen_get_time", self.get_time)\r
-            EventMesh.subscribe("about_get_imei", self.get_imei)\r
-            EventMesh.subscribe("about_get_iccid", self.get_ic_cid)\r
-            EventMesh.subscribe("get_sim_Status", self.get_sim_Status)\r
-            EventMesh.subscribe("about_get_phonenum", self.get_phone_num)\r
-            EventMesh.subscribe("screen_get_battery", self.get_battery)\r
-            EventMesh.subscribe("set_curr_battery_level", self.set_curr_battery_level)\r
-            EventMesh.subscribe("get_curr_battery_level", self.get_curr_battery_level)\r
-            EventMesh.subscribe("get_fw_version", self.get_device_fw_version)\r
-            EventMesh.subscribe("get_standby_time", self.get_standby_time)\r
-            EventMesh.subscribe(constants.EVENT.GET_STEP, self.get_step_count)\r
-            EventMesh.subscribe("sim_slot_get", self.sim_slot_get)\r
-            EventMesh.subscribe("sim_slot_switch", self.sim_slot_switch)\r
-            EventMesh.subscribe(constants.EVENT.GET_KEY, self.get_key)\r
-            EventMesh.subscribe(constants.EVENT.SET_KEY, self.set_key)\r
-            EventMesh.subscribe(constants.EVENT.GET_IMEI, self.get_imei)\r
-            EventMesh.subscribe(constants.EVENT.GET_CID, self.get_cid)\r
-            EventMesh.subscribe(constants.EVENT.SET_CID, self.set_cid)\r
-            EventMesh.subscribe(constants.EVENT.GET_IMSI, self.get_imsi)\r
-            EventMesh.subscribe(constants.EVENT.GET_PASSWORD, self.get_password)\r
-            EventMesh.subscribe(constants.EVENT.SET_PASSWORD, self.set_password)     \r
-            EventMesh.subscribe(constants.EVENT.SET_PING, self.set_ping)\r
-            EventMesh.subscribe(constants.EVENT.GET_PING, self.get_ping)\r
-            EventMesh.subscribe(constants.EVENT.SET_CONNECT, self.set_connect)\r
-            EventMesh.subscribe(constants.EVENT.GET_CONNECT, self.get_connect)\r
-\r
-            \r
-            EventMesh.subscribe(constants.EVENT.START_BLOOD_OXYGEN, self.start_blood_oxygen)\r
-            EventMesh.subscribe(constants.EVENT.START_HEART, self.start_heart)\r
-            EventMesh.subscribe(constants.EVENT.STOP_BLOOD_OXYGEN, self.stop_blood_oxygen)\r
-            EventMesh.subscribe(constants.EVENT.STOP_HEART, self.stop_heart)\r
-            EventMesh.subscribe(constants.EVENT.GET_BLOOD_OXYGEN, self.get_blood_oxygen)\r
-            EventMesh.subscribe(constants.EVENT.GET_HEART, self.get_heart)\r
-            EventMesh.subscribe(constants.EVENT.GET_WEAR, self.get_wear)\r
-            EventMesh.subscribe("get_Hsensor", self.get_Hsensor)\r
-            EventMesh.subscribe("Hsensor_set_sleep", self.Hsensor_set_sleep)\r
-\r
-            EventMesh.subscribe(constants.EVENT.START_TEMP, self.start_temp)\r
-            EventMesh.subscribe(constants.EVENT.STOP_TEMP, self.stop_temp)\r
-            EventMesh.subscribe(constants.EVENT.GET_TEMP, self.get_temp)\r
-            EventMesh.subscribe("get_boot_time_count", self.get_boot_time_count)\r
-            EventMesh.subscribe("get_factory_test_time", self.get_factory_test_time)\r
-            EventMesh.subscribe("get_dev_state", self.get_dev_state)\r
-            EventMesh.subscribe("set_dev_state", self.set_dev_state)\r
-\r
-            EventMesh.subscribe("clear_health_state", self.clear_health_state)\r
-\r
-            EventMesh.subscribe("clear_home_alarm", self.clear_home_alarm)\r
-            EventMesh.subscribe("clear_medicine_alarm", self.clear_medicine_alarm)\r
-            EventMesh.subscribe("clear_wakeup_alarm", self.clear_wakeup_alarm)\r
-            EventMesh.subscribe("clear_sleep_alarm", self.clear_sleep_alarm)\r
-            EventMesh.subscribe("clear_normal_alarm", self.clear_normal_alarm)\r
-\r
-            EventMesh.subscribe("clear_manual_hr_flag", self.clear_manual_hr_flag)\r
-            EventMesh.subscribe("clear_manual_temp_flag", self.clear_manual_temp_flag)\r
-\r
-\r
-            EventMesh.subscribe("clear_usb_flag", self.clear_usb_flag)\r
-            \r
-            EventMesh.debug_log("post_processor_after_instantiation:2")\r
-            self.timer_push_schedule.start(10000, 1, self.publish_event_cb)\r
-            # self.timer_pusht_test.start(2000, 1, self.publish_test)\r
-            # self.battery_push_schedule.start(3000, 1, self.__check_battery)\r
-            self.log.debug("post_processor_after_instantiation finished")\r
-            #EventMesh.publish(constants.EVENT.START_HEART)\r
-            # 设备开机立刻更新一次参数\r
-            self.publish_event_cb()\r
-            \r
-            EventMesh.debug_log("post_processor_after_instantiation:3")\r
-\r
-        def clear_manual_hr_flag(self,event,msg):\r
-            self.auto_hr_count = 0\r
-        \r
-        def clear_manual_temp_flag(self,event,msg):\r
-            self.auto_temp_count = 0\r
-\r
-        def publish_message_event_DeviceInfo(self,event,msg):\r
-            self.DeviceInfo_queue.put(msg)\r
-\r
-        #DeviceInfo的消息队列处理,防止卡顿\r
-        def DeviceInfo_queue_thread(self):\r
-            while True:\r
-                data = self.DeviceInfo_queue.get()\r
-                #EventMesh.debug_log("DeviceInfo_queue_thread:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        EventMesh.debug_log("DeviceInfo_queue_thread:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-\r
-\r
-        def gsensor_cb(self, para):\r
-            EventMesh.debug_log("gsensor_cb:{}".format(para))\r
-            flip_sw = EventMesh.publish("get_storage_config","flip_sw")\r
-            fall_sw = EventMesh.publish("get_storage_config","fall_sw")\r
-            if para == 0: #跌倒报警\r
-                pass\r
-                if fall_sw == "1":\r
-                    EventMesh.publish("falldown_alarm_event")\r
-                    dev_state =  EventMesh.publish("get_dev_state")\r
-\r
-                    tmp = 1 << 21\r
-                    dev_state = dev_state|tmp #第21位=1\r
-                    EventMesh.publish("set_dev_state",dev_state)\r
-                    EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,dev_state]) #开始AL定位\r
-                    pass\r
-                #EventMesh.publish("load_screen", {"screen": "FIND"})\r
-            elif para == 1: #抬腕\r
-                \r
-                if flip_sw == 1:\r
-                    EventMesh.publish(constants.EVENT.SYSTEM_UP)\r
-                \r
-            elif para == 2: #放手\r
-                pass\r
-                # if flip_sw == 1:\r
-                #     EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)\r
-        def get_boot_time_count(self, event, msg):\r
-            return self.boot_time_count\r
-        \r
-        def get_factory_test_time(self, event, msg):\r
-            return self.factory_test_time\r
-        \r
-        def get_dev_state(self, event, msg):\r
-            return self.dev_state\r
-        def set_dev_state(self, event, msg):\r
-            self.dev_state = msg\r
-        \r
-        def publish_event_cb(self, *args, **kwargs):\r
-            \r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 1:\r
-                    if self.boot_time_count < 50000000:\r
-                        self.boot_time_count += 10\r
-                    if self.factory_test_time < 300:\r
-                        self.factory_test_time+=10\r
-                #EventMesh.debug_log("boot_time_count:{}".format(self.boot_time_count))\r
-            EventMesh.publish("publish_message_event_DeviceInfo",{"func":self.publish_event,"data":0})  \r
-        def optimize_temp(self,temp):\r
-            temp += 0.5\r
-            get_temp_time  = EventMesh.publish("get_temp_time")\r
-            EventMesh.debug_log("temp:{}".format(temp))\r
-            if temp < 36 :#or temp > 37.5:\r
-                temp = 36+urandom.random()\r
-            if temp > 37.5:\r
-                \r
-                self.temp_warning += 1\r
-                EventMesh.debug_log("temp_warning:{} get_temp_time{}".format(self.temp_warning,get_temp_time))\r
-                \r
-                if self.temp_warning < 5:#高温没连续超过3次,和谐成37.5度以下\r
-                    temp = 37+(urandom.randint(1, 4)/10)\r
-                else:\r
-                    self.temp_warning = 0\r
-            else:\r
-                if self.temp_warning>=1:\r
-                    self.temp_warning -= 1\r
-            if temp >= 40:\r
-                temp = 40\r
-            return temp\r
-        def clear_health_state(self,event,msg):\r
-            print("clear_health_state")\r
-            self.old_bp_time = 0#关闭心率 血压 血氧 体温清除标志\r
-            self.old_time = 0\r
-            self.HR_Onestate = 0\r
-            self.HR_OneTime = 0\r
-            self.HR_state = 0\r
-            self.set_hsenor_crt = 0\r
-            self.old_bg_time = 0\r
-            self.old_hr_time = 0\r
-            self.old_spo2_time = 0\r
-            self.BG_state = 0\r
-            self.bpauto_state = 0\r
-            self.spo2auto_state = 0\r
-            pass\r
-\r
-        def clear_temp_state(self,event,msg):\r
-            print("clear_temp_state")\r
-            self.temp_state = 0\r
-            self.temp_one_state = 0\r
-            self.old_temp_time = 0\r
-            pass\r
-\r
-        def publish_event(self,data):\r
-            """\r
-            定时事件处理\r
-            :param args:\r
-            :param kwargs:\r
-            :return:\r
-            """\r
-\r
-            date_tmp = utime.localtime()\r
-            time_tmp = utime.mktime(date_tmp)\r
-            # EventMesh.debug_log("date_tmp......01....{} time_tmp:{}\r\n".format(date_tmp,time_tmp))\r
-            \r
-\r
-            EventMesh.publish("countdown_end_cb")\r
-            """定时检查是否关闭gps失败"""\r
-            # gnss_state = quecgnss.get_state()\r
-            # get_location_flag = EventMesh.publish("get_location_flag")\r
-            # if get_location_flag != None:\r
-            #     # if gnss_state == 2 and get_location_flag == 0:\r
-            #     #     EventMesh.publish(constants.EVENT.GPSCLOSE)\r
-            #     if(get_location_flag == 0):\r
-            #         EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位\r
-\r
-            """7分钟一次心跳"""\r
-            if EventMesh.platform == "gewu":\r
-                if  math.fabs(time_tmp - self.KA_time) > gheartbeat_time: #7分钟一次心跳\r
-                    self.KA_time = time_tmp\r
-                    EventMesh.publish(constants.PROTOCOL.KA_SEND)\r
-            else:\r
-                if  math.fabs(time_tmp - self.KA_time) > heartbeat_time: #7分钟一次心跳\r
-                    self.KA_time = time_tmp\r
-                    EventMesh.publish(constants.PROTOCOL.KA_SEND)\r
-\r
-            """定时定位"""\r
-            #EventMesh.publish("set_upload_data",3*60)\r
-            self.upload_time = EventMesh.publish("get_upload_data")\r
-            #EventMesh.debug_log("self.upload_time:{} math.fabs(time_tmp - self.UD_time):{}".format(self.upload_time,math.fabs(time_tmp - self.UD_time)))\r
-            if self.upload_time != None :\r
-                if  math.fabs(time_tmp - self.UD_time) > self.upload_time: #30分钟一次定位\r
-                    self.UD_time = time_tmp\r
-                    status_tmp = self.gsensor.get_status()#获取运动次数\r
-                    #status_tmp = 4\r
-                    #EventMesh.txt_log("status_count:{}".format(status_tmp))\r
-                    if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and status_tmp > 3 :\r
-                        EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位\r
-                        self.gsensor.clean_status()#清除运动次数\r
-                    else : #关闭定位\r
-                        #EventMesh.txt_log("NO status")\r
-                        EventMesh.debug_log("NO status")\r
-                        EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 \r
-            \r
-            EventMesh.publish(constants.EVENT.PUSH_STEP, self.get_step_count())\r
-\r
-            """电池平均值"""\r
-            temp = Power.getVbatt()\r
-            if self.bat_count < 10:\r
-                self.vbat_buf.append(temp)\r
-                self.bat_count += 1\r
-            else:\r
-                for i in range(9):\r
-                    self.vbat_buf[i] = self.vbat_buf[i+1]\r
-                self.vbat_buf[9] = temp\r
-            curr_count = len(self.vbat_buf)\r
-            bat_total_value = 0\r
-            for i in range(curr_count):\r
-                bat_total_value += self.vbat_buf[i]\r
-            bat_total_value = bat_total_value//curr_count#一分钟更新一次电量 10个平均值\r
-            EventMesh.publish("set_curr_battery_level",bat_total_value)\r
-            # EventMesh.debug_log("self.vbat_buf:{} curr_count :{} bat_total_value:{} temp:{}".format(self.vbat_buf,curr_count,bat_total_value,temp))\r
-            bat_tmp = EventMesh.publish("screen_get_battery")\r
-            self.vbat_count+=10\r
-            if self.vbat_count >= 60:\r
-                self.vbat_count = 0\r
-                if bat_tmp != None:\r
-                    bat_value = bat_tmp[1]\r
-                    if bat_value <= 0:\r
-                        pass\r
-                        # EventMesh.publish("load_screen", {"screen": "LOW_ONE_POWER"})\r
-            \r
-            \r
-            """"隔天清步数"""\r
-\r
-            data = RTC().datetime()\r
-\r
-            hour = int(data[4])\r
-            min = int(data[5])\r
-\r
-\r
-\r
-            cur_month = int(data[1])\r
-            cur_day = int(data[2])\r
-            cur_year = int(data[0])\r
-\r
-            old_Timesec = EventMesh.publish("get_old_time_data")\r
-            # EventMesh.debug_log("hour:{} {} cur_month:{} {} next_alarm_time:{} old_Timesec:{}".format(hour,min,cur_month,cur_day,next_alarm_time,old_Timesec))\r
-            # EventMesh.debug_log("old_Timesec",old_Timesec)\r
-            if old_Timesec != None:\r
-                next_alarm_time = utime.localtime(int(old_Timesec))\r
-                month = int(next_alarm_time[1]) #00:00 18\r
-                day = int(next_alarm_time[2])\r
-                year = int(next_alarm_time[0])\r
-                if month != cur_month or day != cur_day or year != cur_year:#年 月 日只要其中一个都不一样就清零\r
-                    EventMesh.publish("set_old_time_data",time_tmp)\r
-                    self.gsensor.reset_step()\r
-\r
-                    EventMesh.publish("set_old_step_value",0)\r
-                    \r
-                    hr = EventMesh.publish("get_old_hr_data")\r
-                    if hr != 0:\r
-                        EventMesh.publish("set_old_hr_data", 0)\r
-                    \r
-                    spo2 = EventMesh.publish("get_old_spo2_data")\r
-                    if spo2 != 0:\r
-                        EventMesh.publish("set_old_spo2_data", 0)\r
-                    EventMesh.debug_log("clear step1111")\r
-                else:\r
-                    pass\r
-                    \r
-                    \r
-            if hour == 23:#清步数23:59\r
-                if min == 59:#58 59\r
-                    # if self.clear_step == 0:\r
-                    #     self.clear_step = 1\r
-                    EventMesh.publish("set_old_time_data",time_tmp)\r
-                    self.gsensor.reset_step()\r
-                    EventMesh.publish("set_old_step_value",0)\r
-\r
-                    hr = EventMesh.publish("get_old_hr_data")\r
-                    if hr != 0:\r
-                        EventMesh.publish("set_old_hr_data", 0)\r
-                    \r
-                    spo2 = EventMesh.publish("get_old_spo2_data")\r
-                    if spo2 != 0:\r
-                        EventMesh.publish("set_old_spo2_data", 0)\r
-                    EventMesh.debug_log("clear step2222")\r
-\r
-                else:\r
-                    self.clear_step = 0\r
-            else:\r
-                self.clear_step = 0\r
-            \r
-            """电量小于0% 关机"""\r
-            get_low_btn = EventMesh.publish("get_low_bat_btn")#\r
-            battery = EventMesh.publish("screen_get_battery")\r
-            if battery != None:\r
-                power = int(battery[1])\r
-                if battery[0] != '1':\r
-                    if power == 0:\r
-                        EventMesh.publish("open_power_on",2)#  \r
-                    """"低电报警"""\r
-                    # print("low power!!!!!!!!!!! %d",self.low_power_AL)\r
-                    if power <= 15 and self.low_power_AL==0:\r
-                        self.low_power_AL = 1\r
-                        dev_state =  EventMesh.publish("get_dev_state")\r
-\r
-                        tmp = 1 << 17\r
-                        dev_state = dev_state|tmp #第17位=1\r
-                        EventMesh.publish("set_dev_state",dev_state)\r
-                        EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,dev_state]) #开始AL定位\r
-\r
-                if power >= 50:\r
-                    self.low_power_AL = 0\r
-\r
-            """未联网提示关机"""\r
-            ble=EventMesh.publish(constants.EVENT.GET_CONNECT)\r
-            # EventMesh.debug_log("ble",ble)\r
-            if ble == 0:#未联网提示关机\r
-                if battery[0] != '1':\r
-                    self.no_smi_count+=10\r
-                    # EventMesh.debug_log("self.no_smi_count",self.no_smi_count)\r
-                    if self.no_smi_count >= (15*60):#(15*60)\r
-                        self.no_smi_count = 0\r
-                        EventMesh.publish("open_power_on",2)#  #未检测到sim卡15分钟后关机\r
-                    \r
-            else:\r
-                self.no_smi_count = 0\r
-\r
-            msg_nums = sms.getMsgNums() #获取短信条数\r
-            # EventMesh.debug_log("msg_nums",msg_nums)\r
-            if(msg_nums != -1):\r
-                sms_data = sms.getSaveLoc()\r
-                sms_max = sms_data[0][2]\r
-                if msg_nums >= sms_max-1:\r
-                    EventMesh.publish("delete_sms_event")#\r
-\r
-            #佩戴检测\r
-            WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据\r
-            if self.wear != WEAR:\r
-                remove_sw = EventMesh.publish("get_storage_config","remove_sw")\r
-                if remove_sw == "1":#开启了佩戴检测的开关\r
-                    dev_state =  EventMesh.publish("get_dev_state")\r
-                    \r
-                    if WEAR != 1:\r
-                        tmp = 1 << 3\r
-                        tmp = ~tmp\r
-                        tmp = 1 << 20\r
-                        dev_state = dev_state|tmp #第20位=1\r
-                    # else :     \r
-                    #     pass              \r
-                        \r
-                    #     tmp = 1 << 20\r
-                    #     dev_state = dev_state|tmp #第20位=1\r
-                    #     tmp = 1 << 3\r
-                    #     dev_state = dev_state|tmp #第三位=1\r
-                        EventMesh.debug_log("佩戴检测:{}".format(dev_state))    \r
-                        EventMesh.publish("set_dev_state",dev_state)\r
-                        EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,dev_state]) #开始AL定位,发送报警\r
-                        #EventMesh.publish(constants.PROTOCOL.HELP_SEND,65)\r
-            self.wear = WEAR\r
-            """定时测量心率,血氧,体温"""\r
-            self.get_hr_state = EventMesh.publish("get_hr_state")\r
-            self.get_spo2_state = EventMesh.publish("get_spo2_state")\r
-            get_temp_time  = EventMesh.publish("get_temp_time")\r
-            get_temp_state  = EventMesh.publish("get_temp_state")\r
-            get_bp_state  = EventMesh.publish("get_bp_state")\r
-            get_bg_state  = EventMesh.publish("get_bg_state")\r
-            if get_bg_state == None:\r
-                get_bg_state = 0\r
-            if get_bp_state == None:\r
-                get_bp_state = 0\r
-\r
-            if get_temp_state == None:\r
-                get_temp_state = 0\r
-\r
-            if self.get_hr_state == None:\r
-                self.get_hr_state = 0\r
-            if self.get_spo2_state == None:\r
-                self.get_spo2_state = 0 \r
-        \r
-            call_state = EventMesh.publish("get_call_state")\r
-            if call_state == None:\r
-                call_state = 0\r
-            if battery[0] != "1":\r
-                if get_temp_state != None and call_state != None: #突然脱腕\r
-\r
-                    if get_temp_state > 1  and (WEAR != 1 or call_state != 0):\r
-                        EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-                        EventMesh.publish("set_temp_state",0)\r
-                        EventMesh.txt_log("auto stop_temp:22")\r
-\r
-                    if (self.get_hr_state > 1 or self.get_spo2_state > 1 or get_bp_state > 1 or get_bg_state > 1) and (WEAR != 1 or call_state != 0):\r
-                        # print("wear faile")\r
-                        if self.get_hr_state > 1 :\r
-                            EventMesh.txt_log("auto stop_hr:22")\r
-                            EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                            EventMesh.publish(constants.EVENT.STOP_HEART) \r
-                            if WEAR == 1:\r
-                                heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                                if heart_value >= 50 and heart_value != None:\r
-                                    EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-                            \r
-                        if self.get_spo2_state > 1:\r
-                            EventMesh.txt_log("auto stop_spo2:22")\r
-                            EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-\r
-                            EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                            spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                            if WEAR == 1:\r
-                                if spo2_value > 85 and spo2_value != None:\r
-                                    EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                            \r
-                        if get_bp_state > 1:\r
-                            EventMesh.txt_log("auto stop_bp:22")\r
-                            EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                            EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                            if WEAR == 1:\r
-                                blood_data = get_autoblood_value()\r
-                                if blood_data == None:\r
-                                    blood_data[0] = 0\r
-                                    blood_data[1] = 0\r
-\r
-                                max_value = blood_data[0]\r
-                                min_value = blood_data[1]\r
-                                if max_value != 0 and min_value != 0:\r
-                                    EventMesh.publish(constants.PROTOCOL.BLOOD_SEND,[max_value,min_value])\r
-                            \r
-                        if get_bg_state > 1:\r
-                            EventMesh.txt_log("auto stop_bg:22")\r
-                            EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                            EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                            if WEAR == 1:\r
-                                bg_data = get_blood_sugar_value()\r
-                                if bg_data == None:\r
-                                    bg_data = 0\r
-                                if bg_data != 0:\r
-                                    # EventMesh.publish("play_sugar_value", bg_data)#播放血糖数值\r
-                                    EventMesh.publish(constants.PROTOCOL.BLOODGLUSOCE_SEND,bg_data)\r
-                            \r
-            if self.pull_time == 0:\r
-                self.pull_time = time_tmp\r
-            # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#已联网 并且不在充电 佩戴正常 不在通话就给测试心率\r
-            if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and battery[0] != "1" and WEAR == 1 and call_state == 0:\r
-                #防止时间校时出错\r
-                if time_tmp < self.pull_time :\r
-                    self.pull_time = time_tmp\r
-                if time_tmp < self.temp_timeSecond:\r
-                    self.temp_timeSecond = time_tmp\r
-                if time_tmp < self.hr_timeSecond:\r
-                    self.hr_timeSecond = time_tmp\r
-                if time_tmp < self.spo2_timeSecond :\r
-                    self.spo2_timeSecond = time_tmp\r
-                if time_tmp < self.bp_timeSecond:\r
-                    self.bp_timeSecond = time_tmp\r
-                if time_tmp < self.bg_timeSecond:\r
-                     self.bg_timeSecond = time_tmp\r
-                     \r
-                if time_tmp - self.pull_time >= 30:\r
-                    # EventMesh.debug_log("shifens:")  \r
-\r
-                    get_hr_state = EventMesh.publish("get_hr_state")\r
-                    get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                    get_bp_state  = EventMesh.publish("get_bp_state")\r
-                    get_bg_state  = EventMesh.publish("get_bg_state")\r
-                    get_temp_state  = EventMesh.publish("get_temp_state")\r
-                    if get_hr_state == None:\r
-                        get_hr_state = 0\r
-                        self.old_hr_time = 0\r
-\r
-                    if get_spo2_state == None:\r
-                        get_spo2_state = 0\r
-                        self.old_spo2_time = 0\r
-\r
-                    if get_temp_state == None:\r
-                        get_temp_state = 0\r
-                        self.temp_one_state = 0\r
-\r
-                    if get_bp_state == None:\r
-                        get_bp_state = 0\r
-                        self.old_bp_time = 0\r
-                    \r
-                    if get_bg_state == None:\r
-                        get_bg_state = 0\r
-                        self.old_bg_time = 0\r
-                    \r
-                    # print("bp get_bp_state ",get_bp_state,self.old_bp_time)\r
-\r
-                    \r
-                    if get_hr_state != None:\r
-                        if get_hr_state == 3:\r
-                            self.old_hr_time+=1\r
-                            if self.old_hr_time == 1:\r
-                                EventMesh.publish("set_hr_state",3)#2代表后台进入测试\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_HEART)\r
-                                EventMesh.txt_log("auto start_hr:333")\r
-                            elif self.old_hr_time > 6:\r
-                                self.old_hr_time = 0\r
-                                EventMesh.publish("set_hr_state",0)#2代表后台进入测试\r
-                                EventMesh.txt_log("auto stop_hr:333")\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                                EventMesh.debug_log("heart_value:{}".format(heart_value))\r
-                                if heart_value >= 50 and heart_value != None:\r
-                                    EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-                                EventMesh.debug_log("STOP_HEART:3")\r
-                        else:\r
-                            self.old_hr_time = 0\r
-                    else:\r
-                        self.old_hr_time = 0\r
-\r
-\r
-                    if get_spo2_state != None:\r
-                        if get_spo2_state == 3:\r
-                            self.old_spo2_time+=1\r
-                            if self.old_spo2_time == 1:\r
-                                EventMesh.publish("set_spo2_state",3)#2代表后台进入测试\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧\r
-                                EventMesh.txt_log("auto start_spo2:333")\r
-                            elif self.old_spo2_time > 6:\r
-                                self.old_spo2_time = 0\r
-                                EventMesh.txt_log("auto stop_spo2:333")\r
-                                EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                                EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                                spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                                if spo2_value > 85 and spo2_value != None:\r
-                                    EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                                    \r
-                        else:\r
-                            self.old_spo2_time = 0\r
-                    else:\r
-                        self.old_spo2_time = 0\r
-\r
-\r
-                    if get_bp_state != None:\r
-                        if get_bp_state == 3:\r
-                            self.old_bp_time+=1\r
-                            if self.old_bp_time == 1:\r
-                                EventMesh.publish("set_bp_state",3)#2代表后台进入测试\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_HEART)\r
-                                EventMesh.txt_log("auto start_bp:333")\r
-                            elif self.old_bp_time > 6:\r
-                                self.old_bp_time = 0\r
-                                \r
-                                EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                blood_data = get_autoblood_value()\r
-                                if blood_data == None:\r
-                                    blood_data[0] = 0\r
-                                    blood_data[1] = 0\r
-\r
-                                max_value = blood_data[0]\r
-                                min_value = blood_data[1]\r
-                                if max_value != 0 and min_value != 0:\r
-                                    EventMesh.publish(constants.PROTOCOL.BLOOD_SEND,[max_value,min_value])\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                EventMesh.txt_log("auto stop_bp:333")\r
-                        else:\r
-                            self.old_bp_time = 0\r
-                    else:\r
-                        self.old_bp_time = 0\r
-\r
-                    if get_bg_state != None:\r
-                        if get_bg_state == 3:\r
-                            self.old_bg_time+=1\r
-                            if self.old_bg_time == 1:\r
-                                EventMesh.publish("set_bg_state",3)#2代表后台进入测试\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_HEART)\r
-                                EventMesh.txt_log("auto start_bg:333")\r
-                            elif self.old_bg_time > 6:\r
-                                self.old_bg_time = 0\r
-                                EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                bg_data = get_blood_sugar_value()\r
-                                if bg_data == None:\r
-                                    bg_data = 0\r
-                                if bg_data != 0:\r
-                                    EventMesh.publish(constants.PROTOCOL.BLOODGLUSOCE_SEND,bg_data)\r
-\r
-                                EventMesh.txt_log("auto stop_bp:333")\r
-                        else:\r
-                            self.old_bg_time = 0\r
-                    else:\r
-                        self.old_bg_time = 0\r
-\r
-                    \r
-                    if get_temp_state != None:\r
-                        if get_temp_state == 3:#单次测量\r
-                            self.temp_one_state+=1\r
-                            if self.temp_one_state == 1:\r
-                                EventMesh.txt_log("auto start_temp:333")\r
-                                EventMesh.debug_log("AUTO one temp:2") \r
-                                EventMesh.publish("set_temp_state",3)\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_TEMP)   \r
-                            elif self.temp_one_state > 3:\r
-                                self.temp_one_state = 0\r
-                                temp = EventMesh.publish(constants.EVENT.GET_TEMP) \r
-                                temp = self.optimize_temp(temp)\r
-                                \r
-                                EventMesh.publish("set_temp_state",0)\r
-                                tmp_f_tmp = 0\r
-                                tmp_d_tmp = 0\r
-                                if str(temp).find(".") != -1:\r
-                                    tmp_f = str(temp).split('.')[0] \r
-                                    tmp_f_tmp = int(tmp_f)\r
-                                    \r
-                                    tmp_d = str(temp).split('.')[1][:1]\r
-                                    tmp_d_tmp = int(tmp_d)\r
-                                else:\r
-                                    tmp_f_tmp = temp\r
-                                    \r
-                                if temp != None:\r
-                                    if temp != 0:\r
-                                        EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])\r
-                                EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-                                EventMesh.txt_log("auto start_temp:333")\r
-                        else:\r
-                            self.temp_one_state = 0\r
-\r
-\r
-        \r
-                    \r
-                    # EventMesh.debug_log("get_temp_time:{} self.temp_one_state:{}".format(get_temp_time,self.temp_one_state))\r
-                    if get_temp_time != None:#定时测量体温\r
-                        if get_temp_time > 0:\r
-                            if get_temp_state != None:\r
-                                get_temp_state  = EventMesh.publish("get_temp_state")\r
-                                if get_temp_state == 0 or get_temp_state == 2:\r
-                                    if (time_tmp-self.temp_timeSecond) >= get_temp_time:#大于一个周期的时间,重新赋值\r
-                                        self.temp_state = 0\r
-                                        self.temp_timeSecond = time_tmp\r
-\r
-                                    if (time_tmp-self.temp_timeSecond) == 0 and self.temp_state == 0:#一开始就测量 测量一分钟停止测量体温\r
-                                        self.temp_state = 1\r
-                                        EventMesh.publish("set_temp_state",2)\r
-                                        # EventMesh.publish("set_hr_blood_led",1)\r
-                                        EventMesh.debug_log("AUTO temp:") \r
-                                        EventMesh.txt_log("auto START_temp:1")\r
-                                        EventMesh.publish(constants.EVENT.START_TEMP)\r
-\r
-                                    elif (time_tmp-self.temp_timeSecond) >= 30 and self.temp_state == 1 and get_temp_state == 2:\r
-                                        self.temp_state = 0\r
-                                        EventMesh.txt_log("auto stop_temp:1")\r
-                                        EventMesh.publish("set_temp_state",0)\r
-                                        temp = EventMesh.publish(constants.EVENT.GET_TEMP) \r
-                                        temp = self.optimize_temp(temp)\r
-                                        \r
-                                        tmp_f_tmp = 0\r
-                                        tmp_d_tmp = 0\r
-                                        if str(temp).find(".") != -1:\r
-                                            tmp_f = str(temp).split('.')[0] \r
-                                            tmp_f_tmp = int(tmp_f)\r
-                                            \r
-                                            tmp_d = str(temp).split('.')[1][:1]\r
-                                            tmp_d_tmp = int(tmp_d)\r
-                                        else:\r
-                                            tmp_f_tmp = temp\r
-                                            \r
-                                        if temp != None:\r
-                                            if temp != 0:\r
-                                                EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])\r
-                                        EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-\r
-                                else:\r
-                                    self.temp_state = 0\r
-                                    self.old_temp_time = 0\r
-                        else:\r
-                            temp_state  = EventMesh.publish("get_temp_state") \r
-                            if temp_state == 2:\r
-                                EventMesh.publish("set_temp_state",0)#2代表后台进入测试\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                EventMesh.txt_log("auto wear stop_temp:2 ")\r
-                                EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-                            self.temp_state = 0\r
-                            self.temp_timeSecond = 0\r
-                            self.old_temp_time = 0\r
-\r
-\r
-\r
-                    hr_time = {}\r
-                    hr_time = EventMesh.publish("get_time_hr")#获取时间是否大于0\r
-                    # print("hr_time{}".format(hr_time))\r
-                    if hr_time[0] !=  None:\r
-                        self.mearsure_btn = int(hr_time[0])\r
-                        self.mearsure_timer = int(hr_time[1])\r
-\r
-                        if self.mearsure_btn != None and self.mearsure_timer != None:\r
-                            \r
-                            if self.mearsure_btn >= 1 and self.mearsure_timer > 0:#开关打开并且时间大于0就可以测试血糖\r
-                                get_hr_state = EventMesh.publish("get_hr_state")#心率\r
-                                get_spo2_state = EventMesh.publish("get_spo2_state")#血氧\r
-                                get_bp_state  = EventMesh.publish("get_bp_state")#血压\r
-                                get_bg_state  = EventMesh.publish("get_bg_state")#血糖\r
-                                # print("state hr",get_hr_state,get_spo2_state,get_bp_state,get_bg_state)\r
-                                if (get_bg_state == 0 and get_spo2_state == 0 and get_bp_state == 0) and  (get_hr_state == 2 or get_hr_state == 0):#心率血压血氧不在测试就测试血糖自动测量\r
-                                    if (time_tmp-self.hr_timeSecond) >= self.mearsure_timer:#大于一个周期的时间,保存的时间戳时间 1678 0 1678 30 1678 \r
-                                        self.hr_timeSecond = time_tmp\r
-                                        self.HR_Onestate = 0\r
-                                    # print("time_tmp hr",time_tmp,self.hr_timeSecond,time_tmp-self.hr_timeSecond,self.mearsure_timer,self.HR_Onestate)\r
-                                    if (time_tmp - self.hr_timeSecond) == 0 and self.HR_Onestate == 0:\r
-                                        self.HR_Onestate = 1\r
-                                        EventMesh.txt_log("auto START_hr:1")\r
-                                        EventMesh.publish("set_hr_state",2)#2代表后台进入测试\r
-                                        # EventMesh.publish("set_hr_blood_led",1)\r
-                                        EventMesh.publish(constants.EVENT.START_HEART)\r
-                                        \r
-                                    elif (time_tmp - self.hr_timeSecond) >= 60 and self.HR_Onestate == 1 and get_hr_state == 2:\r
-                                        self.HR_Onestate = 0\r
-                                        EventMesh.publish("set_hr_state",0)#2代表后台进入测试\r
-                                        EventMesh.debug_log("stop debug3")\r
-                                        EventMesh.txt_log("auto stop_hr:1")\r
-                                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                        heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                                        EventMesh.debug_log("heart_value:{}".format(heart_value))\r
-                                        # heart_value = 60+urandom.randint(0,10)\r
-                                        if heart_value >= 50 and heart_value != None:\r
-                                            EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-                                        #获取心率数据上传数据app\r
-                                        EventMesh.debug_log("STOP_HEART:")\r
-                                        \r
-                                else:\r
-                                    self.HR_Onestate = 0\r
-                            else:\r
-                                self.hr_timeSecond = 0\r
-                                self.HR_Onestate = 0\r
-                                hr_state = EventMesh.publish("get_hr_state")#心率\r
-                                if hr_state == 2:\r
-                                    EventMesh.publish("set_hr_state",0)#2代表后台进入测试\r
-                                    EventMesh.debug_log("33stop debug3")\r
-                                    # EventMesh.publish("stop_led_timer")#设置参数\r
-                                    EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                    EventMesh.txt_log("auto wear stop_hr:2 ")\r
-\r
-                    get_spo2time = EventMesh.publish("get_spo2_time")#血压自动测试\r
-                    # print("get_spo2time",get_spo2time)\r
-                    if get_spo2time != None:#血压时间不为0\r
-                        spo2_on = int(get_spo2time[0])\r
-                        spo2_time = int(get_spo2time[1])\r
-                        if spo2_on != 0 and spo2_time != 0:\r
-                            get_hr_state = EventMesh.publish("get_hr_state")\r
-                            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                            get_bp_state  = EventMesh.publish("get_bp_state")\r
-                            get_bg_state  = EventMesh.publish("get_bg_state")\r
-                            # print("state bg2",get_hr_state,get_spo2_state,get_bp_state,get_bg_state)\r
-                            if (get_hr_state == 0 and get_bp_state == 0 and get_bg_state == 0) and (get_spo2_state == 2 or get_spo2_state == 0):#心率血压血氧不在测试就测试血糖自动测量\r
-                                if (time_tmp-self.spo2_timeSecond) >= spo2_time:#大于一个周期的时间,保存的时间戳时间 1678 0 1678 30 1678 \r
-                                    self.spo2_timeSecond = time_tmp\r
-                                    self.spo2auto_state = 0\r
-                                # print("time_tmp spo2",time_tmp,self.spo2_timeSecond,time_tmp-self.spo2_timeSecond,self.bg_timer,self.bpauto_state)\r
-                                if (time_tmp - self.spo2_timeSecond) == 0 and self.spo2auto_state == 0:\r
-                                    self.spo2auto_state = 1\r
-                                    EventMesh.debug_log("START_spo2:auto")\r
-                                    EventMesh.txt_log("auto START_spo2:1")\r
-                                    EventMesh.publish("set_spo2_state",2)#2代表后台进入测试\r
-                                    EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧\r
-                                    \r
-                                elif (time_tmp - self.spo2_timeSecond) >= 60 and self.spo2auto_state == 1 and get_spo2_state == 2:\r
-                                    EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                                    self.spo2auto_state = 0\r
-                                    EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                                    spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                                    if spo2_value > 85 and spo2_value != None:\r
-                                        EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                                    EventMesh.txt_log("auto stop_spo2:1")\r
-                                \r
-                            else:\r
-                                self.spo2auto_state = 0\r
-                        else:\r
-                            self.spo2_timeSecond = 0\r
-                            self.spo2auto_state = 0\r
-                            spo2_state = EventMesh.publish("get_spo2_state")#心率\r
-                            if spo2_state == 2:\r
-                                EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                                EventMesh.debug_log("spo2 stop debug3")\r
-                                EventMesh.txt_log("auto wear stop_spo2:2 ")\r
-                                EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-\r
-\r
-                    get_bptime = EventMesh.publish("get_bp_time")#血压自动测试\r
-                    # print("get_bptime",get_bptime)\r
-                    if get_bptime != None:#血压时间不为0\r
-                        bp_on = int(get_bptime[0])\r
-                        bp_time = int(get_bptime[1])\r
-                        if bp_on != 0 and bp_time != 0:\r
-                            get_hr_state = EventMesh.publish("get_hr_state")\r
-                            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                            get_bp_state  = EventMesh.publish("get_bp_state")\r
-                            get_bg_state  = EventMesh.publish("get_bg_state")\r
-                            # print("state bg2",get_hr_state,get_spo2_state,get_bp_state,get_bg_state)\r
-                            \r
-                            if (get_hr_state == 0 and get_spo2_state == 0 and get_bg_state == 0) and (get_bp_state == 2 or get_bp_state == 0):#心率血压血氧不在测试就测试血糖自动测量\r
-                                if (time_tmp-self.bp_timeSecond) >= bp_time:#大于一个周期的时间,保存的时间戳时间 1678 0 1678 30 1678 \r
-                                    self.bp_timeSecond = time_tmp\r
-                                    self.bpauto_state = 0\r
-                                # print("time_tmp bp",time_tmp,self.bp_timeSecond,time_tmp-self.bp_timeSecond,self.bg_timer,self.bpauto_state)\r
-                                if (time_tmp - self.bp_timeSecond) == 0 and self.bpauto_state == 0:\r
-                                    self.bpauto_state = 1\r
-                                    EventMesh.debug_log("START_bp:auto")\r
-                                    EventMesh.txt_log("auto START_bp:1")\r
-                                    EventMesh.publish("set_bp_state",2)#2代表后台进入测试\r
-                                    # EventMesh.publish("set_hr_blood_led",1)\r
-                                    EventMesh.publish(constants.EVENT.START_HEART)\r
-                                    \r
-                                elif (time_tmp - self.bp_timeSecond) >= 60 and self.bpauto_state == 1 and get_bp_state == 2:\r
-                                    self.bpauto_state = 0\r
-                                    EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                                    blood_data = get_autoblood_value()\r
-                                    if blood_data == None:\r
-                                        blood_data[0] = 0\r
-                                        blood_data[1] = 0\r
-\r
-                                    max_value = blood_data[0]\r
-                                    min_value = blood_data[1]\r
-                                    if max_value != 0 and min_value != 0:\r
-                                        EventMesh.publish(constants.PROTOCOL.BLOOD_SEND,[max_value,min_value])\r
-                                    EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                    EventMesh.txt_log("auto stop_bp:1")\r
-                                    \r
-                            else:\r
-                                self.bpauto_state = 0\r
-                        else:\r
-                            self.bp_timeSecond = 0\r
-                            self.bpauto_state = 0\r
-                            bp_state = EventMesh.publish("get_bp_state")#心率\r
-                            if bp_state == 2:\r
-                                EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                                EventMesh.debug_log("bp stop debug3")\r
-                                EventMesh.txt_log("auto wear stop_bp:2 ")\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-\r
-\r
-\r
-                    bg_time = {}\r
-                    bg_time = EventMesh.publish("get_bgauto_time")\r
-                    if bg_time[0] != None:\r
-                    \r
-                        bg_btn = int(bg_time[0])\r
-                        bg_timer = int(bg_time[1]) \r
-                        # print("state bg2",self.bg_btn,self.bg_timer)\r
-                        if bg_btn >= 1 and bg_timer > 0:#开关打开并且时间大于0就可以测试血糖\r
-                            get_hr_state = EventMesh.publish("get_hr_state")\r
-                            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                            get_bp_state  = EventMesh.publish("get_bp_state")\r
-                            get_bg_state  = EventMesh.publish("get_bg_state")\r
-                            # print("state bg2",get_hr_state,get_spo2_state,get_bp_state,get_bg_state)\r
-                            \r
-                            if (get_hr_state == 0 and get_spo2_state == 0 and get_bp_state == 0) and (get_bg_state == 2 or get_bg_state == 0):#心率血压血氧不在测试就测试血糖自动测量\r
-                                if (time_tmp-self.bg_timeSecond) >= bg_timer:#大于一个周期的时间,保存的时间戳时间 1678 0 1678 30 1678 \r
-                                    self.bg_timeSecond = time_tmp #1780 \r
-                                    self.BG_state = 0\r
-                                # print("time_tmp bg",time_tmp,self.bg_timeSecond,time_tmp-self.bg_timeSecond,bg_timer,self.BG_state)\r
-                                if (time_tmp - self.bg_timeSecond) == 0 and self.BG_state == 0:\r
-                                    EventMesh.debug_log("START_bg:1")\r
-                                    EventMesh.txt_log("auto START_bg:1")\r
-                                    EventMesh.publish("set_bg_state",2)#2代表后台进入测试\r
-                                    # EventMesh.publish("set_hr_blood_led",1)\r
-                                    EventMesh.publish(constants.EVENT.START_HEART)\r
-                                    self.BG_state = 1\r
-                                elif (time_tmp - self.bg_timeSecond) >= 60 and self.BG_state == 1 and get_bg_state == 2:\r
-                                    self.BG_state = 0\r
-                                    EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                                    # EventMesh.publish("stop_led_timer")#设置参数\r
-                                    EventMesh.txt_log("auto stop_bg:1")\r
-                                    EventMesh.debug_log("stop bgdebug3")\r
-                                    EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                    bgdata = get_blood_sugar_value()\r
-                                    if bgdata == None:\r
-                                        bgdata = 0\r
-                                    if bgdata != 0:\r
-                                        EventMesh.debug_log("bgdata",bgdata)\r
-                                        EventMesh.publish(constants.PROTOCOL.BLOODGLUSOCE_SEND,bgdata)#上传心率数据\r
-                                    \r
-                            else:\r
-                                \r
-                                self.BG_state = 0\r
-                        else:\r
-                            bg_state  = EventMesh.publish("get_bg_state") \r
-                            if bg_state == 2:\r
-                                EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                EventMesh.debug_log("bg stop bgdebug3")\r
-                                EventMesh.txt_log("auto wear stop_bg:2 ")\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                            self.bg_timeSecond = 0\r
-                            self.BG_state = 0\r
-                    \r
-                else:\r
-                    self.old_temp_time = 0\r
-                    self.old_time = 0\r
-                    # self.hr_timeSecond = time_tmp\r
-                    self.HR_Onestate = 0\r
-                    self.HR_OneTime = 0\r
-                    self.HR_state = 0\r
-                    self.old_time = 0    \r
-                    self.old_bp_time = 0\r
-                    self.old_hr_time = 0\r
-                    self.old_spo2_time = 0\r
-                    self.set_hsenor_crt = 0\r
-                    self.old_bg_time = 0\r
-                    # self.bg_timeSecond = time_tmp\r
-                    self.BG_state = 0\r
-                    # self.temp_timeSecond = time_tmp\r
-\r
-                    # self.bp_timeSecond = time_tmp\r
-                    self.bpauto_state = 0\r
-\r
-                    # self.spo2_timeSecond = time_tmp\r
-                    self.spo2auto_state = 0\r
-\r
-                    self.temp_state = 0\r
-                    self.temp_one_state = 0\r
-\r
-            else:\r
-                self.old_temp_time = 0\r
-                self.old_time = 0\r
-                # self.hr_timeSecond = time_tmp\r
-                self.HR_Onestate = 0\r
-                self.HR_OneTime = 0\r
-                self.HR_state = 0\r
-                self.old_time = 0    \r
-                self.old_bp_time = 0\r
-                self.old_hr_time = 0\r
-                self.old_spo2_time = 0\r
-                self.set_hsenor_crt = 0\r
-                self.old_bg_time = 0\r
-                # self.bg_timeSecond = time_tmp\r
-\r
-                self.BG_state = 0\r
-                # self.temp_timeSecond = time_tmp\r
-\r
-                # self.bp_timeSecond = time_tmp\r
-                self.bpauto_state = 0\r
-\r
-                # self.spo2_timeSecond = time_tmp\r
-                self.spo2auto_state = 0\r
-\r
-                self.temp_state = 0\r
-                self.temp_one_state = 0\r
-\r
-                get_hr_state = EventMesh.publish("get_hr_state")\r
-                get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                get_bp_state  = EventMesh.publish("get_bp_state")\r
-                get_bg_state  = EventMesh.publish("get_bg_state")\r
-                if get_hr_state != None and get_spo2_state != None and get_bp_state != None and get_bg_state != None:\r
-                    if get_hr_state > 1:\r
-                        EventMesh.txt_log("auto stop_hr:44")\r
-                        EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                        # if get_hr_state == 3:\r
-                        #     EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.debug_log("stop debug8")\r
-                        if WEAR == 1:\r
-                            heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                            if heart_value >= 50 and heart_value != None:\r
-                                EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART) \r
-                    elif get_spo2_state > 1:\r
-                        EventMesh.txt_log("auto stop_spo2:44")\r
-                        EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                        # if get_spo2_state == 3:\r
-                        #     EventMesh.publish("stop_led_timer")#设置参数\r
-                        if WEAR == 1:\r
-                            spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                            if spo2_value > 85 and spo2_value != None:\r
-                                EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                        EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                        EventMesh.debug_log("stop debug13")\r
-                    elif get_bp_state > 1:\r
-                        EventMesh.txt_log("auto stop_bp:44")\r
-                        EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                        # if get_bp_state == 3:\r
-                        #     EventMesh.publish("stop_led_timer")#设置参数\r
-                        if WEAR == 1:\r
-                            blood_data = get_autoblood_value()\r
-                            if blood_data == None:\r
-                                blood_data[0] = 0\r
-                                blood_data[1] = 0\r
-\r
-                            max_value = blood_data[0]\r
-                            min_value = blood_data[1]\r
-                            if max_value != 0 and min_value != 0:\r
-                                EventMesh.publish(constants.PROTOCOL.BLOOD_SEND,[max_value,min_value])\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                        EventMesh.debug_log("stop debug14")\r
-                    elif get_bg_state > 1:\r
-                        EventMesh.txt_log("auto stop_bg:44")\r
-                        EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                        # if get_bg_state == 3:\r
-                        #     EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                        if WEAR == 1:\r
-                            bgdata = get_blood_sugar_value()\r
-                            if bgdata == None:\r
-                                bgdata = 0\r
-                            if bgdata != 0:\r
-                                EventMesh.publish(constants.PROTOCOL.BLOODGLUSOCE_SEND,bgdata)#上传心率数据\r
-                        EventMesh.debug_log("stop debug15")\r
-                get_temp_state  = EventMesh.publish("get_temp_state")\r
-                if get_temp_state != None:\r
-                    if get_temp_state > 1:\r
-                        self.temp_one_state = 0\r
-                        self.temp_state = 0\r
-                        temp = EventMesh.publish(constants.EVENT.GET_TEMP)       \r
-                        temp = self.optimize_temp(temp)\r
-                        EventMesh.txt_log("auto stop_temp:44")\r
-                        EventMesh.publish("set_temp_state",0)\r
-                        if WEAR == 1:\r
-                            tmp_f_tmp = 0\r
-                            tmp_d_tmp = 0\r
-                            if str(temp).find(".") != -1:\r
-                                tmp_f = str(temp).split('.')[0] \r
-                                tmp_f_tmp = int(tmp_f)\r
-                                \r
-                                tmp_d = str(temp).split('.')[1][:1]\r
-                                tmp_d_tmp = int(tmp_d)\r
-                            else:\r
-                                tmp_f_tmp = temp\r
-                                \r
-                            if temp != None:\r
-                                if temp != 0:\r
-                                    EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])\r
-                        EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-\r
-            \r
-\r
-\r
-            hr_state = EventMesh.publish("get_hr_state")\r
-            spo2_state = EventMesh.publish("get_spo2_state")\r
-            temp_state  = EventMesh.publish("get_temp_state")\r
-            if hr_state != None or spo2_state != None or temp_state != None:#手动测试\r
-                auto_hr = EventMesh.publish("get_start_measure_time")#设置开始测量的时间戳时间\r
-                if auto_hr == None:\r
-                    auto_hr = 0\r
-                if hr_state == 1:\r
-                    if auto_hr != 0:\r
-                        self.auto_hr_count+=1\r
-                        if  self.auto_hr_count > 6:\r
-                            self.auto_hr_count = 0\r
-                            EventMesh.publish("set_hr_state",0)#0代表g关闭测试\r
-                            EventMesh.debug_log("stop debug7")\r
-                            EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                            heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                            if heart_value >= 50 and heart_value != None:\r
-                                EventMesh.publish("play_hr_value",heart_value)\r
-                                # EventMesh.publish("set_history_hr_value",heart_value)\r
-                                EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-\r
-                            else:\r
-                                EventMesh.publish("play_hr_value",0) \r
-                            \r
-                            \r
-\r
-                        else :\r
-                            if WEAR != 1:\r
-                                EventMesh.publish("set_hr_state",0)#0代表g关闭测试\r
-                                EventMesh.debug_log("stop debug7")\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)                               \r
-                                EventMesh.publish("play_hr_value",0) \r
-                                \r
-                else:\r
-                    self.auto_hr_count = 0\r
-                    \r
-\r
-                auto_spo2 = EventMesh.publish("get_start_measure_time")#设置开始测量的时间戳时间\r
-                if auto_spo2 == None:\r
-                    auto_spo2 = 0\r
-                if spo2_state == 1:#手动测试血氧\r
-                    if auto_spo2 != None:\r
-                        if auto_spo2 != 0:\r
-                            self.auto_spo2_count+=1\r
-                            if self.auto_spo2_count > 6:\r
-                                self.auto_spo2_count = 0\r
-                                EventMesh.publish("set_spo2_state",0)#0代表g关闭测试\r
-                                EventMesh.debug_log("stop spo2 debug7")\r
-                                EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                                spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                                if spo2_value > 85 and spo2_value != None:\r
-                                    EventMesh.publish("play_spo2_value",spo2_value)\r
-                                    EventMesh.publish("set_old_spo2_data",spo2_value)\r
-                                    EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                                else:\r
-                                    EventMesh.publish("play_spo2_value",0)\r
-                            \r
-                            else:\r
-                                if WEAR != 1:\r
-                                    EventMesh.publish("set_spo2_state",0)#0代表g关闭测试\r
-                                    EventMesh.debug_log("stop debug8")\r
-                                    EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)                               \r
-                                    EventMesh.publish("play_spo2_value",0) \r
-                                    \r
-                else:\r
-                    self.auto_spo2_count = 0\r
-\r
-                if temp_state == 1:#手动测试体温\r
-                    auto_temp = EventMesh.publish("get_start_temp_measure_time")#设置开始测量的时间戳时间\r
-                    if auto_temp == None:\r
-                        auto_temp = 0\r
-                    if auto_temp != None:\r
-                        if auto_temp != 0:\r
-                            self.auto_temp_count += 1\r
-                            if self.auto_temp_count > 6:\r
-                                self.auto_temp_count = 0\r
-                                EventMesh.debug_log("体温测量结束")\r
-                                temp = EventMesh.publish(constants.EVENT.GET_TEMP)       \r
-                                temp = self.optimize_temp(temp)\r
-                                EventMesh.debug_log("temp",temp)\r
-                                EventMesh.publish("set_temp_state",0)\r
-                                tmp_f_tmp = 0\r
-                                tmp_d_tmp = 0\r
-                                if str(temp).find(".") != -1:\r
-                                    tmp_f = str(temp).split('.')[0] \r
-                                    tmp_f_tmp = int(tmp_f)\r
-                                    \r
-                                    tmp_d = str(temp).split('.')[1][:1]\r
-                                    tmp_d_tmp = int(tmp_d)\r
-                                else:\r
-                                    tmp_f_tmp = temp\r
-                                    \r
-                                if temp != None:\r
-                                    if temp != 0:\r
-                                        # EventMesh.publish("set_history_temp_value",temp)\r
-                                        EventMesh.publish("play_temp_value",temp)#播放体温数值\r
-                                        EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])\r
-                                    else:\r
-                                        # EventMesh.publish("set_history_temp_value",0)\r
-                                        EventMesh.publish("play_temp_value",0)#播放体温数值\r
-                                \r
-                                EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-\r
-                            else :\r
-                                if WEAR  != 1:\r
-                                    EventMesh.publish("set_temp_state",0)#0代表g关闭测试\r
-                                    EventMesh.debug_log("stop debug9")\r
-                                    EventMesh.publish(constants.EVENT.STOP_TEMP)                               \r
-                                    EventMesh.publish("play_temp_value",0) \r
-                                    \r
-                else:\r
-                    self.auto_temp_count = 0\r
-\r
-            EventMesh.publish("play_unread_wechat_infor")#每10s检测是否有未读语音数据\r
-\r
-            usb_state = EventMesh.publish("get_usb")#\r
-            \r
-\r
-            if battery[0] == '1':\r
-                # EventMesh.debug_log("battery[1]",battery[1])\r
-                if self.vbat_full_flag <= 120:\r
-                    self.vbat_full_flag+=10\r
-                    if self.vbat_full_flag == 60:#开机检测一次如果是充电标识为1就不再提示\r
-                        if usb_state != 1:\r
-                            EventMesh.publish("set_usb",1)#\r
-                else:\r
-                    if battery[1] >= 100:\r
-                        if self.charge_full_count == 0:#充电已满\r
-                            EventMesh.publish("set_usb",3)#\r
-                            EventMesh.debug_log("charge R_CHARGE_full")\r
-                            self.charge_full_count = 1\r
-                    \r
-            else:\r
-                self.charge_full_count = 0\r
-                low_power = battery[1]\r
-                if low_power <= 5:#小于5%红色灯慢闪\r
-                    EventMesh.publish("set_led_time_arg",[1,2,20*11,led_mode.FLASH_LIGHT_RED,20,10,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    # EventMesh.publish("set_led_time_arg",[1000,400,52,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#開始測量\r
-\r
-            \r
-            self.normal_alarm()\r
-            #喝水提醒\r
-            self.drink_alarm()\r
-            #该吃药了\r
-            self.medicine_alarm()\r
-            #该起床了\r
-            self.wakeup_alarm()\r
-            #该睡觉了\r
-            self.sleep_alarm()\r
-            #该回家了\r
-            self.home_alarm()\r
-            #该休息了\r
-            self.reset_alarm()\r
-\r
-\r
-            if self.alarm_flag == 0:\r
-                self.alarm_flag = 1\r
-                EventMesh.publish("set_rtc_alarm")\r
-\r
-        def clear_usb_flag(self,event,msg):\r
-            self.charge_full_count = 0\r
-        #普通闹钟\r
-        def normal_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.normal_oldtotalmin",self.normal_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.normal_oldtotalmin == 0:\r
-                self.normal_oldtotalmin = cur_total_min #549\r
-            if self.normal_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.normal_flag == 1:\r
-                    self.normal_flag = 0\r
-                    self.normal_count = 0\r
-            normal_alarm = []\r
-            normal_alarm = EventMesh.publish("get_storage_config","normal_alarm")\r
-            # EventMesh.debug_log("sleep info2",sleep,cur_total_min)\r
-            if self.normal_flag == 1:#表示闹钟响过清除标志\r
-                self.normal_count+=1\r
-                if self.normal_count > 6:\r
-                    self.normal_count = 0\r
-                    self.normal_flag = 0\r
-            if normal_alarm != None:\r
-                if len(normal_alarm) != 0 and normal_alarm != []:\r
-                    j = 0\r
-                    for i in range(len(normal_alarm)):\r
-                        # EventMesh.debug_log("normal_alarm normal_alarm 33",normal_alarm,j)\r
-                        normalalarm_hour = normal_alarm[j]["hour"]\r
-                        normalalarm_min = normal_alarm[j]["min"]\r
-                        normalalarm_day = normal_alarm[j]["day"]\r
-                        normalalarm_enale = normal_alarm[j]["enable"]\r
-                        normalalarm_totalmin = int(normalalarm_hour)*60+int(normalalarm_min)\r
-                        # EventMesh.debug_log("wake alarm",normalalarm_hour,sleep_min,sleep_day,sleep_enale,sleep_totalmin,week)\r
-                        if normalalarm_day == []:#单次闹钟只响一次\r
-                            if normalalarm_enale != 0:\r
-                                if cur_total_min > normalalarm_totalmin:\r
-                                    normal_alarm.pop(j)\r
-                                    self.normal_count = 0\r
-                                    self.normal_flag  = 0 \r
-                                    j=0\r
-                                    # EventMesh.debug_log("wakeup wakeup dayu",sleep,j)\r
-                                    EventMesh.publish("set_storage_config",["normal_alarm",normal_alarm])#删除之后重新保存\r
-                                    # sleep = EventMesh.publish("get_storage_config","sleep_alarm")#删除之后重新保存\r
-                                    continue\r
-                                else:\r
-                                    if normalalarm_totalmin == cur_total_min and self.normal_flag == 0:#14:00\r
-                                        self.normal_count = 0\r
-                                        self.normal_flag  = 0    \r
-                                        normal_alarm.pop(j)\r
-                                        # EventMesh.debug_log("wakeup wakeup1",sleep,j)\r
-                                        EventMesh.publish("set_storage_config",["normal_alarm",normal_alarm])#删除之后重新保存\r
-                                        EventMesh.publish("OPEN_ALARM_RING")                                                                                                                                            \r
-                                        break\r
-                        else:\r
-                            if normalalarm_enale != 0 and (week in normalalarm_day):#记录响过的时间分钟数\r
-                                if normalalarm_totalmin == cur_total_min and self.normal_flag == 0:#14:00\r
-                                    self.normal_flag  = 1\r
-                                    self.normal_count = 0\r
-                                    self.normal_oldtotalmin = normalalarm_totalmin\r
-                                    EventMesh.publish("OPEN_ALARM_RING")#                                                                                                                                                  \r
-                                    break\r
-                        j+=1\r
-\r
-\r
-        #喝水提醒\r
-        def drink_alarm(self):\r
-            date_tmp = utime.localtime()\r
-            time_tmp = utime.mktime(date_tmp)\r
-        \r
-            if self.drink_time == 0:\r
-                self.drink_time = time_tmp\r
-            \r
-            on = EventMesh.publish("get_storage_config","drink_on")\r
-            time = EventMesh.publish("get_storage_config","drink_time")\r
-            # print("drink info2",on,time)\r
-            if on != None and time != None:\r
-                if on != 0 and time != 0:\r
-                    if (time_tmp - self.drink_time) >= (time*60*60):#需要转换成小时3600\r
-                        self.drink_time = time_tmp \r
-                        EventMesh.publish("drink_alarm_event")#该喝水了\r
-                        #该喝水了\r
-                else:\r
-                    self.drink_time = 0\r
-            else:\r
-                self.drink_time = 0\r
-\r
-        #吃药提醒\r
-        def medicine_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # print("self.medicine_oldtotalmin",self.medicine_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.medicine_oldtotalmin == 0:\r
-                self.medicine_oldtotalmin = cur_total_min #549\r
-            if self.medicine_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.medicine_flag == 1:\r
-                    self.medicine_flag = 0\r
-                    self.medicine_count = 0\r
-            medicine = EventMesh.publish("get_storage_config","medicine")\r
-            # print("medicine info2",medicine,cur_total_min)\r
-            if self.medicine_flag == 1:#表示闹钟响过清除标志\r
-                self.medicine_count+=1\r
-                if self.medicine_count > 6:\r
-                    self.medicine_count = 0\r
-                    self.medicine_flag = 0\r
-            if medicine != None:\r
-                if len(medicine) != 0 and medicine != []:\r
-                    for i in range(len(medicine)):\r
-                        medicine_hour = medicine[i]["hour"]\r
-                        medicine_min = medicine[i]["min"]\r
-                        medicine_day = medicine[i]["day"]\r
-                        medicine_enale = medicine[i]["enable"]\r
-                        medicine_totalmin = int(medicine_hour)*60+int(medicine_min)\r
-                        # print("medicine alarm",medicine_hour,medicine_min,medicine_day,medicine_enale,medicine_totalmin,week)\r
-                        if medicine_day == []:\r
-                            if medicine_enale != 0:\r
-                                if medicine_totalmin == cur_total_min and self.medicine_flag == 0:#14:00\r
-                                    self.medicine_count = 0\r
-                                    self.medicine_flag  = 1    \r
-                                    self.medicine_oldtotalmin = medicine_totalmin#记录响过的时间分钟数\r
-                                    # print("medicine alarm1")\r
-                                    EventMesh.publish("medicine_alarm_event")#该吃药了                                                                                                                                              \r
-                                    break\r
-                        else:\r
-                            if medicine_enale != 0 and (week in medicine_day):#记录响过的时间分钟数\r
-                                if medicine_totalmin == cur_total_min and self.medicine_flag == 0:#14:00\r
-                                    self.medicine_flag  = 1\r
-                                    self.medicine_count = 0\r
-                                    self.medicine_oldtotalmin = medicine_totalmin\r
-                                    # print("medicine alarm2",)\r
-                                    EventMesh.publish("medicine_alarm_event")#该吃药了                                                                                                                                                   \r
-                                    break\r
-        #该起床了\r
-        def wakeup_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.wakeup_oldtotalmin",self.wakeup_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.wakeup_oldtotalmin == 0:\r
-                self.wakeup_oldtotalmin = cur_total_min #549\r
-            if self.wakeup_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.wakeup_flag == 1:\r
-                    self.wakeup_flag = 0\r
-                    self.wakeup_count = 0\r
-            wakeup = []\r
-            wakeup = EventMesh.publish("get_storage_config","wakeup_alarm")\r
-            # EventMesh.debug_log("wakeup info2",wakeup,cur_total_min)\r
-            if self.wakeup_flag == 1:#表示闹钟响过清除标志\r
-                self.wakeup_count+=1\r
-                if self.wakeup_count > 6:\r
-                    self.wakeup_count = 0\r
-                    self.wakeup_flag = 0\r
-            if wakeup != None:\r
-                if len(wakeup) != 0 and wakeup != []:\r
-                    j = 0\r
-                    for i in range(len(wakeup)):\r
-                        wakeup_hour = wakeup[j]["hour"]\r
-                        wakeup_min = wakeup[j]["min"]\r
-                        wakeup_day = wakeup[j]["day"]\r
-                        wakeup_enale = wakeup[j]["enable"]\r
-                        wakeup_totalmin = int(wakeup_hour)*60+int(wakeup_min)\r
-                        # EventMesh.debug_log("wake alarm",wakeup_hour,wakeup_min,wakeup_day,wakeup_enale,wakeup_totalmin,week)\r
-                        if wakeup_day == []:#单次闹钟只响一次\r
-                            if wakeup_enale != 0:\r
-                                if cur_total_min > wakeup_totalmin:\r
-                                    self.wakeup_count = 0\r
-                                    self.wakeup_flag  = 0    \r
-                                    wakeup.pop(j)\r
-                                    j=0#每次删除都从0开始遍历\r
-                                    # EventMesh.debug_log("wakeup wakeup1 dayu",wakeup,j)\r
-                                    EventMesh.publish("set_storage_config",["wakeup_alarm",wakeup])\r
-                                    continue\r
-                                else:\r
-                                    if wakeup_totalmin == cur_total_min and self.wakeup_flag == 0:#14:00\r
-                                        self.wakeup_count = 0\r
-                                        self.wakeup_flag  = 0    \r
-                                        wakeup.pop(j)\r
-                                        EventMesh.debug_log("wakeup wakeup1",wakeup,j)\r
-                                        EventMesh.publish("set_storage_config",["wakeup_alarm",wakeup])\r
-                                        EventMesh.publish("wakeup_alarm_event")#该吃药了                                                                                                                                              \r
-                                        break\r
-                        else:\r
-                            if wakeup_enale != 0 and (week in wakeup_day):#记录响过的时间分钟数\r
-                                if wakeup_totalmin == cur_total_min and self.wakeup_flag == 0:#14:00\r
-                                    self.wakeup_flag  = 1\r
-                                    self.wakeup_count = 0\r
-                                    self.wakeup_oldtotalmin = wakeup_totalmin\r
-                                    EventMesh.publish("wakeup_alarm_event")#该吃药了                                                                                                                                                   \r
-                                    break\r
-                        j+=1\r
-\r
-\r
-        #该睡觉了\r
-        def sleep_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.sleep_oldtotalmin",self.sleep_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.sleep_oldtotalmin == 0:\r
-                self.sleep_oldtotalmin = cur_total_min #549\r
-            if self.sleep_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.sleep_flag == 1:\r
-                    self.sleep_flag = 0\r
-                    self.sleep_count = 0\r
-            sleep = []\r
-            sleep = EventMesh.publish("get_storage_config","sleep_alarm")\r
-            # EventMesh.debug_log("sleep info2",sleep,cur_total_min)\r
-            if self.sleep_flag == 1:#表示闹钟响过清除标志\r
-                self.sleep_count+=1\r
-                if self.sleep_count > 6:\r
-                    self.sleep_count = 0\r
-                    self.sleep_flag = 0\r
-            if sleep != None:\r
-                if len(sleep) != 0 and sleep != []:\r
-                    j = 0\r
-                    count = int(len(sleep))\r
-                    for i in range(len(sleep)):\r
-                        # EventMesh.debug_log("wakeup wakeup 33",sleep,j)\r
-                        sleep_hour = sleep[j]["hour"]\r
-                        sleep_min = sleep[j]["min"]\r
-                        sleep_day = sleep[j]["day"]\r
-                        sleep_enale = sleep[j]["enable"]\r
-                        sleep_totalmin = int(sleep_hour)*60+int(sleep_min)\r
-                        # EventMesh.debug_log("wake alarm",sleep_hour,sleep_min,sleep_day,sleep_enale,sleep_totalmin,week)\r
-                        if sleep_day == []:#单次闹钟只响一次\r
-                            if sleep_enale != 0:\r
-                                if cur_total_min > sleep_totalmin:\r
-                                    sleep.pop(j)\r
-                                    self.sleep_count = 0\r
-                                    self.sleep_flag  = 0 \r
-                                    j=0\r
-                                    # EventMesh.debug_log("wakeup wakeup dayu",sleep,j)\r
-                                    EventMesh.publish("set_storage_config",["sleep_alarm",sleep])#删除之后重新保存\r
-                                    # sleep = EventMesh.publish("get_storage_config","sleep_alarm")#删除之后重新保存\r
-                                    continue\r
-                                else:\r
-                                    if sleep_totalmin == cur_total_min and self.sleep_flag == 0:#14:00\r
-                                        self.sleep_count = 0\r
-                                        self.sleep_flag  = 0    \r
-                                        sleep.pop(j)\r
-                                        # EventMesh.debug_log("wakeup wakeup1",sleep,j)\r
-                                        EventMesh.publish("set_storage_config",["sleep_alarm",sleep])#删除之后重新保存\r
-                                        EventMesh.publish("sleep_alarm_event")#该吃药了                                                                                                                                              \r
-                                        break\r
-                        else:\r
-                            if sleep_enale != 0 and (week in sleep_day):#记录响过的时间分钟数\r
-                                if sleep_totalmin == cur_total_min and self.sleep_flag == 0:#14:00\r
-                                    self.sleep_flag  = 1\r
-                                    self.sleep_count = 0\r
-                                    self.sleep_oldtotalmin = sleep_totalmin\r
-                                    EventMesh.publish("sleep_alarm_event")#该吃药了                                                                                                                                                   \r
-                                    break\r
-                        j+=1\r
-\r
-\r
-        #该回家了\r
-        def home_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.home_oldtotalmin",self.home_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.home_oldtotalmin == 0:\r
-                self.home_oldtotalmin = cur_total_min #549\r
-            if self.home_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.home_flag == 1:\r
-                    self.home_flag = 0\r
-                    self.home_count = 0\r
-            home = ''\r
-            home = EventMesh.publish("get_storage_config","home_alarm")\r
-            # EventMesh.debug_log("sleep info2",sleep,cur_total_min)\r
-            if self.home_flag == 1:#表示闹钟响过清除标志\r
-                self.home_count+=1\r
-                if self.home_count > 6:\r
-                    self.home_count = 0\r
-                    self.home_flag = 0\r
-            if home != None:\r
-                if len(str(home)) != 0 and str(home) != '':\r
-                    # EventMesh.debug_log("home home 33",home)\r
-                    home_hour = int(str(home).split(":")[0])\r
-                    home_min = int(str(home).split(":")[1])\r
-                    \r
-                    home_totalmin = int(home_hour)*60+int(home_min)\r
-                    if home_totalmin == cur_total_min and self.home_flag == 0:#14:00\r
-                        self.home_flag  = 1\r
-                        self.home_count = 0\r
-                        self.home_oldtotalmin = home_totalmin\r
-                        EventMesh.publish("home_alarm_event")#该回家了                                                                                                                                                   \r
-\r
-\r
-        \r
-        #该休息了\r
-        def reset_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.reset_oldtotalmin",self.reset_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.reset_oldtotalmin == 0:\r
-                self.reset_oldtotalmin = cur_total_min #549\r
-            if self.reset_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.reset_flag == 1:\r
-                    self.reset_flag = 0\r
-                    self.reset_count = 0\r
-            reset_alarm = []\r
-            reset_alarm = EventMesh.publish("get_storage_config","reset_alarm")\r
-            # EventMesh.debug_log("reset_alarm info2",len(reset_alarm),cur_total_min)\r
-            if self.reset_flag == 1:#表示闹钟响过清除标志\r
-                self.reset_count+=1\r
-                if self.reset_count > 6:\r
-                    self.reset_count = 0\r
-                    self.reset_flag = 0\r
-            if reset_alarm != None:\r
-                if len(str(reset_alarm)) != 0 and str(reset_alarm) != []:\r
-                    for i in range(len(reset_alarm)):\r
-                        # print("i",i)\r
-                        start_hour = int(reset_alarm[i]["start_hour"])\r
-                        start_min = int(reset_alarm[i]["start_min"])\r
-\r
-                        end_hour = int(reset_alarm[i]["end_hour"])\r
-                        end_min = int(reset_alarm[i]["end_min"])\r
-\r
-                        # EventMesh.debug_log("reset_alarm home 33",reset_alarm)\r
-                        \r
-                        start_totalmin = int(start_hour)*60+int(start_min)\r
-                        end_totalmin = int(end_hour)*60+int(end_min)\r
-\r
-                        if start_totalmin == cur_total_min and self.reset_flag == 0:#14:00\r
-                            self.reset_flag  = 1\r
-                            self.reset_count = 0\r
-                            self.reset_oldtotalmin = start_totalmin\r
-                            EventMesh.publish("reset_alarm_event")#该休息了     \r
-                            break\r
-\r
-                        if end_totalmin == cur_total_min and self.reset_flag == 0:\r
-                            self.reset_flag  = 1\r
-                            self.reset_count = 0\r
-                            self.reset_oldtotalmin = end_totalmin\r
-                            EventMesh.publish("reset_end_alarm_event")#休息结束了     \r
-                            break\r
-                                                                                                                                                                    \r
-\r
-        def clear_normal_alarm(self,event,msg):#普通闹钟清除标志\r
-            self.normal_flag = 0\r
-            self.normal_count = 0\r
-            self.normal_oldtotalmin = 0\r
-\r
-        def clear_reset_alarm(self,event,msg):#休息清除标志\r
-            self.reset_flag = 0\r
-            self.reset_count = 0\r
-            self.reset_oldtotalmin = 0\r
-\r
-        def clear_home_alarm(self,event,msg):#回家清除标志\r
-            self.home_flag = 0\r
-            self.home_count = 0\r
-            self.home_oldtotalmin = 0\r
-\r
-\r
-        def clear_medicine_alarm(self,event,msg):#吃药清除标志\r
-            self.medicine_count = 0\r
-            self.medicine_flag  = 0\r
-            self.medicine_oldtotalmin = 0\r
-        \r
-\r
-        def clear_wakeup_alarm(self,event,msg):#起床标识\r
-            self.wakeup_flag = 0\r
-            self.wakeup_count = 0\r
-            self.wakeup_oldtotalmin = 0\r
-\r
-        def clear_sleep_alarm(self,event,msg):#睡觉标识\r
-\r
-            self.sleep_flag = 0\r
-            self.sleep_count = 0\r
-            self.sleep_oldtotalmin = 0\r
-\r
-            \r
-\r
-\r
-        def get_sim_Status(self, event, msg):\r
-            return sim.getStatus()\r
-        def get_device_ope(self, event, msg):\r
-            """\r
-            获取设备运营商信息\r
-            :param event:\r
-            :param msg:\r
-            :return: 运营商\r
-            """\r
-            net_ope_map = {\r
-                "UNICOM": "中国联通HD",\r
-                "CMCC": "中国移动HD",\r
-                "CT": "中国电信HD"\r
-            }\r
-            """获取运营商"""\r
-            try:\r
-                short_eons = net.operatorName()[1]\r
-            except Exception:\r
-                return "无"\r
-            return net_ope_map.get(short_eons, None)\r
-\r
-        def get_signal(self, event=None, msg=None):\r
-            """\r
-            获取信号事件\r
-            :param event:\r
-            :param msg:\r
-            :return: int 类型\r
-            """\r
-            return net.csqQueryPoll()\r
-\r
-        def get_time_bucket(self, time):\r
-            if time < 12:\r
-                return '上午'\r
-            else:\r
-                return '下午'\r
-\r
-        def get_week(self, week):\r
-            if week == 1:\r
-                return '一'\r
-            elif week == 2:\r
-                return '二'\r
-            elif week == 3:\r
-                return '三'\r
-            elif week == 4:\r
-                return '四'\r
-            elif week == 5:\r
-                return '五'\r
-            elif week == 6:\r
-                return '六'\r
-            elif week == 7 or week == 0:\r
-                return '日'\r
-\r
-        def get_time(self, event=None, msg=None):\r
-            """\r
-            获取时间事件\r
-            :param event:\r
-            :param msg:\r
-            :return: HH:MM 格式\r
-            """\r
-            rtc_time = self.rtc.datetime()\r
-            \r
-            date = ("%d月%d日" % (rtc_time[1], rtc_time[2]))\r
-            year = ("%04d年" % (rtc_time[0]))\r
-            week = ("星期%s"%(self.get_week(rtc_time[3])))\r
-            week_data = rtc_time[3]\r
-            time = [rtc_time[4], rtc_time[5]]\r
-            time_quantum = ("%s" % (self.get_time_bucket(rtc_time[4])))\r
-            \r
-            result = [time, time_quantum, date , week,year,week_data]\r
-            #时分,上午下午,日期,星期,年 星期\r
-            return result\r
-\r
-        def get_step_count(self, event=None, msg=None):\r
-            """\r
-            获取步数\r
-            """\r
-            # print("11111:{}".format(EventMesh.publish("get_storage_config","clear_state3")))\r
-            XYZ = self.gsensor.get_x_y_z()\r
-            tmp = 0\r
-            step =[0,0,0,0]\r
-            tmp =  self.gsensor.get_step() \r
-            # EventMesh.debug_log("x:%d,y:%d,z:%d tmp %d",XYZ[0],XYZ[1],XYZ[2],tmp)\r
-            step[0]= tmp \r
-            step[1] = XYZ[0]\r
-            step[2] = XYZ[1]\r
-            step[3] = XYZ[2]\r
-            # print("1222:{}".format(EventMesh.publish("get_storage_config","clear_state3")))\r
-            return step\r
-\r
-        def get_ic_cid(self, event, msg):\r
-            """\r
-            获取ic cid事件\r
-            :param event:\r
-            :param msg:\r
-            :return: str ic cid\r
-            """\r
-            return sim.getIccid()\r
-\r
-        def get_phone_num(self, event, msg):\r
-            """\r
-            获取电话号码事件\r
-            :param event:\r
-            :param msg:\r
-            :return: str number\r
-            """\r
-            return sim.getPhoneNumber()\r
-\r
-        def get_battery(self, event=None, msg=None):\r
-            """\r
-            获取电池事件,暂时没支持\r
-            :param event:\r
-            :param msg:\r
-            :return:\r
-            """\r
-\r
-            charge_state = '0'\r
-            if self.get_usb_state() == 1:\r
-                charge_state = '1'\r
-            else:\r
-                charge_state = '0'\r
-\r
-            #temp = Power.getVbatt()\r
-            temp = EventMesh.publish("get_curr_battery_level")\r
-            vbat = EventMesh.publish("get_battery",temp)\r
-            if vbat == None:\r
-                vbat = 100\r
-            # EventMesh.debug_log("vbat",vbat)\r
-            # if temp != None :\r
-            #     if temp <= 3505:\r
-            #         vbat = 0 \r
-            #     elif temp <= 3699:\r
-            #         vbat = 20 #"E:/vbat_20.jpg"\r
-            #     elif temp <= 3772:\r
-            #         vbat = 40 #"E:/vbat_40.jpg"\r
-            #     elif temp <= 3882:\r
-            #         vbat = 60 #"E:/vbat_60.jpg"\r
-            #     elif temp <= 4070:\r
-            #         vbat = 80 #"E:/vbat_80.jpg"\r
-            #     elif temp <= 4200:\r
-            #         vbat = 90 #\r
-            #     else:\r
-            #         vbat = 100 #"E:/vbat_100.jpg"\r
-            # else:\r
-            #     vbat = 100\r
-\r
-            result = [charge_state, vbat]\r
-\r
-            return result\r
-        #Set the current average battery level\r
-        def set_curr_battery_level(self, event=None, msg=None):\r
-            self.curr_battery_level = msg\r
-        \r
-        def get_curr_battery_level(self, event=None, msg=None):\r
-            return self.curr_battery_level\r
-\r
-        def get_device_fw_version(self, *args):\r
-            '''\r
-            获取设备固件版本号\r
-            '''\r
-            fw_version = modem.getDevFwVersion()\r
-            if isinstance(fw_version, str):\r
-                return fw_version\r
-            return "--"\r
-\r
-        def get_standby_time(self, *args):\r
-            '''\r
-            获取设备单次开机待机时间\r
-            '''\r
-            time_msg = utime.time()\r
-            d = int(\r
-                time_msg / 86400)  # The int call removes the decimals.  Conveniently, it always rounds down.  int(2.9) returns 2 instead of 3, for example.\r
-            time_msg -= (\r
-                    d * 86400)  # This updates the value of x to show that the already counted seconds won't be double counted or anything.\r
-            h = int(time_msg / 3600)\r
-            time_msg -= (h * 3600)\r
-            m = int(time_msg / 60)\r
-            time_msg -= (m * 60)\r
-            s = time_msg\r
-            result = "{}天{}小时{}分".format(d, h, m)\r
-            return result\r
-\r
-        def set_key(self, topic, msg):\r
-            self.key = msg["value"]\r
-        def get_key(self, topic, msg):\r
-            return self.key\r
-\r
-        def get_imei(self, topic, msg):\r
-            if not self.imei:\r
-                self.imei = modem.getDevImei()\r
-            \r
-            # self.imei = "860132064231574" #860132060128634\r
-            return self.imei\r
-\r
-        def get_cid(self, topic, msg):\r
-            return self.cid\r
-\r
-        def set_cid(self, topic, msg):\r
-            self.cid = msg["value"]\r
-\r
-        def get_imsi(self, topic, msg):\r
-            if not self.imei:\r
-                self.imei = sim.getImsi()\r
-            return self.imsi\r
-\r
-        def get_password(self, topic, msg):\r
-            return self.password\r
-\r
-        def set_password(self, topic, msg):\r
-            self.password = msg["value"]\r
-\r
-        def set_ping(self, topic, msg):\r
-            self.PING = msg\r
-        def get_ping(self, topic, msg):\r
-            return self.PING\r
-\r
-        def set_connect(self, topic, msg):\r
-            #EventMesh.debug_log("set_connect:{}".format(msg))\r
-            self.connect = msg\r
-        def get_connect(self, topic, msg):\r
-            return self.connect\r
-\r
-        def start_blood_oxygen(self, topic, msg):\r
-            EventMesh.debug_log("start_blood_oxygen!!!")\r
-            self.hsensor.open_blood_oxygen()\r
-\r
-        def start_heart(self, topic, msg):\r
-            EventMesh.debug_log("start_heart!!!")\r
-            self.hsensor.open_heart()\r
-\r
-        def stop_blood_oxygen(self, topic, msg):\r
-            EventMesh.debug_log("stop_blood_oxygen!!!")\r
-            self.hsensor.close()\r
-\r
-        def stop_heart(self, topic, msg):\r
-            EventMesh.debug_log("stop_heart!!!")\r
-            self.hsensor.close()\r
-\r
-        def get_blood_oxygen(self, topic, msg):\r
-            data = self.hsensor.get_all_data()\r
-            return data[1]\r
-\r
-        def get_heart(self, topic, msg):\r
-            data = self.hsensor.get_all_data()\r
-            return data[0]\r
-        \r
-        def get_wear(self, topic, msg):\r
-            return self.hsensor.get_wear()\r
-        \r
-        def get_Hsensor(self, topic, msg):\r
-            return self.hsensor\r
-        \r
-        def Hsensor_set_sleep(self, topic, msg):\r
-            self.hsensor.set_sleep()\r
-\r
-        def start_temp(self, topic, msg):\r
-            EventMesh.debug_log("start_temp!!!!!!!")\r
-            WHO_AM_I = bytearray([0x01, 0])\r
-            I2C_SLAVE_ADDR = 0x49\r
-            #I2C_SLAVE_ADDR = 0x48\r
-            r_data = bytearray(2)\r
-            data = bytearray([0x61A0, 0])   # 唤醒\r
-            return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)\r
-        def stop_temp(self, topic, msg):\r
-            EventMesh.debug_log("stop_temp!!!!!!!")\r
-            WHO_AM_I = bytearray([0x01, 0])\r
-            I2C_SLAVE_ADDR = 0x49\r
-            #I2C_SLAVE_ADDR = 0x48\r
-            r_data = bytearray(2)\r
-            data = bytearray([0x60A0, 0])   #休眠\r
-            return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)\r
-            \r
-        def get_temp(self, topic, msg):\r
-            WHO_AM_I = bytearray([0x00, 0])\r
-            I2C_SLAVE_ADDR = 0x49\r
-            #I2C_SLAVE_ADDR = 0x48\r
-            r_data = bytearray(2)\r
-            self.i2c0.read(I2C_SLAVE_ADDR, WHO_AM_I, 1, r_data, 2, 0)\r
-            #EventMesh.debug_log("temp_data:{}".format(r_data))\r
-            temp_s = ((r_data[0]<<8) | (r_data[1]))>>4\r
-            #EventMesh.debug_log("temp_s:{}".format(temp_s))\r
-            temp_data = temp_s * 0.0625\r
-            EventMesh.debug_log("temp_data:{}".format(temp_data))\r
-            return temp_data\r
-    \r
-                \r
-\r
-        def sim_slot_get(self, topic=None, msg=None):\r
-            return sim.getCurSimid()\r
-\r
-        def sim_slot_switch(self, topic=None, slot=None):\r
-            """\r
-            sim 卡槽切换\r
-            :param topic:\r
-            :param slot:\r
-            :return: 切换sim卡卡槽  0 切换成功, 1 无需切换, -1 切换失败\r
-            """\r
-            if self.sim_slot_get() == slot:\r
-                return 1\r
-            else:\r
-                return sim.switchCard(slot)\r
-\r
-        def usb_event_cb(self, state):\r
-            status = state\r
-\r
-            if status == 1:#插入USB\r
-                EventMesh.debug_log("charge R_CHARGE_in")\r
-                EventMesh.publish("clear_usb_flag")\r
-                EventMesh.publish("set_usb", 1)#\r
-                pass\r
-            elif status == 0:#拨出usbs\r
-                EventMesh.publish("clear_usb_flag")\r
-                EventMesh.publish("set_usb", 2)#\r
-                EventMesh.debug_log("charge R_CHARGE_out")\r
-\r
-                \r
-                \r
-\r
-        \r
-\r
-        def get_usb_state(self):\r
-            state = self.usb.getStatus()\r
-            if state == -1:\r
-                state = 0\r
-            return state\r
-        \r
-\r
-    def wifiScan_cb(args):\r
-            EventMesh.publish(constants.EVENT.WIFIINFO, args)\r
-            wifiScan.control(0)\r
-\r
-    class LocationManager(Abstract):\r
-\r
-        def __init__(self):\r
-            self.gps = None\r
-            #self.match = GPSMatch()\r
-            self.timer_read_GPS_info = osTimer()\r
-            self.wifi_data = []\r
-            self.gps_data  = {}\r
-            self.cell_data = []\r
-            self.location_timer_count = 0\r
-            self.location_check_data_timer_count = 0\r
-            self.GGA_count = 0\r
-            self.RMC_A_count = 0\r
-            self.location_type = 0 #定位类型,0:正常定位,有gps数据或60秒关闭;1:测试模式,只有发CLOSE_LOCATION消息才关闭\r
-            self.location_flag = 0\r
-            self.start_location_flag = 0\r
-            self.location_thread_id  = 0\r
-            self.location_queue = Queue(100)\r
-            self.lpm_fd = None\r
-            self.start_agps = 0\r
-            read_data = EventMesh.publish("get_storage_config","isOpenGNSS")#获取是否打开GNSS\r
-            if read_data != None:\r
-                self.isOpenGNSS = read_data\r
-            else:#默认关闭GNSS\r
-                self.isOpenGNSS = "1"\r
-                EventMesh.publish("set_storage_config",["isOpenGNSS",self.isOpenGNSS])\r
-\r
-            self.isOpenGNSS = EventMesh.publish("get_storage_config","isOpenGNSS")\r
-            if self.isOpenGNSS == None:\r
-                self.isOpenGNSS = "1"\r
-            if self.isOpenGNSS == "1":\r
-                if quecgnss.init() == -1:\r
-                    self.isOpenGNSS = "0"\r
-                    EventMesh.publish("set_storage_config",["isOpenGNSS",self.isOpenGNSS])\r
-                else:\r
-                    quecgnss.gnssEnable(0)\r
-        @staticmethod\r
-        def get_date():\r
-            return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])\r
-\r
-        @staticmethod\r
-        def get_time():\r
-            return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])\r
-\r
-        def post_processor_after_instantiation(self):\r
-            # _gps_cfg = {\r
-            #     "UARTn": UART.UART1,\r
-            #     "buadrate": 115200,\r
-            #     "databits": 8,\r
-            #     "parity": 0,\r
-            #     "stopbits": 1,\r
-            #     "flowctl": 0,\r
-            #     "PowerPin": Pin.GPIO2,\r
-            #     "StandbyPin": Pin.GPIO3,\r
-            #     "BackupPin": None,\r
-            #     "gps_mode": 0x01,\r
-            # }\r
-            # self.gps = GPS(**_gps_cfg)\r
-            # self.gps.power_switch(0)#关闭GPS\r
-            EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)\r
-            EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)\r
-            EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)\r
-            EventMesh.subscribe(constants.EVENT.START_LOCATION_TEST, self.start_location_test)\r
-            EventMesh.subscribe(constants.EVENT.WIFIINFO, self.WIFI_INFO)\r
-            EventMesh.subscribe(constants.EVENT.WIFISCANOPEN,self.WIFI_scan_open)\r
-            EventMesh.subscribe(constants.EVENT.CLOSE_LOCATION,self.close_location)\r
-            EventMesh.subscribe("get_location_flag",self.get_location_flag)\r
-            \r
-            #EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)\r
-        def get_location_flag(self, event, msg):\r
-            return self.location_flag\r
-        def start_location(self, event, msg):\r
-            self.location_queue.put(msg)#测试类型入队\r
-            self.gps_data = {}\r
-            self.wifi_data = []\r
-            self.cell_data = []\r
-            self.location_timer_count = 0\r
-            self.GSV_sig_ok_count = 0\r
-            EventMesh.debug_log("start_location:{}".format(msg))\r
-            if( self.location_flag == 1):\r
-                return\r
-            _thread.stack_size((9+5)*1024)\r
-            self.location_thread_id  = _thread.start_new_thread(self.location_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            \r
-            self.location_flag = 1\r
-            self.timer_read_GPS_info.start(1000, 1, self.location_timer)\r
-            #self.gps_open(event, msg)\r
-\r
-\r
-        def start_location_test(self, event, msg):\r
-            EventMesh.debug_log("start_location_test")\r
-            \r
-            self.location_type = 1\r
-            if( self.location_flag == 1):\r
-                return\r
-            _thread.stack_size((9+4)*1024)\r
-            self.location_thread_id  = _thread.start_new_thread(self.location_thread, ())\r
-            _thread.stack_size(8*1024)\r
-        \r
-            self.location_timer_count = 0\r
-            self.location_flag = 1\r
-            #self.gps_open(event, msg)\r
-            self.location_type = 1\r
-            self.timer_read_GPS_info.start(1000, 1, self.location_timer)\r
-    \r
-\r
-        def close_location(self, event, msg):\r
-            self.location_flag = 0\r
-            self.location_type = 0\r
-            self.timer_read_GPS_info.stop()\r
-\r
-            \r
-\r
-        def WIFI_INFO(self, event, msg):\r
-            self.wifi_data = msg\r
-            # EventMesh.debug_log("WIFI_INFO:")\r
-            # EventMesh.debug_log([msg[0],msg])\r
-\r
-        def WIFI_scan_open(self, event, msg):\r
-            #EventMesh.debug_log("WIFI_scan_open")\r
-            \r
-\r
-            if wifiScan.getState() == False :\r
-                self.wifi_data = []\r
-                wifiScan.control(1)\r
-                wifiScan.setCfgParam(6, 2, 5,  0)  #设置WiFi参数,10秒上层,两轮,最多6个,6秒底层,PS优先\r
-                wifiScan.setCallback(wifiScan_cb) #注册回调函数\r
-                wifiScan.asyncStart()\r
-                #EventMesh.debug_log("wifiScan.asyncStart")\r
-            else :\r
-                EventMesh.debug_log("WIFI_scan_open:error1") \r
-        def gps_open(self, event, msg):\r
-            if self.isOpenGNSS == "1":\r
-                #EventMesh.debug_log("publish:gps_open")\r
-                #quecgnss.init()\r
-                quecgnss.gnssEnable(2)\r
-                #self.gps.__gps_nmea_data_clean()\r
-        def gps_close(self, event, msg):\r
-            if self.isOpenGNSS == "1":\r
-                quecgnss.gnssEnable(0)\r
-        def location_timer(self, *args, **kwargs):\r
-            \r
-            self.location_timer_count = self.location_timer_count +1\r
-            self.location_check_data_timer_count = self.location_check_data_timer_count+1\r
-\r
-        def Location_send(self, msg) :\r
-            EventMesh.debug_log("Location_send1")\r
-            if self.location_queue.empty() == True:\r
-                return\r
-            EventMesh.debug_log("Location_send2")\r
-            while True:\r
-                if self.location_queue.empty() == False:\r
-                    TYPE = self.location_queue.get()\r
-                    date = "{:04d}{:02d}{:02d},{:02d}{:02d}{:02d}".format(*utime.localtime()[0:6])\r
-                    date = date[2:]\r
-                    #date = "180916,025723"\r
-                    GPS_type = "V"\r
-                    latitude = "0.000000,N"\r
-                    longitude = "0.000000,E"\r
-                    speed = "0.00"\r
-                    direction = "0.0"\r
-                    high = "100.0"\r
-                    number = "0"\r
-                    precision = "24"\r
-                    if msg[0] :#有GPS数据\r
-                        GPS_type = "A"\r
-                        # 纬度\r
-                        latitude = msg[0]["latitude"]\r
-                        # 经度\r
-                        longitude = msg[0]["longitude"]\r
-                        # 速度\r
-                        speed = msg[0]["speed"]\r
-                        # 方向\r
-                        direction = "0"\r
-                        if msg[0]["direction"] :\r
-                            direction = msg[0]["direction"]\r
-                        # 高度\r
-                        high = msg[0]["high"]\r
-                        high_tmp = high.split(".")\r
-                        if len(high_tmp) >= 2 :\r
-                            high = "%s"%(high_tmp[0])\r
-                        # 讯号质量:搜索到的卫星数目\r
-                        number = msg[0]["number"]\r
-                        precision = msg[0]["precision"]\r
-                        #date = msg[0]["date"]\r
-                    \r
-                    #gsm 信号强度\r
-                    gsm_sig =  str((100//31)*EventMesh.publish("screen_get_sig"))\r
-                    # 电池电量百分比 \r
-                    bat_tmp = EventMesh.publish("screen_get_battery")\r
-                    battery_caption =  str(bat_tmp[1])\r
-                    #步数\r
-                    old_step = 0\r
-                    step = 0\r
-                    step = EventMesh.publish("get_old_step_value")\r
-                    if step != 0:\r
-                        tmp_data  = EventMesh.publish("get_storage_config","old_step_new")\r
-                        if tmp_data != None:\r
-                            old_step = tmp_data\r
-                        if old_step !=  step:\r
-                            EventMesh.publish("set_storage_config",["old_step",step])\r
-                            EventMesh.publish("set_storage_config",["old_step_new",step])\r
-                            \r
-                    old_step = step\r
-                    # step = str(EventMesh.publish(constants.EVENT.GET_STEP)[0])\r
-                    #翻转次数\r
-                    turn_count = "0"\r
-                    #终端状态\r
-                    state = "%08X"%(EventMesh.publish("get_dev_state"))\r
-                    #EventMesh.debug_log("TYPE:{}".format(TYPE))\r
-                    if type(TYPE) == list:#队列里的数据有终端状态,则用队里的终端状态\r
-                        if len(TYPE)>= 2 :\r
-                            state = "%08X"%(TYPE[1])\r
-                    \r
-                    EventMesh.debug_log("state:{}".format(state))\r
-                    #基站数据\r
-                    CELL_num = len(msg[2])\r
-                    CELL_data = "1," #时延\r
-                    if msg[2] != []:\r
-                        for CELL in msg[2] :\r
-                            if CELL[0] == 0 :\r
-                                CELL_data += "%X,"%(int(CELL[2])) #MCC\r
-                                CELL_data += str(CELL[3]) +","#MNC\r
-                                CELL_data += str(CELL[5]) +","#tac,区域码\r
-                                CELL_data += str(CELL[1]) +","#基站编号 CID\r
-                                CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi\r
-                            else :\r
-                                CELL_data += str(CELL[5]) +","#tac,区域码\r
-                                CELL_data += str(CELL[1]) +","#基站编号 CID\r
-                                CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi\r
-                        CELL_data = CELL_data[:(len(CELL_data)-1)]\r
-                    #WIFI数据\r
-                    WIFI_num = 0 \r
-                    WIFI_data = ""\r
-                    if msg[1] :\r
-                        WIFI_num = msg[1][0]\r
-                        i = 0\r
-                        for MAC in msg[1][1] :\r
-                            WIFI_data += "wifi%d,%s,%d,"%(i,str(MAC[0]),MAC[1])\r
-                            i += 1\r
-                        WIFI_data = WIFI_data[:(len(WIFI_data)-1)]\r
-                    WIFI_data = WIFI_data.lower()\r
-                    #send_data = "UD ,%s ,%s     ,%s       ,%s       ,%s   ,%s       ,%s  ,%s    ,%s     ,%s             ,%s  ,%s        ,%s   ,%d     ,%s       ,%d      ,%s"\\r
-                    #              %(date,GPS_type,latitude,longitude,speed,direction,high,number,gsm_sig,battery_caption,step,turn_count,state,CELL_num,CELL_data,WIFI_num,WIFI_data)\r
-                    #定位数据\r
-                    send_data = "%s,%s,%s"%(date,GPS_type,latitude)\r
-                    send_data += ",%s,%s,%s"%(longitude,speed,direction)\r
-                    send_data += ",%s,%s,%s"%(high,number,gsm_sig,)\r
-                    send_data += ",%s,%s,%s"%(battery_caption,step,turn_count)\r
-                    send_data += ",%s,%d,%s"%(state,CELL_num,CELL_data)\r
-                    send_data += ",%d,%s"%(WIFI_num,WIFI_data)\r
-                    send_data+=",%s"%(precision)\r
-                    #EventMesh.debug_log("Location_send2:{} q_size:{}".format(send_data,self.location_queue.size()))\r
-            \r
-                \r
-                    #EventMesh.debug_log("Location_send3:{}:{}".format(TYPE,send_data))\r
-                    if type(TYPE) == list:\r
-                        EventMesh.publish(TYPE[0],send_data)\r
-                    else:\r
-                        EventMesh.publish(TYPE,send_data)\r
-                else :\r
-                    break\r
-\r
-        def GxGGA_latitude(self, gga_data):\r
-            """Parse latitude from GGA"""\r
-            if gga_data:\r
-                latitude_re = ure.search(r",[0-9]+\.[0-9]+,[NS],", gga_data)\r
-                if latitude_re:\r
-                    latitude = latitude_re.group(0)[1:-3]\r
-                    return str(float(latitude[:2]) + float(latitude[2:]) / 60)\r
-            return ""\r
-        def GxGGA_longitude(self, gga_data):\r
-            """Parse longitude from GGA"""\r
-            if gga_data:\r
-                longitude_re = ure.search(r",[0-9]+\.[0-9]+,[EW],", gga_data)\r
-                if longitude_re:\r
-                    longitude = longitude_re.group(0)[1:-3]\r
-                    return str(float(longitude[:3]) + float(longitude[3:]) / 60)\r
-            return ""\r
-\r
-        def GxGGA_altitude(self, gga_data):\r
-            """Parse altitude from GGA"""\r
-            if gga_data:\r
-                altitude_re = ure.search(r",-*[0-9]+\.[0-9]+,M,", gga_data)\r
-                if altitude_re:\r
-                    return altitude_re.group(0)[1:-3]\r
-            return ""\r
-        def location_thread(self):\r
-            \r
-            self.wifi_data = []\r
-            self.gps_data = {}\r
-            self.cell_data = []\r
-            gnss_r_data = []\r
-            self.GSV_sig_ok_count = 0\r
-            self.GSV_sig_very_ok_count = 0\r
-            self.GGA_count = 0\r
-            self.RMC_A_count = 0\r
-            # if self.start_agps == 1: #开启agps\r
-            #     self.start_agps = 0\r
-            #     quecgnss.configSet(2,1)\r
-            if self.lpm_fd == None:\r
-                self.lpm_fd = pm.create_wakelock("test_lock", len("test_lock"))\r
-            pm.wakelock_lock(self.lpm_fd)\r
-            EventMesh.debug_log("location_thread:1")\r
-            EventMesh.publish(constants.EVENT.GPSOPEN)\r
-            EventMesh.debug_log("location_thread:2")\r
-            #self.timer_read_GPS_info.start(1000, 1, self.location_timer)\r
-            EventMesh.debug_log("location_thread:3")\r
-            #utime.sleep_ms(1000)\r
-            self.location_timer_count = 0\r
-            #quecgnss.read(4096)#去掉第一次错误数据\r
-            #EventMesh.txt_log("START_LOCATION")\r
-            # pm.autosleep(0)#唤醒\r
-            # pm.sclkEx_set(0, 1, 5)\r
-            GSV_dict= {}\r
-            while self.location_flag == 1:\r
-                try :   \r
-                    \r
-                    match_gga_data = []\r
-                    #match_gsv_data = []\r
-                    gnss_r_data = []\r
-                    # if self.location_check_data_timer_count >= 3:\r
-                    #     pm.autosleep(0)#唤醒\r
-                    #     pm.sclkEx_set(0, 1, 5)\r
-                    if self.location_check_data_timer_count >= 1 :#3秒查一次基站数据和wifi数据\r
-                        self.location_check_data_timer_count = 0\r
-                        #EventMesh.debug_log(self.location_timer_count)\r
-                        GSV_dict= {}\r
-                        if self.isOpenGNSS == "1":                    \r
-                            #检查GNSS数据\r
-                            if ( self.gps_data == {} or self.location_type == 1) and quecgnss.get_state() == 2:\r
-\r
-                                pass\r
-                                tmp_ok_count = 0\r
-                                tmp_very_ok_count = 0\r
-                                gsv_data = quecgnss.get_gsv()\r
-                                rmc_data = quecgnss.get_rmc()\r
-                                gga_data = quecgnss.get_gga()\r
-                                vtg_data = quecgnss.get_vtg()\r
-                                # EventMesh.debug_log("gsv:{}".format(quecgnss.get_gsv()))\r
-                                # EventMesh.debug_log("gga:{}".format(quecgnss.get_gga()))\r
-                                # EventMesh.debug_log("rmc:{}".format(quecgnss.get_rmc()))\r
-                                # EventMesh.debug_log("vtg:{}".format(quecgnss.get_vtg())) \r
-                                for i in range(len(gsv_data)) :\r
-                                    \r
-                                    if i % 2 == 0:\r
-                                        if i+1 >= len(gsv_data) :\r
-                                            # EventMesh.debug_log("gsv_data num error!!")\r
-                                            break\r
-                                        GSV_dict[gsv_data[i]] = gsv_data[i+1]\r
-                                        #EventMesh.debug_log("type:gsv_data{}".format(type(gsv_data[i+1])))\r
-                                        try:\r
-                                            #EventMesh.debug_log("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))\r
-                                            if gsv_data[i+1] :\r
-                                                if (gsv_data[i+1])>=20:\r
-                                                    tmp_ok_count +=1   \r
-                                                if (gsv_data[i+1])>=30:\r
-                                                    tmp_very_ok_count +=1  \r
-                                                    \r
-                                        except Exception as e:\r
-                                            usys.print_exception(e)\r
-                                        \r
-                                if(tmp_ok_count > self.GSV_sig_ok_count ):\r
-                                    self.GSV_sig_ok_count = tmp_ok_count\r
-                                if(tmp_very_ok_count > self.GSV_sig_very_ok_count ):\r
-                                    self.GSV_sig_very_ok_count = tmp_very_ok_count\r
-                                match_rmc_data = rmc_data.split(",")\r
-                                if len (match_rmc_data)>3: #有rmc数据\r
-                                        if match_rmc_data[2] == 'A':    \r
-                                            match_gga_data = gga_data.split(",")\r
-                                            if len(match_gga_data) >4: #数据全\r
-                                                match_vtg_data = vtg_data.split(",")\r
-                                                gps_date = "%s,%s"%(match_rmc_data[9],match_rmc_data[1][:6])#日期\r
-                                                #gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])\r
-                                                latitude = "0,N" #纬度\r
-                                                latitude_tmp = str(self.GxGGA_latitude(gga_data)).split(".")\r
-                                                if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:\r
-                                                    latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])\r
-                                                    latitude = "%s,%s"%(latitude,match_rmc_data[4] )\r
-\r
-                                                longitude = "0,E"#经度\r
-                                                longitude_tmp = str(self.GxGGA_longitude(gga_data)).split(".")\r
-                                                if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:\r
-                                                    longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])\r
-                                                    longitude = "%s,%s"%(longitude,match_rmc_data[6] ) #match_rmc_data[6] + str(gnss_r_data[1])\r
-                                                \r
-                                                high = "0"#高度\r
-                                                high = str(self.GxGGA_altitude(gga_data))\r
-                                                number = "0"#可用卫星\r
-                                                precision = "5.8"#精度\r
-                                                if len(match_gga_data)>5 :\r
-                                                    if match_gga_data[7]:\r
-                                                        number = match_gga_data[7]\r
-                                                    if match_gga_data[8]:\r
-                                                        precision = match_gga_data[8]\r
-                                                direction = "249.5" #方向\r
-                                                speed = '0.00'    #速度    \r
-                                                if(len(match_vtg_data)>5 ):\r
-                                                    if match_vtg_data[1]:\r
-                                                        direction =  match_vtg_data[1]\r
-                                                    if match_vtg_data[7]:    \r
-                                                        speed =  match_vtg_data[7]\r
-                                                self.gps_data = {\r
-                                                    "latitude": latitude,\r
-                                                    "longitude": longitude,\r
-                                                    "high": high,\r
-                                                    "direction": direction,\r
-                                                    "speed": speed,\r
-                                                    "number": number, \r
-                                                    "date":  gps_date,\r
-                                                    "precision":  precision\r
-                                                }\r
-    # ***********************************************************************************\r
-\r
-\r
-                    #检查wifi数据\r
-                    if self.wifi_data == [] or (self.wifi_data != [] and self.wifi_data[0] == 0):#and self.wifi_data[0] <= 0:\r
-                        EventMesh.publish(constants.EVENT.WIFISCANOPEN)\r
-                \r
-                    #检查基站数据\r
-                    if self.cell_data == []:   \r
-                        data_tmp = net.getCellInfo()\r
-                        if(len(data_tmp)>=2):\r
-                            for cell in data_tmp:\r
-                                if cell and cell[0][0] == 0 and len(cell[0]) > 1:\r
-                                    self.cell_data = cell\r
-                                    break\r
-\r
-                    if self.location_type == 1: #测试模式\r
-                        self.location_timer_count = 0\r
-                        \r
-                        EventMesh.publish("PUSH_LOCATION_DATA", [[self.gps_data,GSV_dict],self.wifi_data,self.cell_data]) \r
-                        if self.gps_data  != {} : #发送数据 \r
-                            EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位\r
-                            self.location_queue.put(constants.PROTOCOL.UD_SEND)\r
-                            self.Location_send([self.gps_data,self.wifi_data,self.cell_data])\r
-                            \r
-\r
-                    elif self.location_type == 0: #正常模式     \r
-                        if self.gps_data  != {} or self.location_timer_count > 100: #or( self.wifi_data != [] and self.cell_data != []): \r
-                            if self.location_queue.empty() == False:#有定位队列\r
-                                pass\r
-                                #EventMesh.txt_log("LOCATION timer:{} ok:{} very_ok:{}".format(self.location_timer_count,self.GSV_sig_ok_count))   \r
-                                #EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))\r
-                            if self.gps_data  == {}: #定位超时,且信噪比多个大于30,下次启动agps\r
-                                if self.GSV_sig_very_ok_count > 3:#3个超30以上\r
-                                    self.start_agps = 1\r
-                                    #EventMesh.txt_log("open agps:{}".format(GSV_dict))\r
-                            #upload_time = EventMesh.publish("get_upload_data")    \r
-                            self.Location_send([self.gps_data,self.wifi_data,self.cell_data])\r
-                            #if upload_time > 200  : \r
-                            EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位\r
-                            # else:   #定位间隔小于3分钟不关闭gps,不影响无信号判断\r
-                            #     self.location_timer_count = 0\r
-                            #     self.GSV_sig_ok_count = 0\r
-                                \r
-                            \r
-\r
-                            \r
-                        if (self.isOpenGNSS != "1" or (self.GSV_sig_ok_count <= 1 and self.location_timer_count > 20)) and self.wifi_data != [] and self.cell_data != [] : #超过40秒且信号大于30的不足3个\r
-                            EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 \r
-                            EventMesh.debug_log("Location_send:CLOSE_LOCATION")  \r
-                            #EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))\r
-                            self.Location_send([self.gps_data,self.wifi_data,self.cell_data])\r
-\r
-                \r
-                    \r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                    EventMesh.txt_log("location_thread:ERROR:".format(e))\r
-                    #EventMesh.debug_log("location_thread:ERROR:{}".format(usys.print_exception(e)))\r
-                    EventMesh.debug_log("self.gps_data{},self.wifi_data{},self.cell_data{}".format(self.gps_data,self.wifi_data,self.cell_data))\r
-                    #self.Location_send([self.gps_data,self.wifi_data,self.cell_data])\r
-                    EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 \r
-                utime.sleep_ms(500)\r
-\r
-            #self.timer_read_GPS_info.stop()\r
-            #self.gps.power_switch(0)\r
-            wifiScan.control(0)\r
-            EventMesh.publish(constants.EVENT.GPSCLOSE)\r
-            # if EventMesh.publish("get_lcd_state" ) == 0:#休眠的时候,恢复休眠\r
-            #     pm.autosleep(1)\r
-            #     pm.sclkEx_set(1, 1, 5)\r
-            if self.lpm_fd != None:\r
-                pm.wakelock_unlock(self.lpm_fd)\r
-            #pm.delete_wakelock(lpm_fd)\r
-            EventMesh.debug_log("CLOSE_LOCATION")\r
-            #EventMesh.txt_log("CLOSE_LOCATION")\r
-\r
-                    \r
-\r
-    class AddrBookManager(Abstract):\r
-        # 通讯录\r
-        def __init__(self):\r
-            self.read_phonebook = {}\r
-            self.check_json = 0\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/phonebook.json")\r
-\r
-            if self.check_json == True:\r
-                with open("/usr/static/storage_file/phonebook.json","r",encoding="utf-8") as fd:\r
-                    self.read_phonebook = ujson.load(fd)\r
-                    EventMesh.debug_log("读取电话本")\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_phonebook_list", self.get)\r
-            EventMesh.subscribe("set_phonebook_list", self.set)\r
-            EventMesh.subscribe("call_phonebook_one_call", self.call_phonebook_one_call)\r
-            EventMesh.subscribe("call_phonebook_two_call", self.call_phonebook_two_call)\r
-            EventMesh.subscribe("call_phonebook_three_call", self.call_phonebook_three_call)\r
-\r
-            EventMesh.subscribe("call_phonebook_num", self.call_phonebook_num)\r
-\r
-        def get(self, event, msg):\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/phonebook.json")\r
-            return [self.check_json,self.read_phonebook]\r
-        \r
-        def call_phonebook_num(self, event, msg):\r
-            name = ''\r
-            key_tmp = ''\r
-            phone_num = int(msg)\r
-            if self.read_phonebook != {}:\r
-                if len(self.read_phonebook) >= phone_num:\r
-                    phonebook_keys = sorted(self.read_phonebook.keys())\r
-                    name = self.read_phonebook[phonebook_keys[phone_num-1]]\r
-                    key_tmp = phonebook_keys[phone_num-1]\r
-                    if len(name) != 0:\r
-                        EventMesh.publish("save_phonename",str(name))\r
-                        EventMesh.publish("save_phonenum",str(name))\r
-                        EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                else:\r
-                    EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            else:\r
-                EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            EventMesh.debug_log("call_phonebook_call name:{} msg:{}".format(len(self.read_phonebook),msg))\r
-\r
-        def call_phonebook_one_call(self, event, msg):\r
-            name = ''\r
-            key_tmp = ''\r
-            if self.read_phonebook != {}:\r
-                if len(self.read_phonebook) >= 1:\r
-                    phonebook_keys = sorted(self.read_phonebook.keys())\r
-                    name = self.read_phonebook[phonebook_keys[0]]\r
-                    key_tmp = phonebook_keys[0]\r
-                    if len(name) != 0:\r
-                        EventMesh.publish("save_phonename",str(name))\r
-                        EventMesh.publish("save_phonenum",str(name))\r
-                        EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                else:\r
-                    EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            else:\r
-                EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            EventMesh.debug_log("call_phonebook_one_call name:{} key_tmp:{} len:{}".format(name,key_tmp,len(self.read_phonebook)))\r
-\r
-        def call_phonebook_two_call(self, event, msg):\r
-            name = ''\r
-            key_tmp = ''\r
-            if self.read_phonebook != {}:\r
-                if len(self.read_phonebook) >= 2:\r
-                    phonebook_keys = sorted(self.read_phonebook.keys())\r
-                    name = self.read_phonebook[phonebook_keys[1]]\r
-                    key_tmp = phonebook_keys[1]\r
-                    if len(name) != 0:\r
-                        #voiceCall.callStart(str(name))\r
-                        EventMesh.publish("save_phonename",str(name))\r
-                        EventMesh.publish("save_phonenum",str(name))\r
-                        EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                    \r
-                else:\r
-                    EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            else:\r
-                EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                EventMesh.debug_log("call_phonebook_two_call name:{} key_tmp:{}".format(name,key_tmp))\r
-        \r
-        def call_phonebook_three_call(self, event, msg):\r
-            name = ''\r
-            key_tmp = ''\r
-            if self.read_phonebook != {}:\r
-                if len(self.read_phonebook) >= 3:\r
-                    phonebook_keys = sorted(self.read_phonebook.keys())\r
-                    name = self.read_phonebook[phonebook_keys[2]]\r
-                    key_tmp = phonebook_keys[2]\r
-                    if len(name) != 0:\r
-                        #voiceCall.callStart(str(name))\r
-                        EventMesh.publish("save_phonename",str(name))\r
-                        EventMesh.publish("save_phonenum",str(name))\r
-                        EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                    \r
-                else:\r
-                    EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            else:\r
-                EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            EventMesh.debug_log("call_phonebook_three_call name:{} key_tmp:{}".format(name,key_tmp))\r
-\r
-        def set(self, event, msg):\r
-            self.check_json = msg[0]\r
-            self.read_phonebook = msg[1]\r
-\r
-    import sms\r
-    class MsgManager(Abstract):\r
-        # 短信\r
-        def __init__(self):\r
-            self.msg_nums = 0\r
-            self.msg_detail = ""\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_msg_nums", self.get_msg_nums)\r
-            # 可通过此push_addr_book_list主动推送\r
-            EventMesh.subscribe("get_msg_detail", self.get_msg_detail)\r
-\r
-        def get_msg_nums(self, event, msg):\r
-\r
-            self.msg_nums = sms.getMsgNums() \r
-            EventMesh.debug_log("self.msg_nums {}:".format(self.msg_nums))\r
-            return self.msg_nums\r
-        \r
-        def get_msg_detail(self, event, msg):\r
-            \r
-            # self.msg_detail = sms.searchTextMsg(self.msg_nums)\r
-            # EventMesh.debug_log("self.msg_detai {}:".format(self.msg_detai))\r
-            return{\r
-                "小明":"有内鬼,停止交易",\r
-                "小红":"今晚十点一起吃饭"\r
-            }\r
-\r
-    class MsgdetailManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-            self.msg_name = ""\r
-            self.msg_content = ""\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("save_msg_name", self.save_msg_name)\r
-            EventMesh.subscribe("save_msg_content", self.save_msg_content)\r
-            EventMesh.subscribe("get_msg_name", self.get_msg_name)\r
-            EventMesh.subscribe("get_msg_content", self.get_msg_content)\r
-\r
-        def save_msg_name(self, event, msg): \r
-            self.msg_name = str(msg)\r
-            EventMesh.debug_log("save_msg_name:msg".format(msg))\r
-        \r
-        def save_msg_content(self, event, msg):\r
-            self.msg_content = str(msg)\r
-            EventMesh.debug_log("save_msg_content:msg".format(msg))\r
-        \r
-        def get_msg_content(self, event, msg):\r
-            return self.msg_content\r
-\r
-        def get_msg_name(self, event, msg):\r
-            return self.msg_name\r
-\r
-    class CallLogManager(Abstract):\r
-        # 通话记录\r
-        def __init__(self):\r
-            self.read_call_log = {}\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/Call_log.json")\r
-\r
-            if self.check_json == True:\r
-                with open("/usr/static/storage_file/Call_log.json","r",encoding="utf-8") as fd:\r
-                    self.read_call_log = ujson.load(fd)\r
-                    EventMesh.debug_log("读取通话记录")\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_call_log_list", self.get)\r
-            EventMesh.subscribe("set_call_log_list", self.set)\r
-\r
-        def get(self, event, msg):\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/Call_log.json")\r
-            return [self.check_json,self.read_call_log]\r
-\r
-        def set(self, event, msg):\r
-            return\r
-            self.check_json = msg[0]\r
-            self.read_call_log = msg[1]\r
-            with open("/usr/static/storage_file/Call_log.json","w+",encoding="utf-8") as fd:\r
-                ujson.dump(self.read_call_log,fd)\r
-        # def call_usr(self,event,msg):\r
-        #     content = self.log[msg]\r
-        #     # 参数1 姓名  参数2  电话   参数3 1/主动呼叫  0别人呼叫\r
-        #     EventMesh.publish("call_in", [content[2], content[0], 1])\r
-\r
-\r
-\r
-    class PhoneCallingManager(Abstract):\r
-        def __init__(self):\r
-            self.phonenum = ""\r
-            self.phonename = ""\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("save_phonenum", self.save_phonenum)\r
-            EventMesh.subscribe("get_phonenum", self.get_phonenum)\r
-            EventMesh.subscribe("get_phonename", self.get_phonename)\r
-            EventMesh.subscribe("save_phonename", self.save_phonename)\r
-\r
-        def get_phonename(self, event, msg): \r
-            return self.phonename\r
-\r
-        def save_phonename(self, event, msg): \r
-            self.phonename = str(msg)\r
-\r
-        def save_phonenum(self, event, msg): \r
-            self.phonenum = str(msg)\r
-        \r
-        def get_phonenum(self, event, msg):\r
-            return self.phonenum\r
-\r
-    #获取心率 血氧 步数历史数据\r
-    class gethistoryDataManager(Abstract):\r
-        def __init__(self):\r
-            self.oldHr = 0\r
-            self.oldspo2 = 0\r
-            self.oldstep = 0\r
-            self.old_step = 0\r
-            self.read_histroy_hr_data = []\r
-            self.read_histroy_temp_data = []\r
-            self.read_histroy_spo2_data = []\r
-\r
-            oldHr  = EventMesh.publish("get_storage_config","old_hr")\r
-            if oldHr != None:\r
-                self.oldHr = oldHr  \r
-            old_spo2  = EventMesh.publish("get_storage_config","old_spo2")\r
-            if old_spo2 != None:\r
-                self.oldspo2 = old_spo2 \r
-            old_step  = EventMesh.publish("get_storage_config","old_step")    \r
-            if old_step != None:\r
-                self.oldstep = old_step\r
-\r
-\r
-            check_hr= ql_fs.path_exists("/usr/static/storage_file/history_hr.json")\r
-            if check_hr == True :\r
-                with open("/usr/static/storage_file/history_hr.json","r") as fd:#音频文件编号\r
-                    self.read_histroy_hr_data = ujson.load(fd)\r
-            \r
-            check_temp= ql_fs.path_exists("/usr/static/storage_file/history_temp.json")\r
-            if check_temp == True :\r
-                with open("/usr/static/storage_file/history_temp.json","r") as fd:#音频文件编号\r
-                    self.read_histroy_temp_data = ujson.load(fd)\r
-\r
-            check_spo2= ql_fs.path_exists("/usr/static/storage_file/history_spo2.json")\r
-            if check_spo2 == True :\r
-                with open("/usr/static/storage_file/history_spo2.json","r") as fd:#音频文件编号\r
-                    self.read_histroy_spo2_data = ujson.load(fd)\r
-            self.temp_value = 0\r
-            \r
-            # self.read_histroy_hr_data=[{"timeSec":16789890,"value":90},{"timeSec":16789888,"value":78},{"timeSec":16789688,"value":68},{"timeSec":16789898,"value":58},\\r
-            #                              {"timeSec":16789897,"value":88},{"timeSec":16789867,"value":77},{"timeSec":16789895,"value":70}]\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_old_hr_data", self.save_hr_value)\r
-            EventMesh.subscribe("get_old_hr_data", self.get_hr_value)\r
-            EventMesh.subscribe("set_old_spo2_data", self.save_spo2_value)\r
-            EventMesh.subscribe("get_old_spo2_data", self.get_spo2_value)\r
-\r
-            EventMesh.subscribe("get_old_step_value", self.get_old_step_value)\r
-            EventMesh.subscribe("set_old_step_value", self.set_old_step_value)\r
-\r
-\r
-            EventMesh.subscribe("get_history_hr_value", self.get_history_hr_value)\r
-            EventMesh.subscribe("set_history_hr_value", self.set_history_hr_value)\r
-\r
-            EventMesh.subscribe("get_history_temp_value", self.get_history_temp_value)\r
-            EventMesh.subscribe("set_history_temp_value", self.set_history_temp_value)\r
-\r
-            EventMesh.subscribe("get_history_spo2_value", self.get_history_spo2_value)\r
-            EventMesh.subscribe("set_history_spo2_value", self.set_history_spo2_value)\r
-\r
-        \r
-\r
-        def get_history_spo2_value(self, event, msg): #近7次血氧历史数据统计显示\r
-            return self.read_histroy_spo2_data\r
-\r
-        def set_history_spo2_value(self, event, msg): \r
-            pass\r
-\r
-\r
-\r
-        def get_history_temp_value(self, event, msg): #近7次体温历史数据统计显示\r
-            return self.read_histroy_temp_data\r
-\r
-        def set_history_temp_value(self, event, msg): \r
-            self.temp_value = msg\r
-            if self.temp_value > 0:\r
-                # date_tmp = utime.localtime()\r
-                # time_tmp = utime.mktime(date_tmp)\r
-                # if len(self.read_histroy_temp_data) >= 7:\r
-                #     sort_new = {}\r
-                #     sort_new = sorted(self.read_histroy_temp_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条\r
-                #     EventMesh.debug_log(sort_new)\r
-                #     for i in range(len(self.read_histroy_temp_data)-1):\r
-                #         sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7\r
-                #         self.read_histroy_temp_data[i] = sort_new[i]\r
-                #         pass\r
-                #     self.read_histroy_temp_data[6] = {"timeSec": time_tmp, "temp": self.temp_value}\r
-                # else:\r
-                #     self.read_histroy_temp_data.append({"timeSec": time_tmp, "temp": self.temp_value}) \r
-\r
-                # with open("/usr/static/storage_file/history_temp.json","w",encoding="utf-8") as fd:\r
-                #     ujson.dump(self.read_histroy_temp_data,fd)\r
-                #EventMesh.debug_log(self.read_histroy_temp_data)\r
-                pass\r
-            else:\r
-                pass\r
-\r
-        def get_history_hr_value(self, event, msg): #近7次心率历史数据统计显示\r
-            return self.read_histroy_hr_data\r
-\r
-        def set_history_hr_value(self, event, msg): \r
-            pass\r
-                \r
-            \r
-\r
-        def save_hr_value(self, event, msg): \r
-            if msg >= 50:\r
-                EventMesh.publish("set_storage_config",["old_hr",msg])\r
-                self.oldHr = msg\r
-                \r
-\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-                if len(self.read_histroy_hr_data) >= 7:\r
-                    sort_new = {}\r
-                    sort_new = sorted(self.read_histroy_hr_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条\r
-                    EventMesh.debug_log(sort_new)\r
-                    for i in range(len(self.read_histroy_hr_data)-1):\r
-                        sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7\r
-                        self.read_histroy_hr_data[i] = sort_new[i]\r
-                        pass\r
-                    self.read_histroy_hr_data[6] = {"timeSec": time_tmp, "hr": self.oldHr}\r
-                else:\r
-                    self.read_histroy_hr_data.append({"timeSec": time_tmp, "hr": self.oldHr}) \r
-\r
-\r
-                with open("/usr/static/storage_file/history_hr.json","w",encoding="utf-8") as fd:\r
-                    ujson.dump(self.read_histroy_hr_data,fd)\r
-                pass\r
-            else:\r
-                \r
-                pass\r
-\r
-\r
-        def get_hr_value(self, event, msg): \r
-            return self.oldHr\r
-\r
-        def save_spo2_value(self, event, msg): \r
-            if msg >= 85:\r
-                # EventMesh.publish("set_storage_config",["old_spo2",msg])\r
-                # self.oldspo2 = msg\r
-\r
-\r
-                # date_tmp = utime.localtime()\r
-                # time_tmp = utime.mktime(date_tmp)\r
-                # if len(self.read_histroy_spo2_data) >= 7:\r
-                #     sort_new = {}\r
-                #     sort_new = sorted(self.read_histroy_spo2_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条\r
-                #     EventMesh.debug_log(sort_new)\r
-                #     for i in range(len(self.read_histroy_spo2_data)-1):\r
-                #         sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7\r
-                #         self.read_histroy_spo2_data[i] = sort_new[i]\r
-                #         pass\r
-                #     self.read_histroy_spo2_data[6] = {"timeSec": time_tmp, "spo2": self.oldspo2}\r
-                # else:\r
-                #     self.read_histroy_spo2_data.append({"timeSec": time_tmp, "spo2": self.oldspo2}) \r
-\r
-                # with open("/usr/static/storage_file/history_spo2.json","w",encoding="utf-8") as fd:\r
-                #     ujson.dump(self.read_histroy_spo2_data,fd)\r
-                # #EventMesh.debug_log(self.read_histroy_spo2_data)\r
-                #播放语音\r
-                # EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                pass\r
-            else:\r
-                pass\r
-                pass\r
-\r
-        def get_spo2_value(self, event, msg): \r
-            return self.oldspo2\r
-        \r
-        def set_old_step_value(self, event, msg): \r
-            self.oldstep = msg\r
-            EventMesh.publish("set_storage_config",["old_step",msg])\r
-            \r
-            \r
-        def get_old_step_value(self, event, msg): \r
-            step = EventMesh.publish(constants.EVENT.GET_STEP)\r
-            self.old_step = self.oldstep + step[0]\r
-            return self.old_step\r
-    #获取旧的时间戳\r
-    class getOldTimeManager(Abstract):\r
-        # 获取天气数据\r
-        def __init__(self):\r
-            self.time_sec = 0\r
-            self.time_step = 0\r
-            self.step_second = 0\r
-            tmp_data = EventMesh.publish("get_storage_config","old_time")\r
-            if tmp_data !=None :\r
-                self.time_sec = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","clear_state")\r
-            if tmp_data !=None :\r
-                self.time_step = tmp_data[0]\r
-                self.step_second = tmp_data[1]\r
-\r
-            \r
-            \r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_old_time_data", self.get_old_time_data)\r
-            EventMesh.subscribe("set_old_time_data", self.set_old_time_data)\r
-\r
-            EventMesh.subscribe("get_old_step_data", self.get_old_step_data)\r
-            EventMesh.subscribe("set_old_step_data", self.set_old_step_data)\r
-\r
-            EventMesh.subscribe("set_test_data1", self.set_test_data1)\r
-\r
-            EventMesh.subscribe("set_test_data2", self.set_test_data2)\r
-\r
-            EventMesh.subscribe("set_test_data3", self.set_test_data3)\r
-\r
-            EventMesh.subscribe("set_test_data4", self.set_test_data4)\r
-\r
-            EventMesh.subscribe("set_test_data5", self.set_test_data5)\r
-\r
-            EventMesh.subscribe("set_test_data6", self.set_test_data6)\r
-\r
-            EventMesh.subscribe("set_test_data7", self.set_test_data7)\r
-\r
-            EventMesh.subscribe("set_test_data8", self.set_test_data8)\r
-        \r
-\r
-        def set_test_data1(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state1",msg])\r
-\r
-        \r
-        def set_test_data2(self, event, msg):\r
-            \r
-            EventMesh.publish("set_storage_config",["clear_state2",msg])\r
-\r
-\r
-        def set_test_data3(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state3",msg])\r
-\r
-        def set_test_data4(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state4",msg])\r
-\r
-        def set_test_data5(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state5",msg])\r
-\r
-        def set_test_data6(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state6",msg])\r
-\r
-        def set_test_data7(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state7",msg])\r
-\r
-        def set_test_data8(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state8",msg])\r
-\r
-        # f = open("/usr/static/storage_file/config.json",'r',encoding="utf-8")\r
-        # print(f.read())\r
-\r
-        def get_old_step_data(self, event, msg):\r
-            return [self.time_step,self.step_second]\r
-\r
-        def get_old_time_data(self, event, msg):\r
-            return self.time_sec\r
-        \r
-        \r
-\r
-        def set_old_time_data(self, event, msg):\r
-            self.time_sec = msg\r
-            EventMesh.publish("set_storage_config",["old_time",msg])\r
-\r
-        def set_old_step_data(self, event, msg):\r
-            self.time_step = msg[0]\r
-            self.step_second = msg[1]\r
-            EventMesh.publish("set_storage_config",["clear_state",msg])\r
-\r
-        def get_old_step_data(self, event, msg):\r
-            return [self.time_step,self.step_second]\r
-\r
-\r
-            \r
-        \r
-\r
-    class getWeatherDataManager(Abstract):\r
-        # 获取天气数据\r
-        def __init__(self):\r
-            self.date = {} #日期23-04-07\r
-            self.time = {} #14:41:41\r
-            self.content = {} #天气描述 \r
-            self.type = None #天气类型\r
-            self.temp = None #当前温度\r
-            self.min_temp = None #最低温度\r
-            self.max_temp = None #最高温度\r
-            self.city = {} #城市\r
-            self.no_data = 0#0沒有数据 1有数据\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_weather_data", self.get)\r
-            EventMesh.subscribe("set_weather_data", self.set)\r
-\r
-        def get(self, event, msg):\r
-            return [self.date,self.time,self.content,self.type,self.temp,self.min_temp,self.max_temp,self.city,self.no_data]\r
-\r
-        def set(self, event, msg):\r
-            self.date = msg[0]\r
-            self.time = msg[1]\r
-            self.content = msg[2]\r
-            self.type = msg[3]\r
-            self.temp = msg[4]\r
-            self.min_temp = msg[5]\r
-            self.max_temp = msg[6]\r
-            self.city = msg[7]\r
-            self.no_data = msg[8]\r
-\r
-\r
-    class getHrTimeManager(Abstract):\r
-        def __init__(self):\r
-            self.set_time = 0\r
-            self.set_hr = 0 #0关闭 1手动 2 自动测量按照时间间隔测试心率\r
-            self.set_spo2 = 0\r
-            self.open_btn = 0\r
-            if EventMesh.platform == "gewu":\r
-                self.set_time = 10*60\r
-                self.open_btn = 1\r
-            self.set_bgautotime = 0\r
-            self.bgauto_btn = 0\r
-            read_data = EventMesh.publish("get_storage_config","measure_time")\r
-            if read_data != None:\r
-                self.set_time = read_data  \r
-            read_data = EventMesh.publish("get_storage_config","open_hr_btn")\r
-                    \r
-            if read_data != None:\r
-                self.open_btn = read_data   \r
-\r
-            read_data = EventMesh.publish("get_storage_config","bgauto_time")\r
-            if read_data != None:\r
-                self.set_bgautotime = read_data  \r
-            read_data = EventMesh.publish("get_storage_config","bgauto_btn")\r
-                    \r
-            if read_data != None:\r
-                self.bgauto_btn = read_data   \r
-\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_time_hr", self.set_time_hr)\r
-            EventMesh.subscribe("get_time_hr", self.get_time_hr)\r
-            EventMesh.subscribe("set_hr_state", self.set_hr_state)\r
-            EventMesh.subscribe("get_hr_state", self.get_hr_state)\r
-            EventMesh.subscribe("set_spo2_state", self.set_spo2_state)\r
-            EventMesh.subscribe("get_spo2_state", self.get_spo2_state)\r
-\r
-            EventMesh.subscribe("set_bgauto_time", self.set_bgauto_time)\r
-            EventMesh.subscribe("get_bgauto_time", self.get_bgauto_time)\r
-\r
-        def set_bgauto_time(self, event, msg): \r
-            self.bgauto_btn = msg[0]\r
-            self.set_bgautotime = msg[1]\r
-            EventMesh.publish("set_storage_config",["bgauto_btn",self.bgauto_btn])\r
-            EventMesh.publish("set_storage_config",["bgauto_time",self.set_bgautotime])\r
-\r
-        def get_bgauto_time(self, event, msg): \r
-            if self.bgauto_btn == None:\r
-                self.bgauto_btn = 0\r
-            if self.set_bgautotime == None:\r
-                self.set_bgautotime = 0\r
-            return [self.bgauto_btn,self.set_bgautotime]\r
-        \r
-\r
-        def set_time_hr(self, event, msg): \r
-            self.open_btn = msg[0]\r
-            self.set_time = msg[1]\r
-            EventMesh.publish("set_storage_config",["measure_time",self.set_time])\r
-            EventMesh.publish("set_storage_config",["open_hr_btn",self.open_btn])\r
-\r
-        def get_time_hr(self, event, msg): \r
-            return [self.open_btn,self.set_time]\r
-\r
-        def set_hr_state(self, event, msg): \r
-            # if msg != 0:\r
-            #     EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁\r
-            self.set_hr = msg\r
-            if self.set_hr == 0:\r
-                EventMesh.publish("clear_health_state")\r
-            \r
-\r
-        def get_hr_state(self, event, msg): \r
-            return self.set_hr\r
-        \r
-        def set_spo2_state(self, event, msg): \r
-            # if msg != 0:\r
-            #     EventMesh.publish("set_hr_blood_led",1)##红绿灯交替闪烁\r
-            self.set_spo2 = msg\r
-            if self.set_spo2 == 0:\r
-                EventMesh.publish("clear_health_state")\r
-            \r
-\r
-        def get_spo2_state(self, event, msg): \r
-            return self.set_spo2\r
-        \r
-    #体温\r
-    class getTempTimeManager(Abstract):\r
-        def __init__(self):\r
-            self.set_time = 0\r
-            self.get_temp = 0\r
-            read_data = EventMesh.publish("get_storage_config","temp_time")\r
-\r
-            if read_data != None:\r
-                self.set_time = read_data\r
-\r
-            self.get_bgstate = 0\r
-            self.get_bpstate = 0\r
-\r
-            self.bptime_on = 0\r
-            self.bptime_time = 0\r
-            read_data=EventMesh.publish("get_storage_config","bpauto_btn")\r
-            if read_data != None:\r
-                self.bptime_on = read_data\r
-\r
-            read_data=EventMesh.publish("get_storage_config","bpauto_time")\r
-            if read_data != None:\r
-                self.bptime_time = read_data\r
-\r
-            self.spo2time_on = 0\r
-            self.spo2time_time = 0\r
-            read_data = EventMesh.publish("get_storage_config","spo2auto_btn")\r
-            if read_data != None:\r
-                self.spo2time_on = read_data\r
-\r
-            read_data = EventMesh.publish("get_storage_config","spo2auto_time")\r
-            if read_data != None:\r
-                self.spo2time_time = read_data\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_temp_time", self.set_temp_time)\r
-            EventMesh.subscribe("get_temp_time", self.get_temp_time)\r
-\r
-            EventMesh.subscribe("set_temp_state", self.set_temp_state)\r
-            EventMesh.subscribe("get_temp_state", self.get_temp_state)\r
-\r
-            EventMesh.subscribe("set_bp_time", self.set_bp_time)\r
-            EventMesh.subscribe("get_bp_time", self.get_bp_time)\r
-\r
-            EventMesh.subscribe("set_bp_state", self.set_bp_state)\r
-            EventMesh.subscribe("get_bp_state", self.get_bp_state)\r
-\r
-\r
-            EventMesh.subscribe("set_bg_state", self.set_bg_state)\r
-            EventMesh.subscribe("get_bg_state", self.get_bg_state)\r
-\r
-            EventMesh.subscribe("set_spo2_time", self.set_spo2_time)\r
-            EventMesh.subscribe("get_spo2_time", self.get_spo2_time)\r
-\r
-            \r
-        def set_bg_state(self, event, msg): \r
-            self.get_bgstate = msg\r
-            if self.get_bgstate == 0:\r
-                EventMesh.publish("clear_health_state")\r
-            # if msg != 0:\r
-            #     EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁\r
-\r
-        def get_bg_state(self, event, msg): \r
-            if self.get_bgstate:\r
-                return self.get_bgstate\r
-            else :\r
-                return 0\r
-\r
-        def set_spo2_time(self, event, msg): \r
-            self.spo2time_on = msg[0]\r
-            self.spo2time_time = msg[1]\r
-            EventMesh.publish("set_storage_config",["spo2auto_btn",self.spo2time_on])\r
-            EventMesh.publish("set_storage_config",["spo2auto_time",self.spo2time_time])\r
-\r
-\r
-        def get_spo2_time(self, event, msg): \r
-            \r
-            return [self.spo2time_on,self.spo2time_time]\r
-\r
-\r
-        def set_bp_time(self, event, msg): \r
-            self.bptime_on = msg[0]\r
-            self.bptime_time = msg[1]\r
-            EventMesh.publish("set_storage_config",["bpauto_btn",self.bptime_on])\r
-            EventMesh.publish("set_storage_config",["bpauto_time",self.bptime_time])\r
-\r
-        def get_bp_time(self, event, msg): \r
-            if self.bptime_on == None:\r
-                self.bptime_on = 0\r
-            if self.bptime_time == None:\r
-                self.bptime_time = 0\r
-            return [self.bptime_on,self.bptime_time]\r
-        \r
-            \r
-        def set_bp_state(self, event, msg): \r
-            self.get_bpstate = msg\r
-            if self.get_bpstate == 0:\r
-                EventMesh.publish("clear_health_state")\r
-            # if msg != 0:\r
-                # EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁\r
-\r
-        def get_bp_state(self, event, msg): \r
-            if self.get_bpstate:\r
-                return self.get_bpstate\r
-            else :\r
-                return 0\r
-\r
-\r
-        def set_temp_time(self, event, msg): \r
-            self.set_time = msg\r
-            EventMesh.publish("set_storage_config",["temp_time",self.set_time])\r
-\r
-        def get_temp_time(self, event, msg): \r
-            return self.set_time\r
-        \r
-        def set_temp_state(self, event, msg): \r
-            self.get_temp = msg\r
-            if self.get_temp == 0:\r
-                EventMesh.publish("clear_temp_state")\r
-            # if msg != 0:\r
-            #     EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁\r
-\r
-        def get_temp_state(self, event, msg): \r
-            return self.get_temp\r
-            \r
-    class getBrightnessManager(Abstract):#获取亮度级别\r
-        def __init__(self):\r
-            self.level = 6#默认值6\r
-            # self.read_data = {}\r
-            self.time = 5\r
-            self.PWM_backlight  = None\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_brightness_level", self.get_brightness_level)\r
-            EventMesh.subscribe("push_add_brightness_level", self.add)\r
-            EventMesh.subscribe("push_reduce_brightness_level", self.reduce)\r
-            EventMesh.subscribe("set_brightness_level", self.set_brightness_level)\r
-\r
-            EventMesh.subscribe("set_brightness_time", self.set_brightness_time)\r
-            EventMesh.subscribe("get_brightness_time", self.get_brightness_time)\r
-\r
-        def set_brightness_level(self, event, msg): \r
-            self.level = msg\r
-            EventMesh.publish("set_storage_config", ["brightness_level",self.level])\r
-\r
-        def get_brightness_level(self, event, msg): \r
-            tmp = EventMesh.publish("get_storage_config","brightness_level")\r
-            if tmp != None:\r
-                self.level = tmp\r
-            return self.level\r
-        \r
-        def set_brightness_time(self, event, msg): \r
-            self.time = msg\r
-            EventMesh.publish("set_storage_config", ["brightness_time",self.time])\r
-        \r
-        def get_brightness_time(self, event, msg): \r
-            tmp = EventMesh.publish("get_storage_config","brightness_time")\r
-            if tmp != None:\r
-                self.time = tmp\r
-            return self.time\r
-        \r
-\r
-\r
-        def add(self, event, msg):\r
-            if self.level < 10:\r
-                self.level = self.level + 2\r
-            # self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)\r
-            # self.PWM_backlight.open()\r
-            EventMesh.publish("set_storage_config", ["brightness_level",self.level])\r
-\r
-\r
-        def reduce(self, event, msg):\r
-            # if self.level > 0:\r
-            #     self.level = self.level - 2\r
-            # if self.level <= 0:\r
-            #     self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 1, 10)\r
-            # else:\r
-            #     self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS,self.level, 10)\r
-\r
-            # self.PWM_backlight.open()\r
-            EventMesh.publish("set_storage_config", ["brightness_level",self.level])\r
-        \r
-        \r
-    class getStorageDataManager(Abstract):#获取内存数据\r
-        def __init__(self):\r
-            self.config_data = {}\r
-            check = ql_fs.path_exists("/usr/static/storage_file/config.json")\r
-            if check == True:\r
-                with open("/usr/static/storage_file/config.json","r") as fd:\r
-                    self.config_data = ujson.load(fd)\r
-            else :\r
-                self.config_data = {'old_time': 0, 'flip_sw': 0}\r
-                pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_storage_data", self.set_storage_data)\r
-            EventMesh.subscribe("set_storage_config", self.set_storage_config)\r
-            EventMesh.subscribe("get_storage_data", self.get_storage_data)\r
-            EventMesh.subscribe("get_storage_config", self.get_storage_config)\r
-\r
-        def set_storage_data(self, event, msg): \r
-            # EventMesh.debug_log("set_storage_data:{}".format(msg))\r
-            if msg != None:\r
-                self.config_data = msg\r
-                with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:\r
-                    ujson.dump(self.config_data,fd)\r
-        \r
-\r
-        def set_storage_config(self,event,msg): \r
-            # EventMesh.debug_log("set_storage_key_data1:{}".format(msg))\r
-            if len(msg) >= 2:\r
-                self.config_data[msg[0]]=msg[1]\r
-                # EventMesh.debug_log("set_storage_key_data2:{}".format(self.config_data[msg[0]]))\r
-                EventMesh.publish("publish_message_event_ui",{"func":self.set_storage_save,"data":0})\r
-        def set_storage_save(self, data): \r
-            with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:\r
-                ujson.dump(self.config_data,fd)\r
-        def get_storage_data(self, event, msg): \r
-            # EventMesh.debug_log("get_storage_data:{}".format(self.config_data))\r
-            return self.config_data \r
-        def get_storage_config(self,event,msg):\r
-            # EventMesh.debug_log("get_storage_key_data1:{}".format(msg))\r
-            b = msg in self.config_data.keys()\r
-            if b == True:\r
-                # EventMesh.debug_log("get_storage_key_data2:{}".format(self.config_data[msg]))\r
-                return self.config_data[msg]\r
-            else :\r
-                return None\r
-            # try:\r
-            #     return self.config_data[msg]\r
-            # except:\r
-            #     EventMesh.debug_log("get_storage_key_data:none key:{}",msg)\r
-            #     return None\r
-    #定位频率\r
-    class getUpLoadDataManager(Abstract):#\r
-        def __init__(self):\r
-            self.upload_time = 2*60*60\r
-            if EventMesh.platform == "gewu":\r
-                self.upload_time = 10*60\r
-\r
-            read_data = EventMesh.publish("get_storage_config","upload_time")\r
-            if read_data != None:\r
-                self.upload_time = read_data \r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_upload_data", self.set_upload_data)\r
-            EventMesh.subscribe("get_upload_data", self.get_upload_data)\r
-\r
-        def set_upload_data(self, event, msg): \r
-            self.upload_time = msg\r
-\r
-        def get_upload_data(self, event, msg): \r
-            if self.upload_time == None:\r
-                if EventMesh.platform == "gewu":\r
-                    self.upload_time = 10*60\r
-                else:\r
-                    self.upload_time = 2*60*60\r
-            return self.upload_time \r
-\r
-    class getplayAudiodStateManager(Abstract):#获取设置播放音频状态\r
-        def __init__(self):\r
-            self.play = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_audio_state", self.set_audio_state)\r
-            EventMesh.subscribe("get_audio_state", self.get_audio_state)\r
-\r
-        def set_audio_state(self, event, msg): \r
-            self.play = msg\r
-\r
-        def get_audio_state(self, event, msg): \r
-            return self.play\r
-        \r
-    class getVolumSizeManager(Abstract):#设置或获取音量大小数据\r
-        def __init__(self):\r
-            self.volume_size = 8\r
-            read_data = EventMesh.publish("get_storage_config","volum")\r
-            if read_data != None:\r
-                self.volume_size = read_data\r
-        \r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_volum_size", self.set_volum_size)\r
-            EventMesh.subscribe("get_volum_size", self.get_volum_size)\r
-\r
-        def set_volum_size(self, event, msg): \r
-            self.volume_size = msg\r
-            EventMesh.publish("set_storage_config", ["volum",self.volume_size])\r
-\r
-        def get_volum_size(self, event, msg): \r
-            return self.volume_size\r
-\r
-    class getSosFlagManager(Abstract):#设置sos\r
-        def __init__(self):\r
-            self.aud = audio.Audio(0)\r
-            self.sos_flag = 0\r
-            self.sos_num = 0\r
-            self.hangup_mode = 0\r
-            self.call_timer = osTimer()\r
-            self.sos_numer1 = []\r
-            self.callnumer =""\r
-            SOS_NUMBER1 = EventMesh.publish("get_storage_config","SOS_NUMBER1")\r
-            if SOS_NUMBER1 != None:\r
-                self.sos_numer1 = SOS_NUMBER1\r
-            SOS_NUMBER2 = EventMesh.publish("get_storage_config","SOS_NUMBER2")\r
-            if SOS_NUMBER2 != None:        \r
-                self.sos_numer1 = [SOS_NUMBER1, SOS_NUMBER2]\r
-\r
-            SOS_NUMBER3 = EventMesh.publish("get_storage_config","SOS_NUMBER3")\r
-            if SOS_NUMBER3 != None:        \r
-                self.sos_numer1 = [SOS_NUMBER1, SOS_NUMBER2,SOS_NUMBER3]\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_sos_flag", self.set_sos_flag)#设置sos拨打标识\r
-            EventMesh.subscribe("get_sos_flag", self.get_sos_flag)\r
-\r
-            EventMesh.subscribe("set_sos_num", self.set_sos_num)#设置拨打循环次数\r
-            EventMesh.subscribe("get_sos_num", self.get_sos_num)\r
-\r
-            EventMesh.subscribe("set_dial_sos_number", self.set_dial_sos_number)\r
-            EventMesh.subscribe("get_dial_sos_number", self.get_dial_sos_number)#设置家庭号码三个\r
-\r
-            EventMesh.subscribe("set_callnumer_cb", self.set_callnumer_cb)#延时回调\r
-\r
-            EventMesh.subscribe("close_call_time",self.close_call_time)\r
-\r
-            EventMesh.subscribe("set_hangup_mode", self.set_hangup_mode)\r
-            EventMesh.subscribe("get_hangup_mode", self.get_hangup_mode)#获取挂断方式 是对方挂断 还是手表按键主动挂断\r
-\r
-        def get_hangup_mode(self, event, msg): # 1是设备端手表主动挂断 0是手机端\r
-            return self.hangup_mode\r
-        \r
-        def set_hangup_mode(self, event, msg): \r
-            self.hangup_mode = msg\r
-\r
-        def set_sos_flag(self, event, msg): \r
-            self.sos_flag = msg\r
-        \r
-            if self.sos_flag == 1:\r
-                number = EventMesh.publish("get_dial_sos_number")\r
-            \r
-                if number != None:\r
-                    if len(number) > 0:\r
-                        self.call_timer.stop()\r
-                        EventMesh.publish("save_phonename",number[0])\r
-                        EventMesh.publish("save_phonenum",number[0])\r
-                        EventMesh.publish("set_sos_num",0)\r
-                        phone_num = EventMesh.publish("get_phonenum")  \r
-                        EventMesh.publish("sos_out_call_center_cb",phone_num)#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("sos_out_call_center_cb",None)#电话拨出去\r
-\r
-        def set_callnumer_cb(self, event, msg):\r
-            if self.sos_flag == 1:\r
-                self.callnumer = msg\r
-                self.call_timer.start(5000, 0, self.call_timer_cb)#延迟10S 继续拨打\r
-\r
-        def call_timer_cb(self, *args, **kwargs):\r
-            if self.sos_flag == 1:\r
-                EventMesh.publish("save_phonename",str(self.callnumer))\r
-                EventMesh.publish("save_phonenum",str(self.callnumer))\r
-                phone_num = EventMesh.publish("get_phonenum")  \r
-                EventMesh.publish("sos_out_call_center_cb",phone_num)#电话拨出去\r
-        \r
-        def close_call_time(self, event, msg): \r
-            self.call_timer.stop()\r
-\r
-        def get_sos_flag(self, event, msg): \r
-            return self.sos_flag\r
-        \r
-        def set_sos_num(self, event, msg): \r
-            self.sos_num = msg\r
-\r
-        def get_sos_num(self, event, msg): \r
-            return self.sos_num\r
-        \r
-        def set_dial_sos_number(self, event, msg): \r
-            self.sos_numer1 = msg\r
-            \r
-\r
-        def get_dial_sos_number(self, event, msg): \r
-            return self.sos_numer1\r
-    class getLowBatManager(Abstract):#低电提醒\r
-        def __init__(self):\r
-\r
-            self.low_btn = 0\r
-            read_data = EventMesh.publish("get_storage_config","low_on")\r
-            if read_data != None:\r
-                self.low_btn = read_data\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_low_bat_btn", self.set_low_bat_btn)#\r
-            EventMesh.subscribe("get_low_bat_btn", self.get_low_bat_btn)\r
-\r
-        def set_low_bat_btn(self, event, msg): \r
-            self.low_btn = msg\r
-            EventMesh.publish("set_storage_config",["low_on",self.low_btn])\r
-\r
-        def get_low_bat_btn(self, event, msg): \r
-            return self.low_btn\r
-        \r
-\r
-\r
-    class playPowerAudioManager(Abstract):#播放开关机音频文件\r
-        def __init__(self):\r
-            self.aud = audio.Audio(0)\r
-\r
-        def post_processor_after_instantiation(self):\r
-            \r
-            EventMesh.subscribe("play_poewr_on_event", self.play_poewr_on_event)#\r
-            EventMesh.subscribe("play_poewr_off_event", self.play_poewr_off_event)\r
-\r
-        def play_poewr_on_event(self, event, msg): \r
-            self.aud.play(1, 1, 'U:/static/R_POWER_1.mp3')  #播放播放开机铃声\r
-\r
-        def play_poewr_off_event(self, event, msg): \r
-            self.aud.setVolume(11)\r
-            self.aud.play(1, 1, 'U:/static/R_POWER_OFF_1.mp3')  #播放关机铃声\r
-        \r
-    class getBootOffManager(Abstract):#开关机时间\r
-        def __init__(self):\r
-            self.poweroff_time = []\r
-            read_data = EventMesh.publish("get_storage_config","poweroff_alarm")\r
-            if read_data != None:\r
-                self.poweroff_time = read_data\r
-            else:\r
-                self.poweroff_time = [{"poweroff_on":0,"start_hour":6,"start_min":0,"end_hour":0,"end_min":0}]\r
-            \r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_boot_off_time", self.set_boot_off_time)#设置关机时间\r
-            EventMesh.subscribe("get_boot_off_time", self.get_boot_off_time)\r
-\r
-        def set_boot_off_time(self, event, msg): \r
-            EventMesh.debug_log("set_boot_off_time",msg)\r
-\r
-            EventMesh.publish("set_storage_config",["poweroff_alarm",msg])\r
-            self.poweroff_time = msg\r
-            EventMesh.publish("set_rtc_alarm")\r
-\r
-\r
-        def get_boot_off_time(self, event, msg):\r
-            return self.poweroff_time\r
-    class setSmsIndexManager(Abstract):#\r
-        def __init__(self):\r
-            self.index = -1\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_sms_index", self.set_sms_index)#设置关机时间\r
-            EventMesh.subscribe("get_sms_index", self.get_sms_index)\r
-\r
-        def set_sms_index(self, event, msg): \r
-            self.index = msg\r
-            \r
-\r
-        def get_sms_index(self, event, msg):\r
-            \r
-            return self.index\r
-    import protocol \r
-    class testSmsSetIPManager(Abstract):#\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-            #大锤\r
-            severdata = protocol.server_init()\r
-\r
-            self.newip = severdata[0]\r
-            self.newcom = severdata[1]\r
-            self.new_key = severdata[2]\r
-            self.new_pid = severdata[3]\r
-            \r
-            EventMesh.debug_log("testSmsSetIPManager:{}\n".format(severdata))\r
-\r
-            self.server_sate = 0\r
-\r
-\r
-\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_ip_addr")\r
-            if tmp_data != None:\r
-                self.newip = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_com")\r
-            if tmp_data != None:\r
-                self.newcom = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_md5")\r
-            if tmp_data != None:\r
-                self.newmd5 = tmp_data    \r
-\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_key")\r
-            if tmp_data != None:\r
-                self.new_key = tmp_data \r
-\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_pid")\r
-            if tmp_data != None:\r
-                self.new_pid = tmp_data \r
-\r
-            tmp_data = EventMesh.publish("get_storage_config","get_server_sate")\r
-            if tmp_data != None:\r
-                self.server_sate = tmp_data \r
-            \r
-            \r
-\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_new_ip_com", self.set_new_ip_com)#设置关机时间\r
-            EventMesh.subscribe("get_new_ip_com", self.get_new_ip_com)\r
-\r
-            EventMesh.subscribe("set_ip", self.set_ip)#设置关机时间\r
-            EventMesh.subscribe("get_ip", self.get_ip)\r
-\r
-            EventMesh.subscribe("set_com", self.set_com)#设置关机时间\r
-            EventMesh.subscribe("get_com", self.get_com)\r
-\r
-            EventMesh.subscribe("get_new_key", self.get_new_key_cb)#获取key\r
-            EventMesh.subscribe("set_new_key", self.set_new_key_cb)#获取key\r
-\r
-            EventMesh.subscribe("set_new_pid", self.set_new_pid_cb)#获取pid\r
-            EventMesh.subscribe("get_new_pid", self.get_new_pid_cb)#获取pid\r
-\r
-            EventMesh.subscribe("set_server_state", self.set_server_state)#\r
-            EventMesh.subscribe("get_server_state", self.get_server_state)#\r
-\r
-            EventMesh.subscribe("get_new_key_pid", self.get_new_key_pid)#\r
-\r
-\r
-\r
-        def set_new_key_cb(self, event, msg): \r
-            self.new_key = msg\r
-            # print("set_new_key_cb",msg,self.new_key)\r
-            EventMesh.publish("set_storage_config",["set_new_key",self.new_key])\r
-\r
-        def get_new_key_cb(self, event, msg):\r
-            # print("get_new_key_cb",self.new_key)\r
-            return self.new_key\r
-        \r
-        def set_new_pid_cb(self, event, msg): \r
-            self.new_pid = msg\r
-            # print("set_new_pid_cb",msg,self.new_pid)\r
-            EventMesh.publish("set_storage_config",["set_new_pid",self.new_pid])\r
-\r
-        def get_new_pid_cb(self, event, msg):\r
-            # print("get_new_pid_cb",self.new_pid)\r
-            return self.new_pid\r
-\r
-        def set_new_ip_com(self, event, msg): \r
-            self.newip = str(msg[0])\r
-            self.newcom = int(msg[1])\r
-            # self.newmd5 = str(msg[2])\r
-            #短信格式:SETIP:api.xcloudtech.com:9000:bZld0ALsZTt15tKEZhOlLPgbsO75BLTP 以冒号分隔 SETIP:ip地址:ip端口号:ip密钥key\r
-\r
-            # self.read_data["set_new_md5"] = self.newmd5  #通过短信设置ip的key密钥\r
-        \r
-\r
-            EventMesh.publish("set_storage_config",["set_new_ip_addr",self.newip])\r
-            EventMesh.publish("set_storage_config",["set_new_com",self.newcom])\r
-\r
-\r
-            number = str(msg[2])\r
-            sms.sendPduMsg(number, 'set ok', 'UCS2')\r
-            self.timer.start(10*1000,0,self.fun)\r
-            \r
-        def fun(self,*argc):\r
-            Power.powerRestart()\r
-\r
-        def get_new_ip_com(self, event, msg):\r
-            tmp_addr = EventMesh.publish("get_storage_config","set_new_ip_addr")\r
-            tmp_com = EventMesh.publish("get_storage_config","set_new_com")\r
-            if tmp_addr != None:\r
-                self.newip = tmp_addr\r
-            if tmp_com != None:\r
-                self.newcom = tmp_com\r
-            return [self.newip,self.newcom]\r
-        \r
-        def set_ip(self, event, msg): \r
-            self.newip = msg\r
-            EventMesh.publish("set_storage_config",["set_new_ip_addr",self.newip])\r
-\r
-        def get_ip(self, event, msg):\r
-            # print("get_ip",self.newip)\r
-            return self.newip\r
-        \r
-        def set_com(self, event, msg): \r
-            self.newcom = msg\r
-            EventMesh.publish("set_storage_config",["set_new_com",self.newcom])\r
-\r
-        def get_com(self, event, msg):\r
-            # print("get_com",self.newcom)\r
-            return self.newcom\r
-\r
-        def get_new_key_pid(self, event, msg):\r
-            return [self.new_key,self.new_pid]\r
-        \r
-        def set_server_state(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["get_server_sate",msg])\r
-            self.server_sate = msg\r
-\r
-        def get_server_state(self, event, msg):\r
-            return self.server_sate\r
-            \r
-\r
-    # MMI Version:UIX8910_C55_DS_D12G_PRO18_FZD_V1.0_Release\r
-    # Build:07-07-2022 16:12:58\r
-    # IMEI:861218001025267\r
-    # IP:api.xcloudtech.com\r
-    # PORT:9000\r
-    # UPLOAD:300\r
-    # Battery:3948, 64\r
-    # Udebug: 0\r
-    # ConnectTime: 7\r
-    import protocol\r
-\r
-    class sendDevinfoManager(Abstract):#发送设备信息\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-            pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("send_devinfo_event", self.send_devinfo_event)#删除短信\r
-\r
-        def send_devinfo_event(self, event, msg): \r
-            number = str(msg)\r
-            versions = EventMesh.softversion\r
-            Build = EventMesh.builTime\r
-            IMEI = EventMesh.publish(constants.EVENT.GET_IMEI)\r
-            IP = ""\r
-            new_ip = EventMesh.publish("get_storage_config","set_new_ip_addr")\r
-            new_com = EventMesh.publish("get_storage_config","set_new_com")\r
-            server_data = protocol.server_init()\r
-        \r
-            if new_ip != None:\r
-                if len(str(new_ip)) != 0:\r
-                    IP = new_ip\r
-                else:\r
-                    IP = server_data[0]\r
-            else:\r
-                IP = server_data[0]\r
-            \r
-            PORT = ''\r
-            if new_com != None:\r
-                if len(str(new_com)) != 0:\r
-                    PORT = str(new_com)\r
-                else:\r
-                    PORT = str(server_data[1])\r
-            else:\r
-                PORT = str(server_data[1])\r
-            \r
-            UPLOAD = EventMesh.publish("get_upload_data")\r
-\r
-            level = EventMesh.publish("get_curr_battery_level")\r
-            if level == None:\r
-                level = 4200\r
-            bat = EventMesh.publish("screen_get_battery")[1]\r
-            if bat == None:\r
-                bat = 100\r
-            Battery = str(level) +',' +  str(bat)\r
-\r
-            ConnectTime = 0\r
-            \r
-            if EventMesh.platform == "gewu":\r
-                ConnectTime = gheartbeat_time//60\r
-            else:\r
-                ConnectTime = heartbeat_time//60\r
-            data1 = "Version:{}\nBuild:{}".format(versions,Build)\r
-\r
-            data2 = "IMEI:{}\nIP:{}\nPORT:{}".format(IMEI,IP,PORT)\r
-            \r
-            data3 = "UPLOAD:{}\nBattery:{}\nConnectTime:{}".format(UPLOAD,Battery,ConnectTime)\r
-\r
-            send_state1 = -1\r
-            send_state2 = -1\r
-            # print("data",data1,data2,data3)\r
-            send_state1 = sms.sendPduMsg(number, data1, 'UCS2')\r
-\r
-            if send_state1 == 0:\r
-                send_state2 = sms.sendPduMsg(number, data2, 'UCS2')\r
-\r
-            if send_state2 == 0:\r
-                sms.sendPduMsg(number, data3, 'UCS2')\r
-            \r
-\r
-    class deleteSmsManager(Abstract):#删除信息\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-            pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("delete_sms_event", self.delete_sms_event)#删除短信\r
-            EventMesh.subscribe("remove_all_sms_cb", self.remove_all_sms_cb)#\r
-\r
-        def delete_sms_event(self, event, msg): \r
-            self.timer.start(4*1000,0,self.fun)\r
-            \r
-        def fun(self, *argc): \r
-            EventMesh.publish_async("remove_all_sms_cb","",1*1024)\r
-\r
-        def remove_all_sms_cb(self, event, msg):\r
-            sms.deleteMsg(1,4)\r
-\r
-    #闹钟信息\r
-    alarm_list = [{'hour': 6, 'repeart': 10, 'idx': 0, 'enabled': 1, 'days': [0,1,2,3,4,5,6], 'minute': 0},\r
-                {'hour': 0, 'repeart': 10, 'idx': 1, 'enabled': 1, 'days': [0,1,2,3,4,5,6], 'minute': 0}]\r
-    #用于显示闹钟列表不包含开关机信息\r
-\r
-    class ClockManager(Abstract):\r
-        def __init__(self):\r
-            super().__init__()\r
-            self.rtc = RTC()\r
-            self.days = 0\r
-            self.idx = 0\r
-\r
-            IFEXIST = ql_fs.path_exists("/usr/static/storage_file/alarm_msg.json") \r
-            self.check_alarm_list = []     \r
-            if IFEXIST == True:\r
-                with open("/usr/static/storage_file/alarm_msg.json","r",encoding='utf-8') as fd:\r
-                    self.check_alarm_list = ujson.load(fd)\r
-            \r
-            EventMesh.subscribe("push_clock_info", self.set)\r
-            EventMesh.subscribe("read_alarminjson", self.read_alarminjson)\r
-            EventMesh.subscribe("add_alarm", self.add_alarm)\r
-            EventMesh.subscribe("remove_alarm", self.remove_alarm)\r
-            EventMesh.subscribe("set_rtc_alarm", self.set_rtc_alarm)\r
-            EventMesh.subscribe("get_alarm_indx", self.get_alarm_indx)\r
-            EventMesh.subscribe("get_check_alarm_list", self.get_check_alarm_list)\r
-            EventMesh.subscribe("push_update_alarm_show", self.update_show_info)\r
-\r
-        def post_processor_after_instantiation(self):\r
-        \r
-            EventMesh.publish("read_alarminjson")\r
-            # EventMesh.publish("set_rtc_alarm")\r
-        \r
-        def update_show_info(self,event,msg):\r
-            EventMesh.publish("read_alarminjson")\r
-            # EventMesh.publish("set_rtc_alarm")\r
-\r
-        def get_check_alarm_list(self, event, msg):\r
-            alarm_len = 0\r
-            global alarm_list\r
-            EventMesh.publish("read_alarminjson")\r
-            alarm_len = len(alarm_list)\r
-            return alarm_len\r
-\r
-\r
-        def set(self, event, msg):\r
-            global alarm_list\r
-            EventMesh.debug_log("msg = {}".format(msg))\r
-            idx = msg.get("idx")\r
-            EventMesh.debug_log("修改第{}个闹钟信息{}".format(idx,alarm_list[idx]))\r
-            alarm_list[idx]["hour"] = msg["hour"]\r
-            alarm_list[idx]["minute"] = msg["minute"]\r
-            alarm_list[idx]["days"] = msg["days"]\r
-            alarm_list[idx]["enabled"] = msg["enabled"]\r
-            alarm_list[idx]["repeart"] = msg["repeart"]\r
-            with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:\r
-                ujson.dump(alarm_list,fd)\r
-\r
-        def read_alarminjson(self, event, msg):\r
-            IFEXIST = ql_fs.path_exists("/usr/static/storage_file/alarm_msg.json") \r
-            global alarm_list     \r
-            EventMesh.debug_log("IFEXIST:{}".format(IFEXIST))\r
-            if IFEXIST == True:\r
-                with open("/usr/static/storage_file/alarm_msg.json","r",encoding='utf-8') as fd:\r
-                    alarm_list = ujson.load(fd)\r
-\r
-            \r
-            # read_data = EventMesh.publish("get_storage_config","off_on")\r
-\r
-            hour1 = str(alarm_list[0]["hour"])+':'+str(alarm_list[0]["minute"])\r
-            # min1 = str(alarm_list[0]["minute"])\r
-\r
-            hour2 = str(alarm_list[1]["hour"])+':'+str(alarm_list[1]["minute"])\r
-            # min2 = str(alarm_list[1]["minute"]) \r
-            # EventMesh.publish("set_boot_off_time",[1,hour1,hour2])\r
-\r
-            EventMesh.debug_log("hour1:{}-{}".format(hour1,hour2))\r
-\r
-            \r
-            return alarm_list\r
-\r
-        def add_alarm(self, event, msg):\r
-\r
-            global alarm_list\r
-            EventMesh.publish("read_alarminjson")\r
-            EventMesh.debug_log("msg:{}".format(msg))\r
-            for i in range(0,2):#开关机固定是 idx 0 1\r
-                off_msg1 = msg[i+1]\r
-                msg_tmp1 = off_msg1.split(':')\r
-                start_hour = int(msg_tmp1[0])\r
-                start_min = int(msg_tmp1[1])\r
-                enable = int(msg[0])\r
-                EventMesh.debug_log("start_hour:{} start_min:{} enable:{}",start_hour,start_min,enable)\r
-                # EventMesh.publish("set_boot_off_time",[msg[0],msg[1],msg[2]])\r
-\r
-                alarm_list[i]["idx"]=i\r
-                alarm_list[i]["hour"]=start_hour\r
-                alarm_list[i]["minute"]=start_min\r
-                alarm_list[i]["days"]=[0,1,2,3,4,5,6]\r
-                alarm_list[i]["enabled"]=enable\r
-                alarm_list[i]["repeart"]=10\r
-\r
-\r
-                # alarm_list.append({"idx": i, "hour": start_hour, "minute": start_min, "days":[0,1,2,3,4,5,6], "enabled": enable,"repeart":10})\r
-\r
-            \r
-            # EventMesh.debug_log("alarm_list----len- :{} alarm_list:{}".format(len(alarm_list),alarm_list))\r
-            with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:\r
-                ujson.dump(alarm_list,fd)\r
-            EventMesh.publish("push_update_alarm_show")\r
-            \r
-        \r
-                \r
-            \r
-\r
-\r
-        def remove_alarm(self, event, msg):\r
-            global alarm_list\r
-            EventMesh.debug_log("ddddddddddddddddddd:",msg)\r
-            idx = msg.get("idx")\r
-            EventMesh.debug_log("delete_here1-----{},{}:".format(idx,msg))\r
-\r
-            for i, alarm in enumerate(alarm_list):\r
-                EventMesh.debug_log("delete_here2-----{},{}:".format(i,alarm))\r
-\r
-                if alarm["idx"] == idx:\r
-                    del alarm_list[i]\r
-                    EventMesh.debug_log("delete_here3-----",alarm_list)\r
-\r
-                    #删除闹钟后,对idx重新排序\r
-                    if alarm_list:\r
-                        for j in range(i,len(alarm_list)):\r
-                            alarm_list[j]["idx"] -= 1\r
-                            EventMesh.debug_log("delete_here4-----",alarm_list)\r
-\r
-            with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:\r
-                ujson.dump(alarm_list,fd)\r
-\r
-\r
-        def get_alarm_indx(self,event,msg):\r
-            return self.idx\r
-\r
-        def _rtc_callback(self,args):\r
-            #设置下一个闹钟,定时开关机功能\r
-            msg_data = EventMesh.publish("get_boot_off_time")\r
-            if msg_data != None:\r
-                power_offdata = msg_data[0]\r
-                start_hour = int(power_offdata["start_hour"])\r
-                start_min = int(power_offdata["start_min"])\r
-                end_hour = int(power_offdata["end_hour"])\r
-                end_min = int(power_offdata["end_min"])\r
-                off_on = int(power_offdata["poweroff_on"])\r
-\r
-                rtc_now_time = self.rtc.datetime()\r
-                current_minute = rtc_now_time[4]*60 + rtc_now_time[5]\r
-                end_min_total = end_hour*60+end_min\r
-                next_minute = start_hour*60+start_min #10:11\r
-                EventMesh.debug_log("off_on:{} {} {}".format(off_on,current_minute,next_minute))\r
-                if off_on != None:\r
-                    if off_on == 1:\r
-                        if end_min_total == current_minute:#结束的时间分钟等于关机时间分钟数则关机\r
-                            ubs_state = EventMesh.publish("get_usb")#'\r
-                            \r
-                            if ubs_state == 2 or ubs_state == 0:\r
-\r
-                                if next_minute > current_minute:#开机时间大于当前时间 9:00 > = 8:00 \r
-                                    interval_minute = next_minute - current_minute\r
-                                    \r
-                                    EventMesh.debug_log("开机距离下一次响铃的的分钟数:", interval_minute,next_minute)\r
-                                else:#8:00 9:00\r
-                                    #7*60*24 7天一个周期 7*60*24 - \r
-                                    interval_minute = next_minute + (24*60-current_minute)\r
-                                    EventMesh.debug_log("开机08888距离下一次响铃的的分钟数:", interval_minute,next_minute)\r
-\r
-                                #反向获取时间戳\r
-                                time = utime.localtime()\r
-                                EventMesh.debug_log("开机9获取utime的时间戳:", time)\r
-                                rtc_mktime = utime.mktime(time)-time[5]\r
-                                EventMesh.debug_log("开机10反向获取utime的mktime:", rtc_mktime)\r
-\r
-                                #加上下一次响铃需要的时间\r
-                                next_alarm_mktime = rtc_mktime + interval_minute*60 #转换成s单位 时间戳\r
-                                EventMesh.debug_log("开机11下一次响铃的mktime:", next_alarm_mktime)\r
-\r
-                                #格式化时间戳,得到下一次闹钟的时间\r
-                                next_alarm_time = utime.localtime(next_alarm_mktime)\r
-                                EventMesh.debug_log("开机12下一次响铃的准确时间:", next_alarm_time)\r
-                                #将时间转换为rtc的格式\r
-                                data_l = [2021, 7, 9, 5, 12, 30, 0, 0]\r
-                                #给rtc时间赋值\r
-                                data_l[0] = next_alarm_time[0] #year\r
-                                data_l[1] = next_alarm_time[1] #month                    \r
-                                data_l[2] = next_alarm_time[2] #day                     \r
-                                data_l[4] = next_alarm_time[3] #hour               \r
-                                data_l[5] = next_alarm_time[4] #minute   \r
-                                data_e=tuple(data_l)\r
-                                EventMesh.debug_log("开机13将该时间转换为RTC元组:", data_e)\r
-                                \r
-                                self.rtc.register_callback(self._rtc_callback)\r
-\r
-                                FLAG = self.rtc.set_alarm(data_e)\r
-                                if FLAG == 0:\r
-                                    EventMesh.debug_log("开机11成功设置rtc的到期时间:", data_e)\r
-                                else:\r
-                                    EventMesh.debug_log("开机时设置rtc的到期时间失败:", data_e)\r
-                                self.rtc.enable_alarm(1)\r
-                                \r
-                                EventMesh.debug_log("结束时设置rtc的到期时间失败:", data_e)\r
-                                EventMesh.publish("open_power_on", 5)#静音关机\r
-                                return\r
-                            else:\r
-                                EventMesh.publish("set_rtc_alarm")\r
-                                #self.rtc.datetime([2023, 12, 1, 5, 5, 59, 30, 0])\r
-                                return\r
-                \r
-            EventMesh.publish("set_rtc_alarm")\r
-\r
-\r
-        def set_rtc_alarm(self,event,msg):\r
-            msg_data = EventMesh.publish("get_boot_off_time")\r
-            if msg_data != None:\r
-                power_offdata = msg_data[0]\r
-                start_hour = int(power_offdata["start_hour"])\r
-                start_min = int(power_offdata["start_min"])\r
-                end_hour = int(power_offdata["end_hour"])\r
-                end_min = int(power_offdata["end_min"])\r
-                off_on = int(power_offdata["poweroff_on"])\r
-                if off_on == 1:\r
-                    next_minute = start_hour*60+start_min #10:11\r
-\r
-                    start_total = start_hour*60+start_min #10:11\r
-                    end_total = end_hour*60+end_min #10:11\r
-                    rtc_now_time = self.rtc.datetime()\r
-                    current_minute = rtc_now_time[4]*60 + rtc_now_time[5]#当前时间\r
-\r
-\r
-                    minute_list = []\r
-                    if start_total != current_minute:\r
-                        minute_list.append(start_total)#23*60=\r
-                    if end_total != current_minute:\r
-                        minute_list.append(end_total)\r
-                    minute_list.append(current_minute)#[927,927,930]\r
-                    minute_list = sorted(minute_list)\r
-                    current_index = minute_list.index(current_minute)\r
-                    print("minute_list",minute_list,start_total,end_total,current_index,power_offdata)\r
-                    \r
-                    \r
-                    next_index = current_index + 1\r
-                    if next_index >= len(minute_list):\r
-                        next_minute = minute_list[0]\r
-                        print("07下一个闹钟的分钟数:", next_minute)\r
-                    else:\r
-                        next_minute = minute_list[next_index]\r
-                        print("08下一个闹钟的分钟数:", next_minute)\r
-\r
-                    print("minute_list1",minute_list,current_index,next_minute)\r
-                    if next_minute > current_minute:\r
-                        interval_minute = next_minute - current_minute\r
-                        print("09距离下一次响铃的的分钟数:", interval_minute)#14 31 14 29 14 31 24*60-\r
-                    else:\r
-                        interval_minute = (24*60 - current_minute) + next_minute\r
-                        print("10距离下一次响铃的的分钟数:", interval_minute)\r
-\r
-\r
-                    #反向获取时间戳\r
-                    time = utime.localtime()\r
-                    EventMesh.debug_log("关机09获取utime的时间戳:", time)\r
-                    time\r
-                    rtc_mktime = utime.mktime(time)-time[5]\r
-                    EventMesh.debug_log("关机10反向获取utime的mktime:", rtc_mktime)\r
-\r
-                    #加上下一次响铃需要的时间\r
-                    next_alarm_mktime = rtc_mktime + interval_minute*60 #转换成s单位 时间戳\r
-                    EventMesh.debug_log("关机11下一次响铃的mktime:", next_alarm_mktime)\r
-\r
-                    #格式化时间戳,得到下一次闹钟的时间\r
-                    next_alarm_time = utime.localtime(next_alarm_mktime)\r
-                    EventMesh.debug_log("关机12下一次响铃的准确时间:", next_alarm_time)\r
-                    #将时间转换为rtc的格式\r
-                    data_l = [2021, 7, 9, 5, 12, 30, 0, 0]\r
-                    #给rtc时间赋值\r
-                    data_l[0] = next_alarm_time[0] #year\r
-                    data_l[1] = next_alarm_time[1] #month                    \r
-                    data_l[2] = next_alarm_time[2] #day                     \r
-                    data_l[4] = next_alarm_time[3] #hour               \r
-                    data_l[5] = next_alarm_time[4] #minute   \r
-                    data_e=tuple(data_l)\r
-                    EventMesh.debug_log("关机13将该时间转换为RTC元组:", data_e)\r
-                    \r
-                    self.rtc.register_callback(self._rtc_callback)\r
-\r
-                    FLAG = self.rtc.set_alarm(data_e)\r
-                    if FLAG == 0:\r
-                        EventMesh.debug_log("关机11成功设置rtc的到期时间:", data_e)\r
-                    else:\r
-                        EventMesh.debug_log("关机时设置rtc的到期时间失败:", data_e)\r
-                    self.rtc.enable_alarm(1)\r
-                else:\r
-                    self.rtc.enable_alarm(0)\r
-                    \r
-\r
-    class schoolclassManager(Abstract):#\r
-        def __init__(self):\r
-            # ['火星情报局', '一年级二班', '柠檬茶']\r
-            self.school_name = ''\r
-            self.class_name = ''\r
-            self.full_name = ''\r
-            tmp_data = EventMesh.publish("get_storage_config","school_name")\r
-            if tmp_data != None:\r
-                self.school_name = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","class_name")\r
-            if tmp_data != None:\r
-                self.class_name = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","full_name")\r
-            if tmp_data != None:\r
-                self.full_name = tmp_data    \r
-\r
-            \r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_schoolname", self.set_school_name)#\r
-            EventMesh.subscribe("get_schoolname", self.get_school_name)\r
-\r
-            EventMesh.subscribe("set_classname", self.set_classname)#\r
-            EventMesh.subscribe("get_classname", self.get_classname)\r
-\r
-            EventMesh.subscribe("set_fullname", self.set_full_name)#\r
-            EventMesh.subscribe("get_fullname", self.get_full_name)\r
-\r
-        def set_school_name(self, event, msg): \r
-            if msg != None:\r
-                if len(msg) != 0:\r
-                    self.school_name = str(msg)\r
-                    EventMesh.publish("set_storage_config",["school_name",str(msg)])\r
-            \r
-\r
-        def get_school_name(self, event, msg):\r
-            if self.school_name:\r
-                return self.school_name\r
-            else:\r
-                return None\r
-        \r
-        def set_classname(self, event, msg): \r
-            if msg != None:\r
-                if len(msg) != 0:\r
-                    self.class_name = str(msg)\r
-                    EventMesh.publish("set_storage_config",["class_name",str(msg)])\r
-                \r
-            \r
-        def get_classname(self, event, msg):\r
-            if self.class_name:\r
-                return self.class_name\r
-            else:\r
-                return None\r
-        def set_full_name(self, event, msg): \r
-            if msg != None:\r
-                if len(msg) != 0:\r
-                    self.full_name = str(msg)\r
-                    EventMesh.publish("set_storage_config",["full_name",str(msg)])\r
-\r
-        def get_full_name(self, event, msg):\r
-            if self.full_name:\r
-                return self.full_name\r
-            else:\r
-                return None\r
-    \r
-    import fota\r
-    class firwDownloadManager(Abstract):#\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("firware_download", self.firware_download)#\r
-\r
-        def firware_download(self, event, msg): \r
-            number = str(msg)\r
-            sms.sendPduMsg(number, 'set ok', 'UCS2')\r
-            self.timer.start(10*1000,0,self.fun)\r
-\r
-        def fun(self,*argc):\r
-            fota_obj = fota()\r
-            fota_obj.httpDownload(url1="http://u-oss.thisiot.com/test/dfota_1.bin",url2="http://u-oss.thisiot.com/test/dfota_2.bin")
\ No newline at end of file
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/mgr_d15.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/mgr_d15.py
deleted file mode 100644 (file)
index dd48742..0000000
+++ /dev/null
@@ -1,5450 +0,0 @@
-from common import Abstract, LogAdapter\r
-import EventMesh\r
-import usocket\r
-import ql_fs\r
-import ujson\r
-import _thread\r
-import modem\r
-import utime\r
-import sim\r
-import net\r
-import dataCall\r
-import checkNet\r
-import osTimer\r
-import constants\r
-import sms\r
-from common import Lock, Abstract, LogAdapter\r
-#from location import GPS, GPSMatch,CellLocator\r
-from misc import USB, Power, ADC\r
-from machine import ExtInt, Pin,Timer,RTC,UART\r
-import EventMesh\r
-import usys\r
-import audio\r
-from machine import I2C\r
-\r
-import pm\r
-import ure\r
-import urandom\r
-  \r
-from machine import RTC\r
-import quecgnss\r
-import wifiScan\r
-import math\r
-import voiceCall\r
-from misc import PWM\r
-from queue import Queue\r
-if EventMesh.model == "D15":\r
-    from led_d15 import led_mode,open_led_green,close_led_green,open_led_red,close_led_red,close_led_white\r
-    heartbeat_time = 7*60 #心跳时间\r
-\r
-    def get_autoblood_value():#血压值\r
-        data = RTC().datetime()\r
-        hour = int(data[4])\r
-        blood_Maxvalue = 0\r
-        blood_Minvalue = 0\r
-        if hour >= 6 and hour <= 10:\r
-            random_numMax = urandom.randint(0, 30)\r
-            random_numMin = urandom.randint(0, 20)\r
-            blood_Maxvalue = 120+random_numMax\r
-            blood_Minvalue = 75+random_numMin\r
-\r
-            print("get_autoblood_value 6 -10",blood_Maxvalue,blood_Minvalue)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        elif hour > 10 and hour <= 14:#10-14(10,14]\r
-            random_numMax = urandom.randint(0, 20)\r
-            random_numMin = urandom.randint(0, 25)\r
-            blood_Maxvalue = 115+random_numMax\r
-            blood_Minvalue = 60+random_numMin\r
-            print("get_autoblood_value 10 -14",blood_Maxvalue,blood_Minvalue)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        elif hour > 14 and hour <= 18:#14-18\r
-            random_numMax = urandom.randint(0, 25)\r
-            random_numMin = urandom.randint(0, 15)\r
-            blood_Maxvalue = 115+random_numMax\r
-            blood_Minvalue = 70+random_numMin\r
-\r
-            print("get_autoblood_value 14 -18",blood_Maxvalue,blood_Minvalue)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        elif hour > 2 and hour < 6:#2-6\r
-            random_numMax = urandom.randint(0, 30)\r
-            random_numMin = urandom.randint(0, 20)\r
-            blood_Maxvalu = 105+random_numMax\r
-            blood_Minvalue = 65+random_numMin\r
-\r
-            \r
-            print("get_autoblood_value 2 -6",blood_Maxvalue,blood_Minvalue)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        else:#18-2 19 20 21 22 23 1 2\r
-            random_numMax = urandom.randint(0, 30)\r
-            random_numMin = urandom.randint(0, 20)\r
-            blood_Maxvalue = 100+random_numMax\r
-            blood_Minvalue = 60+random_numMin\r
-            print("get_autoblood_value 18 -2",blood_Maxvalue,blood_Minvalue)\r
-        return [blood_Maxvalue,blood_Minvalue]\r
-\r
-    def get_blood_sugar_value():#血糖值\r
-        data = RTC().datetime()\r
-        hour = int(data[4])\r
-        blood_sugar = 0\r
-        if (hour >= 6 and hour <= 8) or (hour >= 12 and hour <= 13) or (hour >= 18 and hour <= 19):#6-8 12-13 18-19 \r
-            random_value = urandom.randint(39, 61)\r
-            blood_sugar = random_value/10\r
-            print("get_blood_sugar_value 6 -10",blood_sugar)\r
-            # return [self.blood_Maxvalue,self.blood_Minvalue]\r
-        elif (hour > 8 and hour <= 9) or (hour >= 14 and hour <= 15) or (hour >= 20 and hour <= 21):#8-9 14-15 20-21\r
-            random_value = urandom.randint(67, 90)\r
-            blood_sugar = random_value/10\r
-            print("get_blood_sugar_value 10 -14",blood_sugar)\r
-        else:#18-2 19 20 21 22 23 1 2 10-11 16-17 21-22\r
-            random_value = urandom.randint(39, 78)\r
-            blood_sugar = random_value/10\r
-            print("get_blood_sugar_value 18 -2",blood_sugar)\r
-        return blood_sugar\r
-\r
-\r
-\r
-\r
-    class PhoneVolumeLevelManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("push_add_phonering_level", self.add)\r
-            EventMesh.subscribe("push_reduce_phonering_level", self.reduce)\r
-            EventMesh.subscribe("get_phonering_level", self.get)\r
-\r
-        def add(self, event, msg):\r
-            if self.level < 7:\r
-                self.level = self.level + 1\r
-\r
-        def reduce(self, event, msg):\r
-            if self.level > 0:\r
-                self.level = self.level - 1\r
-\r
-        def get(self, event=None, msg=None):\r
-            return self.level\r
-\r
-    class MsgVolumeLevelManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("push_add_msgvolume_level", self.add)\r
-            EventMesh.subscribe("push_reduce_msgvolume_level", self.reduce)\r
-            EventMesh.subscribe("get_msgvolume_level", self.get)\r
-\r
-        def add(self, event, msg):\r
-            if self.level < 7:\r
-                self.level = self.level + 1\r
-\r
-        def reduce(self, event, msg):\r
-            if self.level > 0:\r
-                self.level = self.level - 1\r
-\r
-        def get(self, event=None, msg=None):\r
-            return self.level\r
-\r
-    class AlarmVolumeLevelManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("push_add_alarmvolume_level", self.add)\r
-            EventMesh.subscribe("push_reduce_alarmvolume_level", self.reduce)\r
-            EventMesh.subscribe("get_alarmvolume_level", self.get)\r
-\r
-        def add(self, event, msg):\r
-            if self.level < 7:\r
-                self.level = self.level + 1\r
-\r
-        def reduce(self, event, msg):\r
-            if self.level > 0:\r
-                self.level = self.level - 1\r
-\r
-        def get(self, event=None, msg=None):\r
-            return self.level\r
-            \r
-    class StopwatchManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-            self.ms_value = 0\r
-            self.sec_value = 0\r
-            self.min_value = 0\r
-            self.timer = Timer(Timer.Timer1)\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("stopwatch_start", self.start)\r
-            EventMesh.subscribe("stopwatch_stop", self.paused)\r
-            EventMesh.subscribe("stopwatch_reset", self.reset)\r
-            EventMesh.subscribe("get_stopwatch_ms", self.get_ms)\r
-            EventMesh.subscribe("get_stopwatch_sec", self.get_sec)\r
-            EventMesh.subscribe("get_stopwatch_min", self.get_min)\r
-\r
-        def start(self, event, msg):        \r
-            self.timer.start(period=100, mode=self.timer.PERIODIC, callback=self.fun)\r
-        \r
-        def paused(self, event, msg):        \r
-            self.timer.stop()\r
-        \r
-        def reset(self, event, msg):\r
-            self.timer.stop()\r
-\r
-            self.sec_value = 0\r
-            self.min_value = 0\r
-            self.ms_value = 0\r
-\r
-        def fun(self):\r
-            self.ms_value += 1\r
-            if self.ms_value > 9:\r
-                self.ms_value = 0   \r
-                self.sec_value += 1\r
-            if self.sec_value > 60:\r
-                self.sec_value = 0\r
-                self.min_value += 1\r
-            if self.min_value > 60:\r
-                self.timer.stop()\r
-\r
-        def get_ms(self, event=None, msg=None):\r
-            return self.ms_value\r
-\r
-        def get_min(self, event=None, msg=None):\r
-            return self.min_value\r
-\r
-        def get_sec(self, event=None, msg=None):\r
-            return self.sec_value\r
-\r
-    class CountdownManager(Abstract):\r
-        def __init__(self):\r
-            self.sec = 0\r
-            self.min = 0\r
-            self.hour = 0\r
-            self.timer = osTimer()\r
-            self.total = 0\r
-            self.time_cb = 0\r
-            self.time_play = 0\r
-            self.total_sec = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("add_countdown_sec", self.add_sec)\r
-            EventMesh.subscribe("reduce_countdown_sec", self.reduce_sec)\r
-            EventMesh.subscribe("add_countdown_min", self.add_min)\r
-            EventMesh.subscribe("reduce_countdown_min", self.reduce_min)\r
-            EventMesh.subscribe("add_countdown_hour", self.add_hour)\r
-            EventMesh.subscribe("reduce_countdown_hour", self.reduce_hour)\r
-            EventMesh.subscribe("get_countdown_sec", self.get_sec)\r
-            EventMesh.subscribe("get_countdown_min", self.get_min)\r
-            EventMesh.subscribe("get_countdown_hour", self.get_hour)\r
-\r
-            EventMesh.subscribe("set_countdown_off_state", self.set_countdown_off_state)\r
-            EventMesh.subscribe("get_countdown_off_state", self.get_countdown_off_state)\r
-\r
-\r
-            EventMesh.subscribe("set_countdown_all_time", self.set_countdown_all_time)\r
-            EventMesh.subscribe("get_countdown_all_time", self.get_countdown_all_time)\r
-\r
-            EventMesh.subscribe("countdown_end_cb", self.countdown_end_cb)\r
-\r
-            EventMesh.subscribe("reset_time_countdown",self.reset)\r
-\r
-        def set_countdown_all_time(self, event, msg):\r
-            self.total = msg[0]\r
-            self.total_sec = msg[1]\r
-            # EventMesh.debug_log("self.total:{} self.total_sec:{}".format(self.total,self.total_sec))\r
-\r
-\r
-        def get_countdown_all_time(self, event, msg):\r
-            return self.total\r
-        \r
-        def set_countdown_off_state(self, event, msg):\r
-\r
-            self.time_cb = msg[0]\r
-            self.time_play = msg[1]\r
-            # EventMesh.debug_log("self.time_cb:{} self.total_sec:{}".format(self.time_cb,self.time_play))\r
-\r
-\r
-        def get_countdown_off_state(self, event, msg):\r
-            return [self.time_cb,self.time_play]\r
-        \r
-        def countdown_end_cb(self, event, msg):\r
-            \r
-            if self.time_cb == 1 and self.time_play == 1:\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp) \r
-                reduce = time_tmp- self.total_sec\r
-                EventMesh.debug_log("self.time_cb:{} self.time_play:{} self.total:{} self.total_sec:{}".format(self.time_cb,self.time_play, self.total,self.total_sec))\r
-                self.total = self.total - reduce\r
-                if self.total <= 0:\r
-                    self.total = 0\r
-                    self.time_cb = 0\r
-                    self.time_play = 0\r
-                    self.sec = 0\r
-                    self.min = 0\r
-                    self.hour = 0\r
-                    \r
-                    EventMesh.publish("load_screen", {"screen": "countdown_end"})\r
-                    return\r
-                self.total_sec = time_tmp\r
-\r
-\r
-        def add_sec(self, event, msg):\r
-            if self.sec < 59:\r
-                self.sec = self.sec + 1\r
-\r
-        def reduce_sec(self, event, msg):\r
-            if self.sec > 0:\r
-                self.sec = self.sec - 1\r
-\r
-        def add_min(self, event, msg):\r
-            if self.min < 59:\r
-                self.min = self.min + 1\r
-\r
-        def reduce_min(self, event, msg):\r
-            if self.min > 0:\r
-                self.min = self.min - 1\r
-\r
-        def add_hour(self, event, msg):\r
-            if self.hour < 99:\r
-                self.hour = self.hour + 1\r
-\r
-        def reduce_hour(self, event, msg):\r
-            if self.hour > 0:\r
-                self.hour = self.hour - 1\r
-\r
-        def get_sec(self, event=None, msg=None):\r
-            return self.sec\r
-\r
-        def get_min(self, event=None, msg=None):\r
-            return self.min\r
-\r
-        def get_hour(self, event=None, msg=None):\r
-            return self.hour\r
-        \r
-\r
-        \r
-        def reset(self, event=None, msg=None):\r
-            self.hour = 0\r
-            self.min = 0\r
-            self.sec = 0\r
-        \r
-        \r
-\r
-    BATTERY_OCV_TABLE = {\r
-        "nix_coy_mnzo2": {\r
-            55: {\r
-                4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,\r
-                3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,\r
-            },\r
-            20: {\r
-                4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,\r
-                3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,\r
-            },\r
-            0: {\r
-                4290: 100, 4237: 95, 4179: 90, 4123: 85, 4070: 80, 4020: 75, 3963: 70, 3919: 65, 3882: 60, 3847: 55,\r
-                3818: 50, 3794: 45, 3772: 40, 3752: 35, 3733: 30, 3716: 25, 3699: 20, 3677: 15, 3652: 10, 3629: 5, 3400: 0,\r
-            },\r
-        },\r
-    }\r
-\r
-\r
-\r
-    class Battery(object):\r
-        """This class is for battery info.\r
-\r
-        This class can get battery voltage and energy.\r
-        if adc_args is not None, use cbc to read battery\r
-\r
-        adc_args: (adc_num, adc_period, factor)\r
-\r
-            adc_num: ADC channel num\r
-            adc_period: Cyclic read ADC cycle period\r
-            factor: calculation coefficient\r
-        """\r
-\r
-        def __init__(self, adc_args=None, chrg_gpion=None, stdby_gpion=None):\r
-            self.__energy = 100\r
-            self.__temp = 55\r
-\r
-            # ADC params\r
-            self.__adc = None\r
-            if adc_args:\r
-                self.__adc_num, self.__adc_period, self.__factor = adc_args\r
-                if not isinstance(self.__adc_num, int):\r
-                    raise TypeError("adc_args adc_num is not int number.")\r
-                if not isinstance(self.__adc_period, int):\r
-                    raise TypeError("adc_args adc_period is not int number.")\r
-                if not isinstance(self.__factor, float):\r
-                    raise TypeError("adc_args factor is not int float.")\r
-                self.__adc = ADC()\r
-\r
-            # Charge params\r
-            self.__charge_callback = None\r
-            self.__charge_status = None\r
-            self.__chrg_gpion = chrg_gpion\r
-            self.__stdby_gpion = stdby_gpion\r
-            self.__chrg_gpio = None\r
-            self.__stdby_gpio = None\r
-            self.__chrg_exint = None\r
-            self.__stdby_exint = None\r
-            if self.__chrg_gpion is not None and self.__stdby_gpion is not None:\r
-                self.__init_charge()\r
-\r
-        def __chrg_callback(self, args):\r
-            self.__update_charge_status()\r
-            if self.__charge_callback is not None:\r
-                self.__charge_callback(self.__charge_status)\r
-\r
-        def __stdby_callback(self, args):\r
-            self.__update_charge_status()\r
-            if self.__charge_callback is not None:\r
-                self.__charge_callback(self.__charge_status)\r
-\r
-        def __update_charge_status(self):\r
-            if self.__chrg_gpio.read() == 1 and self.__stdby_gpio.read() == 1:\r
-                self.__charge_status = 0\r
-            elif self.__chrg_gpio.read() == 0 and self.__stdby_gpio.read() == 1:\r
-                self.__charge_status = 1\r
-            elif self.__chrg_gpio.read() == 1 and self.__stdby_gpio.read() == 0:\r
-                self.__charge_status = 2\r
-            else:\r
-                raise TypeError("CHRG and STDBY cannot be 0 at the same time!")\r
-\r
-        def __init_charge(self):\r
-            self.__chrg_gpio = Pin(self.__chrg_gpion, Pin.IN, Pin.PULL_DISABLE)\r
-            self.__stdby_gpio = Pin(self.__stdby_gpion, Pin.IN, Pin.PULL_DISABLE)\r
-            self.__chrg_exint = ExtInt(self.__chrg_gpion, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.__chrg_callback)\r
-            self.__stdby_exint = ExtInt(self.__stdby_gpion, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU,\r
-                                        self.__stdby_callback)\r
-            self.__chrg_exint.enable()\r
-            self.__stdby_exint.enable()\r
-            self.__update_charge_status()\r
-\r
-        def __get_soc_from_dict(self, key, volt_arg):\r
-            """Get battery energy from map"""\r
-            if key in BATTERY_OCV_TABLE["nix_coy_mnzo2"]:\r
-                volts = sorted(BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].keys(), reverse=True)\r
-                pre_volt = 0\r
-                volt_not_under = 0  # Determine whether the voltage is lower than the minimum voltage value of soc.\r
-                for volt in volts:\r
-                    if volt_arg > volt:\r
-                        volt_not_under = 1\r
-                        soc1 = BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].get(volt, 0)\r
-                        soc2 = BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].get(pre_volt, 0)\r
-                        break\r
-                    else:\r
-                        pre_volt = volt\r
-                # EventMesh.debug_log("__get_soc_from_dict:{}".format(soc2 - (soc2 - soc1) * (pre_volt - volt_arg) // (pre_volt - volt)))\r
-                if pre_volt == 0:  # Input Voltarg > Highest Voltarg\r
-                    return soc1\r
-                elif volt_not_under == 0:\r
-                    return 0\r
-                else:\r
-                    return soc2 - (soc2 - soc1) * (pre_volt - volt_arg) // (pre_volt - volt)\r
-\r
-        def __get_soc(self, temp, volt_arg, bat_type="nix_coy_mnzo2"):\r
-            """Get battery energy by temperature and voltage"""\r
-            if bat_type == "nix_coy_mnzo2":\r
-                if temp > 30:\r
-                    return self.__get_soc_from_dict(55, volt_arg)\r
-                elif temp < 10:\r
-                    return self.__get_soc_from_dict(0, volt_arg)\r
-                else:\r
-                    return self.__get_soc_from_dict(20, volt_arg)\r
-\r
-        def __get_power_vbatt(self):\r
-            return int(sum([Power.getVbatt() for i in range(100)]) / 100)\r
-\r
-        def __get_adc_vbatt(self):\r
-            self.__adc.open()\r
-            utime.sleep_ms(self.__adc_period)\r
-            adc_list = list()\r
-            for i in range(self.__adc_period):\r
-                adc_list.append(self.__adc.read(self.__adc_num))\r
-                utime.sleep_ms(self.__adc_period)\r
-            adc_list.remove(min(adc_list))\r
-            adc_list.remove(max(adc_list))\r
-            adc_value = int(sum(adc_list) / len(adc_list))\r
-            self.__adc.close()\r
-            vbatt_value = adc_value * (self.__factor + 1)\r
-            return vbatt_value\r
-\r
-        def set_temp(self, temp):\r
-            """Set now temperature."""\r
-            if isinstance(temp, int) or isinstance(temp, float):\r
-                self.__temp = temp\r
-                return True\r
-            return False\r
-\r
-        def get_voltage(self):\r
-            """Get battery voltage"""\r
-            if self.__adc is None:\r
-                return self.__get_power_vbatt()\r
-            else:\r
-                return self.__get_adc_vbatt()\r
-\r
-        def get_energy(self,volt_arg ):\r
-            """Get battery energy"""\r
-            if( volt_arg == None) :\r
-                volt_arg = self.get_voltage()\r
-            self.__energy = self.__get_soc(self.__temp, volt_arg)\r
-            # EventMesh.debug_log("get_energy:volt_arg {} __energy{}".format(volt_arg,self.__energy))\r
-            return self.__energy\r
-\r
-        def set_charge_callback(self, charge_callback):\r
-            if self.__chrg_gpion is not None and self.__stdby_gpion is not None:\r
-                if callable(charge_callback):\r
-                    self.__charge_callback = charge_callback\r
-                    return True\r
-            return False\r
-\r
-        def get_charge_status(self):\r
-            return self.__charge_status\r
-\r
-    class BatteryManager(Abstract):\r
-        def __init__(self):\r
-            """电池管理器"""\r
-            self.battery = Battery()\r
-            self.low_battery = False\r
-\r
-        def post_processor_after_instantiation(self):\r
-            """订阅此类所有的事件到 EventMesh中"""\r
-            EventMesh.subscribe("get_battery", self.get_battery)\r
-\r
-        def get_battery(self, event=None, msg=None):\r
-            battery = self.battery.get_energy(msg)\r
-            return battery\r
-\r
-        def get_voltage(self, event=None, msg=None):\r
-            voltage = self.battery.get_voltage()\r
-            return voltage\r
-\r
-    class ConfigStoreManager(Abstract):\r
-        """\r
-        持久化落盘存储\r
-        """\r
-\r
-        def __init__(self):\r
-            self.file_name = "/usr/conf_store.json"\r
-            self.lock = Lock()\r
-            self.map = dict()\r
-\r
-        def post_processor_after_instantiation(self):\r
-            if ql_fs.path_exists(self.file_name):\r
-                self.map = ql_fs.read_json(self.file_name)\r
-            else:\r
-                self.__store()\r
-            EventMesh.subscribe("persistent_config_get", self.__read)\r
-            EventMesh.subscribe("persistent_config_store", self.__store)\r
-\r
-        def __read(self, event, msg):\r
-            with self.lock:\r
-                return self.map.get(msg)\r
-\r
-        def __store(self, event=None, msg=None):\r
-            if msg is None:\r
-                msg = dict()\r
-            with self.lock:\r
-                self.map.update(msg)\r
-                ql_fs.touch(self.file_name, self.map)\r
-            \r
-    class sosInfoCallManager(Abstract):\r
-        # 通讯录\r
-        def __init__(self):\r
-            pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_sos_info_call", self.set_sos_info_call)\r
-\r
-        def set_sos_info_call(self, event, msg):\r
-            hangup_mode = EventMesh.publish("get_hangup_mode")\r
-            if hangup_mode == 1:\r
-                EventMesh.publish("set_sos_flag",0)\r
-                EventMesh.publish("set_sos_num",0)\r
-                EventMesh.publish("set_hangup_mode",0)\r
-            EventMesh.debug_log('hangup_mode disconnect',hangup_mode)\r
-            sos_flag = EventMesh.publish("get_sos_flag")\r
-            EventMesh.debug_log('voicecall sos_flag',sos_flag)\r
-            if sos_flag == 0 :\r
-                EventMesh.publish("set_sos_num",0)\r
-            else:\r
-                num = EventMesh.publish("get_sos_num")\r
-                number = EventMesh.publish("get_dial_sos_number")\r
-                if number != None:\r
-                    if len(number) > 0:\r
-                        if num == None:\r
-                            num = 0\r
-                        num+=1\r
-                        num_len = 0\r
-\r
-                        if len(number) == 1:\r
-                            num_len = len(number)+1#三次\r
-                        elif len(number) == 2:\r
-                            num_len = len(number)+1+2 #1+2+1+2\r
-                        elif len(number) == 3:\r
-                            num_len = len(number)+5 #1+3+5\r
-                        # EventMesh.debug_log("number:{} number_len :{} num:{} num_len:{}".format(number,len(number),num,num_len))\r
-                        if num > num_len :\r
-                            if len(number) == 1:\r
-                                number1 = str(number[0])\r
-                                sms.sendPduMsg(number1, '我需要你的帮助', 'UCS2')\r
-                            elif len(number) == 2:\r
-                                number1 = str(number[0])\r
-                                sms.sendPduMsg(number1, '我需要你的帮助', 'UCS2')\r
-\r
-                                number2 = str(number[1])\r
-                                sms.sendPduMsg(number2, '我需要你的帮助', 'UCS2')\r
-                            elif len(number) == 3:\r
-                                number1 = str(number[0])\r
-                                sms.sendPduMsg(number1, '我需要你的帮助', 'UCS2')\r
-                                number2 = str(number[1])\r
-                                sms.sendPduMsg(number2, '我需要你的帮助', 'UCS2')\r
-                                number3 = str(number[2])\r
-                                sms.sendPduMsg(number3, '我需要你的帮助', 'UCS2')\r
-                            EventMesh.publish("set_sos_flag",0)\r
-                            EventMesh.publish("set_sos_num",0)\r
-                        else:\r
-                        # EventMesh.debug_log("number:{} number_len :{}".format(number,len(number)))\r
-                            EventMesh.publish("set_sos_num",num)\r
-                            if len(number) == 1:\r
-                                if len(number[0]) != 0:\r
-                                    EventMesh.publish("set_callnumer_cb",number[0])\r
-                                    EventMesh.debug_log("phone 1")\r
-                            elif len(number) == 2:\r
-                                if num == 1 or num == 3 or num == 5: #1 2 3 4 5 \r
-                                    if len(number[1]) != 0:\r
-                                        EventMesh.debug_log("phone 2")\r
-                                        EventMesh.publish("set_callnumer_cb",number[1])\r
-                                elif num == 2 or num == 4:\r
-                                    if len(number[0]) != 0:\r
-                                        EventMesh.debug_log("phone 3")\r
-                                        EventMesh.publish("set_callnumer_cb",number[0])\r
-                            elif len(number) == 3:\r
-                                if num == 1 or num == 4 or num == 7:\r
-                                    if len(number[1]) != 0:\r
-                                        EventMesh.publish("set_callnumer_cb",number[1])\r
-                                        EventMesh.debug_log("phone 4")\r
-                                elif num == 2 or num == 5 or num == 8:\r
-                                    if len(number[2]) != 0:\r
-                                        EventMesh.debug_log("phone 5")\r
-                                        EventMesh.publish("set_callnumer_cb",number[2])\r
-                                elif num == 3 or num == 6 :\r
-                                    if len(number[0]) != 0:\r
-                                        EventMesh.debug_log("phone 6")\r
-                                        EventMesh.publish("set_callnumer_cb",number[0])   \r
-    \r
-    WL_timer = osTimer()   \r
-    def WL_timer_cb(*args):   \r
-        get_call = EventMesh.publish("get_call_state") \r
-        if get_call == 2:#只有拨进来才给接听\r
-            EventMesh.publish("answer_call_event")#接听电话\r
-    def voice_callback(args):\r
-        EventMesh.debug_log('voicecall iinfo:{}'.format(args))\r
-        if args[0] == 10:\r
-                get_UI_high_priority = EventMesh.publish("get_UI_high_priority")#如果在拨出去或者通话中屏蔽来电\r
-                if get_UI_high_priority == 1:\r
-                    EventMesh.publish("set_interrup_incall",1)\r
-                    return\r
-                EventMesh.debug_log('voicecall incoming call, PhoneNO.: ', args[6])\r
-                size_len = len(str(args[6]))\r
-                tmp = []\r
-                tmp = args[6]\r
-                find_num = tmp[0]\r
-                b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了 判断号码是否大于11位数,如果大于11位数 并且第一个字符是数字就按照最后11位做存储\r
-\r
-                if b == True and size_len > 11:\r
-                    tmp = tmp[size_len-11:]\r
-                WLKEY = EventMesh.publish("get_storage_config","WLKEY") \r
-                if WLKEY == "1" or WLKEY == "2":#开启了白名单\r
-                    on_list_flag = 0\r
-                    phonebook = EventMesh.publish("get_phonebook_list")\r
-                    phonebook_list = phonebook[1]\r
-                    EventMesh.debug_log("voice_callback:phonebook_list{}".format(phonebook_list))\r
-                    try:\r
-                        for value in phonebook_list.values():\r
-                            if value == args[6]:\r
-                                on_list_flag = 1\r
-                                break\r
-                    except Exception as e:\r
-                        usys.print_exception(e)\r
-                    EventMesh.debug_log("voice_callback:on_list_flag{}".format(on_list_flag))\r
-                    if on_list_flag == 1:#在白名单里\r
-                        if WLKEY == "2":\r
-                            WL_timer.start(30000, 0, WL_timer_cb)\r
-                    else:\r
-                        EventMesh.debug_log("voice_callback:不在白名单中,挂断")\r
-                        voiceCall.callEnd()\r
-                        return \r
-                viode_state = EventMesh.publish("get_video_state")\r
-                fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-                if viode_state != 0 or fall_down != 0:\r
-                    voiceCall.callEnd()\r
-                    return\r
-\r
-                EventMesh.publish("set_call_state",2) \r
-                EventMesh.publish("dialin_call_event")#电话拨进响铃\r
-                # EventMesh.publish("load_screen", {"screen": "incoming_call","meta":str(tmp)})\r
-\r
-        elif args[0] == 11:\r
-                EventMesh.publish("set_UI_high_priority",0)\r
-                sos_flag = EventMesh.publish("get_sos_flag")\r
-                if sos_flag == 1:\r
-                    sos_flag = 0\r
-\r
-                    EventMesh.publish("set_sos_flag",0)\r
-\r
-                EventMesh.debug_log('voicecall connected, PhoneNO.: ', args[6])\r
-                size_len = len(str(args[6]))\r
-                tmp = []\r
-                tmp = args[6]\r
-                find_num = tmp[0]\r
-                b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了\r
-                if b == True and size_len > 11:\r
-                    tmp = tmp[size_len-11:]\r
-                EventMesh.publish("set_call_state",3) \r
-                # if EventMesh.publish("get_call_state") == 2:#打通了才可设置状态 防止挂断太及时,又拨出去了\r
-                #     EventMesh.publish("set_call_state",3) \r
-                # else:\r
-                #     EventMesh.publish("set_call_state",0) \r
-                # EventMesh.publish("load_screen", {"screen": "on_call","meta":str(tmp)})\r
-\r
-        elif args[0] == 12:\r
-                set_interrup_call = EventMesh.publish("get_interrup_incall")#打断这次不需要来电的ui事件 以免通话中退出当前界面进不去了\r
-                if set_interrup_call == 1:\r
-                    EventMesh.publish("set_interrup_incall",0)\r
-                    return\r
-\r
-                EventMesh.publish("set_interrup_incall",0)\r
-                EventMesh.publish("set_UI_high_priority",0)\r
-                \r
-\r
-                \r
-                \r
-                EventMesh.publish("set_sos_info_call")  \r
-                flag = EventMesh.publish("get_call_state") \r
-                if flag == 2:\r
-                    EventMesh.publish("stop_led_timer")#设置参数\r
-                    EventMesh.publish("close_timer_all")#\r
-                    EventMesh.publish("close_motor_infor")#关闭马达和定时器\r
-                    \r
-                EventMesh.publish("set_sos_state_out")\r
-                EventMesh.publish("set_call_state",0) \r
-                EventMesh.debug_log('voicecall disconnect end')\r
-                \r
-\r
-        elif args[0] == 13:\r
-                EventMesh.debug_log('voicecall is waiting, PhoneNO.: ', args[6])\r
-        elif args[0] == 14:\r
-\r
-                EventMesh.debug_log('voicecall dialing, PhoneNO.: ', args[6])\r
-                EventMesh.publish("set_UI_high_priority",0)\r
-                EventMesh.publish("set_call_state",1) \r
-                # EventMesh.publish("load_screen", {"screen": "dialing"})\r
-\r
-                \r
-        elif args[0] == 15:\r
-                EventMesh.debug_log('voicecall alerting, PhoneNO.: ', args[6])\r
-                EventMesh.publish("set_call_state",1) \r
-                \r
-        elif args[0] == 16:\r
-                EventMesh.debug_log('voicecall holding, PhoneNO.: ', args[6])\r
-\r
-    class DeviceInfoManager(Abstract):\r
-        \r
-        """\r
-            设备信息管理\r
-        """\r
-\r
-        def __init__(self):\r
-\r
-            self.DeviceInfo_queue = Queue()\r
-            _thread.stack_size((9+6)*1024)\r
-            _thread.start_new_thread(self.DeviceInfo_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            self.boot_time_count = 0\r
-            self.factory_test_time = 0\r
-            EventMesh.subscribe("publish_message_event_DeviceInfo",self.publish_message_event_DeviceInfo)\r
-            self.key = ""\r
-            self.imei = ""\r
-            self.cid = "ETEST20221014010"\r
-            self.imsi = ""\r
-            self.password = "000000"\r
-            #self.__city = None\r
-            #self.__location = None\r
-            self.timer_push_schedule = osTimer()\r
-            self.timer_pusht_test = osTimer()\r
-            \r
-            #self.battery_push_schedule = osTimer()\r
-            self.check_battery_list = []\r
-            \r
-            self.step = [0,0,0,0]\r
-            self.timer_push=0\r
-            self.timer_push_tmp=60\r
-            self.PING = "0" #绑定状态\r
-            self.connect = 0 #服务器连接状态\r
-            self.KA_time = 0\r
-            self.HR_time = 0\r
-            self.hr_timeSecond = 0\r
-            self.HR_state = 0\r
-            self.HR_Onestate = 0\r
-            self.get_hr_state = 0\r
-            self.get_spo2_state = 0\r
-            self.set_hsenor_crt = 0\r
-            self.HR_OneTime = 0\r
-            self.Hr_Need_Open = 0\r
-            self.Spo2_Need_Open = 0\r
-            self.bat_time = 0\r
-            self.vbat_full_flag = 0\r
-            self.clear_step = 0\r
-            self.test = 0\r
-            self.old_time = 0\r
-            self.UD_time = 0\r
-            self.upload_time = 0\r
-            self.UD_timeout = 7*60\r
-\r
-            self.temp_timeSecond = 0\r
-            self.temp_state = 0\r
-            self.temp_one_state = 0\r
-            self.temp_warning = 0\r
-\r
-            self.bg_timeSecond = 0\r
-\r
-            self.bp_timeSecond = 0\r
-            self.bpauto_state = 0\r
-\r
-            self.spo2_timeSecond = 0\r
-            self.spo2auto_state = 0\r
-\r
-            self.vbat_count = 0\r
-\r
-            self.vbat_buf=[]\r
-\r
-            self.curr_battery_level = 4200\r
-            self.bat_count = 0\r
-\r
-            self.mearsure_btn = 0\r
-            self.mearsure_timer = 0\r
-\r
-            self.old_hr_time = 0\r
-            self.old_spo2_time = 0\r
-\r
-            self.no_smi_count = 0\r
-            self.no_smi_state = 0\r
-\r
-            self.old_bp_time = 0\r
-\r
-            self.medicine_count = 0\r
-            self.medicine_flag  = 0\r
-            self.medicine_oldtotalmin = 0\r
-            \r
-            self.wakeup_flag = 0\r
-            self.wakeup_count = 0\r
-            self.wakeup_oldtotalmin = 0\r
-\r
-            self.sleep_flag = 0\r
-            self.sleep_count = 0\r
-            self.sleep_oldtotalmin = 0\r
-\r
-            self.reset_flag = 0\r
-            self.reset_count = 0\r
-            self.reset_oldtotalmin = 0\r
-\r
-            self.home_flag = 0\r
-            self.home_count = 0\r
-            self.home_oldtotalmin = 0\r
-\r
-            self.normal_flag = 0\r
-            self.normal_count = 0\r
-            self.normal_oldtotalmin = 0\r
-            \r
-            self.charge_full_count = 0\r
-            self.GPS_step_t = 0#记录步数\r
-            self.usb = USB()\r
-            self.usb.setCallback(self.usb_event_cb)\r
-            self.log = LogAdapter(self.__class__.__name__)\r
-            self.rtc = RTC()\r
-            self.aud = audio.Audio(0)\r
-            EventMesh.debug_log("DeviceInfoManager:1")\r
-\r
-            self.old_temp_time = 0\r
-\r
-            EventMesh.debug_log("DeviceInfoManager:3")\r
-            self.i2c0 = I2C(I2C.I2C0, I2C.FAST_MODE)\r
-            self.stop_temp( None, None)\r
-            self.dev_state = 0\r
-            self.wear = 1\r
-            self.BG_state = 0\r
-            self.old_bg_time = 0\r
-\r
-            self.pull_time = 0\r
-\r
-            self.drink_time = 0\r
-\r
-            self.alarm_count = 0\r
-            self.alarm_flag = 0\r
-\r
-            self.time_count = 0\r
-            \r
-            self.auto_spo2_count = 0\r
-\r
-            self.auto_hr_count = 0\r
-\r
-            self.auto_temp_count = 0\r
-\r
-            self.low_power_AL = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.debug_log("post_processor_after_instantiation:1")\r
-            """订阅此类所有的事件到 EventMesh中"""\r
-            voiceCall.setCallback(voice_callback)\r
-            EventMesh.subscribe("screen_get_ope", self.get_device_ope)\r
-            EventMesh.subscribe("screen_get_sig", self.get_signal)\r
-            EventMesh.subscribe("screen_get_time", self.get_time)\r
-            EventMesh.subscribe("about_get_imei", self.get_imei)\r
-            EventMesh.subscribe("about_get_iccid", self.get_ic_cid)\r
-            EventMesh.subscribe("get_sim_Status", self.get_sim_Status)\r
-            EventMesh.subscribe("about_get_phonenum", self.get_phone_num)\r
-            EventMesh.subscribe("screen_get_battery", self.get_battery)\r
-            EventMesh.subscribe("set_curr_battery_level", self.set_curr_battery_level)\r
-            EventMesh.subscribe("get_curr_battery_level", self.get_curr_battery_level)\r
-            EventMesh.subscribe("get_fw_version", self.get_device_fw_version)\r
-            EventMesh.subscribe("get_standby_time", self.get_standby_time)\r
-            EventMesh.subscribe(constants.EVENT.GET_STEP, self.get_step_count)\r
-            EventMesh.subscribe("sim_slot_get", self.sim_slot_get)\r
-            EventMesh.subscribe("sim_slot_switch", self.sim_slot_switch)\r
-            EventMesh.subscribe(constants.EVENT.GET_KEY, self.get_key)\r
-            EventMesh.subscribe(constants.EVENT.SET_KEY, self.set_key)\r
-            EventMesh.subscribe(constants.EVENT.GET_IMEI, self.get_imei)\r
-            EventMesh.subscribe(constants.EVENT.GET_CID, self.get_cid)\r
-            EventMesh.subscribe(constants.EVENT.SET_CID, self.set_cid)\r
-            EventMesh.subscribe(constants.EVENT.GET_IMSI, self.get_imsi)\r
-            EventMesh.subscribe(constants.EVENT.GET_PASSWORD, self.get_password)\r
-            EventMesh.subscribe(constants.EVENT.SET_PASSWORD, self.set_password)     \r
-            EventMesh.subscribe(constants.EVENT.SET_PING, self.set_ping)\r
-            EventMesh.subscribe(constants.EVENT.GET_PING, self.get_ping)\r
-            EventMesh.subscribe(constants.EVENT.SET_CONNECT, self.set_connect)\r
-            EventMesh.subscribe(constants.EVENT.GET_CONNECT, self.get_connect)\r
-\r
-            \r
-            EventMesh.subscribe(constants.EVENT.START_BLOOD_OXYGEN, self.start_blood_oxygen)\r
-            EventMesh.subscribe(constants.EVENT.START_HEART, self.start_heart)\r
-            EventMesh.subscribe(constants.EVENT.STOP_BLOOD_OXYGEN, self.stop_blood_oxygen)\r
-            EventMesh.subscribe(constants.EVENT.STOP_HEART, self.stop_heart)\r
-            EventMesh.subscribe(constants.EVENT.GET_BLOOD_OXYGEN, self.get_blood_oxygen)\r
-            EventMesh.subscribe(constants.EVENT.GET_HEART, self.get_heart)\r
-            EventMesh.subscribe(constants.EVENT.GET_WEAR, self.get_wear)\r
-            EventMesh.subscribe("get_Hsensor", self.get_Hsensor)\r
-            EventMesh.subscribe("Hsensor_set_sleep", self.Hsensor_set_sleep)\r
-\r
-            EventMesh.subscribe(constants.EVENT.START_TEMP, self.start_temp)\r
-            EventMesh.subscribe(constants.EVENT.STOP_TEMP, self.stop_temp)\r
-            EventMesh.subscribe(constants.EVENT.GET_TEMP, self.get_temp)\r
-            EventMesh.subscribe("get_boot_time_count", self.get_boot_time_count)\r
-            EventMesh.subscribe("get_factory_test_time", self.get_factory_test_time)\r
-            EventMesh.subscribe("get_dev_state", self.get_dev_state)\r
-            EventMesh.subscribe("set_dev_state", self.set_dev_state)\r
-\r
-            EventMesh.subscribe("clear_health_state", self.clear_health_state)\r
-\r
-            EventMesh.subscribe("clear_home_alarm", self.clear_home_alarm)\r
-            EventMesh.subscribe("clear_medicine_alarm", self.clear_medicine_alarm)\r
-            EventMesh.subscribe("clear_wakeup_alarm", self.clear_wakeup_alarm)\r
-            EventMesh.subscribe("clear_sleep_alarm", self.clear_sleep_alarm)\r
-            EventMesh.subscribe("clear_normal_alarm", self.clear_normal_alarm)\r
-\r
-            EventMesh.subscribe("clear_manual_hr_flag", self.clear_manual_hr_flag)\r
-            EventMesh.subscribe("clear_manual_temp_flag", self.clear_manual_temp_flag)\r
-\r
-\r
-            EventMesh.subscribe("clear_usb_flag", self.clear_usb_flag)\r
-            \r
-            EventMesh.debug_log("post_processor_after_instantiation:2")\r
-            self.timer_push_schedule.start(10000, 1, self.publish_event_cb)\r
-            # self.timer_pusht_test.start(2000, 1, self.publish_test)\r
-            # self.battery_push_schedule.start(3000, 1, self.__check_battery)\r
-            self.log.debug("post_processor_after_instantiation finished")\r
-            #EventMesh.publish(constants.EVENT.START_HEART)\r
-            # 设备开机立刻更新一次参数\r
-            self.publish_event_cb()\r
-            \r
-            EventMesh.debug_log("post_processor_after_instantiation:3")\r
-\r
-        def clear_manual_hr_flag(self,event,msg):\r
-            self.auto_hr_count = 0\r
-        \r
-        def clear_manual_temp_flag(self,event,msg):\r
-            self.auto_temp_count = 0\r
-\r
-        def publish_message_event_DeviceInfo(self,event,msg):\r
-            self.DeviceInfo_queue.put(msg)\r
-\r
-        #DeviceInfo的消息队列处理,防止卡顿\r
-        def DeviceInfo_queue_thread(self):\r
-            while True:\r
-                data = self.DeviceInfo_queue.get()\r
-                #EventMesh.debug_log("DeviceInfo_queue_thread:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        EventMesh.debug_log("DeviceInfo_queue_thread:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-\r
-\r
-        def gsensor_cb(self, para):\r
-            EventMesh.debug_log("gsensor_cb:{}".format(para))\r
-            flip_sw = EventMesh.publish("get_storage_config","flip_sw")\r
-            fall_sw = EventMesh.publish("get_storage_config","fall_sw")\r
-            if para == 0: #跌倒报警\r
-                pass\r
-                if fall_sw == "1":\r
-                    EventMesh.publish("falldown_alarm_event")\r
-                    dev_state =  EventMesh.publish("get_dev_state")\r
-\r
-                    tmp = 1 << 21\r
-                    dev_state = dev_state|tmp #第21位=1\r
-                    EventMesh.publish("set_dev_state",dev_state)\r
-                    EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,dev_state]) #开始AL定位\r
-                    pass\r
-                #EventMesh.publish("load_screen", {"screen": "FIND"})\r
-            elif para == 1: #抬腕\r
-                \r
-                if flip_sw == 1:\r
-                    EventMesh.publish(constants.EVENT.SYSTEM_UP)\r
-                \r
-            elif para == 2: #放手\r
-                pass\r
-                # if flip_sw == 1:\r
-                #     EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)\r
-        def get_boot_time_count(self, event, msg):\r
-            return self.boot_time_count\r
-        \r
-        def get_factory_test_time(self, event, msg):\r
-            return self.factory_test_time\r
-        \r
-        def get_dev_state(self, event, msg):\r
-            return self.dev_state\r
-        def set_dev_state(self, event, msg):\r
-            self.dev_state = msg\r
-        \r
-        def publish_event_cb(self, *args, **kwargs):\r
-            open_power = EventMesh.publish("get_power_on_state")#获取开机标识\r
-            if open_power != None:\r
-                if open_power == 1:\r
-                    if self.boot_time_count < 50000000:\r
-                        self.boot_time_count += 10\r
-                    \r
-                    if self.factory_test_time < 300:\r
-                        self.factory_test_time+=10\r
-                #EventMesh.debug_log("boot_time_count:{}".format(self.boot_time_count))\r
-            EventMesh.publish("publish_message_event_DeviceInfo",{"func":self.publish_event,"data":0})  \r
-        def optimize_temp(self,temp):\r
-            temp += 0.5\r
-            get_temp_time  = EventMesh.publish("get_temp_time")\r
-            EventMesh.debug_log("temp:{}".format(temp))\r
-            if temp < 36 :#or temp > 37.5:\r
-                temp = 36+urandom.random()\r
-            if temp > 37.5:\r
-                \r
-                self.temp_warning += 1\r
-                EventMesh.debug_log("temp_warning:{} get_temp_time{}".format(self.temp_warning,get_temp_time))\r
-                \r
-                if self.temp_warning < 5:#高温没连续超过3次,和谐成37.5度以下\r
-                    temp = 37+(urandom.randint(1, 4)/10)\r
-                else:\r
-                    self.temp_warning = 0\r
-            else:\r
-                if self.temp_warning>=1:\r
-                    self.temp_warning -= 1\r
-            if temp >= 40:\r
-                temp = 40\r
-            return temp\r
-        def clear_health_state(self,event,msg):\r
-            print("clear_health_state")\r
-            self.old_bp_time = 0#关闭心率 血压 血氧 体温清除标志\r
-            self.old_time = 0\r
-            self.HR_Onestate = 0\r
-            self.HR_OneTime = 0\r
-            self.HR_state = 0\r
-            self.set_hsenor_crt = 0\r
-            self.old_bg_time = 0\r
-            self.old_hr_time = 0\r
-            self.old_spo2_time = 0\r
-            self.BG_state = 0\r
-            self.bpauto_state = 0\r
-            self.spo2auto_state = 0\r
-            pass\r
-\r
-        def clear_temp_state(self,event,msg):\r
-            print("clear_temp_state")\r
-            self.temp_state = 0\r
-            self.temp_one_state = 0\r
-            self.old_temp_time = 0\r
-            pass\r
-\r
-        def publish_event(self,data):\r
-            """\r
-            定时事件处理\r
-            :param args:\r
-            :param kwargs:\r
-            :return:\r
-            """\r
-\r
-            date_tmp = utime.localtime()\r
-            time_tmp = utime.mktime(date_tmp)\r
-            # EventMesh.debug_log("date_tmp......01....{} time_tmp:{}\r\n".format(date_tmp,time_tmp))\r
-            \r
-\r
-            EventMesh.publish("countdown_end_cb")\r
-            """定时检查是否关闭gps失败"""\r
-            # gnss_state = quecgnss.get_state()\r
-            # get_location_flag = EventMesh.publish("get_location_flag")\r
-            # if get_location_flag != None:\r
-            #     # if gnss_state == 2 and get_location_flag == 0:\r
-            #     #     EventMesh.publish(constants.EVENT.GPSCLOSE)\r
-            #     if(get_location_flag == 0):\r
-            #         EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位\r
-\r
-            """7分钟一次心跳"""\r
-            if  math.fabs(time_tmp - self.KA_time) > heartbeat_time: #7分钟一次心跳\r
-                self.KA_time = time_tmp\r
-                EventMesh.publish(constants.PROTOCOL.KA_SEND)\r
-\r
-            """定时定位"""\r
-            #EventMesh.publish("set_upload_data",3*60)\r
-            self.upload_time = EventMesh.publish("get_upload_data")\r
-            #EventMesh.debug_log("self.upload_time:{} math.fabs(time_tmp - self.UD_time):{}".format(self.upload_time,math.fabs(time_tmp - self.UD_time)))\r
-            if self.upload_time != None :\r
-                if  math.fabs(time_tmp - self.UD_time) > self.upload_time: #30分钟一次定位\r
-                    self.UD_time = time_tmp\r
-\r
-                    status_tmp = 4\r
-                    #EventMesh.txt_log("status_count:{}".format(status_tmp))\r
-                    if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and status_tmp > 3 :\r
-                        EventMesh.publish(constants.EVENT.START_LOCATION,constants.PROTOCOL.UD_SEND) #开始UD定位\r
-\r
-                    else : #关闭定位\r
-                        #EventMesh.txt_log("NO status")\r
-                        EventMesh.debug_log("NO status")\r
-                        EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 \r
-            \r
-            EventMesh.publish(constants.EVENT.PUSH_STEP, self.get_step_count())\r
-\r
-            """电池平均值"""\r
-            temp = Power.getVbatt()\r
-            if self.bat_count < 10:\r
-                self.vbat_buf.append(temp)\r
-                self.bat_count += 1\r
-            else:\r
-                for i in range(9):\r
-                    self.vbat_buf[i] = self.vbat_buf[i+1]\r
-                self.vbat_buf[9] = temp\r
-            curr_count = len(self.vbat_buf)\r
-            bat_total_value = 0\r
-            for i in range(curr_count):\r
-                bat_total_value += self.vbat_buf[i]\r
-            bat_total_value = bat_total_value//curr_count#一分钟更新一次电量 10个平均值\r
-            EventMesh.publish("set_curr_battery_level",bat_total_value)\r
-            # EventMesh.debug_log("self.vbat_buf:{} curr_count :{} bat_total_value:{} temp:{}".format(self.vbat_buf,curr_count,bat_total_value,temp))\r
-            bat_tmp = EventMesh.publish("screen_get_battery")\r
-            self.vbat_count+=10\r
-            if self.vbat_count >= 60:\r
-                self.vbat_count = 0\r
-                if bat_tmp != None:\r
-                    bat_value = bat_tmp[1]\r
-                    if bat_value <= 0:\r
-                        pass\r
-                        # EventMesh.publish("load_screen", {"screen": "LOW_ONE_POWER"})\r
-            \r
-            \r
-            """"隔天清步数"""\r
-\r
-            data = RTC().datetime()\r
-\r
-            hour = int(data[4])\r
-            min = int(data[5])\r
-\r
-\r
-\r
-            cur_month = int(data[1])\r
-            cur_day = int(data[2])\r
-            cur_year = int(data[0])\r
-\r
-            old_Timesec = EventMesh.publish("get_old_time_data")\r
-            # EventMesh.debug_log("hour:{} {} cur_month:{} {} next_alarm_time:{} old_Timesec:{}".format(hour,min,cur_month,cur_day,next_alarm_time,old_Timesec))\r
-            # EventMesh.debug_log("old_Timesec",old_Timesec)\r
-            if old_Timesec != None:\r
-                next_alarm_time = utime.localtime(int(old_Timesec))\r
-                month = int(next_alarm_time[1]) #00:00 18\r
-                day = int(next_alarm_time[2])\r
-                year = int(next_alarm_time[0])\r
-                if month != cur_month or day != cur_day or year != cur_year:#年 月 日只要其中一个都不一样就清零\r
-                    EventMesh.publish("set_old_time_data",time_tmp)\r
-\r
-\r
-                    EventMesh.publish("set_old_step_value",0)\r
-                    \r
-                    hr = EventMesh.publish("get_old_hr_data")\r
-                    if hr != 0:\r
-                        EventMesh.publish("set_old_hr_data", 0)\r
-                    \r
-                    spo2 = EventMesh.publish("get_old_spo2_data")\r
-                    if spo2 != 0:\r
-                        EventMesh.publish("set_old_spo2_data", 0)\r
-                    EventMesh.debug_log("clear step1111")\r
-                else:\r
-                    pass\r
-                    \r
-                    \r
-            if hour == 23:#清步数23:59\r
-                if min == 59:#58 59\r
-                    # if self.clear_step == 0:\r
-                    #     self.clear_step = 1\r
-                    EventMesh.publish("set_old_time_data",time_tmp)\r
-\r
-                    EventMesh.publish("set_old_step_value",0)\r
-\r
-                    hr = EventMesh.publish("get_old_hr_data")\r
-                    if hr != 0:\r
-                        EventMesh.publish("set_old_hr_data", 0)\r
-                    \r
-                    spo2 = EventMesh.publish("get_old_spo2_data")\r
-                    if spo2 != 0:\r
-                        EventMesh.publish("set_old_spo2_data", 0)\r
-                    EventMesh.debug_log("clear step2222")\r
-\r
-                else:\r
-                    self.clear_step = 0\r
-            else:\r
-                self.clear_step = 0\r
-            \r
-            """电量小于0% 关机"""\r
-            get_low_btn = EventMesh.publish("get_low_bat_btn")#\r
-            battery = EventMesh.publish("screen_get_battery")\r
-\r
-            if battery != None:\r
-                power = int(battery[1])\r
-                if battery[0] != '1':\r
-                    if power == 0:\r
-                        EventMesh.publish("open_power_on",2)#  \r
-                    """"低电报警"""\r
-                    # print("low power!!!!!!!!!!! %d",self.low_power_AL)\r
-                    if power <= 15 and self.low_power_AL==0:\r
-                        self.low_power_AL = 1\r
-                        dev_state =  EventMesh.publish("get_dev_state")\r
-\r
-                        tmp = 1 << 17\r
-                        dev_state = dev_state|tmp #第17位=1\r
-                        EventMesh.publish("set_dev_state",dev_state)\r
-                        EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,dev_state]) #开始AL定位\r
-\r
-                if power >= 50:\r
-                    self.low_power_AL = 0\r
-            \r
-            """未联网提示关机"""\r
-            ble=EventMesh.publish(constants.EVENT.GET_CONNECT)\r
-            # EventMesh.debug_log("ble",ble)\r
-            if ble == 0:#未联网提示关机\r
-                if battery[0] != '1':\r
-                    self.no_smi_count+=10\r
-                    # EventMesh.debug_log("self.no_smi_count",self.no_smi_count)\r
-                    if self.no_smi_count >= (15*60):#(15*60)\r
-                        self.no_smi_count = 0\r
-                        EventMesh.publish("open_power_on",2)#  #未检测到sim卡15分钟后关机\r
-                    \r
-            else:\r
-                self.no_smi_count = 0\r
-\r
-            msg_nums = sms.getMsgNums() #获取短信条数\r
-            # EventMesh.debug_log("msg_nums",msg_nums)\r
-            if(msg_nums != -1):\r
-                sms_data = sms.getSaveLoc()\r
-                sms_max = sms_data[0][2]\r
-                if msg_nums >= sms_max-1:\r
-                    EventMesh.publish("delete_sms_event")#\r
-\r
-            #佩戴检测\r
-            WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据\r
-            if self.wear != WEAR:\r
-                remove_sw = EventMesh.publish("get_storage_config","remove_sw")\r
-                if remove_sw == "1":#开启了佩戴检测的开关\r
-                    dev_state =  EventMesh.publish("get_dev_state")\r
-                    \r
-                    if WEAR != 1:\r
-                        tmp = 1 << 3\r
-                        tmp = ~tmp\r
-                        tmp = 1 << 20\r
-                        dev_state = dev_state|tmp #第20位=1\r
-                    # else :     \r
-                    #     pass              \r
-                        \r
-                    #     tmp = 1 << 20\r
-                    #     dev_state = dev_state|tmp #第20位=1\r
-                    #     tmp = 1 << 3\r
-                    #     dev_state = dev_state|tmp #第三位=1\r
-                        EventMesh.debug_log("佩戴检测:{}".format(dev_state))    \r
-                        EventMesh.publish("set_dev_state",dev_state)\r
-                        EventMesh.publish(constants.EVENT.START_LOCATION,[constants.PROTOCOL.AL_SEND,dev_state]) #开始AL定位,发送报警\r
-                        #EventMesh.publish(constants.PROTOCOL.HELP_SEND,65)\r
-            self.wear = WEAR\r
-            """定时测量心率,血氧,体温"""\r
-            self.get_hr_state = EventMesh.publish("get_hr_state")\r
-            self.get_spo2_state = EventMesh.publish("get_spo2_state")\r
-            get_temp_time  = EventMesh.publish("get_temp_time")\r
-            get_temp_state  = EventMesh.publish("get_temp_state")\r
-            get_bp_state  = EventMesh.publish("get_bp_state")\r
-            get_bg_state  = EventMesh.publish("get_bg_state")\r
-            if get_bg_state == None:\r
-                get_bg_state = 0\r
-            if get_bp_state == None:\r
-                get_bp_state = 0\r
-\r
-            if get_temp_state == None:\r
-                get_temp_state = 0\r
-\r
-            if self.get_hr_state == None:\r
-                self.get_hr_state = 0\r
-            if self.get_spo2_state == None:\r
-                self.get_spo2_state = 0 \r
-\r
-            video_state = EventMesh.publish("get_video_state")#获取\r
-            if video_state == None:\r
-                video_state = 0\r
-                \r
-            call_state = EventMesh.publish("get_call_state")\r
-            if call_state == None:\r
-                call_state = 0\r
-\r
-\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if video_state != None:\r
-                if battery[0] != "1":\r
-                    if get_temp_state != None and call_state != None and video_state != None: #突然脱腕\r
-\r
-                        if get_temp_state > 1  and (WEAR != 1 or call_state != 0 or video_state != 0):\r
-                            EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-                            EventMesh.publish("set_temp_state",0)       \r
-                            EventMesh.txt_log("auto stop_temp:22")\r
-\r
-                        if (self.get_hr_state > 1 or self.get_spo2_state > 1 or get_bp_state > 1 or get_bg_state > 1) and (WEAR != 1 or call_state != 0 or video_state != 0):\r
-                            # print("wear faile")\r
-                            if self.get_hr_state > 1 :\r
-                                EventMesh.txt_log("auto stop_hr:22")\r
-                                EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                                EventMesh.publish(constants.EVENT.STOP_HEART) \r
-                                if WEAR == 1:\r
-                                    heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                                    if heart_value >= 50 and heart_value != None:\r
-                                        EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-                                \r
-                            if self.get_spo2_state > 1:\r
-                                EventMesh.txt_log("auto stop_spo2:22")\r
-                                EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-\r
-                                EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                                spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                                if WEAR == 1:\r
-                                    if spo2_value > 85 and spo2_value != None:\r
-                                        EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                                \r
-                            if get_bp_state > 1:\r
-\r
-                                EventMesh.txt_log("auto stop_bp:22")\r
-                                EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                if WEAR == 1:\r
-                                    blood_data = get_autoblood_value()\r
-                                    if blood_data == None:\r
-                                        blood_data[0] = 0\r
-                                        blood_data[1] = 0\r
-\r
-                                    max_value = blood_data[0]\r
-                                    min_value = blood_data[1]\r
-                                    if max_value != 0 and min_value != 0:\r
-                                        EventMesh.publish(constants.PROTOCOL.BLOOD_SEND,[max_value,min_value])\r
-                                \r
-                            if get_bg_state > 1:\r
-                                EventMesh.txt_log("auto stop_bg:22")\r
-                                \r
-                                EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                if WEAR == 1:\r
-                                    bg_data = get_blood_sugar_value()\r
-                                    if bg_data == None:\r
-                                        bg_data = 0\r
-                                    if bg_data != 0:\r
-                                        # EventMesh.publish("play_sugar_value", bg_data)#播放血糖数值\r
-                                        EventMesh.publish(constants.PROTOCOL.BLOODGLUSOCE_SEND,bg_data)   \r
-        \r
-            if self.pull_time == 0:\r
-                self.pull_time = time_tmp\r
-            # if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#已联网 并且不在充电 佩戴正常 不在通话就给测试心率\r
-            if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and battery[0] != "1" and WEAR == 1 and call_state == 0 and video_state == 0:\r
-                #防止时间校时出错\r
-                if time_tmp < self.pull_time :\r
-                    self.pull_time = time_tmp\r
-                if time_tmp < self.temp_timeSecond:\r
-                    self.temp_timeSecond = time_tmp\r
-                if time_tmp < self.hr_timeSecond:\r
-                    self.hr_timeSecond = time_tmp\r
-                if time_tmp < self.spo2_timeSecond :\r
-                    self.spo2_timeSecond = time_tmp\r
-                if time_tmp < self.bp_timeSecond:\r
-                    self.bp_timeSecond = time_tmp\r
-                if time_tmp < self.bg_timeSecond:\r
-                     self.bg_timeSecond = time_tmp\r
-\r
-                if time_tmp - self.pull_time >= 30:\r
-                    # EventMesh.debug_log("shifens:")  \r
-\r
-                    get_hr_state = EventMesh.publish("get_hr_state")\r
-                    get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                    get_bp_state  = EventMesh.publish("get_bp_state")\r
-                    get_bg_state  = EventMesh.publish("get_bg_state")\r
-                    get_temp_state  = EventMesh.publish("get_temp_state")\r
-                    if get_hr_state == None:\r
-                        get_hr_state = 0\r
-                        self.old_hr_time = 0\r
-\r
-                    if get_spo2_state == None:\r
-                        get_spo2_state = 0\r
-                        self.old_spo2_time = 0\r
-\r
-                    if get_temp_state == None:\r
-                        get_temp_state = 0\r
-                        self.temp_one_state = 0\r
-\r
-                    if get_bp_state == None:\r
-                        get_bp_state = 0\r
-                        self.old_bp_time = 0\r
-                    \r
-                    if get_bg_state == None:\r
-                        get_bg_state = 0\r
-                        self.old_bg_time = 0\r
-                    \r
-                    # print("bp get_bp_state ",get_bp_state,self.old_bp_time)\r
-\r
-                    \r
-                    if get_hr_state != None:\r
-                        if get_hr_state == 3:\r
-                            self.old_hr_time+=1\r
-                            if self.old_hr_time == 1:\r
-                                EventMesh.publish("set_hr_state",3)#2代表后台进入测试\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_HEART)\r
-                                EventMesh.txt_log("auto start_hr:333")\r
-                            elif self.old_hr_time > 6:\r
-                                self.old_hr_time = 0\r
-                                EventMesh.publish("set_hr_state",0)#2代表后台进入测试\r
-                                EventMesh.txt_log("auto stop_hr:333")\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                                EventMesh.debug_log("heart_value:{}".format(heart_value))\r
-                                if heart_value >= 50 and heart_value != None:\r
-                                    EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-                                EventMesh.debug_log("STOP_HEART:3")\r
-                        else:\r
-                            self.old_hr_time = 0\r
-                    else:\r
-                        self.old_hr_time = 0\r
-\r
-\r
-                    if get_spo2_state != None:\r
-                        if get_spo2_state == 3:\r
-                            self.old_spo2_time+=1\r
-                            if self.old_spo2_time == 1:\r
-                                EventMesh.publish("set_spo2_state",3)#2代表后台进入测试\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧\r
-                                EventMesh.txt_log("auto start_spo2:333")\r
-                            elif self.old_spo2_time > 6:\r
-                                self.old_spo2_time = 0\r
-                                EventMesh.txt_log("auto stop_spo2:333")\r
-                                EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                                EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                                spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                                if spo2_value > 85 and spo2_value != None:\r
-                                    EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                                    \r
-                        else:\r
-                            self.old_spo2_time = 0\r
-                    else:\r
-                        self.old_spo2_time = 0\r
-\r
-\r
-                    if get_bp_state != None:\r
-                        if get_bp_state == 3:\r
-                            self.old_bp_time+=1\r
-                            if self.old_bp_time == 1:\r
-                                EventMesh.publish("set_bp_state",3)#2代表后台进入测试\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_HEART)\r
-                                EventMesh.txt_log("auto start_bp:333")\r
-                            elif self.old_bp_time > 6:\r
-                                self.old_bp_time = 0\r
-                                \r
-                                EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                blood_data = get_autoblood_value()\r
-                                if blood_data == None:\r
-                                    blood_data[0] = 0\r
-                                    blood_data[1] = 0\r
-\r
-                                max_value = blood_data[0]\r
-                                min_value = blood_data[1]\r
-                                if max_value != 0 and min_value != 0:\r
-                                    EventMesh.publish(constants.PROTOCOL.BLOOD_SEND,[max_value,min_value])\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                EventMesh.txt_log("auto stop_bp:333")\r
-                        else:\r
-                            self.old_bp_time = 0\r
-                    else:\r
-                        self.old_bp_time = 0\r
-\r
-                    if get_bg_state != None:\r
-                        if get_bg_state == 3:\r
-                            self.old_bg_time+=1\r
-                            if self.old_bg_time == 1:\r
-                                EventMesh.publish("set_bg_state",3)#2代表后台进入测试\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_HEART)\r
-                                EventMesh.txt_log("auto start_bg:333")\r
-                            elif self.old_bg_time > 6:\r
-                                self.old_bg_time = 0\r
-                                EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                bg_data = get_blood_sugar_value()\r
-                                if bg_data == None:\r
-                                    bg_data = 0\r
-                                if bg_data != 0:\r
-                                    EventMesh.publish(constants.PROTOCOL.BLOODGLUSOCE_SEND,bg_data)\r
-\r
-                                EventMesh.txt_log("auto stop_bp:333")\r
-                        else:\r
-                            self.old_bg_time = 0\r
-                    else:\r
-                        self.old_bg_time = 0\r
-\r
-                    \r
-                    if get_temp_state != None:\r
-                        if get_temp_state == 3:#单次测量\r
-                            self.temp_one_state+=1\r
-                            if self.temp_one_state == 1:\r
-                                EventMesh.txt_log("auto start_temp:333")\r
-                                EventMesh.debug_log("AUTO one temp:2") \r
-                                EventMesh.publish("set_temp_state",3)\r
-                                # EventMesh.publish("set_hr_blood_led",1)\r
-                                EventMesh.publish(constants.EVENT.START_TEMP)   \r
-                            elif self.temp_one_state > 3:\r
-                                self.temp_one_state = 0\r
-                                temp = EventMesh.publish(constants.EVENT.GET_TEMP) \r
-                                temp = self.optimize_temp(temp)\r
-                                \r
-                                EventMesh.publish("set_temp_state",0)\r
-                                tmp_f_tmp = 0\r
-                                tmp_d_tmp = 0\r
-                                if str(temp).find(".") != -1:\r
-                                    tmp_f = str(temp).split('.')[0] \r
-                                    tmp_f_tmp = int(tmp_f)\r
-                                    \r
-                                    tmp_d = str(temp).split('.')[1][:1]\r
-                                    tmp_d_tmp = int(tmp_d)\r
-                                else:\r
-                                    tmp_f_tmp = temp\r
-                                    \r
-                                if temp != None:\r
-                                    if temp != 0:\r
-                                        EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])\r
-                                EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-                                EventMesh.txt_log("auto start_temp:333")\r
-\r
-\r
-        \r
-                    \r
-                    # EventMesh.debug_log("get_temp_time:{} self.temp_one_state:{}".format(get_temp_time,self.temp_one_state))\r
-                    if get_temp_time != None:#定时测量体温\r
-                        if get_temp_time > 0:\r
-                            if get_temp_state != None:\r
-                                get_temp_state  = EventMesh.publish("get_temp_state")\r
-                                if get_temp_state == 0 or get_temp_state == 2:\r
-                                    if (time_tmp-self.temp_timeSecond) >= get_temp_time:#大于一个周期的时间,重新赋值\r
-                                        self.temp_state = 0\r
-                                        self.temp_timeSecond = time_tmp\r
-\r
-                                    if (time_tmp-self.temp_timeSecond) == 0 and self.temp_state == 0:#一开始就测量 测量一分钟停止测量体温\r
-                                        self.temp_state = 1\r
-                                        EventMesh.publish("set_temp_state",2)\r
-                                        # EventMesh.publish("set_hr_blood_led",1)\r
-                                        EventMesh.debug_log("AUTO temp:") \r
-                                        EventMesh.txt_log("auto START_temp:1")\r
-                                        EventMesh.publish(constants.EVENT.START_TEMP)\r
-\r
-                                    elif (time_tmp-self.temp_timeSecond) >= 30 and self.temp_state == 1 and get_temp_state == 2:\r
-                                        self.temp_state = 0\r
-                                        EventMesh.txt_log("auto stop_temp:1")\r
-                                        EventMesh.publish("set_temp_state",0)\r
-                                        temp = EventMesh.publish(constants.EVENT.GET_TEMP) \r
-                                        temp = self.optimize_temp(temp)\r
-                                        \r
-                                        tmp_f_tmp = 0\r
-                                        tmp_d_tmp = 0\r
-                                        if str(temp).find(".") != -1:\r
-                                            tmp_f = str(temp).split('.')[0] \r
-                                            tmp_f_tmp = int(tmp_f)\r
-                                            \r
-                                            tmp_d = str(temp).split('.')[1][:1]\r
-                                            tmp_d_tmp = int(tmp_d)\r
-                                        else:\r
-                                            tmp_f_tmp = temp\r
-                                            \r
-                                        if temp != None:\r
-                                            if temp != 0:\r
-                                                EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])\r
-                                        EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-\r
-                                else:\r
-                                    self.temp_state = 0\r
-                                    self.old_temp_time = 0\r
-                        else:\r
-                            temp_state  = EventMesh.publish("get_temp_state") \r
-                            if temp_state == 2:\r
-                                EventMesh.publish("set_temp_state",0)#2代表后台进入测试\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                EventMesh.txt_log("auto wear stop_temp:2 ")\r
-                                EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-                            self.temp_state = 0\r
-                            self.temp_timeSecond = 0\r
-                            self.old_temp_time = 0\r
-\r
-\r
-\r
-                    hr_time = EventMesh.publish("get_time_hr")#获取时间是否大于0\r
-                    if hr_time !=  None:\r
-                        self.mearsure_btn = int(hr_time[0])\r
-                        self.mearsure_timer = int(hr_time[1])\r
-\r
-                        if self.mearsure_btn != None and self.mearsure_timer != None:\r
-                            \r
-                            if self.mearsure_btn >= 1 and self.mearsure_timer > 0:#开关打开并且时间大于0就可以测试血糖\r
-                                get_hr_state = EventMesh.publish("get_hr_state")#心率\r
-                                get_spo2_state = EventMesh.publish("get_spo2_state")#血氧\r
-                                get_bp_state  = EventMesh.publish("get_bp_state")#血压\r
-                                get_bg_state  = EventMesh.publish("get_bg_state")#血糖\r
-                                # print("state hr",get_hr_state,get_spo2_state,get_bp_state,get_bg_state)\r
-                                if (get_bg_state == 0 and get_spo2_state == 0 and get_bp_state == 0) and  (get_hr_state == 2 or get_hr_state == 0):#心率血压血氧不在测试就测试血糖自动测量\r
-                                    if (time_tmp-self.hr_timeSecond) >= self.mearsure_timer:#大于一个周期的时间,保存的时间戳时间 1678 0 1678 30 1678 \r
-                                        self.hr_timeSecond = time_tmp\r
-                                        self.HR_Onestate = 0\r
-                                    # print("time_tmp hr",time_tmp,self.hr_timeSecond,time_tmp-self.hr_timeSecond,self.mearsure_timer,self.HR_Onestate)\r
-                                    if (time_tmp - self.hr_timeSecond) == 0 and self.HR_Onestate == 0:\r
-                                        self.HR_Onestate = 1\r
-                                        EventMesh.txt_log("auto START_hr:1")\r
-                                        EventMesh.publish("set_hr_state",2)#2代表后台进入测试\r
-                                        # EventMesh.publish("set_hr_blood_led",1)\r
-                                        EventMesh.publish(constants.EVENT.START_HEART)\r
-                                        \r
-                                    elif (time_tmp - self.hr_timeSecond) >= 60 and self.HR_Onestate == 1 and get_hr_state == 2:\r
-                                        self.HR_Onestate = 0\r
-                                        EventMesh.publish("set_hr_state",0)#2代表后台进入测试\r
-                                        EventMesh.debug_log("stop debug3")\r
-                                        EventMesh.txt_log("auto stop_hr:1")\r
-                                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                        heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                                        EventMesh.debug_log("heart_value:{}".format(heart_value))\r
-                                        # heart_value = 60+urandom.randint(0,10)\r
-                                        if heart_value >= 50 and heart_value != None:\r
-                                            EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-                                        #获取心率数据上传数据app\r
-                                        EventMesh.debug_log("STOP_HEART:")\r
-                                        \r
-                                else:\r
-                                    self.HR_Onestate = 0\r
-                            else:\r
-                                self.hr_timeSecond = 0\r
-                                self.HR_Onestate = 0\r
-                                hr_state = EventMesh.publish("get_hr_state")#心率\r
-                                if hr_state == 2:\r
-                                    EventMesh.publish("set_hr_state",0)#2代表后台进入测试\r
-                                    EventMesh.debug_log("33stop debug3")\r
-                                    # EventMesh.publish("stop_led_timer")#设置参数\r
-                                    EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                    EventMesh.txt_log("auto wear stop_hr:2 ")\r
-\r
-                    get_spo2time = EventMesh.publish("get_spo2_time")#血压自动测试\r
-                    # print("get_spo2time",get_spo2time)\r
-                    if get_spo2time != None:#血压时间不为0\r
-                        spo2_on = int(get_spo2time[0])\r
-                        spo2_time = int(get_spo2time[1])\r
-                        if spo2_on != 0 and spo2_time != 0:\r
-                            get_hr_state = EventMesh.publish("get_hr_state")\r
-                            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                            get_bp_state  = EventMesh.publish("get_bp_state")\r
-                            get_bg_state  = EventMesh.publish("get_bg_state")\r
-                            # print("state bg2",get_hr_state,get_spo2_state,get_bp_state,get_bg_state)\r
-                            if (get_hr_state == 0 and get_bp_state == 0 and get_bg_state == 0) and (get_spo2_state == 2 or get_spo2_state == 0):#心率血压血氧不在测试就测试血糖自动测量\r
-                                if (time_tmp-self.spo2_timeSecond) >= spo2_time:#大于一个周期的时间,保存的时间戳时间 1678 0 1678 30 1678 \r
-                                    self.spo2_timeSecond = time_tmp\r
-                                    self.spo2auto_state = 0\r
-                                # print("time_tmp spo2",time_tmp,self.spo2_timeSecond,time_tmp-self.spo2_timeSecond,self.bg_timer,self.bpauto_state)\r
-                                if (time_tmp - self.spo2_timeSecond) == 0 and self.spo2auto_state == 0:\r
-                                    self.spo2auto_state = 1\r
-                                    EventMesh.debug_log("START_spo2:auto")\r
-                                    EventMesh.txt_log("auto START_spo2:1")\r
-                                    EventMesh.publish("set_spo2_state",2)#2代表后台进入测试\r
-                                    EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧\r
-                                    \r
-                                elif (time_tmp - self.spo2_timeSecond) >= 60 and self.spo2auto_state == 1 and get_spo2_state == 2:\r
-                                    EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                                    self.spo2auto_state = 0\r
-                                    EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                                    spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                                    if spo2_value > 85 and spo2_value != None:\r
-                                        EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                                    EventMesh.txt_log("auto stop_spo2:1")\r
-                                \r
-                            else:\r
-                                self.spo2auto_state = 0\r
-                        else:\r
-                            self.spo2_timeSecond = 0\r
-                            self.spo2auto_state = 0\r
-                            spo2_state = EventMesh.publish("get_spo2_state")#心率\r
-                            if spo2_state == 2:\r
-                                EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                                EventMesh.debug_log("spo2 stop debug3")\r
-                                EventMesh.txt_log("auto wear stop_spo2:2 ")\r
-                                EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-\r
-\r
-                    get_bptime = EventMesh.publish("get_bp_time")#血压自动测试\r
-                    # print("get_bptime",get_bptime)\r
-                    if get_bptime != None:#血压时间不为0\r
-                        bp_on = int(get_bptime[0])\r
-                        bp_time = int(get_bptime[1])\r
-                        if bp_on != 0 and bp_time != 0:\r
-                            get_hr_state = EventMesh.publish("get_hr_state")\r
-                            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                            get_bp_state  = EventMesh.publish("get_bp_state")\r
-                            get_bg_state  = EventMesh.publish("get_bg_state")\r
-                            # print("state bg2",get_hr_state,get_spo2_state,get_bp_state,get_bg_state)\r
-                            \r
-                            if (get_hr_state == 0 and get_spo2_state == 0 and get_bg_state == 0) and (get_bp_state == 2 or get_bp_state == 0):#心率血压血氧不在测试就测试血糖自动测量\r
-                                if (time_tmp-self.bp_timeSecond) >= bp_time:#大于一个周期的时间,保存的时间戳时间 1678 0 1678 30 1678 \r
-                                    self.bp_timeSecond = time_tmp\r
-                                    self.bpauto_state = 0\r
-                                # print("time_tmp bp",time_tmp,self.bp_timeSecond,time_tmp-self.bp_timeSecond,self.bg_timer,self.bpauto_state)\r
-                                if (time_tmp - self.bp_timeSecond) == 0 and self.bpauto_state == 0:\r
-                                    self.bpauto_state = 1\r
-                                    EventMesh.debug_log("START_bp:auto")\r
-                                    EventMesh.txt_log("auto START_bp:1")\r
-                                    EventMesh.publish("set_bp_state",2)#2代表后台进入测试\r
-                                    # EventMesh.publish("set_hr_blood_led",1)\r
-                                    EventMesh.publish(constants.EVENT.START_HEART)\r
-                                    \r
-                                elif (time_tmp - self.bp_timeSecond) >= 60 and self.bpauto_state == 1 and get_bp_state == 2:\r
-                                    self.bpauto_state = 0\r
-                                    EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                                    blood_data = get_autoblood_value()\r
-                                    if blood_data == None:\r
-                                        blood_data[0] = 0\r
-                                        blood_data[1] = 0\r
-\r
-                                    max_value = blood_data[0]\r
-                                    min_value = blood_data[1]\r
-                                    if max_value != 0 and min_value != 0:\r
-                                        EventMesh.publish(constants.PROTOCOL.BLOOD_SEND,[max_value,min_value])\r
-                                    EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                    EventMesh.txt_log("auto stop_bp:1")\r
-                                    \r
-                            else:\r
-                                self.bpauto_state = 0\r
-                        else:\r
-                            self.bp_timeSecond = 0\r
-                            self.bpauto_state = 0\r
-                            bp_state = EventMesh.publish("get_bp_state")#心率\r
-                            if bp_state == 2:\r
-                                EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                                EventMesh.debug_log("bp stop debug3")\r
-                                EventMesh.txt_log("auto wear stop_bp:2 ")\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-\r
-\r
-\r
-                    bg_time = EventMesh.publish("get_bgauto_time")\r
-                    if bg_time != None:\r
-                    \r
-                        bg_btn = int(bg_time[0])\r
-                        bg_timer = int(bg_time[1]) \r
-                        # print("state bg2",self.bg_btn,self.bg_timer)\r
-                        if bg_btn >= 1 and bg_timer > 0:#开关打开并且时间大于0就可以测试血糖\r
-                            get_hr_state = EventMesh.publish("get_hr_state")\r
-                            get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                            get_bp_state  = EventMesh.publish("get_bp_state")\r
-                            get_bg_state  = EventMesh.publish("get_bg_state")\r
-                            # print("state bg2",get_hr_state,get_spo2_state,get_bp_state,get_bg_state)\r
-                            \r
-                            if (get_hr_state == 0 and get_spo2_state == 0 and get_bp_state == 0) and (get_bg_state == 2 or get_bg_state == 0):#心率血压血氧不在测试就测试血糖自动测量\r
-                                if (time_tmp-self.bg_timeSecond) >= bg_timer:#大于一个周期的时间,保存的时间戳时间 1678 0 1678 30 1678 \r
-                                    self.bg_timeSecond = time_tmp #1780 \r
-                                    self.BG_state = 0\r
-                                # print("time_tmp bg",time_tmp,self.bg_timeSecond,time_tmp-self.bg_timeSecond,bg_timer,self.BG_state)\r
-                                if (time_tmp - self.bg_timeSecond) == 0 and self.BG_state == 0:\r
-                                    EventMesh.debug_log("START_bg:1")\r
-                                    EventMesh.txt_log("auto START_bg:1")\r
-                                    EventMesh.publish("set_bg_state",2)#2代表后台进入测试\r
-                                    # EventMesh.publish("set_hr_blood_led",1)\r
-                                    EventMesh.publish(constants.EVENT.START_HEART)\r
-                                    self.BG_state = 1\r
-                                elif (time_tmp - self.bg_timeSecond) >= 60 and self.BG_state == 1 and get_bg_state == 2:\r
-                                    self.BG_state = 0\r
-                                    EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                                    # EventMesh.publish("stop_led_timer")#设置参数\r
-                                    EventMesh.txt_log("auto stop_bg:1")\r
-                                    EventMesh.debug_log("stop bgdebug3")\r
-                                    EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                                    bgdata = get_blood_sugar_value()\r
-                                    if bgdata == None:\r
-                                        bgdata = 0\r
-                                    if bgdata != 0:\r
-                                        EventMesh.debug_log("bgdata",bgdata)\r
-                                        EventMesh.publish(constants.PROTOCOL.BLOODGLUSOCE_SEND,bgdata)#上传心率数据\r
-                                    \r
-                            else:\r
-                                \r
-                                self.BG_state = 0\r
-                        else:\r
-                            bg_state  = EventMesh.publish("get_bg_state") \r
-                            if bg_state == 2:\r
-                                EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                                # EventMesh.publish("stop_led_timer")#设置参数\r
-                                EventMesh.debug_log("bg stop bgdebug3")\r
-                                EventMesh.txt_log("auto wear stop_bg:2 ")\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                            self.bg_timeSecond = 0\r
-                            self.BG_state = 0\r
-\r
-\r
-\r
-\r
-\r
-                else:\r
-                    self.old_temp_time = 0\r
-                    self.old_time = 0\r
-                    # self.hr_timeSecond = time_tmp\r
-                    self.HR_Onestate = 0\r
-                    self.HR_OneTime = 0\r
-                    self.HR_state = 0\r
-                    self.old_time = 0    \r
-                    self.old_bp_time = 0\r
-                    self.old_hr_time = 0\r
-                    self.old_spo2_time = 0\r
-                    self.set_hsenor_crt = 0\r
-                    self.old_bg_time = 0\r
-                    # self.bg_timeSecond = time_tmp\r
-                    self.BG_state = 0\r
-                    # self.temp_timeSecond = time_tmp\r
-\r
-                    # self.bp_timeSecond = time_tmp\r
-                    self.bpauto_state = 0\r
-\r
-                    # self.spo2_timeSecond = time_tmp\r
-                    self.spo2auto_state = 0\r
-\r
-                    self.temp_state = 0\r
-                    self.temp_one_state = 0\r
-\r
-\r
-            else:\r
-                self.old_temp_time = 0\r
-                self.old_time = 0\r
-                # self.hr_timeSecond = time_tmp\r
-                self.HR_Onestate = 0\r
-                self.HR_OneTime = 0\r
-                self.HR_state = 0\r
-                self.old_time = 0    \r
-                self.old_bp_time = 0\r
-                self.old_hr_time = 0\r
-                self.old_spo2_time = 0\r
-                self.set_hsenor_crt = 0\r
-                self.old_bg_time = 0\r
-                # self.bg_timeSecond = time_tmp\r
-\r
-                self.BG_state = 0\r
-                # self.temp_timeSecond = time_tmp\r
-\r
-                # self.bp_timeSecond = time_tmp\r
-                self.bpauto_state = 0\r
-\r
-                # self.spo2_timeSecond = time_tmp\r
-                self.spo2auto_state = 0\r
-\r
-                self.temp_state = 0\r
-                self.temp_one_state = 0\r
-\r
-                get_hr_state = EventMesh.publish("get_hr_state")\r
-                get_spo2_state = EventMesh.publish("get_spo2_state")\r
-                get_bp_state  = EventMesh.publish("get_bp_state")\r
-                get_bg_state  = EventMesh.publish("get_bg_state")\r
-                if get_hr_state != None and get_spo2_state != None and get_bp_state != None and get_bg_state != None:\r
-                    if get_hr_state > 1:\r
-                        EventMesh.txt_log("auto stop_hr:44")\r
-                        EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 \r
-                        # if get_hr_state == 3:\r
-                        #     EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.debug_log("stop debug8")\r
-                        if WEAR == 1:\r
-                            heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                            if heart_value >= 50 and heart_value != None:\r
-                                EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART) \r
-                    elif get_spo2_state > 1:\r
-                        EventMesh.txt_log("auto stop_spo2:44")\r
-                        EventMesh.publish("set_spo2_state",0)#2代表后台进入测试\r
-                        # if get_spo2_state == 3:\r
-                        #     EventMesh.publish("stop_led_timer")#设置参数\r
-                        if WEAR == 1:\r
-                            spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                            if spo2_value > 85 and spo2_value != None:\r
-                                EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                        EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                        EventMesh.debug_log("stop debug13")\r
-                    elif get_bp_state > 1:\r
-                        EventMesh.txt_log("auto stop_bp:44")\r
-                        EventMesh.publish("set_bp_state",0)#2代表后台进入测试\r
-                        # if get_bp_state == 3:\r
-                        #     EventMesh.publish("stop_led_timer")#设置参数\r
-                        if WEAR == 1:\r
-                            blood_data = get_autoblood_value()\r
-                            if blood_data == None:\r
-                                blood_data[0] = 0\r
-                                blood_data[1] = 0\r
-\r
-                            max_value = blood_data[0]\r
-                            min_value = blood_data[1]\r
-                            if max_value != 0 and min_value != 0:\r
-                                EventMesh.publish(constants.PROTOCOL.BLOOD_SEND,[max_value,min_value])\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                        EventMesh.debug_log("stop debug14")\r
-                    elif get_bg_state > 1:\r
-                        EventMesh.txt_log("auto stop_bg:44")\r
-                        EventMesh.publish("set_bg_state",0)#2代表后台进入测试\r
-                        # if get_bg_state == 3:\r
-                        #     EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                        if WEAR == 1:\r
-                            bgdata = get_blood_sugar_value()\r
-                            if bgdata == None:\r
-                                bgdata = 0\r
-                            if bgdata != 0:\r
-                                EventMesh.publish(constants.PROTOCOL.BLOODGLUSOCE_SEND,bgdata)#上传心率数据\r
-                        EventMesh.debug_log("stop debug15")\r
-                get_temp_state  = EventMesh.publish("get_temp_state")\r
-                if get_temp_state != None:\r
-                    if get_temp_state > 1:\r
-                        self.temp_one_state = 0\r
-                        self.temp_state = 0\r
-                        temp = EventMesh.publish(constants.EVENT.GET_TEMP)       \r
-                        temp = self.optimize_temp(temp)\r
-                        EventMesh.txt_log("auto stop_temp:44")\r
-                        EventMesh.publish("set_temp_state",0)\r
-                        if WEAR == 1:\r
-                            tmp_f_tmp = 0\r
-                            tmp_d_tmp = 0\r
-                            if str(temp).find(".") != -1:\r
-                                tmp_f = str(temp).split('.')[0] \r
-                                tmp_f_tmp = int(tmp_f)\r
-                                \r
-                                tmp_d = str(temp).split('.')[1][:1]\r
-                                tmp_d_tmp = int(tmp_d)\r
-                            else:\r
-                                tmp_f_tmp = temp\r
-                                \r
-                            if temp != None:\r
-                                if temp != 0:\r
-                                    EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])\r
-                        EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-\r
-\r
-            hr_state = EventMesh.publish("get_hr_state")\r
-            spo2_state = EventMesh.publish("get_spo2_state")\r
-            temp_state  = EventMesh.publish("get_temp_state")\r
-            if hr_state != None or spo2_state != None or temp_state != None:#手动测试\r
-                auto_hr = EventMesh.publish("get_start_measure_time")#设置开始测量的时间戳时间\r
-                if auto_hr == None:\r
-                    auto_hr = 0\r
-                if hr_state == 1:\r
-                    if auto_hr != 0:\r
-                        self.auto_hr_count+=1\r
-                        if  self.auto_hr_count > 6:\r
-                            self.auto_hr_count = 0\r
-                            EventMesh.publish("set_hr_state",0)#0代表g关闭测试\r
-                            EventMesh.debug_log("stop debug7")\r
-                            EventMesh.publish(constants.EVENT.STOP_HEART)\r
-                            heart_value = EventMesh.publish(constants.EVENT.GET_HEART)\r
-                            if heart_value >= 50 and heart_value != None:\r
-                                EventMesh.publish("play_hr_value",heart_value)\r
-                                # EventMesh.publish("set_history_hr_value",heart_value)\r
-                                EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据\r
-\r
-                                blood_data = get_autoblood_value()\r
-                                if blood_data == None:\r
-                                    blood_data[0] = 0\r
-                                    blood_data[1] = 0\r
-\r
-                                max_value = blood_data[0]\r
-                                min_value = blood_data[1]\r
-                                if max_value != 0 and min_value != 0:\r
-                                    EventMesh.publish(constants.PROTOCOL.BLOOD_SEND,[max_value,min_value])\r
-\r
-                            else:\r
-                                EventMesh.publish("play_hr_value",0) \r
-                        else :\r
-                            if WEAR != 1:\r
-                                EventMesh.publish("set_hr_state",0)#0代表g关闭测试\r
-                                EventMesh.debug_log("stop debug7")\r
-                                EventMesh.publish(constants.EVENT.STOP_HEART)                               \r
-                                EventMesh.publish("play_hr_value",0) \r
-                                \r
-                else:\r
-                    self.auto_hr_count = 0\r
-                    \r
-\r
-                auto_spo2 = EventMesh.publish("get_start_measure_time")#设置开始测量的时间戳时间\r
-                if auto_spo2 == None:\r
-                    auto_spo2 = 0\r
-                if spo2_state == 1:#手动测试血氧\r
-                    if auto_spo2 != None:\r
-                        if auto_spo2 != 0:\r
-                            self.auto_spo2_count+=1\r
-                            if self.auto_spo2_count > 6:\r
-                                self.auto_spo2_count = 0\r
-                                EventMesh.publish("set_spo2_state",0)#0代表g关闭测试\r
-                                EventMesh.debug_log("stop spo2 debug7")\r
-                                EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)\r
-                                spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)\r
-                                if spo2_value > 85 and spo2_value != None:\r
-                                    EventMesh.publish("play_spo2_value",spo2_value)\r
-                                    EventMesh.publish("set_old_spo2_data",spo2_value)\r
-                                    EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)\r
-                                else:\r
-                                    EventMesh.publish("play_spo2_value",0)\r
-                            \r
-                            else:\r
-                                if WEAR != 1:\r
-                                    EventMesh.publish("set_spo2_state",0)#0代表g关闭测试\r
-                                    EventMesh.debug_log("stop debug8")\r
-                                    EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)                               \r
-                                    EventMesh.publish("play_spo2_value",0) \r
-                                    \r
-                else:\r
-                    self.auto_spo2_count = 0\r
-\r
-                if temp_state == 1:#手动测试体温\r
-                    auto_temp = EventMesh.publish("get_start_temp_measure_time")#设置开始测量的时间戳时间\r
-                    if auto_temp == None:\r
-                        auto_temp = 0\r
-                    if auto_temp != None:\r
-                        if auto_temp != 0:\r
-                            self.auto_temp_count += 1\r
-                            if self.auto_temp_count > 6:\r
-                                self.auto_temp_count = 0\r
-                                EventMesh.debug_log("体温测量结束")\r
-                                temp = EventMesh.publish(constants.EVENT.GET_TEMP)       \r
-                                temp = self.optimize_temp(temp)\r
-                                EventMesh.debug_log("temp",temp)\r
-                                EventMesh.publish("set_temp_state",0)\r
-                                tmp_f_tmp = 0\r
-                                tmp_d_tmp = 0\r
-                                if str(temp).find(".") != -1:\r
-                                    tmp_f = str(temp).split('.')[0] \r
-                                    tmp_f_tmp = int(tmp_f)\r
-                                    \r
-                                    tmp_d = str(temp).split('.')[1][:1]\r
-                                    tmp_d_tmp = int(tmp_d)\r
-                                else:\r
-                                    tmp_f_tmp = temp\r
-                                    \r
-                                if temp != None:\r
-                                    if temp != 0:\r
-                                        # EventMesh.publish("set_history_temp_value",temp)\r
-                                        EventMesh.publish("play_temp_value",temp)#播放体温数值\r
-                                        EventMesh.publish(constants.PROTOCOL.TEMP_SEND,[tmp_f_tmp,tmp_d_tmp])\r
-                                    else:\r
-                                        # EventMesh.publish("set_history_temp_value",0)\r
-                                        EventMesh.publish("play_temp_value",0)#播放体温数值\r
-                                \r
-                                EventMesh.publish(constants.EVENT.STOP_TEMP)\r
-\r
-                            else :\r
-                                if WEAR  != 1:\r
-                                    EventMesh.publish("set_temp_state",0)#0代表g关闭测试\r
-                                    EventMesh.debug_log("stop debug9")\r
-                                    EventMesh.publish(constants.EVENT.STOP_TEMP)                               \r
-                                    EventMesh.publish("play_temp_value",0) \r
-                                    \r
-                else:\r
-                    self.auto_temp_count = 0\r
-\r
-            EventMesh.publish("play_unread_wechat_infor")#每10s检测是否有未读语音数据\r
-\r
-            usb_state = EventMesh.publish("get_usb")#\r
-            \r
-            # EventMesh.publish("set_led_time_arg",[1,2,20*11,led_mode.FLASH_LIGHT_RED,20,10,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-            if battery[0] == '1':\r
-                # EventMesh.debug_log("battery[1]",battery[1])\r
-                if self.vbat_full_flag <= 120:\r
-                    self.vbat_full_flag+=10\r
-                    if self.vbat_full_flag == 60:#开机检测一次如果是充电标识为1就不再提示\r
-                        if usb_state != 1:\r
-                            EventMesh.publish("set_usb",1)#\r
-                else:\r
-                    if battery[1] >= 100:\r
-                        if self.charge_full_count == 0:#充电已满\r
-                            EventMesh.publish("set_usb",3)#\r
-                            EventMesh.debug_log("charge R_CHARGE_full")\r
-                            self.charge_full_count = 1\r
-                    \r
-            else:\r
-                self.charge_full_count = 0\r
-                low_power = battery[1]\r
-                if low_power <= 5:#小于5%红色灯慢闪\r
-                    EventMesh.publish("set_led_time_arg",[1,2,20*11,led_mode.FLASH_LIGHT_RED,20,10,led_mode.OTHER_MEASURE_MODE])#測量成功\r
-                    # EventMesh.publish("set_led_time_arg",[1000,400,52,led_mode.FLASH_LIGHT_RED,led_mode.DEFAULT_LONG_LIGHT_MODE,led_mode.OTHER_MEASURE_MODE])#開始測量\r
-\r
-            \r
-            self.normal_alarm()\r
-            #喝水提醒\r
-            self.drink_alarm()\r
-            #该吃药了\r
-            self.medicine_alarm()\r
-            #该起床了\r
-            self.wakeup_alarm()\r
-            #该睡觉了\r
-            self.sleep_alarm()\r
-            #该回家了\r
-            self.home_alarm()\r
-            #该休息了\r
-            self.reset_alarm()\r
-\r
-\r
-            if self.alarm_flag == 0:\r
-                self.alarm_flag = 1\r
-                EventMesh.publish("set_rtc_alarm")\r
-\r
-            EventMesh.publish("video_no_network")\r
-\r
-        def clear_usb_flag(self,event,msg):\r
-            self.charge_full_count = 0\r
-        #普通闹钟\r
-        def normal_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.normal_oldtotalmin",self.normal_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.normal_oldtotalmin == 0:\r
-                self.normal_oldtotalmin = cur_total_min #549\r
-            if self.normal_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.normal_flag == 1:\r
-                    self.normal_flag = 0\r
-                    self.normal_count = 0\r
-            normal_alarm = []\r
-            normal_alarm = EventMesh.publish("get_storage_config","normal_alarm")\r
-            # EventMesh.debug_log("sleep info2",sleep,cur_total_min)\r
-            if self.normal_flag == 1:#表示闹钟响过清除标志\r
-                self.normal_count+=1\r
-                if self.normal_count > 6:\r
-                    self.normal_count = 0\r
-                    self.normal_flag = 0\r
-            if normal_alarm != None:\r
-                if len(normal_alarm) != 0 and normal_alarm != []:\r
-                    j = 0\r
-                    for i in range(len(normal_alarm)):\r
-                        # EventMesh.debug_log("normal_alarm normal_alarm 33",normal_alarm,j)\r
-                        normalalarm_hour = normal_alarm[j]["hour"]\r
-                        normalalarm_min = normal_alarm[j]["min"]\r
-                        normalalarm_day = normal_alarm[j]["day"]\r
-                        normalalarm_enale = normal_alarm[j]["enable"]\r
-                        normalalarm_totalmin = int(normalalarm_hour)*60+int(normalalarm_min)\r
-                        # EventMesh.debug_log("wake alarm",normalalarm_hour,sleep_min,sleep_day,sleep_enale,sleep_totalmin,week)\r
-                        if normalalarm_day == []:#单次闹钟只响一次\r
-                            if normalalarm_enale != 0:\r
-                                if cur_total_min > normalalarm_totalmin:\r
-                                    normal_alarm.pop(j)\r
-                                    self.normal_count = 0\r
-                                    self.normal_flag  = 0 \r
-                                    j=0\r
-                                    # EventMesh.debug_log("wakeup wakeup dayu",sleep,j)\r
-                                    EventMesh.publish("set_storage_config",["normal_alarm",normal_alarm])#删除之后重新保存\r
-                                    # sleep = EventMesh.publish("get_storage_config","sleep_alarm")#删除之后重新保存\r
-                                    continue\r
-                                else:\r
-                                    if normalalarm_totalmin == cur_total_min and self.normal_flag == 0:#14:00\r
-                                        self.normal_count = 0\r
-                                        self.normal_flag  = 0    \r
-                                        normal_alarm.pop(j)\r
-                                        # EventMesh.debug_log("wakeup wakeup1",sleep,j)\r
-                                        EventMesh.publish("set_storage_config",["normal_alarm",normal_alarm])#删除之后重新保存\r
-                                        EventMesh.publish("OPEN_ALARM_RING")                                                                                                                                            \r
-                                        break\r
-                        else:\r
-                            if normalalarm_enale != 0 and (week in normalalarm_day):#记录响过的时间分钟数\r
-                                if normalalarm_totalmin == cur_total_min and self.normal_flag == 0:#14:00\r
-                                    self.normal_flag  = 1\r
-                                    self.normal_count = 0\r
-                                    self.normal_oldtotalmin = normalalarm_totalmin\r
-                                    EventMesh.publish("OPEN_ALARM_RING")#                                                                                                                                                  \r
-                                    break\r
-                        j+=1\r
-\r
-\r
-        #喝水提醒\r
-        def drink_alarm(self):\r
-            date_tmp = utime.localtime()\r
-            time_tmp = utime.mktime(date_tmp)\r
-        \r
-            if self.drink_time == 0:\r
-                self.drink_time = time_tmp\r
-            \r
-            on = EventMesh.publish("get_storage_config","drink_on")\r
-            time = EventMesh.publish("get_storage_config","drink_time")\r
-            # print("drink info2",on,time)\r
-            if on != None and time != None:\r
-                if on != 0 and time != 0:\r
-                    if (time_tmp - self.drink_time) >= (time*60*60):#需要转换成小时3600\r
-                        self.drink_time = time_tmp \r
-                        EventMesh.publish("drink_alarm_event")#该喝水了\r
-                        #该喝水了\r
-                else:\r
-                    self.drink_time = 0\r
-            else:\r
-                self.drink_time = 0\r
-\r
-        #吃药提醒\r
-        def medicine_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # print("self.medicine_oldtotalmin",self.medicine_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.medicine_oldtotalmin == 0:\r
-                self.medicine_oldtotalmin = cur_total_min #549\r
-            if self.medicine_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.medicine_flag == 1:\r
-                    self.medicine_flag = 0\r
-                    self.medicine_count = 0\r
-            medicine = EventMesh.publish("get_storage_config","medicine")\r
-            # print("medicine info2",medicine,cur_total_min)\r
-            if self.medicine_flag == 1:#表示闹钟响过清除标志\r
-                self.medicine_count+=1\r
-                if self.medicine_count > 6:\r
-                    self.medicine_count = 0\r
-                    self.medicine_flag = 0\r
-            if medicine != None:\r
-                if len(medicine) != 0 and medicine != []:\r
-                    for i in range(len(medicine)):\r
-                        medicine_hour = medicine[i]["hour"]\r
-                        medicine_min = medicine[i]["min"]\r
-                        medicine_day = medicine[i]["day"]\r
-                        medicine_enale = medicine[i]["enable"]\r
-                        medicine_totalmin = int(medicine_hour)*60+int(medicine_min)\r
-                        # print("medicine alarm",medicine_hour,medicine_min,medicine_day,medicine_enale,medicine_totalmin,week)\r
-                        if medicine_day == []:\r
-                            if medicine_enale != 0:\r
-                                if medicine_totalmin == cur_total_min and self.medicine_flag == 0:#14:00\r
-                                    self.medicine_count = 0\r
-                                    self.medicine_flag  = 1    \r
-                                    self.medicine_oldtotalmin = medicine_totalmin#记录响过的时间分钟数\r
-                                    # print("medicine alarm1")\r
-                                    EventMesh.publish("medicine_alarm_event")#该吃药了                                                                                                                                              \r
-                                    break\r
-                        else:\r
-                            if medicine_enale != 0 and (week in medicine_day):#记录响过的时间分钟数\r
-                                if medicine_totalmin == cur_total_min and self.medicine_flag == 0:#14:00\r
-                                    self.medicine_flag  = 1\r
-                                    self.medicine_count = 0\r
-                                    self.medicine_oldtotalmin = medicine_totalmin\r
-                                    # print("medicine alarm2",)\r
-                                    EventMesh.publish("medicine_alarm_event")#该吃药了                                                                                                                                                   \r
-                                    break\r
-        #该起床了\r
-        def wakeup_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.wakeup_oldtotalmin",self.wakeup_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.wakeup_oldtotalmin == 0:\r
-                self.wakeup_oldtotalmin = cur_total_min #549\r
-            if self.wakeup_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.wakeup_flag == 1:\r
-                    self.wakeup_flag = 0\r
-                    self.wakeup_count = 0\r
-            wakeup = []\r
-            wakeup = EventMesh.publish("get_storage_config","wakeup_alarm")\r
-            # EventMesh.debug_log("wakeup info2",wakeup,cur_total_min)\r
-            if self.wakeup_flag == 1:#表示闹钟响过清除标志\r
-                self.wakeup_count+=1\r
-                if self.wakeup_count > 6:\r
-                    self.wakeup_count = 0\r
-                    self.wakeup_flag = 0\r
-            if wakeup != None:\r
-                if len(wakeup) != 0 and wakeup != []:\r
-                    j = 0\r
-                    for i in range(len(wakeup)):\r
-                        wakeup_hour = wakeup[j]["hour"]\r
-                        wakeup_min = wakeup[j]["min"]\r
-                        wakeup_day = wakeup[j]["day"]\r
-                        wakeup_enale = wakeup[j]["enable"]\r
-                        wakeup_totalmin = int(wakeup_hour)*60+int(wakeup_min)\r
-                        # EventMesh.debug_log("wake alarm",wakeup_hour,wakeup_min,wakeup_day,wakeup_enale,wakeup_totalmin,week)\r
-                        if wakeup_day == []:#单次闹钟只响一次\r
-                            if wakeup_enale != 0:\r
-                                if cur_total_min > wakeup_totalmin:\r
-                                    self.wakeup_count = 0\r
-                                    self.wakeup_flag  = 0    \r
-                                    wakeup.pop(j)\r
-                                    j=0#每次删除都从0开始遍历\r
-                                    # EventMesh.debug_log("wakeup wakeup1 dayu",wakeup,j)\r
-                                    EventMesh.publish("set_storage_config",["wakeup_alarm",wakeup])\r
-                                    continue\r
-                                else:\r
-                                    if wakeup_totalmin == cur_total_min and self.wakeup_flag == 0:#14:00\r
-                                        self.wakeup_count = 0\r
-                                        self.wakeup_flag  = 0    \r
-                                        wakeup.pop(j)\r
-                                        EventMesh.debug_log("wakeup wakeup1",wakeup,j)\r
-                                        EventMesh.publish("set_storage_config",["wakeup_alarm",wakeup])\r
-                                        EventMesh.publish("wakeup_alarm_event")#该吃药了                                                                                                                                              \r
-                                        break\r
-                        else:\r
-                            if wakeup_enale != 0 and (week in wakeup_day):#记录响过的时间分钟数\r
-                                if wakeup_totalmin == cur_total_min and self.wakeup_flag == 0:#14:00\r
-                                    self.wakeup_flag  = 1\r
-                                    self.wakeup_count = 0\r
-                                    self.wakeup_oldtotalmin = wakeup_totalmin\r
-                                    EventMesh.publish("wakeup_alarm_event")#该吃药了                                                                                                                                                   \r
-                                    break\r
-                        j+=1\r
-\r
-\r
-        #该睡觉了\r
-        def sleep_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.sleep_oldtotalmin",self.sleep_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.sleep_oldtotalmin == 0:\r
-                self.sleep_oldtotalmin = cur_total_min #549\r
-            if self.sleep_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.sleep_flag == 1:\r
-                    self.sleep_flag = 0\r
-                    self.sleep_count = 0\r
-            sleep = []\r
-            sleep = EventMesh.publish("get_storage_config","sleep_alarm")\r
-            # EventMesh.debug_log("sleep info2",sleep,cur_total_min)\r
-            if self.sleep_flag == 1:#表示闹钟响过清除标志\r
-                self.sleep_count+=1\r
-                if self.sleep_count > 6:\r
-                    self.sleep_count = 0\r
-                    self.sleep_flag = 0\r
-            if sleep != None:\r
-                if len(sleep) != 0 and sleep != []:\r
-                    j = 0\r
-                    count = int(len(sleep))\r
-                    for i in range(len(sleep)):\r
-                        # EventMesh.debug_log("wakeup wakeup 33",sleep,j)\r
-                        sleep_hour = sleep[j]["hour"]\r
-                        sleep_min = sleep[j]["min"]\r
-                        sleep_day = sleep[j]["day"]\r
-                        sleep_enale = sleep[j]["enable"]\r
-                        sleep_totalmin = int(sleep_hour)*60+int(sleep_min)\r
-                        # EventMesh.debug_log("wake alarm",sleep_hour,sleep_min,sleep_day,sleep_enale,sleep_totalmin,week)\r
-                        if sleep_day == []:#单次闹钟只响一次\r
-                            if sleep_enale != 0:\r
-                                if cur_total_min > sleep_totalmin:\r
-                                    sleep.pop(j)\r
-                                    self.sleep_count = 0\r
-                                    self.sleep_flag  = 0 \r
-                                    j=0\r
-                                    # EventMesh.debug_log("wakeup wakeup dayu",sleep,j)\r
-                                    EventMesh.publish("set_storage_config",["sleep_alarm",sleep])#删除之后重新保存\r
-                                    # sleep = EventMesh.publish("get_storage_config","sleep_alarm")#删除之后重新保存\r
-                                    continue\r
-                                else:\r
-                                    if sleep_totalmin == cur_total_min and self.sleep_flag == 0:#14:00\r
-                                        self.sleep_count = 0\r
-                                        self.sleep_flag  = 0    \r
-                                        sleep.pop(j)\r
-                                        # EventMesh.debug_log("wakeup wakeup1",sleep,j)\r
-                                        EventMesh.publish("set_storage_config",["sleep_alarm",sleep])#删除之后重新保存\r
-                                        EventMesh.publish("sleep_alarm_event")#该吃药了                                                                                                                                              \r
-                                        break\r
-                        else:\r
-                            if sleep_enale != 0 and (week in sleep_day):#记录响过的时间分钟数\r
-                                if sleep_totalmin == cur_total_min and self.sleep_flag == 0:#14:00\r
-                                    self.sleep_flag  = 1\r
-                                    self.sleep_count = 0\r
-                                    self.sleep_oldtotalmin = sleep_totalmin\r
-                                    EventMesh.publish("sleep_alarm_event")#该吃药了                                                                                                                                                   \r
-                                    break\r
-                        j+=1\r
-\r
-\r
-        #该回家了\r
-        def home_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.home_oldtotalmin",self.home_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.home_oldtotalmin == 0:\r
-                self.home_oldtotalmin = cur_total_min #549\r
-            if self.home_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.home_flag == 1:\r
-                    self.home_flag = 0\r
-                    self.home_count = 0\r
-            home = ''\r
-            home = EventMesh.publish("get_storage_config","home_alarm")\r
-            # EventMesh.debug_log("sleep info2",sleep,cur_total_min)\r
-            if self.home_flag == 1:#表示闹钟响过清除标志\r
-                self.home_count+=1\r
-                if self.home_count > 6:\r
-                    self.home_count = 0\r
-                    self.home_flag = 0\r
-            if home != None:\r
-                if len(str(home)) != 0 and str(home) != '':\r
-                    # EventMesh.debug_log("home home 33",home)\r
-                    home_hour = int(str(home).split(":")[0])\r
-                    home_min = int(str(home).split(":")[1])\r
-                    \r
-                    home_totalmin = int(home_hour)*60+int(home_min)\r
-                    if home_totalmin == cur_total_min and self.home_flag == 0:#14:00\r
-                        self.home_flag  = 1\r
-                        self.home_count = 0\r
-                        self.home_oldtotalmin = home_totalmin\r
-                        EventMesh.publish("home_alarm_event")#该回家了                                                                                                                                                   \r
-\r
-\r
-        \r
-        #该休息了\r
-        def reset_alarm(self):\r
-            data = RTC().datetime()\r
-            hour = data[4]\r
-            min = data[5]\r
-\r
-            week = int(data[3])\r
-\r
-            date1 = data[1]\r
-            date2 = data[2]\r
-            cur_total_min = int(hour)*60+int(min)\r
-            # EventMesh.debug_log("self.reset_oldtotalmin",self.reset_oldtotalmin,cur_total_min,self.alarm_flag)\r
-            if self.reset_oldtotalmin == 0:\r
-                self.reset_oldtotalmin = cur_total_min #549\r
-            if self.reset_oldtotalmin != cur_total_min: #上次响过的闹钟分钟数不等于当前的分钟数据需要清零否则下一个不会响铃\r
-                if self.reset_flag == 1:\r
-                    self.reset_flag = 0\r
-                    self.reset_count = 0\r
-            reset_alarm = []\r
-            reset_alarm = EventMesh.publish("get_storage_config","reset_alarm")\r
-            # EventMesh.debug_log("reset_alarm info2",len(reset_alarm),cur_total_min)\r
-            if self.reset_flag == 1:#表示闹钟响过清除标志\r
-                self.reset_count+=1\r
-                if self.reset_count > 6:\r
-                    self.reset_count = 0\r
-                    self.reset_flag = 0\r
-            if reset_alarm != None:\r
-                if len(str(reset_alarm)) != 0 and str(reset_alarm) != []:\r
-                    for i in range(len(reset_alarm)):\r
-                        # print("i",i)\r
-                        start_hour = int(reset_alarm[i]["start_hour"])\r
-                        start_min = int(reset_alarm[i]["start_min"])\r
-\r
-                        end_hour = int(reset_alarm[i]["end_hour"])\r
-                        end_min = int(reset_alarm[i]["end_min"])\r
-\r
-                        # EventMesh.debug_log("reset_alarm home 33",reset_alarm)\r
-                        \r
-                        start_totalmin = int(start_hour)*60+int(start_min)\r
-                        end_totalmin = int(end_hour)*60+int(end_min)\r
-\r
-                        if start_totalmin == cur_total_min and self.reset_flag == 0:#14:00\r
-                            self.reset_flag  = 1\r
-                            self.reset_count = 0\r
-                            self.reset_oldtotalmin = start_totalmin\r
-                            EventMesh.publish("reset_alarm_event")#该休息了     \r
-                            break\r
-\r
-                        if end_totalmin == cur_total_min and self.reset_flag == 0:\r
-                            self.reset_flag  = 1\r
-                            self.reset_count = 0\r
-                            self.reset_oldtotalmin = end_totalmin\r
-                            EventMesh.publish("reset_end_alarm_event")#休息结束了     \r
-                            break\r
-                                                                                                                                                                    \r
-\r
-        def clear_normal_alarm(self,event,msg):#普通闹钟清除标志\r
-            self.normal_flag = 0\r
-            self.normal_count = 0\r
-            self.normal_oldtotalmin = 0\r
-\r
-        def clear_reset_alarm(self,event,msg):#休息清除标志\r
-            self.reset_flag = 0\r
-            self.reset_count = 0\r
-            self.reset_oldtotalmin = 0\r
-\r
-        def clear_home_alarm(self,event,msg):#回家清除标志\r
-            self.home_flag = 0\r
-            self.home_count = 0\r
-            self.home_oldtotalmin = 0\r
-\r
-\r
-        def clear_medicine_alarm(self,event,msg):#吃药清除标志\r
-            self.medicine_count = 0\r
-            self.medicine_flag  = 0\r
-            self.medicine_oldtotalmin = 0\r
-        \r
-\r
-        def clear_wakeup_alarm(self,event,msg):#起床标识\r
-            self.wakeup_flag = 0\r
-            self.wakeup_count = 0\r
-            self.wakeup_oldtotalmin = 0\r
-\r
-        def clear_sleep_alarm(self,event,msg):#睡觉标识\r
-\r
-            self.sleep_flag = 0\r
-            self.sleep_count = 0\r
-            self.sleep_oldtotalmin = 0\r
-\r
-            \r
-\r
-\r
-        def get_sim_Status(self, event, msg):\r
-            return sim.getStatus()\r
-        def get_device_ope(self, event, msg):\r
-            """\r
-            获取设备运营商信息\r
-            :param event:\r
-            :param msg:\r
-            :return: 运营商\r
-            """\r
-            net_ope_map = {\r
-                "UNICOM": "中国联通HD",\r
-                "CMCC": "中国移动HD",\r
-                "CT": "中国电信HD"\r
-            }\r
-            """获取运营商"""\r
-            try:\r
-                short_eons = net.operatorName()[1]\r
-            except Exception:\r
-                return "无"\r
-            return net_ope_map.get(short_eons, None)\r
-\r
-        def get_signal(self, event=None, msg=None):\r
-            """\r
-            获取信号事件\r
-            :param event:\r
-            :param msg:\r
-            :return: int 类型\r
-            """\r
-            return net.csqQueryPoll()\r
-\r
-        def get_time_bucket(self, time):\r
-            if time < 12:\r
-                return '上午'\r
-            else:\r
-                return '下午'\r
-\r
-        def get_week(self, week):\r
-            if week == 1:\r
-                return '一'\r
-            elif week == 2:\r
-                return '二'\r
-            elif week == 3:\r
-                return '三'\r
-            elif week == 4:\r
-                return '四'\r
-            elif week == 5:\r
-                return '五'\r
-            elif week == 6:\r
-                return '六'\r
-            elif week == 7 or week == 0:\r
-                return '日'\r
-\r
-        def get_time(self, event=None, msg=None):\r
-            """\r
-            获取时间事件\r
-            :param event:\r
-            :param msg:\r
-            :return: HH:MM 格式\r
-            """\r
-            rtc_time = self.rtc.datetime()\r
-            \r
-            date = ("%d月%d日" % (rtc_time[1], rtc_time[2]))\r
-            year = ("%04d年" % (rtc_time[0]))\r
-            week = ("星期%s"%(self.get_week(rtc_time[3])))\r
-            week_data = rtc_time[3]\r
-            time = [rtc_time[4], rtc_time[5]]\r
-            time_quantum = ("%s" % (self.get_time_bucket(rtc_time[4])))\r
-            \r
-            result = [time, time_quantum, date , week,year,week_data]\r
-            #时分,上午下午,日期,星期,年 星期\r
-            return result\r
-\r
-        def get_step_count(self, event=None, msg=None):\r
-            """\r
-            获取步数\r
-            """\r
-            # print("11111:{}".format(EventMesh.publish("get_storage_config","clear_state3")))\r
-\r
-            tmp = 0\r
-            step =[0,0,0,0]\r
-\r
-            # EventMesh.debug_log("x:%d,y:%d,z:%d tmp %d",XYZ[0],XYZ[1],XYZ[2],tmp)\r
-            step[0]= tmp \r
-            step[1] = 0\r
-            step[2] = 1\r
-            step[3] = 2\r
-            # print("1222:{}".format(EventMesh.publish("get_storage_config","clear_state3")))\r
-            return step\r
-\r
-        def get_ic_cid(self, event, msg):\r
-            """\r
-            获取ic cid事件\r
-            :param event:\r
-            :param msg:\r
-            :return: str ic cid\r
-            """\r
-            return sim.getIccid()\r
-\r
-        def get_phone_num(self, event, msg):\r
-            """\r
-            获取电话号码事件\r
-            :param event:\r
-            :param msg:\r
-            :return: str number\r
-            """\r
-            return sim.getPhoneNumber()\r
-\r
-        def get_battery(self, event=None, msg=None):\r
-            """\r
-            获取电池事件,暂时没支持\r
-            :param event:\r
-            :param msg:\r
-            :return:\r
-            """\r
-\r
-            charge_state = '0'\r
-            if self.get_usb_state() == 1:\r
-                charge_state = '1'\r
-            else:\r
-                charge_state = '0'\r
-\r
-            #temp = Power.getVbatt()\r
-            temp = EventMesh.publish("get_curr_battery_level")\r
-            vbat = EventMesh.publish("get_battery",temp)\r
-            if vbat == None:\r
-                vbat = 100\r
-            # EventMesh.debug_log("vbat",vbat)\r
-            # if temp != None :\r
-            #     if temp <= 3505:\r
-            #         vbat = 0 \r
-            #     elif temp <= 3699:\r
-            #         vbat = 20 #"E:/vbat_20.jpg"\r
-            #     elif temp <= 3772:\r
-            #         vbat = 40 #"E:/vbat_40.jpg"\r
-            #     elif temp <= 3882:\r
-            #         vbat = 60 #"E:/vbat_60.jpg"\r
-            #     elif temp <= 4070:\r
-            #         vbat = 80 #"E:/vbat_80.jpg"\r
-            #     elif temp <= 4200:\r
-            #         vbat = 90 #\r
-            #     else:\r
-            #         vbat = 100 #"E:/vbat_100.jpg"\r
-            # else:\r
-            #     vbat = 100\r
-\r
-            result = [charge_state, vbat]\r
-\r
-            return result\r
-        #Set the current average battery level\r
-        def set_curr_battery_level(self, event=None, msg=None):\r
-            self.curr_battery_level = msg\r
-        \r
-        def get_curr_battery_level(self, event=None, msg=None):\r
-            return self.curr_battery_level\r
-\r
-        def get_device_fw_version(self, *args):\r
-            '''\r
-            获取设备固件版本号\r
-            '''\r
-            fw_version = modem.getDevFwVersion()\r
-            if isinstance(fw_version, str):\r
-                return fw_version\r
-            return "--"\r
-\r
-        def get_standby_time(self, *args):\r
-            '''\r
-            获取设备单次开机待机时间\r
-            '''\r
-            time_msg = utime.time()\r
-            d = int(\r
-                time_msg / 86400)  # The int call removes the decimals.  Conveniently, it always rounds down.  int(2.9) returns 2 instead of 3, for example.\r
-            time_msg -= (\r
-                    d * 86400)  # This updates the value of x to show that the already counted seconds won't be double counted or anything.\r
-            h = int(time_msg / 3600)\r
-            time_msg -= (h * 3600)\r
-            m = int(time_msg / 60)\r
-            time_msg -= (m * 60)\r
-            s = time_msg\r
-            result = "{}天{}小时{}分".format(d, h, m)\r
-            return result\r
-\r
-        def set_key(self, topic, msg):\r
-            self.key = msg["value"]\r
-        def get_key(self, topic, msg):\r
-            return self.key\r
-\r
-        def get_imei(self, topic, msg):\r
-            if not self.imei:\r
-                self.imei = modem.getDevImei()\r
-            # self.imei = "876226002021444"#视频通话测试账号\r
-            # self.imei = "826226524724963"#视频通话测试账号\r
-            # self.imei = "860132060128634" #860132060128634\r
-            return self.imei\r
-\r
-        def get_cid(self, topic, msg):\r
-            return self.cid\r
-\r
-        def set_cid(self, topic, msg):\r
-            self.cid = msg["value"]\r
-\r
-        def get_imsi(self, topic, msg):\r
-            if not self.imei:\r
-                self.imei = sim.getImsi()\r
-            return self.imsi\r
-\r
-        def get_password(self, topic, msg):\r
-            return self.password\r
-\r
-        def set_password(self, topic, msg):\r
-            self.password = msg["value"]\r
-\r
-        def set_ping(self, topic, msg):\r
-            self.PING = msg\r
-        def get_ping(self, topic, msg):\r
-            return self.PING\r
-\r
-        def set_connect(self, topic, msg):\r
-            #EventMesh.debug_log("set_connect:{}".format(msg))\r
-            self.connect = msg\r
-        def get_connect(self, topic, msg):\r
-            return self.connect\r
-\r
-        def start_blood_oxygen(self, topic, msg):\r
-            EventMesh.debug_log("start_blood_oxygen!!!")\r
-\r
-\r
-        def start_heart(self, topic, msg):\r
-            EventMesh.debug_log("start_heart!!!")\r
-\r
-\r
-        def stop_blood_oxygen(self, topic, msg):\r
-            EventMesh.debug_log("stop_blood_oxygen!!!")\r
-\r
-\r
-        def stop_heart(self, topic, msg):\r
-            EventMesh.debug_log("stop_heart!!!")\r
-\r
-\r
-        def get_blood_oxygen(self, topic, msg):\r
-\r
-            return 0\r
-\r
-        def get_heart(self, topic, msg):\r
-\r
-            return 0\r
-        \r
-        def get_wear(self, topic, msg):\r
-            return 0\r
-        \r
-        def get_Hsensor(self, topic, msg):\r
-            return 0\r
-        \r
-        def Hsensor_set_sleep(self, topic, msg):\r
-            pass\r
-\r
-        def start_temp(self, topic, msg):\r
-            EventMesh.debug_log("start_temp!!!!!!!")\r
-            WHO_AM_I = bytearray([0x01, 0])\r
-            I2C_SLAVE_ADDR = 0x49\r
-            #I2C_SLAVE_ADDR = 0x48\r
-            r_data = bytearray(2)\r
-            data = bytearray([0x61A0, 0])   # 唤醒\r
-            return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)\r
-        def stop_temp(self, topic, msg):\r
-            EventMesh.debug_log("stop_temp!!!!!!!")\r
-            WHO_AM_I = bytearray([0x01, 0])\r
-            I2C_SLAVE_ADDR = 0x49\r
-            #I2C_SLAVE_ADDR = 0x48\r
-            r_data = bytearray(2)\r
-            data = bytearray([0x60A0, 0])   #休眠\r
-            return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)\r
-            \r
-        def get_temp(self, topic, msg):\r
-            WHO_AM_I = bytearray([0x00, 0])\r
-            I2C_SLAVE_ADDR = 0x49\r
-            #I2C_SLAVE_ADDR = 0x48\r
-            r_data = bytearray(2)\r
-            self.i2c0.read(I2C_SLAVE_ADDR, WHO_AM_I, 1, r_data, 2, 0)\r
-            #EventMesh.debug_log("temp_data:{}".format(r_data))\r
-            temp_s = ((r_data[0]<<8) | (r_data[1]))>>4\r
-            #EventMesh.debug_log("temp_s:{}".format(temp_s))\r
-            temp_data = temp_s * 0.0625\r
-            EventMesh.debug_log("temp_data:{}".format(temp_data))\r
-            return temp_data\r
-    \r
-                \r
-\r
-        def sim_slot_get(self, topic=None, msg=None):\r
-            return sim.getCurSimid()\r
-\r
-        def sim_slot_switch(self, topic=None, slot=None):\r
-            """\r
-            sim 卡槽切换\r
-            :param topic:\r
-            :param slot:\r
-            :return: 切换sim卡卡槽  0 切换成功, 1 无需切换, -1 切换失败\r
-            """\r
-            if self.sim_slot_get() == slot:\r
-                return 1\r
-            else:\r
-                return sim.switchCard(slot)\r
-\r
-        def usb_event_cb(self, state):\r
-            status = state\r
-\r
-            if status == 1:#插入USB\r
-                EventMesh.debug_log("charge R_CHARGE_in")\r
-                EventMesh.publish("clear_usb_flag")\r
-                EventMesh.publish("set_usb", 1)#\r
-                pass\r
-            elif status == 0:#拨出usbs\r
-                EventMesh.publish("clear_usb_flag")\r
-                EventMesh.publish("set_usb", 2)#\r
-                EventMesh.debug_log("charge R_CHARGE_out")\r
-\r
-                \r
-                \r
-\r
-        \r
-\r
-        def get_usb_state(self):\r
-            state = self.usb.getStatus()\r
-            if state == -1:\r
-                state = 0\r
-            return state\r
-        \r
-\r
-    def wifiScan_cb(args):\r
-            EventMesh.publish(constants.EVENT.WIFIINFO, args)\r
-            wifiScan.control(0)\r
-\r
-    class LocationManager(Abstract):\r
-\r
-        def __init__(self):\r
-            self.gps = None\r
-            #self.match = GPSMatch()\r
-            self.timer_read_GPS_info = osTimer()\r
-            self.wifi_data = []\r
-            self.gps_data  = {}\r
-            self.cell_data = []\r
-            self.location_timer_count = 0\r
-            self.location_check_data_timer_count = 0\r
-            self.GGA_count = 0\r
-            self.RMC_A_count = 0\r
-            self.location_type = 0 #定位类型,0:正常定位,有gps数据或60秒关闭;1:测试模式,只有发CLOSE_LOCATION消息才关闭\r
-            self.location_flag = 0\r
-            self.start_location_flag = 0\r
-            self.location_thread_id  = 0\r
-            self.location_queue = Queue(100)\r
-            self.lpm_fd = None\r
-            self.start_agps = 0\r
-            read_data = EventMesh.publish("get_storage_config","isOpenGNSS")#获取是否打开GNSS\r
-            if read_data != None:\r
-                self.isOpenGNSS = read_data\r
-            else:#默认关闭GNSS\r
-                self.isOpenGNSS = "1"\r
-                EventMesh.publish("set_storage_config",["isOpenGNSS",self.isOpenGNSS])\r
-\r
-            self.isOpenGNSS = EventMesh.publish("get_storage_config","isOpenGNSS")\r
-            if self.isOpenGNSS == None:\r
-                self.isOpenGNSS = "1"\r
-            if self.isOpenGNSS == "1":\r
-                if quecgnss.init() == -1:\r
-                    self.isOpenGNSS = "0"\r
-                    EventMesh.publish("set_storage_config",["isOpenGNSS",self.isOpenGNSS])\r
-                else:\r
-                    quecgnss.gnssEnable(0)\r
-        @staticmethod\r
-        def get_date():\r
-            return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])\r
-\r
-        @staticmethod\r
-        def get_time():\r
-            return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])\r
-\r
-        def post_processor_after_instantiation(self):\r
-            # _gps_cfg = {\r
-            #     "UARTn": UART.UART1,\r
-            #     "buadrate": 115200,\r
-            #     "databits": 8,\r
-            #     "parity": 0,\r
-            #     "stopbits": 1,\r
-            #     "flowctl": 0,\r
-            #     "PowerPin": Pin.GPIO2,\r
-            #     "StandbyPin": Pin.GPIO3,\r
-            #     "BackupPin": None,\r
-            #     "gps_mode": 0x01,\r
-            # }\r
-            # self.gps = GPS(**_gps_cfg)\r
-            # self.gps.power_switch(0)#关闭GPS\r
-            EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)\r
-            EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)\r
-            EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)\r
-            EventMesh.subscribe(constants.EVENT.START_LOCATION_TEST, self.start_location_test)\r
-            EventMesh.subscribe(constants.EVENT.WIFIINFO, self.WIFI_INFO)\r
-            EventMesh.subscribe(constants.EVENT.WIFISCANOPEN,self.WIFI_scan_open)\r
-            EventMesh.subscribe(constants.EVENT.CLOSE_LOCATION,self.close_location)\r
-            EventMesh.subscribe("get_location_flag",self.get_location_flag)\r
-            \r
-            #EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)\r
-        def get_location_flag(self, event, msg):\r
-            return self.location_flag\r
-        def start_location(self, event, msg):\r
-            self.location_queue.put(msg)#测试类型入队\r
-            self.gps_data = {}\r
-            self.wifi_data = []\r
-            self.cell_data = []\r
-            self.location_timer_count = 0\r
-            self.GSV_sig_ok_count = 0\r
-            EventMesh.debug_log("start_location:{}".format(msg))\r
-            if( self.location_flag == 1):\r
-                return\r
-            _thread.stack_size((9+5)*1024)\r
-            self.location_thread_id  = _thread.start_new_thread(self.location_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            \r
-            self.location_flag = 1\r
-            self.timer_read_GPS_info.start(1000, 1, self.location_timer)\r
-            #self.gps_open(event, msg)\r
-\r
-\r
-        def start_location_test(self, event, msg):\r
-            EventMesh.debug_log("start_location_test")\r
-            \r
-            self.location_type = 1\r
-            if( self.location_flag == 1):\r
-                return\r
-            _thread.stack_size((9+4)*1024)\r
-            self.location_thread_id  = _thread.start_new_thread(self.location_thread, ())\r
-            _thread.stack_size(8*1024)\r
-        \r
-            self.location_timer_count = 0\r
-            self.location_flag = 1\r
-            #self.gps_open(event, msg)\r
-            self.location_type = 1\r
-            self.timer_read_GPS_info.start(1000, 1, self.location_timer)\r
-    \r
-\r
-        def close_location(self, event, msg):\r
-            self.location_flag = 0\r
-            self.location_type = 0\r
-            self.timer_read_GPS_info.stop()\r
-\r
-            \r
-\r
-        def WIFI_INFO(self, event, msg):\r
-            self.wifi_data = msg\r
-            # EventMesh.debug_log("WIFI_INFO:")\r
-            # EventMesh.debug_log([msg[0],msg])\r
-\r
-        def WIFI_scan_open(self, event, msg):\r
-            #EventMesh.debug_log("WIFI_scan_open")\r
-            \r
-\r
-            if wifiScan.getState() == False :\r
-                self.wifi_data = []\r
-                wifiScan.control(1)\r
-                wifiScan.setCfgParam(6, 2, 5,  0)  #设置WiFi参数,10秒上层,两轮,最多6个,6秒底层,PS优先\r
-                wifiScan.setCallback(wifiScan_cb) #注册回调函数\r
-                wifiScan.asyncStart()\r
-                #EventMesh.debug_log("wifiScan.asyncStart")\r
-            else :\r
-                EventMesh.debug_log("WIFI_scan_open:error1") \r
-        def gps_open(self, event, msg):\r
-            if self.isOpenGNSS == "1":\r
-                #EventMesh.debug_log("publish:gps_open")\r
-                #quecgnss.init()\r
-                quecgnss.gnssEnable(2)\r
-                #self.gps.__gps_nmea_data_clean()\r
-        def gps_close(self, event, msg):\r
-            if self.isOpenGNSS == "1":\r
-                quecgnss.gnssEnable(0)\r
-        def location_timer(self, *args, **kwargs):\r
-            \r
-            self.location_timer_count = self.location_timer_count +1\r
-            self.location_check_data_timer_count = self.location_check_data_timer_count+1\r
-\r
-        def Location_send(self, msg) :\r
-            EventMesh.debug_log("Location_send1")\r
-            if self.location_queue.empty() == True:\r
-                return\r
-            EventMesh.debug_log("Location_send2")\r
-            while True:\r
-                if self.location_queue.empty() == False:\r
-                    TYPE = self.location_queue.get()\r
-                    date = "{:04d}{:02d}{:02d},{:02d}{:02d}{:02d}".format(*utime.localtime()[0:6])\r
-                    date = date[2:]\r
-                    #date = "180916,025723"\r
-                    GPS_type = "V"\r
-                    latitude = "0.000000,N"\r
-                    longitude = "0.000000,E"\r
-                    speed = "0.00"\r
-                    direction = "0.0"\r
-                    high = "100.0"\r
-                    number = "0"\r
-                    precision = "24"\r
-                    if msg[0] :#有GPS数据\r
-                        GPS_type = "A"\r
-                        # 纬度\r
-                        latitude = msg[0]["latitude"]\r
-                        # 经度\r
-                        longitude = msg[0]["longitude"]\r
-                        # 速度\r
-                        speed = msg[0]["speed"]\r
-                        # 方向\r
-                        direction = "0"\r
-                        if msg[0]["direction"] :\r
-                            direction = msg[0]["direction"]\r
-                        # 高度\r
-                        high = msg[0]["high"]\r
-                        high_tmp = high.split(".")\r
-                        if len(high_tmp) >= 2 :\r
-                            high = "%s"%(high_tmp[0])\r
-                        # 讯号质量:搜索到的卫星数目\r
-                        number = msg[0]["number"]\r
-                        precision = msg[0]["precision"]\r
-                        #date = msg[0]["date"]\r
-                    \r
-                    #gsm 信号强度\r
-                    gsm_sig =  str((100//31)*EventMesh.publish("screen_get_sig"))\r
-                    # 电池电量百分比 \r
-                    bat_tmp = EventMesh.publish("screen_get_battery")\r
-                    battery_caption =  str(bat_tmp[1])\r
-                    #步数\r
-                    old_step = 0\r
-                    step = 0\r
-                    step = EventMesh.publish("get_old_step_value")\r
-                    if step != 0:\r
-                        tmp_data  = EventMesh.publish("get_storage_config","old_step_new")\r
-                        if tmp_data != None:\r
-                            old_step = tmp_data\r
-                        if old_step !=  step:\r
-                            EventMesh.publish("set_storage_config",["old_step",step])\r
-                            EventMesh.publish("set_storage_config",["old_step_new",step])\r
-                            \r
-                    old_step = step\r
-                    # step = str(EventMesh.publish(constants.EVENT.GET_STEP)[0])\r
-                    #翻转次数\r
-                    turn_count = "0"\r
-                    #终端状态\r
-                    state = "%08X"%(EventMesh.publish("get_dev_state"))\r
-                    #EventMesh.debug_log("TYPE:{}".format(TYPE))\r
-                    if type(TYPE) == list:#队列里的数据有终端状态,则用队里的终端状态\r
-                        if len(TYPE)>= 2 :\r
-                            state = "%08X"%(TYPE[1])\r
-                    \r
-                    EventMesh.debug_log("state:{}".format(state))\r
-                    #基站数据\r
-                    CELL_num = len(msg[2])\r
-                    CELL_data = "1," #时延\r
-                    if msg[2] != []:\r
-                        for CELL in msg[2] :\r
-                            if CELL[0] == 0 :\r
-                                CELL_data += "%X,"%(int(CELL[2])) #MCC\r
-                                CELL_data += str(CELL[3]) +","#MNC\r
-                                CELL_data += str(CELL[5]) +","#tac,区域码\r
-                                CELL_data += str(CELL[1]) +","#基站编号 CID\r
-                                CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi\r
-                            else :\r
-                                CELL_data += str(CELL[5]) +","#tac,区域码\r
-                                CELL_data += str(CELL[1]) +","#基站编号 CID\r
-                                CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi\r
-                        CELL_data = CELL_data[:(len(CELL_data)-1)]\r
-                    #WIFI数据\r
-                    WIFI_num = 0 \r
-                    WIFI_data = ""\r
-                    if msg[1] :\r
-                        WIFI_num = msg[1][0]\r
-                        i = 0\r
-                        for MAC in msg[1][1] :\r
-                            WIFI_data += "wifi%d,%s,%d,"%(i,str(MAC[0]),MAC[1])\r
-                            i += 1\r
-                        WIFI_data = WIFI_data[:(len(WIFI_data)-1)]\r
-                    WIFI_data = WIFI_data.lower()\r
-                    #send_data = "UD ,%s ,%s     ,%s       ,%s       ,%s   ,%s       ,%s  ,%s    ,%s     ,%s             ,%s  ,%s        ,%s   ,%d     ,%s       ,%d      ,%s"\\r
-                    #              %(date,GPS_type,latitude,longitude,speed,direction,high,number,gsm_sig,battery_caption,step,turn_count,state,CELL_num,CELL_data,WIFI_num,WIFI_data)\r
-                    #定位数据\r
-                    send_data = "%s,%s,%s"%(date,GPS_type,latitude)\r
-                    send_data += ",%s,%s,%s"%(longitude,speed,direction)\r
-                    send_data += ",%s,%s,%s"%(high,number,gsm_sig,)\r
-                    send_data += ",%s,%s,%s"%(battery_caption,step,turn_count)\r
-                    send_data += ",%s,%d,%s"%(state,CELL_num,CELL_data)\r
-                    send_data += ",%d,%s"%(WIFI_num,WIFI_data)\r
-                    send_data+=",%s"%(precision)\r
-                    #EventMesh.debug_log("Location_send2:{} q_size:{}".format(send_data,self.location_queue.size()))\r
-            \r
-                \r
-                    EventMesh.debug_log("Location_send3:{}:{}".format(TYPE,send_data))\r
-                    if type(TYPE) == list:\r
-                        EventMesh.publish(TYPE[0],send_data)\r
-                    else:\r
-                        EventMesh.publish(TYPE,send_data)\r
-                else :\r
-                    break\r
-\r
-        def GxGGA_latitude(self, gga_data):\r
-            """Parse latitude from GGA"""\r
-            if gga_data:\r
-                latitude_re = ure.search(r",[0-9]+\.[0-9]+,[NS],", gga_data)\r
-                if latitude_re:\r
-                    latitude = latitude_re.group(0)[1:-3]\r
-                    return str(float(latitude[:2]) + float(latitude[2:]) / 60)\r
-            return ""\r
-        def GxGGA_longitude(self, gga_data):\r
-            """Parse longitude from GGA"""\r
-            if gga_data:\r
-                longitude_re = ure.search(r",[0-9]+\.[0-9]+,[EW],", gga_data)\r
-                if longitude_re:\r
-                    longitude = longitude_re.group(0)[1:-3]\r
-                    return str(float(longitude[:3]) + float(longitude[3:]) / 60)\r
-            return ""\r
-\r
-        def GxGGA_altitude(self, gga_data):\r
-            """Parse altitude from GGA"""\r
-            if gga_data:\r
-                altitude_re = ure.search(r",-*[0-9]+\.[0-9]+,M,", gga_data)\r
-                if altitude_re:\r
-                    return altitude_re.group(0)[1:-3]\r
-            return ""\r
-        def location_thread(self):\r
-            \r
-            self.wifi_data = []\r
-            self.gps_data = {}\r
-            self.cell_data = []\r
-            gnss_r_data = []\r
-            self.GSV_sig_ok_count = 0\r
-            self.GSV_sig_very_ok_count = 0\r
-            self.GGA_count = 0\r
-            self.RMC_A_count = 0\r
-            # if self.start_agps == 1: #开启agps\r
-            #     self.start_agps = 0\r
-            #     quecgnss.configSet(2,1)\r
-            if self.lpm_fd == None:\r
-                self.lpm_fd = pm.create_wakelock("test_lock", len("test_lock"))\r
-            pm.wakelock_lock(self.lpm_fd)\r
-            EventMesh.debug_log("location_thread:1")\r
-            EventMesh.publish(constants.EVENT.GPSOPEN)\r
-            EventMesh.debug_log("location_thread:2")\r
-            #self.timer_read_GPS_info.start(1000, 1, self.location_timer)\r
-            EventMesh.debug_log("location_thread:3")\r
-            #utime.sleep_ms(1000)\r
-            self.location_timer_count = 0\r
-            #quecgnss.read(4096)#去掉第一次错误数据\r
-            #EventMesh.txt_log("START_LOCATION")\r
-            # pm.autosleep(0)#唤醒\r
-            # pm.sclkEx_set(0, 1, 5)\r
-            GSV_dict= {}\r
-            while self.location_flag == 1:\r
-                try :   \r
-                    \r
-                    match_gga_data = []\r
-                    #match_gsv_data = []\r
-                    gnss_r_data = []\r
-                    # if self.location_check_data_timer_count >= 3:\r
-                    #     pm.autosleep(0)#唤醒\r
-                    #     pm.sclkEx_set(0, 1, 5)\r
-                    if self.location_check_data_timer_count >= 1 :#3秒查一次基站数据和wifi数据\r
-                        self.location_check_data_timer_count = 0\r
-                        #EventMesh.debug_log(self.location_timer_count)\r
-                        GSV_dict= {}\r
-                        if self.isOpenGNSS == "1":                    \r
-                            #检查GNSS数据\r
-                            if ( self.gps_data == {} or self.location_type == 1) and quecgnss.get_state() == 2:\r
-\r
-                                pass\r
-                                tmp_ok_count = 0\r
-                                tmp_very_ok_count = 0\r
-                                gsv_data = quecgnss.get_gsv()\r
-                                rmc_data = quecgnss.get_rmc()\r
-                                gga_data = quecgnss.get_gga()\r
-                                vtg_data = quecgnss.get_vtg()\r
-                                # EventMesh.debug_log("gsv:{}".format(quecgnss.get_gsv()))\r
-                                # EventMesh.debug_log("gga:{}".format(quecgnss.get_gga()))\r
-                                # EventMesh.debug_log("rmc:{}".format(quecgnss.get_rmc()))\r
-                                # EventMesh.debug_log("vtg:{}".format(quecgnss.get_vtg())) \r
-                                for i in range(len(gsv_data)) :\r
-                                    \r
-                                    if i % 2 == 0:\r
-                                        if i+1 >= len(gsv_data) :\r
-                                            # EventMesh.debug_log("gsv_data num error!!")\r
-                                            break\r
-                                        GSV_dict[gsv_data[i]] = gsv_data[i+1]\r
-                                        #EventMesh.debug_log("type:gsv_data{}".format(type(gsv_data[i+1])))\r
-                                        try:\r
-                                            #EventMesh.debug_log("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))\r
-                                            if gsv_data[i+1] :\r
-                                                if (gsv_data[i+1])>=20:\r
-                                                    tmp_ok_count +=1   \r
-                                                if (gsv_data[i+1])>=30:\r
-                                                    tmp_very_ok_count +=1  \r
-                                                    \r
-                                        except Exception as e:\r
-                                            usys.print_exception(e)\r
-                                        \r
-                                if(tmp_ok_count > self.GSV_sig_ok_count ):\r
-                                    self.GSV_sig_ok_count = tmp_ok_count\r
-                                if(tmp_very_ok_count > self.GSV_sig_very_ok_count ):\r
-                                    self.GSV_sig_very_ok_count = tmp_very_ok_count\r
-                                match_rmc_data = rmc_data.split(",")\r
-                                if len (match_rmc_data)>3: #有rmc数据\r
-                                        if match_rmc_data[2] == 'A':    \r
-                                            match_gga_data = gga_data.split(",")\r
-                                            if len(match_gga_data) >4: #数据全\r
-                                                match_vtg_data = vtg_data.split(",")\r
-                                                gps_date = "%s,%s"%(match_rmc_data[9],match_rmc_data[1][:6])#日期\r
-                                                #gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])\r
-                                                latitude = "0,N" #纬度\r
-                                                latitude_tmp = str(self.GxGGA_latitude(gga_data)).split(".")\r
-                                                if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:\r
-                                                    latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])\r
-                                                    latitude = "%s,%s"%(latitude,match_rmc_data[4] )\r
-\r
-                                                longitude = "0,E"#经度\r
-                                                longitude_tmp = str(self.GxGGA_longitude(gga_data)).split(".")\r
-                                                if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:\r
-                                                    longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])\r
-                                                    longitude = "%s,%s"%(longitude,match_rmc_data[6] ) #match_rmc_data[6] + str(gnss_r_data[1])\r
-                                                \r
-                                                high = "0"#高度\r
-                                                high = str(self.GxGGA_altitude(gga_data))\r
-                                                number = "0"#可用卫星\r
-                                                precision = "5.8"#精度\r
-                                                if len(match_gga_data)>5 :\r
-                                                    if match_gga_data[7]:\r
-                                                        number = match_gga_data[7]\r
-                                                    if match_gga_data[8]:\r
-                                                        precision = match_gga_data[8]\r
-                                                direction = "249.5" #方向\r
-                                                speed = '0.00'    #速度    \r
-                                                if(len(match_vtg_data)>5 ):\r
-                                                    if match_vtg_data[1]:\r
-                                                        direction =  match_vtg_data[1]\r
-                                                    if match_vtg_data[7]:    \r
-                                                        speed =  match_vtg_data[7]\r
-                                                self.gps_data = {\r
-                                                    "latitude": latitude,\r
-                                                    "longitude": longitude,\r
-                                                    "high": high,\r
-                                                    "direction": direction,\r
-                                                    "speed": speed,\r
-                                                    "number": number, \r
-                                                    "date":  gps_date,\r
-                                                    "precision":  precision\r
-                                                }\r
-    # ***********************************************************************************\r
-\r
-\r
-                    #检查wifi数据\r
-                    if self.wifi_data == [] or (self.wifi_data != [] and self.wifi_data[0] == 0):#and self.wifi_data[0] <= 0:\r
-                        EventMesh.publish(constants.EVENT.WIFISCANOPEN)\r
-                \r
-                    #检查基站数据\r
-                    if self.cell_data == []:   \r
-                        data_tmp = net.getCellInfo()\r
-                        if(len(data_tmp)>=2):\r
-                            for cell in data_tmp:\r
-                                if cell and cell[0][0] == 0 and len(cell[0]) > 1:\r
-                                    self.cell_data = cell\r
-                                    break\r
-\r
-                    if self.location_type == 1: #测试模式\r
-                        self.location_timer_count = 0\r
-                        \r
-                        EventMesh.publish("PUSH_LOCATION_DATA", [[self.gps_data,GSV_dict],self.wifi_data,self.cell_data]) \r
-                        if self.gps_data  != {} : #发送数据 \r
-                            EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位\r
-                            self.location_queue.put(constants.PROTOCOL.UD_SEND)\r
-                            self.Location_send([self.gps_data,self.wifi_data,self.cell_data])\r
-                            \r
-\r
-                    elif self.location_type == 0: #正常模式     \r
-                        if self.gps_data  != {} or self.location_timer_count > 100: #or( self.wifi_data != [] and self.cell_data != []): \r
-                            if self.location_queue.empty() == False:#有定位队列\r
-                                pass\r
-                                #EventMesh.txt_log("LOCATION timer:{} ok:{} very_ok:{}".format(self.location_timer_count,self.GSV_sig_ok_count))   \r
-                                #EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))\r
-                            if self.gps_data  == {}: #定位超时,且信噪比多个大于30,下次启动agps\r
-                                if self.GSV_sig_very_ok_count > 3:#3个超30以上\r
-                                    self.start_agps = 1\r
-                                    #EventMesh.txt_log("open agps:{}".format(GSV_dict))\r
-                            #upload_time = EventMesh.publish("get_upload_data")    \r
-                            self.Location_send([self.gps_data,self.wifi_data,self.cell_data])\r
-                            #if upload_time > 200  : \r
-                            EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位\r
-                            # else:   #定位间隔小于3分钟不关闭gps,不影响无信号判断\r
-                            #     self.location_timer_count = 0\r
-                            #     self.GSV_sig_ok_count = 0\r
-                                \r
-                            \r
-\r
-                            \r
-                        if (self.isOpenGNSS != "1" or (self.GSV_sig_ok_count <= 1 and self.location_timer_count > 20)) and self.wifi_data != [] and self.cell_data != [] : #超过40秒且信号大于30的不足3个\r
-                            EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 \r
-                            EventMesh.debug_log("Location_send:CLOSE_LOCATION")  \r
-                            #EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))\r
-                            self.Location_send([self.gps_data,self.wifi_data,self.cell_data])\r
-\r
-                \r
-                    \r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                    EventMesh.txt_log("location_thread:ERROR:".format(e))\r
-                    #EventMesh.debug_log("location_thread:ERROR:{}".format(usys.print_exception(e)))\r
-                    EventMesh.debug_log("self.gps_data{},self.wifi_data{},self.cell_data{}".format(self.gps_data,self.wifi_data,self.cell_data))\r
-                    #self.Location_send([self.gps_data,self.wifi_data,self.cell_data])\r
-                    EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 \r
-                utime.sleep_ms(500)\r
-\r
-            #self.timer_read_GPS_info.stop()\r
-            #self.gps.power_switch(0)\r
-            wifiScan.control(0)\r
-            EventMesh.publish(constants.EVENT.GPSCLOSE)\r
-            # if EventMesh.publish("get_lcd_state" ) == 0:#休眠的时候,恢复休眠\r
-            #     pm.autosleep(1)\r
-            #     pm.sclkEx_set(1, 1, 5)\r
-            if self.lpm_fd != None:\r
-                pm.wakelock_unlock(self.lpm_fd)\r
-            #pm.delete_wakelock(lpm_fd)\r
-            EventMesh.debug_log("CLOSE_LOCATION")\r
-            #EventMesh.txt_log("CLOSE_LOCATION")\r
-\r
-                    \r
-\r
-    class AddrBookManager(Abstract):\r
-        # 通讯录\r
-        def __init__(self):\r
-            self.read_phonebook = {}\r
-            self.check_json = 0\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/phonebook.json")\r
-\r
-            if self.check_json == True:\r
-                with open("/usr/static/storage_file/phonebook.json","r",encoding="utf-8") as fd:\r
-                    self.read_phonebook = ujson.load(fd)\r
-                    EventMesh.debug_log("读取电话本")\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_phonebook_list", self.get)\r
-            EventMesh.subscribe("set_phonebook_list", self.set)\r
-            EventMesh.subscribe("call_phonebook_one_call", self.call_phonebook_one_call)\r
-            EventMesh.subscribe("call_phonebook_two_call", self.call_phonebook_two_call)\r
-            EventMesh.subscribe("call_phonebook_three_call", self.call_phonebook_three_call)\r
-\r
-            EventMesh.subscribe("call_phonebook_num", self.call_phonebook_num)\r
-\r
-        def get(self, event, msg):\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/phonebook.json")\r
-            return [self.check_json,self.read_phonebook]\r
-        \r
-        def call_phonebook_num(self, event, msg):\r
-            name = ''\r
-            key_tmp = ''\r
-            phone_num = int(msg)\r
-            if self.read_phonebook != {}:\r
-                if len(self.read_phonebook) >= phone_num:\r
-                    phonebook_keys = sorted(self.read_phonebook.keys())\r
-                    name = self.read_phonebook[phonebook_keys[phone_num-1]]\r
-                    key_tmp = phonebook_keys[phone_num-1]\r
-                    if len(name) != 0:\r
-                        EventMesh.publish("save_phonename",str(name))\r
-                        EventMesh.publish("save_phonenum",str(name))\r
-                        EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                else:\r
-                    EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            else:\r
-                EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            EventMesh.debug_log("call_phonebook_call name:{} msg:{}".format(len(self.read_phonebook),msg))\r
-\r
-        def call_phonebook_one_call(self, event, msg):\r
-            name = ''\r
-            key_tmp = ''\r
-            if self.read_phonebook != {}:\r
-                if len(self.read_phonebook) >= 1:\r
-                    phonebook_keys = sorted(self.read_phonebook.keys())\r
-                    name = self.read_phonebook[phonebook_keys[0]]\r
-                    key_tmp = phonebook_keys[0]\r
-                    if len(name) != 0:\r
-                        EventMesh.publish("save_phonename",str(name))\r
-                        EventMesh.publish("save_phonenum",str(name))\r
-                        EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                else:\r
-                    EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            else:\r
-                EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            EventMesh.debug_log("call_phonebook_one_call name:{} key_tmp:{} len:{}".format(name,key_tmp,len(self.read_phonebook)))\r
-\r
-        def call_phonebook_two_call(self, event, msg):\r
-            name = ''\r
-            key_tmp = ''\r
-            if self.read_phonebook != {}:\r
-                if len(self.read_phonebook) >= 2:\r
-                    phonebook_keys = sorted(self.read_phonebook.keys())\r
-                    name = self.read_phonebook[phonebook_keys[1]]\r
-                    key_tmp = phonebook_keys[1]\r
-                    if len(name) != 0:\r
-                        #voiceCall.callStart(str(name))\r
-                        EventMesh.publish("save_phonename",str(name))\r
-                        EventMesh.publish("save_phonenum",str(name))\r
-                        EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                    \r
-                else:\r
-                    EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            else:\r
-                EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                EventMesh.debug_log("call_phonebook_two_call name:{} key_tmp:{}".format(name,key_tmp))\r
-        \r
-        def call_phonebook_three_call(self, event, msg):\r
-            name = ''\r
-            key_tmp = ''\r
-            if self.read_phonebook != {}:\r
-                if len(self.read_phonebook) >= 3:\r
-                    phonebook_keys = sorted(self.read_phonebook.keys())\r
-                    name = self.read_phonebook[phonebook_keys[2]]\r
-                    key_tmp = phonebook_keys[2]\r
-                    if len(name) != 0:\r
-                        #voiceCall.callStart(str(name))\r
-                        EventMesh.publish("save_phonename",str(name))\r
-                        EventMesh.publish("save_phonenum",str(name))\r
-                        EventMesh.publish("dial_out_call_center_cb",str(name))#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-                    \r
-                else:\r
-                    EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            else:\r
-                EventMesh.publish("dial_out_call_center_cb",None)#电话拨出去\r
-            EventMesh.debug_log("call_phonebook_three_call name:{} key_tmp:{}".format(name,key_tmp))\r
-\r
-        def set(self, event, msg):\r
-            self.check_json = msg[0]\r
-            self.read_phonebook = msg[1]\r
-\r
-    import sms\r
-    class MsgManager(Abstract):\r
-        # 短信\r
-        def __init__(self):\r
-            self.msg_nums = 0\r
-            self.msg_detail = ""\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_msg_nums", self.get_msg_nums)\r
-            # 可通过此push_addr_book_list主动推送\r
-            EventMesh.subscribe("get_msg_detail", self.get_msg_detail)\r
-\r
-        def get_msg_nums(self, event, msg):\r
-\r
-            self.msg_nums = sms.getMsgNums() \r
-            EventMesh.debug_log("self.msg_nums {}:".format(self.msg_nums))\r
-            return self.msg_nums\r
-        \r
-        def get_msg_detail(self, event, msg):\r
-            \r
-            # self.msg_detail = sms.searchTextMsg(self.msg_nums)\r
-            # EventMesh.debug_log("self.msg_detai {}:".format(self.msg_detai))\r
-            return{\r
-                "小明":"有内鬼,停止交易",\r
-                "小红":"今晚十点一起吃饭"\r
-            }\r
-\r
-    class MsgdetailManager(Abstract):\r
-        def __init__(self):\r
-            self.level = 0\r
-            self.msg_name = ""\r
-            self.msg_content = ""\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("save_msg_name", self.save_msg_name)\r
-            EventMesh.subscribe("save_msg_content", self.save_msg_content)\r
-            EventMesh.subscribe("get_msg_name", self.get_msg_name)\r
-            EventMesh.subscribe("get_msg_content", self.get_msg_content)\r
-\r
-        def save_msg_name(self, event, msg): \r
-            self.msg_name = str(msg)\r
-            EventMesh.debug_log("save_msg_name:msg".format(msg))\r
-        \r
-        def save_msg_content(self, event, msg):\r
-            self.msg_content = str(msg)\r
-            EventMesh.debug_log("save_msg_content:msg".format(msg))\r
-        \r
-        def get_msg_content(self, event, msg):\r
-            return self.msg_content\r
-\r
-        def get_msg_name(self, event, msg):\r
-            return self.msg_name\r
-\r
-    class CallLogManager(Abstract):\r
-        # 通话记录\r
-        def __init__(self):\r
-            self.read_call_log = {}\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/Call_log.json")\r
-\r
-            if self.check_json == True:\r
-                with open("/usr/static/storage_file/Call_log.json","r",encoding="utf-8") as fd:\r
-                    self.read_call_log = ujson.load(fd)\r
-                    EventMesh.debug_log("读取通话记录")\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_call_log_list", self.get)\r
-            EventMesh.subscribe("set_call_log_list", self.set)\r
-\r
-        def get(self, event, msg):\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/Call_log.json")\r
-            return [self.check_json,self.read_call_log]\r
-\r
-        def set(self, event, msg):\r
-            return\r
-            self.check_json = msg[0]\r
-            self.read_call_log = msg[1]\r
-            with open("/usr/static/storage_file/Call_log.json","w+",encoding="utf-8") as fd:\r
-                ujson.dump(self.read_call_log,fd)\r
-        # def call_usr(self,event,msg):\r
-        #     content = self.log[msg]\r
-        #     # 参数1 姓名  参数2  电话   参数3 1/主动呼叫  0别人呼叫\r
-        #     EventMesh.publish("call_in", [content[2], content[0], 1])\r
-\r
-\r
-\r
-    class PhoneCallingManager(Abstract):\r
-        def __init__(self):\r
-            self.phonenum = ""\r
-            self.phonename = ""\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("save_phonenum", self.save_phonenum)\r
-            EventMesh.subscribe("get_phonenum", self.get_phonenum)\r
-            EventMesh.subscribe("get_phonename", self.get_phonename)\r
-            EventMesh.subscribe("save_phonename", self.save_phonename)\r
-\r
-        def get_phonename(self, event, msg): \r
-            return self.phonename\r
-\r
-        def save_phonename(self, event, msg): \r
-            self.phonename = str(msg)\r
-\r
-        def save_phonenum(self, event, msg): \r
-            self.phonenum = str(msg)\r
-        \r
-        def get_phonenum(self, event, msg):\r
-            return self.phonenum\r
-\r
-    #获取心率 血氧 步数历史数据\r
-    class gethistoryDataManager(Abstract):\r
-        def __init__(self):\r
-            self.oldHr = 0\r
-            self.oldspo2 = 0\r
-            self.oldstep = 0\r
-            self.old_step = 0\r
-            self.read_histroy_hr_data = []\r
-            self.read_histroy_temp_data = []\r
-            self.read_histroy_spo2_data = []\r
-\r
-            oldHr  = EventMesh.publish("get_storage_config","old_hr")\r
-            if oldHr != None:\r
-                self.oldHr = oldHr  \r
-            old_spo2  = EventMesh.publish("get_storage_config","old_spo2")\r
-            if old_spo2 != None:\r
-                self.oldspo2 = old_spo2 \r
-            old_step  = EventMesh.publish("get_storage_config","old_step")    \r
-            if old_step != None:\r
-                self.oldstep = old_step\r
-\r
-\r
-            check_hr= ql_fs.path_exists("/usr/static/storage_file/history_hr.json")\r
-            if check_hr == True :\r
-                with open("/usr/static/storage_file/history_hr.json","r") as fd:#音频文件编号\r
-                    self.read_histroy_hr_data = ujson.load(fd)\r
-            \r
-            check_temp= ql_fs.path_exists("/usr/static/storage_file/history_temp.json")\r
-            if check_temp == True :\r
-                with open("/usr/static/storage_file/history_temp.json","r") as fd:#音频文件编号\r
-                    self.read_histroy_temp_data = ujson.load(fd)\r
-\r
-            check_spo2= ql_fs.path_exists("/usr/static/storage_file/history_spo2.json")\r
-            if check_spo2 == True :\r
-                with open("/usr/static/storage_file/history_spo2.json","r") as fd:#音频文件编号\r
-                    self.read_histroy_spo2_data = ujson.load(fd)\r
-            self.temp_value = 0\r
-            \r
-            # self.read_histroy_hr_data=[{"timeSec":16789890,"value":90},{"timeSec":16789888,"value":78},{"timeSec":16789688,"value":68},{"timeSec":16789898,"value":58},\\r
-            #                              {"timeSec":16789897,"value":88},{"timeSec":16789867,"value":77},{"timeSec":16789895,"value":70}]\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_old_hr_data", self.save_hr_value)\r
-            EventMesh.subscribe("get_old_hr_data", self.get_hr_value)\r
-            EventMesh.subscribe("set_old_spo2_data", self.save_spo2_value)\r
-            EventMesh.subscribe("get_old_spo2_data", self.get_spo2_value)\r
-\r
-            EventMesh.subscribe("get_old_step_value", self.get_old_step_value)\r
-            EventMesh.subscribe("set_old_step_value", self.set_old_step_value)\r
-\r
-\r
-            EventMesh.subscribe("get_history_hr_value", self.get_history_hr_value)\r
-            EventMesh.subscribe("set_history_hr_value", self.set_history_hr_value)\r
-\r
-            EventMesh.subscribe("get_history_temp_value", self.get_history_temp_value)\r
-            EventMesh.subscribe("set_history_temp_value", self.set_history_temp_value)\r
-\r
-            EventMesh.subscribe("get_history_spo2_value", self.get_history_spo2_value)\r
-            EventMesh.subscribe("set_history_spo2_value", self.set_history_spo2_value)\r
-\r
-        \r
-\r
-        def get_history_spo2_value(self, event, msg): #近7次血氧历史数据统计显示\r
-            return self.read_histroy_spo2_data\r
-\r
-        def set_history_spo2_value(self, event, msg): \r
-            pass\r
-\r
-\r
-\r
-        def get_history_temp_value(self, event, msg): #近7次体温历史数据统计显示\r
-            return self.read_histroy_temp_data\r
-\r
-        def set_history_temp_value(self, event, msg): \r
-            self.temp_value = msg\r
-            if self.temp_value > 0:\r
-                # date_tmp = utime.localtime()\r
-                # time_tmp = utime.mktime(date_tmp)\r
-                # if len(self.read_histroy_temp_data) >= 7:\r
-                #     sort_new = {}\r
-                #     sort_new = sorted(self.read_histroy_temp_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条\r
-                #     EventMesh.debug_log(sort_new)\r
-                #     for i in range(len(self.read_histroy_temp_data)-1):\r
-                #         sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7\r
-                #         self.read_histroy_temp_data[i] = sort_new[i]\r
-                #         pass\r
-                #     self.read_histroy_temp_data[6] = {"timeSec": time_tmp, "temp": self.temp_value}\r
-                # else:\r
-                #     self.read_histroy_temp_data.append({"timeSec": time_tmp, "temp": self.temp_value}) \r
-\r
-                # with open("/usr/static/storage_file/history_temp.json","w",encoding="utf-8") as fd:\r
-                #     ujson.dump(self.read_histroy_temp_data,fd)\r
-                #EventMesh.debug_log(self.read_histroy_temp_data)\r
-                pass\r
-            else:\r
-                pass\r
-\r
-        def get_history_hr_value(self, event, msg): #近7次心率历史数据统计显示\r
-            return self.read_histroy_hr_data\r
-\r
-        def set_history_hr_value(self, event, msg): \r
-            pass\r
-                \r
-            \r
-\r
-        def save_hr_value(self, event, msg): \r
-            if msg >= 50:\r
-                EventMesh.publish("set_storage_config",["old_hr",msg])\r
-                self.oldHr = msg\r
-                \r
-\r
-                date_tmp = utime.localtime()\r
-                time_tmp = utime.mktime(date_tmp)\r
-                if len(self.read_histroy_hr_data) >= 7:\r
-                    sort_new = {}\r
-                    sort_new = sorted(self.read_histroy_hr_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条\r
-                    EventMesh.debug_log(sort_new)\r
-                    for i in range(len(self.read_histroy_hr_data)-1):\r
-                        sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7\r
-                        self.read_histroy_hr_data[i] = sort_new[i]\r
-                        pass\r
-                    self.read_histroy_hr_data[6] = {"timeSec": time_tmp, "hr": self.oldHr}\r
-                else:\r
-                    self.read_histroy_hr_data.append({"timeSec": time_tmp, "hr": self.oldHr}) \r
-\r
-\r
-                with open("/usr/static/storage_file/history_hr.json","w",encoding="utf-8") as fd:\r
-                    ujson.dump(self.read_histroy_hr_data,fd)\r
-                pass\r
-            else:\r
-                EventMesh.publish("set_storage_config",["old_hr",msg])\r
-                pass\r
-\r
-\r
-        def get_hr_value(self, event, msg): \r
-            return self.oldHr\r
-\r
-        def save_spo2_value(self, event, msg): \r
-            if msg >= 85:\r
-                # EventMesh.publish("set_storage_config",["old_spo2",msg])\r
-                # self.oldspo2 = msg\r
-\r
-\r
-                # date_tmp = utime.localtime()\r
-                # time_tmp = utime.mktime(date_tmp)\r
-                # if len(self.read_histroy_spo2_data) >= 7:\r
-                #     sort_new = {}\r
-                #     sort_new = sorted(self.read_histroy_spo2_data, key = lambda i: i['timeSec'],reverse = False)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条\r
-                #     EventMesh.debug_log(sort_new)\r
-                #     for i in range(len(self.read_histroy_spo2_data)-1):\r
-                #         sort_new[i] = sort_new[i+1]#0==1 1== 2 2== 3 3==4 4==5 5==6 6==7\r
-                #         self.read_histroy_spo2_data[i] = sort_new[i]\r
-                #         pass\r
-                #     self.read_histroy_spo2_data[6] = {"timeSec": time_tmp, "spo2": self.oldspo2}\r
-                # else:\r
-                #     self.read_histroy_spo2_data.append({"timeSec": time_tmp, "spo2": self.oldspo2}) \r
-\r
-                # with open("/usr/static/storage_file/history_spo2.json","w",encoding="utf-8") as fd:\r
-                #     ujson.dump(self.read_histroy_spo2_data,fd)\r
-                # #EventMesh.debug_log(self.read_histroy_spo2_data)\r
-                #播放语音\r
-                # EventMesh.publish("set_hr_blood_led",2)#测量成功\r
-                pass\r
-            else:\r
-                pass\r
-                pass\r
-\r
-        def get_spo2_value(self, event, msg): \r
-            return self.oldspo2\r
-        \r
-        def set_old_step_value(self, event, msg): \r
-            self.oldstep = msg\r
-            EventMesh.publish("set_storage_config",["old_step",msg])\r
-            \r
-            \r
-        def get_old_step_value(self, event, msg): \r
-            step = EventMesh.publish(constants.EVENT.GET_STEP)\r
-            self.old_step = self.oldstep + step[0]\r
-            return self.old_step\r
-    #获取旧的时间戳\r
-    class getOldTimeManager(Abstract):\r
-        # 获取天气数据\r
-        def __init__(self):\r
-            self.time_sec = 0\r
-            self.time_step = 0\r
-            self.step_second = 0\r
-            tmp_data = EventMesh.publish("get_storage_config","old_time")\r
-            if tmp_data !=None :\r
-                self.time_sec = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","clear_state")\r
-            if tmp_data !=None :\r
-                self.time_step = tmp_data[0]\r
-                self.step_second = tmp_data[1]\r
-\r
-            \r
-            \r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_old_time_data", self.get_old_time_data)\r
-            EventMesh.subscribe("set_old_time_data", self.set_old_time_data)\r
-\r
-            EventMesh.subscribe("get_old_step_data", self.get_old_step_data)\r
-            EventMesh.subscribe("set_old_step_data", self.set_old_step_data)\r
-\r
-            EventMesh.subscribe("set_test_data1", self.set_test_data1)\r
-\r
-            EventMesh.subscribe("set_test_data2", self.set_test_data2)\r
-\r
-            EventMesh.subscribe("set_test_data3", self.set_test_data3)\r
-\r
-            EventMesh.subscribe("set_test_data4", self.set_test_data4)\r
-\r
-            EventMesh.subscribe("set_test_data5", self.set_test_data5)\r
-\r
-            EventMesh.subscribe("set_test_data6", self.set_test_data6)\r
-\r
-            EventMesh.subscribe("set_test_data7", self.set_test_data7)\r
-\r
-            EventMesh.subscribe("set_test_data8", self.set_test_data8)\r
-        \r
-\r
-        def set_test_data1(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state1",msg])\r
-\r
-        \r
-        def set_test_data2(self, event, msg):\r
-            \r
-            EventMesh.publish("set_storage_config",["clear_state2",msg])\r
-\r
-\r
-        def set_test_data3(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state3",msg])\r
-\r
-        def set_test_data4(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state4",msg])\r
-\r
-        def set_test_data5(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state5",msg])\r
-\r
-        def set_test_data6(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state6",msg])\r
-\r
-        def set_test_data7(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state7",msg])\r
-\r
-        def set_test_data8(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["clear_state8",msg])\r
-\r
-        # f = open("/usr/static/storage_file/config.json",'r',encoding="utf-8")\r
-        # print(f.read())\r
-\r
-        def get_old_step_data(self, event, msg):\r
-            return [self.time_step,self.step_second]\r
-\r
-        def get_old_time_data(self, event, msg):\r
-            return self.time_sec\r
-        \r
-        \r
-\r
-        def set_old_time_data(self, event, msg):\r
-            self.time_sec = msg\r
-            EventMesh.publish("set_storage_config",["old_time",msg])\r
-\r
-        def set_old_step_data(self, event, msg):\r
-            self.time_step = msg[0]\r
-            self.step_second = msg[1]\r
-            EventMesh.publish("set_storage_config",["clear_state",msg])\r
-\r
-        def get_old_step_data(self, event, msg):\r
-            return [self.time_step,self.step_second]\r
-\r
-\r
-            \r
-        \r
-\r
-    class getWeatherDataManager(Abstract):\r
-        # 获取天气数据\r
-        def __init__(self):\r
-            self.date = {} #日期23-04-07\r
-            self.time = {} #14:41:41\r
-            self.content = {} #天气描述 \r
-            self.type = None #天气类型\r
-            self.temp = None #当前温度\r
-            self.min_temp = None #最低温度\r
-            self.max_temp = None #最高温度\r
-            self.city = {} #城市\r
-            self.no_data = 0#0沒有数据 1有数据\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_weather_data", self.get)\r
-            EventMesh.subscribe("set_weather_data", self.set)\r
-\r
-        def get(self, event, msg):\r
-            return [self.date,self.time,self.content,self.type,self.temp,self.min_temp,self.max_temp,self.city,self.no_data]\r
-\r
-        def set(self, event, msg):\r
-            self.date = msg[0]\r
-            self.time = msg[1]\r
-            self.content = msg[2]\r
-            self.type = msg[3]\r
-            self.temp = msg[4]\r
-            self.min_temp = msg[5]\r
-            self.max_temp = msg[6]\r
-            self.city = msg[7]\r
-            self.no_data = msg[8]\r
-\r
-\r
-    class getHrTimeManager(Abstract):\r
-        def __init__(self):\r
-            self.set_time = 0\r
-            self.set_hr = 0 #0关闭 1手动 2 自动测量按照时间间隔测试心率\r
-            self.set_spo2 = 0\r
-            self.open_btn = 0\r
-            self.set_bgautotime = 0\r
-            self.bgauto_btn = 0\r
-            read_data = EventMesh.publish("get_storage_config","measure_time")\r
-            if read_data != None:\r
-                self.set_time = read_data  \r
-            read_data = EventMesh.publish("get_storage_config","open_hr_btn")\r
-                    \r
-            if read_data != None:\r
-                self.open_btn = read_data   \r
-\r
-            read_data = EventMesh.publish("get_storage_config","bgauto_time")\r
-            if read_data != None:\r
-                self.set_bgautotime = read_data  \r
-            read_data = EventMesh.publish("get_storage_config","bgauto_btn")\r
-                    \r
-            if read_data != None:\r
-                self.bgauto_btn = read_data   \r
-\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_time_hr", self.set_time_hr)\r
-            EventMesh.subscribe("get_time_hr", self.get_time_hr)\r
-            EventMesh.subscribe("set_hr_state", self.set_hr_state)\r
-            EventMesh.subscribe("get_hr_state", self.get_hr_state)\r
-            EventMesh.subscribe("set_spo2_state", self.set_spo2_state)\r
-            EventMesh.subscribe("get_spo2_state", self.get_spo2_state)\r
-\r
-            EventMesh.subscribe("set_bgauto_time", self.set_bgauto_time)\r
-            EventMesh.subscribe("get_bgauto_time", self.get_bgauto_time)\r
-\r
-        def set_bgauto_time(self, event, msg): \r
-            self.bgauto_btn = msg[0]\r
-            self.set_bgautotime = msg[1]\r
-            EventMesh.publish("set_storage_config",["bgauto_btn",self.bgauto_btn])\r
-            EventMesh.publish("set_storage_config",["bgauto_time",self.set_bgautotime])\r
-\r
-        def get_bgauto_time(self, event, msg): \r
-            if self.bgauto_btn == None:\r
-                self.bgauto_btn = 0\r
-            if self.set_bgautotime == None:\r
-                self.set_bgautotime = 0\r
-            return [self.bgauto_btn,self.set_bgautotime]\r
-        \r
-\r
-        def set_time_hr(self, event, msg): \r
-            self.open_btn = msg[0]\r
-            self.set_time = msg[1]\r
-            EventMesh.publish("set_storage_config",["measure_time",self.set_time])\r
-            EventMesh.publish("set_storage_config",["open_hr_btn",self.open_btn])\r
-\r
-        def get_time_hr(self, event, msg): \r
-            return [self.open_btn,self.set_time]\r
-\r
-        def set_hr_state(self, event, msg): \r
-            # if msg != 0:\r
-            #     EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁\r
-            self.set_hr = msg\r
-            if self.set_hr == 0:\r
-                EventMesh.publish("clear_health_state")\r
-            \r
-\r
-        def get_hr_state(self, event, msg): \r
-            return self.set_hr\r
-        \r
-        def set_spo2_state(self, event, msg): \r
-            # if msg != 0:\r
-            #     EventMesh.publish("set_hr_blood_led",1)##红绿灯交替闪烁\r
-            self.set_spo2 = msg\r
-            if self.set_spo2 == 0:\r
-                EventMesh.publish("clear_health_state")\r
-            \r
-\r
-        def get_spo2_state(self, event, msg): \r
-            return self.set_spo2\r
-        \r
-    #体温\r
-    class getTempTimeManager(Abstract):\r
-        def __init__(self):\r
-            self.set_time = 0\r
-            self.get_temp = 0\r
-            read_data = EventMesh.publish("get_storage_config","temp_time")\r
-\r
-            if read_data != None:\r
-                self.set_time = read_data\r
-\r
-            self.get_bgstate = 0\r
-            self.get_bpstate = 0\r
-\r
-            self.bptime_on = 0\r
-            self.bptime_time = 0\r
-            read_data=EventMesh.publish("get_storage_config","bpauto_btn")\r
-            if read_data != None:\r
-                self.bptime_on = read_data\r
-\r
-            read_data=EventMesh.publish("get_storage_config","bpauto_time")\r
-            if read_data != None:\r
-                self.bptime_time = read_data\r
-\r
-            self.spo2time_on = 0\r
-            self.spo2time_time = 0\r
-            read_data = EventMesh.publish("get_storage_config","spo2auto_btn")\r
-            if read_data != None:\r
-                self.spo2time_on = read_data\r
-\r
-            read_data = EventMesh.publish("get_storage_config","spo2auto_time")\r
-            if read_data != None:\r
-                self.spo2time_time = read_data\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_temp_time", self.set_temp_time)\r
-            EventMesh.subscribe("get_temp_time", self.get_temp_time)\r
-\r
-            EventMesh.subscribe("set_temp_state", self.set_temp_state)\r
-            EventMesh.subscribe("get_temp_state", self.get_temp_state)\r
-\r
-            EventMesh.subscribe("set_bp_time", self.set_bp_time)\r
-            EventMesh.subscribe("get_bp_time", self.get_bp_time)\r
-\r
-            EventMesh.subscribe("set_bp_state", self.set_bp_state)\r
-            EventMesh.subscribe("get_bp_state", self.get_bp_state)\r
-\r
-\r
-            EventMesh.subscribe("set_bg_state", self.set_bg_state)\r
-            EventMesh.subscribe("get_bg_state", self.get_bg_state)\r
-\r
-            EventMesh.subscribe("set_spo2_time", self.set_spo2_time)\r
-            EventMesh.subscribe("get_spo2_time", self.get_spo2_time)\r
-\r
-            \r
-        def set_bg_state(self, event, msg): \r
-            self.get_bgstate = msg\r
-            if self.get_bgstate == 0:\r
-                EventMesh.publish("clear_health_state")\r
-            # if msg != 0:\r
-            #     EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁\r
-\r
-        def get_bg_state(self, event, msg): \r
-            if self.get_bgstate:\r
-                return self.get_bgstate\r
-            else :\r
-                return 0\r
-\r
-        def set_spo2_time(self, event, msg): \r
-            self.spo2time_on = msg[0]\r
-            self.spo2time_time = msg[1]\r
-            EventMesh.publish("set_storage_config",["spo2auto_btn",self.spo2time_on])\r
-            EventMesh.publish("set_storage_config",["spo2auto_time",self.spo2time_time])\r
-\r
-\r
-        def get_spo2_time(self, event, msg): \r
-            \r
-            return [self.spo2time_on,self.spo2time_time]\r
-\r
-\r
-        def set_bp_time(self, event, msg): \r
-            self.bptime_on = msg[0]\r
-            self.bptime_time = msg[1]\r
-            EventMesh.publish("set_storage_config",["bpauto_btn",self.bptime_on])\r
-            EventMesh.publish("set_storage_config",["bpauto_time",self.bptime_time])\r
-\r
-        def get_bp_time(self, event, msg): \r
-            if self.bptime_on == None:\r
-                self.bptime_on = 0\r
-            if self.bptime_time == None:\r
-                self.bptime_time = 0\r
-            return [self.bptime_on,self.bptime_time]\r
-        \r
-            \r
-        def set_bp_state(self, event, msg): \r
-            self.get_bpstate = msg\r
-            if self.get_bpstate == 0:\r
-                EventMesh.publish("clear_health_state")\r
-            # if msg != 0:\r
-                # EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁\r
-\r
-        def get_bp_state(self, event, msg): \r
-            if self.get_bpstate:\r
-                return self.get_bpstate\r
-            else :\r
-                return 0\r
-\r
-\r
-        def set_temp_time(self, event, msg): \r
-            self.set_time = msg\r
-            EventMesh.publish("set_storage_config",["temp_time",self.set_time])\r
-\r
-        def get_temp_time(self, event, msg): \r
-            return self.set_time\r
-        \r
-        def set_temp_state(self, event, msg): \r
-            self.get_temp = msg\r
-            if self.get_temp == 0:\r
-                EventMesh.publish("clear_temp_state")\r
-            # if msg != 0:\r
-            #     EventMesh.publish("set_hr_blood_led",1)#红绿灯交替闪烁\r
-\r
-        def get_temp_state(self, event, msg): \r
-            return self.get_temp\r
-            \r
-    class getBrightnessManager(Abstract):#获取亮度级别\r
-        def __init__(self):\r
-            self.level = 6#默认值6\r
-            # self.read_data = {}\r
-            self.time = 5\r
-            self.PWM_backlight  = None\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("get_brightness_level", self.get_brightness_level)\r
-            EventMesh.subscribe("push_add_brightness_level", self.add)\r
-            EventMesh.subscribe("push_reduce_brightness_level", self.reduce)\r
-            EventMesh.subscribe("set_brightness_level", self.set_brightness_level)\r
-\r
-            EventMesh.subscribe("set_brightness_time", self.set_brightness_time)\r
-            EventMesh.subscribe("get_brightness_time", self.get_brightness_time)\r
-\r
-        def set_brightness_level(self, event, msg): \r
-            self.level = msg\r
-            EventMesh.publish("set_storage_config", ["brightness_level",self.level])\r
-\r
-        def get_brightness_level(self, event, msg): \r
-            tmp = EventMesh.publish("get_storage_config","brightness_level")\r
-            if tmp != None:\r
-                self.level = tmp\r
-            return self.level\r
-        \r
-        def set_brightness_time(self, event, msg): \r
-            self.time = msg\r
-            EventMesh.publish("set_storage_config", ["brightness_time",self.time])\r
-        \r
-        def get_brightness_time(self, event, msg): \r
-            tmp = EventMesh.publish("get_storage_config","brightness_time")\r
-            if tmp != None:\r
-                self.time = tmp\r
-            return self.time\r
-        \r
-\r
-\r
-        def add(self, event, msg):\r
-            if self.level < 10:\r
-                self.level = self.level + 2\r
-            # self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)\r
-            # self.PWM_backlight.open()\r
-            EventMesh.publish("set_storage_config", ["brightness_level",self.level])\r
-\r
-\r
-        def reduce(self, event, msg):\r
-            # if self.level > 0:\r
-            #     self.level = self.level - 2\r
-            # if self.level <= 0:\r
-            #     self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 1, 10)\r
-            # else:\r
-            #     self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS,self.level, 10)\r
-\r
-            # self.PWM_backlight.open()\r
-            EventMesh.publish("set_storage_config", ["brightness_level",self.level])\r
-        \r
-        \r
-    class getStorageDataManager(Abstract):#获取内存数据\r
-        def __init__(self):\r
-            self.config_data = {}\r
-            check = ql_fs.path_exists("/usr/static/storage_file/config.json")\r
-            if check == True:\r
-                with open("/usr/static/storage_file/config.json","r") as fd:\r
-                    self.config_data = ujson.load(fd)\r
-            else :\r
-                self.config_data = {'old_time': 0, 'flip_sw': 0}\r
-                pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_storage_data", self.set_storage_data)\r
-            EventMesh.subscribe("set_storage_config", self.set_storage_config)\r
-            EventMesh.subscribe("get_storage_data", self.get_storage_data)\r
-            EventMesh.subscribe("get_storage_config", self.get_storage_config)\r
-\r
-        def set_storage_data(self, event, msg): \r
-            # EventMesh.debug_log("set_storage_data:{}".format(msg))\r
-            if msg != None:\r
-                self.config_data = msg\r
-                with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:\r
-                    ujson.dump(self.config_data,fd)\r
-        \r
-\r
-        def set_storage_config(self,event,msg): \r
-            # EventMesh.debug_log("set_storage_key_data1:{}".format(msg))\r
-            if len(msg) >= 2:\r
-                self.config_data[msg[0]]=msg[1]\r
-                # EventMesh.debug_log("set_storage_key_data2:{}".format(self.config_data[msg[0]]))\r
-                EventMesh.publish("publish_message_event_ui",{"func":self.set_storage_save,"data":0})\r
-        def set_storage_save(self, data): \r
-            with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:\r
-                ujson.dump(self.config_data,fd)\r
-        def get_storage_data(self, event, msg): \r
-            # EventMesh.debug_log("get_storage_data:{}".format(self.config_data))\r
-            return self.config_data \r
-        def get_storage_config(self,event,msg):\r
-            # EventMesh.debug_log("get_storage_key_data1:{}".format(msg))\r
-            b = msg in self.config_data.keys()\r
-            if b == True:\r
-                # EventMesh.debug_log("get_storage_key_data2:{}".format(self.config_data[msg]))\r
-                return self.config_data[msg]\r
-            else :\r
-                return None\r
-            # try:\r
-            #     return self.config_data[msg]\r
-            # except:\r
-            #     EventMesh.debug_log("get_storage_key_data:none key:{}",msg)\r
-            #     return None\r
-    #定位频率\r
-    class getUpLoadDataManager(Abstract):#\r
-        def __init__(self):\r
-            self.upload_time = 2*60*60\r
-            read_data = EventMesh.publish("get_storage_config","upload_time")\r
-            if read_data != None:\r
-                self.upload_time = read_data \r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_upload_data", self.set_upload_data)\r
-            EventMesh.subscribe("get_upload_data", self.get_upload_data)\r
-\r
-        def set_upload_data(self, event, msg): \r
-            self.upload_time = msg\r
-\r
-        def get_upload_data(self, event, msg): \r
-            if self.upload_time == None:\r
-                self.upload_time = 2*60*60\r
-            return self.upload_time \r
-\r
-    class getplayAudiodStateManager(Abstract):#获取设置播放音频状态\r
-        def __init__(self):\r
-            self.play = 0\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_audio_state", self.set_audio_state)\r
-            EventMesh.subscribe("get_audio_state", self.get_audio_state)\r
-\r
-        def set_audio_state(self, event, msg): \r
-            self.play = msg\r
-\r
-        def get_audio_state(self, event, msg): \r
-            return self.play\r
-        \r
-    class getVolumSizeManager(Abstract):#设置或获取音量大小数据\r
-        def __init__(self):\r
-            self.volume_size = 8\r
-            read_data = EventMesh.publish("get_storage_config","volum")\r
-            if read_data != None:\r
-                self.volume_size = read_data\r
-        \r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_volum_size", self.set_volum_size)\r
-            EventMesh.subscribe("get_volum_size", self.get_volum_size)\r
-\r
-        def set_volum_size(self, event, msg): \r
-            self.volume_size = msg\r
-            EventMesh.publish("set_storage_config", ["volum",self.volume_size])\r
-\r
-        def get_volum_size(self, event, msg): \r
-            return self.volume_size\r
-\r
-    class getSosFlagManager(Abstract):#设置sos\r
-        def __init__(self):\r
-            self.aud = audio.Audio(0)\r
-            self.sos_flag = 0\r
-            self.sos_num = 0\r
-            self.hangup_mode = 0\r
-            self.call_timer = osTimer()\r
-            self.sos_numer1 = []\r
-            self.callnumer =""\r
-            SOS_NUMBER1 = EventMesh.publish("get_storage_config","SOS_NUMBER1")\r
-            if SOS_NUMBER1 != None:\r
-                self.sos_numer1 = SOS_NUMBER1\r
-            SOS_NUMBER2 = EventMesh.publish("get_storage_config","SOS_NUMBER2")\r
-            if SOS_NUMBER2 != None:        \r
-                self.sos_numer1 = [SOS_NUMBER1, SOS_NUMBER2]\r
-\r
-            SOS_NUMBER3 = EventMesh.publish("get_storage_config","SOS_NUMBER3")\r
-            if SOS_NUMBER3 != None:        \r
-                self.sos_numer1 = [SOS_NUMBER1, SOS_NUMBER2,SOS_NUMBER3]\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_sos_flag", self.set_sos_flag)#设置sos拨打标识\r
-            EventMesh.subscribe("get_sos_flag", self.get_sos_flag)\r
-\r
-            EventMesh.subscribe("set_sos_num", self.set_sos_num)#设置拨打循环次数\r
-            EventMesh.subscribe("get_sos_num", self.get_sos_num)\r
-\r
-            EventMesh.subscribe("set_dial_sos_number", self.set_dial_sos_number)\r
-            EventMesh.subscribe("get_dial_sos_number", self.get_dial_sos_number)#设置家庭号码三个\r
-\r
-            EventMesh.subscribe("set_callnumer_cb", self.set_callnumer_cb)#延时回调\r
-\r
-            EventMesh.subscribe("close_call_time",self.close_call_time)\r
-\r
-            EventMesh.subscribe("set_hangup_mode", self.set_hangup_mode)\r
-            EventMesh.subscribe("get_hangup_mode", self.get_hangup_mode)#获取挂断方式 是对方挂断 还是手表按键主动挂断\r
-\r
-        def get_hangup_mode(self, event, msg): # 1是设备端手表主动挂断 0是手机端\r
-            return self.hangup_mode\r
-        \r
-        def set_hangup_mode(self, event, msg): \r
-            self.hangup_mode = msg\r
-\r
-        def set_sos_flag(self, event, msg): \r
-            self.sos_flag = msg\r
-            EventMesh.publish("set_sos_state_out")\r
-            if self.sos_flag == 1:\r
-                number = EventMesh.publish("get_dial_sos_number")\r
-            \r
-                if number != None:\r
-                    if len(number) > 0:\r
-                        self.call_timer.stop()\r
-                        EventMesh.publish("save_phonename",number[0])\r
-                        EventMesh.publish("save_phonenum",number[0])\r
-                        EventMesh.publish("set_sos_num",0)\r
-                        phone_num = EventMesh.publish("get_phonenum")  \r
-                        EventMesh.publish("sos_out_call_center_cb",phone_num)#电话拨出去\r
-                    else:\r
-                        EventMesh.publish("sos_out_call_center_cb",None)#电话拨出去\r
-\r
-        def set_callnumer_cb(self, event, msg):\r
-            if self.sos_flag == 1:\r
-                EventMesh.publish("set_sos_state_out")\r
-                self.callnumer = msg\r
-                self.call_timer.start(5000, 0, self.call_timer_cb)#延迟10S 继续拨打\r
-\r
-        def call_timer_cb(self, *args, **kwargs):\r
-            EventMesh.publish("set_sos_state_out")\r
-            flag = EventMesh.publish("get_call_state") \r
-            fall_down = EventMesh.publish("get_fall_down_state")#跌倒报警标识\r
-            video_state = EventMesh.publish("get_video_state")\r
-            if flag != 0 or fall_down != 0 or video_state != 0:#防止不会被中断不会继续拨打sos号码正在通话或者打电话中,跌倒报警 视频通话中不允许拨打sos\r
-                if self.sos_flag == 1:\r
-                    self.call_timer.start(5000, 0, self.call_timer_cb)#延迟10S 继续拨打\r
-                    return\r
-                else:\r
-                    self.call_timer.stop()\r
-                    return\r
-\r
-            if self.sos_flag == 1:\r
-                self.call_timer.stop()\r
-                EventMesh.publish("save_phonename",str(self.callnumer))\r
-                EventMesh.publish("save_phonenum",str(self.callnumer))\r
-                phone_num = EventMesh.publish("get_phonenum")  \r
-                EventMesh.publish("sos_out_call_center_cb",phone_num)#电话拨出去\r
-            else:\r
-                self.call_timer.stop()\r
-        \r
-        def close_call_time(self, event, msg): \r
-            self.call_timer.stop()\r
-\r
-        def get_sos_flag(self, event, msg): \r
-            return self.sos_flag\r
-        \r
-        def set_sos_num(self, event, msg): \r
-            self.sos_num = msg\r
-\r
-        def get_sos_num(self, event, msg): \r
-            return self.sos_num\r
-        \r
-        def set_dial_sos_number(self, event, msg): \r
-            self.sos_numer1 = msg\r
-            \r
-\r
-        def get_dial_sos_number(self, event, msg): \r
-            return self.sos_numer1\r
-    class getLowBatManager(Abstract):#低电提醒\r
-        def __init__(self):\r
-\r
-            self.low_btn = 0\r
-            read_data = EventMesh.publish("get_storage_config","low_on")\r
-            if read_data != None:\r
-                self.low_btn = read_data\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_low_bat_btn", self.set_low_bat_btn)#\r
-            EventMesh.subscribe("get_low_bat_btn", self.get_low_bat_btn)\r
-\r
-        def set_low_bat_btn(self, event, msg): \r
-            self.low_btn = msg\r
-            EventMesh.publish("set_storage_config",["low_on",self.low_btn])\r
-\r
-        def get_low_bat_btn(self, event, msg): \r
-            return self.low_btn\r
-        \r
-\r
-\r
-    class playPowerAudioManager(Abstract):#播放开关机音频文件\r
-        def __init__(self):\r
-            self.aud = audio.Audio(0)\r
-\r
-        def post_processor_after_instantiation(self):\r
-            \r
-            EventMesh.subscribe("play_poewr_on_event", self.play_poewr_on_event)#\r
-            EventMesh.subscribe("play_poewr_off_event", self.play_poewr_off_event)\r
-\r
-        def play_poewr_on_event(self, event, msg): \r
-            self.aud.play(1, 1, 'U:/static/R_POWER_1.mp3')  #播放播放开机铃声\r
-\r
-        def play_poewr_off_event(self, event, msg): \r
-            self.aud.setVolume(11)\r
-            self.aud.play(1, 1, 'U:/static/R_POWER_OFF_1.mp3')  #播放关机铃声\r
-        \r
-    class getBootOffManager(Abstract):#开关机时间\r
-        def __init__(self):\r
-            self.poweroff_time = []\r
-            read_data = EventMesh.publish("get_storage_config","poweroff_alarm")\r
-            if read_data != None:\r
-                self.poweroff_time = read_data\r
-            else:\r
-                self.poweroff_time = [{"poweroff_on":0,"start_hour":6,"start_min":0,"end_hour":0,"end_min":0}]\r
-            \r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_boot_off_time", self.set_boot_off_time)#设置关机时间\r
-            EventMesh.subscribe("get_boot_off_time", self.get_boot_off_time)\r
-\r
-        def set_boot_off_time(self, event, msg): \r
-            EventMesh.debug_log("set_boot_off_time",msg)\r
-\r
-            EventMesh.publish("set_storage_config",["poweroff_alarm",msg])\r
-            self.poweroff_time = msg\r
-            EventMesh.publish("set_rtc_alarm")\r
-\r
-\r
-        def get_boot_off_time(self, event, msg):\r
-            return self.poweroff_time\r
-    class setSmsIndexManager(Abstract):#\r
-        def __init__(self):\r
-            self.index = -1\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_sms_index", self.set_sms_index)#设置关机时间\r
-            EventMesh.subscribe("get_sms_index", self.get_sms_index)\r
-\r
-        def set_sms_index(self, event, msg): \r
-            self.index = msg\r
-            \r
-\r
-        def get_sms_index(self, event, msg):\r
-            \r
-            return self.index\r
-    import protocol \r
-    class testSmsSetIPManager(Abstract):#\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-            #大锤\r
-            severdata = protocol.server_init()\r
-\r
-            self.newip = severdata[0]\r
-            self.newcom = severdata[1]\r
-            self.new_key = severdata[2]\r
-            self.new_pid = severdata[3]\r
-            \r
-            EventMesh.debug_log("testSmsSetIPManager:{}\n".format(severdata))\r
-\r
-            self.server_sate = 0\r
-\r
-\r
-\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_ip_addr")\r
-            if tmp_data != None:\r
-                self.newip = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_com")\r
-            if tmp_data != None:\r
-                self.newcom = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_md5")\r
-            if tmp_data != None:\r
-                self.newmd5 = tmp_data    \r
-\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_key")\r
-            if tmp_data != None:\r
-                self.new_key = tmp_data \r
-\r
-            tmp_data = EventMesh.publish("get_storage_config","set_new_pid")\r
-            if tmp_data != None:\r
-                self.new_pid = tmp_data \r
-\r
-            tmp_data = EventMesh.publish("get_storage_config","get_server_sate")\r
-            if tmp_data != None:\r
-                self.server_sate = tmp_data \r
-            \r
-            \r
-\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_new_ip_com", self.set_new_ip_com)#设置关机时间\r
-            EventMesh.subscribe("get_new_ip_com", self.get_new_ip_com)\r
-\r
-            EventMesh.subscribe("set_ip", self.set_ip)#设置关机时间\r
-            EventMesh.subscribe("get_ip", self.get_ip)\r
-\r
-            EventMesh.subscribe("set_com", self.set_com)#设置关机时间\r
-            EventMesh.subscribe("get_com", self.get_com)\r
-\r
-            EventMesh.subscribe("get_new_key", self.get_new_key_cb)#获取key\r
-            EventMesh.subscribe("set_new_key", self.set_new_key_cb)#获取key\r
-\r
-            EventMesh.subscribe("set_new_pid", self.set_new_pid_cb)#获取pid\r
-            EventMesh.subscribe("get_new_pid", self.get_new_pid_cb)#获取pid\r
-\r
-            EventMesh.subscribe("set_server_state", self.set_server_state)#\r
-            EventMesh.subscribe("get_server_state", self.get_server_state)#\r
-\r
-            EventMesh.subscribe("get_new_key_pid", self.get_new_key_pid)#\r
-\r
-\r
-\r
-        def set_new_key_cb(self, event, msg): \r
-            self.new_key = msg\r
-            # print("set_new_key_cb",msg,self.new_key)\r
-            EventMesh.publish("set_storage_config",["set_new_key",self.new_key])\r
-\r
-        def get_new_key_cb(self, event, msg):\r
-            # print("get_new_key_cb",self.new_key)\r
-            return self.new_key\r
-        \r
-        def set_new_pid_cb(self, event, msg): \r
-            self.new_pid = msg\r
-            # print("set_new_pid_cb",msg,self.new_pid)\r
-            EventMesh.publish("set_storage_config",["set_new_pid",self.new_pid])\r
-\r
-        def get_new_pid_cb(self, event, msg):\r
-            # print("get_new_pid_cb",self.new_pid)\r
-            return self.new_pid\r
-\r
-        def set_new_ip_com(self, event, msg): \r
-            self.newip = str(msg[0])\r
-            self.newcom = int(msg[1])\r
-            # self.newmd5 = str(msg[2])\r
-            #短信格式:SETIP:api.xcloudtech.com:9000:bZld0ALsZTt15tKEZhOlLPgbsO75BLTP 以冒号分隔 SETIP:ip地址:ip端口号:ip密钥key\r
-\r
-            # self.read_data["set_new_md5"] = self.newmd5  #通过短信设置ip的key密钥\r
-        \r
-\r
-            EventMesh.publish("set_storage_config",["set_new_ip_addr",self.newip])\r
-            EventMesh.publish("set_storage_config",["set_new_com",self.newcom])\r
-\r
-\r
-            number = str(msg[2])\r
-            sms.sendPduMsg(number, 'set ok', 'UCS2')\r
-            self.timer.start(10*1000,0,self.fun)\r
-            \r
-        def fun(self,*argc):\r
-            Power.powerRestart()\r
-\r
-        def get_new_ip_com(self, event, msg):\r
-            tmp_addr = EventMesh.publish("get_storage_config","set_new_ip_addr")\r
-            tmp_com = EventMesh.publish("get_storage_config","set_new_com")\r
-            if tmp_addr != None:\r
-                self.newip = tmp_addr\r
-            if tmp_com != None:\r
-                self.newcom = tmp_com\r
-            return [self.newip,self.newcom]\r
-        \r
-        def set_ip(self, event, msg): \r
-            self.newip = msg\r
-            EventMesh.publish("set_storage_config",["set_new_ip_addr",self.newip])\r
-\r
-        def get_ip(self, event, msg):\r
-            # print("get_ip",self.newip)\r
-            return self.newip\r
-        \r
-        def set_com(self, event, msg): \r
-            self.newcom = msg\r
-            EventMesh.publish("set_storage_config",["set_new_com",self.newcom])\r
-\r
-        def get_com(self, event, msg):\r
-            # print("get_com",self.newcom)\r
-            return self.newcom\r
-\r
-        def get_new_key_pid(self, event, msg):\r
-            return [self.new_key,self.new_pid]\r
-        \r
-        def set_server_state(self, event, msg):\r
-            EventMesh.publish("set_storage_config",["get_server_sate",msg])\r
-            self.server_sate = msg\r
-\r
-        def get_server_state(self, event, msg):\r
-            return self.server_sate\r
-            \r
-\r
-    # MMI Version:UIX8910_C55_DS_D12G_PRO18_FZD_V1.0_Release\r
-    # Build:07-07-2022 16:12:58\r
-    # IMEI:861218001025267\r
-    # IP:api.xcloudtech.com\r
-    # PORT:9000\r
-    # UPLOAD:300\r
-    # Battery:3948, 64\r
-    # Udebug: 0\r
-    # ConnectTime: 7\r
-    import protocol\r
-\r
-    class sendDevinfoManager(Abstract):#发送设备信息\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-            pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("send_devinfo_event", self.send_devinfo_event)#删除短信\r
-\r
-        def send_devinfo_event(self, event, msg): \r
-            number = str(msg)\r
-            versions = EventMesh.softversion\r
-            Build = EventMesh.builTime\r
-            IMEI = EventMesh.publish(constants.EVENT.GET_IMEI)\r
-            IP = ""\r
-            new_ip = EventMesh.publish("get_storage_config","set_new_ip_addr")\r
-            new_com = EventMesh.publish("get_storage_config","set_new_com")\r
-            server_data = protocol.server_init()\r
-        \r
-            if new_ip != None:\r
-                if len(new_ip) != 0:\r
-                    IP = new_ip\r
-                else:\r
-                    IP = server_data[0]\r
-            else:\r
-                IP = server_data[0]\r
-            \r
-            PORT = ""\r
-            if new_com != None:\r
-                if len(str(new_com)) != 0:\r
-                    PORT = str(new_com)\r
-                else:\r
-                    PORT = str(server_data[1])\r
-            else:\r
-                PORT = str(server_data[1])\r
-            \r
-            UPLOAD = EventMesh.publish("get_upload_data")\r
-\r
-            level = EventMesh.publish("get_curr_battery_level")\r
-            if level == None:\r
-                level = 4200\r
-            bat = EventMesh.publish("screen_get_battery")[1]\r
-            if bat == None:\r
-                bat = 100\r
-            Battery = str(level) +',' +  str(bat)\r
-\r
-            ConnectTime = heartbeat_time//60\r
-            data1 = "Version:{}\nBuild:{}".format(versions,Build)\r
-\r
-            data2 = "IMEI:{}\nIP:{}\nPORT:{}".format(IMEI,IP,PORT)\r
-            \r
-            data3 = "UPLOAD:{}\nBattery:{}\nConnectTime:{}".format(UPLOAD,Battery,ConnectTime)\r
-\r
-            send_state1 = -1\r
-            send_state2 = -1\r
-            # print("data",data1,data2,data3)\r
-            send_state1 = sms.sendPduMsg(number, data1, 'UCS2')\r
-\r
-            if send_state1 == 0:\r
-                send_state2 = sms.sendPduMsg(number, data2, 'UCS2')\r
-\r
-            if send_state2 == 0:\r
-                sms.sendPduMsg(number, data3, 'UCS2')\r
-            \r
-\r
-    class deleteSmsManager(Abstract):#删除信息\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-            pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("delete_sms_event", self.delete_sms_event)#删除短信\r
-            EventMesh.subscribe("remove_all_sms_cb", self.remove_all_sms_cb)#\r
-\r
-        def delete_sms_event(self, event, msg): \r
-            self.timer.start(4*1000,0,self.fun)\r
-            \r
-        def fun(self, *argc): \r
-            EventMesh.publish_async("remove_all_sms_cb","",1*1024)\r
-\r
-        def remove_all_sms_cb(self, event, msg):\r
-            sms.deleteMsg(1,4)\r
-\r
-    #闹钟信息\r
-    alarm_list = [{'hour': 6, 'repeart': 10, 'idx': 0, 'enabled': 1, 'days': [0,1,2,3,4,5,6], 'minute': 0},\r
-                {'hour': 0, 'repeart': 10, 'idx': 1, 'enabled': 1, 'days': [0,1,2,3,4,5,6], 'minute': 0}]\r
-    #用于显示闹钟列表不包含开关机信息\r
-\r
-    class ClockManager(Abstract):\r
-        def __init__(self):\r
-            super().__init__()\r
-            self.rtc = RTC()\r
-            self.days = 0\r
-            self.idx = 0\r
-\r
-            IFEXIST = ql_fs.path_exists("/usr/static/storage_file/alarm_msg.json") \r
-            self.check_alarm_list = []     \r
-            if IFEXIST == True:\r
-                with open("/usr/static/storage_file/alarm_msg.json","r",encoding='utf-8') as fd:\r
-                    self.check_alarm_list = ujson.load(fd)\r
-            \r
-            EventMesh.subscribe("push_clock_info", self.set)\r
-            EventMesh.subscribe("read_alarminjson", self.read_alarminjson)\r
-            EventMesh.subscribe("add_alarm", self.add_alarm)\r
-            EventMesh.subscribe("remove_alarm", self.remove_alarm)\r
-            EventMesh.subscribe("set_rtc_alarm", self.set_rtc_alarm)\r
-            EventMesh.subscribe("get_alarm_indx", self.get_alarm_indx)\r
-            EventMesh.subscribe("get_check_alarm_list", self.get_check_alarm_list)\r
-            EventMesh.subscribe("push_update_alarm_show", self.update_show_info)\r
-\r
-        def post_processor_after_instantiation(self):\r
-        \r
-            EventMesh.publish("read_alarminjson")\r
-            # EventMesh.publish("set_rtc_alarm")\r
-        \r
-        def update_show_info(self,event,msg):\r
-            EventMesh.publish("read_alarminjson")\r
-            # EventMesh.publish("set_rtc_alarm")\r
-\r
-        def get_check_alarm_list(self, event, msg):\r
-            alarm_len = 0\r
-            global alarm_list\r
-            EventMesh.publish("read_alarminjson")\r
-            alarm_len = len(alarm_list)\r
-            return alarm_len\r
-\r
-\r
-        def set(self, event, msg):\r
-            global alarm_list\r
-            EventMesh.debug_log("msg = {}".format(msg))\r
-            idx = msg.get("idx")\r
-            EventMesh.debug_log("修改第{}个闹钟信息{}".format(idx,alarm_list[idx]))\r
-            alarm_list[idx]["hour"] = msg["hour"]\r
-            alarm_list[idx]["minute"] = msg["minute"]\r
-            alarm_list[idx]["days"] = msg["days"]\r
-            alarm_list[idx]["enabled"] = msg["enabled"]\r
-            alarm_list[idx]["repeart"] = msg["repeart"]\r
-            with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:\r
-                ujson.dump(alarm_list,fd)\r
-\r
-        def read_alarminjson(self, event, msg):\r
-            IFEXIST = ql_fs.path_exists("/usr/static/storage_file/alarm_msg.json") \r
-            global alarm_list     \r
-            EventMesh.debug_log("IFEXIST:{}".format(IFEXIST))\r
-            if IFEXIST == True:\r
-                with open("/usr/static/storage_file/alarm_msg.json","r",encoding='utf-8') as fd:\r
-                    alarm_list = ujson.load(fd)\r
-\r
-            \r
-            # read_data = EventMesh.publish("get_storage_config","off_on")\r
-\r
-            hour1 = str(alarm_list[0]["hour"])+':'+str(alarm_list[0]["minute"])\r
-            # min1 = str(alarm_list[0]["minute"])\r
-\r
-            hour2 = str(alarm_list[1]["hour"])+':'+str(alarm_list[1]["minute"])\r
-            # min2 = str(alarm_list[1]["minute"]) \r
-            # EventMesh.publish("set_boot_off_time",[1,hour1,hour2])\r
-\r
-            EventMesh.debug_log("hour1:{}-{}".format(hour1,hour2))\r
-\r
-            \r
-            return alarm_list\r
-\r
-        def add_alarm(self, event, msg):\r
-\r
-            global alarm_list\r
-            EventMesh.publish("read_alarminjson")\r
-            EventMesh.debug_log("msg:{}".format(msg))\r
-            for i in range(0,2):#开关机固定是 idx 0 1\r
-                off_msg1 = msg[i+1]\r
-                msg_tmp1 = off_msg1.split(':')\r
-                start_hour = int(msg_tmp1[0])\r
-                start_min = int(msg_tmp1[1])\r
-                enable = int(msg[0])\r
-                EventMesh.debug_log("start_hour:{} start_min:{} enable:{}",start_hour,start_min,enable)\r
-                # EventMesh.publish("set_boot_off_time",[msg[0],msg[1],msg[2]])\r
-\r
-                alarm_list[i]["idx"]=i\r
-                alarm_list[i]["hour"]=start_hour\r
-                alarm_list[i]["minute"]=start_min\r
-                alarm_list[i]["days"]=[0,1,2,3,4,5,6]\r
-                alarm_list[i]["enabled"]=enable\r
-                alarm_list[i]["repeart"]=10\r
-\r
-\r
-                # alarm_list.append({"idx": i, "hour": start_hour, "minute": start_min, "days":[0,1,2,3,4,5,6], "enabled": enable,"repeart":10})\r
-\r
-            \r
-            # EventMesh.debug_log("alarm_list----len- :{} alarm_list:{}".format(len(alarm_list),alarm_list))\r
-            with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:\r
-                ujson.dump(alarm_list,fd)\r
-            EventMesh.publish("push_update_alarm_show")\r
-            \r
-        \r
-                \r
-            \r
-\r
-\r
-        def remove_alarm(self, event, msg):\r
-            global alarm_list\r
-            EventMesh.debug_log("ddddddddddddddddddd:",msg)\r
-            idx = msg.get("idx")\r
-            EventMesh.debug_log("delete_here1-----{},{}:".format(idx,msg))\r
-\r
-            for i, alarm in enumerate(alarm_list):\r
-                EventMesh.debug_log("delete_here2-----{},{}:".format(i,alarm))\r
-\r
-                if alarm["idx"] == idx:\r
-                    del alarm_list[i]\r
-                    EventMesh.debug_log("delete_here3-----",alarm_list)\r
-\r
-                    #删除闹钟后,对idx重新排序\r
-                    if alarm_list:\r
-                        for j in range(i,len(alarm_list)):\r
-                            alarm_list[j]["idx"] -= 1\r
-                            EventMesh.debug_log("delete_here4-----",alarm_list)\r
-\r
-            with open("/usr/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:\r
-                ujson.dump(alarm_list,fd)\r
-\r
-\r
-        def get_alarm_indx(self,event,msg):\r
-            return self.idx\r
-\r
-        def _rtc_callback(self,args):\r
-            #设置下一个闹钟,定时开关机功能\r
-            msg_data = EventMesh.publish("get_boot_off_time")\r
-            if msg_data != None:\r
-                power_offdata = msg_data[0]\r
-                start_hour = int(power_offdata["start_hour"])\r
-                start_min = int(power_offdata["start_min"])\r
-                end_hour = int(power_offdata["end_hour"])\r
-                end_min = int(power_offdata["end_min"])\r
-                off_on = int(power_offdata["poweroff_on"])\r
-\r
-                rtc_now_time = self.rtc.datetime()\r
-                current_minute = rtc_now_time[4]*60 + rtc_now_time[5]\r
-                end_min_total = end_hour*60+end_min\r
-                next_minute = start_hour*60+start_min #10:11\r
-                EventMesh.debug_log("off_on:{} {} {}".format(off_on,current_minute,next_minute))\r
-                if off_on != None:\r
-                    if off_on == 1:\r
-                        if end_min_total == current_minute:#结束的时间分钟等于关机时间分钟数则关机\r
-                            ubs_state = EventMesh.publish("get_usb")#'\r
-                            \r
-                            if ubs_state == 2 or ubs_state == 0:\r
-\r
-                                if next_minute > current_minute:#开机时间大于当前时间 9:00 > = 8:00 \r
-                                    interval_minute = next_minute - current_minute\r
-                                    \r
-                                    EventMesh.debug_log("开机距离下一次响铃的的分钟数:", interval_minute,next_minute)\r
-                                else:#8:00 9:00\r
-                                    #7*60*24 7天一个周期 7*60*24 - \r
-                                    interval_minute = next_minute + (24*60-current_minute)\r
-                                    EventMesh.debug_log("开机08888距离下一次响铃的的分钟数:", interval_minute,next_minute)\r
-\r
-                                #反向获取时间戳\r
-                                time = utime.localtime()\r
-                                EventMesh.debug_log("开机9获取utime的时间戳:", time)\r
-                                rtc_mktime = utime.mktime(time)-time[5]\r
-                                EventMesh.debug_log("开机10反向获取utime的mktime:", rtc_mktime)\r
-\r
-                                #加上下一次响铃需要的时间\r
-                                next_alarm_mktime = rtc_mktime + interval_minute*60 #转换成s单位 时间戳\r
-                                EventMesh.debug_log("开机11下一次响铃的mktime:", next_alarm_mktime)\r
-\r
-                                #格式化时间戳,得到下一次闹钟的时间\r
-                                next_alarm_time = utime.localtime(next_alarm_mktime)\r
-                                EventMesh.debug_log("开机12下一次响铃的准确时间:", next_alarm_time)\r
-                                #将时间转换为rtc的格式\r
-                                data_l = [2021, 7, 9, 5, 12, 30, 0, 0]\r
-                                #给rtc时间赋值\r
-                                data_l[0] = next_alarm_time[0] #year\r
-                                data_l[1] = next_alarm_time[1] #month                    \r
-                                data_l[2] = next_alarm_time[2] #day                     \r
-                                data_l[4] = next_alarm_time[3] #hour               \r
-                                data_l[5] = next_alarm_time[4] #minute   \r
-                                data_e=tuple(data_l)\r
-                                EventMesh.debug_log("开机13将该时间转换为RTC元组:", data_e)\r
-                                \r
-                                self.rtc.register_callback(self._rtc_callback)\r
-\r
-                                FLAG = self.rtc.set_alarm(data_e)\r
-                                if FLAG == 0:\r
-                                    EventMesh.debug_log("开机11成功设置rtc的到期时间:", data_e)\r
-                                else:\r
-                                    EventMesh.debug_log("开机时设置rtc的到期时间失败:", data_e)\r
-                                self.rtc.enable_alarm(1)\r
-                                \r
-                                EventMesh.debug_log("结束时设置rtc的到期时间失败:", data_e)\r
-                                EventMesh.publish("open_power_on", 5)#静音关机\r
-                                return\r
-                            else:\r
-                                EventMesh.publish("set_rtc_alarm")\r
-                                #self.rtc.datetime([2023, 12, 1, 5, 5, 59, 30, 0])\r
-                                return\r
-                \r
-            EventMesh.publish("set_rtc_alarm")\r
-\r
-\r
-        def set_rtc_alarm(self,event,msg):\r
-            msg_data = EventMesh.publish("get_boot_off_time")\r
-            if msg_data != None:\r
-                power_offdata = msg_data[0]\r
-                start_hour = int(power_offdata["start_hour"])\r
-                start_min = int(power_offdata["start_min"])\r
-                end_hour = int(power_offdata["end_hour"])\r
-                end_min = int(power_offdata["end_min"])\r
-                off_on = int(power_offdata["poweroff_on"])\r
-                if off_on == 1:\r
-                    next_minute = start_hour*60+start_min #10:11\r
-\r
-                    start_total = start_hour*60+start_min #10:11\r
-                    end_total = end_hour*60+end_min #10:11\r
-                    rtc_now_time = self.rtc.datetime()\r
-                    current_minute = rtc_now_time[4]*60 + rtc_now_time[5]#当前时间\r
-\r
-\r
-                    minute_list = []\r
-                    if start_total != current_minute:\r
-                        minute_list.append(start_total)#23*60=\r
-                    if end_total != current_minute:\r
-                        minute_list.append(end_total)\r
-                    minute_list.append(current_minute)#[927,927,930]\r
-                    minute_list = sorted(minute_list)\r
-                    current_index = minute_list.index(current_minute)\r
-                    print("minute_list",minute_list,start_total,end_total,current_index,power_offdata)\r
-                    \r
-                    \r
-                    next_index = current_index + 1\r
-                    if next_index >= len(minute_list):\r
-                        next_minute = minute_list[0]\r
-                        print("07下一个闹钟的分钟数:", next_minute)\r
-                    else:\r
-                        next_minute = minute_list[next_index]\r
-                        print("08下一个闹钟的分钟数:", next_minute)\r
-\r
-                    print("minute_list1",minute_list,current_index,next_minute)\r
-                    if next_minute > current_minute:\r
-                        interval_minute = next_minute - current_minute\r
-                        print("09距离下一次响铃的的分钟数:", interval_minute)#14 31 14 29 14 31 24*60-\r
-                    else:\r
-                        interval_minute = (24*60 - current_minute) + next_minute\r
-                        print("10距离下一次响铃的的分钟数:", interval_minute)\r
-\r
-\r
-                    #反向获取时间戳\r
-                    time = utime.localtime()\r
-                    EventMesh.debug_log("关机09获取utime的时间戳:", time)\r
-                    time\r
-                    rtc_mktime = utime.mktime(time)-time[5]\r
-                    EventMesh.debug_log("关机10反向获取utime的mktime:", rtc_mktime)\r
-\r
-                    #加上下一次响铃需要的时间\r
-                    next_alarm_mktime = rtc_mktime + interval_minute*60 #转换成s单位 时间戳\r
-                    EventMesh.debug_log("关机11下一次响铃的mktime:", next_alarm_mktime)\r
-\r
-                    #格式化时间戳,得到下一次闹钟的时间\r
-                    next_alarm_time = utime.localtime(next_alarm_mktime)\r
-                    EventMesh.debug_log("关机12下一次响铃的准确时间:", next_alarm_time)\r
-                    #将时间转换为rtc的格式\r
-                    data_l = [2021, 7, 9, 5, 12, 30, 0, 0]\r
-                    #给rtc时间赋值\r
-                    data_l[0] = next_alarm_time[0] #year\r
-                    data_l[1] = next_alarm_time[1] #month                    \r
-                    data_l[2] = next_alarm_time[2] #day                     \r
-                    data_l[4] = next_alarm_time[3] #hour               \r
-                    data_l[5] = next_alarm_time[4] #minute   \r
-                    data_e=tuple(data_l)\r
-                    EventMesh.debug_log("关机13将该时间转换为RTC元组:", data_e)\r
-                    \r
-                    self.rtc.register_callback(self._rtc_callback)\r
-\r
-                    FLAG = self.rtc.set_alarm(data_e)\r
-                    if FLAG == 0:\r
-                        EventMesh.debug_log("关机11成功设置rtc的到期时间:", data_e)\r
-                    else:\r
-                        EventMesh.debug_log("关机时设置rtc的到期时间失败:", data_e)\r
-                    self.rtc.enable_alarm(1)\r
-                else:\r
-                    self.rtc.enable_alarm(0)\r
-                    \r
-\r
-    class schoolclassManager(Abstract):#\r
-        def __init__(self):\r
-            # ['火星情报局', '一年级二班', '柠檬茶']\r
-            self.school_name = ''\r
-            self.class_name = ''\r
-            self.full_name = ''\r
-            tmp_data = EventMesh.publish("get_storage_config","school_name")\r
-            if tmp_data != None:\r
-                self.school_name = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","class_name")\r
-            if tmp_data != None:\r
-                self.class_name = tmp_data\r
-            tmp_data = EventMesh.publish("get_storage_config","full_name")\r
-            if tmp_data != None:\r
-                self.full_name = tmp_data    \r
-\r
-            \r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_schoolname", self.set_school_name)#\r
-            EventMesh.subscribe("get_schoolname", self.get_school_name)\r
-\r
-            EventMesh.subscribe("set_classname", self.set_classname)#\r
-            EventMesh.subscribe("get_classname", self.get_classname)\r
-\r
-            EventMesh.subscribe("set_fullname", self.set_full_name)#\r
-            EventMesh.subscribe("get_fullname", self.get_full_name)\r
-\r
-        def set_school_name(self, event, msg): \r
-            if msg != None:\r
-                if len(msg) != 0:\r
-                    self.school_name = str(msg)\r
-                    EventMesh.publish("set_storage_config",["school_name",str(msg)])\r
-            \r
-\r
-        def get_school_name(self, event, msg):\r
-            if self.school_name:\r
-                return self.school_name\r
-            else:\r
-                return None\r
-        \r
-        def set_classname(self, event, msg): \r
-            if msg != None:\r
-                if len(msg) != 0:\r
-                    self.class_name = str(msg)\r
-                    EventMesh.publish("set_storage_config",["class_name",str(msg)])\r
-                \r
-            \r
-        def get_classname(self, event, msg):\r
-            if self.class_name:\r
-                return self.class_name\r
-            else:\r
-                return None\r
-        def set_full_name(self, event, msg): \r
-            if msg != None:\r
-                if len(msg) != 0:\r
-                    self.full_name = str(msg)\r
-                    EventMesh.publish("set_storage_config",["full_name",str(msg)])\r
-\r
-        def get_full_name(self, event, msg):\r
-            if self.full_name:\r
-                return self.full_name\r
-            else:\r
-                return None\r
-            \r
-    \r
-    class vedioInforManager(Abstract):#\r
-        def __init__(self):\r
-            self.call_id = ""\r
-            self.meet_id = ""#会议id\r
-            self.call_type = 0 #会议id\r
-            self.tokens_data= ""#tokens\r
-            self.timer = osTimer()\r
-            self.videobook = {}\r
-            self.check_json = 0\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/videobook.json")\r
-\r
-            if self.check_json == True:\r
-                with open("/usr/static/storage_file/videobook.json","r",encoding="utf-8") as fd:\r
-                    self.videobook = ujson.load(fd)\r
-                    print("读取视频通话账号列表")\r
-            \r
-            self.video_state = 0\r
-            self.video_count = 0\r
-            self.video_state_time = 0\r
-\r
-            self.video_dev_mode = 0\r
-\r
-            self.video_led_state = 0\r
-            self.video_answer = 0\r
-\r
-            self.video_timer = 0\r
-\r
-            self.video_init = 0\r
-            self.video_network_end = 0 #网络不好或者信号较差菊风底层挂断当前视频通话\r
-            self.videoInfo_queue = Queue()\r
-            _thread.stack_size(10*1024)\r
-            _thread.start_new_thread(self.videoInfo_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            EventMesh.subscribe("publish_message_event_videoInfo",self.publish_message_event_videoInfo)\r
-            pass\r
-\r
-        def videoInfo_queue_thread(self):\r
-            while True:\r
-                data = self.videoInfo_queue.get()\r
-                #EventMesh.debug_log("ledInfo_queue:data = {}".format(data))\r
-                if data != None:\r
-                    try:\r
-                        data["func"](data["data"])\r
-                    except Exception as e:\r
-                        EventMesh.debug_log("ledInfo_queue:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-        def publish_message_event_videoInfo(self,event,msg):\r
-            self.videoInfo_queue.put(msg)\r
-\r
-        def publish_led_event_cb(self, *args, **kwargs):\r
-            EventMesh.publish("publish_message_event_videoInfo",{"func":self.video_time_cb,"data":0})\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_vedio_call_id", self.set_vedio_call_id)#\r
-            EventMesh.subscribe("set_vedio_meet_id", self.set_vedio_meet_id)#\r
-            EventMesh.subscribe("set_vedio_call_type", self.set_vedio_call_type)#\r
-            EventMesh.subscribe("set_vedio_tokens_data", self.set_vedio_tokens_data)#\r
-\r
-            EventMesh.subscribe("get_vedio_call_id", self.get_vedio_call_id)#\r
-            EventMesh.subscribe("get_vedio_meet_id", self.get_vedio_meet_id)#\r
-            EventMesh.subscribe("get_vedio_call_type", self.get_vedio_call_type)#\r
-            EventMesh.subscribe("get_vedio_tokens_data", self.get_vedio_tokens_data)#\r
-\r
-\r
-            EventMesh.subscribe("open_vedio_infor",self.open_vedio_infor)\r
-            EventMesh.subscribe("close_jrtc_event",self.close_jrtc_event)\r
-\r
-            EventMesh.subscribe("get_videobook_list", self.get_videobook_list)\r
-            EventMesh.subscribe("set_videobook_list", self.set_videobook_list)\r
-\r
-            EventMesh.subscribe("set_video_state", self.set_video_state)\r
-            EventMesh.subscribe("get_video_state", self.get_video_state)\r
-\r
-            EventMesh.subscribe("set_dev_app_mode", self.set_dev_app_mode)\r
-            EventMesh.subscribe("get_dev_app_mode", self.get_dev_app_mode)\r
-\r
-            EventMesh.subscribe("close_video_timer",self.close_video_timer)\r
-\r
-            EventMesh.subscribe("call_viode_book_num",self.call_viode_book_num)\r
-\r
-            EventMesh.subscribe("app_rtalk_cb",self.app_rtalk_cb)#app拒绝视频通话\r
-\r
-            EventMesh.subscribe("video_answer_cb",self.video_answer_cb)#接听视频通话\r
-\r
-            EventMesh.subscribe("video_newwork_reject_cb",self.video_newwork_reject_cb)#端挂断视频通话\r
-            EventMesh.subscribe("video_dev_reject_cb",self.video_dev_reject_cb)#手表端挂断视频或者语音通话\r
-\r
-            EventMesh.subscribe("video_no_network",self.video_no_network)#打着突然掉网或者未绑定设备 每10s检测一次\r
-\r
-            EventMesh.subscribe("clear_video_timer_state",self.clear_video_timer_state)\r
-\r
-            EventMesh.subscribe("set_vedio_init",self.set_vedio_init)\r
-            \r
-\r
-            EventMesh.subscribe("set_app_dev_end_state",self.set_app_dev_end_state)#设置是app 设备 还是主动信号不好的挂断当前的视频通话\r
-            EventMesh.subscribe("get_app_dev_end_state",self.get_app_dev_end_state)#设置是app 设备 还是主动信号不好的挂断当前的视频通话\r
-\r
-        def set_video_state(self, event, msg):#视频通话 1是刚播进去 2 是手机拨进去 3是正在加入中 5是已接通出现画面\r
-            self.video_state = msg\r
-\r
-        def get_video_state(self, event, msg):\r
-            return self.video_state\r
-        \r
-        def set_dev_app_mode(self, event, msg):#设置是手表拨 还是手机app拨视频通话 0未拨打 1是手表设备端  2 手机app拨打视频通话\r
-            self.video_dev_mode = msg\r
-\r
-        def get_dev_app_mode(self, event, msg):\r
-            return self.video_dev_mode\r
-        \r
-        def get_videobook_list(self, event, msg):\r
-            self.check_json = ql_fs.path_exists("/usr/static/storage_file/videobook.json")\r
-            return [self.check_json,self.videobook]\r
-        \r
-        def set_videobook_list(self, event, msg):\r
-            print("videolist",msg)\r
-            self.check_json = msg[0]\r
-            self.videobook = msg[1]\r
-\r
-        def call_viode_book_num(self, event, msg):#默认拨打视频通话列表第一个\r
-            self.video_led_state = 0\r
-            self.video_network_end = 0\r
-            EventMesh.publish("clear_video_timer_state")\r
-            if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#未联网提示关机\r
-                if len(self.videobook) != 0:#已联网未添加账号\r
-                    phonebook_keys = sorted(self.videobook.keys())\r
-                    name = self.videobook[phonebook_keys[0]]\r
-                    key_tmp = phonebook_keys[0][4:]\r
-                    print("key_tmp list",key_tmp)\r
-                    print("calling",key_tmp)\r
-                    EventMesh.publish("set_vedio_call_id", key_tmp)#\r
-                    EventMesh.publish("set_vedio_call_type", 1)#\r
-                    EventMesh.publish("set_video_state", 1)#\r
-                    EventMesh.publish("set_dev_app_mode", 1)#\r
-                    EventMesh.publish("close_hr_sop2")##在测试心率血氧 血压体温是关闭测试\r
-                    EventMesh.publish("video_call_out_cb",1)#视频通话拨进中\r
-                    EventMesh.publish(constants.PROTOCOL.AGTALK_SEND,[1,key_tmp])\r
-                else:\r
-                    EventMesh.publish("video_call_out_cb",None)#视频通话拨进中\r
-                    print("no video list")\r
-                    pass\r
-            else:\r
-                EventMesh.publish("set_sim_mode")#\r
-                pass\r
-        \r
-\r
-            \r
-        def set_vedio_call_id(self, event, msg): \r
-            self.call_id = msg\r
-\r
-        def set_vedio_meet_id(self, event, msg): \r
-            self.meet_id = msg\r
-\r
-        def set_vedio_call_type(self, event, msg): \r
-            self.call_type = msg\r
-\r
-        def set_vedio_tokens_data(self, event, msg): \r
-            self.tokens_data= msg\r
-            \r
-\r
-        def get_vedio_call_id(self, event, msg): \r
-            return self.call_id\r
-        \r
-        def get_vedio_meet_id(self, event, msg): \r
-            return self.meet_id\r
-        \r
-        def get_vedio_call_type(self, event, msg): \r
-            return self.call_type\r
-        \r
-        def get_vedio_tokens_data(self, event, msg): \r
-            return self.tokens_data\r
-\r
-        def set_vedio_init(self, event, msg): \r
-            self.video_init = 0\r
-\r
-        def open_vedio_infor(self,event,msg):\r
-            if self.video_init == 0:\r
-                self.video_init = 1\r
-                EventMesh.publish(constants.EVENT.SYSTEM_UP)#唤醒休眠\r
-                call_id = EventMesh.publish("get_vedio_call_id")#对方的账号\r
-                meet_id = EventMesh.publish("get_vedio_meet_id")#共有的会议id\r
-                call_type = EventMesh.publish("get_vedio_call_type")#呼叫类型\r
-                tokens_data = EventMesh.publish("get_vedio_tokens_data")#tookens数据#云米平台不需要tokens\r
-            \r
-\r
-\r
-                \r
-                uid = str(call_id)\r
-                ticket = str(meet_id)\r
-\r
-                # data = ['6951832', '876226002021444', '1', '01lqlyqzQ4Gozdz8OJv1Mij2Y3PBq2y3+rtIA26Ge+m2QHTc/Vk=gufkGNMBiYhPjbq1tLCwtLKysLKws7a2tg==']\r
-\r
-                tokens = str(tokens_data)\r
-                appkey = "efe9f8800a39d96244234097"#\r
-                uid_key = "25v9C652123QL3N8"\r
-\r
-                # appkey = "249e7d505516af0a7ed44097"\r
-                # uid_key = "qQI4gkB9FxH8J2cb"\r
-                imei = EventMesh.publish(constants.EVENT.GET_IMEI)\r
-                oneself_id = str(imei)#自己的账号默认是imei号\r
-\r
-            \r
-                \r
-                print("uid ",uid,ticket,oneself_id)\r
-\r
-                \r
-                self.video_count = 0\r
-                self.video_state_time = 0\r
-                self.video_led_state = 0\r
-                self.video_answer = 0\r
-                self.video_timer = 0\r
-                self.timer.start(1*1000,1,self.publish_led_event_cb)\r
-            \r
-\r
-        def video_time_cb(self,data):#1s定时器 实时监测视频通话的状态 3是拨进未接通 5是接通出画面了\r
-            EventMesh.publish("system_sleep_rest")#防止黑屏 \r
-            call_state = 1\r
-            video_state = EventMesh.publish("get_video_state")#这个函数获取为了防止不进回调不置0\r
-            get_video_state = EventMesh.publish("get_video_in_out_state")\r
-            dev_mode = EventMesh.publish("get_dev_app_mode")\r
-            if self.video_led_state == 1 or self.video_timer == 1:#手表挂断不在进入\r
-                self.timer.stop()\r
-                return\r
-\r
-            if video_state != 0 or call_state != 0:\r
-                if get_video_state == 0 and call_state != 0:#双方接通如果是信号不好就开始计算30 30s过后还没有出画面就挂断当前视频通话\r
-                    self.video_count+=1\r
-                    if self.video_count > 30:\r
-                        if call_state != 5:\r
-                            self.video_state = 0\r
-                            self.video_state_time = 0\r
-                            self.timer.stop()\r
-                            EventMesh.publish("video_newwork_reject_cb",5)#挂断视频通话\r
-                            return\r
-\r
-                if call_state == 5:#已经接通出画面了\r
-                    self.video_count = 0\r
-                    self.video_answer = 4\r
-                    EventMesh.publish("set_video_in_out_state",0)\r
-                    if self.video_state_time == 0:\r
-                        self.video_state_time = 1\r
-                        EventMesh.publish("stop_led_timer")#设置参数\r
-                        EventMesh.publish("close_timer_all")#\r
-                        EventMesh.publish("video_answer_mode_timer_cb",2)#\r
-\r
-                    EventMesh.publish("set_video_state", 5)\r
-                else:\r
-                    self.video_state_time = 0 \r
-                    if call_state != 0:#信号不好的时候正在接听\r
-                        EventMesh.publish("set_video_state", call_state)\r
-\r
-                        if call_state == 4:\r
-                            EventMesh.publish("stop_led_timer")#设置参数\r
-                            EventMesh.publish("close_timer_all")#\r
-\r
-                        if dev_mode != 0:\r
-                            if get_video_state == 0 and call_state != 4 and self.video_answer == 0:\r
-                                EventMesh.publish("video_answer_mode_timer_cb",3)#\r
-                        \r
-                    if call_state == 0:\r
-                        self.timer.stop()\r
-                        EventMesh.publish("video_newwork_reject_cb",1)\r
-            else:\r
-                self.video_state_time = 0\r
-                self.video_count = 0\r
-                self.timer.stop()\r
-                EventMesh.publish("set_video_state", 0)\r
-                EventMesh.publish("video_newwork_reject_cb",1)\r
-\r
-        def video_waite_event_time_cb(self,*argc):#正在接听中,请稍候\r
-            EventMesh.publish("video_answer_mode_timer_cb",1)\r
-            pass\r
-\r
-        def video_answer_event_time_cb(self,*argc):#对方已接听可以正常视频通话了\r
-            EventMesh.publish("video_answer_mode_timer_cb",2)\r
-            pass\r
-        def video_no_network(self,event,msg):#视频通话无网络\r
-            if EventMesh.publish(constants.EVENT.GET_CONNECT) == 0:#\r
-                if EventMesh.publish("get_video_state") != 0:\r
-                    EventMesh.publish("video_newwork_reject_cb",None)\r
-                pass\r
-\r
-\r
-        def close_video_timer(self,event,msg):\r
-            self.timer.stop()\r
-            pass\r
-        def close_jrtc_event(self,event,msg):\r
-            \r
-            pass\r
-\r
-\r
-        def video_answer_cb(self,event,msg):#手表端拒绝视频通话\r
-            EventMesh.publish("stop_led_timer")#关闭亮灯模式\r
-            EventMesh.publish("close_timer_all")##关闭统一的计时器\r
-            EventMesh.publish("set_video_in_out_state",0)\r
-            EventMesh.publish("open_vedio_infor")#启动视频通话的SDK相关配置\r
-\r
-        \r
-        def clear_video_timer_state(self,event,msg):#清除标识\r
-            self.video_timer = 0\r
-            self.video_network_end = 0\r
-        \r
-        def video_newwork_reject_cb(self,event,msg):#信号不好底层SDK挂断\r
-            if self.video_led_state != 2:#2表示app挂断\r
-                if self.video_network_end == 1:\r
-                    return\r
-                self.video_network_end = 1\r
-                self.video_timer = 1\r
-                self.video_init = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("close_timer_all")#\r
-                EventMesh.publish("close_video_timer")\r
-                EventMesh.publish("set_video_state", 0)\r
-                EventMesh.publish("set_dev_app_mode", 0)\r
-                EventMesh.publish("set_video_in_out_state",0)\r
-                call_id = str(EventMesh.publish("get_vedio_call_id"))#\r
-                meet_id = str(EventMesh.publish("get_vedio_meet_id"))#\r
-                call_type = int(EventMesh.publish("get_vedio_call_type"))#\r
-\r
-                \r
-                if self.video_led_state == 0:\r
-                    EventMesh.publish("video_answer_mode_timer_cb",4)#提示对方已挂断\r
-                    EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])\r
-\r
-\r
-        def video_dev_reject_cb(self,event,msg):#手表主动挂断\r
-            if self.video_timer == 0:\r
-                self.video_init = 0\r
-                EventMesh.publish("stop_led_timer")#设置参数\r
-                EventMesh.publish("close_timer_all")#\r
-                EventMesh.publish("close_video_timer")\r
-                EventMesh.publish("set_video_state", 0)\r
-                EventMesh.publish("set_dev_app_mode", 0)\r
-                EventMesh.publish("set_video_in_out_state",0)\r
-                call_id = str(EventMesh.publish("get_vedio_call_id"))#\r
-                meet_id = str(EventMesh.publish("get_vedio_meet_id"))#\r
-                call_type = int(EventMesh.publish("get_vedio_call_type"))#\r
-\r
-                self.video_led_state = 1\r
-                self.video_timer = 1\r
-                EventMesh.publish(constants.PROTOCOL.RCALLING_SEND,[call_id,meet_id,call_type])\r
-\r
-\r
-            \r
-        def set_app_dev_end_state(self,event,msg):#app拒绝视频通话\r
-            self.video_led_state = 0 #手表挂断不在进入\r
-\r
-        def get_app_dev_end_state(self,event,msg):#app拒绝视频通话\r
-            return self.video_led_state #手表挂断不在进入\r
-\r
-        def app_rtalk_cb(self,event,msg):#app拒绝视频通话\r
-            dev_mode = EventMesh.publish("get_dev_app_mode")#如果是app主动挂断需要提示音频文件\r
-            video_state = EventMesh.publish("get_video_state")#清除视频通话状态\r
-            if self.video_led_state != 0 or self.video_timer != 0:#手表挂断不在进入\r
-                return\r
-            \r
-            self.video_init = 0\r
-            self.video_timer = 1\r
-            self.video_led_state = 2\r
-            EventMesh.publish(constants.EVENT.SYSTEM_UP)#\r
-\r
-            EventMesh.publish("stop_led_timer")#设置参数\r
-            EventMesh.publish("close_timer_all")#\r
-            EventMesh.publish("close_video_timer")\r
-            EventMesh.publish("set_dev_app_mode", 0)\r
-            EventMesh.publish("set_video_state",0)#清除视频通话状态\r
-            EventMesh.publish("set_video_in_out_state",0)#清除视频通话拨进还是拨出的状态\r
-            EventMesh.publish("video_answer_mode_timer_cb",4)##提示对方已挂断\r
-\r
-\r
-    def jrtc_cb(close_sta):#注册回调\r
-        print("jrtc callback:", close_sta)\r
-        if close_sta == 0 or close_sta == 1:\r
-            EventMesh.publish("set_video_state", 0)\r
-            EventMesh.publish("set_video_in_out_state",0)\r
-            EventMesh.publish("set_vedio_init")\r
-\r
-\r
-\r
-    import fota\r
-    class firwDownloadManager(Abstract):#\r
-        def __init__(self):\r
-            self.timer = osTimer()\r
-\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("firware_download", self.firware_download)#\r
-\r
-        def firware_download(self, event, msg): \r
-            number = str(msg)\r
-            sms.sendPduMsg(number, 'set ok', 'UCS2')\r
-            self.timer.start(10*1000,0,self.fun)\r
-\r
-        def fun(self,*argc):\r
-            fota_obj = fota()\r
-            fota_obj.httpDownload(url1="http://u-oss.thisiot.com/test/dfota_1.bin",url2="http://u-oss.thisiot.com/test/dfota_2.bin")\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/tiktok_rtc_demo.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/tiktok_rtc_demo.py
deleted file mode 100644 (file)
index 50ee875..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-import dataCall\r
-import utime as time\r
-import TiktokRTC\r
-import atcmd\r
-import _thread\r
-\r
-from machine import Pin\r
-\r
-PA = Pin.GPIO29\r
-\r
-def show_freemem():\r
-    while True:\r
-        print("Remaining memory: ",_thread.get_heap_size())\r
-        print("\n")\r
-        time.sleep(50)\r
-\r
-\r
-def enable_pid2():\r
-    resp = bytearray(50)\r
-    atcmd.sendSync('AT+qicsgp=2,1,3gnet,"","",0\r\n',resp,'',20)\r
-    atcmd.sendSync('at+cgact=1,2\r\n',resp,'',20)\r
-\r
-def ai_callback(args):\r
-    global GPIO39\r
-    event = args[0]\r
-    msg = args[1]\r
-    if event == 1:\r
-        print('TIKTOK_RTC_EVENT_START')\r
-        GPIO39.write(1)\r
-    elif event == 2:\r
-        print('TIKTOK_RTC_EVENT_STOP')\r
-        GPIO39.write(0)\r
-    elif event == 3:\r
-        print('TIKTOK_RTC_EVENT_TTS_TEXT {}'.format(msg))\r
-        #call.stopAudioService()\r
-    elif event == 4:\r
-        print('TIKTOK_RTC_EVENT_ASR_TEXT {}'.format(msg))\r
-        #call.stopAudioService()\r
-    elif event == 5:\r
-        print('TIKTOK_RTC_EVENT_ERROR {}'.format(msg))\r
-    else:\r
-        print('TIKTOK_RTC_EVENT UNKNOWN {}'.format(event))\r
-\r
-while True:\r
-    lte = dataCall.getInfo(1, 0)\r
-    if lte[2][0] == 1:\r
-        print('lte network normal')\r
-        break\r
-    print('wait lte network normal...')\r
-    time.sleep(3)\r
-\r
-_thread.start_new_thread(show_freemem, ())\r
-\r
-enable_pid2()\r
-\r
-tiktok = TiktokRTC(3000000, ai_callback)\r
-\r
-GPIO39 = Pin(PA, Pin.OUT, Pin.PULL_DISABLE, 0)\r
-time.sleep(2)\r
-tiktok.config(volume=11)\r
-print('volume: {}'.format(tiktok.config('volume')))\r
-tiktok.active(True)\r
-# time.sleep(40)\r
-# print("tiktok.active(False)")\r
-# tiktok.active(False)\r
-# time.sleep(2)\r
-# print("tiktok.active(True1)")\r
-# tiktok.active(True)\r
-# print("tiktok.active(True2)")
\ No newline at end of file
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/R_READ_TIME_AB.mp3 b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/R_READ_TIME_AB.mp3
deleted file mode 100644 (file)
index a82319c..0000000
Binary files a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/R_READ_TIME_AB.mp3 and /dev/null differ
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/ai_test.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/ai_test.py
deleted file mode 100644 (file)
index 2c4043a..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-import uwebsocket\r
-import _thread\r
-import utime\r
-import usys\r
-import ujson\r
-# json_data = \\r
-#         {\r
-#             "id": "123456895461254",\r
-#             "event_type": "transcriptions.update",\r
-#             "data": {\r
-#                 "input_audio": {         #输入音频格式\r
-#                     "format": "pcm",       #输入音频格式,支持 pcm/wav/ogg。默认 wav\r
-#                     "codec": "pcm",         #输入音频编码。 pcm/opus。默认 pcm\r
-#                     "samplate_rate": 24000,  #采样率\r
-#                     "channel": 1, #通道数\r
-#                     "bit_depth": 16 #位深\r
-#                 },\r
-#             }\r
-#         }\r
-json_data =\\r
-{\r
-       "header": {\r
-               "trace_id": "x70g1n8gfdg",\r
-               "event": "Start"\r
-       },\r
-       "payload": {\r
-               "device_id": "test_device_id",\r
-               "user_agent": "python",\r
-               "dialog_id": "",\r
-               "in_format": "pcm",\r
-               "out_format": "pcm",\r
-               "in_sample_rate": 16000,\r
-               "volume": "10",\r
-               "sample_rate": 16000,\r
-               "voice": "zh_female_shuangkuaisisi_moon_bigtts",\r
-               "voice_detection": "disable"\r
-       }\r
-}\r
-url="wss://ws.coze.cn/v1/chat"\r
-url="wss://ws.coze.cn/v1/chat?bot_id=7462617881076351002"\r
-url = "ws://118.145.158.207:22080/voice-chat/v2/ws?is_auth=0"\r
-#url="wss://ws.coze.cn/v1/audio/speech"\r
-print("url:{}".format(url))\r
-Headers = {"Authorization":"Bearer pat_SSaiOzccrRLaQEaB4sdshvHZQzqjeWD5jq2GWPVoWRx4N8XcdraHWYqdDjK5zpR1"}\r
-s_client = uwebsocket.Client.connect(url, headers=Headers, debug=True)\r
-def AI_client_asr_recv(cli):\r
-        while True:\r
-            try:\r
-                # 死循环接收数据\r
-                \r
-                utime.sleep_ms(1)\r
-                recv_data = cli.recv()\r
-                print("AI_client_asr_recv:recv_data={}".format(recv_data))\r
-                if not recv_data:\r
-                    # 服务器关闭连接或客户端关闭连接\r
-                    print("cli close")\r
-                    cli.close()\r
-                    break\r
-            except Exception as e:\r
-                    \r
-                    usys.print_exception(e)\r
-                    break\r
-AI_client_asr_recv_id = _thread.start_new_thread(AI_client_asr_recv, (s_client,))\r
-s_client.send(ujson.dumps(json_data))\r
-print("send:{}".format(ujson.dumps(json_data)))\r
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/test.mp3 b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/test.mp3
deleted file mode 100644 (file)
index 52644cc..0000000
Binary files a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/test.mp3 and /dev/null differ
diff --git a/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/test1.py b/2.sdk/project/7PIN_1_5/sdk/services/microPython/ports/quectel/core/usr/test1.py
deleted file mode 100644 (file)
index f9d5e8c..0000000
+++ /dev/null
@@ -1,3854 +0,0 @@
-from common import Abstract, LogAdapter\r
-import EventMesh\r
-import uwebsocket\r
-import usys\r
-import gc\r
-import urandom\r
-import uhashlib\r
-import ubinascii\r
-import ujson\r
-import osTimer\r
-import _thread\r
-from queue import Queue\r
-import utime\r
-import audio\r
-import uos\r
-from machine import Pin\r
-from machine import ExtInt\r
-from machine import WDT\r
-import modem\r
-import sim\r
-import net\r
-import base64\r
-import ucryptolib\r
-import urandom as random\r
-import request\r
-import ql_fs\r
-from misc import Power,USB,PowerKey\r
-import ntptime\r
-import machine\r
-import dataCall\r
-import constants\r
-import versions\r
-import VAD\r
-#dev_type = "G10"\r
-#dev_type = "7PIN_BK"#小瑞\r
-dev_type = "7PIN"#柒牌\r
-#dev_type = 'momo'#食梦貘\r
-#dev_type = 'sjgq'#四季甘泉\r
-#dev_type = 'szbst'#深圳百事通\r
-\r
-class AI_led(Abstract):\r
-    def __init__(self):\r
-        if dev_type == "G10":\r
-            self.led_red = Pin(Pin.GPIO36, Pin.OUT, Pin.PULL_PD, 0)\r
-            self.led_green = Pin(Pin.GPIO44, Pin.OUT, Pin.PULL_PD, 1)\r
-            self.led_blue = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_PD, 1)\r
-        else:\r
-            self.led_red = Pin(Pin.GPIO36, Pin.OUT, Pin.PULL_PD, 0)\r
-            self.led_green = Pin(Pin.GPIO21, Pin.OUT, Pin.PULL_PD, 1)\r
-            self.led_blue = Pin(Pin.GPIO19, Pin.OUT, Pin.PULL_PD, 1)\r
-\r
-        #=1 红灯闪,=2白灯闪,=3绿灯闪,=4全部灯闪\r
-        self.led_flicker_flag = 0\r
-        self.led_flicker_on_off_flag = 0\r
-        self.led_flicker_timer = osTimer()\r
-        \r
-        EventMesh.subscribe("open_led_red",self.open_led_red)\r
-        EventMesh.subscribe("open_led_blue",self.open_led_blue)\r
-        EventMesh.subscribe("open_led_green",self.open_led_green)\r
-        EventMesh.subscribe("open_led_all",self.open_led_all)\r
-        EventMesh.subscribe("open_led_red_blue",self.open_led_red_blue)\r
-        EventMesh.subscribe("open_led_red_green",self.open_led_red_green)\r
-        EventMesh.subscribe("flicker_led_red",self.flicker_led_red)\r
-        EventMesh.subscribe("flicker_led_blue",self.flicker_led_blue)\r
-        EventMesh.subscribe("flicker_led_green",self.flicker_led_green)\r
-        EventMesh.subscribe("flicker_led_all",self.flicker_led_all)\r
-        EventMesh.subscribe("close_led",self.close_led)\r
-        EventMesh.publish("open_led_red")\r
-\r
-    def flicker_led_red(self,event,msg):\r
-        self.led_flicker_flag = 1\r
-        self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)\r
-\r
-    def flicker_led_blue(self,event,msg):\r
-        self.led_flicker_flag = 2\r
-        self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)\r
-\r
-    def flicker_led_green(self,event,msg):\r
-        self.led_flicker_flag = 3\r
-        self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)\r
-\r
-    def flicker_led_all(self,event,msg):\r
-        self.led_flicker_flag = 4\r
-        self.led_flicker_timer.start(1500, 1, self.led_flicker_timer_cb)\r
-\r
-    def led_flicker_timer_cb(self, *args, **kwargs):\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.led_flicker_timer_cb_})  \r
-    def led_flicker_timer_cb_(self):\r
-        if self.led_flicker_flag == 0:\r
-            self.led_flicker_timer.stop()\r
-            return\r
-        if self.led_flicker_on_off_flag == 0:\r
-            self.led_red.write(0)\r
-            self.led_blue.write(0)\r
-            self.led_green.write(0)\r
-            self.led_flicker_on_off_flag = 1\r
-        else:\r
-            self.led_flicker_on_off_flag = 0\r
-            if self.led_flicker_flag == 1:\r
-                self.led_blue.write(0)\r
-                self.led_green.write(0)\r
-                self.led_red.write(1)\r
-            elif self.led_flicker_flag == 2:\r
-                self.led_red.write(0)\r
-                self.led_green.write(0)\r
-                self.led_blue.write(1)\r
-            elif self.led_flicker_flag == 3:\r
-                self.led_red.write(0)\r
-                self.led_blue.write(0)\r
-                self.led_green.write(1)\r
-            elif self.led_flicker_flag == 4:\r
-                self.led_blue.write(1)\r
-                self.led_green.write(1)\r
-                self.led_red.write(1)\r
-\r
-    def open_led_red(self,event,msg):\r
-        #print("open_led_red")\r
-        self.led_flicker_flag = 0\r
-        #self.led_red.write(0)\r
-        self.led_blue.write(0)\r
-        self.led_green.write(0)\r
-        self.led_red.write(1)\r
-\r
-    def open_led_blue(self,event,msg):\r
-        #print("open_led_blue")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(0)\r
-        #self.led_blue.write(0)\r
-        self.led_green.write(0)\r
-        self.led_blue.write(1)\r
-\r
-    def open_led_green(self,event,msg):\r
-        #print("open_led_green")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(0)\r
-        self.led_blue.write(0)\r
-        #self.led_green.write(0)\r
-        self.led_green.write(1)\r
-\r
-    def open_led_red_blue(self,event,msg):\r
-        #print("open_led_blue")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(1)\r
-        #self.led_blue.write(0)\r
-        self.led_green.write(0)\r
-        self.led_blue.write(1)\r
-\r
-    def open_led_red_green(self,event,msg):\r
-        #print("open_led_blue")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(1)\r
-        #self.led_blue.write(0)\r
-        self.led_green.write(1)\r
-        self.led_blue.write(0)\r
-\r
-    def open_led_all(self,event,msg):\r
-        #print("open_led_all")\r
-        self.led_flicker_flag = 0\r
-        #self.led_red.write(0)\r
-        self.led_blue.write(1)\r
-        self.led_green.write(1)\r
-        self.led_red.write(1)\r
-\r
-    def close_led(self,event,msg):\r
-        #print("close_led")\r
-        self.led_flicker_flag = 0\r
-        self.led_red.write(0)\r
-        self.led_blue.write(0)\r
-        self.led_green.write(0)\r
-\r
-audio_buf = ['chenggong', 'didianguanji', 'IMEIhao', 'jianquancuowu', 'key_prompt', 'liuliangtishi', 'Low_power_warning', 'R_CHARGE_FULL', 'R_CHARGE_IN', 'R_CHARGE_OUT', 'R_READ_TIME_0', 'R_READ_TIME_1', 'R_READ_TIME_2', 'R_READ_TIME_3', 'R_READ_TIME_4', 'R_READ_TIME_5', 'R_READ_TIME_6', 'R_READ_TIME_7', 'R_READ_TIME_8', 'R_READ_TIME_9', 'R_READ_TIME_A', 'R_READ_TIME_B', 'R_READ_TIME_C', 'R_READ_TIME_D', 'R_READ_TIME_E', 'R_READ_TIME_F', 'R_READ_TIME_G', 'R_READ_TIME_H', 'R_READ_TIME_I', 'R_READ_TIME_J', 'R_READ_TIME_K', 'R_READ_TIME_L', 'R_READ_TIME_M', 'R_READ_TIME_N', 'R_READ_TIME_O', 'R_READ_TIME_P', 'R_READ_TIME_Q', 'R_READ_TIME_R', 'R_READ_TIME_S', 'R_READ_TIME_T', 'R_READ_TIME_U', 'R_READ_TIME_V', 'R_READ_TIME_W', 'R_READ_TIME_X', 'R_READ_TIME_Y', 'R_READ_TIME_Z', 'send_tone', 'shouhou', 'xinhaoruo1', 'zhengzaiguanji']\r
-class AI_dev(Abstract):\r
-    # AI\r
-    def __init__(self):\r
-        self.is_wdt = 0 #是否开启看门狗\r
-\r
-        self.VBATT_tab = {"charge_full":4300,"100" :4250 ,  "90":4179 , "80":4070, "60": 3883, "40":3770, "20":3699,  "10":3652,"5":3600,}\r
-        self.KeyAI_status = 0\r
-        self.KeyAI_timer_count = 0\r
-        self.KeyAI_long_press = 0\r
-        self.KeyAI_press = 0\r
-        if self.is_wdt == 1:\r
-            self.wdt = WDT(30) #开启看门狗\r
-        # self.wdt_timer = osTimer()\r
-        # self.wdt_timer.start(5000, 1, self.wdt_timer_cb)\r
-        count = 0\r
-        while True:\r
-            count += 1\r
-            if count > 20 :\r
-                break\r
-            data = dataCall.getInfo(1, 0)\r
-            print("data call INFO {}".format(data))\r
-            if data[2][0]:\r
-                self.network_state = 1\r
-                break\r
-            print("等待网络 {}...".format(count))\r
-            utime.sleep_ms(500)\r
-        self.KeyAI_timer = osTimer()\r
-        if dev_type == "G10":\r
-            self.extint_AI = ExtInt(ExtInt.GPIO19,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.keyAI_extint_cb)\r
-            self.pwk_key = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.pwk_extint_cb)\r
-        else:\r
-            self.pwk_key = ExtInt(ExtInt.GPIO41, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.pwk_extint_cb)\r
-            #self.extint_AI = ExtInt(ExtInt.GPIO19,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.keyAI_extint_cb)\r
-            self.extint_AI = ExtInt(ExtInt.GPIO22,ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.keyAI_extint_cb)\r
-        self.extint_AI.enable()\r
-        self.pwk_key_status = 0\r
-        self.pwk_key_timer_count = 0\r
-        self.pwk_key_long_press = 0\r
-        self.pwk_key_press = 0\r
-        self.pwk_key_timer = osTimer()\r
-        #self.pwk_key = ExtInt(ExtInt.GPIO26, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_DISABLE, self.pwk_extint_cb)\r
-        \r
-        self.pwk_key.enable() \r
-        print("AI_dev:1")\r
-        self.btnInfo_queue = Queue(100)\r
-        self.btnInfo_queue_count = 0\r
-        _thread.stack_size(16*1024)\r
-        self.btnInfo_queue_thread_id = _thread.start_new_thread(self.btnInfo_queue_thread, ())\r
-        _thread.stack_size(8*1024)\r
-        EventMesh.subscribe("publish_AI_btnInfo",self.publish_AI_btnInfo)\r
-        EventMesh.subscribe("get_battery",self.get_battery)\r
-        EventMesh.subscribe("audio_montage_play",self.audio_montage_play)\r
-        EventMesh.subscribe("paly_iccid_imei",self.paly_iccid_imei)\r
-        EventMesh.subscribe("paly_device_res_error",self.paly_device_res_error)\r
-        EventMesh.subscribe("Power_off",self.pwk_key_Long_Press)\r
-        \r
-        print("AI_dev:2")\r
-        self.pk = PowerKey()\r
-        self.pk.powerKeyEventRegister(self.powerKey_callback)\r
-        self.usb = USB()\r
-        self.usb.setCallback(self.usb_event_cb)\r
-        self.usb_status = self.usb.getStatus()\r
-        self.usb_charge_flag = 0 \r
-        self.Low_power_warning_timer = 0\r
-        self.AI_dev_timer = osTimer()\r
-        self.AI_dev_timer.start(10000, 1, self.AI_dev_timer_cb)\r
-        print("AI_dev:AI_dev_timer")\r
-        self.aud = audio.Audio(0)\r
-        self.Low_power_warning_flag = 0\r
-        self.VC_TTS_volume =  EventMesh.publish("get_storage_config","VC_TTS_volume")#音量配置\r
-        if self.VC_TTS_volume == None:\r
-            self.VC_TTS_volume = 100\r
-        self.aud.setVolume(self.VC_TTS_volume //10)\r
-        #self.aud.play(1,0,'U:/static/xianyikaiji.mp3')#开机音频\r
-        #EventMesh.publish("audio_montage_play",["xianyikaiji.mp3"])\r
-        #EventMesh.publish("publish_AI_btnInfo",{"func":self.ntptime_cb})\r
-        self.check_rest_timer_count = 0\r
-        print("AI_dev:end")\r
-    def ntptime_cb(self):\r
-        #ntptime.settime(8)\r
-        print("timer:{}!!!!!!!!\r\n".format(utime.localtime()))\r
-    def usb_event_cb(self, state):\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.usb_event,"data":state})\r
-\r
-    def usb_event(self, state):    \r
-        status = state\r
-        self.usb_charge_flag = 0\r
-        if status == 1:#插入USB\r
-            print("charge R_CHARGE_in")\r
-            self.usb_status = 1\r
-            VC_satrt_flag = EventMesh.publish("get_VC_satrt_flag")#获取vc是否在运行\r
-            if VC_satrt_flag == None:\r
-                VC_satrt_flag = 0\r
-            if VC_satrt_flag == 0:\r
-                self.aud.stop()\r
-                #EventMesh.publish("flicker_led_red")#充电闪灯\r
-                #self.aud.play(1,1,'U:/static/R_CHARGE_IN.mp3')\r
-                EventMesh.publish("open_led_red")#充电红灯常亮\r
-                EventMesh.publish("audio_montage_play",["R_CHARGE_IN.mp3"])\r
-            self.Low_power_warning_flag  = 0\r
-            pass\r
-        elif status == 0:#拨出usbs\r
-            self.usb_status = 0\r
-            VC_satrt_flag = EventMesh.publish("get_VC_satrt_flag")#获取vc是否在运行\r
-            if VC_satrt_flag == None:\r
-                VC_satrt_flag = 0\r
-            if VC_satrt_flag == 0:\r
-                self.aud.stop()\r
-                EventMesh.publish("close_led")\r
-                EventMesh.publish("audio_montage_play",["R_CHARGE_OUT.mp3"])\r
-                #self.aud.play(1,1,'U:/static/R_CHARGE_OUT.mp3')\r
-    def btnInfo_queue_thread(self):\r
-        while True:\r
-            data = self.btnInfo_queue.get()\r
-            self.btnInfo_queue_count-=1\r
-            #EventMesh.debug_log("Info_queue:data = {}".format(data))\r
-            if data != None:\r
-                try:\r
-                    if "data" in data :\r
-                        data["func"](data["data"])\r
-                    else :\r
-                        data["func"]()\r
-                except Exception as e:\r
-                    #EventMesh.debug_log("btnInfo_queue:ERROR:{}".format(e))\r
-                    usys.print_exception(e)\r
-    def publish_AI_btnInfo(self,event,msg):\r
-        #print("publish_AI_btnInfo 1")\r
-        self.btnInfo_queue.put(msg)\r
-        self.btnInfo_queue_count+=1\r
-        if self.btnInfo_queue_count > 80:\r
-            self.btnInfo_queue_count =0\r
-            print("事件处理线程队列出问题,重启!!!!!!!!!!!!!!")\r
-            print("线程:{} 队列:{}".format(_thread.threadIsRunning(self.btnInfo_queue_thread_id),self.btnInfo_queue.size()))\r
-            # if _thread.threadIsRunning(self.btnInfo_queue_thread_id):\r
-            #     _thread.stop_thread(self.btnInfo_queue_thread_id)\r
-            # _thread.stack_size(10*1024)\r
-            # self.btnInfo_queue_thread_id = _thread.start_new_thread(self.btnInfo_queue_thread, ())\r
-            # _thread.stack_size(8*1024)\r
-            # self.btnInfo_queue.clear()\r
-            # self.btnInfo_queue = Queue(100)\r
-            EventMesh.publish("VC_error") #播放报错\r
-            utime.sleep_ms(1000)\r
-            self.aud.stopPlayStream()\r
-            self.aud.stopAll()\r
-            Power.powerRestart()\r
-            EventMesh.publish("set_storage_config",["powerRestart",1])\r
-        #print("publish_AI_btnInfo 2")\r
-    def powerKey_callback(self, status):\r
-        print("powerKey_callback:{}".format(status))\r
-\r
-    def pwk_extint_cb(self,args):#pwk\r
-        try:\r
-            self.pwk_key_status = int(args[1])\r
-            if self.pwk_key_status == 0:\r
-                self.pwk_key_status = 1\r
-            else:\r
-                self.pwk_key_status = 0\r
-                pass\r
-            if self.pwk_key_status == 0:#按下\r
-                \r
-                if self.pwk_key_press == 0 :\r
-                    self.pwk_key.disable()\r
-                    self.pwk_key_press = 1\r
-                    self.pwk_key_long_press = 0\r
-                    self.pwk_key_timer.start(100, 1, self.pwk_key_timer_cb)\r
-                    self.pwk_key_timer_count = 0\r
-                    #EventMesh.publish("AI_key_press")\r
-        except Exception as e: \r
-            usys.print_exception(e)\r
-    def pwk_key_timer_cb(self, *args, **kwargs):\r
-    #     EventMesh.publish("publish_AI_btnInfo",{"func":self.pwk_key_timer_cb_})\r
-    # def pwk_key_timer_cb_(self) :\r
-        try:\r
-            self.pwk_key_status = self.pwk_key.read_level()\r
-            self.pwk_key_timer_count +=1\r
-            if self.pwk_key_timer_count >= 10*3: #长按3s \r
-                #print("pwk_key_long_press {}".format(self.pwk_key_long_press))\r
-                if self.pwk_key_long_press == 0:\r
-                        self.pwk_key_long_press = 1\r
-                        #EventMesh.publish("AI_key_long_press")\r
-                        EventMesh.publish("audio_montage_play",["zhengzaiguanji.mp3"])\r
-                        #self.aud.play(1,0,'U:/static/zhengzaiguanji.mp3')#关机音频\r
-                        EventMesh.publish("open_led_red")\r
-                        utime.sleep_ms(2000)\r
-                        self.aud.stopPlayStream()\r
-                        self.aud.stopAll()\r
-                        Power.powerDown()\r
-                        #print("AI_key_release")\r
-                        #EventMesh.publish("pwk_key_long_press")\r
-                        #EventMesh.publish("publish_AI_btnInfo",{"func":self.pwk_key_Long_Press})  \r
-            if self.pwk_key_status == 1:#松开\r
-                #print("pwk_key_timer_cb:{}".format(self.pwk_key_timer_count))\r
-                key_count = 5\r
-                if dev_type == "7PIN_BK":\r
-                    key_count = 3\r
-                if self.pwk_key_timer_count >= key_count: #防抖200ms\r
-                    #EventMesh.publish("AI_key_release")\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.pwk_key_release})\r
-                    self.pwk_key.enable()\r
-                    self.pwk_key_timer.stop()\r
-                    self.pwk_key_timer_count = 0\r
-                    self.pwk_key_press = 0\r
-            \r
-        except Exception as e: \r
-            usys.print_exception(e) \r
-            \r
-    def keyAI_extint_cb(self,args):#call 2\r
-        try:\r
-            #print("AI_btn:keyAI_extint_cb{}".format(args[1]))\r
-            self.KeyAI_status = int(args[1])\r
-            if self.KeyAI_status == 0:\r
-                self.KeyAI_status = 1\r
-            else:\r
-                self.KeyAI_status = 0\r
-            \r
-            if self.KeyAI_status == 0:#按下\r
-                if self.KeyAI_press == 0 :\r
-                    EventMesh.publish(constants.EVENT.SYSTEM_UP)#唤醒休眠\r
-                    self.extint_AI.disable()\r
-                    self.KeyAI_press = 1\r
-                    self.KeyAI_long_press = 0\r
-                    self.KeyAI_timer.start(100, 1, self.KeyAI_timer_cb)\r
-                    self.KeyAI_timer_count = 0\r
-                    #EventMesh.publish("AI_key_press")\r
-                    if dev_type == "7PIN" :\r
-                        self.aud.aud_tone_play(10,200)#播放按键音\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_key_press})  \r
-        except Exception as e: \r
-            usys.print_exception(e)\r
-    def KeyAI_timer_cb(self, *args, **kwargs):\r
-    #     EventMesh.publish("publish_AI_btnInfo",{"func":self.KeyAI_timer_cb_})\r
-    # def KeyAI_timer_cb_(self):\r
-        try:\r
-            self.KeyAI_status = self.extint_AI.read_level()\r
-            self.KeyAI_timer_count +=1\r
-            if self.KeyAI_timer_count >= 10*1: #长按3s \r
-                if self.KeyAI_long_press == 0:\r
-                        self.KeyAI_long_press = 1\r
-                        #EventMesh.publish("AI_key_long_press")\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_key_long_press})  \r
-            if self.KeyAI_status == 1:#松开\r
-                #print("KeyAI_timer_cb:{}".format(self.KeyAI_timer_count))\r
-                key_count = 5\r
-                if dev_type == "7PIN_BK":\r
-                    key_count = 3\r
-                if self.KeyAI_timer_count >= key_count: #防抖200ms\r
-                    #EventMesh.publish("AI_key_release")\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_key_release})  \r
-                    self.extint_AI.enable()\r
-                    self.KeyAI_timer.stop()\r
-                    self.KeyAI_timer_count = 0\r
-                    self.KeyAI_press = 0\r
-            \r
-        except Exception as e: \r
-            usys.print_exception(e) \r
-       \r
-    def AI_key_press(self):\r
-        self.check_rest_timer_count = 0\r
-        print("AI_key_press")\r
-        EventMesh.publish("AI_key_press")\r
-\r
-    def AI_key_long_press(self):\r
-        self.check_rest_timer_count = 0\r
-        print("AI_key_long_press")\r
-        EventMesh.publish("AI_key_long_press")\r
-        \r
-    def AI_key_release(self):\r
-        print("AI_key_release")\r
-        EventMesh.publish("AI_key_release")\r
-        \r
-    def pwk_key_Long_Press(self,event=None,msg=None):\r
-        self.check_rest_timer_count = 0\r
-        print("pwk_key_long_press!!!!!!!")\r
-        print("pwk_key_long_press!!!!!!!")\r
-        \r
-        # EventMesh.publish("paly_iccid_imei")\r
-        # return\r
-        EventMesh.publish("audio_montage_play",["zhengzaiguanji.mp3"])\r
-        #self.aud.play(1,0,'U:/static/zhengzaiguanji.mp3')#关机音频\r
-        EventMesh.publish("open_led_red")\r
-        utime.sleep_ms(3000)\r
-        self.aud.stopPlayStream()\r
-        self.aud.stopAll()\r
-        Power.powerDown()\r
-        #print("AI_key_release")\r
-        #EventMesh.publish("pwk_key_long_press")\r
-        \r
-    def pwk_key_release(self):\r
-        self.check_rest_timer_count = 0\r
-        #print("pwk_key_release")\r
-        EventMesh.publish("pwk_key_release")\r
-\r
-    \r
-    def wdt_timer_cb(self, *args, **kwargs):\r
-        if self.is_wdt == 1:\r
-            self.wdt.feed()\r
-\r
-    def AI_dev_timer_cb(self, *args, **kwargs):\r
-        #print("AI_dev_timer_cb")\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_dev_timer_event})  \r
-    def AI_dev_timer_event(self):\r
-        if self.is_wdt == 1:\r
-            self.wdt.feed()\r
-        VC_satrt_flag = EventMesh.publish("get_VC_satrt_flag")#获取vc是否在运行\r
-        if VC_satrt_flag == None:\r
-            VC_satrt_flag = 0\r
-        Vbatt = Power.getVbatt()\r
-        if self.usb_status == 1 and VC_satrt_flag == 0:\r
-            EventMesh.publish("open_led_red")#充电红灯常亮\r
-        if  self.usb_status == 1 and Vbatt>=self.VBATT_tab["charge_full"]and VC_satrt_flag == 0:#充电充满\r
-            EventMesh.publish("open_led_green")\r
-            if self.usb_charge_flag == 0 :\r
-                EventMesh.publish("audio_montage_play",["R_CHARGE_FULL.mp3"])\r
-                #self.aud.play(1,0,'U:/static/R_CHARGE_FULL.mp3')#充电已满\r
-                self.usb_charge_flag = 1\r
-        if  self.usb_status == 0 and Vbatt<self.VBATT_tab["20"]and VC_satrt_flag == 0 and self.Low_power_warning_flag ==0:#低电报警\r
-            self.Low_power_warning_flag  = 1\r
-            EventMesh.publish("flicker_led_red")\r
-            #self.aud.play(1,0,'Low_power_warning.mp3')\r
-            # self.Low_power_warning_timer+=1\r
-            # if self.Low_power_warning_timer >= 2:\r
-            #     self.Low_power_warning_timer = 0\r
-            EventMesh.publish("audio_montage_play",["Low_power_warning.mp3"])\r
-\r
-        if  self.usb_status == 0 and Vbatt<self.VBATT_tab["5"]:    \r
-            EventMesh.publish("audio_montage_play",["didianguanji.mp3"])\r
-            utime.sleep_ms(4500)\r
-            self.aud.stopPlayStream()\r
-            self.aud.stopAll()\r
-            Power.powerDown()\r
-\r
-        self.check_rest_timer_count += 1\r
-        if self.check_rest_timer_count >= 8640:#24小时没按键,则关机\r
-            self.pwk_key_Long_Press()\r
-        \r
-    def get_battery(self, event=None, msg=None):\r
-        Vbatt = Power.getVbatt()\r
-        if Vbatt>self.VBATT_tab["90"]:\r
-            return 100\r
-        if Vbatt>self.VBATT_tab["80"]:\r
-            return 90\r
-        if Vbatt>self.VBATT_tab["60"]:\r
-            return 80\r
-        if Vbatt>self.VBATT_tab["40"]:\r
-            return 60\r
-        if Vbatt>self.VBATT_tab["20"]:\r
-            return 40\r
-        if Vbatt>self.VBATT_tab["10"]:\r
-            return 20\r
-        if Vbatt<=self.VBATT_tab["10"]:\r
-            return 10\r
-    def audio_montage_play(self,event,msg):\r
-        self.aud.stopPlayStream()\r
-        self.aud.stopAll()\r
-        str_data='mp3files='\r
-        for i in msg:\r
-            try:\r
-                str_tmp = i.replace(".mp3","")\r
-                str_data+="{}.mp3+".format(audio_buf.index(str_tmp))\r
-            except Exception as e:\r
-                    usys.print_exception(e)    \r
-        str_data = str_data[:-1]\r
-        print("audio_montage_play:{}".format(str_data))\r
-        self.aud.montage_play('U:/static/audio.bin',1,1,str_data)\r
-        \r
-    def paly_iccid_imei(self,event,msg):\r
-        str_data = 'mp3files={}.mp3+'.format(audio_buf.index("liuliangtishi"))#流量提示\r
-        imei  = modem.getDevImei()\r
-        iccid = sim.getIccid()\r
-        print("paly_iccid_imei:ICCID:{}".format(iccid))\r
-        if iccid != -1 and len(iccid) > 5:\r
-            iccid = iccid.upper()\r
-            if len(iccid) <20:\r
-                for i in range(20-len(iccid)):\r
-                    iccid = "0"+iccid\r
-            str_data += '{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+'.format(audio_buf.index("R_READ_TIME_{}".format(iccid[0]))\\r
-                ,audio_buf.index("R_READ_TIME_{}".format(iccid[1])),audio_buf.index("R_READ_TIME_{}".format(iccid[2])),audio_buf.index("R_READ_TIME_{}".format(iccid[3])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(iccid[4])),audio_buf.index("R_READ_TIME_{}".format(iccid[5])),audio_buf.index("R_READ_TIME_{}".format(iccid[6])),audio_buf.index("R_READ_TIME_{}".format(iccid[7])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(iccid[8])),audio_buf.index("R_READ_TIME_{}".format(iccid[9])),audio_buf.index("R_READ_TIME_{}".format(iccid[10])),audio_buf.index("R_READ_TIME_{}".format(iccid[11])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(iccid[12])),audio_buf.index("R_READ_TIME_{}".format(iccid[13])),audio_buf.index("R_READ_TIME_{}".format(iccid[14])),audio_buf.index("R_READ_TIME_{}".format(iccid[15])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(iccid[16])),audio_buf.index("R_READ_TIME_{}".format(iccid[17])),audio_buf.index("R_READ_TIME_{}".format(iccid[18])),audio_buf.index("R_READ_TIME_{}".format(iccid[19])))\r
-        str_data += '{}.mp3+'.format(audio_buf.index("shouhou"))#可联系售后解决,联系方式见售后客服电话是400-886-8777或到微信公众号柒牌SEVENBRAND自行充值:\r
-        self.aud.montage_play('U:/static/audio.bin',1,1,str_data)\r
-    #鉴权出错,播放imei号\r
-    def paly_device_res_error(self,event,msg):\r
-        str_data = 'mp3files={}.mp3+'.format(audio_buf.index("jianquancuowu"))#AI功能异常,请联系客户查询,设备号为:\r
-        imei  = modem.getDevImei()\r
-        imei = imei.upper()\r
-        str_data += '{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3+{}.mp3'.format(audio_buf.index("R_READ_TIME_{}".format(imei[0]))\\r
-                ,audio_buf.index("R_READ_TIME_{}".format(imei[1])),audio_buf.index("R_READ_TIME_{}".format(imei[2])),audio_buf.index("R_READ_TIME_{}".format(imei[3])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[4])),audio_buf.index("R_READ_TIME_{}".format(imei[5])),audio_buf.index("R_READ_TIME_{}".format(imei[6])),audio_buf.index("R_READ_TIME_{}".format(imei[7])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[8])),audio_buf.index("R_READ_TIME_{}".format(imei[9])),audio_buf.index("R_READ_TIME_{}".format(imei[10])),audio_buf.index("R_READ_TIME_{}".format(imei[11])),\\r
-                audio_buf.index("R_READ_TIME_{}".format(imei[12])),audio_buf.index("R_READ_TIME_{}".format(imei[13])),audio_buf.index("R_READ_TIME_{}".format(imei[14])))\r
-        #print("str_data:{}".format(str_data))\r
-        self.aud.montage_play('U:/static/audio.bin',1,1,str_data)\r
-\r
-#存储信息\r
-class getStorageDataManager(Abstract):#获取内存数据\r
-        def __init__(self):\r
-            self.config_data = {}\r
-            check = ql_fs.path_exists("/usr/static/storage_file/config.json")\r
-            if check == True:\r
-                with open("/usr/static/storage_file/config.json","r") as fd:\r
-                    self.config_data = ujson.load(fd)\r
-            else :\r
-                self.config_data = {'old_time': 0, 'flip_sw': 0}\r
-                pass\r
-\r
-        def post_processor_after_instantiation(self):\r
-            EventMesh.subscribe("set_storage_data", self.set_storage_data)\r
-            EventMesh.subscribe("set_storage_config", self.set_storage_config)\r
-            EventMesh.subscribe("get_storage_data", self.get_storage_data)\r
-            EventMesh.subscribe("get_storage_config", self.get_storage_config)\r
-\r
-        def set_storage_data(self, event, msg): \r
-            # EventMesh.debug_log("set_storage_data:{}".format(msg))\r
-            if msg != None:\r
-                self.config_data = msg\r
-                with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:\r
-                    ujson.dump(self.config_data,fd)\r
-        \r
-\r
-        def set_storage_config(self,event,msg): \r
-            # EventMesh.debug_log("set_storage_key_data1:{}".format(msg))\r
-            if len(msg) >= 2:\r
-                self.config_data[msg[0]]=msg[1]\r
-                # EventMesh.debug_log("set_storage_key_data2:{}".format(self.config_data[msg[0]]))\r
-                EventMesh.publish("publish_message_event_ui",{"func":self.set_storage_save,"data":0})\r
-        def set_storage_save(self, data): \r
-            with open("/usr/static/storage_file/config.json",'w+',encoding="utf-8") as fd:\r
-                ujson.dump(self.config_data,fd)\r
-        def get_storage_data(self, event, msg): \r
-            # EventMesh.debug_log("get_storage_data:{}".format(self.config_data))\r
-            return self.config_data \r
-        def get_storage_config(self,event,msg):\r
-            # EventMesh.debug_log("get_storage_key_data1:{}".format(msg))\r
-            b = msg in self.config_data.keys()\r
-            if b == True:\r
-                # EventMesh.debug_log("get_storage_key_data2:{}".format(self.config_data[msg]))\r
-                return self.config_data[msg]\r
-            else :\r
-                return None\r
-            # try:\r
-            #     return self.config_data[msg]\r
-            # except:\r
-            #     EventMesh.debug_log("get_storage_key_data:none key:{}",msg)\r
-            #     return None\r
-#设备资源授权平台\r
-class device_res_author(Abstract):\r
-   \r
-    def __init__(self) :\r
-        print("device_res_author __init__ start !!!!!!!!!!!!!!!!!")\r
-        self.deviceId = modem.getDevImei()#"876226002022574"\r
-        self.SHA1_BLOCK_SIZE = 64\r
-        self.PAD_BLOCK_SIZE = 16\r
-        self.SHA256 = uhashlib.sha256\r
-        self.pad = lambda s: s + chr(self.PAD_BLOCK_SIZE - len(s) % self.PAD_BLOCK_SIZE) * (self.PAD_BLOCK_SIZE - len(s) % self.PAD_BLOCK_SIZE)\r
-        # 除去补16字节的多余字符\r
-        self.unpad = lambda s: s[:-s[-1]]\r
-        #K01\r
-        # self.key = b"MWrMZjdtcPhj41jWuoqFAhTmqyFluqj1" \r
-        # self.pid = "qAtdDOGXgXYjT2HGFr3a"\r
-        #G15\r
-        # self.key = b"3LWfBicxfRZ3ZAqmZCFuvMdGUXdAFWkb" \r
-        # self.pid = "qLx4Pu4mSUQxyfVKGLXG"\r
-        #7pin\r
-        self.key = b"uKLrChwrxA1LklgBc3VwawYjUkbT3BgX" \r
-        self.pid = "cqxJZi5CNgzjS3mX21Zw"\r
-        \r
-        self.dev_res_timer = osTimer()\r
-        self.dev_res_timer.start(20000, 1, self.dev_timer_cb)\r
-        self.dev_res_timerCount = 0\r
-        self.ud_token_timer = osTimer()\r
-        self.ud_token_timer.start(10000, 1, self.ud_token_timer_cb)\r
-        self.ud_token_timer_Count = 0\r
-        self.dev_token = None\r
-        self.res_error_count = 0\r
-        self.ntptime_flag = 0\r
-        EventMesh.subscribe("get_dev_token", self.get_dev_token)\r
-        EventMesh.subscribe("update_dev_token", self.update_dev_token)\r
-        EventMesh.subscribe("dev_active", self.dev_active)\r
-        EventMesh.subscribe("dev_sign_in", self.dev_sign_in)\r
-        EventMesh.subscribe("dev_NTP", self.dev_NTP)\r
-        #EventMesh.publish_async("dev_NTP",thread_size = 8192)\r
-\r
-        # count = 0\r
-        # while True:\r
-        #     if self.ntptime_flag == 1:\r
-        #         break\r
-        #     utime.sleep_ms(1)\r
-        #     count+=1\r
-        #     if count>600:\r
-        #         break\r
-        # EventMesh.publish_async("dev_active",thread_size = 8192)\r
-        # EventMesh.publish_async("dev_sign_in",thread_size = 8192)\r
-\r
-        self.dev_NTP()#获取时间\r
-        self.dev_active() #设备激活\r
-        self.dev_sign_in() #设备登入\r
-        print("device_res_author __init__ end !!!!!!!!!!!!!!!!!")\r
-\r
-    def get_dev_token(self, event, msg): \r
-        return self.dev_token\r
-    #网络校时\r
-    def dev_NTP(self, event=None, msg=None):\r
-        response = None\r
-        try:\r
-            print("dev_NTP1")\r
-            url = "http://dmp.raisound.com/bz-api/dev/time"\r
-            response = request.get(url,timeout=5)\r
-            data = response.json()\r
-            print("dev_NTP:{}".format(data))\r
-            if data:\r
-                try:\r
-                    timeSecond = data["data"]["timestamp"]//1000\r
-                    \r
-                    next_alarm_time = utime.localtime(timeSecond)\r
-                    print("timeSecond {} next_alarm_time {}".format(timeSecond,next_alarm_time))\r
-                    machine.RTC().datetime((next_alarm_time[0],next_alarm_time[1],next_alarm_time[2],next_alarm_time[6],next_alarm_time[3],next_alarm_time[4],next_alarm_time[5],0))\r
-                    self.ntptime_flag  = 1\r
-                except Exception as e:\r
-                        usys.print_exception(e)\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        if response != None:\r
-            response.close() \r
-        print("dev_NTP end")\r
-    def dev_timer_cb(self, *args): #设备资源管理鉴权平台定时器\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.dev_timer_cb_}) \r
-\r
-    def dev_timer_cb_(self):    \r
-        #if EventMesh.DEV_RES_MANAGE_AUTHEN_PLATFORM == 1:\r
-        try:\r
-            if self.dev_token == None:\r
-                if self.ntptime_flag == 0:\r
-                    self.ntptime_flag  = 1\r
-                    EventMesh.publish_async("dev_NTP",thread_size = 8192)\r
-                    #EventMesh.publish("publish_AI_btnInfo",{"func":self.dev_NTP})\r
-                print("timer:{}!!!!!!!!\r\n".format(utime.localtime()))\r
-                EventMesh.publish_async("dev_active",thread_size = 8192)\r
-                EventMesh.publish_async("dev_sign_in",thread_size = 8192)\r
-                # self.dev_active() #设备激活\r
-                # self.dev_sign_in() #设备登入\r
-                self.dev_res_timerCount+=1\r
-                if self.dev_res_timerCount > 3: #开机一分钟内没有获取到密码和token 等下一次更新令牌在走登入 激活流程\r
-                    self.dev_res_timerCount=0\r
-                    self.dev_res_timer.stop()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-    def ud_token_timer_cb(self, *args): \r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.ud_token_timer_cb_}) \r
-\r
-    def ud_token_timer_cb_(self):   \r
-        try:\r
-            #print("ud_token_timer_!!!!")\r
-            self.ud_token_timer_Count+=1\r
-            if self.ud_token_timer_Count >= 720: #定时10*3000s时更新token\r
-                self.ud_token_timer_Count = 0\r
-                EventMesh.publish_async("dev_sign_in",thread_size = 8192)\r
-        except Exception as e:\r
-            usys.print_exception(e)    \r
-    def get_sim_Status(self):\r
-        return sim.getStatus() \r
-    def HMAC(self,k, m):\r
-    \r
-        KEY_BLOCK = k + (b'\0' * (self.SHA1_BLOCK_SIZE - len(k)))\r
-        KEY_INNER = bytes((x ^ 0x36) for x in KEY_BLOCK)\r
-        KEY_OUTER = bytes((x ^ 0x5C) for x in KEY_BLOCK)\r
-        inner_message = KEY_INNER + m\r
-        outer_message = KEY_OUTER + self.SHA256(inner_message).digest()\r
-        return self.SHA256(outer_message)\r
-    def get_hmac_sha256(self,k, m):\r
-        data = self.HMAC(k, m).digest()\r
-        # print("HMAC(k, m).digest():", data)\r
-        # print("HMAC(k, m).digest():", ubinascii.hexlify(data))\r
-        hex_data = ubinascii.hexlify(data)\r
-        hex_data = hex_data.decode('ascii')\r
-        return hex_data\r
-    # 加密函数\r
-    def aes_CBC_Encrypt(self,data, key, iv):  # CBC模式的加密函数,data为明文,key为16字节密钥,iv为16字节的偏移量\r
-        key = key.encode('utf-8')\r
-        iv = iv.encode('utf-8')  # CBC 模式下的偏移量\r
-        data = self.pad(data)  # 补位\r
-        data = data.encode('utf-8')\r
-        aes = ucryptolib.aes(key,ucryptolib.MODE_CBC,iv)\r
-        result = base64.b64encode(aes.encrypt(data))\r
-        return str(result, 'utf-8')  # 以字符串的形式返回\r
-\r
-    # 解密函数\r
-    def aes_CBC_Decrypt(self,data, key, iv):  # CBC模式的解密函数,data为密文,key为16字节密钥\r
-        key = key.encode('utf-8')\r
-        iv = iv.encode('utf-8')\r
-        \r
-        aes = ucryptolib.aes(key,ucryptolib.MODE_CBC,iv) #CBC模式\r
-\r
-        # decrypt AES解密  B64decode为base64 转码\r
-        result = aes.decrypt(base64.b64decode(data))\r
-        result = self.unpad(result)  # 除去补16字节的多余字符\r
-        return str(result, 'utf-8')  # 以字符串的形式返回\r
-    #激活接口 没有密码走激活\r
-    def dev_active(self, event=None, msg=None):\r
-        signal = net.csqQueryPoll()\r
-        if signal == -1 or self.get_sim_Status() != 1:#网络不正常\r
-            print("dev_active 无 SIM卡!!!!!!!!\r\n")\r
-            return\r
-        print("dev_active 1\r\n")\r
-        # 签名内容: = deviceId+pid+timeStamp\r
-        dev_pass = ""\r
-        dev_pass = EventMesh.publish("get_storage_config","dev_pass")\r
-        print("dev_pass:{}\r\n".format(dev_pass))\r
-        if dev_pass == None:\r
-            dev_pass = ""\r
-        if dev_pass == "" or dev_pass == None:\r
-            try:\r
-                date_tmp = utime.localtime() #获取当前时间\r
-                print("date_tmp:{}\r\n".format(date_tmp)) #转换时间戳s\r
-                timeStamp = (utime.mktime(date_tmp))*1000#获取时间戳ms\r
-                deviceId = self.deviceId #"876226002022574" #以imei号\r
-                pid = self.pid\r
-                key = self.key\r
-                sign_data = "{}{}{}".format(deviceId,pid,timeStamp)  #签名内容\r
-                print("sign_data:{}\r\n".format(sign_data))\r
-                sha256_hex = self.get_hmac_sha256(key,sign_data)\r
-                print("sha256_hex:{}\r\n".format(sha256_hex))\r
-\r
-                data = {\r
-                    "deviceId":"{}".format(deviceId), #设备名\r
-                    "pid":pid, #产品PID\r
-                    "sign":"{}".format(sha256_hex), #HMACSHA256签名后的数据\r
-                    "timeStamp":timeStamp, #要以ms的形式\r
-                    "signMethod":"HMACSHA256" #签名方式 HMACSHA256\r
-                }\r
-                print(ujson.dumps(data))\r
-                headers_T ={"Content-Type":"application/json"}\r
-                url = "http://dmp.raisound.com/bz-api/dev/auth/active"\r
-                data =ujson.dumps(data)\r
-                response = None\r
-                response_result = 0\r
-                try:\r
-                    response = request.put(url,data=data,headers = headers_T,timeout=5)\r
-                    response_result = 1\r
-                except Exception as e:\r
-                    usys.print_exception(e)   \r
-                    print("put error!!!!!\r\n")\r
-                    response_result = 0\r
-                \r
-                IV = "" #偏移量\r
-                PASSWORD= "" #服务器返回后的加密内容 密码\r
-                if response_result == 1: #访问成功ip\r
-                    if response.status_code == 200:\r
-                        print("headers:{}".format(response.headers))\r
-                        content = response.content\r
-                        c = next(content)\r
-                        # "api.xcloudtech.com"\r
-                        # d_server_port = 9000\r
-                        data =  ujson.loads(c)\r
-                        # data = response.json()\r
-                        print("data-{}".format(data))\r
-                        if data != None:\r
-                            if "success" in data:\r
-                                if data['success'] == True:\r
-                                    if "data" in data:\r
-                                        data_tmp = data["data"]\r
-                                        if "nonce" in data_tmp: #偏移量\r
-                                            IV = data_tmp["nonce"]\r
-                                        if "password" in data_tmp:\r
-                                            PASSWORD = data_tmp["password"]\r
-                                            # EventMesh.publish("set_storage_config",["dev_pass",PASS])\r
-                                if data["code"] == 20001:#鉴权成功\r
-                                    pass\r
-                                elif data["code"] > 50000:#时间错误\r
-                                    self.res_error_count+=1\r
-                                    if self.res_error_count>=3:\r
-                                        self.res_error_count = 0\r
-                                        #EventMesh.publish("paly_device_res_error")\r
-                                    if data["code"] == 50003:#时间错误\r
-                                        self.ntptime_flag  = 0\r
-                        if PASSWORD != None and IV != None:\r
-                            if len(PASSWORD) != 0 and len(IV) != 0:\r
-                                password = PASSWORD\r
-                                iv = IV\r
-                                #解密 之后保存本地下一次登入做使用\r
-                                decrypt_data = self.aes_CBC_Decrypt(password, self.key, iv) #对服务器下发的密码进行解密\r
-                                print("decrypt_data {}".format(decrypt_data))\r
-                                EventMesh.publish("set_storage_config",["dev_pass",decrypt_data])    \r
-                    print("IV:{}\r\n PASS:{}".format(IV,PASSWORD))\r
-                if response != None:\r
-                    response.close()  \r
-            except Exception as e:\r
-                usys.print_exception(e)   \r
-            print("dev_active end\r\n")\r
-            return [response_result,PASSWORD,IV]\r
-    #随机生成16个字节的字符串作为加密的IV 偏移量\r
-    def generate_random_string(self,length=16): \r
-        random_str = ""\r
-        chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'\r
-        for i in range(length):\r
-            random_str+=chars[random.randint(0,length)]\r
-        return random_str\r
-\r
-    #设备登入 没有Token 走登入获取token\r
-    def dev_sign_in(self, event=None, msg=None):\r
-        signal = net.csqQueryPoll()\r
-        if signal == -1 or self.get_sim_Status() != 1:#网络不正常\r
-            print("dev_sign_in 无 SIM卡!!!!!!!!\r\n")\r
-            return\r
-        print("dev_sign_in 1")\r
-        token = ""\r
-        try:\r
-            token = self.dev_token\r
-            dev_pass = EventMesh.publish("get_storage_config","dev_pass") \r
-            #print("token:{}\r\n".format(token))\r
-            if token == None:\r
-                token = ""\r
-            if dev_pass == None:\r
-                dev_pass = ""\r
-            if len(dev_pass) == 0:#没有密码\r
-                return\r
-            #if token == None or token == "":\r
-            if 1: #返回结果成功\r
-                #获取本地保存的密码\r
-                decrypt_data=EventMesh.publish("get_storage_config","dev_pass")\r
-                # decrypt_data = self.aes_CBC_Decrypt(password, self.key, iv) #对服务器下发的密码进行解密\r
-                print("decrypt_data {}".format(decrypt_data))\r
-                #随机生成16个字符串 设备生成做加密使用\r
-                random_string = self.generate_random_string(16) #随机的16个字符串\r
-                enc_iv = random_string #加密的IV偏移量\r
-                #设备端进行密码加密\r
-                encrypt_data = self.aes_CBC_Encrypt(decrypt_data, self.key, enc_iv)\r
-                print("encrypt_data {}".format(encrypt_data))\r
-\r
-                #登入数据\r
-                deviceId = self.deviceId\r
-                sign_in_data = {\r
-                    "deviceId":"{}".format(deviceId), #设备ID\r
-                    "password":"{}".format(encrypt_data), #加密的数据\r
-                    "nonce":"{}".format(random_string) #随机的16个字符串\r
-                }\r
-                print(ujson.dumps(sign_in_data))\r
-                sign_url = "http://dmp.raisound.com/bz-api/dev/auth/sign_in" #登入地址\r
-                headers_T ={"Content-Type":"application/json"}\r
-                response_result = 0\r
-                response = 0\r
-                try:\r
-                    response = request.post(sign_url,data=ujson.dumps(sign_in_data),headers = headers_T,timeout=5)\r
-                    response_result = 1\r
-                except Exception as e:\r
-                    usys.print_exception(e)   \r
-                    print("post error!!!!!\r\n")\r
-                    response_result = 0\r
-                # {'msg': '', 'code': 20001, 'success': True, \r
-                # 'data': {'deviceId': '876226002022574', \r
-                # 'token': '95436a9e09fd0ff89feb8825257dca982f'}\r
-                # }\r
-                \r
-                #self.dev_token = ""\r
-                if response_result == 1:\r
-                    if response.status_code == 200:\r
-                        content = response.content\r
-                        c = next(content)\r
-                        data =  ujson.loads(c)\r
-                        print("data-{}".format(data))\r
-                        if data != None:\r
-                            if "success" in data:\r
-                                if data['success'] == True: #登入成功\r
-                                    if "data" in data:\r
-                                        data_tmp = data["data"]\r
-                                        if "token" in data_tmp: #token\r
-                                            self.dev_token = data_tmp["token"]\r
-                                if data["code"] == 50003:#时间错误\r
-                                    self.ntptime_flag  = 0\r
-                print("token:{}\r\n".format(self.dev_token))\r
-                if response != None:\r
-                    response.close()\r
-                pass\r
-        except Exception as e:\r
-                    print("post error!!!!!\r\n")\r
-                    response_result = 0\r
-        print("dev_sign_in end")\r
-    #获取新的令牌 更新token\r
-    def update_dev_token(self, event=None, msg=None):\r
-        print("update_dev_token")\r
-        try:\r
-            dev_pass = ""\r
-            dev_pass = EventMesh.publish("get_storage_config","dev_pass")\r
-            \r
-            if dev_pass == None:\r
-                dev_pass = ""\r
-            if len(dev_pass) == 0: #没有密码走激活\r
-                print("no dev_pass:{}\r\n".format(dev_pass))\r
-                EventMesh.publish("dev_active")\r
-            token = self.dev_token\r
-            if token == None:\r
-                token = ""\r
-            if len(token) == 0: #没有token走登入\r
-                print("no dev_token:{}\r\n".format(token))\r
-                #self.dev_sign_in()\r
-                EventMesh.publish("dev_sign_in")\r
-            dev_tokenip = "http://dmp.raisound.com/bz-api/dev/auth/token" #设备新令牌更新地址\r
-            token = self.dev_token\r
-            if token == None:\r
-                token = ""\r
-            if len(token) != 0:\r
-                response_result=0\r
-                response = None\r
-                headers_T = {"bz-dt":"{}".format(token)}\r
-                try:\r
-                    response = request.get(dev_tokenip,headers = headers_T,timeout=5)\r
-                    response_result = 1\r
-                except Exception as e:\r
-                    print("get error!!!!!\r\n")\r
-                    response_result = 0\r
-                if response_result == 1:\r
-                    if response.status_code == 200:\r
-                        try:\r
-                            headers_data = response.headers\r
-                            # print("headers_data!!!!! headers_data:{}\r\n".format(headers_data))\r
-                            if "bz-dt" in headers_data: #bz-dt字段是否在头部数据里面 如果有就需要更新\r
-                                bz_dt = headers_data["bz-dt"] \r
-                                self.dev_token = bz_dt.replace(" ", "") #去掉所有的空格符\r
-                                print("update_dev_token:{}".format(self.dev_token))\r
-                        except Exception as e:\r
-                            print("headers_data!!!!! error\r\n")\r
-                if response != None:\r
-                    response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)   \r
-        print("update_dev_token end")\r
-        \r
-#OTA升级\r
-class OTA():\r
-    def __init__(self):\r
-        #EventMesh.subscribe("min_sys_ota",self.min_sys_ota)\r
-        self.downloadFileVoURL1= ""\r
-        self.downloadFileVoURL2= ""\r
-    #小系统升级,返回0,没有升级;返回,1有升级,正在执行升级;返回2,电压不够\r
-    def min_sys_ota(self,event=None,msg=None):\r
-        print("min_sys_ota")\r
-        signal = net.csqQueryPoll()\r
-        if signal == -1 or sim.getStatus()  != 1:#网络不正常\r
-            print("min_sys_ota 无 SIM卡!!!!!!!!\r\n")\r
-            return 0\r
-        # return 0\r
-        response = None\r
-        ret_str =0\r
-        self.downloadFileVoURL1= ""\r
-        self.downloadFileVoURL2= ""\r
-        try:\r
-            sourceVersion = versions.Build_Time\r
-            sourceVersion = "7PIN-"+sourceVersion[:10]+"-"+sourceVersion[11:-3]\r
-            print("sourceVersion:{}".format(sourceVersion))\r
-            sourceVersion = sourceVersion.replace(" ", "0")\r
-            print("sourceVersion2:{}".format(sourceVersion))\r
-            #url = "http://iot.api.thisiot.com/ota/task?deviceId=860132060348836&sourceVersion=2024-12-20-15:35-1"\r
-            url = "http://dmp.raisound.com/bz-api/ota/task?deviceId={}&sourceVersion={}".format(modem.getDevImei(),sourceVersion)\r
-            print(url)\r
-            response = request.get(url,timeout=5)\r
-            if response.status_code == 200:\r
-                data = response.json()\r
-                print("min_sys_ota1:{}".format(data))\r
-                \r
-                if data:\r
-                    try:\r
-                        if data["code"] == 20007:#有新版本\r
-                            if "fileList"in data["data"]:\r
-                                if len(data["data"]["fileList"]) == 2:\r
-                                    for fileList in data["data"]["fileList"]:\r
-                                        if fileList["fileName"] == "dfota_2.bin":\r
-                                            self.downloadFileVoURL2 = fileList["url"]\r
-                                        elif fileList["fileName"] == "dfota_1.bin":\r
-                                            self.downloadFileVoURL1 = fileList["url"]\r
-                            \r
-                        if data["code"] == 20006:#已是最新版本\r
-                            ret_str = 0\r
-                                    \r
-                    except Exception as e:\r
-                            usys.print_exception(e)\r
-            else:\r
-                print("min_sys_ota get error")\r
-            response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-            if response != None:\r
-                response.close()\r
-        \r
-        print("min_sys_ota:downloadFileVoURL1:{},\ndownloadFileVoURL2:{}".format(self.downloadFileVoURL1,self.downloadFileVoURL2))\r
-        print("min_sys_ota end") \r
-        if self.downloadFileVoURL2!="" and self.downloadFileVoURL1!="":\r
-            battery = EventMesh.publish("get_battery")\r
-            if battery>=40:\r
-                self.ota_timer = osTimer()\r
-                self.ota_timer.start(15000, 0, self.ota_timer_cb)\r
-                ret_str =  1  \r
-            else:\r
-                ret_str =  2\r
-        return ret_str\r
-    \r
-    def ota_timer_cb(self, *args, **kwargs):\r
-        import fota\r
-        fota_obj = fota() \r
-        fota_obj.httpDownload(url1=self.downloadFileVoURL1,url2=self.downloadFileVoURL2)\r
-    #ota升级结果返回,开机时调用一次即可\r
-    def ota_result(self,event=None,msg=None):\r
-        response = None\r
-        try:\r
-            currentVersion = versions.Build_Time\r
-            currentVersion = "7PIN-"+currentVersion[:10]+"-"+currentVersion[11:-3]\r
-            print("currentVersion1:{}".format(currentVersion))\r
-            currentVersion = currentVersion.replace(" ", "0")\r
-            print("currentVersion2:{}".format(currentVersion))\r
-            url = "http://dmp.raisound.com/bz-api/ota/result?deviceId={}&currentVersion={}".format(modem.getDevImei(),currentVersion)\r
-            print(url)\r
-            response = request.post(url,timeout=5)\r
-            if response.status_code == 200:\r
-                data = response.json()\r
-                print("ota_result:{}".format(data))\r
-            else:\r
-                print("ota_result  error!!!!")\r
-                for i in response.text:\r
-                    print(i)\r
-            response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-            if response != None:\r
-                response.close()\r
-    #ICCID上传\r
-    def pots_ICCID(self,event=None,msg=None):\r
-        response = None\r
-        try:\r
-            iccid = sim.getIccid()\r
-            if iccid != -1 and len(iccid) > 5:\r
-                print("pots_ICCID:{}".format(iccid))\r
-                #Headers = {'Transfer-Encodong':'chunked'}\r
-                #http://dmp.raisound.com/bz-api/dev/iccid?deviceId=866610001099679&iccid=89860002192307889057\r
-                url = "http://dmp.raisound.com/bz-api/dev/iccid?deviceId={}&iccid={}".format(modem.getDevImei(),iccid)\r
-                print(url)\r
-                response = request.post(url,timeout=5)\r
-                if response.status_code == 200:\r
-                    data = response.json()\r
-                    print("pots_ICCID:{}".format(data))\r
-                else:\r
-                    print("pots_ICCID  error!!!!")\r
-                    for i in response.text:\r
-                        print(i)\r
-                response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-            if response != None:\r
-                response.close()\r
-#阿里VC状态枚举\r
-VC_State_None=0\r
-VC_State_Listening=1#听\r
-VC_State_SpeechStart=2#说开始\r
-VC_State_SpeechIng=3#正在说\r
-VC_State_SpeechEnd=4#说结束\r
-VC_State_RequestToRespond=5 #TTS请求或者chat请求\r
-VC_State_Thinking=6#想(chat)\r
-VC_State_Responding=7#音频播放\r
-VC_State_TTSStart=8\r
-VC_State_TTSData=9\r
-VC_State_TTSFinish=10\r
-VC_State_TTSEnd=11\r
-VC_State_TTSError=12\r
-VC_State_DialogError=13\r
-VC_State_End=14\r
-\r
-VC_record_TYPE_PCM = 0\r
-VC_record_TYPE_AMR = 1\r
-VC_play_TYPE_PCM = 0\r
-VC_play_TYPE_MP3 = 1\r
-\r
-#websocket发送数据编号\r
-# AI_client_asr_num = 0\r
-# AI_client_chat_num = 1\r
-# AI_client_tts_num = 2\r
-AI_client_VC_num = 3\r
-AI_client_asr_num = 4\r
-\r
-\r
-class AI_VC(Abstract):\r
-    # AI\r
-    \r
-    def __init__(self):\r
-        try:\r
-            self.http_get_config()#获取/更新配置参数\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        self.VC_30S_timer = osTimer()\r
-        self.VC_30S_timer.start(30000, 1, self.VC_30S_timer_cb)\r
-        self.get_config_timer_count = 0\r
-        self.record_data_save_flag = 0 #是否保存录音文件\r
-        self.play_data_save_flag = 0#是否保存tts数据到文件\r
-        self.record_fd = None\r
-        self.play_fd = None\r
-        self.is_VC_ACK = 0 #是否开启ack应答模式\r
-        self.is_long_record = 0 #是否开启长录音模式(语音打断模式)\r
-        self.ai_OTA = OTA()\r
-        self.is_auth = 0 #是否开启dmp鉴权\r
-        #self.VC_mode = 1 #0:短按连续问答模式 1:长按录音模式\r
-        self.VC_mode = EventMesh.publish("get_storage_config","VC_mode")#\r
-        if self.VC_mode == None :\r
-            self.VC_mode = 0\r
-        self.is_up_error= 0 #是否上传错误id\r
-        self.Close_flag =0 #=1时,连续对话播放完音频就退出\r
-        \r
-        self.error_data = []\r
-        self.asr_taskid  = ""\r
-        self.VC_taskid  = ""\r
-        self.VC_server = 86 #0柒牌正式服务器,1:测试服务器1,2:测试服务器2\r
-        \r
-        self.server_ip = EventMesh.publish("get_storage_config","server_ip")#\r
-        if self.server_ip == None:\r
-            if self.VC_server == 1:# \r
-                self.server_ip="118.145.158.207:22083"\r
-            elif self.VC_server == 2:# \r
-                self.server_ip="118.145.158.207:22082"\r
-            elif self.VC_server == 4:# \r
-                self.server_ip="118.145.158.207:22084"\r
-            elif self.VC_server == 5:# \r
-                self.server_ip="amp-wss.raisound.com"\r
-            elif self.VC_server == 6:# \r
-                self.server_ip="118.145.158.207:22080"\r
-            elif self.VC_server == 7:# \r
-                self.server_ip="118.145.158.207:22080"\r
-            elif self.VC_server == 8:# \r
-                self.server_ip="115.190.94.208:22080"\r
-            elif self.VC_server == 86:# \r
-                self.server_ip="118.145.158.207:22086"    \r
-            else:\r
-                #self.server_ip="sevenpin.qipai.com.cn"\r
-                self.server_ip="118.145.158.207:22082"\r
-            if dev_type == 'momo':# \r
-                self.server_ip="118.145.158.207:22080"\r
-            # elif dev_type == "7PIN":\r
-            #     self.server_ip="sevenpin.qipai.com.cn"\r
-\r
-            elif dev_type == "sjgq":\r
-                self.server_ip="118.145.158.207:22084"\r
-\r
-        #开机提示音\r
-        self.power_on_tone = EventMesh.publish("get_storage_config","power_on_tone")#\r
-        if dev_type != "7PIN":\r
-            self.power_on_tone = None\r
-        if self.power_on_tone == None:\r
-            if dev_type == "G10":\r
-                self.power_on_tone = "已开机,您好!我是北科瑞讯智能 AI bot_name"\r
-            elif dev_type == "7PIN_BK":\r
-                self.power_on_tone = "小瑞来了!我们一起来愉快地聊天吧!" \r
-            elif dev_type == "momo":\r
-                self.power_on_tone = "DuloDulo,我是上古神兽食梦貘,主人可以叫我momo,我来自《山海经》,是一只以梦为食的神秘灵兽,每当颜色朦胧、人们入睡时,我就会悄悄飞到人们的床头,用我长长的鼻子把噩梦统统吞噬掉,只留下甜甜的美梦。从今往后,就由我守护在主人身边,一起度过每一个星河璀璨的夜晚。"\r
-            elif dev_type == "sjgq":\r
-                self.power_on_tone = "您好!我是巴马四季甘泉的智能助手。我可以为你解答各种各样的问题,像是有关巴马四季甘泉知识库、中基长寿科学产品、卫斯曼院士国际先进医疗中心的问题,还有日常生活与工作、旅游信息、健康咨询、教育与学习、情感交流、全球资讯、世界文化等方面的问题哦。你有没有这方面的问题想要问我呀?"\r
-            elif dev_type == "szbst":\r
-                self.power_on_tone = "深圳百事通来了!请问您有什么需要我帮忙的吗?" \r
-            else:\r
-                self.power_on_tone = "您好!我是世界首创柒牌男装AI生活好帮手-bot_name, 很高兴为您服务,我可以帮您解答柒牌公司知识库、日常生活与工作、旅游信息、健康与运动咨询、教育与学习、情感交流、全球资讯、世界文化等问题!请问您有什么需要我帮忙的吗?" \r
-                \r
-\r
-        self.VC_record_TYPE = VC_record_TYPE_PCM #0:PCM 1:AMR\r
-        self.VC_play_TYPE = VC_play_TYPE_PCM #0:PCM 1:mp3 \r
-        self.VC_record_samplerate = 16000\r
-        self.VC_play_samplerate = 16000\r
-        self.VAD_data_len = 640 #10ms数据\r
-        self.is_VAD = 0#=1打开vad打断\r
-        # ARG_sample_rate,             // 采样率\r
-        # ARG_channel,                // 通道数\r
-        # ARG_frame_size,              // 每帧字节数\r
-        # ARG_energy_threshold,        // 能量阈值\r
-        # ARG_voice_time,              // 语音持续时间阈值(ms)\r
-        # ARG_silence_time,            // 静音持续时间阈值(ms)\r
-        # ARG_silence_start_threshold, // 静音开始阈值(ms)\r
-        self.vad = None\r
-        if self.is_VAD == 1:\r
-            self.vad = VAD.VAD(self.VC_record_samplerate ,1,self.VAD_data_len,600,100,300,100)\r
-        self.speech_rate = EventMesh.publish("get_storage_config","speech_rate")#语速配置\r
-        if self.speech_rate == None:\r
-            self.speech_rate = 0\r
-        self.VC_TTS_voice_type = EventMesh.publish("get_storage_config","VC_TTS_voice_type")#音色配置\r
-        if self.VC_TTS_voice_type == None or ("男" in self.VC_TTS_voice_type) == False:\r
-            if dev_type == "G10" or  dev_type == "7PIN_BK"or dev_type == "szbst":\r
-                self.VC_TTS_voice_type = {   \r
-                                            "女":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_female_wanwanxiaohe_moon_bigtts" ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "男":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_male_wennuanahu_moon_bigtts"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "童":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"ICL_zh_female_huoponvhai_tob"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "粤":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_female_wanqudashu_moon_bigtts" ,\r
-                                            "lang":"zh-hk" \r
-                                            },\r
-                                            "四川":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_female_daimengchuanmei_moon_bigtts",\r
-                                            "lang":"&lang=zh-cn-sc"  \r
-                                            },\r
-                                            "个性":{\r
-                                            "bot_name":"小瑞",\r
-                                            "voice":"zh_male_sunwukong_mars_bigtts" ,\r
-                                            "lang":"zh-cn" \r
-                                            }\r
-                                           \r
-                                        }\r
-            elif dev_type == 'momo':\r
-                self.VC_TTS_voice_type = {   \r
-                                            "女":{\r
-                                            "bot_name":"食梦貘",\r
-                                            "voice":"zh_female_shaoergushi_mars_bigtts" ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "男":{\r
-                                            "bot_name":"食梦貘",\r
-                                            "voice":"zh_male_yangguangqingnian_mars_bigtts"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "童":{\r
-                                            "bot_name":"食梦貘",\r
-                                            "voice":"ICL_zh_female_huoponvhai_tob"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                }\r
-            elif dev_type == 'sjgq':\r
-                self.VC_TTS_voice_type = {   \r
-                                            "女":{\r
-                                            "bot_name":"小巴",\r
-                                            "voice":"zh_female_wanwanxiaohe_moon_bigtts" ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "男":{\r
-                                            "bot_name":"小巴",\r
-                                            "voice":"zh_male_wennuanahu_moon_bigtts"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "童":{\r
-                                            "bot_name":"小巴",\r
-                                            "voice":"ICL_zh_female_huoponvhai_tob"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                }\r
-            else:\r
-                #女,男,童,粤,川,个性声\r
-                self.VC_TTS_voice_type = {   \r
-                                            "女":{\r
-                                            "bot_name":"柒妹妹",\r
-                                            "voice":"zh_female_wanwanxiaohe_moon_bigtts" ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "男":{\r
-                                            "bot_name":"柒先生",\r
-                                            "voice":"zh_male_wennuanahu_moon_bigtts"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "童":{\r
-                                            "bot_name":"柒乐乐",\r
-                                            "voice":"ICL_zh_female_huoponvhai_tob"  ,\r
-                                            "lang":"zh-cn"\r
-                                            },\r
-                                            "粤":{\r
-                                            "bot_name":"柒先生",\r
-                                            "voice":"zh_female_wanqudashu_moon_bigtts" ,\r
-                                            "lang":"zh-hk" \r
-                                            },\r
-                                            "四川":{\r
-                                            "bot_name":"柒妹妹",\r
-                                            "voice":"zh_female_daimengchuanmei_moon_bigtts",\r
-                                            "lang":"&lang=zh-cn-sc"  \r
-                                            },\r
-                                            "个性":{\r
-                                            "bot_name":"柒先生",\r
-                                            "voice":"zh_male_sunwukong_mars_bigtts" ,\r
-                                            "lang":"zh-cn" \r
-                                            },\r
-                                            "英语":{\r
-                                            "bot_name":"柒先生",\r
-                                            "voice":"en_male_smith_mars_bigtts" ,\r
-                                            "lang":"zh-cn" \r
-                                            }\r
-                                            \r
-                                           \r
-                                        }\r
-            \r
-            # self.VC_TTS_voice_type = {0:"zh_female_xinlingjitang_moon_bigtts",1:"zh_male_wennuanahu_moon_bigtts",2:"ICL_zh_female_huoponvhai_tob",\r
-            #                           3:"aliyun::longjiaxin",4:"zh_female_daimengchuanmei_moon_bigtts"}\r
-            #self.VC_TTS_voice_type = ["aliyun::longxiaoxia","aliyun::longnan","aliyun::longling"]\r
-            \r
-            #EventMesh.publish("set_storage_config",["VC_TTS_voice_type",self.VC_TTS_voice_type])\r
-\r
-        try:\r
-            self.VC_TTS_voice_key = EventMesh.publish("get_storage_config","VC_TTS_voice_key")#音色配置\r
-            if self.VC_TTS_voice_key == None :\r
-                if dev_type == "7PIN_BK":\r
-                    self.VC_TTS_voice_key = "童"\r
-                    #self.VC_TTS_voice_key = "男"\r
-                elif dev_type == "momo":\r
-                    self.VC_TTS_voice_key = "男"\r
-                else:\r
-                    self.VC_TTS_voice_key = "男"\r
-            if self.VC_TTS_voice_key in self.VC_TTS_voice_type:\r
-                pass\r
-            else:\r
-                self.VC_TTS_voice_key = list(self.VC_TTS_voice_type.keys())[0]\r
-            print("音色配置:{}:{}\r\n\r\n".format(self.VC_TTS_voice_key,self.VC_TTS_voice_type[self.VC_TTS_voice_key]))\r
-            self.VC_TTS_volume =  EventMesh.publish("get_storage_config","VC_TTS_volume")#音量配置\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        #配置词\r
-        self.commands_mode = 2#=1用大模型判断命令,=0用服务器本地插件判断命令 =2用设备本地判断方式\r
-        if dev_type == "7PIN_BK":\r
-            self.commands_mode = 1\r
-        self.commands =  [\r
-            {\r
-                "command": "切换音色",#命令\r
-                "patterns": [ #多种问法,说法\r
-                    "声音改成", "声音改为", "改成", "改为", "换成", "切换成", "变成", "声音"\r
-                    "使用", "设置声音为", "把声音改成", "声音切换到", "用","声音切换的"\r
-                ],\r
-                "exact_matches": ["声音改成", "声音改为", "改成", "改为"],#精确匹配的完整短语\r
-                "has_param": True,# 是否包含参数\r
-                "param_regexp": r"(?P<cmd_parameter>(男|难|女|童|同|粤|广东话|粤语|四川话|川普|四川口音))",#参数提取正则表达式\r
-                "require_full_match": False,#是否要求完全匹配\r
-                "negative_patterns": [],#否定模式(避免误触发)\r
-                "keyword_threshold": 0.6#关键词匹配阈值\r
-            },\r
-            {\r
-                "command": "音量加大",\r
-                "patterns": [\r
-                    "音量加大","音量大", "声音大" ,"声音加大","听不清楚","声音太小","太小声了"\r
-                ],\r
-                "exact_matches": [],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": False,\r
-                "negative_patterns": ["声音太大"],\r
-                "keyword_threshold": 1\r
-            },\r
-            {\r
-                "command": "音量减小",\r
-                "patterns": [\r
-                    "音量减小","音量小", "声音小","你太吵了","声音太大","太大声了"\r
-                ],\r
-                "exact_matches": [],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": False,\r
-                "negative_patterns": ["声音太小"],\r
-                "keyword_threshold": 0.8\r
-            },\r
-            {\r
-                "command": "关机",\r
-                "patterns": [\r
-                    "关机", "关闭电源"\r
-                ],\r
-                "exact_matches": ["关机", "关闭电源"],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": True,\r
-                "negative_patterns": [],\r
-                "keyword_threshold": 0.8\r
-            },\r
-            {\r
-                "command": "进入工厂模式",\r
-                "patterns": [\r
-                    "进入工厂模式"\r
-                ],\r
-                "exact_matches": ["进入工厂模式"],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": True,\r
-                "negative_patterns": [],\r
-                "keyword_threshold": 0.8\r
-            },\r
-            {\r
-            \r
-                "command": "再见",\r
-                "patterns": [\r
-                    "再见","拜拜","我要走了"\r
-                ],\r
-                "exact_matches": [],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": False,\r
-                "negative_patterns": [],\r
-                "keyword_threshold": 0.8\r
-            },\r
-            {\r
-            \r
-                "command": "查询信号",\r
-                "patterns": [\r
-                    "查询信号","信号怎样","信号是多少","信号怎么样"\r
-                ],\r
-                "exact_matches": [],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": False,\r
-                "negative_patterns": ["查询"],\r
-                "keyword_threshold": 0.8\r
-            },   \r
-            {\r
-            \r
-                "command": "查询卡号",\r
-                "patterns": [\r
-                    "查询卡号","卡号","iccid号","ICCID号"\r
-                ],\r
-                "exact_matches": [],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": False,\r
-                "negative_patterns": ["查询"],\r
-                "keyword_threshold": 0.8\r
-            },  \r
-            {\r
-            \r
-                "command": "查询设备号",\r
-                "patterns": [\r
-                    "设备号","查询设备号","查询IMEI号"\r
-                ],\r
-                "exact_matches": [],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": False,\r
-                "negative_patterns": ["查询"],\r
-                "keyword_threshold": 0.8\r
-            },\r
-            {\r
-                "command": "OTA升级",\r
-                "patterns": [\r
-                    "OTA升级"\r
-                ],\r
-                "exact_matches": ["OTA升级"],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": True,\r
-                "negative_patterns": [],\r
-                "keyword_threshold": 1\r
-            },    \r
-            {\r
-                "command": "查询服务器地址",\r
-                "patterns": [\r
-                    "查询服务器地址"\r
-                ],\r
-                "exact_matches": [],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": False,\r
-                "negative_patterns": ["查询"],\r
-                "keyword_threshold": 0.9\r
-            }   \r
-            ,    \r
-            {\r
-                "command": "切换对话模式",\r
-                "patterns": [\r
-                    "切换对话模式","切换兑换模式"\r
-                ],\r
-                "exact_matches": [],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": False,\r
-                "negative_patterns": [],\r
-                "keyword_threshold": 0.8\r
-            },  \r
-            {\r
-                "command": "查询版本",\r
-                "patterns": [\r
-                    "查询版本号","软件版本"\r
-                ],\r
-                "exact_matches": [],\r
-                "has_param": False,\r
-                "param_regexp": "",\r
-                "require_full_match": False,\r
-                "negative_patterns": ["查询"],\r
-                "keyword_threshold": 0.6\r
-            }, \r
-        ]\r
-        if self.VC_TTS_volume == None:\r
-            self.VC_TTS_volume = 100\r
-        self.AI_audio_queue_thread_id = 0\r
-        self.AI_audio_queue_thread_lock = 0\r
-        self.AI_VC_send_data_queue_thread_id = 0\r
-        self.AI_VC_send_data_queue_thread_lock = 0\r
-        self.AI_ASR_send_data_queue_thread_id = 0\r
-        self.AI_ASR_send_data_queue_thread_lock = 0\r
-        self.AI_record_tmp_queue = Queue(100)\r
-        self.AI_ASR_send_data_queue = Queue(200)\r
-        self.AI_VC_send_data_queue = Queue(100)\r
-        self.AI_audio_queue = Queue(100)\r
-        #self.AI_WS_connect_Queue = Queue(100) #释放用\r
-        self.AI_TTS_str = ""\r
-        self.AI_ASR_str = ""\r
-        self.AI_ASR_flag = 0\r
-        self.AI_ASR_str_tmp = ""\r
-        self.AI_ASR_send_buf_len = 0\r
-        self.AI_ASR_text_tmp = ""\r
-        self.AI_ASR_text_repet_count = 0\r
-        # #开始线程\r
-        # if self.AI_audio_queue_thread_id ==0:\r
-        #     self.AI_audio_queue_thread_id = _thread.start_new_thread(self.AI_audio_queue_thread, ())\r
-        # else:\r
-        #     print("AI_VC_start :AI_audio_queue_thread_id != 0 ")\r
-        # if self.AI_VC_send_data_queue_thread_id == 0:    \r
-        #     self.AI_VC_send_data_queue_thread_id = _thread.start_new_thread(self.AI_VC_send_data_queue_thread, ())\r
-            \r
-        self.VC_state = VC_State_None #阿里ai VC状态\r
-        self.VC_dialog_id = ""#\r
-        self.VC_message_id=None\r
-        self.VC_task_id =None\r
-        self.AI_client_VC = None\r
-        self.AI_client_VC_recv_id = 0\r
-        self.AI_client_VC_recv_lock = 0\r
-        self.AI_client_VC_isconnect =0\r
-        self.AI_client_VC_debug =0\r
-\r
-        self.asr_state = VC_State_None #阿里VC_ASR VC状态\r
-        self.key_state = 0\r
-\r
-        self.AI_client_asr = None\r
-        self.AI_client_asr_recv_id = 0\r
-        self.AI_client_asr_recv_lock = 0\r
-        self.AI_client_asr_isconnect =0\r
-        self.AI_ASR_timer =  osTimer()\r
-        self.AI_ASR_timer_count = 0\r
-        self.AI_client_asr_debug =0\r
-        self.AI_ASR_check_timeout = 0\r
-        self.AI_ASR_error_timeout = 0\r
-        self.VC_Thinking_timerout = 0\r
-\r
-        self.record_pcm = None\r
-        self.play_pcm = None\r
-        self.VC_record_thread_id = 0\r
-        self.VC_record_thread_lock = 0\r
-        self.VC_pingping_timerout = 0\r
-        self.asr_pingping_timerout = 0\r
-        self.factory_timer = osTimer()\r
-        self._1S_timer = osTimer()\r
-        self.Audio_buf_size = 16*1024\r
-        self.record = audio.Record()\r
-        #self.record.end_callback(self.record_callback)\r
-        self.record.gain_set(4,10)\r
-        #self.record.gain_set(4,12)\r
-        self.aud = audio.Audio(0)\r
-        self.aud.setCallback(self.audio_cb)\r
-        #self.aud.setVolume(self.VC_TTS_volume //10)\r
-        self.audio_play_state = 1 #音频播放完状态\r
-        self.close_timerout = 0\r
-        self.LocalRespondingEnded_timerout = 0\r
-\r
-        self.VC_Play_flag = 0\r
-        self.play_flag = 0\r
-        self.VC_record_state_flag = 0\r
-        self.AI_key_long_press_flag = 0\r
-        self.websocket_error_count = 0\r
-\r
-        self.tts_in_data_len = 0\r
-        self.tts_out_data_len = 0\r
-        self.VC_satrt_flag = 0\r
-        self.session_id = ""\r
-        EventMesh.subscribe("AI_key_press", self.AI_key_press)\r
-        EventMesh.subscribe("AI_key_release", self.AI_key_release)\r
-        EventMesh.subscribe("AI_key_long_press", self.AI_key_long_press)\r
-        EventMesh.subscribe("pwk_key_release", self.pwk_key_release)\r
-        EventMesh.subscribe("get_AI_audio_queue", self.get_AI_audio_queue)\r
-        EventMesh.subscribe("get_VC_satrt_flag", self.get_VC_satrt_flag)\r
-        EventMesh.subscribe("VC_error", self.VC_error)\r
-        \r
-        EventMesh.publish("close_led")\r
-\r
-        self.bot_name = "柒先生"\r
-        try:\r
-            if "bot_name" in self.VC_TTS_voice_type[self.VC_TTS_voice_key]:\r
-                self.bot_name = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["bot_name"]\r
-            else:\r
-                print("not bot_name!!!!!!!!!!!!!!!!!!!!!!")\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        try:\r
-            if self.ai_OTA.min_sys_ota()==1:\r
-            #if 0:    \r
-                self.AI_TTS_str = "检测到有新版本需要升级啦!升级时可千万别断电或乱按哦,升级完成后设备会自动重启,重启就代表升级成功"\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-            # if self.ai_OTA.min_sys_ota()==2:\r
-            #     self.AI_TTS_str = "检测到有新版本需要升级啦!电量低于40%,无法保证升级正常执行,请充满电后重启设备再次升级!"\r
-            #     EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-            else:\r
-                try:\r
-                    self.ai_OTA.ota_result()\r
-                    self.ai_OTA.pots_ICCID()\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                #开机提示语,如果联网失败,直接提示信号弱\r
-                \r
-                \r
-                #EventMesh.publish("get_storage_config",["powerRestart",1])\r
-                powerRestart =  EventMesh.publish("get_storage_config","powerRestart")#=1非正常重启\r
-                if powerRestart == None:\r
-                    powerRestart = 0\r
-                if powerRestart == 1:\r
-                    EventMesh.publish("set_storage_config",["powerRestart",0])\r
-                    \r
-                else:\r
-                    pass\r
-                    self.AI_TTS_str = self.power_on_tone.replace("bot_name", self.bot_name)\r
-                    print("开机提示:{}".format(self.AI_TTS_str))\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                \r
-                \r
-\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-\r
-        \r
-    def post_processor_after_instantiation(self):\r
-        pass\r
-    def get_AI_audio_queue(self, event, msg):\r
-        return self.AI_audio_queue\r
-    def get_VC_satrt_flag(self, event, msg):\r
-        return self.VC_satrt_flag\r
-\r
-\r
-    def VC_30S_timer_cb(self, *args): #\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_30S_timer_cb_}) \r
-\r
-    def VC_30S_timer_cb_(self):    \r
-        self.get_config_timer_count += 1\r
-        if self.get_config_timer_count >= 2*60*2:#2小时更新配置参数\r
-            self.get_config_timer_count = 0\r
-            try:\r
-                self.http_get_config()#获取/更新配置参数\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-    #提交错误id           \r
-    def ud_error(self,error_data):\r
-        response = None\r
-        if self.is_up_error == 1:\r
-            try:\r
-                # currentVersion = versions.Build_Time\r
-                # currentVersion = "7PIN-"+currentVersion[:10]+"-"+currentVersion[11:-3]\r
-                url = "http://{}/health?task_id={}".format(self.server_ip,error_data[0]+error_data[1])\r
-                print(url)\r
-                response = request.get(url,timeout=5)\r
-                if response.status_code == 200:\r
-\r
-                    print("ud_error:ok")\r
-                else:\r
-                    print("ud_error  error!!!!")\r
-                    for i in response.text:\r
-                        print(i)\r
-                response.close()\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-                if response != None:\r
-                    response.close()\r
-    #获取配置参数\r
-    def http_get_config(self, event=None, msg=None):\r
-        print("http_get_config")\r
-\r
-        response = None\r
-        #http://180.184.206.142/bz-api/dev/config?deviceId=xxx\r
-        try:\r
-            url = "http://dmp.raisound.com/bz-api/dev/config/{}".format(modem.getDevImei())\r
-            print(url)\r
-            response = request.get(url,timeout=5)\r
-            if response.status_code == 200:\r
-                data = response.json()\r
-                print("http_get_config:{}".format(data))\r
-                \r
-                if data:\r
-                    try:\r
-                        if data["code"] == 20000:#有配置\r
-                            if data["data"] :\r
-                                if "version" in data["data"]:\r
-                                    config_version = EventMesh.publish("get_storage_config","config_version")#音量配置\r
-                                    if config_version != data["data"]["version"]:\r
-                                        config_version = data["data"]["version"]\r
-                                        EventMesh.publish("set_storage_config",["config_version",config_version])\r
-                                        if "VC_TTS_voice_type" in data["data"]:\r
-                                            self.VC_TTS_voice_type = data["data"]["VC_TTS_voice_type"]\r
-                                            EventMesh.publish("set_storage_config",["VC_TTS_voice_type",self.VC_TTS_voice_type])\r
-                                            print("配置VC_TTS_voice_type成功")\r
-                                        if "server_ip" in data["data"]:\r
-                                            self.server_ip = data["data"]["server_ip"]\r
-                                            EventMesh.publish("set_storage_config",["server_ip",self.server_ip])\r
-                                            print("配置server_ip成功")\r
-                                        if "power_on_tone" in data["data"]:\r
-                                            self.power_on_tone = data["data"]["power_on_tone"]\r
-                                            EventMesh.publish("set_storage_config",["power_on_tone",self.power_on_tone])\r
-                                            print("配置power_on_tone成功")\r
-\r
-                    except Exception as e:\r
-                            usys.print_exception(e)\r
-            else:\r
-                print("status_code:{}".format(response.status_code))\r
-                print("http_get_config:error!!!!!!!!!!")\r
-            response.close()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-            if response != None:\r
-                response.close()\r
-\r
-    def audio_cb(self,event):\r
-        if event == 0:\r
-            self.audio_play_state =1\r
-            #EventMesh.publish("set_audio_state", 1)\r
-            print('audio-play start.')\r
-        elif event == 7:\r
-            self.audio_play_state = 0\r
-            #EventMesh.publish("set_audio_state", 0)   \r
-            print('audio-play finish.!!!!!!')\r
-\r
-    def AI_key_press(self, event, msg):#按键按下\r
-        print("AI_key_press")\r
-        self.get_config_timer_count = 0\r
-        self.key_state = 1\r
-        self.Close()\r
-        # if dev_type == "7PIN" :\r
-        #     self.aud.aud_tone_play(10,200)#播放按键音\r
-        #self.aud.aud_tone_play(10,200)#播放按键音\r
-        self.AI_TTS_str = ""#"你好,有什么吩咐"\r
-        self.AI_ASR_str = ""\r
-        self.AI_ASR_str_tmp = ""\r
-        self.VC_state = VC_State_None\r
-        # if self.VC_state != VC_State_None:\r
-        #     EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-        #     EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(10)})\r
-        #if self.VC_record_state_flag >1:#如果在录音,就先停止录音\r
-        self.VC_Speech_End()\r
-\r
-        self.VC_Speech_Start()    \r
-        self.AI_VC_start() \r
-        #self.chenggong_tone()\r
-        # self.Close()\r
-        # self.AI_VC_start()\r
-        self.AI_key_long_press_flag = 0\r
-        \r
-\r
-    def AI_key_release(self, event, msg):#按键弹起\r
-        print("AI_key_release123")\r
-        self.key_state = 0\r
-        if self.AI_key_long_press_flag == 1 :#有长按\r
-            #self.AI_client_VC_end_speech()\r
-            #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(1000)})\r
-            #EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_asr_StopTranscription_requset})\r
-            #self.AI_client_asr_StopTranscription_requset()#请求停止\r
-            if self.VC_mode == 1 :#长按单次问答模式\r
-                # if self.AI_ASR_str_tmp != "":\r
-                print("AI_key_release:asr_str:{}".format(self.AI_ASR_str))  \r
-                #     EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})\r
-                self.AI_client_VC_end_speech()\r
-                pass\r
-            \r
-        else :\r
-            if self.VC_mode == 1 :#长按单次问答模式\r
-                try:\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.key_prompt})  #提示请您按住中间的按钮开始讲话,讲完松开即可   \r
-                #self.AI_TTS_str = "请您按住中间的按钮开始讲话,讲完松开即可 "\r
-                #EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})\r
-                pass\r
-                \r
-                #self.VC_Speech_End()\r
-    def AI_key_long_press(self, event, msg):#按键长按\r
-        print("AI_key_long_press")\r
-        self.AI_key_long_press_flag = 1\r
-\r
-    def pwk_key_release(self, event, msg):#电源键短按,关闭\r
-        print("pwk_key_release")\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-\r
-    def key_prompt(self):\r
-        EventMesh.publish("audio_montage_play",["key_prompt.mp3"])\r
-        #self.aud.play(1,1,'U:/static/key_prompt.mp3')#提示请您按住中间的按钮开始讲话,讲完松开即可\r
-    def VC_error(self, event, msg):#错误播报\r
-        self.websocket_error()\r
-        #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error}) \r
-    def set_VC_record_state_flag(self,data):\r
-        \r
-        self.VC_record_state_flag = data\r
-        print("set_VC_record_state_flag:{}".format(self.VC_record_state_flag))\r
-    #开始录音,不缓存,直接发\r
-    def VC_Speech_Start_now(self):\r
-        self.VC_Speech_Start()\r
-        if self.VC_record_state_flag  == 1:\r
-            self.VC_record_state_flag =2\r
-        print("VC_Speech_Start_now:{}".format(self.VC_record_state_flag))\r
-    #开始录音,先缓存到buf,等服务器响应再发\r
-    def VC_Speech_Start(self):\r
-        try:\r
-            \r
-            #self.VC_state =  VC_State_SpeechStart\r
-            print("VC_Speech_Start VC_record_state_flag:{} self.AI_ASR_flag:{}!!!!!!!!".format(self.VC_record_state_flag,self.AI_ASR_flag))  \r
-            if self.AI_ASR_flag  != 0:\r
-                return\r
-            \r
-            if self.VC_record_state_flag  == 0:\r
-                \r
-                self.VC_record_thread_close()#关闭录音线程\r
-                _thread.stack_size(self.Audio_buf_size+8*1024)\r
-                self.VC_record_thread_id = _thread.start_new_thread(self.VC_record_thread,())\r
-                _thread.stack_size(8*1024)\r
-                print("self.VC_record_thread_id:{}".format(self.VC_record_thread_id))\r
-                try:\r
-                    \r
-                    if self.VC_record_TYPE == VC_record_TYPE_AMR :\r
-                        try :\r
-                            self.record.stream_start(audio.Record.AMRNB, self.VC_record_samplerate, 0)\r
-                        except Exception as e:\r
-                                usys.print_exception(e)\r
-                    elif self.VC_record_TYPE == VC_record_TYPE_PCM:\r
-                        print("record_pcm.stream_read_start()!!!!!!!!!!!!")\r
-                        self.record.stream_start(audio.Record.WAV, self.VC_record_samplerate, 0)\r
-                        # if self.record_pcm != None:\r
-                        #     try:\r
-                        #         self.record_pcm.stream_stop()\r
-                        #         self.record_pcm.close()\r
-                        #         self.record_pcm = None\r
-                        #     except Exception as e:\r
-                        #         usys.print_exception(e)\r
-                        # if self.record_pcm == None:        \r
-                        #     ret = self.record_pcm = audio.Audio.PCM(0,1,16000,0,1,2)\r
-                        #     print("audio.Audio.PCM:ret:{}".format(ret))\r
-                        #     ret = self.record_pcm.stream_read_start()\r
-                        #     print("self.record_pcm.stream_read_start:ret:{}".format(ret))\r
-                except Exception as e:\r
-                    usys.print_exception(e) \r
-                \r
-                self.VC_record_state_flag = 1\r
-                \r
-        except Exception as e:\r
-            self.websocket_error()\r
-            self.VC_record_state_flag = 1\r
-            self.VC_Speech_End()#关闭录音\r
-            usys.print_exception(e)   \r
-    #停止录音\r
-    def VC_Speech_End(self):\r
-        try:\r
-            self.AI_ASR_flag = 0\r
-            self.AI_ASR_str_tmp = ""\r
-            self.AI_ASR_str = ""\r
-            #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr})\r
-              \r
-            if self.VC_record_state_flag == 0:\r
-                return\r
-            #self.AI_client_asr_StopTranscription_requset()#请求停止\r
-            if self.VC_record_TYPE == VC_record_TYPE_AMR:\r
-                self.record.stream_stop()\r
-                self.record.stop()#关闭录音\r
-                Record_read_buf = bytearray(self.Audio_buf_size)\r
-                for i in range(10):\r
-                    Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)\r
-                    print("Record_len:!!!!!!{}".format(Record_len))\r
-                    if Record_len <= 0:\r
-                        break\r
-            elif self.VC_record_TYPE == VC_record_TYPE_PCM:\r
-                self.record.stream_stop()\r
-                self.record.stop()#关闭录音\r
-                Record_read_buf = bytearray(self.Audio_buf_size)\r
-                for i in range(10):\r
-                    Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)\r
-                    print("Record_len:!!!!!!{}".format(Record_len))\r
-                    if Record_len <= 0:\r
-                        break\r
-                # if self.record_pcm != None:\r
-                #     try:\r
-                #         self.record_pcm.stream_stop()\r
-                #         self.record_pcm.close()\r
-                #         self.record_pcm = None\r
-                #     except Exception as e:\r
-                #         usys.print_exception(e)\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        self.VC_record_thread_close()#关闭录音线程\r
-        if self.AI_record_tmp_queue.empty() != True:\r
-            self.AI_record_tmp_queue.clear()\r
-        \r
-        self.VC_record_state_flag = 0\r
-        print("VC_Speech_End VC_record_state_flag:{}!!!!!!!!".format(self.VC_record_state_flag))   \r
-    #关闭录音线程   \r
-    def VC_record_thread_close(self): \r
-        if self.VC_record_thread_id != 0:\r
-            count =50\r
-            while True:\r
-                count -= 1\r
-                if self.VC_record_thread_lock == 1:\r
-                    self.VC_record_thread_lock = 2\r
-                if self.VC_record_thread_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    print("VC_record_thread_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-            self.VC_record_thread_lock = 0\r
-            print("VC_record_thread_thread_close")\r
-            try:\r
-                _thread.stop_thread(self.VC_record_thread_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.VC_record_thread_id = 0\r
-    #获取录音数据\r
-    def VC_record_thread(self):\r
-        ##return\r
-        print("VC_record_thread start!!!!!!!!!!!!!!!!!!!!\r\n")\r
-        count = 0\r
-        RequestToSpeak_flag = 0\r
-        # try:\r
-        #     uos.remove('/usr/test.pcm')\r
-        # except Exception as e:\r
-        #     usys.print_exception(e)\r
-        #record_data_queue = Queue(100)\r
-        #fd = open('/usr/test.pcm','w')\r
-        # if self.VC_record_TYPE == 1:\r
-        #     h_data= [0x23,0x21 ,0x41 ,0x4D ,0x52 ,0x0A ]\r
-        #     h_data_b = bytes(h_data)\r
-        #     self.AI_client_VC_send(h_data_b)\r
-        AI_record_tmp_queue_len = 0\r
-        vad_buf = bytearray()\r
-        VAD_data_count = 0\r
-        vad_state = 0\r
-        self.VAD_count = 0\r
-        while True:\r
-            try:\r
-                if self.VC_record_thread_lock == 2:\r
-                    break\r
-                self.VC_record_thread_lock = 1\r
-                # 死循环接收数据\r
-                #if self.VC_state ==  VC_State_SpeechStart:\r
-                Record_read_buf = bytearray(self.Audio_buf_size)\r
-                \r
-                Record_len = 0\r
-                if self.VC_record_TYPE == VC_record_TYPE_PCM:#pcm\r
-                    Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)\r
-                    #utime.sleep_ms(60)\r
-                    \r
-                else :\r
-                    \r
-                    Record_len = self.record.stream_read(Record_read_buf, self.Audio_buf_size)\r
-                    utime.sleep_ms(600)\r
-\r
-                #Record_len = 1024*2\r
-                #print("VC_record_thread:{}".format(Record_len))\r
-                if Record_len > 0:\r
-                    read_buf = bytes(Record_read_buf[:Record_len])\r
-                    print("Record_len:{}".format(Record_len))\r
-                    #VAD检测\r
-                    if self.is_VAD == 1:\r
-                        vad_state = 0\r
-                        tmp_c = 1000\r
-                        while True:\r
-                            tmp_c -=1\r
-                            if tmp_c <=0:\r
-                                break\r
-                            #vad_buf_len = len(vad_buf)\r
-                            if VAD_data_count == 0:#没数据的时候\r
-                                vad_buf = Record_read_buf[:self.VAD_data_len]\r
-                                VAD_data_count = self.VAD_data_len\r
-                                self.vad.custom_vad_reset()#重置vad\r
-                            else:#有数据的时候\r
-                                if Record_len - VAD_data_count < self.VAD_data_len :#剩余长度不够一次填充,先保留,但不填算法\r
-                                    vad_buf = Record_read_buf[VAD_data_count:Record_len]\r
-                                    VAD_data_count = 0\r
-                                    break\r
-                                else:#剩余长度够填一次数据\r
-                                    vad_buf = Record_read_buf[VAD_data_count:VAD_data_count+self.VAD_data_len]\r
-                                    VAD_data_count += len(vad_buf)\r
-                            #print("vad_buf_len:{},{}".format(len(vad_buf),VAD_data_count))\r
-                            \r
-                            if len(vad_buf) >= self.VAD_data_len:\r
-                                vad_state = self.vad.custom_vad_process(vad_buf,len(vad_buf))#给vad数据\r
-                                #print("vad_state:{}".format(vad_state))\r
-                                \r
-                            if VAD_data_count >= Record_len:\r
-                                VAD_data_count = 0\r
-                                break\r
-                            if vad_state == 1:\r
-                                print("检测到VAD=1!!!!!!!!!!!!!")\r
-                                print("检测到VAD=1!!!!!!!!!!!!!")\r
-                                print("检测到VAD=1!!!!!!!!!!!!!")\r
-                                \r
-                                EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Pause,"data":1})#停止音频\r
-                                # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_RequestToSpeak})#打断\r
-                                # RequestToSpeak_flag = 1\r
-                                \r
-                                self.VAD_count+=1\r
-                                if self.VAD_count >= 20: \r
-                                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_RequestToSpeak})#打断\r
-                                        \r
-                            else:\r
-                                if self.VAD_count != 0:\r
-                                    EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Pause,"data":0})#恢复音频播放\r
-                                self.VAD_count  = 0\r
-                    if self.VC_state >= VC_State_TTSStart:\r
-                        pass\r
-                        if vad_state == 1:\r
-                            self.AI_record_tmp_queue.put(read_buf)#入缓存队列\r
-                            AI_record_tmp_queue_len += len(read_buf)\r
-                            \r
-                       \r
-                    else:\r
-                        VAD_data_count = 0\r
-                        if self.VC_record_state_flag <=1 :#没发送前先存起来\r
-                            self.AI_record_tmp_queue.put(read_buf)\r
-                            AI_record_tmp_queue_len += len(read_buf)\r
-                        else:\r
-                            AI_record_tmp_queue_len = 0\r
-                            while True:\r
-                                if self.AI_record_tmp_queue.empty() == True:\r
-                                    break\r
-                                else:\r
-                                    pass\r
-                                    self.AI_client_VC_send(self.AI_record_tmp_queue.get())  #发送之前存的数据\r
-                            self.AI_client_VC_send(read_buf)   \r
-                    \r
-                    if self.record_data_save_flag == 1:\r
-                        if self.record_fd == None:\r
-                            try:\r
-                                uos.remove('/usr/record_data.pcm')\r
-                            except Exception as e:\r
-                                usys.print_exception(e)\r
-                            self.record_fd = open('/usr/record_data.pcm','w')\r
-                        if self.record_fd != None:\r
-                            self.record_fd.write(read_buf)\r
-                            print("write record:{}".format(len(read_buf)))\r
-                            # count+=Record_len\r
-                            # if count >150*1024:\r
-                            #     self.record_fd.close()\r
-                                #self.record_fd = None\r
-\r
-                    \r
-                    \r
-\r
-                    #print("VC_record_thread:{}".format(len(read_buf)))\r
-                    #count+=len(read_buf)\r
-                # if count>=500*1024:#结束\r
-                #     self.AI_client_VC_end_speech()\r
-                #     break\r
-                # count+=1\r
-                # if count %10 == 0:\r
-                #     print("VC_record_thread on line {} asr recv :{} send:{}".format(self.VC_record_state_flag,_thread.threadIsRunning(self.AI_client_asr_recv_id),_thread.threadIsRunning(self.AI_VC_send_data_queue_thread_id)))\r
-                \r
-                # if self.VC_state >=  VC_State_SpeechEnd:\r
-                #     break\r
-                \r
-            except Exception as e:\r
-                    usys.print_exception(e)\r
-                    #break\r
-            self.VC_record_thread_lock = 0\r
-            utime.sleep_ms(100)\r
-        #fd.close()\r
-        print("VC_record_thread:exit")\r
-        self.VC_record_thread_id = 0#线程退出\r
-        self.VC_record_thread_lock = 0\r
-###################################################### VC ###################################################################################\r
-    def websocket_connect_VC(self):\r
-        print("websocket_connect_VC:{} e:{}!!!!!!!!!!!!!!!!!!!!!".format(self.AI_client_VC_isconnect,self.AI_client_VC_debug))\r
-        if self.AI_client_VC_isconnect == 1:\r
-            return\r
-        # 创建VC客户端\r
-        try:\r
-            signal = net.csqQueryPoll()\r
-            if signal == -1 or sim.getStatus() != 1:#网络正常\r
-                self.websocket_error()\r
-                return\r
-            \r
-            req_str = ""\r
-            ack = ""\r
-            if self.is_VC_ACK == 1:\r
-                ack = "ack=1"\r
-            lang = "lang=zh-cn"#普通话测试环境\r
-            try:\r
-                if "loang" in self.VC_TTS_voice_type[self.VC_TTS_voice_key]:\r
-                    lang = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["lang"]\r
-                else:\r
-                    print("not lang!!!!!!!!!!!!!!!!!!!!!!")\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-            if dev_type == "G10":\r
-                platform = "platform=huoshan&is_boot=1"\r
-                #platform = "platform=raisound"\r
-                #platform = "platform=aliyun"\r
-            elif dev_type == "7PIN_BK":\r
-                platform = "platform=huoshan"\r
-                #platform = "platform=raisound&bot_type=dify"   \r
-                platform = "platform=raisound&bot_type=fourseason_water"\r
-                pass\r
-            elif dev_type == 'momo':# \r
-                #22080/voice-chat/v2.1/ws?platform=raisound&bot_type=deepseek\r
-                platform = "platform=raisound&bot_type=shimeng_mo"\r
-            elif dev_type == "sjgq":\r
-                platform = "platform=raisound"\r
-            else:\r
-                platform = "platform=huoshan"\r
-                #platform = "platform=huoshan&is_boot=1"\r
-            #女,男,童,粤,川\r
-            self.bot_name = "柒先生"\r
-            try:\r
-                if "bot_name" in self.VC_TTS_voice_type[self.VC_TTS_voice_key]:\r
-                    self.bot_name = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["bot_name"]\r
-                else:\r
-                    print("not bot_name!!!!!!!!!!!!!!!!!!!!!!")\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-            \r
-            # Headers = {'X-NLS-Token':'0c8b8f05a46f423096be64a9c4c46310'}\r
-            # self.AI_client_VC = uwebsocket.Client.connect('wss://nls-gateway-cn-beijing.aliyuncs.com/ws/v1',headers=Headers, debug=False)\r
-            token = EventMesh.publish("get_dev_token")\r
-            print("token:{}".format(token))\r
-            if dev_type == 'momo' :# \r
-                req_str = "voice-chat/v2.1/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)\r
-            elif dev_type == '7PIN_BK':\r
-                #req_str = "voice-chat/v2.1/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)\r
-                req_str = "voice-chat/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)\r
-            elif dev_type == "sjgq":\r
-                req_str = "22085/voice-chat/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)\r
-            elif dev_type == "G10":\r
-                req_str = "vc/chat?is_auth={}".format(self.is_auth)\r
-            else:\r
-                req_str = "voice-chat/ws?is_auth={}&{}&{}".format(self.is_auth,platform,lang)\r
-            req_str = "vc/chat?is_auth={}".format(self.is_auth)\r
-            url = 'ws://{}/{}&dt={}'.format(self.server_ip,req_str,token)\r
-            #url = 'ws://115.190.94.208:22080/vc/coze?dt={}'.format(token)\r
-            \r
-            print("VC VC:url{}".format(url))\r
-            self.AI_client_VC = uwebsocket.Client.connect(url, debug=True)\r
-            #self.AI_WS_connect_Queue.put(self.AI_client_VC)\r
-\r
-       \r
-            print("websocket_connect_VC:OK!!!!!!!!!!!!!!!!!!!!!")\r
-        except Exception as e: #网络连接异常\r
-            usys.print_exception(e)\r
-            print("websocket_connect_VC error!!!\r\n")\r
-            str_error = str(e)\r
-            if str_error.find("[Errno 22] EINVAL")!= -1: \r
-                print("websocket_connect_VC:str_error:{}".format(str_error))\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                print("[Errno 22] EINVAL!!!\r\n")\r
-                self.websocket_error()\r
-                EventMesh.publish("set_storage_config",["powerRestart",1])#调试临时关闭\r
-                utime.sleep_ms(1000)\r
-                self.aud.stopPlayStream()\r
-                self.aud.stopAll()\r
-                Power.powerRestart()\r
-                \r
-            self.websocket_error()\r
-            return\r
-        #print("AI_client_VC:{}".format(self.AI_client_VC))\r
-        if self.AI_client_VC == None:\r
-            EventMesh.publish("update_dev_token")#获取token\r
-            self.websocket_error()\r
-            return\r
-        self.AI_client_VC_debug+=1\r
-        utime.sleep_ms(10)\r
-        self.AI_client_VC.settimeout(5)\r
-        #self.AI_VC_send_data_queue_thread_close()#关闭发送线程\r
-        if self.AI_VC_send_data_queue_thread_id == 0:    \r
-            _thread.stack_size(self.Audio_buf_size+8*1024)\r
-            self.AI_VC_send_data_queue_thread_id = _thread.start_new_thread(self.AI_VC_send_data_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            print("AI_VC_start :AI_VC_send_data_queue_thread_id :{} ".format(self.AI_VC_send_data_queue_thread_id))\r
-        self.AI_client_VC_recv_thread_close()#关闭读线程\r
-        # 线程接收数据\r
-        _thread.stack_size(self.Audio_buf_size+8*1024)\r
-        self.AI_client_VC_recv_id = _thread.start_new_thread(self.AI_client_VC_recv, (self.AI_client_VC,))\r
-        _thread.stack_size(8*1024)\r
-        self.AI_client_VC_isconnect = 1\r
-        print("websocket_connect_VC end")\r
-\r
-    def websocket_error(self,TTS_str=None):\r
-        print("websocket_error1!!!!")\r
-        self.Close()\r
-        print("websocket_error1.1!!!!")\r
-        print("websocket_error!!!!")\r
-        print("websocket_error!!!!")\r
-        self.VC_Thinking_timerout = 0\r
-        self.VC_satrt_flag = 0\r
-        self.AI_TTS_str = ""\r
-        self.AI_ASR_str = ""\r
-        self.AI_ASR_str_tmp = ""\r
-        self.AI_ASR_flag  = 0\r
-        self.VC_Speech_End()\r
-        EventMesh.publish("close_led")\r
-        if TTS_str == None:\r
-            self.websocket_error_count+=1\r
-            # if self.websocket_error_count <=3:\r
-            #     EventMesh.publish("audio_montage_play",["xinhaoruo1.mp3"])\r
-            if self.websocket_error_count <10 :\r
-                EventMesh.publish("audio_montage_play",["xinhaoruo1.mp3"])\r
-            elif self.websocket_error_count >=10:\r
-                EventMesh.publish("paly_iccid_imei")    \r
-            # else:\r
-            #     EventMesh.publish("audio_montage_play",["R_SIM_FAILE.mp3"])\r
-            #self.aud.play(1,1,'U:/static/R_SIM_FAILE.mp3')\r
-            if self.websocket_error_count <3 :\r
-                utime.sleep_ms(3000)\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})\r
-        else:\r
-            print("websocket_error:tts:{}".format(TTS_str))\r
-            self.AI_TTS_str = TTS_str\r
-            EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start})\r
-        print("websocket_error2")\r
-       \r
-        \r
-        print("websocket_error4")\r
-        \r
-\r
-    def websocket_deconnect_VC(self):\r
-        #print("websocket_deconnect_VC {}!!!!!!!".format(self.AI_client_VC_isconnect))\r
-        print("websocket_deconnect_VC!!!!!!!")\r
-        self.AI_client_VC_recv_thread_close()#关闭读线程\r
-        self.AI_client_VC_recv_id = 0\r
-        if self.AI_client_VC_isconnect == 1 or self.AI_client_VC!=None:\r
-            try:\r
-                self.AI_client_VC_isconnect = 0\r
-                count = 500\r
-                while True:#等待发完数据\r
-                    count-=1\r
-                    if count <=0 or self.AI_VC_send_data_queue_thread_lock == 0:\r
-                        break\r
-                    utime.sleep_ms(1)\r
-                \r
-                try:\r
-                    self.AI_client_VC.close()\r
-                    self.AI_client_VC_debug -=1\r
-                    #self.AI_client_VC=None\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                    try :\r
-                        self.AI_client_VC.close()\r
-                        self.AI_client_VC_debug -=1\r
-                        #self.AI_client_VC=None\r
-                    except Exception as e:\r
-                        usys.print_exception(e)\r
-                try :\r
-                    self.AI_client_VC._close()\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                self.AI_client_VC = None\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        print("websocket_deconnect_VC {}!!!!!!!".format(self.AI_client_VC_isconnect))\r
-    #websocket发送ping\r
-    def AI_client_VC_ping(self):\r
-        pass\r
-        if self.AI_client_VC_isconnect == 1:\r
-            #self.AI_client_VC.write_frame(0x09,b'ping ping')\r
-            self.AI_client_VC_send("ping")\r
-            print("VC: ping ping")\r
-\r
-    #websocket发送数据    \r
-    def AI_client_VC_send(self,data_str):\r
-        # if isinstance(data_str, str):#是字符串\r
-        #     print("AI_client_VC_send:{}".format(data_str))\r
-        #     pass\r
-        # else:\r
-        #     print("AI_client_VC_send:len{}".format(len(data_str)))\r
-        self.AI_VC_send_data_queue.put([AI_client_VC_num,data_str]) \r
-     #关闭数据发送线程\r
-    def AI_VC_send_data_queue_thread_close(self):\r
-        if self.AI_VC_send_data_queue_thread_id != 0:\r
-            count =500\r
-            while True:\r
-                count -= 1\r
-                if self.AI_VC_send_data_queue_thread_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    self.AI_VC_send_data_queue_thread_lock = 2\r
-                    print("AI_VC_send_data_queue_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-                    if self.AI_VC_send_data_queue.empty()!=True:\r
-                        self.AI_VC_send_data_queue.clear()\r
-            self.AI_VC_send_data_queue_thread_lock = 0\r
-            print("AI_VC_send_data_queue_thread_close")\r
-            try:\r
-                _thread.stop_thread(self.AI_VC_send_data_queue_thread_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.AI_VC_send_data_queue_thread_id = 0\r
-    #发送数据队列\r
-    def AI_VC_send_data_queue_thread(self):\r
-        print("AI_VC_send_data_queue_thread:start")\r
-        count_t = 0\r
-        while True:\r
-            if self.AI_VC_send_data_queue_thread_lock == 2:\r
-                print("AI_VC_send_data_queue_thread,该退出了")\r
-                break  \r
-            if self.AI_VC_send_data_queue.empty() :#不能去掉,去掉会卡死\r
-                self.AI_VC_send_data_queue_thread_lock = 0  \r
-                count_t+=1\r
-                # if count_t%200 == 0:\r
-                #     print("self.AI_VC_send_data_queue.empty")\r
-                utime.sleep_ms(1)\r
-            else:\r
-                #data[0]是websocket连接对象编号,data[1]是数据\r
-                #print("AI_VC_send_data_queue_thread:get")\r
-                \r
-                self.AI_VC_send_data_queue_thread_lock = 1\r
-                data = self.AI_VC_send_data_queue.get()\r
-                \r
-                \r
-                #print("AI_VC_send_data_queue_thread:num{} len{}".format(data[0],len(data[1])))\r
-                if data != None:\r
-                    try:\r
-                        #data["func"](data["data"])\r
-                        # 发送数据\r
-                        #bytes_data = bytes(data[1])\r
-                        #data[0].send(data[1])\r
-                        #print("AI_VC_send_data_queue_thread:len:{}".format(len(data[1])))\r
-                        #print("AI_VC_send_data_queue_thread on line asr recv :{} vc recv:{}".format(_thread.threadIsRunning(self.AI_client_asr_recv_id),_thread.threadIsRunning(self.AI_client_VC_recv_id)))\r
-                        if data[0] == AI_client_VC_num:\r
-                            \r
-                            if isinstance(data[1], str):#是字符串\r
-                                self.VC_pingping_timerout = 0\r
-                                print("VC VC: send_data:{}".format(data[1]))\r
-                            else:\r
-                                print("VC: send_data len:{}".format(len(data[1])))\r
-                            if self.AI_client_VC != None and self.AI_client_VC_isconnect == 1:\r
-                                self.AI_client_VC.send(data[1])\r
-                            else:\r
-                                print("VC VC: send_data:ERROR:{}".format(len(data[1])))\r
-                            #print("VC: send_data end")\r
-    \r
-                        #print("VC: send_data end")\r
-                    except Exception as e:\r
-                        print("DeviceInfo_queue_thread:ERROR:{}".format(e))\r
-                        usys.print_exception(e)\r
-                        if data[0] == AI_client_VC_num:\r
-                            #self.websocket_error()\r
-                            pass\r
-\r
-                            \r
-                            try:\r
-                                if self.AI_client_VC_isconnect != 0:\r
-                                    print("VC发送数据错误,退出")\r
-                                    EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC发送出错了,请重试"}) \r
-                                    self.ud_error(["VC",self.VC_taskid])\r
-                            except Exception as e: #网络连接异常\r
-                                usys.print_exception(e)\r
-\r
-                    utime.sleep_ms(1)\r
-        self.AI_VC_send_data_queue_thread_lock = 0              \r
-    #VC关闭读线程\r
-    def AI_client_VC_recv_thread_close(self):\r
-        if self.AI_client_VC_recv_id != 0:\r
-            count =500\r
-            while True:\r
-                count -= 1\r
-                if self.AI_client_VC_recv_lock == 1:\r
-                    self.AI_client_VC_recv_lock = 2\r
-                if self.AI_client_VC_recv_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    print("AI_client_VC_recv_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-            self.AI_client_VC_recv_lock = 0\r
-            print("AI_client_VC_recv_thread_close")\r
-            try:\r
-                _thread.stop_thread(self.AI_client_VC_recv_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.AI_client_VC_recv_id = 0\r
-    #Ai VC websocket返回数据       \r
-    def AI_client_VC_recv(self,cli):\r
-        count = 0\r
-        asr_led_flag = 0\r
-        tts_led_flag = 0\r
-        while True:\r
-            try:\r
-                # 死循环接收数据\r
-                self.AI_client_VC_recv_lock = 0\r
-\r
-                count+=1\r
-                if self.VC_state >= VC_State_TTSStart and (self.tts_in_data_len - self.tts_out_data_len > 64*1024 or count>5):\r
-                    count = 0\r
-                    utime.sleep_ms(1)\r
-                if self.VC_state < VC_State_TTSStart:\r
-                    utime.sleep_ms(1)\r
-                recv_data = cli.recv()\r
-                if self.AI_client_VC_recv_lock == 2:\r
-                    print("AI_client_VC_recv 该退出了")\r
-                    break\r
-                self.AI_client_VC_recv_lock = 1\r
-                self.close_timerout = 0#服务器有返回清零退出时间\r
-                if recv_data == "websocket close":\r
-                    # 服务器关闭连接\r
-                    print("VC 服务器关闭连接!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-                    #self.AI_client_VC_isconnect = 0\r
-                    #self.websocket_deconnect_VC()\r
-                    #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr}) \r
-                    # #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(1500)})\r
-                    #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_connect_asr}) \r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC连接断开了,请重试"}) \r
-                    self.ud_error(["VC",self.VC_taskid])\r
-                    break\r
-                elif recv_data == "":#客户端关闭连接\r
-                    print("VC VC :客户端关闭连接")\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC连接断开了,请重试"}) \r
-                    self.ud_error(["VC",self.VC_taskid])\r
-                    break\r
-                try:\r
-                    self.websocket_error_count = 0\r
-                    if isinstance(recv_data, str):#返回的是字符串\r
-                        print("VC VC:recv_data:{}".format(recv_data))\r
-                        jsload_data =  ujson.loads(recv_data)\r
-                        #print("AI_client_VC_recv jsload_data = {}".format(jsload_data))\r
-                        \r
-                        if jsload_data["event"] == "started" :#会话开始\r
-                            #payload = jsload_data["payload"]\r
-                            # self.VC_dialog_id = payload["dialog_id"] \r
-                            # self.VC_task_id = jsload_data["task_id"] \r
-                            EventMesh.publish("open_led_blue")\r
-                            print("VC:Started!!!!!!!!\r\n")\r
-                            if self.AI_TTS_str == "":\r
-                                #开始上传语音\r
-                                \r
-                                if self.VC_mode == 0    :\r
-                                    self.VC_record_state_flag  =2\r
-                                else:\r
-                                    EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send_speech})\r
-                                    \r
-                                \r
-                            else:\r
-                                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_synthesis})\r
-                            self.VC_state =  VC_State_None   \r
-                        elif jsload_data["event"] == "asr.started" :#asr开始 \r
-                            self.VC_state =  VC_State_SpeechStart\r
-                            if self.VC_mode == 1    :\r
-                                self.VC_record_state_flag = 2\r
-                            EventMesh.publish("open_led_blue")\r
-                        elif jsload_data["event"] == "asr.result" :#asr结果\r
-                            self.AI_ASR_str = jsload_data["payload"]["content"]\r
-                            if self.commands_mode ==2:\r
-                                ret= self.check_text(self.AI_ASR_str)\r
-                                if ret == 0:#配置指令\r
-                                            \r
-                                    if self.AI_VC_send_data_queue.empty()!=True:\r
-                                        self.AI_VC_send_data_queue.clear()\r
-                                    if self.AI_ASR_send_data_queue.empty()!=True:\r
-                                        self.AI_ASR_send_data_queue.clear()\r
-                                    self.AI_ASR_send_buf_len = 0\r
-                                    EventMesh.publish("open_led_all")\r
-                                    try:\r
-                                        \r
-                                        EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})\r
-                                        EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC}) \r
-                                        EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                                    except Exception as e:\r
-                                        usys.print_exception(e)\r
-                                    continue\r
-                                elif ret == 1:#不处理\r
-                                    pass\r
-                            EventMesh.publish("open_led_blue")\r
-                        elif jsload_data["event"] == "asr.completed" :#asr 终止的标识     \r
-                            #self.VC_Speech_End()\r
-                            #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})\r
-                            if self.record_data_save_flag == 1:\r
-                                if self.record_fd :\r
-                                    self.record_fd.close()\r
-                                self.record_fd = None\r
-                            # if dev_type != "7PIN" :\r
-                            #EventMesh.publish("publish_AI_btnInfo",{"func":self.send_tone}) \r
-                        elif jsload_data["event"] == "vad.silence" :#VAD 终止的标识 \r
-                            pass\r
-                            #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})\r
-                        elif jsload_data["event"] == "llm.created" :#会话开始\r
-                            EventMesh.publish("open_led_red_green")#\r
-                            self.VC_state = VC_State_Thinking\r
-                            # EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})\r
-                            pass\r
-                        elif jsload_data["event"] == "llm.delta" :#llm返回数据\r
-                            if self.is_VAD == 0:\r
-                                if self.VC_record_state_flag == 1:#llm返回数据还没停止,就先停止\r
-                                    EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})\r
-                        elif jsload_data["event"] == "tts.started" :#tts开始\r
-                            self.VC_state = VC_State_TTSStart\r
-                            if self.is_VAD == 0:\r
-                                EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})\r
-                            EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})\r
-                            \r
-                            #self.VC_Play_Start()\r
-                            EventMesh.publish("open_led_green")#绿色\r
-                        elif jsload_data["event"] == "tts.completed" :#tts结束\r
-                            EventMesh.publish("open_led_green")#绿色\r
-                            EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})\r
-                            self.LocalRespondingEnded_timerout = 8\r
-                            self.VC_state = VC_State_TTSEnd\r
-                            pass\r
-\r
-                        elif jsload_data["event"] == "canceled" :#打断\r
-                            EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start_now})#开始录音\r
-                            self.VC_state = VC_State_None\r
-                        elif jsload_data["event"] == "completed" :#会话结束\r
-                            #EventMesh.publish("open_led_green")#绿色\r
-                            \r
-                            self.LocalRespondingEnded_timerout = 8\r
-                            self.VC_state = VC_State_End\r
-                            pass\r
-                        elif jsload_data["event"] == "command" :#命令匹配\r
-                            ret = -1\r
-                            try:\r
-                                if self.commands_mode ==1:\r
-                                    if len(jsload_data["payload"]["functions"])>0:\r
-                                        \r
-                                        cmd = jsload_data["payload"]["functions"][0]["function"]["arguments"]\r
-                                        print("llm:cmd:{}".format(cmd))\r
-                                        cmd = ujson.loads(cmd)\r
-                                        ret = self.check_text_llm(cmd)\r
-                                elif self.commands_mode ==0:\r
-\r
-                                    cmd = jsload_data["payload"]\r
-                                    print("server:cmd:{}".format(cmd))\r
-                                    ret = self.check_text_server(cmd)\r
-                            except Exception as e:\r
-                                usys.print_exception(e)       \r
-                            if ret == -1:\r
-                                if self.AI_TTS_str  =="":\r
-                                    self.AI_TTS_str = "抱歉,没找到对应操作,可以换个说法试试" \r
-                            #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(10)})\r
-                            EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})\r
-                            EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_VC}) \r
-                            EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                    else:#下发音频数据\r
-                        #self.AI_ASR_str = ""#下发音频后清掉asr结果\r
-                        \r
-                        \r
-                        EventMesh.publish("open_led_green")#绿色\r
-                        \r
-                        print("下发音频数据1:{}".format(len(recv_data)))\r
-                        \r
-                        if self.play_data_save_flag == 1:\r
-                            if self.play_fd ==None:\r
-                                try:\r
-                                    uos.remove('/usr/play_data.pcm')\r
-                                except Exception as e:\r
-                                    usys.print_exception(e)\r
-                                self.play_fd = open('/usr/play_data.pcm','w')\r
-                            if self.play_fd !=None:\r
-                                self.play_fd.write(recv_data)\r
-                        # print("下发音频数据2:{}".format(len(recv_data)))\r
-                        #if self.VC_state >= VC_State_TTSStart:\r
-                            #self.put_record_data([recv_data,""])\r
-                        if self.VC_play_TYPE == VC_play_TYPE_PCM:\r
-                            if self.play_pcm != None:\r
-                                try:\r
-                                    #print("play_pcm.stream_write !!!")\r
-                                    buf_len = self.play_pcm.stream_get_buf_len()\r
-                                    count_tmp = 1000\r
-                                    while buf_len < len(recv_data):\r
-                                        utime.sleep_ms(1)\r
-                                        count_tmp-=1\r
-                                        if count_tmp<=0:\r
-                                            break\r
-                                        buf_len = self.play_pcm.stream_get_buf_len()\r
-                                    #print("buf已满,等待释放:buf_len:{},count_tmp:{}".format(buf_len,count_tmp))\r
-                                except Exception as e:\r
-                                    usys.print_exception(e)\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.put_record_data,"data":[recv_data,""]}) \r
-                        utime.sleep_ms(1)\r
-                except Exception as e:\r
-                    usys.print_exception(e)\r
-                \r
-            except Exception as e:\r
-                    error_str = str(e)\r
-                    #print("VC VC:e:{}".format(error_str))\r
-                    if error_str.find("[Errno 110] ETIMEDOUT")!= -1:\r
-                        #print("VC VC:recv TIMEDOUT 正常")\r
-                        pass\r
-                    else:\r
-                        usys.print_exception(e)\r
-                        #self.websocket_error()\r
-                        print("VC VC :读数据报错,退出")\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC出错了,请重试"}) \r
-                        self.ud_error(["VC",self.VC_taskid])\r
-                        break\r
-        self.AI_client_VC_isconnect = 0\r
-        self.AI_client_VC_recv_id = 0 \r
-        self.AI_client_VC_recv_lock = 0\r
-        print("AI_client_VC_recv END!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-    def put_record_data(self,data):\r
-        #print("下发音频数据1:{}".format(len(data[0])))\r
-        ret=self.AI_audio_queue.put(data)\r
-        self.tts_in_data_len += len(data[0])\r
-        #print("下发音频数据2:{},{}".format(len(data[0]),self.tts_in_data_len))\r
-    def check_text_server(self,cmd):\r
-        # if len(text)>60:\r
-        #     return -1\r
-        try:\r
-                text = cmd["command"]\r
-                if text.find("切换音色") != -1 :\r
-                    try:\r
-                        text = cmd["params"]["cmd_parameter"]\r
-                        for key in self.VC_TTS_voice_type:\r
-                            if  text.find(key) != -1 :\r
-                                self.VC_TTS_voice_key = key\r
-                                EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                                self.AI_TTS_str = "更改成功" \r
-                                return 0\r
-                    except Exception as e:\r
-                        usys.print_exception(e)    \r
-                    if  text.find("男") != -1 :\r
-                        if "男" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "男"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("女") != -1 :\r
-                        if "女" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "女"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("同声") != -1 or text.find("童") != -1 :\r
-                        if "童" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "童"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("粤") != -1 or text.find("越野") != -1 or text.find("广东话") != -1:\r
-                        if "粤" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "粤"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("四川") != -1 :\r
-                        if "四川" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "四川"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("个性") != -1 :\r
-                        if "个性" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "个性"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("英语") != -1 :\r
-                        if "英语" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "英语"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    self.AI_TTS_str = "更改失败,没找到对应声音" \r
-                    return 0\r
-                if text.find("切换对话模式") != -1:\r
-                    if self.VC_mode == 0:\r
-                       self.VC_mode = 1\r
-                       self.AI_TTS_str = "已切换到单对话模式" \r
-                    else:\r
-                        self.VC_mode = 0 \r
-                        self.AI_TTS_str = "已切换到长对话模式" \r
-                    EventMesh.publish("set_storage_config",["VC_mode",self.VC_mode])\r
-                    # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                    #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-\r
-                    return 0\r
-                if text.find("音量") != -1:\r
-                    if  text.find("加") != -1 :\r
-                        self.VC_TTS_volume += 10\r
-                        if self.VC_TTS_volume > 100:\r
-                            #EventMesh.publish("audio_montage_play",["yinliangyizuida.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/yinliangyizuida.mp3')#音量已最大\r
-                            self.AI_TTS_str = "音量已最大" \r
-                            self.VC_TTS_volume = 100\r
-                        else:\r
-                            self.aud.setVolume(self.VC_TTS_volume //10)\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume])\r
-                            #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功\r
-                            self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)\r
-                            \r
-                        return 0\r
-                    if text.find("减") != -1:\r
-                        self.VC_TTS_volume -= 10\r
-                        if self.VC_TTS_volume < 0:\r
-                            self.VC_TTS_volume = 0\r
-                            #EventMesh.publish("audio_montage_play",["yinliangyizuixiao.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/yinliangyizuixiao.mp3')#音量已最小\r
-                            self.AI_TTS_str = "音量已最小"\r
-                        else:\r
-                            self.aud.setVolume(self.VC_TTS_volume //10)\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume])\r
-                            #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功\r
-                            self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)\r
-                        return 0\r
-                \r
-                if text.find("进入工厂模式") != -1 :\r
-                    self.factory_mode()\r
-                    return 1\r
-                if text.find("查询") != -1:\r
-\r
-                    if text.find("信号") != -1 :\r
-                        signal = net.csqQueryPoll()\r
-                        \r
-                        self.AI_TTS_str = "当前信号{}".format(signal)\r
-                        return 0\r
-                    if text.find("电量") != -1 :\r
-                        battery = EventMesh.publish("get_battery")\r
-                        print("电量查询:{}".format(battery))\r
-                        #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])\r
-                        #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余\r
-                        self.AI_TTS_str = "电量剩余百分之{}".format(battery)\r
-                        return 0\r
-                    if text.find("电压") != -1 :\r
-                        Vbatt = Power.getVbatt()\r
-                        #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])\r
-                        #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余\r
-                        self.AI_TTS_str = "当前电池电压{}".format(Vbatt)\r
-                        return 0\r
-\r
-                    if text.find("卡号") != -1 :\r
-                        iccid = sim.getIccid()\r
-                        if iccid != -1 and len(iccid) > 5:\r
-                            print("iccid{}".format(iccid))\r
-                            self.AI_TTS_str = "当前卡号为:{}".format(iccid)\r
-                        else:\r
-                            self.AI_TTS_str = "卡号查询失败"\r
-                        return 0\r
-                    if text.find("设备号") != -1 :\r
-                        imei = modem.getDevImei()\r
-                        if imei != -1 and len(imei) > 5:\r
-                            print("IMEI:{}".format(imei))\r
-                            self.AI_TTS_str = "当前设备号为:{}".format(imei)\r
-                        else:\r
-                            self.AI_TTS_str = "设备号查询失败"\r
-                        return 0\r
-                    if text.find("版本") != -1 :\r
-                        sourceVersion = versions.Build_Time\r
-                        self.AI_TTS_str ="Mr-Seven-"+sourceVersion\r
-                        return 0\r
-                    if text.find("服务器地址") != -1 :\r
-                        self.AI_TTS_str ="服务器地址"+self.server_ip\r
-                        return 0\r
-                if text.find("升级") != -1 and (text.find("OTA") != -1 or text.find("ota") != -1):\r
-                    if self.ai_OTA.min_sys_ota()==1:\r
-                        self.AI_TTS_str = "有新版本,准备开始升级,升级过程会多次重启设备,请保证流量充足及电量充足"\r
-                    else:\r
-                        self.AI_TTS_str = "当前已是最新版本"\r
-                    return 0\r
-                \r
-                if len(text)<20 and (text.find("再见") != -1 or text.find("拜拜") != -1 or text.find("关闭对话") != -1):\r
-                    #EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                    self.AI_TTS_str = "好嘞,再见,我们下次再聊"\r
-                    self.Close_flag = 1\r
-                    return 0\r
-                if len(text)<12 and (text.find("关机") != -1 ):\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                    EventMesh.publish("Power_off")\r
-                    return 1\r
-        except Exception as e:\r
-                usys.print_exception(e)\r
-        return -1\r
-    def check_text_llm(self,cmd):\r
-        try:\r
-                text = cmd["command"]["chinese_description"]\r
-                if text.find("切换音色") != -1:\r
-                    text = cmd["command"]["params_json"]\r
-                    try:\r
-                        for key in self.VC_TTS_voice_type:\r
-                            if  text.find(key) != -1 :\r
-                                self.VC_TTS_voice_key = key\r
-                                EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                                self.AI_TTS_str = "了解,声音已切换" \r
-                                return 0\r
-                    except Exception as e:\r
-                        usys.print_exception(e)    \r
-                    if  text.find("男") != -1 :\r
-                        if "男" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "男"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-\r
-                            self.AI_TTS_str = "了解,声音已切换" \r
-                            return 0\r
-                    if text.find("女") != -1 :\r
-                        if "女" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "女"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-       \r
-                            self.AI_TTS_str = "了解,声音已切换" \r
-                            return 0\r
-                    if text.find("同声") != -1 or text.find("童") != -1 :\r
-                        if "童" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "童"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-\r
-                            self.AI_TTS_str = "了解,声音已切换" \r
-                            return 0\r
-                    if text.find("粤") != -1 or text.find("越野") != -1 or text.find("广东话") != -1:\r
-                        if "粤" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "粤"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-\r
-                            self.AI_TTS_str = "了解,声音已切换" \r
-                            return 0\r
-                    if text.find("四川") != -1 :\r
-                        if "四川" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "四川"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-\r
-                            self.AI_TTS_str = "了解,声音已切换" \r
-                            return 0\r
-                    if text.find("个性") != -1 :\r
-                        if "个性" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "个性"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-\r
-                            self.AI_TTS_str = "了解,声音已切换" \r
-                            return 0\r
-                    if text.find("英语") != -1 :\r
-                        if "英语" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "英语"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-\r
-                            self.AI_TTS_str = "了解,声音已切换" \r
-                            return 0\r
-                    self.AI_TTS_str = "很抱歉,没找到对应声音" \r
-                    return 0\r
-                if text.find("切换对话模式") != -1:\r
-                    if self.VC_mode == 0:\r
-                       self.VC_mode = 1\r
-                       self.AI_TTS_str = "了解,已切换到单对话模式" \r
-                    else:\r
-                        self.VC_mode = 0 \r
-                        self.AI_TTS_str = "了解,已切换到长对话模式" \r
-                    EventMesh.publish("set_storage_config",["VC_mode",self.VC_mode])\r
-\r
-\r
-                    return 0\r
-                if text.find("音量调整") != -1:\r
-                        text = cmd["command"]["params_json"]\r
-                        text = ujson.loads(text)\r
-                        volume = text["n"]\r
-                        if volume >100 or volume<0:\r
-                            self.AI_TTS_str = "音量调整超出范围了,只能0-100哦" \r
-                        else:\r
-                            self.VC_TTS_volume = volume\r
-                            self.aud.setVolume(self.VC_TTS_volume //10)\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume])\r
-                            self.AI_TTS_str = "了解,音量已经调整,当前音量是{}".format(self.VC_TTS_volume)\r
-                        return 0\r
-                if text.find("音量增大") != -1:\r
-                        self.VC_TTS_volume += 10\r
-                        if self.VC_TTS_volume > 100:\r
-\r
-                            self.AI_TTS_str = "音量已经是最大啦" \r
-                            self.VC_TTS_volume = 100\r
-                        else:\r
-                            self.aud.setVolume(self.VC_TTS_volume //10)\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume])\r
-  \r
-                            self.AI_TTS_str = "了解,音量已经调大了,当前音量是{}".format(self.VC_TTS_volume)\r
-                            \r
-                        return 0\r
-                if text.find("音量减小") != -1:\r
-                    self.VC_TTS_volume -= 10\r
-                    if self.VC_TTS_volume < 0:\r
-                        self.VC_TTS_volume = 0\r
-                        #EventMesh.publish("audio_montage_play",["yinliangyizuixiao.mp3"])\r
-                        #self.aud.play(1,0,'U:/static/yinliangyizuixiao.mp3')#音量已最小\r
-                        self.AI_TTS_str = "音量已经是最小啦"\r
-                    else:\r
-                        self.aud.setVolume(self.VC_TTS_volume //10)\r
-                        EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume])\r
-\r
-                        self.AI_TTS_str = "好嘞,音量已经调小了,当前音量是{}".format(self.VC_TTS_volume)\r
-                    return 0\r
-                \r
-                if text.find("语速增大") != -1:\r
-                        self.speech_rate += 10\r
-                        if self.speech_rate > 50:\r
-\r
-                            self.AI_TTS_str = "语速已经是最快啦" \r
-                            self.speech_rate = 50\r
-                        else:\r
-                            \r
-                            EventMesh.publish("set_storage_config",["speech_rate",self.speech_rate])\r
-  \r
-                            self.AI_TTS_str = "明白,语速已经调快了,当前语速是{}".format(self.speech_rate)\r
-                            \r
-                        return 0\r
-                if text.find("语速减小") != -1:\r
-                    self.speech_rate -= 10\r
-                    if self.speech_rate < -50:\r
-                        self.speech_rate = -50\r
-                        #EventMesh.publish("audio_montage_play",["yinliangyizuixiao.mp3"])\r
-                        #self.aud.play(1,0,'U:/static/yinliangyizuixiao.mp3')#音量已最小\r
-                        self.AI_TTS_str = "语速已经是最慢啦"\r
-                    else:\r
-                        EventMesh.publish("set_storage_config",["speech_rate",self.speech_rate])\r
-\r
-                        self.AI_TTS_str = "明白,语速已经调慢了,当前语速是{}".format(self.speech_rate)\r
-                    return 0\r
-                \r
-                if text.find("进入工厂模式") != -1 :\r
-                    self.factory_mode()\r
-                    return 1\r
-                if text.find("查询") != -1:\r
-                    if text.find("信号") != -1 :\r
-                        signal = net.csqQueryPoll()\r
-                        \r
-                        self.AI_TTS_str = "当前信号{}".format(signal)\r
-                        return 0\r
-                    if text.find("电量") != -1 :\r
-                        battery = EventMesh.publish("get_battery")\r
-                        print("电量查询:{}".format(battery))\r
-                        #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])\r
-                        #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余\r
-                        self.AI_TTS_str = "电量剩余百分之{}".format(battery)\r
-                        return 0\r
-                    if text.find("电压") != -1 :\r
-                        Vbatt = Power.getVbatt()\r
-                        #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])\r
-                        #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余\r
-                        self.AI_TTS_str = "当前电池电压{}".format(Vbatt)\r
-                        return 0\r
-\r
-                    if text.find("卡号") != -1 :\r
-                        iccid = sim.getIccid()\r
-                        if iccid != -1 and len(iccid) > 5:\r
-                            print("iccid{}".format(iccid))\r
-                            self.AI_TTS_str = "当前卡号为:{}".format(iccid)\r
-                        else:\r
-                            self.AI_TTS_str = "卡号查询失败"\r
-                        return 0\r
-                    if text.find("设备号") != -1 :\r
-                        imei = modem.getDevImei()\r
-                        if imei != -1 and len(imei) > 5:\r
-                            print("IMEI:{}".format(imei))\r
-                            self.AI_TTS_str = "当前设备号为:{}".format(imei)\r
-                        else:\r
-                            self.AI_TTS_str = "设备号查询失败"\r
-                        return 0\r
-                    if text.find("版本") != -1 :\r
-                        sourceVersion = versions.Build_Time\r
-                        self.AI_TTS_str ="Mr-Seven-"+sourceVersion\r
-                        return 0\r
-                    if text.find("服务器地址") != -1 :\r
-                        self.AI_TTS_str ="服务器地址"+self.server_ip\r
-                        return 0\r
-                if text.find("升级") != -1 and (text.find("OTA") != -1 or text.find("ota") != -1):\r
-                    if self.ai_OTA.min_sys_ota()==1:\r
-                        self.AI_TTS_str = "有新版本,准备开始升级,升级过程会多次重启设备,请保证流量充足及电量充足"\r
-                    else:\r
-                        self.AI_TTS_str = "当前已是最新版本"\r
-                    return 0\r
-                \r
-                if len(text)<20 and (text.find("再见") != -1 or text.find("拜拜") != -1 or text.find("关闭对话") != -1):\r
-                    #EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                    self.AI_TTS_str = "好嘞,再见,我们下次再聊"\r
-                    self.Close_flag = 1\r
-                    return 0\r
-                if len(text)<12 and (text.find("关机") != -1 ):\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                    EventMesh.publish("Power_off")\r
-                    return 1\r
-        except Exception as e:\r
-                usys.print_exception(e)\r
-        self.AI_TTS_str  = cmd["command"]["fail_prompt"]\r
-        return -1\r
-    def check_text(self,text):\r
-        if len(text)>60:\r
-            return -1\r
-        try:\r
-            if isinstance(text, str): \r
-                if text.find("声音") != -1 and text.find("改") != -1:\r
-                    try:\r
-                        for key in self.VC_TTS_voice_type:\r
-                            if  text.find(key) != -1 :\r
-                                self.VC_TTS_voice_key = key\r
-                                EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                                self.AI_TTS_str = "更改成功" \r
-                                return 0\r
-                    except Exception as e:\r
-                        usys.print_exception(e)    \r
-                    if  text.find("男") != -1 :\r
-                        if "男" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "男"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("女") != -1 :\r
-                        if "女" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "女"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("同声") != -1 or text.find("童") != -1 :\r
-                        if "童" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "童"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("粤") != -1 or text.find("越野") != -1 or text.find("广东话") != -1:\r
-                        if "粤" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "粤"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("四川") != -1 :\r
-                        if "四川" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "四川"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("个性") != -1 :\r
-                        if "个性" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "个性"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    if text.find("英语") != -1 :\r
-                        if "英语" in self.VC_TTS_voice_type:\r
-                            self.VC_TTS_voice_key = "英语"\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_voice_key",self.VC_TTS_voice_key])\r
-                            # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-                            self.AI_TTS_str = "更改成功" \r
-                            return 0\r
-                    self.AI_TTS_str = "更改失败,没找到对应声音" \r
-                    return 0\r
-                if text.find("切换对话模式") != -1:\r
-                    if self.VC_mode == 0:\r
-                       self.VC_mode = 1\r
-                       self.AI_TTS_str = "已切换到单对话模式" \r
-                    else:\r
-                        self.VC_mode = 0 \r
-                        self.AI_TTS_str = "已切换到长对话模式" \r
-                    EventMesh.publish("set_storage_config",["VC_mode",self.VC_mode])\r
-                    # EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                    #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-\r
-                    return 0\r
-                if text.find("音量") != -1:\r
-                    if  text.find("加") != -1 :\r
-                        self.VC_TTS_volume += 10\r
-                        if self.VC_TTS_volume > 100:\r
-                            #EventMesh.publish("audio_montage_play",["yinliangyizuida.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/yinliangyizuida.mp3')#音量已最大\r
-                            self.AI_TTS_str = "音量已最大" \r
-                            self.VC_TTS_volume = 100\r
-                        else:\r
-                            self.aud.setVolume(self.VC_TTS_volume //10)\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume])\r
-                            #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功\r
-                            self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)\r
-                            \r
-                        return 0\r
-                    if text.find("减") != -1:\r
-                        self.VC_TTS_volume -= 10\r
-                        if self.VC_TTS_volume < 0:\r
-                            self.VC_TTS_volume = 0\r
-                            #EventMesh.publish("audio_montage_play",["yinliangyizuixiao.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/yinliangyizuixiao.mp3')#音量已最小\r
-                            self.AI_TTS_str = "音量已最小"\r
-                        else:\r
-                            self.aud.setVolume(self.VC_TTS_volume //10)\r
-                            EventMesh.publish("set_storage_config",["VC_TTS_volume",self.VC_TTS_volume])\r
-                            #EventMesh.publish("audio_montage_play",["peizhichenggong.mp3"])\r
-                            #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#配置成功\r
-                            self.AI_TTS_str = "配置成功,当前音量 {}".format(self.VC_TTS_volume)\r
-                        return 0\r
-                \r
-                if text.find("进入工厂模式") != -1 :\r
-                    self.factory_mode()\r
-                    return 1\r
-                if text.find("查询") != -1:\r
-\r
-                    if text.find("信号") != -1 :\r
-                        signal = net.csqQueryPoll()\r
-                        \r
-                        self.AI_TTS_str = "当前信号{}".format(signal)\r
-                        return 0\r
-                    if text.find("电量") != -1 :\r
-                        battery = EventMesh.publish("get_battery")\r
-                        print("电量查询:{}".format(battery))\r
-                        #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])\r
-                        #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余\r
-                        self.AI_TTS_str = "电量剩余百分之{}".format(battery)\r
-                        return 0\r
-                    if text.find("电压") != -1 :\r
-                        Vbatt = Power.getVbatt()\r
-                        #EventMesh.publish("audio_montage_play",["dianliangshengyu{}.mp3".format(battery)])\r
-                        #self.aud.play(1,0,'U:/static/dianliangshengyu{}.mp3'.format(battery))#电量剩余\r
-                        self.AI_TTS_str = "当前电池电压{}".format(Vbatt)\r
-                        return 0\r
-\r
-                    if text.find("卡号") != -1 :\r
-                        iccid = sim.getIccid()\r
-                        if iccid != -1 and len(iccid) > 5:\r
-                            print("iccid{}".format(iccid))\r
-                            self.AI_TTS_str = "当前卡号为:{}".format(iccid)\r
-                        else:\r
-                            self.AI_TTS_str = "卡号查询失败"\r
-                        return 0\r
-                    if text.find("设备号") != -1 :\r
-                        imei = modem.getDevImei()\r
-                        if imei != -1 and len(imei) > 5:\r
-                            print("IMEI:{}".format(imei))\r
-                            self.AI_TTS_str = "当前设备号为:{}".format(imei)\r
-                        else:\r
-                            self.AI_TTS_str = "设备号查询失败"\r
-                        return 0\r
-                    if text.find("版本") != -1 :\r
-                        sourceVersion = versions.Build_Time\r
-                        self.AI_TTS_str ="Mr-Seven-"+sourceVersion\r
-                        return 0\r
-                    if text.find("服务器地址") != -1 :\r
-                        self.AI_TTS_str ="服务器地址"+self.server_ip\r
-                        return 0\r
-                if text.find("升级") != -1 and (text.find("OTA") != -1 or text.find("ota") != -1):\r
-                    if self.ai_OTA.min_sys_ota()==1:\r
-                        self.AI_TTS_str = "有新版本,准备开始升级,升级过程会多次重启设备,请保证流量充足及电量充足"\r
-                    else:\r
-                        self.AI_TTS_str = "当前已是最新版本"\r
-                    return 0\r
-                \r
-                if len(text)<16 and (text.find("再见") != -1 or text.find("拜拜") != -1 or text.find("关闭对话") != -1):\r
-                    #EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                    if dev_type != "7PIN":#柒牌\r
-                        self.AI_TTS_str = "好嘞,再见,我们下次再聊"\r
-                        self.Close_flag = 1\r
-                        return 0\r
-                    else:\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                        return 1\r
-                if len(text)<12 and (text.find("关机") != -1 ):\r
-                    if dev_type == "7PIN":#柒牌\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                        return 1\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                    EventMesh.publish("Power_off")\r
-                    return 1\r
-        except Exception as e:\r
-                usys.print_exception(e)\r
-        return -1\r
-    #获取trace_id\r
-    def get_trace_id(self):\r
-        t = utime.mktime(utime.localtime())\r
-        t = t*1000+urandom.randint(0, 1000)\r
-        md5_data = "{}".format(t)#md5签名\r
-        sign_data = ""\r
-        hash_obj = uhashlib.md5(md5_data)\r
-        res = hash_obj.digest()\r
-\r
-        # 转成十六进制表示\r
-        sign_data = ubinascii.hexlify(res)\r
-        sign_data = sign_data.decode('ascii')\r
-        return sign_data\r
-    \r
-    def get_session_id(self,data = "session_id"):\r
-        t = utime.mktime(utime.localtime())\r
-        t = t*1000+urandom.randint(0, 1000)\r
-        md5_data = "{}{}".format(data,t)#md5签名\r
-        sign_data = ""\r
-        hash_obj = uhashlib.md5(md5_data)\r
-        res = hash_obj.digest()\r
-\r
-        # 转成十六进制表示\r
-        sign_data = ubinascii.hexlify(res)\r
-        sign_data = sign_data.decode('ascii')\r
-        return sign_data\r
-    \r
-    def get_new_message_id(self):\r
-        message_id = self.get_trace_id()+"aaa"+self.get_trace_id()\r
-        self.VC_message_id=message_id[:32]\r
-        return self.VC_message_id \r
-    def get_new_task_id(self):\r
-        task_id = self.get_trace_id()+"aaa"+self.get_trace_id()\r
-        self.VC_task_id=task_id[:32]\r
-        return self.VC_task_id\r
-    #开始播放声音\r
-    def VC_Play_Start(self):\r
-        self.tts_in_data_len = 0\r
-        self.tts_out_data_len = 0\r
-        if self.VC_Play_flag == 0:\r
-            try:\r
-                if self.VC_play_TYPE == VC_play_TYPE_PCM:\r
-                    if self.play_pcm == None:        \r
-                        self.play_pcm = audio.Audio.PCM(0,1,self.VC_play_samplerate,1,1,2)\r
-                        #self.play_pcm.setVolume(11)\r
-                        ret = self.play_pcm.stream_write_start()\r
-                        print("self.record_pcm.stream_write_start:ret:{}".format(ret))\r
-                elif self.VC_play_TYPE == VC_play_TYPE_MP3:\r
-                    pass\r
-                self.VC_Play_flag = 1\r
-            except Exception as e:\r
-                self.VC_Play_End()\r
-                usys.print_exception(e)\r
-    #暂停/继续声音播放   Pause_flag = 1暂停\r
-    def VC_Play_Pause(self,Pause_flag):\r
-        try:\r
-            if self.VC_play_TYPE == VC_play_TYPE_PCM:\r
-                if self.play_pcm != None:    \r
-                    self.play_pcm.stream_pause(Pause_flag)\r
-        except Exception as e:\r
-            self.VC_Play_End()\r
-            usys.print_exception(e)\r
-    #停止播放声音\r
-    def VC_Play_End(self):\r
-        self.VC_Play_flag = 0\r
-        if self.VC_play_TYPE == VC_play_TYPE_PCM:\r
-            if self.VC_play_samplerate == 8000:\r
-                self.aud.stopPlayStream()\r
-                self.aud.stopAll()\r
-            elif self.VC_play_samplerate == 16000:\r
-                if self.play_pcm != None:\r
-                    print("Close:play_pcm.close()!!!!!!!!!!!!!!!!!!")\r
-                    try:\r
-                        self.play_pcm.stream_stop()\r
-                        self.play_pcm.close()\r
-                    except Exception as e:\r
-                        usys.print_exception(e)\r
-                    self.play_pcm=None\r
-                self.aud.stopPlayStream()\r
-                self.aud.stopAll()\r
-        elif self.VC_play_TYPE == VC_play_TYPE_MP3:\r
-            self.aud.stopPlayStream()\r
-            self.aud.stopAll()\r
-        if self.AI_audio_queue.empty()!=True:\r
-            self.AI_audio_queue.clear()\r
-        \r
-\r
-    def _1S_timer_cb(self,*argc):\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self._1S_timer_cb_}) \r
-\r
-    def _1S_timer_cb_(self):    \r
-    \r
-        EventMesh.publish("system_sleep_rest")#防止黑屏\r
-        self.close_timerout += 1\r
-        if self.close_timerout > 60:#20秒没数据就close\r
-            \r
-            if self.VC_state >= VC_State_SpeechIng:\r
-                print("接口无响应,超时退出")\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"接口超时了。请重试"}) \r
-                self.ud_error(["VC",self.VC_taskid])\r
-            else:\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-        # print("get_audio_state !!!!!{} {} {}\r\n".format(self.play_end,EventMesh.publish("get_audio_state"),self.play_flag))\r
-        if self.LocalRespondingEnded_timerout>0  :#\r
-            self.LocalRespondingEnded_timerout -= 1\r
-            print("LocalRespondingEnded_timerout:{}".format(self.LocalRespondingEnded_timerout))\r
-            if self.LocalRespondingEnded_timerout <= 0 or (self.play_pcm != None and self.play_pcm.stream_is_empty() == 1) :#超时或者音频播放完,\r
-                self.LocalRespondingEnded_timerout = 0\r
-                if self.VC_mode == 1 :#长按单次问答模式\r
-                    EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                else:\r
-                    EventMesh.publish("open_led_blue")\r
-                    if self.Close_flag == 1:\r
-                        self.Close_flag = 0\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-                    else:\r
-                        #utime.sleep_ms(1000)\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_End})\r
-                        #EventMesh.publish("publish_AI_btnInfo",{"func":self.chenggong_tone})\r
-                        EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start_now})#开始录音\r
-                        self.VC_state = VC_State_None\r
-                    #通知服务器播放结束\r
-                    #self.AI_client_VC_LocalRespondingEnded()\r
-\r
-        self.VC_pingping_timerout+=1\r
-        if self.VC_pingping_timerout>3:\r
-            self.VC_pingping_timerout=0\r
-            self.AI_client_VC_ping()\r
-        # self.asr_pingping_timerout += 1\r
-        # if self.asr_pingping_timerout>3:\r
-        #     self.asr_pingping_timerout=0\r
-        #     self.AI_client_asr_ping()    \r
-        if self.VC_Thinking_timerout > 0 and self.VC_Thinking_timerout < 100:#VC Thinking超时后重新开始\r
-            print("VC_Thinking_timerout:{}!!!!!!!!!!!!!!!!!!!!!".format(self.VC_Thinking_timerout))\r
-            self.VC_Thinking_timerout -=1\r
-            if self.VC_Thinking_timerout == 0:\r
-                self.VC_Thinking_timerout = 100\r
-                print("Thinking重试,重试!!!!!!!!!!!!!!!!!!!!!")\r
-                self.VC_state = VC_State_None\r
-                EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) \r
-                pass\r
-        \r
-    #VC开始\r
-    def AI_VC_start(self):\r
-        print("AI_VC_start1")\r
-        self.VC_satrt_flag = 1\r
-        if self.VC_Thinking_timerout < 100:\r
-            self.VC_Thinking_timerout = 0\r
-        EventMesh.publish("open_led_all")\r
-        self.VC_Play_End()#关闭音频播放\r
-        print("AI_VC_start2")\r
-        #self.aud.aud_tone_play(16,200)#播放按键音\r
-        self.LocalRespondingEnded_timerout = 0\r
-        self.close_timerout = 0\r
-\r
-        \r
-        #\r
-        if self.AI_client_VC_isconnect == 0:#没连接的时候请求开始\r
-            self.websocket_connect_VC()#连接服务器\r
-            \r
-            #utime.sleep_ms(50)\r
-        else:\r
-            print("self.VC_state :{}".format(self.VC_state ))\r
-            \r
-        if self.AI_client_VC_isconnect == 0:\r
-            return\r
-        self.AI_client_VC_start_requset()\r
-        print("AI_VC_start3")\r
-         \r
-        self.VC_state = VC_State_None\r
-        if self.AI_TTS_str == "":#没有tts要播放的时候才开始录音\r
-            #开始asr录音\r
-            self.VC_Speech_Start()#开启线程获取录音数据\r
-           \r
-                \r
-        #     pass\r
-        print("AI_VC_start4")\r
-        #self.VC_Play_Start()\r
-        #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Play_Start})\r
-        #开始线程\r
-        \r
-        # if self.AI_VC_send_data_queue_thread_id == 0:    \r
-        #     _thread.stack_size(self.Audio_buf_size+8*1024)\r
-        #     self.AI_VC_send_data_queue_thread_id = _thread.start_new_thread(self.AI_VC_send_data_queue_thread, ())\r
-        #     _thread.stack_size(8*1024)\r
-        #     print("AI_VC_start :AI_VC_send_data_queue_thread_id :{} ".format(self.AI_VC_send_data_queue_thread_id))\r
-        \r
-        if self.AI_audio_queue_thread_id ==0:\r
-            _thread.stack_size(24*1024)\r
-            self.AI_audio_queue_thread_id = _thread.start_new_thread(self.AI_audio_queue_thread, ())\r
-            _thread.stack_size(8*1024)\r
-            print("AI_VC_start :AI_audio_queue_thread_id :{} ".format(self.AI_audio_queue_thread_id))\r
-        else:\r
-            print("AI_VC_start :AI_audio_queue_thread_id != 0 ")\r
-        self._1S_timer.start(1000,1,self._1S_timer_cb)\r
-        # self.VC_pingping_timerout = 0\r
-        # self.asr_pingping_timerout = 0\r
-        print("AI_VC_start5")\r
-    #开始会话\r
-    def AI_client_VC_start_requset(self):\r
-        voice="zh_male_wennuanahu_moon_bigtts"\r
-        try:\r
-            voice = self.VC_TTS_voice_type[self.VC_TTS_voice_key]["voice"]\r
-        except Exception as e:\r
-            usys.print_exception(e)    \r
-        #voice="zh_female_dongmanxiaoyang_moon_bigtts"\r
- \r
-        json_data = \\r
-        {\r
-            "header": {\r
-                "event": "Start",\r
-                "trace_id": self.get_trace_id(),\r
-            },\r
-            "payload": {\r
-                "device_id": modem.getDevImei(),\r
-                "user_agent": "AudioClient/1.0",\r
-                "dialog_attributes": {\r
-                    #"provider": "doubao",\r
-                    "provider": "coze",\r
-\r
-                    "cfg": {\r
-                        "disable_empty_prompt" : True,#拦截空字符请求大模型\r
-                        "custom_variables": {\r
-                            "name": self.bot_name,\r
-                            },\r
-                        # "greeting":{\r
-                        #     "enabled":True,\r
-                        #     "content":"小瑞来陪你聊天了!"\r
-                        # }\r
-                        "bot_option": {\r
-                            "use_workflow": True,\r
-                            \r
-                            "bot_id":"7462617881076351002",#语言助手\r
-                            "workflow_id":"7462621757327196187",\r
-                           \r
-                        }\r
-                    }\r
-                },\r
-                "outbound_attributes": {\r
-                    "provider": "volcengine",\r
-                    "cfg": {\r
-                        "format": "pcm",\r
-                        "sample_rate": self.VC_play_samplerate,\r
-                        "bit_rate": 16,\r
-                        "channel": 1,\r
-                        "volume": self.VC_TTS_volume,\r
-                        #"voice": "7426720361732980745",\r
-                        "voice": voice,#音色\r
-                        "speech_rate": self.speech_rate,#语速\r
-                        "chunk_interval_ms": 100,  # 配置每段音频入队间隔时间 100ms\r
-                    }\r
-                },\r
-                "inbound_attributes": {\r
-                    "provider": "xun-fei",#\r
-                    #"provider": "volcengine",\r
-                    "disable_vad":True,\r
-                    "vad_silence":300,\r
-                    "interrupt_options":{\r
-                        "concatenate_results":True,\r
-                        "thinking_time_only": True,\r
-                    },\r
-                    "cfg": {\r
-                        "format": "pcm",\r
-                        "sample_rate": self.VC_record_samplerate,\r
-                        "bit_rate": 16,\r
-                        "channel": 1,\r
-                        "enable_punctuation": True,\r
-                        "enable_itn":True\r
-                    }\r
-                },\r
-                "commands":self.commands,\r
-            }\r
-        }\r
-        # "bot_id":"7481164663863459850",#鸭子\r
-        # "workflow_id":"7480485093845991443",\r
-        # "bot_id":"7462617881076351002",#语言助手\r
-        # "workflow_id":"7462621757327196187",\r
-        # "bot_id":"7469964258592931852",#深圳百事通\r
-        # "workflow_id":"7469968083063603241",\r
-        # "bot_id":"7411071327182438412",#柒牌\r
-        # "workflow_id":"7469049680291610636",\r
-        if dev_type == "7PIN_BK":#小瑞\r
-            # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["bot_id"]="7462617881076351002"#语言助手\r
-            # json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["workflow_id"]="7462621757327196187"\r
-            json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["bot_id"]="7486697248416989193"#极简\r
-            json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["workflow_id"]="7486698347416649778"\r
-            #json_data["payload"]["dialog_attributes"]["provider"]="doubao"#豆包\r
-            json_data["payload"]["inbound_attributes"]["provider"]="volcengine"#火山\r
-            json_data["payload"]["inbound_attributes"]["vad_silence"] = 200\r
-        elif dev_type == "7PIN":#柒牌\r
-            json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["bot_id"]="7411071327182438412"#\r
-            json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["workflow_id"]="7469049680291610636"\r
-            json_data["payload"]["inbound_attributes"]["vad_silence"] = 1000\r
-        #\r
-        elif dev_type == 'momo':#食梦貘\r
-            pass\r
-        elif dev_type == 'sjgq':#四季甘泉\r
-            json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["bot_id"]="7472201279826690111"\r
-            json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["workflow_id"]="472203898494500914"\r
-            pass\r
-        elif dev_type == 'szbst':#深圳百事通\r
-            json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["bot_id"]="7469964258592931852"\r
-            json_data["payload"]["dialog_attributes"]["cfg"]["bot_option"]["workflow_id"]="7469968083063603241"\r
-        if self.commands_mode !=0:\r
-            json_data["payload"]["commands"] = []\r
-        if self.VC_mode == 0:#长对话模式打开vad\r
-            json_data["payload"]["inbound_attributes"]["disable_vad"] = False\r
-        self.VC_state = VC_State_None\r
-        self.AI_client_VC_send(ujson.dumps(json_data))\r
- \r
-    #开始上传语音\r
-    def AI_client_VC_send_speech(self):\r
-        json_data = \\r
-        {\r
-            "header": {\r
-                "event": "audio.create",\r
-                \r
-            },\r
-        }\r
-        \r
-        if self.VC_mode == 1:#单对话模式\r
-            self.AI_client_VC_send(ujson.dumps(json_data))\r
-        \r
-\r
-            \r
-            \r
-        \r
-        \r
-        self.VC_state =  VC_State_SpeechStart\r
-    #结束上传语音\r
-    def AI_client_VC_end_speech(self):\r
-        json_data = \\r
-        {\r
-            "header": {\r
-                "event": "audio.completed",\r
-                \r
-            },\r
-        }\r
-        self.AI_client_VC_send(ujson.dumps(json_data))\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})\r
-\r
-  \r
-    #客户端打断对话\r
-    def AI_client_VC_RequestToSpeak(self):\r
-        json_data = \\r
-        {\r
-            "event": "cancel",\r
-            "payload": {}\r
-        }\r
-        print("AI_client_VC_RequestToSpeak!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        # EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_init}) \r
-        # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_VC_send,"data":ujson.dumps(json_data)}) \r
-        # utime.sleep_ms(1)\r
-        self.websocket_deconnect_VC()\r
-        self.AI_audio_queue_thread_close()\r
-        self.VC_state = VC_State_None\r
-        #self.Close()\r
-        self.AI_VC_start() \r
-    #TTS播放\r
-    def AI_client_VC_synthesis(self):\r
-        json_data = \\r
-        {\r
-            "event": "synthesis",\r
-            "payload": {\r
-                "text": self.AI_TTS_str\r
-            }\r
-        }\r
-        self.AI_TTS_str = ""\r
-        print("AI_client_VC_synthesis!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        # if self.VC_state == VC_State_RequestToRespond:\r
-        #     print("AI_client_VC_RequestToRespond 重复 tts_str:{}\nasr_str:{}".format(self.AI_TTS_str,self.AI_ASR_str))\r
-        self.AI_client_VC_send(ujson.dumps(json_data))\r
-    \r
-    def chenggong_tone(self):\r
-        EventMesh.publish("audio_montage_play",["chenggong.mp3"])    \r
-    def send_tone(self):\r
-        EventMesh.publish("audio_montage_play",["send_tone.mp3"])\r
-    #给服务器回应ack\r
-\r
-      \r
-    ############################################\r
-    #关闭音频播放线程\r
-    def AI_audio_queue_thread_close(self):\r
-        print("AI_audio_queue_thread_close1!!!!!!!!!!!!!!!!!!!!!!")\r
-        if self.AI_audio_queue_thread_id != 0:\r
-            count =500\r
-            while True:\r
-                count -= 1\r
-                if self.AI_audio_queue_thread_lock == 0 or count <=0:\r
-                    break\r
-                else:\r
-                    self.AI_audio_queue_thread_lock = 2\r
-                    print("AI_audio_queue_thread going:{}...".format(count))\r
-                    utime.sleep_ms(1)\r
-            self.AI_audio_queue_thread_lock = 0\r
-            print("AI_audio_queue_thread_close2!!!!!!!!!!!!!!!!!")\r
-            try:\r
-                _thread.stop_thread(self.AI_audio_queue_thread_id)\r
-            except Exception as e:\r
-                usys.print_exception(e)\r
-        self.AI_audio_queue_thread_id = 0\r
-    # 音频队列        \r
-    def AI_audio_queue_thread(self):\r
-        print("AI_audio_queue_thread start")\r
-        count = 0\r
-        if self.AI_audio_queue.empty()!=True:\r
-            self.AI_audio_queue.clear()\r
-            print("音频数据还有剩余!!!!!!!!!!!!")\r
-        while True:\r
-            try:\r
-                if self.AI_audio_queue_thread_lock == 2:\r
-                        print("AI_audio_queue_thread 该退出了")\r
-                        break\r
-                #\r
-                count+=1\r
-                if count%500 == 1:\r
-                    print("AI_audio_queue_thread on")\r
-                utime.sleep_ms(1)\r
-                #print("AI_audio_queue_thread")\r
-                if self.AI_audio_queue.empty() :\r
-                    self.AI_audio_queue_thread_lock = 0\r
-                    \r
-                    \r
-                else:\r
-                    self.AI_audio_queue_thread_lock = 1\r
-                    data = self.AI_audio_queue.get()\r
-                    self.close_timerout = 0\r
-                    if self.play_flag == 0:\r
-                        self.play_flag =1\r
-                    #self.AI_client_tts_data_len=len(data)\r
-                    #print("audio_queue:len:{}".format(len(data[0])))\r
-                    \r
-                    if len(data[0]) > 10:\r
-                        for i in range(5): \r
-                            if self.VC_Play_flag == 0:\r
-                                self.VC_Play_Start()\r
-                                utime.sleep_ms(2)\r
-                            else:\r
-                                break\r
-                        try:\r
-                            if self.VC_play_TYPE == VC_play_TYPE_PCM:\r
-                                # if self.VC_play_samplerate == 8000:\r
-                                #     tmp= self.aud.playStream(1,data[0] )\r
-                                # else:\r
-                                    write_buf = bytearray(data[0])\r
-                                    #print("play_pcm.stream_write1 len:{}".format(len(write_buf)))\r
-                                    if self.play_pcm != None:\r
-                                        #print("play_pcm.stream_write !!!")\r
-                                        ret = self.play_pcm.stream_write(write_buf,len(write_buf))\r
-                                        #ret= self.aud.playStream(1, data[0])#播放音频流\r
-                                        self.tts_out_data_len += ret\r
-                                        #print("play_pcm.stream_write2:{}".format(self.tts_out_data_len))\r
-                            elif self.VC_play_TYPE == VC_play_TYPE_MP3:\r
-                                tmp= self.aud.playStream(3, data[0])#播放音频流\r
-                                \r
-                                if tmp != 0:\r
-                                    print("2playStream:error tmp:{} data len:{}!!!!!!!!!!!!".format(tmp,len(data[0])))\r
-                                    # # #播放失败的时候填充WAV头\r
-                                    # data_len = len(data[0])\r
-                                    # data_len_b = data_len.to_bytes(4,'little')#数据长度转16进制数组\r
-                                    # h_data = [ 0x52 ,0x49 ,0x46 ,0x46 #,0x24 ,0x00 ,0x00 ,0x00 #文件标识、文件大小\r
-                                    #         ,0x57 ,0x41 ,0x56 ,0x45 ,0x66 ,0x6D ,0x74 ,0x20  #文件格式、格式块标识符\r
-                                    #         ,0x10 ,0x00 ,0x00 ,0x00 ,0x01 ,0x00 ,0x01 ,0x00 ,0x80 ,0x3E ,0x00 ,0x00  #格式块大小4、音频格式2、声道数2、采样率4\r
-                                    #         ,0x80 ,0x3E ,0x00 ,0x00 ,0x02 ,0x00 ,0x10 ,0x00 ,0x64 ,0x61 ,0x74 ,0x61]#每秒字节数4、数据块对齐2、位深度2、data4\r
-                                    # h_data_b = bytes(h_data)\r
-                                    # file_len = data_len+len(h_data_b)+4+4\r
-                                    # file_len_b = file_len.to_bytes(4,'little')#文件长度转16进制数组\r
-                                    # h_data_b = h_data_b[:4]+file_len_b+h_data_b[4:]+data_len_b\r
-                                    # #self.aud.playStream(2, h_data_b)#播放音频流\r
-                                    # tmp= self.aud.playStream(2, h_data_b+data[0])#播放音频流\r
-                                    # print("3playStream:tmp:{} !!!!!!!!!!!!".format(tmp))\r
-                            \r
-                            \r
-                            mem = gc.mem_free()\r
-                            #print('1剩余内存RAM:{} KB'.format(mem / 1024))\r
-                        except Exception as e:\r
-                            print("AI_audio_queue_thread:ERROR:")\r
-                            usys.print_exception(e)\r
-                    \r
-                    # if self.VC_state == VC_State_TTSEnd and self.AI_audio_queue.empty() :#self.AI_audio_queue为空且tts下发结束\r
-                    #     #通知服务器播放结束\r
-                    #     self.AI_client_VC_LocalRespondingEnded()\r
-            except Exception as e:\r
-                print("AI_audio_queue_thread:ERROR:")\r
-                usys.print_exception(e)\r
-        self.AI_audio_queue_thread_lock = 0\r
-        #print("AI_audio_queue_thread:exit")\r
-    def factory_mode(self):\r
-        print("factory_mode")\r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) \r
-        EventMesh.publish("publish_AI_btnInfo",{"func":self.factory_start}) \r
-    def factory_start(self):\r
-        self.factory_timer.start(3000, 1, self.factory_timer_cb)\r
-    def factory_timer_cb(self, *args, **kwargs):\r
-        print("factory_timer_cb play......")\r
-        #self.aud.play(1,0,'U:/static/peizhichenggong.mp3')#切换成功\r
-        EventMesh.publish("audio_montage_play",["xinhaoruo1.mp3"])\r
-\r
-    def Close(self):\r
-        self.VC_Thinking_timerout = 0\r
-        self.VC_satrt_flag = 0\r
-        self.AI_TTS_str = ""\r
-        self.AI_ASR_str = ""\r
-        self.AI_ASR_str_tmp = ""\r
-        self.AI_ASR_flag  = 0\r
-        self.AI_ASR_check_timeout = 0\r
-        self.AI_ASR_error_timeout = 0\r
-        print("ai_VC Close1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        EventMesh.publish("close_led")\r
-        self.tts_in_data_len = 0\r
-        self.tts_out_data_len = 0\r
-        #必须先销毁线程,不然线程会容易报错\r
-        \r
-        try:\r
-            self.AI_audio_queue_thread_close()#销毁音频线程\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        try:\r
-            self.AI_VC_send_data_queue_thread_close()#销毁数据发送线程\r
-        except Exception as e: \r
-            usys.print_exception(e)\r
-        \r
-        self.VC_Speech_End()\r
-        \r
-        print("ai_VC Close1.1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        self.VC_init()\r
-        print("ai_VC Close1.2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        \r
-        try:\r
-            self.websocket_deconnect_VC()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        \r
-\r
-        \r
-\r
-\r
-        print("ai_VC Close1.3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        \r
-        print("ai_VC Close2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        \r
-        \r
-        self.AI_ASR_timer.stop()\r
-        self._1S_timer.stop()\r
-        self.factory_timer.stop()\r
-        \r
-        if self.record_data_save_flag == 1:\r
-            if self.record_fd :\r
-                self.record_fd.close()\r
-            self.record_fd = None\r
-        if self.play_data_save_flag == 1:\r
-            if self.play_fd !=None:\r
-                self.play_fd.close()\r
-                self.play_fd = None\r
-        print("ai_VC Close3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n")\r
-        \r
-        if self.AI_VC_send_data_queue.empty()!=True:\r
-            self.AI_VC_send_data_queue.clear()\r
-\r
-        self.AI_ASR_send_buf_len = 0\r
-        #self.AI_WS_connect_Queue.put(self.AI_client_VC)\r
-\r
-        # try:\r
-        #     while True:\r
-        #         if self.AI_WS_connect_Queue.empty()!=True:\r
-        #             AI_WS_connect = self.AI_WS_connect_Queue.get()\r
-        #             if AI_WS_connect :\r
-        #                 try:\r
-        #                     AI_WS_connect._close()\r
-        #                     AI_WS_connect = None\r
-        #                 except Exception as e:\r
-        #                     usys.print_exception(e)\r
-        #             else:\r
-        #                 print("websocket链接已为空")\r
-        #         else:\r
-        #             break\r
-        # except Exception as e:\r
-        #     usys.print_exception(e)\r
-\r
-    def VC_init2(self):\r
-        self.VC_init()\r
-        \r
-        print("ai_VC VC_init2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")\r
-        try:\r
-            self.websocket_deconnect_VC()\r
-        except Exception as e:\r
-            usys.print_exception(e)\r
-        print("ai_VC Close3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n")\r
-        self._1S_timer.stop()\r
-        if self.AI_VC_send_data_queue.empty()!=True:\r
-            self.AI_VC_send_data_queue.clear()\r
-\r
-        self.AI_ASR_send_buf_len = 0\r
-        if self.AI_audio_queue.empty()!=True:\r
-            self.AI_audio_queue.clear()\r
-    def VC_init(self):\r
-        \r
-        print("VC_init:AI_VC_send_data_queue:size:{}".format(self.AI_VC_send_data_queue.size()))\r
-        \r
-        \r
-        print("VC_init2")\r
-        #self.VC_Speech_End()\r
-        print("VC_init3")\r
-        self.VC_Play_End()\r
-        print("VC_init4")\r
-        \r
-        if self.AI_audio_queue.empty()!=True:\r
-            self.AI_audio_queue.clear()\r
-        # num = EventMesh.publish("get_volum_size")\r
-        # if num == None:\r
-        #     num = 8\r
-        # self.aud.setVolume(num)#恢复原始音量\r
-        
\ No newline at end of file