From: p15692025051 <846603105@qq.com> Date: Thu, 23 Jan 2025 01:08:02 +0000 (+0800) Subject: 202501230907备份 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=6f2fe6d3ac59e8efa280ddc945f1508cec050920;p=mirrors%2FASR1603_G5.git 202501230907备份 --- diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modsocket.c b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modsocket.c index ac4938fc..4b65d6dc 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modsocket.c +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modsocket.c @@ -1825,7 +1825,8 @@ STATIC mp_uint_t _socket_read_data(mp_obj_t self_in, void *buf, size_t size, FD_SET(sock->fd, &rfds); MP_THREAD_GIL_EXIT(); -#if defined(PLAT_ASR) || defined(PLAT_Unisoc) || defined(PLAT_EIGEN) || defined(PLAT_Unisoc_8910_R05) || defined(PLAT_EIGEN_718) || defined(PLAT_Unisoc_8910_R06) +#if defined(PLAT_ASR) || defined(PLAT_Unisoc) || defined(PLAT_EIGEN) || defined(PLAT_Unisoc_8910_R05) || defined(PLAT_EIGEN_718) || defined(PLAT_Unisoc_8910_R06) \ + || defined(PLAT_ASR_1606) if (sock->timeout > 5) { struct timeval timeout = { .tv_sec = 5, .tv_usec = 0 }; diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/uwebsocket.py b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/uwebsocket.py index 3d734288..3bde84bc 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/uwebsocket.py +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/uwebsocket.py @@ -7,10 +7,28 @@ import ure as re import ustruct as struct import urandom as random import usocket as socket -import websocket from ucollections import namedtuple - +import websocket_mask LOGGER = log.getLogger(__name__) +import usys +# Opcodes +OP_CONT = 0x0 +OP_TEXT = 0x1 +OP_BYTES = 0x2 +OP_CLOSE = 0x8 +OP_PING = 0x9 +OP_PONG = 0xa + +# Close codes +CLOSE_OK = 1000 +CLOSE_GOING_AWAY = 1001 +CLOSE_PROTOCOL_ERROR = 1002 +CLOSE_DATA_NOT_SUPPORTED = 1003 +CLOSE_BAD_DATA = 1007 +CLOSE_POLICY_VIOLATION = 1008 +CLOSE_TOO_BIG = 1009 +CLOSE_MISSING_EXTN = 1010 +CLOSE_BAD_CONDITION = 1011 URL_RE = re.compile(r'(wss|ws)://([A-Za-z0-9-\.]+)(?:\:([0-9]+))?(/.+)?') URI = namedtuple('URI', ('protocol', 'hostname', 'port', 'path')) @@ -56,10 +74,10 @@ class Websocket(object): def __init__(self, sock, debug=False): self.sock = sock - self.ws = websocket.websocket(sock) self.open = True self.debug = debug + def __enter__(self): return self @@ -69,13 +87,101 @@ class Websocket(object): def settimeout(self, timeout): self.sock.settimeout(timeout) - def read_frame(self, sz): - return self.ws.read(sz) + def read_frame(self, max_size=None): + """ + Read a frame from the socket. + See https://tools.ietf.org/html/rfc6455#section-5.2 for the details. + """ + + # Frame header + two_bytes = self.sock.read(2) + + if not two_bytes: + raise NoDataException - def write_frame(self, data=b''): - return self.ws.write(data) + byte1, byte2 = struct.unpack('!BB', two_bytes) - def recv(self, max_size=16*1024): + # Byte 1: FIN(1) _(1) _(1) _(1) OPCODE(4) + fin = bool(byte1 & 0x80) + opcode = byte1 & 0x0f + + # Byte 2: MASK(1) LENGTH(7) + mask = bool(byte2 & (1 << 7)) + length = byte2 & 0x7f + + if length == 126: # Magic number, length header is 2 bytes + length, = struct.unpack('!H', self.sock.read(2)) + elif length == 127: # Magic number, length header is 8 bytes + length, = struct.unpack('!Q', self.sock.read(8)) + + if mask: # Mask is 4 bytes + mask_bits = self.sock.read(4) + + try: + data = self.sock.read(length) + except MemoryError: + # We can't receive this many bytes, close the socket + if self.debug: LOGGER.info("Frame of length %s too big. Closing", length) + self.close(code=CLOSE_TOO_BIG) + return True, OP_CLOSE, None + + if mask: + data = bytes(b ^ mask_bits[i % 4] + for i, b in enumerate(data)) + + return fin, opcode, data + + def write_frame(self, opcode, data=b''): + """ + Write a frame to the socket. + See https://tools.ietf.org/html/rfc6455#section-5.2 for the details. + """ + fin = True + mask = self.is_client # messages sent by client are masked + + length = len(data) + + # Frame header + # Byte 1: FIN(1) _(1) _(1) _(1) OPCODE(4) + byte1 = 0x80 if fin else 0 + byte1 |= opcode + + # Byte 2: MASK(1) LENGTH(7) + byte2 = 0x80 if mask else 0 + + if length < 126: # 126 is magic value to use 2-byte length header + byte2 |= length + self.sock.write(struct.pack('!BB', byte1, byte2)) + + elif length < (1 << 16): # Length fits in 2-bytes + byte2 |= 126 # Magic code + self.sock.write(struct.pack('!BBH', byte1, byte2, length)) + + elif length < (1 << 64): + byte2 |= 127 # Magic code + self.sock.write(struct.pack('!BBQ', byte1, byte2, length)) + + else: + raise ValueError() + #print("mask start len:{}".format(length)) + if mask: # Mask is 4 bytes + mask_bits = struct.pack('!I', random.getrandbits(32)) + self.sock.write(mask_bits) + #tmp_data = data + # data = bytes(b ^ mask_bits[i % 4] + # for i, b in enumerate(data)) + # print("old mask:{}".format(data)) + + data_array = bytearray(data) + mask_bits_array = bytearray(mask_bits) + websocket_mask.MASK(data_array,len(data_array),mask_bits_array) + #print("new mask:{}".format(data_array)) + data=bytes(data_array) + #print("mask end") + self.sock.write(data) + #print("write end") + + def recv(self): """ Receive data from the websocket. @@ -86,22 +192,40 @@ class Websocket(object): """ assert self.open - try: - data = self.read_frame(max_size) - if data == None: - data = '' - return data - except (ValueError, OSError) as e: - error_str = str(e) - print("Failed to read frame. Socket dead.", error_str) - if error_str.find("[Errno 110]")!= -1: - #print("ASR ASR:recv TIMEDOUT 正常") - pass - else: + while self.open: + try: + fin, opcode, data = self.read_frame() + except NoDataException: + return '' + except ValueError: + if self.debug: LOGGER.info("Failed to read frame. Socket dead.") self._close() - raise e + raise ConnectionClosed() + if not fin: + raise NotImplementedError() + if opcode == OP_TEXT: + return data.decode('utf-8') + elif opcode == OP_BYTES: + return data + elif opcode == OP_CLOSE: + self._close() + return "websocket close" + elif opcode == OP_PONG: + # Ignore this frame, keep waiting for a data frame + continue + elif opcode == OP_PING: + # We need to send a pong frame + if self.debug: LOGGER.info("Sending PONG") + self.write_frame(OP_PONG, data) + # And then wait to receive + continue + elif opcode == OP_CONT: + # This is a continuation of a previous frame + raise NotImplementedError(opcode) + else: + raise ValueError(opcode) def send(self, buf): """Send data to the websocket.""" @@ -109,31 +233,34 @@ class Websocket(object): assert self.open if isinstance(buf, str): + opcode = OP_TEXT buf = buf.encode('utf-8') - self.ws.ioctl(9, 1) elif isinstance(buf, bytes): - self.ws.ioctl(9, 2) + opcode = OP_BYTES else: raise TypeError() - - self.write_frame(buf) - def close(self): + self.write_frame(opcode, buf) + + def ping(self): + self.write_frame(OP_PING,b'ping') + + def close(self, code=CLOSE_OK, reason=''): """Close the websocket.""" if not self.open: return - try: - self.ws.ioctl(4) + buf = struct.pack('!H', code) + reason.encode('utf-8') + + self.write_frame(OP_CLOSE, buf) except Exception as e: - if self.debug: LOGGER.info("websocekt close:%s"%(str(e))) + usys.print_exception(e) self._close() def _close(self): if self.debug: LOGGER.info("Connection closed") - self.open = False self.sock.close() - + self.open = False class WebsocketClient(Websocket): is_client = True @@ -162,40 +289,46 @@ class Client(object): uri.hostname, uri.port) sock = socket.socket() - addr = socket.getaddrinfo(uri.hostname, uri.port) - sock.connect(addr[0][4]) - - if uri.protocol == 'wss': - import ussl - sock = ussl.wrap_socket(sock) - - def send_header(header, *args): - if debug: LOGGER.info(str(header), *args) - sock.write(header % args + '\r\n') - - # Sec-WebSocket-Key is 16 bytes of random base64 encoded - key = binascii.b2a_base64(bytes(random.getrandbits(8) for _ in range(16)))[:-1] - send_header(b'GET %s HTTP/1.1', uri.path or '/') - send_header(b'Host: %s:%s', uri.hostname, uri.port) - send_header(b'Connection: Upgrade') - send_header(b'Upgrade: websocket') - send_header(b'Sec-WebSocket-Key: %s', key) - send_header(b'Sec-WebSocket-Version: 13') - send_header(b'Origin: http://{hostname}:{port}'.format( - hostname=uri.hostname, - port=uri.port) - ) - for k, v in headers.items(): - send_header('{}:{}'.format(k, v).encode()) - send_header(b'') - - header = sock.readline()[:-2] - assert header.startswith(b'HTTP/1.1 101 '), header - - # We don't (currently) need these headers - # FIXME: should we check the return key? - while header: - if debug: LOGGER.info(str(header)) + try: + sock.settimeout(6) + addr = socket.getaddrinfo(uri.hostname, uri.port) + sock.connect(addr[0][4]) + + + if uri.protocol == 'wss': + import ussl + sock = ussl.wrap_socket(sock) + + def send_header(header, *args): + if debug: LOGGER.info(str(header), *args) + sock.write(header % args + '\r\n') + + # Sec-WebSocket-Key is 16 bytes of random base64 encoded + key = binascii.b2a_base64(bytes(random.getrandbits(8) for _ in range(16)))[:-1] + send_header(b'GET %s HTTP/1.1', uri.path or '/') + send_header(b'Host: %s:%s', uri.hostname, uri.port) + send_header(b'Connection: Upgrade') + send_header(b'Upgrade: websocket') + send_header(b'Sec-WebSocket-Key: %s', key) + send_header(b'Sec-WebSocket-Version: 13') + send_header(b'Origin: http://{hostname}:{port}'.format( + hostname=uri.hostname, + port=uri.port) + ) + for k, v in headers.items(): + send_header('{}:{}'.format(k, v).encode()) + send_header(b'') + header = sock.readline()[:-2] + assert header.startswith(b'HTTP/1.1 101 '), header + # We don't (currently) need these headers + # FIXME: should we check the return key? + while header: + if debug: LOGGER.info(str(header)) + header = sock.readline()[:-2] + except Exception as e: + usys.print_exception(e) + sock.close() + return return WebsocketClient(sock, debug) diff --git a/2.sdk/project/7PIN/audio/didianguanji.mp3 b/2.sdk/project/7PIN/audio/didianguanji.mp3 index 9fec2d4e..00f82796 100644 Binary files a/2.sdk/project/7PIN/audio/didianguanji.mp3 and b/2.sdk/project/7PIN/audio/didianguanji.mp3 differ diff --git a/2.sdk/project/7PIN/list.json b/2.sdk/project/7PIN/list.json index f6215c04..64adee55 100644 --- a/2.sdk/project/7PIN/list.json +++ b/2.sdk/project/7PIN/list.json @@ -1 +1 @@ -['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', 'shouhou', 'xinhaoruo1', 'zhengzaiguanji'] \ No newline at end of file +['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', 'shouhou', 'xinhaoruo1', 'zhengzaiguanji'] \ No newline at end of file diff --git a/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/ai_VC.py b/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/ai_VC.py index 1518324b..9b2ed1b0 100644 --- a/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/ai_VC.py +++ b/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/ai_VC.py @@ -170,7 +170,7 @@ class AI_dev(Abstract): def __init__(self): self.is_wdt = 1 #是否开启看门狗 - self.VBATT_tab = {"charge_full":4300,"100" :4250 , "90":3994 , "80":3883, "60": 3707, "40":3604, "20":3537, "10":3486,"5":3400,} + self.VBATT_tab = {"charge_full":4300,"100" :4250 , "90":4179 , "80":4070, "60": 3883, "40":3770, "20":3699, "10":3652,"5":3600,} self.KeyAI_status = 0 self.KeyAI_timer_count = 0 self.KeyAI_long_press = 0 @@ -416,6 +416,7 @@ class AI_dev(Abstract): self.check_rest_timer_count = 0 print("AI_key_press") EventMesh.publish("AI_key_press") + def AI_key_long_press(self): self.check_rest_timer_count = 0 print("AI_key_long_press") @@ -424,6 +425,7 @@ class AI_dev(Abstract): def AI_key_release(self): print("AI_key_release") EventMesh.publish("AI_key_release") + def pwk_key_Long_Press(self): self.check_rest_timer_count = 0 print("pwk_key_long_press!!!!!!!") @@ -473,10 +475,10 @@ class AI_dev(Abstract): self.Low_power_warning_flag = 1 EventMesh.publish("flicker_led_red") #self.aud.play(1,0,'Low_power_warning.mp3') - self.Low_power_warning_timer+=1 - if self.Low_power_warning_timer >= 2: - self.Low_power_warning_timer = 0 - EventMesh.publish("audio_montage_play",["Low_power_warning.mp3"]) + # self.Low_power_warning_timer+=1 + # if self.Low_power_warning_timer >= 2: + # self.Low_power_warning_timer = 0 + EventMesh.publish("audio_montage_play",["Low_power_warning.mp3"]) if self.usb_status == 0 and Vbatt 5: iccid = iccid.upper() - 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(iccid[0]))\ + if len(iccid) <20: + for i in range(20-len(iccid)): + iccid = "0"+iccid + 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]))\ ,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])),\ 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])),\ 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])),\ - 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[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])),\ + 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]))) str_data += '{}.mp3+'.format(audio_buf.index("shouhou"))#可联系售后解决,联系方式见售后客服电话是400-886-8777或到微信公众号柒牌SEVENBRAND自行充值: self.aud.montage_play('U:/static/audio.bin',1,1,str_data) #鉴权出错,播放imei号 @@ -999,6 +1005,9 @@ class OTA(): try: sourceVersion = versions.Build_Time sourceVersion = "7PIN-"+sourceVersion[:10]+"-"+sourceVersion[11:-3] + print("sourceVersion:{}".format(sourceVersion)) + sourceVersion = sourceVersion.replace(" ", "0") + print("sourceVersion2:{}".format(sourceVersion)) #url = "http://iot.api.thisiot.com/ota/task?deviceId=860132060348836&sourceVersion=2024-12-20-15:35-1" url = "http://dmp.raisound.com/bz-api/ota/task?deviceId={}&sourceVersion={}".format(modem.getDevImei(),sourceVersion) print(url) @@ -1053,6 +1062,9 @@ class OTA(): try: currentVersion = versions.Build_Time currentVersion = "7PIN-"+currentVersion[:10]+"-"+currentVersion[11:-3] + print("currentVersion1:{}".format(currentVersion)) + currentVersion = currentVersion.replace(" ", "0") + print("currentVersion2:{}".format(currentVersion)) url = "http://dmp.raisound.com/bz-api/ota/result?deviceId={}¤tVersion={}".format(modem.getDevImei(),currentVersion) print(url) response = request.post(url,timeout=5) @@ -1144,14 +1156,17 @@ class AI_VC(Abstract): self.VC_mode = EventMesh.publish("get_storage_config","VC_mode")# if self.VC_mode == None : self.VC_mode = 0 - - self.VC_server = 0 #0正式服务器,1:测试服务器1,2:测试服务器2 + self.is_up_error= 0 #是否上传错误id + self.error_data = [] + self.asr_taskid = "" + self.VC_taskid = "" + self.VC_server = 0 #0柒牌正式服务器,1:测试服务器1,2:测试服务器2 self.server_ip = EventMesh.publish("get_storage_config","server_ip")# if self.server_ip == None: if self.VC_server == 1:# - self.server_ip="118.145.158.207:22084" + self.server_ip="118.145.158.207:22083" elif self.VC_server == 2:# self.server_ip="118.145.158.207:22082" else: @@ -1420,6 +1435,28 @@ class AI_VC(Abstract): self.http_get_config()#获取/更新配置参数 except Exception as e: usys.print_exception(e) + #提交错误id + def ud_error(self,error_data): + response = None + if self.is_up_error == 1: + try: + # currentVersion = versions.Build_Time + # currentVersion = "7PIN-"+currentVersion[:10]+"-"+currentVersion[11:-3] + url = "http://{}/health?task_id={}".format(self.server_ip,error_data[0]+error_data[1]) + print(url) + response = request.get(url,timeout=5) + if response.status_code == 200: + + print("ud_error:ok") + else: + print("ud_error error!!!!") + for i in response.text: + print(i) + response.close() + except Exception as e: + usys.print_exception(e) + if response != None: + response.close() #获取配置参数 def http_get_config(self, event=None, msg=None): print("http_get_config") @@ -1599,7 +1636,7 @@ class AI_VC(Abstract): return self.AI_client_asr_debug+=1 utime.sleep_ms(10) - self.AI_client_asr.settimeout(120) + self.AI_client_asr.settimeout(5) #开启发送线程 if self.AI_ASR_send_data_queue_thread_id == 0: _thread.stack_size(self.Audio_buf_size+8*1024) @@ -1674,7 +1711,8 @@ class AI_VC(Abstract): if self.AI_client_asr_isconnect == 1: #self.AI_client_asr.write_frame(0x09,b'ping ping') self.AI_client_asr_send("ping") - + def set_AI_ASR_flag(self,data): + self.AI_ASR_flag = data def AI_ASR_timer_cb(self, *args): # EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_ASR_timer_cb_}) @@ -1685,17 +1723,29 @@ class AI_VC(Abstract): if self.AI_ASR_check_timeout <=0: self.AI_ASR_check_timeout = 0 self.AI_ASR_error_timeout = 3#发送停止后3秒后没正式结果就提示 - EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_asr_StopTranscription_requset}) + #EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_client_asr_StopTranscription_requset}) if self.AI_ASR_error_timeout>0: self.AI_ASR_error_timeout-=1 print("AI_ASR_error_timeout:{}".format(self.AI_ASR_error_timeout)) if self.AI_ASR_error_timeout <= 0: self.AI_ASR_error_timeout = 0 - if self.AI_ASR_str == "": - self.AI_TTS_str = "没有识别到您说话,请重试" - EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) - + #if self.AI_ASR_str == "": + if self.AI_ASR_str_tmp == "" and self.AI_ASR_str == "" and self.AI_ASR_text_tmp == "": + self.AI_TTS_str = "没有识别到您说话,请重试" + else : + self.AI_ASR_str = self.AI_ASR_str_tmp + self.AI_ASR_str+self.AI_ASR_text_tmp + self.AI_ASR_str_tmp = self.AI_ASR_str + print("AI_ASR_error_timeout2:重连:{}!!!!!!!!!!\r\n".format(self.AI_ASR_str) ) + print("AI_ASR_error_timeout2:重连:{}!!!!!!!!!!\r\n".format(self.AI_ASR_str) ) + print("AI_ASR_error_timeout2:重连:{}!!!!!!!!!!\r\n".format(self.AI_ASR_str) ) + EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_deconnect_asr}) + EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_connect_asr}) #重连ASR + #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End}) #重连ASR + EventMesh.publish("publish_AI_btnInfo",{"func":self.AI_VC_start}) + EventMesh.publish("publish_AI_btnInfo",{"func":self.set_AI_ASR_flag,"data":1})#设置以打断过一次 + if self.VC_record_state_flag > 1: + self.VC_record_state_flag =1 pass #关闭ASR数据发送线程 def AI_ASR_send_data_queue_thread_close(self): @@ -1759,6 +1809,7 @@ class AI_VC(Abstract): if self.AI_client_asr_isconnect != 0: print("ASR发送数据错误,退出") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR发送出错了,请重试"}) + self.ud_error(["asr",self.asr_taskid]) #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_connect_asr}) #重连 utime.sleep_ms(1) self.AI_ASR_send_data_queue_thread_lock = 0 @@ -1802,10 +1853,12 @@ class AI_VC(Abstract): print("ASR 服务器主动关闭连接!!!!!!!!!!!!!!!!!!!!!!!!!!!") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR连接断开了,请重试"}) + self.ud_error(["asr",self.asr_taskid]) break elif recv_data == "":#客户端关闭连接 print("ASR ASR :客户端关闭连接") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR连接断开了,请重试"}) + self.ud_error(["asr",self.asr_taskid]) break try: if isinstance(recv_data, str): @@ -1814,7 +1867,11 @@ class AI_VC(Abstract): if jsload_data["status"] != 20000000:#返回错误 print("ASR返回非20000000状态码,退出") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR出错了,请重试"}) + self.ud_error(["asr",self.asr_taskid]) break + + if jsload_data["task_id"] != None: + self.asr_taskid = jsload_data["task_id"] if jsload_data["event"] != None: if jsload_data["event"] == "TranscriptionStarted": #开始录音 self.VC_record_state_flag = 2 @@ -1920,18 +1977,19 @@ class AI_VC(Abstract): usys.print_exception(e) except Exception as e: - # error_str = str(e) - # print("ASR ASR:e:{}".format(error_str)) - # #usys.print_exception(e) - # if error_str.find("[Errno 110]")!= -1: - # #print("ASR ASR:recv TIMEDOUT 正常") - # pass - # else: + error_str = str(e) + print("ASR ASR:e:{}".format(error_str)) + #usys.print_exception(e) + if error_str.find("[Errno 110]")!= -1: + #print("ASR ASR:recv TIMEDOUT 正常") + pass + else: usys.print_exception(e) print("{}".format(cli)) #self.websocket_error() print("ASR读数据报错,退出") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"ASR出错了,请重试"})# + self.ud_error(["asr",self.asr_taskid]) break self.AI_client_asr_isconnect = 0 self.AI_client_asr_recv_id = 0 @@ -2102,7 +2160,7 @@ class AI_VC(Abstract): # h_data= [0x23,0x21 ,0x41 ,0x4D ,0x52 ,0x0A ] # h_data_b = bytes(h_data) # self.AI_client_VC_send(h_data_b) - + AI_record_tmp_queue_len = 0 while True: try: if self.VC_record_thread_lock == 2: @@ -2145,7 +2203,9 @@ class AI_VC(Abstract): if self.VC_record_state_flag <=1 :#没发送前先存起来 self.AI_record_tmp_queue.put(read_buf) + AI_record_tmp_queue_len += len(read_buf) else: + AI_record_tmp_queue_len = 0 while True: if self.AI_record_tmp_queue.empty() == True: break @@ -2277,7 +2337,7 @@ class AI_VC(Abstract): return self.AI_client_VC_debug+=1 utime.sleep_ms(10) - self.AI_client_VC.settimeout(120) + self.AI_client_VC.settimeout(5) #self.AI_VC_send_data_queue_thread_close()#关闭发送线程 if self.AI_VC_send_data_queue_thread_id == 0: _thread.stack_size(self.Audio_buf_size+8*1024) @@ -2457,6 +2517,7 @@ class AI_VC(Abstract): if self.AI_client_VC_isconnect != 0: print("VC发送数据错误,退出") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC发送出错了,请重试"}) + self.ud_error(["VC",self.VC_taskid]) except Exception as e: #网络连接异常 usys.print_exception(e) @@ -2514,10 +2575,12 @@ class AI_VC(Abstract): # #EventMesh.publish("publish_AI_btnInfo",{"func":utime.sleep_ms,'data':(1500)}) #EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_connect_asr}) EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC连接断开了,请重试"}) + self.ud_error(["VC",self.VC_taskid]) break elif recv_data == "":#客户端关闭连接 print("VC VC :客户端关闭连接") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC连接断开了,请重试"}) + self.ud_error(["VC",self.VC_taskid]) break try: self.websocket_error_count = 0 @@ -2528,7 +2591,10 @@ class AI_VC(Abstract): if jsload_data["status"] != 20000000:#返回错误 print("VC VC :服务器返回非20000000状态码,退出") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC出错了,请重试"}) + self.ud_error(["VC",self.VC_taskid]) break + if jsload_data["task_id"] != None: + self.VC_taskid = jsload_data["task_id"] if jsload_data["event"] == "Started" :#会话开始 payload = jsload_data["payload"] self.VC_dialog_id = payload["dialog_id"] @@ -2592,7 +2658,7 @@ class AI_VC(Abstract): self.LocalRespondingEnded_timerout = 10 #最长倒数10秒发送音频结束或者终止对话 if self.VC_mode == 0 :#连续问答模式 #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_End})#调试临时打开 - #EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start})#开始录音 + EventMesh.publish("publish_AI_btnInfo",{"func":self.VC_Speech_Start})#开始录音 pass if self.play_data_save_flag == 1: if self.play_fd !=None: @@ -2641,17 +2707,17 @@ class AI_VC(Abstract): except Exception as e: - # error_str = str(e) - # #print("VC VC:e:{}".format(error_str)) - # if error_str.find("[Errno 110] ETIMEDOUT")!= -1: - # #print("VC VC:recv TIMEDOUT 正常") - # pass - # else: + error_str = str(e) + #print("VC VC:e:{}".format(error_str)) + if error_str.find("[Errno 110] ETIMEDOUT")!= -1: + #print("VC VC:recv TIMEDOUT 正常") + pass + else: usys.print_exception(e) #self.websocket_error() print("VC VC :读数据报错,退出") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"VC出错了,请重试"}) - + self.ud_error(["VC",self.VC_taskid]) break self.AI_client_VC_isconnect = 0 self.AI_client_VC_recv_id = 0 @@ -2822,6 +2888,9 @@ class AI_VC(Abstract): sourceVersion = versions.Build_Time self.AI_TTS_str ="Mr-Seven-"+sourceVersion return 0 + if text.find("服务器地址") != -1 : + self.AI_TTS_str ="服务器地址"+self.server_ip + return 0 if text.find("升级") != -1 and (text.find("OTA") != -1 or text.find("ota") != -1): if self.ai_OTA.min_sys_ota()==1: @@ -2919,6 +2988,7 @@ class AI_VC(Abstract): if self.VC_state >= VC_State_SpeechIng: print("接口无响应,超时退出") EventMesh.publish("publish_AI_btnInfo",{"func":self.websocket_error,"data":"接口超时了。请重试"}) + self.ud_error(["VC",self.VC_taskid]) else: EventMesh.publish("publish_AI_btnInfo",{"func":self.Close}) # print("get_audio_state !!!!!{} {} {}\r\n".format(self.play_end,EventMesh.publish("get_audio_state"),self.play_flag)) diff --git a/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/main_init.py b/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/main_init.py index e7d5c4bf..c6cfb008 100644 --- a/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/main_init.py +++ b/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/main_init.py @@ -41,13 +41,36 @@ class watchApp(App): super().start() +#开机执行下面函数就可以配置成ipv4拨号 +import dataCall +import net +def set_ipv4_datacall(): + # 获取第一路的APN,ipType 等信息 + pdpCtx = dataCall.getPDPContext(1) + if pdpCtx != -1: + if pdpCtx[0] != 0: + # 如果不是用户需要的ipv4,使用如下方式配置,使用如下方式配置 + ret = dataCall.setPDPContext(1, 0,pdpCtx[1],pdpCtx[2],pdpCtx[3],pdpCtx[4]) + if ret == 0: + print('配置成功。') + # cfun0/1后按照配置的信息进行拨号 + net.setModemFun(0) + net.setModemFun(1) + else: + print('配置失败。') + else: + print('已经配置为IPv4') + else: + print('获取PDP Context失败。') def main_init(): # if __name__ == '__main__': + #set_ipv4_datacall() import uos import ql_fs import utime import EventMesh + # if ql_fs.path_exists("/ext") == False: # ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3) # uos.mount(ldev,'/ext') diff --git a/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/sleep_test.py b/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/sleep_test.py index 8d7caf4d..57c80b14 100644 --- a/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/sleep_test.py +++ b/2.sdk/project/7PIN/sdk/services/microPython/ports/quectel/core/sleep_test.py @@ -19,9 +19,10 @@ aud.set_pa(Pin.GPIO29) aud.setVolume(11) AI_TTS_str = "" AI_client_tts = None +AI_client_tts_1 = None _4S_timer = None def AI_client_tts_recv(cli,fd): - + global AI_TTS_str,AI_client_tts,_4S_timer,AI_client_tts_1 while True: try: # 死循环接收数据 @@ -36,16 +37,21 @@ def AI_client_tts_recv(cli,fd): # print("AI_client_tts_recv :{}".format(len(recv_data))) #结束标志{"header":{"event":"EndSynthesis","msg":"success","status":20000000,"task_id":"ffd727e620000803280c5a6498d0e321"}} if isinstance(recv_data, str): - print("AI_client_tts_recv:str recv_data:{}".format(recv_data)) + #print("AI_client_tts_recv:str recv_data:{}".format(recv_data)) if recv_data.find('\"state\":\"Listening\"') != -1: AI_client_VC_RequestToRespond() if recv_data.find('\"event\":\"RespondingEnded\"') != -1: print("EndSynthesis!!!!!!!!!!!!!!!!!\r\n") print("EndSynthesis!!!!!!!!!!!!!!!!!!\r\n") - cli.close() + #cli.close() fd.close() _4S_timer.stop() + # AI_client_tts.close() + # try: + # AI_client_tts_1._close() + # except Exception as e: + # usys.print_exception(e) break else: fd.write(recv_data) @@ -59,14 +65,14 @@ def AI_client_tts_recv(cli,fd): break def _4S_timer_cb(self,*argc): print("_4S_timer_cb!!!!!!!!!!!!!!!!!!!!!") - global AI_TTS_str,AI_client_tts,_4S_timer + global AI_TTS_str,AI_client_tts,_4S_timer,AI_client_tts_1 try: AI_client_VC_ping() except Exception as e: usys.print_exception(e) _4S_timer.stop() def websocket_connect_tts(fd_neme,tts_str): - global AI_TTS_str,AI_client_tts,_4S_timer + global AI_TTS_str,AI_client_tts,_4S_timer,AI_client_tts_1 _4S_timer = osTimer() _4S_timer.start(4000,1,_4S_timer_cb) @@ -81,7 +87,8 @@ def websocket_connect_tts(fd_neme,tts_str): req_str = "is_auth=0{}{}".format(platform,lang) try: - AI_client_tts = uwebsocket.Client.connect('ws://118.145.158.207:22082/voice-chat/ws?{}'.format(req_str), debug=True) + AI_client_tts = uwebsocket.Client.connect('ws://118.145.158.207:22082/voice-chat/ws?{}'.format(req_str), debug=False) + AI_client_tts_1 = uwebsocket.Client.connect('ws://118.145.158.207:22082/voice-chat/ws?{}'.format(req_str), debug=False) except Exception as e: #网络连接异常 usys.print_exception(e) print("websocket_connect_tts ERROR:{}\r\n".format(e)) @@ -119,10 +126,13 @@ def websocket_connect_tts(fd_neme,tts_str): } } AI_client_tts.send(ujson.dumps(json_data)) - print("AI_client_tts.send:{}".format(ujson.dumps(json_data))) + AI_client_tts_1.send(ujson.dumps(json_data)) + # print("AI_client_tts.send:{}".format(ujson.dumps(json_data))) def AI_client_VC_ping(): global AI_TTS_str,AI_client_tts,_4S_timer - AI_client_tts.send("ping") + #AI_client_tts.send("ping") + AI_client_tts.send("aaa") + print("AI_client_VC_ping") def AI_client_VC_RequestToRespond(): global AI_TTS_str,AI_client_tts @@ -182,7 +192,7 @@ def AI_audio_queue_thread(): print("AI_audio_queue_thread:ERROR:") usys.print_exception(e) -#websocket_connect_tts("/usr/shouhou.mp3",",可联系售后解决,联系方式见售后客服电话是400-886-8777或到微信公众号柒牌SEVENBRAND自行充值!") +websocket_connect_tts("/usr/didianguanji.mp3","电量低,请充电后使用...,正在关机!") # for i in range(10): # websocket_connect_tts("/usr/R_READ_TIME_{}.mp3".format(i),"{}。".format(i)) # utime.sleep_ms(4000) diff --git a/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/DBG.7z b/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/DBG.7z index 844215d7..a3aef00a 100644 Binary files a/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/DBG.7z and b/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/DBG.7z differ diff --git a/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip b/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip index c37c1ab3..9aa53655 100644 Binary files a/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip and b/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/images/firmware_base_release_pack.zip differ diff --git a/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/libHeliosAPI.lib b/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/libHeliosAPI.lib index 30b5c463..bf46984e 100644 Binary files a/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/libHeliosAPI.lib and b/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/libHeliosAPI.lib differ diff --git a/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/ql_common_api.lib b/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/ql_common_api.lib index 4fd01b0a..149f6cbd 100644 Binary files a/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/ql_common_api.lib and b/2.sdk/project/7PIN/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/libraries/ql_common_api.lib differ diff --git a/2.sdk/project/7PIN/usr/static/audio.bin b/2.sdk/project/7PIN/usr/static/audio.bin index 74e20cb6..f6f0bfea 100644 Binary files a/2.sdk/project/7PIN/usr/static/audio.bin and b/2.sdk/project/7PIN/usr/static/audio.bin differ diff --git a/2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png b/2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png deleted file mode 100644 index b175b0f4..00000000 Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_CAMERA.png and /dev/null differ diff --git a/2.sdk/project/W8/usr/static/theme1/THEME1_CONTACTS.png b/2.sdk/project/W8/usr/static/theme1/THEME1_CONTACTS.png deleted file mode 100644 index e62722a2..00000000 Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_CONTACTS.png and /dev/null differ diff --git a/2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png b/2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png deleted file mode 100644 index 2464976f..00000000 Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_SETING.png and /dev/null differ diff --git a/2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png b/2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png deleted file mode 100644 index 2ab9e3ec..00000000 Binary files a/2.sdk/project/W8/usr/static/theme1/THEME1_WECHAT.png and /dev/null differ