GPS修改同步
authorp15692025051 <846603105@qq.com>
Tue, 17 Oct 2023 03:17:06 +0000 (11:17 +0800)
committerp15692025051 <846603105@qq.com>
Tue, 17 Oct 2023 03:17:06 +0000 (11:17 +0800)
35 files changed:
2.sdk/Helios_SDK/components/juphoon/jrtc.h
2.sdk/Helios_SDK/components/juphoon/jrtc0.h
2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c
2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/mpconfigport.h
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/EventMesh.py
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/alarm.py
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/appFactoryMode.py
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/calculator.py [new file with mode: 0644]
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_1.py
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_init.py
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/protocol.py
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui.py
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_main_menu.py
2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_setting.py
2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h
2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in
2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/appFactoryMode.py
2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/appFactoryMode.py
2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h
2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py
2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/EventMesh.py
2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/Makefile
2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/mgr.py

index c7dd639..d7b70de 100644 (file)
@@ -5,59 +5,59 @@ extern "C" {
 #endif
 
 /**
- * ºô½ÐÁ÷³Ì: ¼ÙÉè `É豸A' ºô½Ð `É豸B'
+ * 呼叫流程: 假设 `设备A' 呼叫 `设备B'
  *
- * Æô¶¯Á¬½ÓÁ÷³Ì
- * - A ÐèÒª "ijÖÖÍÆËÍ»úÖÆ" (³¤Á¬½Ó,ÍÆËÍ·½Ê½) Í¨Öªµ½B,
- * - A ´ò¿ªÍ¨ÐÅ(jrtc_open), ³õʼ״̬Ϊ JRTC_OPENED
- * - B ÊÕµ½ "¸ÃÖÖÍÆËÍ֪ͨ" ºóÒ²´ò¿ªÍ¨ÐÅ(jrtc_open), ³õʼ״̬Ϊ JRTC_OPENED
- * - A Ö÷¶¯¼¤»îýÌåÉ豸,ÒÔ±ã×Ô¶¯½ÓÌý
+ * 启动连接流程
+ * - A 需要 "某种推送机制" (长连接,推送方式) 通知到B,
+ * - A 打开通信(jrtc_open), 初始状态为 JRTC_OPENED
+ * - B 收到 "该种推送通知" 后也打开通信(jrtc_open), 初始状态为 JRTC_OPENED
+ * - A 主动激活媒体设备,以便自动接听
  *          jrtc_activate(jc, JRTC_AUDIO|JRTC_CAMERA)
  *
- * ³É¹¦½¨Á¢ÍøÂçͨµÀ
- * - A ºÍ B ÔÚ·þÎñÆ÷É϶ԺôºóÁ¬Í¨, Í¨»°×´Ì¬¶¼±äΪ JRTC_JOINED
- * - A ¿ÉÒÔ¿ªÊ¼äÖȾ¾µÍ·Ô¤ÀÀ(äÖȾÁ÷³Ì)
+ * 成功建立网络通道
+ * - A 和 B 在服务器上对呼后连通, 通话状态都变为 JRTC_JOINED
+ * - A 可以开始渲染镜头预览(渲染流程)
  *
- * ±»½ÐÁ÷³Ì
- * - B ÊÕµ½AµÄÒôÊÓÆµÊý¾Ý, Í¨»°×´Ì¬±äΪ JRTC_TALKING
- * - B ¿ÉÒÔ¿ªÊ¼äÖȾ¶Ô¶ËÊÓÆµ(äÖȾÁ÷³Ì)
- * - B µ¯³ö½ÓÌýÌáʾ, ÈôÓû§Ñ¡Ôñ"¾Ü½Ó"Ôò½øÈë¹Ò¶ÏÁ÷³Ì
- * - B ÔÚ½çÃæÑ¡Ôñ½ÓÌýºó, Ò²¼¤»îýÌåÉ豸
+ * 被叫流程
+ * - B 收到A的音视频数据, 通话状态变为 JRTC_TALKING
+ * - B 可以开始渲染对端视频(渲染流程)
+ * - B 弹出接听提示, 若用户选择"拒接"则进入挂断流程
+ * - B 在界面选择接听后, 也激活媒体设备
  *          jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA)
  *
- * Ö÷½ÐÁ÷³Ì
- * - A ÔÚÊÕµ½ÒôÊÓÆµÊý¾Ýºó, ×´Ì¬±äΪJRTC_TALKING
- * - A Ò²¿ªÊ¼äÖȾ¶Ô¶ËÊÓÆµ(äÖȾÁ÷³Ì)
+ * 主叫流程
+ * - A 在收到音视频数据后, 状态变为JRTC_TALKING
+ * - A 也开始渲染对端视频(渲染流程)
  *
- * ¹Ò¶ÏÁ÷³Ì
- * - A µ÷Óàjrtc_close Ö÷¶¯¹Ò¶Ï
- * - B Í¨»°×´Ì¬½«±äΪ JRTC_LEAVING »ò JRTC_CLOSED
- * - Í¨¹ý jrtc_error() ¿ÉÒÔ»ñÈ¡¹Ò¶ÏµÄÔ­Òò(³ö´íÖµ)
- * - B µ÷Óàjrtc_close ½áÊøÍ¨»°
+ * 挂断流程
+ * - A 调用 jrtc_close 主动挂断
+ * - B 通话状态将变为 JRTC_LEAVING 或 JRTC_CLOSED
+ * - 通过 jrtc_error() 可以获取挂断的原因(出错值)
+ * - B 调用 jrtc_close 结束通话
  *
- * ×î¼òº¯ÊýÁ÷³Ì
- * - jrtc_config(...);   // ÅäÖû·¾³,Ö»Ðèµ÷ÓÃÒ»´Î
- * - jc = jrtc_open(...);// ´ò¿ªÍ¨»°,·µ»Ø¶ÔÏó
- * - jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA);//¼¤»îÉ豸
- * - ÔÚ UI Ïß³Ì,¸üÐÂÊÓÆµ»òÔ¤ÀÀ,²Î¿¼ÏÂÃæµÄ`äÖȾÁ÷³Ì'
- * - jrtc_close(jc, JRTC_EBYE); //Ö÷¶¯¹Ò¶Ï, ²¢ÇҵȴýÍøÂçÏ߳̽áÊø
+ * 最简函数流程
+ * - jrtc_config(...);   // 配置环境,只需调用一次
+ * - jc = jrtc_open(...);// 打开通话,返回对象
+ * - jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA);//激活设备
+ * - 在 UI 线程,更新视频或预览,参考下面的`渲染流程'
+ * - jrtc_close(jc, JRTC_EBYE); //主动挂断, 并且等待网络线程结束
  *
- * ÊÕµ½À´µçÖжϵĴ¦Àí
- * - jrtc_close(jc, JRTC_EAUDIOCALL);//½áÊøÍ¨»°,µÈ´ýÍøÂçÏ߳̽áÊø
+ * 收到来电中断的处理
+ * - jrtc_close(jc, JRTC_EAUDIOCALL);//结束通话,等待网络线程结束
  */
 
-/** Í¨»°×´Ì¬ */
+/** 通话状态 */
 enum jrtc_state
 {
-    JRTC_CLOSED=0,/*< ³õʼ״̬ */
-    JRTC_LEAVING, /*< jrtc_leave »òÄÚ²¿³ö´íºóµÄ״̬ */
-    JRTC_OPENED,  /*< µ÷ÓÃjrtc_open ºóµÄ״̬ */
-    JRTC_JOINING, /*< ¼ÓÈëÖеÄ״̬ */
-    JRTC_JOINED,  /*< ³É¹¦¼ÓÈë»á»° */
-    JRTC_TALKING, /*< ÊÕµ½Ã½ÌåºóµÄ״̬ */
+    JRTC_CLOSED=0,/*< 初始状态 */
+    JRTC_LEAVING, /*< jrtc_leave 或内部出错后的状态 */
+    JRTC_OPENED,  /*< 调用jrtc_open 后的状态 */
+    JRTC_JOINING, /*< 加入中的状态 */
+    JRTC_JOINED,  /*< 成功加入会话 */
+    JRTC_TALKING, /*< 收到媒体后的状态 */
 };
 
-/** Í¨»°´íÎóÖµ */
+/** 通话错误值 */
 enum jrtc_error
 {
     JRTC_ENIL   = 0,  /* unknown error */
@@ -88,7 +88,7 @@ enum jrtc_error
     JRTC_EBYE = 255,  /* Success, Closed by peer leave */
 };
 
-/** Í¨»°ÖеÄýÌåÉ豸 */
+/** 通话中的媒体设备 */
 enum jrtc_device
 {
     JRTC_SPEAKER    = 1,
@@ -104,19 +104,19 @@ enum jrtc_netstat
     JRTC_REMOTE_POOR = 2,
 };
 
-/** Êý¾ÝÀàÐÍ
+/** 数据类型
  * @note
- * |   Èí¼þϵͳ   |   Æ½Ì¨   |  ²É¼¯¸ñʽ  | ±àÂëºó¸ñʽ |  ½âÂëºó¸ñʽ  |
+ * |   软件系统   |   平台   |  采集格式  | 编码后格式 |  解码后格式  |
  * | ------------ | -------- | ---------- | ---------- | ------------ |
  * | Unisoc Mocor | UMS9117  | JRTC_NV16  | JRTC_JPEG  | JRTC_RGB565,JRTC_JPEG [^1] |
  */
 enum jrtc_dtype
 {
-    JRTC_I420 = 0, /*< Í¼Ïñ×Ö½ÚÊý=W*H*3/2 */
-    JRTC_NV12 = 1, /*< Í¼Ïñ×Ö½ÚÊý=W*H*3/2 */
-    JRTC_UYVY = 2, /*< Í¼Ïñ×Ö½ÚÊý=W*H*2 */
-    JRTC_JPEG = 3, /*< ±£³Ö¼æÈÝÐÔ */
-    JRTC_NV16 = 4, /*< Í¼Ïñ×Ö½ÚÊý=W*H*2 */
+    JRTC_I420 = 0, /*< 图像字节数=W*H*3/2 */
+    JRTC_NV12 = 1, /*< 图像字节数=W*H*3/2 */
+    JRTC_UYVY = 2, /*< 图像字节数=W*H*2 */
+    JRTC_JPEG = 3, /*< 保持兼容性 */
+    JRTC_NV16 = 4, /*< 图像字节数=W*H*2 */
 
     JRTC_RGB565 = 64,
 
@@ -124,37 +124,37 @@ enum jrtc_dtype
     JRTC_H263 = 97,
 };
 
-/** äÖȾÁ÷³Ì:
- * jrtc_image_t* img ´ú±í jrtc_open Öд«Èë video »ò camera
- * - ¼ì²âµ±Ç°ÎªÍ¨»°×´Ì¬, ·ñÔòÎÞÐëäÖȾ
+/** 渲染流程:
+ * jrtc_image_t* img 代表 jrtc_open 中传入 video 或 camera
+ * - 检测当前为通话状态, 否则无须渲染
  *   if (jrtc_state(jc) < JRTC_JOINED) break;
  *
- * - ÄÚ²¿×Ô¶¯¸üÐÂͼÏñ:
+ * - 内部自动更新图像:
  *      if (img->get == img->put) {
- *          '¸üÐÂͼÏñÄÚÈÝ: ¼´¶ÔimgÖеÄdata, width, height, format ¸³Öµ'
- *          img->put++;//Ôö¼Óд¼ÆÊý
+ *          '更新图像内容: 即对img中的data, width, height, format 赋值'
+ *          img->put++;//增加写计数
  *      }
  *
- * - ÉϲãUIÏß³Ì(App ½çÃæ²ã)¸ºÔð»æÖÆÍ¼Ïñ:
+ * - 上层UI线程(App 界面层)负责绘制图像:
  *      if (img->get != img->put) {
- *          '½çÃæ»æÖƲÙ×÷: ¼´Ê¹ÓÃimgÖеÄdata, ¸üнçÃæ¿Ø¼þ'
- *          img->get = img->put;//Ôö¼Ó¶Á¼ÆÊý
+ *          '界面绘制操作: 即使用img中的data, 更新界面控件'
+ *          img->get = img->put;//增加读计数
  *      }
  *
- * ÔÚjrtc_open()ÖÐÓÃÓÚÉèÖý¨ÒéÖµ, Í¨»°¹ý³ÌÖÐÓÃÓÚ»ñȡͼÏñÊý¾Ý.
- * ÀýÈç, Ï£Íû½ÓÊպͷ¢ËͶ¼ÊÇ240x240, 8Ö¡/ÃëµÄÊÓÆµÍ¨»°:
+ * 在jrtc_open()中用于设置建议值, 通话过程中用于获取图像数据.
+ * 例如, 希望接收和发送都是240x240, 8帧/秒的视频通话:
  *   static struct jrtc_image_t video, camera;
  *   video.width  = camera.width  = 240;
  *   video.height = camera.height = 240;
  *   video.fps    = camera.fps    = 8;
  *   video.kbps   = camera.kbps   = 120;
- *   //×¢Òâ,ÒÔÉϽöÊǽ¨ÒéÖµ, ÔÚ×îÖÕ½Óͨʱ, ÓÉ·þÎñÆ÷¾ö¶¨Êµ¼ÊÖµ
- *   //ÈôÄÚ²¿Ê¹ÓÃjpeg ±àÂë,Ôò»áºöÂÔ kbps Öµ
+ *   //注意,以上仅是建议值, 在最终接通时, 由服务器决定实际值
+ *   //若内部使用jpeg 编码,则会忽略 kbps 值
  *
  *   jc = jrtc_open(roomid, 0, &video, &camera);
  */
 struct jrtc_image_t
-{/* ¿ÉǿתΪ jrtc_photo_t Ê¹Óà*/
+{/* 可强转为 jrtc_photo_t 使用 */
     void* data;
     unsigned bytes;
     unsigned short width, height;
@@ -167,58 +167,58 @@ struct jrtc_image_t
 
 extern void* _jrtc_net_info;
 
-/** µ±Ç°µÄ°æ±¾ºÅ */
+/** 当前的版本号 */
 #define JRTC_VERSION   "1.7.2"
 
-/** ÅäÖÃÈ«¾Ö²ÎÊý,Ö»Ðèµ÷ÓÃÒ»´Î.
- * ×¢Òâ:
- * - appkey ¹Ì¶¨³¤¶ÈΪ24
- * - key ¹Ì¶¨³¤¶ÈΪ16
- * - uid ÏÞÖÆ×î´ó×Ö·ûÊýΪ64
- * - tokens ÏÞÖÆ×î´ó×Ö·ûÊýΪ128
+/** 配置全局参数,只需调用一次.
+ * 注意:
+ * - appkey 固定长度为24
+ * - key 固定长度为16
+ * - uid 限制最大字符数为64
+ * - tokens 限制最大字符数为128
  *
- * @param[in] appkey µ±Ç°APPÌØÓеıêʶ, ÐèÏòJuphoonÉêÇë»ñµÃ
- * @param[in] uid ÕË»§
- * @param[in] key Í¨Ñ¶ÃÜÔ¿, ±ØÐëÓëappkeyÆ¥Åä, ÐèÏòJuphoonÉêÇë»ò×¢²á
- * @param[in] ÓÃÓÚ¼øÈ¨µÄtokens,ĬÈÏΪ""
+ * @param[in] appkey 当前APP特有的标识, 需向Juphoon申请获得
+ * @param[in] uid 账户
+ * @param[in] key 通讯密钥, 必须与appkey匹配, 需向Juphoon申请或注册
+ * @param[in] 用于鉴权的tokens,默认为""
  */
 void jrtc_config (const char* appkey, const char* uid, const char key[16], const char* tokens);
 
-/**Õ¹Èñ UIX9117 Æ½Ì¨ ÐèÒªÉèÖÃPDPÁ÷³Ìºó»ñµÃµÄÍøÂç ID */
+/**展锐 UIX9117 平台 需要设置PDP流程后获得的网络 ID */
 extern unsigned _jrtc_net_id;
-/**Õ¹Èñ UIX9117 Æ½Ì¨µÄ¾µÍ·½Ç¶È,¼´²É¼¯Í¼ÏñÐèҪ˳ʱÕëÐýת¸ÃÖµ,²ÅÄÜÕýÁ¢. Ä¬ÈÏ90 */
+/**展锐 UIX9117 平台的镜头角度,即采集图像需要顺时针旋转该值,才能正立. 默认90 */
 extern unsigned _jrtc_cam_angle;
 
-/** ·ÖÅäͨ»°×ÊÔ´²¢Æô¶¯ÍøÂçÏß³Ì
- * ×¢Òâ:
- * - ¶Ôticket³¤¶ÈºÍ²ÎÊýroomid¶¼ÏÞÖÆ×î´ó×Ö·ûÊýΪ64
- * - ÄÚ²¿É豸³õʼûÓ줻î,ºóÐøÐèÒªµ÷ÈçÏ¿ªÆô
+/** 分配通话资源并启动网络线程
+ * 注意:
+ * - 对ticket长度和参数roomid都限制最大字符数为64
+ * - 内部设备初始没有激活,后续需要调如下开启
  *   jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA)
  *
- * ticket ×÷Ϊͨ»°ID, Î¨Ò»±êʶÿ´Îͨ»°:
- *  - ²»Äܰüº¬JSONÐèתÒåµÄ×Ö·û
- *  - Ã¿´Îͨ»°, ÒªÊ¹Óò»Í¬µÄ ticket,(Ëæ»ú²úÉú»òÏò·þÎñÆ÷ÉêÇë)
- *  - A ºô½Ðǰ,ÉêÇë»ñµÃ ticket
- *  - A ÐèҪͨ"ijÖÖÍÆËÍ»úÖÆ"(³¤Á¬½Ó,ÍÆËÍ·½Ê½) ½« ticket Í¨Öªµ½B
- *  - A ºÍB ¶Ôºôʱ, ±ØÐëʹÓÃÏàͬµÄticket, ÒÔ±ã·þÎñÆ÷¾«È·±êʶ»á»°
+ * ticket 作为通话ID, 唯一标识每次通话:
+ *  - 不能包含JSON需转义的字符
+ *  - 每次通话, 要使用不同的 ticket,(随机产生或向服务器申请)
+ *  - A 呼叫前,申请获得 ticket
+ *  - A 需要通"某种推送机制"(长连接,推送方式) 将 ticket 通知到B
+ *  - A 和B 对呼时, 必须使用相同的ticket, 以便服务器精确标识会话
  *
- * @param[in] id            ¼ÓÈëÒ»¶ÔÒ»»á»°(¶Ô·½µÄuid)»ò·¿¼ä(ÒÔroom:ǰ׺µÄ·¿¼äµØÖ·)
- * @param[in] ticket        hashÖµ,¿Éͨ¹ýÆäËû·¾¶»ñµÃ,ĬÈÏΪNULL,½öÓÃÓÚµ÷ÊÔ.
- * @param[in,out] video     ÆÚÍû½ÓÊÕµÄÊÓÆµ³ß´çºÍÖ¡ËÙ,ÂëÂÊ.  Èô NULL,Ôò²»½ÓÊÕÊÓÆµ
- * @param[in,out] camera    ÓÃÓÚÔ¤ÀÀͼÏñ,½¨ÒéµÄ·¢ËͳߴçºÍÖ¡ËÙ,ÂëÂÊ.  Èô NULL, Ôò²»Ê¹ÓþµÍ·.
- *                          ×îÖÕµÄÊÓÆµ³ß´çºÍ¾µÍ·µÄ³ß´ç,¶¼ÓÉ·þÎñÆ÷ЭÉ̾ö¶¨.
+ * @param[in] id            加入一对一会话(对方的uid)或房间(以room:前缀的房间地址)
+ * @param[in] ticket        hash值,可通过其他路径获得,默认为NULL,仅用于调试.
+ * @param[in,out] video     期望接收的视频尺寸和帧速,码率.  若 NULL,则不接收视频
+ * @param[in,out] camera    用于预览图像,建议的发送尺寸和帧速,码率.  若 NULL, 则不使用镜头.
+ *                          最终的视频尺寸和镜头的尺寸,都由服务器协商决定.
  */
 struct jrtc_t* jrtc_open (const char* id, const char* ticket, struct jrtc_image_t* video, struct jrtc_image_t* camera);
 
-/** ÊÍ·Åͨ»°×ÊÔ´,²¢µÈ´ýÍøÂçÏ߳̽áÊø.
+/** 释放通话资源,并等待网络线程结束.
  *
- * @param[in] err   Ö÷¶¯¹Ò¶ÏΪ JRTC_EBYE
- *                  µ«µ±ÓïÒôµç»°ÖжÏʱ, ÐëÉèÖÃΪJRTC_EAUDIOCALL,
- *                  ÆäËûδ֪Çé¿ö,¿ÉÉèÖÃΪ JRTC_ENIL(²»Ð޸ĹҶÏÔ­Òò)
+ * @param[in] err   主动挂断为 JRTC_EBYE
+ *                  但当语音电话中断时, 须设置为JRTC_EAUDIOCALL,
+ *                  其他未知情况,可设置为 JRTC_ENIL(不修改挂断原因)
  */
 void jrtc_close (struct jrtc_t* jc, enum jrtc_error err);
 
-/** ±àÂëǰµÄµÄÊÓÆµÖ¡ */
+/** 编码前的的视频帧 */
 struct jrtc_photo_t
 {
     void* data;
@@ -228,38 +228,38 @@ struct jrtc_photo_t
     char reserve[3];
 };
 
-/** ¶¯Ì¬ÉèÖÃǰºó¾µÍ·
- * @param[in] camera 0Ϊºó¾µÍ·,1ÊÇǰ¾µÍ·
- * @param[in] effect ±àÂëǰͼÏñµÄ´¦Àí»Øµ÷
- *                   ½ûÖ¹¸Ä±äͼÏñ³ß´çºÍ¸ñʽ.
- *                   ¿ÉÉèÖÃΪ NULL
+/** 动态设置前后镜头
+ * @param[in] camera 0为后镜头,1是前镜头
+ * @param[in] effect 编码前图像的处理回调
+ *                   禁止改变图像尺寸和格式.
+ *                   可设置为 NULL
  * @code 
  *   static char* encoding = NULL;
- *   //Ö»¾µÏñ·¢ËÍͼÏñ
+ *   //只镜像发送图像
  *   jrtc_set_camera(jc, 1, [](struct jrtc_photo_t* frame){
  *      auto preview = frame->data;
  *      if (!encoding) encoding = new char[frame->bytes];
  *
- *      assert (frame->format == JRTC_NV16 && "¸ù¾Ýƽ̨ѡÔñת»»º¯Êý");
+ *      assert (frame->format == JRTC_NV16 && "根据平台选择转换函数");
  *      jrtc_nv16_mirror(frame, frame->width, frame->height, encoding);
  *      frame->data = encoding;
  *   });
- *   //Ö»¾µÏñÔ¤ÀÀͼÏñ
+ *   //只镜像预览图像
  *   jrtc_set_camera(jc, 1, [](struct jrtc_photo_t* frame){
  *      auto preview = frame->data;
  *      if (!encoding) encoding = new char[frame->bytes];
  *      frame->data = memcpy(encoding, preview, frame->bytes);
  *
- *      assert (frame->format == JRTC_NV16 && "¸ù¾Ýƽ̨ѡÔñת»»º¯Êý");
+ *      assert (frame->format == JRTC_NV16 && "根据平台选择转换函数");
  *      jrtc_nv16_mirror(frame, frame->width, frame->height, preview);
  *   });
- *   //ͬʱ¾µÏñÔ¤ÀÀºÍ·¢ËÍͼÏñ
+ *   //同时镜像预览和发送图像
  *   jrtc_set_camera(jc, 1, [](struct jrtc_photo_t* frame){
  *      auto preview = frame->data;
  *      if (!encoding) encoding = new char[frame->bytes];
  *      frame->data = memcpy(encoding, preview, frame->bytes);
  *
- *      assert (frame->format == JRTC_NV16 && "¸ù¾Ýƽ̨ѡÔñת»»º¯Êý");
+ *      assert (frame->format == JRTC_NV16 && "根据平台选择转换函数");
  *      jrtc_nv16_mirror(frame, frame->width, frame->height, preview);
  *      frame->data = preview;
  *   });
@@ -268,25 +268,25 @@ struct jrtc_photo_t
 void jrtc_set_camera (struct jrtc_t* jc, int camera,
     void (*effect) (struct jrtc_photo_t* frame));
 
-/** ¼¤»îÉ豸, ¿ªÆô·¢ËÍÄÜÁ¦
- * @param[in] devices jrtc_device µÄ¼¯ºÏ
+/** 激活设备, 开启发送能力
+ * @param[in] devices jrtc_device 的集合
  */
 void jrtc_activate (struct jrtc_t* jc, int devices);
 
-/** ½û»îÉ豸, ¹Ø±Õ·¢ËÍÄÜÁ¦
- * @param[in] devices jrtc_device µÄ¼¯ºÏ
+/** 禁活设备, 关闭发送能力
+ * @param[in] devices jrtc_device 的集合
  */
 void jrtc_deactivate (struct jrtc_t* jc, int devices);
 
-/** ·µ»ØÍ¨»°×´Ì¬ */
+/** 返回通话状态 */
 enum jrtc_state jrtc_state  (const struct jrtc_t *jc);
 
-/** ·µ»Ø×î½üµÄ³ö´íÖµ */
+/** 返回最近的出错值 */
 enum jrtc_error jrtc_error  (const struct jrtc_t *jc);
 
-/** ·µ»ØÍøÂç״̬
- * @param[out] remote_active_devices  ¶Ô¶ËµÄµÄÊý¾ÝÁ÷״̬. jrtc_device µÄ¼¯ºÏ
- *                                    ÔÊÐí NULL.
+/** 返回网络状态
+ * @param[out] remote_active_devices  对端的的数据流状态. jrtc_device 的集合
+ *                                    允许 NULL.
  */
 enum jrtc_netstat jrtc_netstat(struct jrtc_t* jc, int *remote_active_devices);
 
index 749a3b5..78a1c68 100644 (file)
 extern "C" {
 #endif
 
-/** Í¨»°×´Ì¬
+/** 通话状态
  *             jrtc_alloc              jrtc_schedule                   jrtc_schedule 
- *             ´´½¨ÊµÀý                ·¢ËÍÇëÇó                        ÊÕµ½Ó¦´ð
+ *             创建实例                发送请求                        收到应答
  * JRTC_CLOSED ----------> JRTC_OPENED ------------------> JRTC_JOINING -------------> JRTC_JOINED
  *       ^                                                                            |
  *       | jrtc_schedule                                                              | jrtc_schedule
- *       | Ïú»ÙʵÀý        jrtc_leave »ò ÄÚ²¿³ö´í                                     | ÊÕµ½Ã½ÌåÊý¾Ý
+ *       | 销毁实例        jrtc_leave 或 内部出错                                     | 收到媒体数据
  * JRTC_LEAVING <---------------------------+------------- JRTC_TALKING <-------------+
  *                                          |                  ^
  *                                          |  jrtc_schedule   |
  *                                          +------------------+
  */
 
-/** ÖØÖ÷þÎñÆ÷µØÖ·
- * ×¢Òâ:
- * - ÊÖ¹¤ÉèÖÃеØÖ·,ͨ³£Ö»ÓÃÓÚ²âÊÔ
- * - srvURL ÏÞÖÆ×î´ó×Ö·ûÊýΪ128
- * - srvURL Îª¿Õʱ, »Ö¸´ÎªÄÚÖõÄĬÈÏ·þÎñÆ÷µØÖ·
+/** 重置服务器地址
+ * 注意:
+ * - 手工设置新地址,通常只用于测试
+ * - srvURL 限制最大字符数为128
+ * - srvURL 为空时, 恢复为内置的默认服务器地址
  *
- * @param[in] srvURL ·þÎñÆ÷µØÖ· 
+ * @param[in] srvURL 服务器地址 
  */
 void jrtc_config_server (const char* srvURL);
 
-/** ·ÖÅäͨ»°×ÊÔ´
- * ×¢Òâ:
- * - ÄÚ²¿Ö±½ÓÒýÓõØÖ·,ÓÉÍⲿ±£Ö¤ÄÚ´æµÄÓÐЧÐÔ
- * - ÄÚ²¿Ã»ÓÐÆô¶¯ÍøÂçÏß³Ì,ÐèÒª²»¶ÏµÄµ÷ÓÃÈçÏÂÇý¶¯
+/** 分配通话资源
+ * 注意:
+ * - 内部直接引用地址,由外部保证内存的有效性
+ * - 内部没有启动网络线程,需要不断的调用如下驱动
  *   jrtc_schedule(jc, nowMs);
- * - ÄÚ²¿É豸³õʼûÓ줻î,ºóÐøÐèÒªµ÷ÈçÏ¿ªÆô
+ * - 内部设备初始没有激活,后续需要调如下开启
  *   jrtc_activate(jc,JRTC_AUDIO|JRTC_CAMERA)
  *
- * ticket ×÷Ϊͨ»°ID, Î¨Ò»±êʶÿ´Îͨ»°:
- *  - ²»Äܰüº¬JSONÐèתÒåµÄ×Ö·û
- *  - Ã¿´Îͨ»°, ÒªÊ¹Óò»Í¬µÄ ticket,(Ëæ»ú²úÉú»òÏò·þÎñÆ÷ÉêÇë)
- *  - A ºô½Ðǰ,ÉêÇë»ñµÃ ticket
- *  - A ÐèҪͨ"ijÖÖÍÆËÍ»úÖÆ"(³¤Á¬½Ó,ÍÆËÍ·½Ê½) ½« ticket Í¨Öªµ½B
- *  - A ºÍB ¶Ôºôʱ, ±ØÐëʹÓÃÏàͬµÄticket, ÒÔ±ã·þÎñÆ÷¾«È·±êʶ»á»°
+ * ticket 作为通话ID, 唯一标识每次通话:
+ *  - 不能包含JSON需转义的字符
+ *  - 每次通话, 要使用不同的 ticket,(随机产生或向服务器申请)
+ *  - A 呼叫前,申请获得 ticket
+ *  - A 需要通"某种推送机制"(长连接,推送方式) 将 ticket 通知到B
+ *  - A 和B 对呼时, 必须使用相同的ticket, 以便服务器精确标识会话
  *
- * @param[in] roomid    ¼ÓÈëµÄ·¿¼äºÅ(¶Ô·½ÕË»§)
- * @param[in] ticket    ÓÃÓÚ·¿¼äµÄhashÖµ,¿Éͨ¹ýÆäËû·¾¶»ñµÃ,ĬÈÏΪNULL,½öÓÃÓÚµ÷ÊÔ.
- * @param[in] video     ÆÚÍû½ÓÊÕµÄÊÓÆµ³ß´çºÍÖ¡ËÙ,ÂëÂÊ.  Èô NULL,Ôò²»½ÓÊÕÊÓÆµ
- * @param[in] camera    ÓÃÓÚÔ¤ÀÀͼÏñ,½¨ÒéµÄ·¢ËͳߴçºÍÖ¡ËÙ,ÂëÂÊ.  Èô NULL, Ôò²»Ê¹ÓþµÍ·.
- *                      ×îÖÕµÄÊÓÆµ³ß´çºÍ¾µÍ·µÄ³ß´ç,¶¼ÓÉ·þÎñÆ÷ЭÉ̾ö¶¨.
+ * @param[in] roomid    加入的房间号(对方账户)
+ * @param[in] ticket    用于房间的hash值,可通过其他路径获得,默认为NULL,仅用于调试.
+ * @param[in] video     期望接收的视频尺寸和帧速,码率.  若 NULL,则不接收视频
+ * @param[in] camera    用于预览图像,建议的发送尺寸和帧速,码率.  若 NULL, 则不使用镜头.
+ *                      最终的视频尺寸和镜头的尺寸,都由服务器协商决定.
  */
 struct jrtc_t* jrtc_alloc (const char* roomid, const char* ticket, struct jrtc_image_t* video, struct jrtc_image_t* camera);
 
-/** µ¥²½¸üÐÂͨ»°
- * ÒªÇóʵʱÐÔ´¦Àí, Îñ±ØÔÚ¶ÀÁ¢Ïß³ÌÖгÖÐø¸üÐÂ, 
- * µ±·µ»Ø JRTC_CLOSED Ê±, ¿ÉÒÔÍ˳ö¸ÃÏß³Ì.
- * ÀýÈç:
- *  Æô¶¯ÍøÂçÏß³Ì([jc]{
+/** 单步更新通话
+ * 要求实时性处理, 务必在独立线程中持续更新, 
+ * 当返回 JRTC_CLOSED 时, 可以退出该线程.
+ * 例如:
+ *  启动网络线程([jc]{
  *      do {
- *          state = jrtc_schedule(jc, µ±Ç°ºÁÃë);
+ *          state = jrtc_schedule(jc, 当前毫秒);
  *      } while(state != JRTC_CLOSED);
  *  }
  *
- * @param[in] ms        µ±Ç°ºÁÃë
+ * @param[in] ms        当前毫秒
  */
 enum jrtc_state jrtc_schedule (struct jrtc_t* jc, unsigned ms);
 
-/** Ö÷¶¯À뿪/¹Ò¶Ï
- * ×¢Òâ: ÕâÀïÖ»¸Ä±ä״̬, Ïú»Ù½«ÔÚjrtc_schedule()ÖÐ×Ô¶¯´¦Àí
+/** 主动离开/挂断
+ * 注意: 这里只改变状态, 销毁将在jrtc_schedule()中自动处理
  * 
- * @param[in] err   Ö÷¶¯¹Ò¶ÏΪ JRTC_EBYE
- *                  µ«µ±ÓïÒôµç»°ÖжÏʱ, ÐëÉèÖÃΪJRTC_EAUDIOCALL,
- *                  ÆäËûδ֪Çé¿ö,¿ÉÉèÖÃΪ JRTC_ENIL(²»Ð޸ĹҶÏÔ­Òò)
+ * @param[in] err   主动挂断为 JRTC_EBYE
+ *                  但当语音电话中断时, 须设置为JRTC_EAUDIOCALL,
+ *                  其他未知情况,可设置为 JRTC_ENIL(不修改挂断原因)
  */
 enum jrtc_state jrtc_leave (struct jrtc_t *jc, enum jrtc_error err);
 
-/** ¾µÏñ
- * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
- * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª(µÈ¼ÛÓÚÐýת180¶È)
- * @param[out] dst  Ä¿±êÄÚ´æ
+/** 镜像
+ * @param[in] dst_w 目标宽度, 会自动裁剪,但不缩放
+ * @param[in] dst_h 目标高度, 负数时会先上下翻转(等价于旋转180度)
+ * @param[out] dst  目标内存
  */
 void jrtc_i420_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 void jrtc_nv12_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 void jrtc_uyvy_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 void jrtc_nv16_mirror(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 
-/** Ë³Ê±Õëת90¶È
- * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
- * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª(µÈ¼ÛÓÚת90ºóˮƽ¾µÏñ)
- * @param[out] dst  Ä¿±êÄÚ´æ
+/** 顺时针转90度
+ * @param[in] dst_w 目标宽度, 会自动裁剪,但不缩放
+ * @param[in] dst_h 目标高度, 负数时会先上下翻转(等价于转90后水平镜像)
+ * @param[out] dst  目标内存
  */
 void jrtc_i420_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
 void jrtc_nv12_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
 void jrtc_uyvy_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
 void jrtc_nv16_rotate90(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
 
-/** Ë³Ê±Õëת270¶È
- * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
- * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª(µÈ¼ÛÓÚת270ºóˮƽ¾µÏñ)
- * @param[out] dst  Ä¿±êÄÚ´æ
+/** 顺时针转270度
+ * @param[in] dst_w 目标宽度, 会自动裁剪,但不缩放
+ * @param[in] dst_h 目标高度, 负数时会先上下翻转(等价于转270后水平镜像)
+ * @param[out] dst  目标内存
  */
 void jrtc_i420_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
 void jrtc_nv12_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
 void jrtc_uyvy_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
 void jrtc_nv16_rotate270(const struct jrtc_photo_t* src, int dst_w, int dst_h,  char* dst);
 
-/** ²Ã¼ô
- * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
- * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª
- * @param[out] dst  Ä¿±êÄÚ´æ
+/** 裁剪
+ * @param[in] dst_w 目标宽度, 会自动裁剪,但不缩放
+ * @param[in] dst_h 目标高度, 负数时会先上下翻转
+ * @param[out] dst  目标内存
  */
 void jrtc_i420_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 void jrtc_nv12_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 void jrtc_uyvy_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 void jrtc_nv16_copy(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 
-/** ×ª»»Îª RGB565
- * @param[in] dst_w Ä¿±ê¿í¶È, »á×Ô¶¯²Ã¼ô,µ«²»Ëõ·Å
- * @param[in] dst_h Ä¿±ê¸ß¶È, ¸ºÊýʱ»áÏÈÉÏÏ·­×ª
- * @param[out] dst  Ä¿±êÄÚ´æ, Êä³ö³¤¶ÈΪ dst_w*dst_h*sizeof(short)
+/** 转换为 RGB565
+ * @param[in] dst_w 目标宽度, 会自动裁剪,但不缩放
+ * @param[in] dst_h 目标高度, 负数时会先上下翻转
+ * @param[out] dst  目标内存, 输出长度为 dst_w*dst_h*sizeof(short)
  */
 void jrtc_i420_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 void jrtc_nv12_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 void jrtc_uyvy_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 void jrtc_nv16_torgb565(const struct jrtc_photo_t* src, int dst_w, int dst_h, char* dst);
 
-/** ¿ÉÓÅ»¯ÅäÖõIJÎÊý @{ */
-extern unsigned JRTC_SESSION_TIMEOUT; /*< ½¨Á¢Í¨»°×ܵij¬Ê±·§Öµ,ĬÈÏ 300 Ãë*/
-extern unsigned JRTC_REPLY_TIMEOUT; /*< ½¨Á¢Í¨»°Öеȴý·þÎñÆ÷Ó¦´ðµÄ³¬Ê±·§Öµ,ĬÈÏ120 Ãë */
-extern unsigned JRTC_MEDIA_TIMEOUT; /*< ½ÓÊÕýÌåÊý¾ÝµÄ³¬Ê±·§Öµ, Ä¬ÈÏ 20 Ãë */
-extern unsigned JRTC_MAX_RTP_SIZE; /*< ·¢Ë͵Ä×î´ó RTP °ü·§Öµ, Ä¬ÈÏ1200,²»ÄÜ´óÓÚ1500 */
-extern unsigned JRTC_AUDIO_RED_LOSS;/*< ¿ªÆôÒôƵÈßÓà±àÂëµÄ¶ª°üÂÊ·§Öµ, Ä¬ÈÏ 10 % */
-extern unsigned JRTC_VIDEO_FEC_LOSS; /*< ¿ªÆôÊÓÆµÈßÓà±àÂëµÄ¶ª°üÂÊ·§Öµ, Ä¬ÈÏ 5 % */
-extern unsigned JRTC_VIDEO_FEC_MAX_RTT;/*< ¿ªÆôÊÓÆµÈßÓà±àÂëµÄRTTÉÏÏÞ, Ä¬ÈÏ 3000 ms, 0 ÔòÇ¿ÖÆ¹Ø±ÕFEC */
-extern unsigned JRTC_VIDEO_FEC_MAX_BW_RATIO; /*< ¿ªÆôÊÓÆµÈßÓà±àÂëµÄ¶îÍâµÄÂëÂÊÕ¼±È, Ä¬ÈÏ 80 %, 0 ÔòÇ¿ÖÆ¹Ø±ÕFEC */
-extern unsigned JRTC_VIDEO_INIT_GOP; /*< ³õʼĬÈϵÄÊÓÆµ¹Ø¼üÖ¡¼ä¸ô, Ä¬ÈÏ2000 ms */
-extern unsigned JRTC_TASK_STACK_KB; /*< ÄÚ²¿Ï̵߳ÄÕ»´óС,ÓëÆ½Ì¨Ïà¹Ø */
-extern unsigned JRTC_TASK_PRIORITY; /*< ÄÚ²¿Ï̵߳ÄÓÅÏȼ¶,ÓëÆ½Ì¨Ïà¹Ø */
+/** 可优化配置的参数 @{ */
+extern unsigned JRTC_SESSION_TIMEOUT; /*< 建立通话总的超时阀值,默认 300 秒*/
+extern unsigned JRTC_REPLY_TIMEOUT; /*< 建立通话中等待服务器应答的超时阀值,默认120 秒 */
+extern unsigned JRTC_MEDIA_TIMEOUT; /*< 接收媒体数据的超时阀值, 默认 20 秒 */
+extern unsigned JRTC_MAX_RTP_SIZE; /*< 发送的最大 RTP 包阀值, 默认1200,不能大于1500 */
+extern unsigned JRTC_AUDIO_RED_LOSS;/*< 开启音频冗余编码的丢包率阀值, 默认 10 % */
+extern unsigned JRTC_VIDEO_FEC_LOSS; /*< 开启视频冗余编码的丢包率阀值, 默认 5 % */
+extern unsigned JRTC_VIDEO_FEC_MAX_RTT;/*< 开启视频冗余编码的RTT上限, 默认 3000 ms, 0 则强制关闭FEC */
+extern unsigned JRTC_VIDEO_FEC_MAX_BW_RATIO; /*< 开启视频冗余编码的额外的码率占比, 默认 80 %, 0 则强制关闭FEC */
+extern unsigned JRTC_VIDEO_INIT_GOP; /*< 初始默认的视频关键帧间隔, 默认2000 ms */
+extern unsigned JRTC_TASK_STACK_KB; /*< 内部线程的栈大小,与平台相关 */
+extern unsigned JRTC_TASK_PRIORITY; /*< 内部线程的优先级,与平台相关 */
 /** @} */
 
-/** ¿É¸¨Öúµ÷ÊÔµÄÈ«¾ÖÖµ @{ */
-extern char  _jrtc_errstr[256]; /* ×î½ü´íÎóÃèÊö */
-extern const char* _jrtc_version; /* µ±Ç°°æ±¾ºÅ */
-/* ÒÔÏÂÊÇjrtc_config(...)ÖеÄÈë²ÎÖµ */
+/** 可辅助调试的全局值 @{ */
+extern char  _jrtc_errstr[256]; /* 最近错误描述 */
+extern const char* _jrtc_version; /* 当前版本号 */
+/* 以下是jrtc_config(...)中的入参值 */
 extern char _jrtc_appkey[25];
 extern char _jrtc_uid[65];
 extern char _jrtc_srvURL[129];
index 2e7e8da..52ab314 100644 (file)
Binary files a/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a and b/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a differ
index 3c73bd9..d65ec44 100644 (file)
@@ -19,6 +19,7 @@
 #include "mperrno.h"
 #include "binary.h"
 
+
 #if CONFIG_GH301x
 #include "hbd_ctrl.h"
 #endif
@@ -132,9 +133,11 @@ typedef struct _SC7A20_obj_t
 } SC7A20_obj_t;
 STATIC SC7A20_obj_t *g_SC7A20 = NULL;
 char is_set_cb = 0;
+//#include "jrtc0.h"
 unsigned char SL_SC7A20_I2c_Spi_Write(bool sl_spi_iic,unsigned char reg, unsigned char data)
 {
        uint8_t reg_addr = reg;
+       //jrtc_config_server("192.168.1.1");
        //SC7A20_LOG("SL_SC7A20_I2c_Spi_Write reg_addr:%d, data:%02x\n", reg_addr, data);
        if(HELIOS_I2C_Write((Helios_I2CEnum)0, SC7A20_IIC_ADDRESS, &reg_addr, 1, &data, 1) == 0)
        {
index 6398657..82f311e 100644 (file)
@@ -715,6 +715,12 @@ extern const struct _mp_obj_module_t mp_module_Hsensor;
 #define MICROPY_PORT_BUILTIN_MODULES_Hsensor
 #endif
 
+#if 1 //MICROPY_QPY_MODULE_VideoCall
+extern const struct _mp_obj_module_t mp_module_VideoCall;
+#define MICROPY_PORT_BUILTIN_MODULES_VideoCall         { MP_OBJ_NEW_QSTR(MP_QSTR_VideoCall), (mp_obj_t)&mp_module_VideoCall},
+#else
+#define MICROPY_PORT_BUILTIN_MODULES_VideoCall
+#endif
 
 extern const struct _mp_obj_module_t mp_module_code128;
 #define MICROPY_PORT_BUILTIN_MODULES_code128           { MP_OBJ_NEW_QSTR(MP_QSTR_code128), (mp_obj_t)&mp_module_code128 }, /* ע��`code128`ģ�� */ 
@@ -781,6 +787,7 @@ extern const struct _mp_obj_module_t mp_module_network;
                MICROPY_PORT_BUILTIN_MODULES_G729 \
                MICROPY_PORT_BUILTIN_MODULES_Gsensor \
                MICROPY_PORT_BUILTIN_MODULES_Hsensor \
+               MICROPY_PORT_BUILTIN_MODULES_VideoCall \
                MICROPY_PORT_BUILTIN_MODULES_code128\
                MICROPY_PORT_BUILTIN_MODULES_NETWORK
 
index d7df683..b0d2a6a 100644 (file)
@@ -1,7 +1,7 @@
 import _thread
 import usys
-
-
+import  uos
+import utime
 class EventStore(object):
     def __init__(self):
         self.map = dict()
index d0ebceb..73dffe4 100644 (file)
@@ -356,6 +356,8 @@ SRC_QSTR += \
                        source/modGsensor_SC7A20.c \
                        source/modHsensor.c \
                        source/modHsensor_GH3018.c \
+                       source/modVideoCall.c \
+                       source/modVideoCall_juphoon.c \
                        source/modrsa.c \
                        source/utils_crc32.c \
                        source/http_parser.c \
@@ -663,7 +665,9 @@ endif
 ifeq ($(CONFIG_SC7A20), y)
 INC += -I$(ROOT)/components/SC7A20
 endif
-
+ifeq ($(CONFIG_juphoon), y)
+INC += -I$(ROOT)/components/juphoon
+endif
 ifeq ($(CONFIG_POC_BND), y)
 INC += -I$(ROOT)/components/poc
 INC += -I$(ROOT)/components/poc/bnd/inc
@@ -957,7 +961,6 @@ frozen_mpy_list =   $(BUILD)/_boot.mpy \
                                        $(BUILD)/EventMesh.mpy \
                                        $(BUILD)/initTP.mpy \
                                        $(BUILD)/lcd.mpy \
-                                       $(BUILD)/location.mpy \
                                        $(BUILD)/mgr.mpy \
                                        $(BUILD)/protocol.mpy \
                                        $(BUILD)/ui.mpy \
@@ -966,6 +969,7 @@ frozen_mpy_list =   $(BUILD)/_boot.mpy \
                                        $(BUILD)/ui_WatchFaceScreen.mpy \
                                        $(BUILD)/ui_health.mpy \
                                        $(BUILD)/main_init.mpy \
+                                       $(BUILD)/calculator.mpy \
                                        $(BUILD)/versions.mpy \
 
 endif
index 1e440b6..b2746a8 100644 (file)
@@ -11,7 +11,7 @@ import ujson
 import ql_fs
 from misc import Power
 import audio
-from ui import style_img,style_screen,style_font_youyuan_20
+from ui import style_screen_btn_1_main_main_default,style_font_youyuan_20_gray,style_img,style_screen,style_font_youyuan_20
 import ntptime
 
 #ntptime.settime(timezone=8)
@@ -73,16 +73,16 @@ print("clk_list_screen")
 clk_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
 clk_list_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
 
-clk_list_title_bg= lv.btn(clk_list_screen)
-clk_list_title_bg.set_size(112,25)
-clk_list_title_bg.set_pos(8,5)
-clk_list_title_bg.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
-clk_list_title_bg.set_ext_click_area(25)
+# clk_list_title_bg= lv.btn(clk_list_screen)
+# clk_list_title_bg.set_size(112,25)
+# clk_list_title_bg.set_pos(8,5)
+# clk_list_title_bg.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+# clk_list_title_bg.set_ext_click_area(25)
 
-clk_list_title = lv.label(clk_list_title_bg)
+clk_list_title = lv.label(clk_list_screen)
 clk_list_title.set_pos(4, 5)
 clk_list_title.set_size(112, 20)
-clk_list_title.set_text("闹钟列表")
+clk_list_title.set_text("闹钟")
 clk_list_title.set_long_mode(lv.label.LONG.WRAP)
 clk_list_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 clk_list_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
@@ -400,8 +400,11 @@ label_ok.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 label_ok.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 
 #闹钟信息
-alarm_list = [{'hour': 16, 'repeart': 10, 'idx': 0, 'enabled': 0, 'days': [], 'minute': 39},
-               {'hour': 16, 'repeart': 10, 'idx': 1, 'enabled': 0, 'days': [], 'minute': 39}]
+alarm_list = [{'hour': 16, 'repeart': 10, 'idx': 0, 'enabled': 0, 'days': [0,1,2,3,4,5,6], 'minute': 39},
+               {'hour': 16, 'repeart': 10, 'idx': 1, 'enabled': 0, 'days': [0,1,2,3,4,5,6], 'minute': 39},
+               {'hour': 16, 'repeart': 1, 'idx': 1, 'enabled': 0, 'days': [0,1,2,3,4,5,6], 'minute': 39},
+               {'hour': 16, 'repeart': 1, 'idx': 1, 'enabled': 0, 'days': [], 'minute': 39},
+               {'hour': 16, 'repeart': 1, 'idx': 1, 'enabled': 0, 'days': [], 'minute': 39},]
 #用于显示闹钟列表不包含开关机信息
 
 class ClockManager(Abstract):
@@ -886,6 +889,25 @@ style_common_pressed.set_pad_right(0)
 style_common_pressed.set_pad_top(0)
 style_common_pressed.set_pad_bottom(0)
 
+alarm_main_default = lv.style_t()
+alarm_main_default.init()
+alarm_main_default.set_radius(5)
+alarm_main_default.set_bg_color(lv.color_make(0x64,0x64,0x64))
+alarm_main_default.set_bg_grad_color(lv.color_make(0x64,0x64,0x64))
+alarm_main_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+alarm_main_default.set_bg_opa(255)
+alarm_main_default.set_border_color(lv.color_make(0x64,0x64,0x64))
+alarm_main_default.set_border_width(0)
+alarm_main_default.set_border_opa(255)
+alarm_main_default.set_pad_left(0)
+alarm_main_default.set_pad_right(0)
+alarm_main_default.set_pad_top(0)
+alarm_main_default.set_pad_bottom(0)
+
+alarm_style_font_youyuan_20_gray = lv.style_t()
+alarm_style_font_youyuan_20_gray.init()
+alarm_style_font_youyuan_20_gray.set_text_color(lv.color_make(200, 200, 200))
+alarm_style_font_youyuan_20_gray.set_text_font(lv.K01_font_16_ALL)
 #闹钟列表
 class ClkListScreen(Screen):
     NAME = "clk_list"
@@ -900,26 +922,27 @@ class ClkListScreen(Screen):
         self.weekdays_list = ["日","一","二","三","四","五","六"]
         EventMesh.subscribe("push_update_alarm_show", self.update_show_info)
         self.alarm_show_list = lv.obj(clk_list_screen)
-        self.alarm_show_list.set_pos(0, 35)
-        self.alarm_show_list.set_size(128, 128-35)
+        self.alarm_show_list.set_pos(0, 25)
+        self.alarm_show_list.set_size(128, 128-25)
         self.alarm_show_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
         self.alarm_show_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
         self.timer=osTimer()
         for i in range(self.MXA_clk_num):
         
             _btn = lv.btn(self.alarm_show_list)
+            _btn.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+            _btn.add_style(alarm_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
             _btn.add_flag(lv.obj.FLAG.CLICKABLE)
-            _btn.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
-            _btn.add_flag(lv.obj.FLAG.HIDDEN)
             _btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.edit_alarm(e)),
                                     lv.EVENT.CLICKED, None)
+            
             _btn_label1 = lv.label(_btn)
             _btn_label2 = lv.label(_btn)
             _btn_label2.set_long_mode(lv.label.LONG.DOT)
             _btn_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
             _btn_label3 = lv.label(_btn)
             _btn_label3.set_long_mode(lv.label.LONG.DOT)
-            _btn_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+            _btn_label3.add_style(alarm_style_font_youyuan_20_gray, lv.PART.MAIN | lv.STATE.DEFAULT)
             self.contact_detail_listt_dict.append({"_btn":_btn,"_btn_label1":_btn_label1,"_btn_label2":_btn_label2,"_btn_label3":_btn_label3})
 
     def initialization(self): 
@@ -940,7 +963,7 @@ class ClkListScreen(Screen):
         global alarm_list 
         self.clock_list = alarm_list  
         IFEXIST = ql_fs.path_exists("/usr/static/storage_file/alarm_msg.json")    
-        if IFEXIST == True:
+        if IFEXIST == False:
             if self.clock_list:
 
                 no_add_alarm.add_flag(lv.obj.FLAG.HIDDEN)
@@ -963,16 +986,16 @@ class ClkListScreen(Screen):
                         continue
                     print("alarm!!!!!!!!!!")
                     #_btn = lv.btn(self.alarm_show_list)
-                    self.contact_detail_listt_dict[count]["_btn"].set_size(112,45)
-                    self.contact_detail_listt_dict[count]["_btn"].set_pos(8,49*count)
+                    self.contact_detail_listt_dict[count]["_btn"].set_size(120,35)
+                    self.contact_detail_listt_dict[count]["_btn"].set_pos(4,39*count)
 
                     #_btn_label1 = lv.label(_btn)
-                    self.contact_detail_listt_dict[count]["_btn_label1"].set_pos(50, 0)
+                    self.contact_detail_listt_dict[count]["_btn_label1"].set_pos(20, 0)
                     self.contact_detail_listt_dict[count]["_btn_label1"].set_size(0, 0)
                     self.contact_detail_listt_dict[count]["_btn_label1"].set_text(str(num))
 
                     #_btn_label2 = lv.label(_btn)
-                    self.contact_detail_listt_dict[count]["_btn_label2"].set_pos(8, 5)
+                    self.contact_detail_listt_dict[count]["_btn_label2"].set_pos(10, 0)
                     self.contact_detail_listt_dict[count]["_btn_label2"].set_size(97, 20)
                     self.contact_detail_listt_dict[count]["_btn_label2"].set_text("%02d" % each["hour"] + ":"+"%02d" % each["minute"])
                     self.contact_detail_listt_dict[count]["_btn_label2"].set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
@@ -981,7 +1004,7 @@ class ClkListScreen(Screen):
                     repeart = each["repeart"]
                     _output = [self.weekdays_list[x] for x in _new_list]
                     #_btn_label3 = lv.label(_btn)
-                    self.contact_detail_listt_dict[count]["_btn_label3"].set_pos(8, 25)
+                    self.contact_detail_listt_dict[count]["_btn_label3"].set_pos(10, 18)
                     self.contact_detail_listt_dict[count]["_btn_label3"].set_size(128-8, 20)
                     print("_new_list:{} repeart:{}".format(_new_list,repeart))
                     if repeart == 1:
index c09894c..3d5f245 100644 (file)
@@ -173,7 +173,7 @@ class FactoryModeLocationScreen(Screen):
         self.time_count = 0
         self.time_GNSS = 0
         self.GNSS_status = 0
-
+        self.timer_c = 0
     def initialization(self):
         FactoryModeLocation_GNSS_label.set_text("GNSS:\n") 
         # FactoryModeLocation_WIFI_label.set_text("WIFI:")
@@ -187,12 +187,20 @@ class FactoryModeLocationScreen(Screen):
         EventMesh.publish(constants.EVENT.START_LOCATION_TEST) #测试模式
 
     def timer_FactoryModeLocation_cb(self, *args, **kwargs):
-        EventMesh.publish("system_sleep_rest")#防止黑屏    
+        EventMesh.publish("system_sleep_rest")#防止黑屏  
+        self.timer_c += 1
+        if self.timer_c >= 7:
+            get_location_flag = EventMesh.publish("get_location_flag")
+            self.timer_c = 0
+            if get_location_flag != None:
+                if(get_location_flag == 0):
+                    EventMesh.publish(constants.EVENT.START_LOCATION_TEST) #测试模式
+                    self.time_count = utime.mktime(utime.localtime())
 
     def GET_LOCATION_DATA(self, event, msg):
-        print("GPS:{}".format(msg[0]))
-        print("WIFI:{}".format(msg[1]))
-        print("CALL:{}".format(msg[2]))
+        # print("GPS:{}".format(msg[0]))
+        # print("WIFI:{}".format(msg[1]))
+        # print("CALL:{}".format(msg[2]))
         EventMesh.publish("system_sleep_rest")#防止黑屏
         _DATA = ""
         time_tmp = utime.mktime(utime.localtime())
@@ -200,55 +208,36 @@ class FactoryModeLocationScreen(Screen):
         
         if len(msg[0]) > 1 : #GPS
             GNSS_DATA = "GNSS:------\n"
-            
+            gnss_data = msg[0][0]
+            if gnss_data :
+                GNSS_DATA = GNSS_DATA + "{},{},{}\n".format("A",gnss_data["latitude"],gnss_data["longitude"])
+                
+                self.time_GNSS =  time_tmp-self.time_count
+                EventMesh.txt_log("test location time:{}".format(self.time_GNSS))
+                self.time_count = utime.mktime(utime.localtime())      
+            else:
+                
+                GNSS_DATA = GNSS_DATA + "{},{},{}\n".format("V",0,0)
             _DATA += "定位时间:{};{}秒\n".format(self.time_GNSS,time_tmp-self.time_count)   
-            rmc_data = msg[0][1].split("RMC")
-            gsv_data = msg[0][1].split("GSV")
-            if len(rmc_data) >= 2 :
-                rmc_data = rmc_data[1:]
-                rmc_tmp = rmc_data[0].split(",")
-                if len(rmc_tmp) >= 2:
-                    GNSS_DATA = GNSS_DATA + "{},{},{}\n".format(rmc_tmp[2],rmc_tmp[3],rmc_tmp[5])
-                    if rmc_tmp[2] == 'A':
-                        if self.GNSS_status == 0:
-                            self.time_GNSS =  time_tmp-self.time_count
-                            EventMesh.txt_log("test location time:{}".format(self.time_GNSS))
-                        self.GNSS_status = 1
-                    else:
-                        self.GNSS_status = 0
-                        self.time_GNSS = 0
-                        
-            if len(gsv_data) >= 2 :  
-                gsv_data = gsv_data[1:]
-                GSV_dict= {}
-                for i in range(len(gsv_data)) :
-                    gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                    gsv_tmp = gsv_data[i].split(",")
-                    if len(gsv_tmp) < 7 :
-                        break
-                    gsv_tmp = gsv_tmp[4:]
-                    #print("gsv_tmp:{}".format(gsv_tmp))
-                    for i in range(len(gsv_tmp)) :
-                        if i % 4 == 0:
-                            GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                            print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                        if len(gsv_tmp)-i < 4:
-                            break 
+            
+            GSV_dict  = msg[0][1]     
+            #print("GET_LOCATION_DATA:{}".format(GSV_dict))
+            if GSV_dict :  
                 count = 0
                 try:
                     for j in range(200):
                         for key in GSV_dict :
                             
-                            if(int(key) != j):
+                            if(key != j):
                                 continue
                             #print("GSV_dict[key]:len:{}".format(len(GSV_dict[key])))
-                            if len(GSV_dict[key]) >= 1 :
-                                GNSS_DATA+="{:<3}:[{:<3}]".format(key,GSV_dict[key])#:<3 宽度为3左对齐
+                            if GSV_dict[key] >= 1 :
+                                GNSS_DATA+=" {:<3}:[{:<3}] ".format(key,GSV_dict[key])#:<3 宽度为3左对齐
                                 count+=1
                                 if count % 2 == 0:
                                     GNSS_DATA+="\n"
                         
-                        if count > 30:
+                        if count > 50:
                             break
                 except Exception as e:
                     usys.print_exception(e)
@@ -268,7 +257,8 @@ class FactoryModeLocationScreen(Screen):
                 _DATA += "CALL:------\n{}".format(msg[2][0])
                 #FactoryModeLocation_CALL_label.set_text("CALL:{}".format(msg[2][0]))
         print("GET_LOCATION_DATA:data:{}".format(_DATA))  
-        FactoryModeLocation_GNSS_label.set_text(_DATA)    
+        FactoryModeLocation_GNSS_label.set_text(_DATA) 
+        self.timer_c = 0   
     def Close(self):
         EventMesh.publish(constants.EVENT.CLOSE_LOCATION) 
         self.timer_FactoryModeLocation.stop()
diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/calculator.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/calculator.py
new file mode 100644 (file)
index 0000000..73d9c43
--- /dev/null
@@ -0,0 +1,295 @@
+import lvgl as lv
+import ql_fs
+import EventMesh
+from misc import Power
+from ui import style_screen,style_font_youyuan_20_black,style_btn,style_img,Screen,style_contact_btn,style_bar,style_bar_indic
+import constants
+import osTimer
+import audio
+from machine import Pin
+import usys
+
+
+calculator_screen = lv.obj()
+print("calculator_screen")
+calculator_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+calculator_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# 创建文本框
+calculator_label = lv.textarea(calculator_screen)
+calculator_label.set_one_line(True)  # 关闭1行模式
+calculator_label.set_size(128, 32)  # 设置宽高
+calculator_label.align(lv.ALIGN.TOP_MID, 0, -2)  # 设置位置
+calculator_label.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF) #不显示滚动条
+#calculator_label.add_event_cb(lambda e: self.textarea_event_handler(e, ta), lv.EVENT.READY, None)  # 添加回调函数
+calculator_label.add_state(lv.STATE.FOCUSED)   # 设置光标
+calculator_label.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+calculator_num = lv.btnmatrix(calculator_screen)
+calculator_num.set_pos(int(0),int(30))
+calculator_num.set_size(128,90)
+calculator_num.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+btnm_map = [
+"C","<-","=","\n",
+"1","2","3","+","\n",
+"4","5","6","-","\n",
+"7","8","9","*","\n",
+".","0","%","/",""]
+calculator_num.set_map(btnm_map)
+# create style style_calculator_num_main_default
+style_calculator_num_main_default = lv.style_t()
+style_calculator_num_main_default.init()
+style_calculator_num_main_default.set_radius(4)
+style_calculator_num_main_default.set_bg_color(lv.color_make(0xff,0xff,0xff))
+style_calculator_num_main_default.set_bg_grad_color(lv.color_make(0xff,0xff,0xff))
+style_calculator_num_main_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+style_calculator_num_main_default.set_bg_opa(255)
+style_calculator_num_main_default.set_border_color(lv.color_make(0xff,0xff,0xff))
+style_calculator_num_main_default.set_border_width(1)
+style_calculator_num_main_default.set_border_opa(255)
+style_calculator_num_main_default.set_pad_left(2)
+style_calculator_num_main_default.set_pad_right(0)
+style_calculator_num_main_default.set_pad_top(2)
+style_calculator_num_main_default.set_pad_bottom(0)
+style_calculator_num_main_default.set_pad_row(1)
+style_calculator_num_main_default.set_pad_column(1)
+
+# add style for calculator_num
+calculator_num.add_style(style_calculator_num_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+# create style style_calculator_num_items_default
+style_calculator_num_items_default = lv.style_t()
+style_calculator_num_items_default.init()
+style_calculator_num_items_default.set_radius(4)
+style_calculator_num_items_default.set_bg_color(lv.color_make(0xe6,0xe6,0xe6))
+style_calculator_num_items_default.set_bg_grad_color(lv.color_make(0xe6,0xe6,0xe6))
+style_calculator_num_items_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+style_calculator_num_items_default.set_bg_opa(255)
+style_calculator_num_items_default.set_border_color(lv.color_make(0xd6,0xdd,0xe3))
+style_calculator_num_items_default.set_border_width(1)
+style_calculator_num_items_default.set_border_opa(255)
+style_calculator_num_items_default.set_text_color(lv.color_make(0x00,0x00,0x00))
+try:
+    style_calculator_num_items_default.set_text_font(lv.K01_font_16_ALL)
+except AttributeError:
+    print("set_font:error")
+
+# add style for calculator_num
+calculator_num.add_style(style_calculator_num_items_default, lv.PART.ITEMS|lv.STATE.DEFAULT)
+def my_round(src,  idx):
+    src_flag = 1 #正负数
+    if src < 0:
+        src_flag = 0
+    src = abs(src)
+    tmp_str = "{}".format(src)
+    tmp_str_l= tmp_str.split(".")
+    print("tmp_str1:{} {}".format(tmp_str,tmp_str_l))
+    if len(tmp_str_l)>1 :
+        if len(tmp_str_l[1]) > idx:
+            for i in range(idx):
+                src *=10
+            dest = int(src)
+            if src >= dest+0.5 :
+                dest += 1
+            print("dest:{}".format(dest))
+            tmp_str = "{}".format(dest)
+            if len(tmp_str) > idx:
+                tmp_str = tmp_str[:len(tmp_str)-idx]+'.'+tmp_str[len(tmp_str)-idx:]
+            else : #位数不够,补0
+                zero_str = ""
+                for j in range(idx-len(tmp_str)):
+                    zero_str += "0" 
+                print("zero_str:{}".format(zero_str))
+                tmp_str = '0.'+zero_str+tmp_str
+            tmp_str = tmp_str.rstrip('0')#去掉尾数的 0
+            if "." in tmp_str:
+                tmp_str = tmp_str.rstrip('.')#去掉尾数的 .
+            # for i in range(idx):
+            #     dest /=10
+            print("tmp_str:{}".format(tmp_str))
+    if src_flag == 0 :
+        tmp_str = "-" + tmp_str
+    return tmp_str
+
+class calculatorScreen(Screen):
+    NAME = "calculator"
+
+    def __init__(self):
+
+        super().__init__()
+        self.meta = None
+        self.calculator_num = ''
+        self.calculator_list = []
+        self.button = 0
+        self.timer = osTimer()
+        self.timer_cb = 0
+        self.count = 0
+        self.str = ""
+        calculator_num.add_event_cb(lambda e: self.calculator_event_cb(e,calculator_num), lv.EVENT.VALUE_CHANGED, None)
+        self.calculator_flag = 0
+        self.result = ""
+        self.num_count = 0 #限制输入位数 20位
+    def initialization(self):
+        
+        self.meta = calculator_screen
+
+    def calculator_eval(self,str):
+        print("calculator_eval:str{}".format)
+        try :  
+            num = eval(str)
+            ret = "{}".format((my_round(num,8))) #只保留小数点8位
+            # tmp = ret.split('.')
+            # if len(tmp) > 1:
+            #     if len(tmp[1]) > 8 : #保留小数点失败
+            #         str_tmp = tmp[0]+"."+tmp[1][:-1]
+            #         ret = "{}".format((float(str_tmp)))
+
+            return ret
+        except Exception as e:
+            usys.print_exception(e)
+            e_tmp = "{}".format(e)
+            if e_tmp.find("divide by zero") != -1 :
+                calculator_label.set_text("除数不能为0")
+            elif e_tmp.find("invalid syntax") != -1 :
+                EventMesh.txt_log("calculator:{} {}".format(self.calculator_flag,self.str))
+                calculator_label.set_text("无效语法")
+            else :
+                EventMesh.txt_log("calculator:{} {}".format(self.calculator_flag,self.str))
+                calculator_label.set_text("运算异常")
+            self.str = ""
+            self.calculator_flag = 0
+            return  -1
+    def calculator_event_cb(self,e,calculator_num):
+        src = e.get_target()
+        code = e.get_code()
+        #print("calculator_clicked:{} {}".format(src,code))
+        if code == lv.EVENT.VALUE_CHANGED:
+            txt = src.get_btn_text(src.get_selected_btn())  # 获取被点击的按钮的内容
+            try :    
+                if txt == "<-":  # 如果是退格键,那么就删除1个字符
+                    if self.calculator_flag != 2  :
+                        if len(self.str) > 1:
+                            str_tmp = self.str[-1]
+                            if  str_tmp == "/" or str_tmp == "*" or str_tmp == "-" or str_tmp == "+" : #最后一个是运算符
+                                self.calculator_flag = 0 
+                            self.str = self.str[0:-1]
+                        else :
+                            self.str = ""
+                            self.calculator_flag = 0
+                    if self.num_count > 0 :
+                        self.num_count-=1
+                    #calculator_label.del_char()
+                elif txt == "C": #清除键
+                    self.num_count = 0
+                    self.str = ""
+                    calculator_label.set_text("")
+                    self.calculator_flag = 0
+                elif txt == "=" :
+                    if(self.calculator_flag == 1): #有运算符
+                        str_tmp = self.str[-1]
+                        if  str_tmp == "/" or str_tmp == "*" or str_tmp == "-" or str_tmp == "+" : #最后一个是运算符
+                            return
+                        else:
+                            self.num_count = 0
+                            self.result = self.calculator_eval(self.str)
+                            if self.result == -1:
+                                return
+                            self.str += txt+self.result
+                    self.calculator_flag = 2
+                elif txt == "%" :
+                    str_tmp = self.str[-1]
+                    if  str_tmp == "/" or str_tmp == "*" or str_tmp == "-" or str_tmp == "+" : #最后一个是运算符
+                        self.str = self.str[:-1]
+                    
+                    self.num_count = 0
+                    self.result = self.calculator_eval(self.str+"/100")
+                    if self.result == -1:
+                        return
+                    self.str += txt+"="+self.result
+                    self.calculator_flag = 2
+                elif txt == "/" or txt == "*" or txt == "-" or txt == "+" :  # 如果是符号,就运算
+                    self.num_count = 0
+                    if self.calculator_flag == 0:#无运算符
+                        if len(self.str) == 0: #开头不能为运算符
+                            return
+                        self.calculator_flag = 1
+                        self.str +=  txt
+                    elif self.calculator_flag == 1 :     #有运算符
+                        str_tmp = self.str[-1]
+                        if  str_tmp == "/" or str_tmp == "*" or str_tmp == "-" or str_tmp == "+" : #最后一个是运算符
+                            self.str = self.str[:-1]+txt
+                            
+                        elif str_tmp == ".": #最后一个是.,去除再运算
+                            self.str = self.str[0:-1]
+                            self.result = self.calculator_eval(self.str)
+                            if self.result == -1:
+                                return
+                            self.str = self.result+txt
+                        else :
+                            self.result = self.calculator_eval(self.str)
+                            if self.result == -1:
+                                return
+                            self.str = self.result+txt
+                    elif self.calculator_flag == 2 : #已经运算了一次
+                        self.str = self.result + txt
+                        self.calculator_flag = 1
+                elif txt == ".":
+                    if self.num_count >=20:
+                        return
+                    self.num_count += 1 
+                    str_tmp = self.str[-1]
+                    if str_tmp == "." :#最后一个是. 不再添加
+                        pass
+                    elif str_tmp == "/" or str_tmp == "*" or str_tmp == "-" or str_tmp == "+": #最后一个是符号 前面加一个0
+                        self.str = self.str + "0"+ txt
+                    else :
+                        self.str+=txt 
+                elif txt:#数字
+                    if self.num_count >=20:
+                        return
+                    self.num_count += 1 
+                    #calculator_label.add_text(txt)  # 如果不是回车键,那么就将当前数字显示到文本框
+                    self.str+=txt
+                    if self.calculator_flag == 2 :
+                        self.str=txt
+                        self.calculator_flag = 0 
+                calculator_label.set_text(self.str)
+            except Exception as e:
+                usys.print_exception(e)
+                e_tmp = "{}".format(e)
+                if e_tmp.find("divide by zero") != -1 :
+                    calculator_label.set_text("0不能为除数")
+                    self.str = ""
+                    self.calculator_flag = 0
+                else :
+                    EventMesh.txt_log("calculator:{} {} {}".format(self.calculator_flag,self.str,txt))
+                    calculator_label.set_text("运算异常")
+                    self.str = ""
+                    self.calculator_flag = 0
+                #print("ui_queue_thread:ERROR:{}".format(e))
+            
+            print("calculator_clicked:flag:{} str{} ".format(self.calculator_flag,self.str)) 
+         
+
+
+    def lcd_on(self):
+        if self.timer_cb != 0:
+            self.timer_cb = 0
+            #self.timer.start(1000,1,self.refresh_line) 
+    
+    def lcd_off(self):
+        self.timer_cb = 1
+        self.timer.stop() 
+
+
+    def done_return(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+    def btn1_release(self):
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+    def btn8_press(self):
+        EventMesh.publish("watch_top_show")
+        EventMesh.publish("load_screen", {"screen": "main_menu"})  
+
index 0a2f863..b61b15a 100644 (file)
@@ -94,6 +94,7 @@ def main_init():
     ui.add_screen(WechatScreen()) 
     from alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen
     from ui_health import HealthScreen
+    from calculator import calculatorScreen
     ui.add_screen(ClkListScreen()) 
     ui.add_screen(_ui.CountdownEndScreen()) 
     ui.add_screen(NewEditClk()) 
@@ -116,6 +117,7 @@ def main_init():
     ui.add_screen(_ui_setting.PhoneringScreen()) 
     ui.add_screen(_ui_setting.totalvolumeScreen()) 
     ui.add_screen(_ui_setting.PoweroffConfirmScreen()) 
+    ui.add_screen(_ui_setting.RestartScreen())
     ui.add_screen(_ui.DialingScreen()) 
     ui.add_screen(_ui.CallLogScreen()) 
     ui.add_screen(_ui.UIFINDScreen())
@@ -145,7 +147,7 @@ def main_init():
     ui.add_screen(_ui.RemoveMessageScreen())
     ui.add_screen(_ui.keyboardScreen())
     ui.add_screen(_ui.classMgrPopupScreen())
-    ui.add_screen(_ui.calculatorScreen())
+    ui.add_screen(calculatorScreen())
     ui.add_screen(_ui.cameraScreen())
     ui.add_screen(_ui.cameraalbumScreen())
     ui.add_screen(_ui.cameraVdieoScreen())
index 3c3345b..1e0aeca 100644 (file)
@@ -23,6 +23,7 @@ import audio
 from machine import I2C
 from Gsensor import SC7A20
 import pm
+import ure
 try :
     from Hsensor import GH3018
 except Exception as e:
@@ -1802,8 +1803,9 @@ class LocationManager(Abstract):
         self.location_thread_id  = 0
         self.location_queue = Queue(100)
         self.lpm_fd = None
-        #quecgnss.init()
-        #quecgnss.gnssEnable(0)
+        self.start_agps = 0
+        quecgnss.init()
+        quecgnss.gnssEnable(0)
     @staticmethod
     def get_date():
         return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
@@ -1813,20 +1815,20 @@ class LocationManager(Abstract):
         return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])
 
     def post_processor_after_instantiation(self):
-        _gps_cfg = {
-            "UARTn": UART.UART1,
-            "buadrate": 115200,
-            "databits": 8,
-            "parity": 0,
-            "stopbits": 1,
-            "flowctl": 0,
-            "PowerPin": Pin.GPIO2,
-            "StandbyPin": Pin.GPIO3,
-            "BackupPin": None,
-            "gps_mode": 0x01,
-        }
-        self.gps = GPS(**_gps_cfg)
-        self.gps.power_switch(0)#关闭GPS
+        # _gps_cfg = {
+        #     "UARTn": UART.UART1,
+        #     "buadrate": 115200,
+        #     "databits": 8,
+        #     "parity": 0,
+        #     "stopbits": 1,
+        #     "flowctl": 0,
+        #     "PowerPin": Pin.GPIO2,
+        #     "StandbyPin": Pin.GPIO3,
+        #     "BackupPin": None,
+        #     "gps_mode": 0x01,
+        # }
+        # self.gps = GPS(**_gps_cfg)
+        # self.gps.power_switch(0)#关闭GPS
         EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)
         EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
         EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)
@@ -1851,6 +1853,7 @@ class LocationManager(Abstract):
             return
         self.location_thread_id  = _thread.start_new_thread(self.location_thread, ())
         self.location_flag = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
         #self.gps_open(event, msg)
 
 
@@ -1865,11 +1868,13 @@ class LocationManager(Abstract):
         self.location_flag = 1
         #self.gps_open(event, msg)
         self.location_type = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
  
 
     def close_location(self, event, msg):
         self.location_flag = 0
         self.location_type = 0
+        self.timer_read_GPS_info.stop()
 
         
 
@@ -1894,8 +1899,8 @@ class LocationManager(Abstract):
     def gps_open(self, event, msg):
         #print("publish:gps_open")
         #quecgnss.init()
-        quecgnss.gnssEnable(1)
-        self.gps.__gps_nmea_data_clean()
+        quecgnss.gnssEnable(2)
+        #self.gps.__gps_nmea_data_clean()
     def gps_close(self, event, msg):
         quecgnss.gnssEnable(0)
     def location_timer(self, *args, **kwargs):
@@ -2009,7 +2014,30 @@ class LocationManager(Abstract):
             else :
                 break
 
-
+    def GxGGA_latitude(self, gga_data):
+        """Parse latitude from GGA"""
+        if gga_data:
+            latitude_re = ure.search(r",[0-9]+\.[0-9]+,[NS],", gga_data)
+            if latitude_re:
+                latitude = latitude_re.group(0)[1:-3]
+                return str(float(latitude[:2]) + float(latitude[2:]) / 60)
+        return ""
+    def GxGGA_longitude(self, gga_data):
+        """Parse longitude from GGA"""
+        if gga_data:
+            longitude_re = ure.search(r",[0-9]+\.[0-9]+,[EW],", gga_data)
+            if longitude_re:
+                longitude = longitude_re.group(0)[1:-3]
+                return str(float(longitude[:3]) + float(longitude[3:]) / 60)
+        return ""
+
+    def GxGGA_altitude(self, gga_data):
+        """Parse altitude from GGA"""
+        if gga_data:
+            altitude_re = ure.search(r",-*[0-9]+\.[0-9]+,M,", gga_data)
+            if altitude_re:
+                return altitude_re.group(0)[1:-3]
+        return ""
     def location_thread(self):
         
         self.wifi_data = []
@@ -2017,22 +2045,27 @@ class LocationManager(Abstract):
         self.cell_data = []
         gnss_r_data = []
         self.GSV_sig_ok_count = 0
+        self.GSV_sig_very_ok_count = 0
         self.GGA_count = 0
         self.RMC_A_count = 0
+        # if self.start_agps == 1: #开启agps
+        #     self.start_agps = 0
+        #     quecgnss.configSet(2,1)
         if self.lpm_fd == None:
             self.lpm_fd = pm.create_wakelock("test_lock", len("test_lock"))
         pm.wakelock_lock(self.lpm_fd)
         print("location_thread:1")
         EventMesh.publish(constants.EVENT.GPSOPEN)
         print("location_thread:2")
-        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
-        
+        #self.timer_read_GPS_info.start(1000, 1, self.location_timer)
+        print("location_thread:3")
         #utime.sleep_ms(1000)
         self.location_timer_count = 0
         #quecgnss.read(4096)#去掉第一次错误数据
         #EventMesh.txt_log("START_LOCATION")
         # pm.autosleep(0)#唤醒
         # pm.sclkEx_set(0, 1, 5)
+        GSV_dict= {}
         while self.location_flag == 1:
             try :   
                 
@@ -2042,94 +2075,70 @@ class LocationManager(Abstract):
                 # if self.location_check_data_timer_count >= 3:
                 #     pm.autosleep(0)#唤醒
                 #     pm.sclkEx_set(0, 1, 5)
-                if self.location_check_data_timer_count >= 5 :#5秒查一次基站数据和wifi数据
+                if self.location_check_data_timer_count >= 1 :#3秒查一次基站数据和wifi数据
                     self.location_check_data_timer_count = 0
                     #print(self.location_timer_count)
-                    #GSV_dict= {}
+                    GSV_dict= {}
                     
                     #检查GNSS数据
                     if ( self.gps_data == {} or self.location_type == 1) and quecgnss.get_state() == 2:
-                        
-                        self.gps.__gps_nmea_data_clean()
-                        #gnss_r_data = [0,1]
-                        gnss_r_data = quecgnss.read(4096)
-                        #EventMesh.txt_log("gps Datalen:{}".format(gnss_r_data[0]))
-                        print("location gnss_r_data:len{}\n{}".format(gnss_r_data[0],gnss_r_data[1].decode()))
-                        #print("gnss_r_data len:{}".format(gnss_r_data[0]))
-                        if gnss_r_data[0] > 0 : #有数据
-                            tmp_ok_count = 0
-                            gsv_data = gnss_r_data[1].split("GSV")
-                                      
-                            if len(gsv_data) >= 2 :  
-                                gsv_data = gsv_data[1:]
-                                for i in range(len(gsv_data)) :
-                                    gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                                    gsv_tmp = gsv_data[i].split(",")
-                                    if len(gsv_tmp) < 7 :
-                                        break
-                                     
-                                    gsv_tmp = gsv_tmp[4:]
-                                    #print("gsv_tmp:{}".format(gsv_tmp))
-                                    for i in range(len(gsv_tmp)) :
-                                        if i % 4 == 0:
-                                            #GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                                            try:
-                                                #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
-                                                if gsv_tmp[i+3] != "" :
-                                                    if int(gsv_tmp[i+3])>=20:
-                                                        tmp_ok_count +=1    
-                                            except Exception as e:
-                                                usys.print_exception(e)
-                                            #print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                                        if len(gsv_tmp)-i < 4:
-                                            break 
-                                
-                                if(tmp_ok_count > self.GSV_sig_ok_count ):
-                                    self.GSV_sig_ok_count = tmp_ok_count
-                            
 
-                            # if len(match_gga_data) > 8:
-                            #     #print(match_gga_data)
-                            #     if(match_gga_data[7] ):
-                            #         gga_count_tmp = int(match_gga_data[7]) #可用卫星
-                            #         if(gga_count_tmp > self.GGA_count):
-                            #             self.GGA_count = gga_count_tmp
-                            print("GGA_count:{} GSV_sig_ok_coun:{} ".format(self.GGA_count,self.GSV_sig_ok_count))
+                        pass
+                        tmp_ok_count = 0
+                        tmp_very_ok_count = 0
+                        gsv_data = quecgnss.get_gsv()
+                        rmc_data = quecgnss.get_rmc()
+                        gga_data = quecgnss.get_gga()
+                        vtg_data = quecgnss.get_vtg()
+                        print("gsv:{}".format(quecgnss.get_gsv()))
+                        print("gga:{}".format(quecgnss.get_gga()))
+                        print("rmc:{}".format(quecgnss.get_rmc()))
+                        print("vtg:{}".format(quecgnss.get_vtg())) 
+                        for i in range(len(gsv_data)) :
                             
-                            match_rmc_data = self.match.GxRMC(gnss_r_data[1]).split(",")
-                             
-                            #print("match_rmc_data:\n{}".format(match_rmc_data))
-                            if len (match_rmc_data)>3: #有rmc数据
-                                if match_rmc_data[2] == 'A':
-                                    
-                                    if  self.gps.__check_gps_valid(gnss_r_data[1].decode()): #数据齐全 :
-                                        
-                                        #print("hhhhhh:{}\n\n".format(self.gps.__gsv_data))
-                                        match_vtg_data = self.gps.__vtg_data.split(",")#self.match.GxVTG(gnss_r_data[1]).split(",")
-                                        match_gga_data = self.gps.__gga_data.split(",")#self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        #match_gga_data = self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        
-                                        EventMesh.txt_log("GGA:{}".format(match_gga_data))
-                                        # EventMesh.txt_log("VTG:{}".format(match_vtg_data))
-                                        # EventMesh.txt_log("RMC:{}".format(match_rmc_data)) 
-                                        # EventMesh.txt_log("timer:{} ok_count:{} count:{}\n".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))   
-                                        print("LOCATION_ok :time:{}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n".format(self.location_timer_count))
+                            if i % 2 == 0:
+                                if i+1 >= len(gsv_data) :
+                                    print("gsv_data num error!!")
+                                    break
+                                GSV_dict[gsv_data[i]] = gsv_data[i+1]
+                                #print("type:gsv_data{}".format(type(gsv_data[i+1])))
+                                try:
+                                    #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
+                                    if gsv_data[i+1] :
+                                        if (gsv_data[i+1])>=20:
+                                            tmp_ok_count +=1   
+                                        if (gsv_data[i+1])>=30:
+                                            tmp_very_ok_count +=1  
+                                            
+                                except Exception as e:
+                                    usys.print_exception(e)
+                                
+                        if(tmp_ok_count > self.GSV_sig_ok_count ):
+                            self.GSV_sig_ok_count = tmp_ok_count
+                        if(tmp_very_ok_count > self.GSV_sig_very_ok_count ):
+                            self.GSV_sig_very_ok_count = tmp_very_ok_count
+                        match_rmc_data = rmc_data.split(",")
+                        if len (match_rmc_data)>3: #有rmc数据
+                                 if match_rmc_data[2] == 'A':    
+                                    match_gga_data = gga_data.split(",")
+                                    if len(match_gga_data) >4: #数据全
+                                        match_vtg_data = vtg_data.split(",")
                                         gps_date = "%s,%s"%(match_rmc_data[9],match_rmc_data[1][:6])#日期
-                                        gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
+                                        #gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
                                         latitude = "0,N" #纬度
-                                        latitude_tmp = str(gps_data_tmp[1]).split(".")
+                                        latitude_tmp = str(self.GxGGA_latitude(gga_data)).split(".")
                                         if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
                                             latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
                                             latitude = "%s,%s"%(latitude,match_rmc_data[4] )
 
                                         longitude = "0,E"#经度
-                                        longitude_tmp = str(gps_data_tmp[0]).split(".")
+                                        longitude_tmp = str(self.GxGGA_longitude(gga_data)).split(".")
                                         if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
                                             longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
                                             longitude = "%s,%s"%(longitude,match_rmc_data[6] ) #match_rmc_data[6] + str(gnss_r_data[1])
                                         
                                         high = "0"#高度
-                                        high = str(gps_data_tmp[2])
+                                        high = str(self.GxGGA_altitude(gga_data))
                                         number = "0"#可用卫星
                                         precision = "5.8"#精度
                                         if len(match_gga_data)>5 :
@@ -2154,11 +2163,7 @@ class LocationManager(Abstract):
                                             "date":  gps_date,
                                             "precision":  precision
                                         }
-                                    else :
-                                        EventMesh.txt_log("gps数据不全")
-                        else :
-                            EventMesh.txt_log("gps 无数据")
-
+# ***********************************************************************************
 
 
                 #检查wifi数据
@@ -2176,9 +2181,8 @@ class LocationManager(Abstract):
 
                 if self.location_type == 1: #测试模式
                     self.location_timer_count = 0
-                    if len(gnss_r_data) >= 1:
-                        if gnss_r_data[0] > 0:
-                            EventMesh.publish("PUSH_LOCATION_DATA", [gnss_r_data,self.wifi_data,self.cell_data]) 
+                    
+                    EventMesh.publish("PUSH_LOCATION_DATA", [[self.gps_data,GSV_dict],self.wifi_data,self.cell_data]) 
                     if self.gps_data  != {} : #发送数据 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
                         self.location_queue.put(constants.PROTOCOL.UD_SEND)
@@ -2188,10 +2192,13 @@ class LocationManager(Abstract):
                 elif self.location_type == 0: #正常模式     
                     if self.gps_data  != {} or self.location_timer_count > 100: #or( self.wifi_data != [] and self.cell_data != []): 
                         if self.location_queue.empty() == False:#有定位队列
-                            EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
-                        upload_time = EventMesh.publish("get_upload_data")
-                        
-                            
+                            EventMesh.txt_log("LOCATION timer:{} ok:{} very_ok:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GSV_sig_very_ok_count))   
+                            #EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
+                        if self.gps_data  == {}: #定位超时,且信噪比多个大于30,下次启动agps
+                            if self.GSV_sig_very_ok_count > 3:#3个超30以上
+                                self.start_agps = 1
+                                EventMesh.txt_log("open agps:{}".format(GSV_dict))
+                        #upload_time = EventMesh.publish("get_upload_data")    
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #if upload_time > 200  : 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
@@ -2207,7 +2214,7 @@ class LocationManager(Abstract):
                         
                     if self.GSV_sig_ok_count <= 1 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 20: #超过40秒且信号大于30的不足3个
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位   
-                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} count:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))
+                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #break
                 # if self.location_type != 1 and self.location_timer_count >= 60*4 : #4分钟关闭
@@ -2226,9 +2233,11 @@ class LocationManager(Abstract):
                 #self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                 EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 
             utime.sleep_ms(500)
-        self.timer_read_GPS_info.stop()
-        self.gps.power_switch(0)
+
+        #self.timer_read_GPS_info.stop()
+        #self.gps.power_switch(0)
         wifiScan.control(0)
+        EventMesh.publish(constants.EVENT.GPSCLOSE)
         # if EventMesh.publish("get_lcd_state" ) == 0:#休眠的时候,恢复休眠
         #     pm.autosleep(1)
         #     pm.sclkEx_set(1, 1, 5)
index 9a0a127..83716e6 100644 (file)
@@ -172,7 +172,7 @@ class SockManager(Abstract):
             self.publish_timer.start(1000, 0, self.publish_timer_cb)
             
         except Exception as e:
-            usys.print_exception(e)
+            #usys.print_exception(e)
             self.run_flag = False
         else:
             self.run_flag = True
@@ -283,8 +283,8 @@ class SockManager(Abstract):
                 
                 data = b''
             except Exception as e:
-                print("TCP:ERROR:recv:")
-                usys.print_exception(e)
+                #print("TCP:ERROR:recv:")
+                #usys.print_exception(e)
                 self.run_flag = False
                 self.reconnect()
                 
@@ -849,6 +849,12 @@ class REMIND_ProtoCol(ProtoCol):
         # EventMesh.publish("add_alarm",[0,msg_tmp])
         EventMesh.publish(constants.PROTOCOL.REMIND_SEND)
 
+
+
+
+
+
+
 class HRSTART_ProtoCol(ProtoCol):
     """心率频率数据"""
     TYPE = "hrtstart"
@@ -1559,7 +1565,7 @@ class ProtoColResolver(object):
     def handler(self, data):
         # 这里接收数据
         
-        print("handler -> {}".format(data))
+        # print("handler -> {}".format(data))
         # if data.startswith('Init;'):
         #     data = data[5:]
         #     EventMesh.publish(constants.EVENT.SET_KEY, {"value": ujson.loads(data)['KEY']})
index 71ff5a8..a6d5882 100644 (file)
@@ -22,6 +22,7 @@ import _thread
 from queue import Queue
 import camera
 from machine import RTC
+
 LCD_X = 128
 LCD_Y = 128
 def audio_cb(event):
@@ -93,6 +94,10 @@ style_font_youyuan_20_red.set_text_color(lv.color_make(0xff, 0x00, 0x00))
 style_font_youyuan_20_red.set_text_font(lv.K01_font_16_ALL)
 #style_font_youyuan_20_red.set_text_font_v2("font_28.bin",28,0)
 
+style_font_youyuan_20_gray = lv.style_t()
+style_font_youyuan_20_gray.init()
+style_font_youyuan_20_gray.set_text_color(lv.color_make(128, 128, 128))
+style_font_youyuan_20_gray.set_text_font(lv.K01_font_16_ALL)
 style_img = lv.style_t()
 style_img.init()
 style_img.set_img_opa(255)
@@ -174,7 +179,16 @@ style_contact_btn_pressed.set_border_opa(255)
 style_contact_btn_pressed.set_text_color(lv.color_make(0x00,0x00,0x00))
 
 
-
+style_screen_btn_1_main_main_default = lv.style_t()
+style_screen_btn_1_main_main_default.init()
+style_screen_btn_1_main_main_default.set_radius(5)
+style_screen_btn_1_main_main_default.set_bg_color(lv.color_make(0x64,0x64,0x64))
+style_screen_btn_1_main_main_default.set_bg_grad_color(lv.color_make(0x64,0x64,0x64))
+style_screen_btn_1_main_main_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+style_screen_btn_1_main_main_default.set_bg_opa(255)
+style_screen_btn_1_main_main_default.set_border_color(lv.color_make(0x64,0x64,0x64))
+style_screen_btn_1_main_main_default.set_border_width(0)
+style_screen_btn_1_main_main_default.set_border_opa(255)
 
 style_circle = lv.style_t()
 style_circle.init()
@@ -982,6 +996,7 @@ class DialingScreen(Screen):
     
     def __init__(self):
         super().__init__()
+        self.timer = osTimer()
         self.meta = None
         self.meta_type = "popup"
         self.call_log = {}
@@ -1037,6 +1052,17 @@ class DialingScreen(Screen):
         EventMesh.publish("set_UI_high_priority", 0)
         EventMesh.publish("set_hangup_mode", 1)
         voiceCall.callEnd()
+        self.timer.start(5000,0,self.call_end)
+
+    def Close(self):
+        self.timer.stop()
+
+    def call_end(self,*argc):
+        print("call_end!!!!!!!!")
+        call_state = EventMesh.publish("get_call_state")#设置关机时间
+        if call_state != None:
+            if call_state == 0:#未打通
+                EventMesh.publish("load_screen", {"screen": "main_menu"})  
 
     def done_return(self):
         pass
@@ -2149,7 +2175,7 @@ class PopupScreen(Screen):
                     self.sms_detail_list_dict[i]["_btn_label5"].set_size(LCD_X-15, 20)
                     self.sms_detail_list_dict[i]["_btn_label5"].set_text(title1)
                     self.sms_detail_list_dict[i]["_btn_label5"].set_long_mode(lv.label.LONG.DOT)
-                    # self.sms_detail_list_dict[i]["_btn_label5"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+                    self.sms_detail_list_dict[i]["_btn_label5"].add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
                     
                     self.sms_detail_list_dict[i]["msg_btn"].clear_flag(lv.obj.FLAG.HIDDEN)
                     #if msg == 1:
@@ -2642,6 +2668,7 @@ class ToolboxScreen(Screen):
 
     def __init__(self):
         super().__init__()
+        self.is_sliding = 0
         self.meta = None
 
     def initialization(self):
@@ -2649,6 +2676,7 @@ class ToolboxScreen(Screen):
             toolbox_countdown_img,toolbox_stopwatch_img
         if toolbox_screen == None:
             tool_set_y = 5
+            tool_set_y_offset = 40
             toolbox_screen = lv.obj()
             print("toolbox_screen")
             toolbox_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
@@ -2668,15 +2696,22 @@ class ToolboxScreen(Screen):
             # toolbox_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
             toolbox_cont = lv.obj(toolbox_screen)
-            toolbox_cont.set_pos(0, 0)
-            toolbox_cont.set_size(128, 128)
+            toolbox_cont.set_pos(0, 5)
+            toolbox_cont.set_size(128, 123)
             toolbox_cont.add_style(toolbox_cont_style,lv.PART.MAIN | lv.STATE.DEFAULT)
 
+            toolbox_step_img_btn_1 = lv.btn(toolbox_cont)
+            toolbox_step_img_btn_1.set_pos(int(0),int(tool_set_y-5))
+            toolbox_step_img_btn_1.set_size(120,35)
+            toolbox_step_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+            toolbox_step_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+            toolbox_step_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
 
             toolbox_step_img = lv.img(toolbox_cont)
             toolbox_step_img.set_pos(5, tool_set_y)
             toolbox_step_img.set_size(25, 25)
-            toolbox_step_img.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_step_img.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_step_img.set_src("U:/static/IMAGE_SECMENU_STEP.png")
             toolbox_step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
@@ -2685,16 +2720,23 @@ class ToolboxScreen(Screen):
             toolbox_step_img_label.set_size(128-35, 35)
             toolbox_step_img_label.set_text("计步")
             toolbox_step_img_label.set_long_mode(lv.label.LONG.WRAP)
-            toolbox_step_img_label.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_step_img_label.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_step_img_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
             toolbox_step_img_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-            tool_set_y+=35
+            tool_set_y+=tool_set_y_offset
+
+            toolbox_weather_img_btn_1 = lv.btn(toolbox_cont)
+            toolbox_weather_img_btn_1.set_pos(int(0),int(tool_set_y-5))
+            toolbox_weather_img_btn_1.set_size(120,35)
+            toolbox_weather_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+            toolbox_weather_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+            toolbox_weather_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
 
             toolbox_weather_img = lv.img(toolbox_cont)
             toolbox_weather_img.set_pos(5, tool_set_y)
             toolbox_weather_img.set_size(25, 25)
-            toolbox_weather_img.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_weather_img.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_weather_img.set_src("U:/static/IMAGE_SECMENU_WEATHER.png")
             toolbox_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
@@ -2703,16 +2745,24 @@ class ToolboxScreen(Screen):
             toolbox_weather_img_label.set_size(128-35, 35)
             toolbox_weather_img_label.set_text("天气")
             toolbox_weather_img_label.set_long_mode(lv.label.LONG.WRAP)
-            toolbox_weather_img_label.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_weather_img_label.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_weather_img_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
             toolbox_weather_img_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 
-            tool_set_y+=35
+            tool_set_y+=tool_set_y_offset
+
+            toolbox_alarm_img_btn_1 = lv.btn(toolbox_cont)
+            toolbox_alarm_img_btn_1.set_pos(int(0),int(tool_set_y-5))
+            toolbox_alarm_img_btn_1.set_size(120,35)
+            toolbox_alarm_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+            toolbox_alarm_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+            toolbox_alarm_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
             toolbox_alarm_img = lv.img(toolbox_cont)
             toolbox_alarm_img.set_pos(5, tool_set_y)
             toolbox_alarm_img.set_size(25, 25)
-            toolbox_alarm_img.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_alarm_img.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_alarm_img.set_src("U:/static/IMAGE_SECMENU_ALARM.png")
             toolbox_alarm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
@@ -2721,7 +2771,7 @@ class ToolboxScreen(Screen):
             toolbox_alarm_img_label.set_size(128-35, 35)
             toolbox_alarm_img_label.set_text("闹钟")
             toolbox_alarm_img_label.set_long_mode(lv.label.LONG.WRAP)
-            toolbox_alarm_img_label.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_alarm_img_label.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_alarm_img_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
             toolbox_alarm_img_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
@@ -2734,11 +2784,19 @@ class ToolboxScreen(Screen):
             # toolbox_sms_img.set_src("U:/static/tool/sms_setting.png")
             # toolbox_sms_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-            tool_set_y+=35
+            tool_set_y+=tool_set_y_offset
+
+            toolbox_countdown_img_btn_1 = lv.btn(toolbox_cont)
+            toolbox_countdown_img_btn_1.set_pos(int(0),int(tool_set_y-5))
+            toolbox_countdown_img_btn_1.set_size(120,35)
+            toolbox_countdown_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+            toolbox_countdown_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+            toolbox_countdown_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
             toolbox_countdown_img = lv.img(toolbox_cont)
             toolbox_countdown_img.set_pos(5, tool_set_y)
             toolbox_countdown_img.set_size(25, 25)
-            toolbox_countdown_img.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_countdown_img.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_countdown_img.set_src("U:/static/IMAGE_SECMENU_COUNTDOWN.png")
             toolbox_countdown_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
@@ -2747,16 +2805,23 @@ class ToolboxScreen(Screen):
             toolbox_countdown_img_label.set_size(128-35, 35)
             toolbox_countdown_img_label.set_text("倒计时")
             toolbox_countdown_img_label.set_long_mode(lv.label.LONG.WRAP)
-            toolbox_countdown_img_label.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_countdown_img_label.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_countdown_img_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
             toolbox_countdown_img_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 
-            tool_set_y+=35
+            tool_set_y+=tool_set_y_offset
+            toolbox_stopwatch_img_btn_1 = lv.btn(toolbox_cont)
+            toolbox_stopwatch_img_btn_1.set_pos(int(0),int(tool_set_y-5))
+            toolbox_stopwatch_img_btn_1.set_size(120,35)
+            toolbox_stopwatch_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+            toolbox_stopwatch_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+            toolbox_stopwatch_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
             toolbox_stopwatch_img = lv.img(toolbox_cont)
             toolbox_stopwatch_img.set_pos(5, tool_set_y)
             toolbox_stopwatch_img.set_size(25, 25)
-            toolbox_stopwatch_img.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_stopwatch_img.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_stopwatch_img.set_src("U:/static/IMAGE_SECMENU_STOPWATCH.png")
             toolbox_stopwatch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
@@ -2774,27 +2839,65 @@ class ToolboxScreen(Screen):
             toolbox_stopwatch_img_label_btn.set_size(128, 45)
             toolbox_stopwatch_img_label_btn.set_text(" ")
             toolbox_stopwatch_img_label_btn.set_long_mode(lv.label.LONG.WRAP)
-            toolbox_stopwatch_img_label_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+            # toolbox_stopwatch_img_label_btn.add_flag(lv.obj.FLAG.CLICKABLE)
             toolbox_stopwatch_img_label_btn.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 
-            toolbox_step_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "step"})), lv.EVENT.CLICKED, None)
-            toolbox_weather_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "weather"})), lv.EVENT.CLICKED, None)
-            toolbox_alarm_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "clk_list"})), lv.EVENT.CLICKED, None)
+            toolbox_step_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "step")), lv.EVENT.CLICKED, None)
+            toolbox_weather_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "weather")), lv.EVENT.CLICKED, None)
+            toolbox_alarm_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "clk_list")), lv.EVENT.CLICKED, None)
             # toolbox_sms_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "popup"})), lv.EVENT.CLICKED, None)
-            toolbox_countdown_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "countdown"})), lv.EVENT.CLICKED, None)
-            toolbox_stopwatch_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "stopwatch"})), lv.EVENT.CLICKED, None)
+            toolbox_countdown_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e,"countdown")), lv.EVENT.CLICKED, None)
+            toolbox_stopwatch_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "stopwatch")), lv.EVENT.CLICKED, None)
             
-            toolbox_step_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "step"})), lv.EVENT.CLICKED, None)
-            toolbox_weather_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "weather"})), lv.EVENT.CLICKED, None)
-            toolbox_alarm_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "clk_list"})), lv.EVENT.CLICKED, None)
-            # toolbox_sms_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "popup"})), lv.EVENT.CLICKED, None)
-            toolbox_countdown_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "countdown"})), lv.EVENT.CLICKED, None)
-            toolbox_stopwatch_img_label_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "stopwatch"})), lv.EVENT.CLICKED, None)
+            # toolbox_step_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "step")), lv.EVENT.CLICKED, None)
+            # toolbox_weather_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "weather")), lv.EVENT.CLICKED, None)
+            # toolbox_alarm_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "clk_list")), lv.EVENT.CLICKED, None)
+            # # toolbox_sms_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "popup"})), lv.EVENT.CLICKED, None)
+            # toolbox_countdown_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "countdown")), lv.EVENT.CLICKED, None)
+            # toolbox_stopwatch_img_label_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "stopwatch")), lv.EVENT.CLICKED, None)
             
 
+            toolbox_step_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "step")), lv.EVENT.PRESSING, None)
+            toolbox_weather_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "weather")), lv.EVENT.PRESSING, None)
+            toolbox_alarm_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "clk_list")), lv.EVENT.PRESSING, None)
+            # toolbox_sms_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "popup"})), lv.EVENT.CLICKED, None)
+            toolbox_countdown_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "countdown")), lv.EVENT.PRESSING, None)
+            toolbox_stopwatch_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "stopwatch")), lv.EVENT.PRESSING, None)
+            
+            # toolbox_step_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e,"step")), lv.EVENT.PRESSING, None)
+            # toolbox_weather_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "weather")), lv.EVENT.PRESSING, None)
+            # toolbox_alarm_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "clk_list")), lv.EVENT.PRESSING, None)
+            # # toolbox_sms_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "popup"})), lv.EVENT.CLICKED, None)
+            # toolbox_countdown_img_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "countdown")), lv.EVENT.PRESSING, None)
+            # toolbox_stopwatch_img_label_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_tool_cb(e, "stopwatch")), lv.EVENT.PRESSING, None)
+            
             self.meta = toolbox_screen
 
+    def ui_tool_cb(self, e, msg):
+        code = e.get_code()
+        EventMesh.publish("publish_message_event_ui",{"func":self.ui_tool_cb_do,"data":[code,msg]})  
+    def ui_tool_cb_do(self, data):
+        #code = e.get_code()
+
+        code = data[0]
+        msg = data[1]
+
+        #print("code!!!!!!!!",code,msg)
+        if code == lv.EVENT.PRESSING:
+            #print("PRESSING")
+            self.is_sliding += 1
+
+        elif  code == lv.EVENT.CLICKED:
+            #utime.sleep_ms(10)
+            print("1self.is_sliding",self.is_sliding)
+            if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件
+                EventMesh.publish("load_screen", {"screen": "{}".format(msg)})
+                print("2self.is_sliding",self.is_sliding)
+                
+            self.is_sliding =0
+
+
     def done_return(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
 
@@ -2805,6 +2908,23 @@ class ToolboxScreen(Screen):
         EventMesh.publish("watch_top_show")
         EventMesh.publish("load_screen", {"screen": "main_menu"})
 
+    def done_bottom_to_top(self):
+        #print("done_bottom_to_top")
+        self.is_sliding = 0
+        pass
+
+    def done_top_to_bottom(self):
+        #print("done_top_to_bottom")
+        self.is_sliding = 0
+        pass
+    def done_left_to_right(self):
+        #print("done_left_to_right")
+        self.is_sliding = 0
+        pass
+    def done_right_to_left(self):
+        #print("done_right_to_left")
+        self.is_sliding = 0
+        pass  
 
 incoming_call_screen = None
 incoming_call_img = None
@@ -3847,8 +3967,13 @@ class WeatherScreen(Screen):
 
                     temp = self.weather_data[4]
                     if temp == None:
+                        no_weather_degree.set_pos(88, 15)
                         weather_tem_label.set_text("_ _")
                     else:
+                        if len(temp) > 2:
+                            no_weather_degree.set_pos(100, 15)
+                        else:
+                            no_weather_degree.set_pos(88, 15)
                         weather_tem_label.set_text("{}".format(temp))
 
                     date = self.weather_data[0]
@@ -3866,17 +3991,17 @@ class WeatherScreen(Screen):
                         no_connect_label.set_text("--")
                 else:#已联网未获取到天气数据
                     # no_connect_label.set_text(" ")
+                    no_weather_degree.set_pos(88, 15)
                     weather_detail_label.set_text("-/-")
                     weather_tem_label.set_text("_ _")
-
+                    no_weather_degree.set_pos(88, 15)
                     no_connect_label.set_text("未获取网络数据")
                     no_connect_label1.set_text("请稍候重试")
 
             else:
-                
                 weather_detail_label.set_text("-/-")
                 weather_tem_label.set_text("_ _")
-                
+                no_weather_degree.set_pos(88, 15)
                 no_weather_img.clear_flag(lv.obj.FLAG.HIDDEN)
                 weather_img.add_flag(lv.obj.FLAG.HIDDEN)
                 no_connect_label.set_text("找不到服务器")
@@ -4253,7 +4378,7 @@ class TemperatureScreen(Screen):
 
             temperature_degree_img = lv.img(temperature_screen)
             temperature_degree_img.set_pos(156, 242)
-            temperature_degree_img.set_size(22, 22)
+            temperature_degree_img.set_size(11, 11)
             temperature_degree_img.set_src("U:/static/degree.png")
             temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
@@ -5499,6 +5624,8 @@ class CountdownScreen(Screen):
         print("hour_down:",self.hour)
         self.show_value()
     
+
+    
     def start(self,e):
         global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
             countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
@@ -5752,6 +5879,8 @@ class CountdownEndScreen(Screen):
             countdown_end_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
             countdown_end_label.set_long_mode(lv.label.LONG.WRAP)
             countdown_end_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+            
             self.meta = countdown_end_screen
         self.FIND_timer_count = 0
         EventMesh.publish("close_count_show_info")
@@ -7723,1138 +7852,6 @@ class calendar_Screen(Screen):#日历
 
 
        
-calculator_CALL_MAX_DATA = 16
-
-calculator_line_points = [{"x":0,"y":0},{"x":0,"y":40}]
-calculator_screen = None
-calculator_line = None
-calculator_label = None
-calculator_one = None
-calculator_two = None
-calculator_three = None
-calculator_four = None
-calculator_five = None
-calculator_six = None
-calculator_seven = None
-calculator_eight = None
-calculator_nine = None
-calculator_start = None
-calculator_zero = None
-calculator_hash = None
-calculator_call = None
-calculator_call_btn = None
-calculator_contact = None
-calculator_contact_btn = None
-calculator_delete = None
-calculator_delete_btn = None
-
-class calculatorScreen(Screen):
-    NAME = "calculator"
-
-    def __init__(self):
-
-        super().__init__()
-        self.meta = None
-        self.phone_num = ''
-        self.phone_list = []
-        self.button = 0
-        self.timer = osTimer()
-        self.timer_cb = 0
-        self.count = 0
-        
-    
-
-    def initialization(self):
-        self.phone_num=''
-        self.phone_list = []
-        global calculator_screen ,calculator_line,calculator_label,calculator_one,calculator_two,calculator_three,calculator_four,calculator_five,calculator_six,calculator_seven,calculator_eight,calculator_nine,calculator_start,\
-        calculator_zero,calculator_hash,calculator_call,calculator_call_btn,calculator_contact,calculator_contact_btn,calculator_delete,calculator_delete_btn
-
-        size_x = 36 #按钮大小
-        size_y = 22
-        start_x = 5
-        start_y = 25
-
-        offset_y = 4
-        if calculator_screen == None:
-            calculator_screen = lv.obj()
-            print("phone_screen")
-            calculator_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-            # phone_line = lv.line(phone_screen)
-            # phone_line.set_points(phone_line_points,2)
-            # phone_line.set_pos(125,5)
-            # phone_line.set_size(2,18)
-            # phone_line.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-            # phone_line.add_style(style_line,0)
-            calculator_label_screen = lv.obj(calculator_screen)
-            calculator_label_screen.set_pos(0,0)
-            calculator_label_screen.set_size(128,16)
-            calculator_label_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-            print("phone_screen")
-            calculator_label_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-            calculator_label = lv.label(calculator_label_screen)
-            calculator_label.set_pos(0, 0)
-            calculator_label.set_size(0, 20)
-            calculator_label.set_text(" ")
-            calculator_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-    
-            calculator_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-
-            calculator_one = lv.img(calculator_screen)
-            calculator_one.set_src("U:/static/IMAGE_NUMBER_KEY1_ICON.png")
-            calculator_one.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_one.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_one.set_pos(start_x, start_y)
-            calculator_one.set_size(size_x, size_y)
-
-            calculator_two = lv.img(calculator_screen)
-            calculator_two.set_size(size_x, size_y)
-            calculator_two.set_src("U:/static/IMAGE_NUMBER_KEY2_ICON.png")
-            calculator_two.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_two.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_two.set_pos(start_x+size_x+5*1, start_y)
-
-            calculator_three = lv.img(calculator_screen)
-            calculator_three.set_size(size_x, size_y)
-            calculator_three.set_src("U:/static/IMAGE_NUMBER_KEY3_ICON.png")
-            calculator_three.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_three.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_three.set_pos(start_x+size_x*2+5*2, start_y)
-
-            calculator_four = lv.img(calculator_screen)
-            calculator_four.set_size(size_x, size_y)
-            calculator_four.set_src("U:/static/IMAGE_NUMBER_KEY4_ICON.png")
-            calculator_four.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_four.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_four.set_pos(start_x, start_y+size_y+offset_y)
-
-            calculator_five = lv.img(calculator_screen)
-            calculator_five.set_size(size_x, size_y)
-            calculator_five.set_src("U:/static/IMAGE_NUMBER_KEY5_ICON.png")
-            calculator_five.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_five.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_five.set_pos(start_x+size_x+5*1, start_y+size_y+offset_y)
-
-            calculator_six = lv.img(calculator_screen)
-            calculator_six.set_size(size_x, size_y)
-            calculator_six.set_src("U:/static/IMAGE_NUMBER_KEY6_ICON.png")
-            calculator_six.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_six.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_six.set_pos(start_x+size_x*2+5*2, start_y+size_y+offset_y)
-
-            calculator_seven = lv.img(calculator_screen)
-            calculator_seven.set_size(size_x, size_y)
-            calculator_seven.set_src("U:/static/IMAGE_NUMBER_KEY7_ICON.png")
-            calculator_seven.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_seven.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_seven.set_pos(start_x, start_y+size_y*2+offset_y*2)
-
-            calculator_eight = lv.img(calculator_screen)
-            calculator_eight.set_size(size_x, size_y)
-            calculator_eight.set_src("U:/static/IMAGE_NUMBER_KEY8_ICON.png")
-            calculator_eight.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_eight.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_eight.set_pos(start_x+size_x+5*1, start_y+size_y*2+offset_y*2)
-
-            calculator_nine = lv.img(calculator_screen)
-            calculator_nine.set_size(size_x, size_y)
-            calculator_nine.set_src("U:/static/IMAGE_NUMBER_KEY9_ICON.png")
-            calculator_nine.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_nine.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_nine.set_pos(start_x+size_x*2+5*2, start_y+size_y*2+offset_y*2)
-
-            # phone_start = lv.img(phone_screen)
-            # phone_start.set_size(size_x, size_y)
-            # phone_start.set_src("U:/static/IMAGE_NUMBER_KEYSTAR_ICON.png")
-            # phone_start.add_flag(lv.obj.FLAG.CLICKABLE)
-            # phone_start.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            # phone_start.set_pos(start_x, start_y+size_y*3)
-
-            # calculator_delete = lv.img(calculator_screen)
-            # calculator_delete.set_size(size_x, size_y)
-            # calculator_delete.set_src("U:/static/IMAGE_BUTTON_DELKEY.png")
-            # calculator_delete.add_flag(lv.obj.FLAG.CLICKABLE)
-            # calculator_delete.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            # calculator_delete.set_pos(start_x, start_y+size_y*3+offset_y*3)
-
-            calculator_delete = lv.label(calculator_screen)
-            calculator_delete.set_pos(start_x, start_y+size_y*3+offset_y*3)
-            calculator_delete.set_size(start_x+size_x+5*1-start_x, 128-(start_y+size_y*3+offset_y*3))
-            calculator_delete.set_text("/")
-            calculator_delete.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_delete.set_long_mode(lv.label.LONG.CLIP)
-            calculator_delete.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_delete.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-
-
-
-            calculator_zero = lv.img(calculator_screen)
-            calculator_zero.set_size(size_x, size_y)
-            calculator_zero.set_src("U:/static/IMAGE_NUMBER_KEY0_ICON.png")
-            calculator_zero.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_zero.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_zero.set_pos(start_x+size_x+5*1, start_y+size_y*3+offset_y*3)
-
-            calculator_call = lv.label(calculator_screen)
-            calculator_call.set_pos(start_x+size_x*2+5*2, start_y+size_y*3+offset_y*3)
-            calculator_call.set_size(128-(start_x+size_x*2+5*2), 128-(start_y+size_y*3+offset_y*3))
-            calculator_call.set_text("-")
-            calculator_call.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-            calculator_call.set_long_mode(lv.label.LONG.CLIP)
-            calculator_call.add_flag(lv.obj.FLAG.CLICKABLE)
-            calculator_call.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-            # calculator_call = lv.img(calculator_screen)
-            # calculator_call.set_size(size_x, size_y)
-            # calculator_call.set_src("U:/static/IMAGE_BUTTON_DIAL.png")
-            # calculator_call.add_flag(lv.obj.FLAG.CLICKABLE)
-            # calculator_call.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-            # calculator_call.set_pos(start_x+size_x*2+5*2, start_y+size_y*3+offset_y*3)
-
-
-
-            self.meta = calculator_screen
-
-            calculator_one.add_event_cb(lambda e: EventMesh.callback_wrapper(self.one(e)),
-                                     lv.EVENT.CLICKED, None)
-            calculator_two.add_event_cb(lambda e: EventMesh.callback_wrapper(self.two(e)),
-                                        lv.EVENT.CLICKED, None)
-            calculator_three.add_event_cb(lambda e: EventMesh.callback_wrapper(self.three(e)),
-                                        lv.EVENT.CLICKED, None)
-            calculator_four.add_event_cb(lambda e: EventMesh.callback_wrapper(self.four(e)),
-                                        lv.EVENT.CLICKED, None)
-            calculator_five.add_event_cb(lambda e: EventMesh.callback_wrapper(self.five(e)),
-                                        lv.EVENT.CLICKED, None)
-            calculator_six.add_event_cb(lambda e: EventMesh.callback_wrapper(self.six(e)),
-                                        lv.EVENT.CLICKED, None)
-            calculator_seven.add_event_cb(lambda e: EventMesh.callback_wrapper(self.start(e)),
-                                        lv.EVENT.CLICKED, None)
-            
-            calculator_seven.add_event_cb(lambda e: EventMesh.callback_wrapper(self.pressed_start(e)),
-                                         lv.EVENT.LONG_PRESSED, None)#长按显示+
-            
-            calculator_seven.add_event_cb(lambda e: EventMesh.callback_wrapper(self.endpressed_start(e)),
-                                         lv.EVENT.RELEASED, None)#释放按键
-
-            calculator_eight.add_event_cb(lambda e: EventMesh.callback_wrapper(self.eight(e)),
-                                        lv.EVENT.CLICKED, None)
-            calculator_nine.add_event_cb(lambda e: EventMesh.callback_wrapper(self.start(e)),
-                                         lv.EVENT.CLICKED, None)
-            
-            calculator_nine.add_event_cb(lambda e: EventMesh.callback_wrapper(self.pressed_start(e)),
-                                        lv.EVENT.LONG_PRESSED, None)#长按显示+
-            
-            calculator_nine.add_event_cb(lambda e: EventMesh.callback_wrapper(self.nine_endpressed_start(e)),
-                                         lv.EVENT.RELEASED, None)#释放按键
-
-            # phone_zero.add_event_cb(lambda e: EventMesh.callback_wrapper(self.zero(e)),
-            #                             lv.EVENT.CLICKED, None)
-            
-            calculator_zero.add_event_cb(lambda e: EventMesh.callback_wrapper(self.start(e)),
-                                         lv.EVENT.CLICKED, None)#短按显示* 
-
-            calculator_zero.add_event_cb(lambda e: EventMesh.callback_wrapper(self.pressed_start(e)),
-                                        lv.EVENT.LONG_PRESSED, None)#长按显示+
-            
-            calculator_zero.add_event_cb(lambda e: EventMesh.callback_wrapper(self.zero_endpressed_start(e)),
-                                         lv.EVENT.RELEASED, None)#释放按键
-
-            calculator_call.add_event_cb(lambda e: EventMesh.callback_wrapper(self.call(e)),
-                                        lv.EVENT.CLICKED, None)
-            # phone_contact_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.contact(e)),
-            #                             lv.EVENT.CLICKED, None)
-            calculator_delete.add_event_cb(lambda e: EventMesh.callback_wrapper(self.delete(e)),
-                                        lv.EVENT.CLICKED, None)
-            
-            # phone_start.add_event_cb(lambda e: EventMesh.callback_wrapper(self.start(e)),
-            #                             lv.EVENT.CLICKED, None)#短按显示* 
-            
-            # phone_start.add_event_cb(lambda e: EventMesh.callback_wrapper(self.pressed_start(e)),
-            #                             lv.EVENT.LONG_PRESSED, None)#长按显示+
-            
-            # phone_start.add_event_cb(lambda e: EventMesh.callback_wrapper(self.endpressed_start(e)),
-            #                             lv.EVENT.RELEASED, None)#释放按键
-            
-
-            # phone_hash.add_event_cb(lambda e: EventMesh.callback_wrapper(self.hash(e)),
-            #                             lv.EVENT.CLICKED, None)
-            
-
-        self.phone_num=''
-        self.calcul_num=''
-        self.phone_list = []
-        self.one_buf = ''
-        self.two_buf = ''
-        self.operator = ''
-        self.result_buf = ''#计算结果
-
-
-        self.count = 0
-        self.show_num()
-        if calculator_label != None:
-            calculator_label.set_pos(0, 0)
-            calculator_label.set_size(0, 0)
-            calculator_label.set_text(" ")
-        #phone_label.set_text(" ")
-        # print("self.phone_list :{} self.phone_num:{}".format(self.phone_list,self.phone_num))
-        if self.timer_cb == 0:
-            self.timer_cb = 1
-            # self.timer.start(1000,1,self.refresh_line) 
-          
-
-    def refresh_line(self,e):
-        return
-        if self.count > 2 :
-            self.count = 1
-        if self.count%2 == 0:
-            phone_line.clear_flag(lv.obj.FLAG.HIDDEN)
-        else:
-            phone_line.add_flag(lv.obj.FLAG.HIDDEN)
-        self.count+=1
-    def one(self,e):
-        self.input_num("1")
-    
-    def two(self,e):
-        self.input_num("2")
-
-    def three(self,e):
-        self.input_num(".")
-        # self.input_num("3")
-
-    def four(self,e):
-       self.input_num("4")
-
-    def five(self,e):
-       self.input_num("5")
-
-    def six(self,e):
-        self.input_num("6")
-
-    def seven(self,e):
-        self.input_num("7")
-
-    def eight(self,e):
-        self.input_num("8")
-
-    def nine(self,e):
-        self.input_num("9")
-
-    def zero(self,e):
-        self.input_num("0")
-    
-    def start(self,e):
-        self.button = 0
-
-    def pressed_start(self,e):
-        self.button = 1
-    def Close(self):
-        self.timer_cb = 0
-        self.timer.stop()
-
-    def nine_endpressed_start(self,e):
-  
-        if self.button == 1:#长按
-            self.input_char("=")
-           
-        else:#短按
-           self.input_num("9")
-
-
-
-    def zero_endpressed_start(self,e):
-
-        if self.button == 1:#长按
-            self.input_char("+")
-        else:#短按
-            self.input_num("0") 
-     
-       
-
-    def endpressed_start(self,e):
-        if self.button == 1:#长按
-            self.input_char("*") 
-        else:#短按
-            self.input_num("7")          
-
-    
-    def hash(self,e):
-       
-       self.calculator_fun("#") 
-
-    def is_all_zero(self,lst):
-        return all(element == 0 for element in lst)
-
-    def input_num(self,msg):#输入数字
-        if msg == 'delete':
-            if len(self.result_buf) == 0:
-                if self.one_buf != '':
-                    if self.operator  != '':
-                        if self.two_buf != '':
-                            self.phone_list = list(self.two_buf)
-                            self.phone_list.pop()
-                            self.two_buf = ''.join(self.phone_list)
-                            print("two_buf!!!")
-                        else:
-                            self.phone_list = list(self.operator)
-                            self.phone_list.pop()
-                            self.operator = ''.join(self.phone_list)
-                            print("self.operator!!!")
-                    else:
-                        self.phone_list = list(self.one_buf)
-                        self.phone_list.pop()
-                        self.one_buf = ''.join(self.phone_list)
-                        print("self.one_buf!!!")
-                self.show_result()#显示计算结果以及输入结果
-            return
-        global calculator_label
-        print("input_num",msg)
-        if len(self.result_buf) > 0:
-            self.result_buf = ''
-            self.two_buf = ''
-            self.one_buf = ''
-
-        if self.one_buf == '':#第一个数字为空
-            if msg == '.':#如果第一个数据为空并且输入的第一个数字是.就直接置0.开始
-                self.one_buf = "0."
-            else:
-                self.one_buf = self.one_buf+msg
-        else:
-            if self.operator == '':#没有特殊字符 + - / * 一直会将数字添加到数字1中 否则添加到数字2中
-                if self.one_buf.find('.') == -1:
-                    if len(self.one_buf) <= 10 and len(self.one_buf) > 0:#第二个数据超过10个数据不让输入 0
-                        if len(self.one_buf) == 1 and self.one_buf == '0' and msg != '.':
-                            self.one_buf = msg
-                        else:
-                            self.one_buf = self.one_buf+msg#还是第一个数据继续加 0
-                            pass
-                    else:
-                        if len(self.one_buf) > 10:
-                            print("大于是10位数字")
-                            pass
-                        else:
-                            if msg == '.':
-                                self.one_buf = '0.'
-                            else:
-                                self.one_buf = self.one_buf+msg#还是第一个数据继续加 0
-                                pass
-                else:
-                    if self.one_buf.find('.') != -1:#找到一个点如果还是点的话不让点
-                        if msg != '.':
-                            if len(self.one_buf) <= 10:
-                                self.one_buf = self.one_buf+msg#还是第一个数据继续加 0
-                            
-            else:
-                    
-                if self.two_buf.find('.') == -1:
-                    if len(self.two_buf) <= 10 and len(self.two_buf) > 0:#第二个数据超过10个数据不让输入 0
-                        if len(self.two_buf) == 1 and self.two_buf == '0' and msg != '.':
-                            self.two_buf = msg
-                        else:
-                            self.two_buf = self.two_buf+msg#还是第一个数据继续加 0
-                            pass
-                    else:
-                        if len(self.two_buf) > 10:
-                            pass
-                        else:
-                            if msg == '.':
-                                self.two_buf = '0.'
-                            else:
-                                self.two_buf = self.two_buf+msg#还是第一个数据继续加 0
-                                pass
-                else:
-                    if self.two_buf.find('.') != -1:
-                        if msg != '.':
-                            if len(self.two_buf) <= 10:
-                                self.two_buf = self.two_buf+msg#还是第一个数据继续加 0
-                            
-                    
-        self.show_result()#显示计算结果以及输入结果
-        pass
-
-
-    def input_char(self,msg):#输入字符
-
-        if self.one_buf != '':
-            if self.one_buf.find(".") != -1:
-                tmp = self.one_buf.split(".")[1]
-                if len(tmp) == 0:
-                    self.one_buf = self.one_buf.split('.')[0]
-        if self.two_buf != '':
-            if self.two_buf.find(".") != -1:
-                tmp = self.two_buf.split(".")[1]
-                if len(tmp) == 0:
-                    self.two_buf = self.two_buf.split('.')[0]  
-
-        global calculator_label
-        if len(self.two_buf) != 0 and float(self.two_buf) == 0:#0.000
-            if self.operator == '/' and (msg == '/' or msg == '=' or msg == '*'or msg == '+' or msg =='-'):#如果第二个数据为0并且符号是除号就提示除数不为0
-                print("除数不可以为0")
-                self.operator = ''
-                self.one_buf = ''
-                self.two_buf = ''
-                calculator_label.set_text("除数不可以为0")
-                return
-        else:
-            print("除数不为0")
-            self.show_result()
-
-        self.result_buf = ''
-        print("input_char",msg)
-        if self.one_buf != '':#只有第一个数据不为空的时候才可以输入特殊字符
-            if msg == "+":#加
-                if self.one_buf != '':
-                    if self.operator != '':#90
-                        print("operator")
-                        if self.two_buf != '':#90+90 计算结果 -0.9
-                            
-                            if self.one_buf.find('.') != -1:
-                                if self.one_buf.find('e') == -1:#1.2e
-                                    if int(self.one_buf.split(".")[1]) == 0:
-                                        self.one_buf = self.one_buf.split('.')[0]
-
-                            if self.two_buf.find('.') != -1:
-                                if self.two_buf.find('e') == -1:#1.2e
-                                    if int(self.two_buf.split('.')[1]) == 0:
-                                        self.two_buf = self.two_buf.split('.')[0]
-
-                            str_sum = ''
-                            # if self.one_buf.find('e') != -1:#1.2e
-                            #     tmp1 = (self.one_buf.split('e')[0])#2.1717041952680391897126070275863e-15
-                            #     tmp2 = (self.one_buf.split('e')[1])
-                            #     if len(tmp2) > 0:
-                            #         self.result_buf = str(eval(tmp1 + "*"+"10**"+tmp2))
-                            #     else:
-                            #         self.result_buf = str(eval(tmp1 + "*"+"10**"+"0"))
-                            #         pass
-                            #     pass
-                            # else:
-                            str_sum = (self.one_buf.split()[0])+self.operator+(self.two_buf.split()[0])
-                            self.result_buf = str(eval(str_sum))
-                            #     pass
-
-                            print("str_sum",str_sum,self.result_buf)
-                            if self.result_buf.find('e') == -1:
-                                if self.result_buf.find('.') != -1:#有小数点
-                                    print("input_dot",self.result_buf)
-                                    if int(self.result_buf.split(".")[1]) == 0:#小数点后面全是0 就取整数 
-                                        self.result_buf = (self.result_buf.split(".")[0])
-
-                            if len(self.result_buf) > 14:#99978654.087766666
-                                tmp = str(self.result_buf[:14])
-                                self.result_buf = tmp
-
-                            self.one_buf = str(self.result_buf)
-                            self.two_buf = ''
-                            self.operator = ''
-                            self.show_result()#显示计算结果以及输入结果
-                        else:
-                            if self.operator != '+':#有+就不需要再显示+ 
-                                self.operator = msg#90 没有特殊字符则加上不计算结果
-                                if self.one_buf.split()[0] == 0:#如果数字是0.就显示0负数不在内
-                                    self.one_buf = "0"
-                                self.show_result()#显示计算结果以及输入结果
-                    else:
-                        print("operator !!!!!")
-                        self.operator = msg
-                        self.show_result()#显示计算结果以及输入结果
-                pass
-            elif msg == '-':#减
-                if self.one_buf != '':
-                    if self.operator != '':#90
-                        print("operator!!!!!!!!!!!!")
-                        if self.two_buf != '':#90+90 计算结果 -0.9
-                            if self.one_buf.find('.') != -1:
-                                if self.one_buf.find('e') == -1:#1.2e
-                                    if int(self.one_buf.split(".")[1]) == 0:
-                                        self.one_buf = self.one_buf.split('.')[0]
-
-                            if self.two_buf.find('.') != -1:
-                                if self.two_buf.find('e') == -1:#1.2e
-                                    if int(self.two_buf.split('.')[1]) == 0:
-                                        self.two_buf = self.two_buf.split('.')[0]
-                            str_sum = ''
-                            # if self.one_buf.find('e') != -1:#1.2e
-                            #     tmp1 = (self.one_buf.split('e')[0])#2.1717041952680391897126070275863e-15
-                            #     tmp2 = (self.one_buf.split('e')[1])
-                            #     if len(tmp2) > 0:
-                            #         self.result_buf = str(eval(tmp1 + "*"+"10**"+tmp2))
-                            #     else:
-                            #         self.result_buf = str(eval(tmp1 + "*"+"10**"+"0"))
-                            #         pass
-                            #     pass
-                            # else:
-                            str_sum = (self.one_buf.split()[0])+self.operator+(self.two_buf.split()[0])
-                            self.result_buf = str(eval(str_sum))
-
-                            print("str_sum",str_sum,self.result_buf)
-                            if self.result_buf.find('e') == -1:
-                                if self.result_buf.find('.') != -1:#有小数点
-                                    print("input_dot",self.result_buf)
-                                    if int(self.result_buf.split(".")[1]) == 0:#小数点后面全是0 就取整数 
-                                        self.result_buf = (self.result_buf.split(".")[0])
-
-                            if len(self.result_buf) > 14:#99978654.087766666
-                                tmp = str(self.result_buf[:14])
-                                self.result_buf = tmp
-
-                            self.one_buf = str(self.result_buf)
-                            self.two_buf = ''
-                            self.operator = ''
-                            self.show_result()#显示计算结果以及输入结果
-                        else:
-                            if self.operator != '-':#有+就不需要再显示+ 
-                                self.operator = msg#90 没有特殊字符则加上不计算结果
-                                if self.one_buf.split()[0] == 0:#如果数字是0.就显示0负数不在内
-                                    self.one_buf = "0"
-                                self.show_result()#显示计算结果以及输入结果
-                    else:
-                        print("operator ---------")
-                        self.operator = msg
-                        self.show_result()#显示计算结果以及输入结果
-                pass
-            elif msg == '*':#乘
-                if self.one_buf != '':
-                    if self.operator != '':#90
-                        print("operator====***********")
-                        if self.two_buf != '':#90+90 计算结果 -0.9
-                            if self.one_buf.find('.') != -1:
-                                if self.one_buf.find('e') == -1:#1.2e
-                                    if int(self.one_buf.split(".")[1]) == 0:
-                                        self.one_buf = self.one_buf.split('.')[0]
-
-                            if self.two_buf.find('.') != -1:
-                                if self.two_buf.find('e') == -1:#1.2e
-                                    if int(self.two_buf.split('.')[1]) == 0:
-                                        self.two_buf = self.two_buf.split('.')[0]
-                                    
-                            str_sum = ''
-                            # if self.one_buf.find('e') != -1:#1.2e
-                            #     tmp1 = (self.one_buf.split('e')[0])#2.1717041952680391897126070275863e-15
-                            #     tmp2 = (self.one_buf.split('e')[1])
-                            #     if len(tmp2) > 0:
-                            #         self.result_buf = str(eval(tmp1 + "*"+"10**"+tmp2))
-                            #     else:
-                            #         self.result_buf = str(eval(tmp1 + "*"+"10**"+"0"))
-                            #         pass
-                            #     pass
-                            # else:
-                            str_sum = (self.one_buf.split()[0])+self.operator+(self.two_buf.split()[0])
-                            self.result_buf = str(eval(str_sum))
-                            #     pass
-
-                            print("str_sum",str_sum,self.result_buf)
-                            if self.result_buf.find('e') == -1:#有e
-                                if self.result_buf.find('.') != -1:#有小数点
-                                    print("input_dot",self.result_buf)
-                                    if int(self.result_buf.split(".")[1]) == 0:#小数点后面全是0 就取整数 
-                                        self.result_buf = (self.result_buf.split(".")[0])
-
-                            if len(self.result_buf) > 14:#99978654.087766666
-                                tmp = str(self.result_buf[:14])
-                                self.result_buf = tmp
-
-                            self.one_buf = str(self.result_buf)
-                            self.two_buf = ''
-                            self.operator = ''
-                            self.show_result()#显示计算结果以及输入结果
-                        else:
-                            if self.operator != '*':#有+就不需要再显示+ 
-                                self.operator = msg#90 没有特殊字符则加上不计算结果
-                                if self.one_buf.split()[0] == 0:#如果数字是0.就显示0负数不在内
-                                    self.one_buf = "0"
-                                self.show_result()#显示计算结果以及输入结果
-                    else:
-                        print("operator **********")
-                        self.operator = msg
-                        self.show_result()#显示计算结果以及输入结果
-                pass
-
-            elif msg == '/':#除
-                if self.one_buf != '':
-                    if self.operator != '':#90
-                        print("operator ==== //////////",self.two_buf)
-                        if self.two_buf != '':#90+90 计算结果 -0.9
-                            if float(self.two_buf) != 0:
-                                if self.one_buf.find('.') != -1:
-                                    if self.one_buf.find('e') == -1:#1.2e
-                                        if int(self.one_buf.split(".")[1]) == 0:
-                                            self.one_buf = self.one_buf.split('.')[0]
-
-                                if self.two_buf.find('.') != -1:
-                                    if self.two_buf.find('e') == -1:#1.2e
-                                        if int(self.two_buf.split('.')[1]) == 0:
-                                            self.two_buf = self.two_buf.split('.')[0]
-                                        
-                                str_sum = ''
-                                # if self.one_buf.find('e') != -1:#1.2e
-
-                                #     tmp = (self.one_buf.split('e')[0])
-                                    
-                                #     str_sum = tmp + self.operator + self.two_buf
-                                #     self.result_buf = str(eval(str_sum))+'e'
-                                #     pass
-                                # else:
-                                str_sum = (self.one_buf.split()[0])+self.operator+(self.two_buf.split()[0])
-                                self.result_buf = str(eval(str_sum))
-                                #     pass
-
-                                print("str_sum",str_sum,self.result_buf)
-                                if self.result_buf.find('e') == -1:#有小数点
-                                    if self.result_buf.find('.') != -1:#有小数点
-                                        print("input_dot",self.result_buf)
-                                        if int(self.result_buf.split(".")[1]) == 0:#小数点后面全是0 就取整数 
-                                            self.result_buf = (self.result_buf.split(".")[0])
-
-                                # if len(self.result_buf) > 14:#99978654.087766666
-                                #     tmp = str(self.result_buf[:14])
-                                #     self.result_buf = tmp
-
-                                self.one_buf = str(self.result_buf)
-                                self.two_buf = ''
-                                self.operator = ''
-                                self.show_result()#显示计算结果以及输入结果
-                            else:
-                                print("除数不为0")
-                        else:
-                            if self.operator != '/':#有+就不需要再显示+ 
-                                self.operator = msg#90 没有特殊字符则加上不计算结果
-                                if self.one_buf.split()[0] == 0:#如果数字是0.就显示0负数不在内
-                                    self.one_buf = "0"
-                                self.show_result()#显示计算结果以及输入结果
-                    else:
-                        print("operator ////////////////////")
-                        self.operator = msg
-                        self.show_result()#显示计算结果以及输入结果
-                pass
-
-                pass
-
-            elif msg == '=':#等于
-                if self.one_buf != '':
-                    if self.operator != '':
-                        print("operator ===========")
-                        if self.two_buf != '':#90+90 计算结果 -0.9
-                            if float(self.two_buf) != 0:
-                                if self.one_buf.find('.') != -1:
-                                    if self.one_buf.find('e') == -1:#1.2e
-                                        if int(self.one_buf.split(".")[1]) == 0:
-                                            self.one_buf = self.one_buf.split('.')[0]
-
-                                if self.two_buf.find('.') != -1:
-                                    if self.two_buf.find('e') == -1:#1.2e
-                                        if int(self.two_buf.split('.')[1]) == 0:
-                                            self.two_buf = self.two_buf.split('.')[0]
-                                        
-                                str_sum = ''
-                                # if self.one_buf.find('e') != -1:#1.2e
-                                #     tmp = (self.one_buf.split('e')[0])
-                                #     str_sum = tmp + self.operator + self.two_buf
-                                #     self.result_buf = str(eval(str_sum))+'e'
-                                #     pass
-                                # else:
-                                str_sum = (self.one_buf.split()[0])+self.operator+(self.two_buf.split()[0])
-                                self.result_buf = str(eval(str_sum))
-                                #     pass
-
-                                print("str_sum",str_sum,self.result_buf)
-                                if self.result_buf.find('e') == -1:#有小数点
-                                    if self.result_buf.find('.') != -1:#有小数点
-                                        print("input_dot",self.result_buf)
-                                        if int(self.result_buf.split(".")[1]) == 0:#小数点后面全是0 就取整数 
-                                            self.result_buf = (self.result_buf.split(".")[0])
-
-                                if len(self.result_buf) > 14:#99978654.087766666
-                                    tmp = str(self.result_buf[:14])
-                                    self.result_buf = tmp
-
-                                self.one_buf = str(self.result_buf)
-                                self.two_buf = ''
-                                self.operator = ''
-                                self.show_result()#显示计算结果以及输入结果
-                        else:
-                            if self.operator != '=':#有=就不需要再显示+ 90
-                                self.operator = '' #90 没有特殊字符则加上不计算结果
-                                self.two_buf = ''
-                                self.show_result()#显示计算结果以及输入结果
-
-                        pass
-                    else:
-                        self.operator = ''
-                        self.two_buf = ''
-                        self.show_result()#显示计算结果以及输入结果   只显示第一个数据的内容
-                
-                pass
-            else:
-                #无效的数据
-                pass
-
-    
-
-    def show_result(self):
-        print("self.one_buf ",self.one_buf,self.two_buf,self.operator)
-        global calculator_label
-        tmp = str(self.one_buf)+str(self.operator)+str(self.two_buf)
-        label_size = len(tmp)*16
-        calculator_label.set_pos(0, 0)
-        calculator_label.set_size(128, 16)
-        calculator_label.set_text(tmp)
-
-    def calculator_fun(self,msg):
-        result = 0
-        if len(self.phone_num) >= calculator_CALL_MAX_DATA:#限制拨号数量20个数字
-            #self.phone_list.pop(0)
-            return
-        if len(self.phone_num) != 0:
-            if len(self.calcul_num) > 0:
-                self.calcul_num = ''
-                if msg == "+" or msg == '-' or msg == 'X' or msg == '/':#如果是计算完结果再按特殊字符就让他继续加
-                    print("不包含特殊字符1")
-
-                    self.phone_list.append(msg)                
-                    self.phone_num = ''.join(self.phone_list)
-                    self.show_num()
-                else:#
-                    print("不包含特殊字符2",msg)
-                    if msg == '=':
-                        self.show_num()
-                    else:
-                        
-                        self.phone_num = ''
-                        self.phone_list = []
-                        self.phone_list.append(msg)                
-                        self.phone_num = ''.join(self.phone_list)
-                        self.show_num()
-
-            else:
-                
-
-
-                if self.phone_num.find('/') != -1 or self.phone_num.find('+') != -1 or self.phone_num.find('x') != -1 or self.phone_num.find('-') != -1:
-                    
-                    
-                    tmp_2 = ''
-                    tmp_3 = ''
-                    state1 = 0
-                    state2 = 0
-                    state3 = 0
-                    tmp_1 = ''
-                    tmp = ''
-                    data1 = 0
-                    data2 = 0
-
-                    if self.phone_num.find('+') != -1:#加运算
-                        if (self.phone_num.split('+')[0]).find('.') == -1:#还没有输入小数点 0.00
-                            tmp = self.phone_num.split('+')[0]
-                            tmp = float(tmp.split()[0])
-
-                            
-
-                            pass
-
-                        data1 = float(self.phone_num.split('+')[0])
-
-                        if len(self.phone_num.split('+')[1]) > 0 and (msg == '+' or  msg =='='):#计算结果
-                            # tmp  = self.phone_num.split('+')[0]
-                            # data1 = float(tmp.split()[0])
-                            # tmp2 = self.phone_num.split('+')[1]
-                            # data2 = float(tmp2.split()[0])
-                            # if self.phone_num.split('+')[0].find('.') == -1:
-                            #     if int(data2) == 0:
-                            #         data1 = int(data1)
-                            
-                            # if self.phone_num.split('+')[1].find('.') == -1:
-                            #     if int(data2) == 0:
-                            #         data2 = int(data2)
-                            if self.phone_num.find('e') != -1:
-                                if (self.phone_num.split('+')[0]).split('e') != -1 or (self.phone_num.split('+')[1]).split('e') != -1:
-                                    if (self.phone_num.split('+')[0]).split('e') != -1 and  (self.phone_num.split('+')[1]).split('e') != -1:
-                                        self.phone_num = "2.71828182+2.71828182"
-                                    elif (self.phone_num.split('+')[0]).split('e') != -1:
-                                        self.phone_num = self.phone_num.split('+')[0] +"2.71828182"
-                                    elif (self.phone_num.split('+')[1]).split('e') != -1:
-                                        self.phone_num =  "2.71828182"+ self.phone_num.split('+')[1]
-
-                            sum = eval(self.phone_num)
-
-                            result = sum
-                            print("data1",data1,data2,result,sum)
-                            self.calcul_num = str(result)
-                            self.calaulator_results()
-                
-                            self.phone_num = self.calcul_num
-                            self.phone_list = list(self.phone_num)
-                            print("加数====",result) 
-                        else:
-                            if msg == '-' or msg == '/' or msg == 'X':
-                                self.phone_list.pop() 
-                                self.phone_list.append(msg)                
-                                self.phone_num = ''.join(self.phone_list)
-                                self.show_num()
-                                print("减数")  
-                            else:
-                                if msg != '=' and msg != '+':
-                                    self.phone_list.append(msg)                
-                                    self.phone_num = ''.join(self.phone_list)
-                                    self.show_num()
-                                else:
-                                    result = data1
-                                    result_tmp = str(result)
-                                    if result_tmp.find('.') != -1:
-                                        tmp_zero = int(result_tmp.split('.')[1])
-                                        if tmp_zero == 0:
-                                            result = result_tmp.split('.')[0]
-                                    print("data1!!!!!!!!!!",data1,data2,result)
-                                    self.calcul_num = str(result)
-                                    self.calaulator_results()
-                                    self.phone_num = self.calcul_num
-                                    self.phone_list = list(self.phone_num)
-                                print("减数")  
-                            print("加数")  
-
-                    if self.phone_num.find('-') != -1:#减运算
-                        data1 = float(self.phone_num.split('-')[0])
-                        if len(self.phone_num.split('-')[1]) > 0 and (msg == '-' or msg =='='):#计算结果
-                            data2 = float(self.phone_num.split('-')[1])
-                            # if self.phone_num.split('-')[0].find('.') == -1:
-                            #     if int(data1) == 0:
-                            #         data1 = int(data1)
-                            
-                            # if self.phone_num.split('-')[1].find('.') == -1:
-                            #     if int(data2.slpit('.')[1]) == 0:
-                            #         data2 = int(data2)
-                            result = data1-data2
-                            print("data1222222222222",data1,data2,result)
-                            self.calcul_num = str(result)
-                            self.calaulator_results()
-                            self.phone_num = self.calcul_num
-                            self.phone_list = list(self.phone_num)
-                        else:
-                            if msg == '+' or msg == '/' or msg == 'X':
-                                self.phone_list.pop() 
-                                self.phone_list.append(msg)                
-                                self.phone_num = ''.join(self.phone_list)
-                                self.show_num()
-                                print("减数") 
-                            else:
-                                if msg != '=' and msg != '-':
-                                    self.phone_list.append(msg)                
-                                    self.phone_num = ''.join(self.phone_list)
-                                    self.show_num()
-                                else:
-                                    # if self.phone_num.split('-')[1].find('.') == -1:
-                                    #     if int(data1.slpit('.')[1]) == 0: 
-                                    #         data1 = int(data1)
-                                    result = data1
-                                    result_tmp = str(result)
-                                    if result_tmp.find('.') != -1:
-                                        tmp_zero = int(result_tmp.split('.')[1])
-                                        if tmp_zero == 0:
-                                            result = result_tmp.split('.')[0]
-                                    print("data333333",data1)
-                                    self.calcul_num = str(result)
-                                    self.calaulator_results()
-                                    self.phone_num = self.calcul_num
-                                    self.phone_list = list(self.phone_num)
-                
-
-                    if self.phone_num.find('X') != -1:#乘运算
-                        data1 = float(self.phone_num.split('X')[0])
-                        if len(self.phone_num.split('X')[1]) > 0 and (msg == 'X' or msg =='='):#计算结果
-                            
-                            data2 = float(self.phone_num.split('X')[1])
-                            # if self.phone_num.split('X')[0].find('.') == -1:
-                            #     if int(data1.slpit('.')[1]) == 0:
-                            #         data1 = int(data1)
-                            
-                            # if self.phone_num.split('X')[1].find('.') == -1:
-                            #     if int(self.phone_num.split('X')[1].find('.').slpit('.')[1]) == 0:
-                            #         data2 = int(data2)
-
-                            result = data1*data2
-                            print("data44444",data1,data2)
-                            self.calcul_num = str(result)
-                            self.calaulator_results()
-                            self.phone_num = self.calcul_num
-                            self.phone_list = list(self.phone_num)
-                            print("乘数====",result)  
-                        else:
-                            if msg == '+' or msg == '/' or msg == '-':
-                                self.phone_list.pop() 
-                                self.phone_list.append(msg)                
-                                self.phone_num = ''.join(self.phone_list)
-                                self.show_num()
-                                print("乘数")  
-                            else:
-                                if msg != '=' and msg != 'X':
-                                    self.phone_list.append(msg)                
-                                    self.phone_num = ''.join(self.phone_list)
-                                    self.show_num()
-                                else:
-                                    # if self.phone_num.split('X')[0].find('.') == -1:
-                                        # if (self.phone_num.split('X')[1].find('.') == -1:)
-                                    result = data1
-                                    result_tmp = str(result)
-                                    if result_tmp.find('.') != -1:
-                                        tmp_zero = int(result_tmp.split('.')[1])
-                                        if tmp_zero == 0:
-                                            result = result_tmp.split('.')[0]
-                                    print("data5555555",data1,data2)
-                                    self.calcul_num = str(result)
-                                    self.calaulator_results()
-                                    self.phone_num = self.calcul_num
-                                    self.phone_list = list(self.phone_num)
-                            
-
-                    if self.phone_num.find('/') != -1:#除运算
-                    
-                        tmp = self.phone_num.split('/')[0]
-                        tmp_1 = self.phone_num.split('/')[1]
-                        if len(tmp_1) > 0 and (msg == '/' or msg == '='):
-                            if tmp_1.find('.') != -1:
-                                state1 = int(tmp_1.split('.')[0])#0.009 10:00
-                                state2 = int(tmp_1.split('.')[1])#0.009
-
-                            else:
-                                state1 = int(tmp_1) #10
-
-                            print("state3",state1,state2,state3,tmp_1)
-                            if (state1 == 0 and state2 == 0):
-                                print("除数不可以为0")  
-                            else:
-                                data1 = float(self.phone_num.split('/')[0])
-                                data2 = 0
-                                # if data1.find('.') == -1:
-                                #     if int(data1.slpit('.')[1]) == 0:
-                                #         data1 = int(data1)
-                            
-                                # if data2.find('.') == -1:
-                                #     if int(data2.slpit('.')[1]) == 0:
-                                #         data2 = int(data2)
-
-                                if len(self.phone_num.split('/')[1]) > 0:
-                                    data2 = float(self.phone_num.split('/')[1])
-                                if data2 != 0:  
-                                    result = data1/data2
-                                else:
-                                    result = data1
-                                print("data6666666",data1,data2)
-                                
-                            result_tmp = str(result)
-                            if result_tmp.find('.') != -1:
-                                tmp_zero = int(result_tmp.split('.')[1])
-                                if tmp_zero == 0:
-                                    result = result_tmp.split('.')[0]
-                                else:
-                                    pass
-                                self.calcul_num = str(result)
-                                self.calaulator_results()
-                                self.phone_num = self.calcul_num
-                                self.phone_list = list(self.phone_num)
-                        else:
-                            if msg == '+' or msg == 'X' or msg == '-':
-                                self.phone_list.pop() 
-                                self.phone_list.append(msg)                
-                                self.phone_num = ''.join(self.phone_list)
-                                self.show_num()
-                                print("减数")  
-                            else:
-                                if msg != '=' and msg != '/':
-                                    self.phone_list.append(msg)                
-                                    self.phone_num = ''.join(self.phone_list)
-                                    self.show_num()
-                                else:
-                                    result = float(tmp)
-                                    self.calcul_num = str(result)
-                                    print("data7777777777",result)
-                                    self.calaulator_results()
-                                    self.phone_num = self.calcul_num
-                                    self.phone_list = list(self.phone_num)
-                            print("除数没有数字")
-                else:
-                    
-
-                    if msg == '=':
-                        self.show_num()
-                        pass
-                    else:
-                        if msg == "+" and msg == '-' and msg == 'X' and msg == '/':#如果是计算完结果再按特殊字符就让他继续加
-                            print("不包含特殊字符")
-                            self.calcul_num = ''
-                            self.phone_list.append(msg)                
-                            self.phone_num = ''.join(self.phone_list)
-                            self.show_num()
-                        elif msg == ".":
-                            if self.phone_num.find('.') == -1:#还没有输入小数点
-                                self.phone_num = '0.'
-                                self.phone_list = list(self.phone_num)
-                                self.show_num()
-                            pass
-                        else:#
-                            print("不包含特殊字符")
-                            if len(self.calcul_num) > 0:#表示已计算了一次结果 全部置0
-                                self.phone_num = ''
-                                self.phone_list = []
-                                self.calcul_num = ''
-
-                            self.phone_list.append(msg)                
-                            self.phone_num = ''.join(self.phone_list)
-                            self.show_num()
-
-        else:
-            if msg != "+" and msg != '-' and msg != 'X' and msg != '/':
-                print("数组为0时")
-                self.phone_list.append(msg)                
-                self.phone_num = ''.join(self.phone_list)
-                self.show_num()
-        pass
-
-    def delete(self,e):
-        self.input_char("/")
-        # if len(self.phone_list) != 0:
-        #     self.phone_list.pop()
-        #     self.phone_num = ''.join(self.phone_list)
-        #     self.show_num()
-
-    def contact(self,e):
-        EventMesh.publish("load_screen", {"screen": "contacts"})
-
-    def call(self,e):
-        self.input_char("-")
-
-    def show_num(self):
-        print("self.phone_num ",self.phone_num,self.phone_list)
-        pass
-        # global calculator_label
-        # calculator_label.set_pos(0, 5)
-        # calculator_label.set_size(128, 20)
-        # calculator_label.set_text(self.phone_num)
-
-    def calaulator_results(self):#计算结果显示
-        pass
-
-
-    def lcd_on(self):
-        if self.timer_cb != 0:
-            self.timer_cb = 0
-            self.timer.start(1000,1,self.refresh_line) 
-    
-    def lcd_off(self):
-        self.timer_cb = 1
-        self.timer.stop() 
-
-
-    def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-    def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})  
-
 
 rrestor_confirm_n_screen = None
 rrestor_confirm_n_screen_label = None
index 04a6487..7c02406 100644 (file)
@@ -89,39 +89,110 @@ print("MainMenu2")
 MainMenu2_til = lv.tileview(MainMenu2)
 MainMenu2_til.set_scrollbar_mode(0)
 MainMenu2_til.add_style(style_MainMenu_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
-#表盘
 
-MainMenu2_Watchface = MainMenu2_til.add_tile(0, 1,  lv.DIR.LEFT | lv.DIR.RIGHT)
+#工具箱
+MainMenu2_toolbox = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_toolbox)
+label_text.set_pos(0, 0)
+label_text.set_size(0, 0)
+label_text.set_text("{}".format(MainMenu2_num))
+MainMenu2_img_toolbox = lv.img(MainMenu2_toolbox)
+MainMenu2_img_toolbox.set_size(80,80)
+MainMenu2_img_toolbox.set_pos(24,10)
+MainMenu2_img_toolbox.set_src("U:/static/IMAGE_ONE_PAGE_TOOLS.png")
+MainMenu2_img_toolbox.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_toolbox.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-label_text = lv.label(MainMenu2_Watchface)
+MainMenu2_img_toolbox_txt = lv.label(MainMenu2_toolbox)
+MainMenu2_img_toolbox_txt.set_pos(int(0),int(100))
+MainMenu2_img_toolbox_txt.set_size(128,20)
+MainMenu2_img_toolbox_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_toolbox_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_toolbox_txt.set_text("工具箱")
+MainMenu2_img_toolbox_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+MainMenu2_num+=1
+MainMenu2x+=1
+
+#加好友,暂时没有
+MainMenu2_toolbox = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_toolbox)
 label_text.set_pos(0, 0)
 label_text.set_size(0, 0)
 label_text.set_text("{}".format(MainMenu2_num))
+MainMenu2_img_add_friends = lv.img(MainMenu2_toolbox)
+MainMenu2_img_add_friends.set_size(80,80)
+MainMenu2_img_add_friends.set_pos(24,10)
+MainMenu2_img_add_friends.set_src("U:/static/IMAGE_ONE_PAGE_TOOLS.png")
+MainMenu2_img_add_friends.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_add_friends.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_add_friends_txt = lv.label(MainMenu2_toolbox)
+MainMenu2_img_add_friends_txt.set_pos(int(0),int(100))
+MainMenu2_img_add_friends_txt.set_size(128,20)
+MainMenu2_img_add_friends_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_add_friends_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_add_friends_txt.set_text("加好友")
+MainMenu2_img_add_friends_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
 MainMenu2_num+=1
+MainMenu2x+=1
 
-#拨号盘
-MainMenu2_phone = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
-label_text = lv.label(MainMenu2_phone)
+#微聊
+MainMenu2_wechat = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_wechat)
 label_text.set_pos(0, 0)
 label_text.set_size(0, 0)
 label_text.set_text("{}".format(MainMenu2_num))
-MainMenu2_img_phone = lv.img(MainMenu2_phone)
-MainMenu2_img_phone.set_size(80,80)
-MainMenu2_img_phone.set_pos(24,10)
-MainMenu2_img_phone.set_src("U:/static/IMAGE_ONE_PAGE_CALL.png")
-MainMenu2_img_phone.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_phone.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+MainMenu2_img_wechat = lv.img(MainMenu2_wechat)
+MainMenu2_img_wechat.set_size(80,80)
+MainMenu2_img_wechat.set_pos(24,10)
+MainMenu2_img_wechat.set_src("U:/static/IMAGE_ONE_PAGE_WECHAT.png")
+MainMenu2_img_wechat.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_wechat.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-MainMenu2_img_phone_text = lv.label(MainMenu2_phone)
-MainMenu2_img_phone_text.set_pos(int(0),int(100))
-MainMenu2_img_phone_text.set_size(128,20)
-MainMenu2_img_phone_text.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_phone_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-MainMenu2_img_phone_text.set_text("拨号盘")
-MainMenu2_img_phone_text.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+MainMenu2_img_wechat_txt = lv.label(MainMenu2_wechat)
+MainMenu2_img_wechat_txt.set_pos(int(0),int(100))
+MainMenu2_img_wechat_txt.set_size(128,20)
+MainMenu2_img_wechat_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_wechat_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_wechat_txt.set_text("微聊")
+MainMenu2_img_wechat_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+MainMenu2_num+=1
+MainMenu2x+=1
+
+#视频通话
+MainMenu2_heartrate = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_heartrate)
+label_text.set_pos(0, 0)
+label_text.set_size(0, 0)
+label_text.set_text("{}".format(MainMenu2_num))
+MainMenu2_img_health = lv.img(MainMenu2_heartrate)
+MainMenu2_img_health.set_size(80,80)
+MainMenu2_img_health.set_pos(24,10)
+MainMenu2_img_health.set_src("U:/static/IMAGE_ONE_PAGE_HEALTH.png")
+MainMenu2_img_health.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_health.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_health_txt = lv.label(MainMenu2_heartrate)
+MainMenu2_img_health_txt.set_pos(int(0),int(100))
+MainMenu2_img_health_txt.set_size(128,20)
+MainMenu2_img_health_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_health_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_health_txt.set_text("视频通话")
+MainMenu2_img_health_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
 MainMenu2_num+=1
 MainMenu2x+=1
 
+#表盘
+MainMenu2_Watchface = MainMenu2_til.add_tile(MainMenu2_num,0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_Watchface)
+label_text.set_pos(0, 0)
+label_text.set_size(0, 0)
+label_text.set_text("{}".format(MainMenu2_num))
+MainMenu2_num+=1
+MainMenu2x+=1
+
+
+
 #通讯录
 MainMenu2_contacts = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
 label_text = lv.label(MainMenu2_contacts)
@@ -145,168 +216,79 @@ MainMenu2_img_contacts_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv
 MainMenu2_num+=1
 MainMenu2x+=1
 
-#短信
-MainMenu2_SMS = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
-label_text = lv.label(MainMenu2_SMS)
-label_text.set_pos(0, 0)
-label_text.set_size(0, 0)
-label_text.set_text("{}".format(MainMenu2_num))
-MainMenu2_img_sms = lv.img(MainMenu2_SMS)
-MainMenu2_img_sms.set_size(80,80)
-MainMenu2_img_sms.set_pos(24,10)
-MainMenu2_img_sms.set_src("U:/static/IMAGE_ONE_PAGE_SMS.png")
-MainMenu2_img_sms.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_sms.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-MainMenu2_img_sms_txt = lv.label(MainMenu2_SMS)
-MainMenu2_img_sms_txt.set_pos(int(0),int(100))
-MainMenu2_img_sms_txt.set_size(128,20)
-MainMenu2_img_sms_txt.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_sms_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-MainMenu2_img_sms_txt.set_text("短信")
-MainMenu2_img_sms_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
-MainMenu2_num+=1
-MainMenu2x+=1
 
-#微聊
-MainMenu2_wechat = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
-label_text = lv.label(MainMenu2_wechat)
+#拨号盘
+MainMenu2_phone = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_phone)
 label_text.set_pos(0, 0)
 label_text.set_size(0, 0)
 label_text.set_text("{}".format(MainMenu2_num))
-MainMenu2_img_wechat = lv.img(MainMenu2_wechat)
-MainMenu2_img_wechat.set_size(80,80)
-MainMenu2_img_wechat.set_pos(24,10)
-MainMenu2_img_wechat.set_src("U:/static/IMAGE_ONE_PAGE_WECHAT.png")
-MainMenu2_img_wechat.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_wechat.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+MainMenu2_img_phone = lv.img(MainMenu2_phone)
+MainMenu2_img_phone.set_size(80,80)
+MainMenu2_img_phone.set_pos(24,10)
+MainMenu2_img_phone.set_src("U:/static/IMAGE_ONE_PAGE_CALL.png")
+MainMenu2_img_phone.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_phone.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-MainMenu2_img_wechat_txt = lv.label(MainMenu2_wechat)
-MainMenu2_img_wechat_txt.set_pos(int(0),int(100))
-MainMenu2_img_wechat_txt.set_size(128,20)
-MainMenu2_img_wechat_txt.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_wechat_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-MainMenu2_img_wechat_txt.set_text("微聊")
-MainMenu2_img_wechat_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+MainMenu2_img_phone_text = lv.label(MainMenu2_phone)
+MainMenu2_img_phone_text.set_pos(int(0),int(100))
+MainMenu2_img_phone_text.set_size(128,20)
+MainMenu2_img_phone_text.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_phone_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_phone_text.set_text("拨号盘")
+MainMenu2_img_phone_text.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
 MainMenu2_num+=1
 MainMenu2x+=1
 
-#健康测量
-# MainMenu2_heartrate = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
-# label_text = lv.label(MainMenu2_heartrate)
-# label_text.set_pos(0, 0)
-# label_text.set_size(0, 0)
-# label_text.set_text("{}".format(MainMenu2_num))
-# MainMenu2_img_health = lv.img(MainMenu2_heartrate)
-# MainMenu2_img_health.set_size(80,80)
-# MainMenu2_img_health.set_pos(24,10)
-# MainMenu2_img_health.set_src("U:/static/IMAGE_ONE_PAGE_HEALTH.png")
-# MainMenu2_img_health.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu2_img_health.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# MainMenu2_img_health_txt = lv.label(MainMenu2_heartrate)
-# MainMenu2_img_health_txt.set_pos(int(0),int(100))
-# MainMenu2_img_health_txt.set_size(128,20)
-# MainMenu2_img_health_txt.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu2_img_health_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu2_img_health_txt.set_text("健康测量")
-# MainMenu2_img_health_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
-# MainMenu2_num+=1
-# MainMenu2x+=1
-
-#视频通话
-MainMenu2_camera_video = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
-label_text = lv.label(MainMenu2_camera_video)
+#相机
+MainMenu2_camera = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_camera)
 label_text.set_pos(0, 0)
 label_text.set_size(0, 0)
 label_text.set_text("{}".format(MainMenu2_num))
-MainMenu2_img_camera_video = lv.img(MainMenu2_camera_video)
-MainMenu2_img_camera_video.set_size(80,80)
-MainMenu2_img_camera_video.set_pos(24,10)
-MainMenu2_img_camera_video.set_src("U:/static/IMAGE_ONE_PAGE_VIDEOCALL.png")
-MainMenu2_img_camera_video.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_camera_video.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-MainMenu2_img_camera_video_txt = lv.label(MainMenu2_camera_video)
-MainMenu2_img_camera_video_txt.set_pos(int(0),int(100))
-MainMenu2_img_camera_video_txt.set_size(128,20)
-MainMenu2_img_camera_video_txt.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_camera_video_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-MainMenu2_img_camera_video_txt.set_text("视频通话")
-MainMenu2_img_camera_video_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+MainMenu2_img_camera = lv.img(MainMenu2_camera)
+MainMenu2_img_camera.set_size(80,80)
+MainMenu2_img_camera.set_pos(24,10)
+MainMenu2_img_camera.set_src("U:/static/IMAGE_ONE_PAGE_CAMERA.png")
+MainMenu2_img_camera.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_camera.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_camera_txt = lv.label(MainMenu2_camera)
+MainMenu2_img_camera_txt.set_pos(int(0),int(100))
+MainMenu2_img_camera_txt.set_size(128,20)
+MainMenu2_img_camera_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_camera_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_camera_txt.set_text("相机")
+MainMenu2_img_camera_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
 MainMenu2_num+=1
 MainMenu2x+=1
 
-# #相机
-# MainMenu2_camera = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
-# label_text = lv.label(MainMenu2_camera)
-# label_text.set_pos(0, 0)
-# label_text.set_size(0, 0)
-# label_text.set_text("{}".format(MainMenu2_num))
-# MainMenu2_img_camera = lv.img(MainMenu2_camera)
-# MainMenu2_img_camera.set_size(80,80)
-# MainMenu2_img_camera.set_pos(24,10)
-# MainMenu2_img_camera.set_src("U:/static/IMAGE_ONE_PAGE_CAMERA.png")
-# MainMenu2_img_camera.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu2_img_camera.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# MainMenu2_img_camera_txt = lv.label(MainMenu2_camera)
-# MainMenu2_img_camera_txt.set_pos(int(0),int(100))
-# MainMenu2_img_camera_txt.set_size(128,20)
-# MainMenu2_img_camera_txt.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu2_img_camera_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu2_img_camera_txt.set_text("相机")
-# MainMenu2_img_camera_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
-# MainMenu2_num+=1
-# MainMenu2x+=1
-
-
-# #相册
-# MainMenu2_camera_album = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
-# label_text = lv.label(MainMenu2_camera_album)
-# label_text.set_pos(0, 0)
-# label_text.set_size(0, 0)
-# label_text.set_text("{}".format(MainMenu2_num))
-# MainMenu2_img_camera_album = lv.img(MainMenu2_camera_album)
-# MainMenu2_img_camera_album.set_size(80,80)
-# MainMenu2_img_camera_album.set_pos(24,10)
-# MainMenu2_img_camera_album.set_src("U:/static/IMAGE_ONE_PAGE_ALBUM.png")
-# MainMenu2_img_camera_album.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu2_img_camera_album.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# MainMenu2_img_camera_album_txt = lv.label(MainMenu2_camera_album)
-# MainMenu2_img_camera_album_txt.set_pos(int(0),int(100))
-# MainMenu2_img_camera_album_txt.set_size(128,20)
-# MainMenu2_img_camera_album_txt.add_flag(lv.obj.FLAG.CLICKABLE)
-# MainMenu2_img_camera_album_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# MainMenu2_img_camera_album_txt.set_text("相册")
-# MainMenu2_img_camera_album_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
-# MainMenu2_num+=1
-# MainMenu2x+=1
 
-#工具箱
-MainMenu2_toolbox = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
-label_text = lv.label(MainMenu2_toolbox)
+#相册
+MainMenu2_camera_album = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_camera_album)
 label_text.set_pos(0, 0)
 label_text.set_size(0, 0)
 label_text.set_text("{}".format(MainMenu2_num))
-MainMenu2_img_toolbox = lv.img(MainMenu2_toolbox)
-MainMenu2_img_toolbox.set_size(80,80)
-MainMenu2_img_toolbox.set_pos(24,10)
-MainMenu2_img_toolbox.set_src("U:/static/IMAGE_ONE_PAGE_TOOLS.png")
-MainMenu2_img_toolbox.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_toolbox.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-MainMenu2_img_toolbox_txt = lv.label(MainMenu2_toolbox)
-MainMenu2_img_toolbox_txt.set_pos(int(0),int(100))
-MainMenu2_img_toolbox_txt.set_size(128,20)
-MainMenu2_img_toolbox_txt.add_flag(lv.obj.FLAG.CLICKABLE)
-MainMenu2_img_toolbox_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-MainMenu2_img_toolbox_txt.set_text("工具箱")
-MainMenu2_img_toolbox_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+MainMenu2_img_camera_album = lv.img(MainMenu2_camera_album)
+MainMenu2_img_camera_album.set_size(80,80)
+MainMenu2_img_camera_album.set_pos(24,10)
+MainMenu2_img_camera_album.set_src("U:/static/IMAGE_ONE_PAGE_ALBUM.png")
+MainMenu2_img_camera_album.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_camera_album.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_camera_album_txt = lv.label(MainMenu2_camera_album)
+MainMenu2_img_camera_album_txt.set_pos(int(0),int(100))
+MainMenu2_img_camera_album_txt.set_size(128,20)
+MainMenu2_img_camera_album_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_camera_album_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_camera_album_txt.set_text("相册")
+MainMenu2_img_camera_album_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
 MainMenu2_num+=1
 MainMenu2x+=1
 
+
+
 #设置
 MainMenu2_setting = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
 #MainMenu2_setting.set_tile_act(0,0,lv.ANIM.ON)
@@ -333,6 +315,42 @@ MainMenu2x+=1
 
 
 
+# #短信
+# MainMenu2_SMS = MainMenu2_til.add_tile(MainMenu2x, 0,  lv.DIR.LEFT | lv.DIR.RIGHT)
+# label_text = lv.label(MainMenu2_SMS)
+# label_text.set_pos(0, 0)
+# label_text.set_size(0, 0)
+# label_text.set_text("{}".format(MainMenu2_num))
+# MainMenu2_img_sms = lv.img(MainMenu2_SMS)
+# MainMenu2_img_sms.set_size(80,80)
+# MainMenu2_img_sms.set_pos(24,10)
+# MainMenu2_img_sms.set_src("U:/static/IMAGE_ONE_PAGE_SMS.png")
+# MainMenu2_img_sms.add_flag(lv.obj.FLAG.CLICKABLE)
+# MainMenu2_img_sms.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# MainMenu2_img_sms_txt = lv.label(MainMenu2_SMS)
+# MainMenu2_img_sms_txt.set_pos(int(0),int(100))
+# MainMenu2_img_sms_txt.set_size(128,20)
+# MainMenu2_img_sms_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+# MainMenu2_img_sms_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# MainMenu2_img_sms_txt.set_text("短信")
+# MainMenu2_img_sms_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+# MainMenu2_num+=1
+# MainMenu2x+=1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
 
 
@@ -349,13 +367,14 @@ class MainMenuScreen(Screen):
         MainMenu2_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "Phone")), lv.EVENT.CLICKED, None)
         MainMenu2_img_toolbox.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "toolbox")), lv.EVENT.CLICKED, None)
         MainMenu2_img_setting.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "setting")), lv.EVENT.CLICKED, None)
-        MainMenu2_img_camera_video.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_video")), lv.EVENT.CLICKED, None)
+        MainMenu2_img_add_friends.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "toolbox")), lv.EVENT.CLICKED, None)
+        # MainMenu2_img_camera_video.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_video")), lv.EVENT.CLICKED, None)
         # MainMenu2_img_camera.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera")), lv.EVENT.CLICKED, None)
         # MainMenu2_img_camera_album.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "camera_album")), lv.EVENT.CLICKED, None)
         MainMenu2_img_contacts.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e,  "contacts")), lv.EVENT.CLICKED, None)
         MainMenu2_img_wechat.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "wechat")), lv.EVENT.CLICKED, None)
         # MainMenu2_img_spo2.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "spo2")), lv.EVENT.CLICKED, None)
-        MainMenu2_img_sms.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "popup")), lv.EVENT.CLICKED, None)
+        #MainMenu2_img_sms.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "popup")), lv.EVENT.CLICKED, None)
         
 
         EventMesh.subscribe("watch_top_show", self.watch_top_show)
@@ -363,9 +382,9 @@ class MainMenuScreen(Screen):
         
     def initialization(self):
         self.watchface.initialization(MainMenu2_Watchface)
-        
+        print("self.menu_id",self.menu_id)
         if self.menu_id =="0":
-            MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF) 
+            MainMenu2_til.set_tile_id(4,0,lv.ANIM.OFF) 
         # if self.meta_info in globals() :
         #     MainMenu2_til.set_tile_id(self.meta_info[0],self.meta_info[1],lv.ANIM.OFF)    
         pass#
@@ -377,7 +396,7 @@ class MainMenuScreen(Screen):
         if code == lv.EVENT.SCROLL_END:
             pass
     def watch_top_show(self, event, msg): #
-        MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)  
+        MainMenu2_til.set_tile_id(4,0,lv.ANIM.OFF)  
         
     def img_cb(self, e, msg):
         state = EventMesh.publish("get_key_board", "key_board")
@@ -403,7 +422,7 @@ class MainMenuScreen(Screen):
         self.watchface.timer_update.stop()
 
     def done_return(self):
-        MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+        MainMenu2_til.set_tile_id(4,0,lv.ANIM.OFF)
        
     def btn1_release(self):
         flag = EventMesh.publish("get_lcd_state")
@@ -412,8 +431,9 @@ class MainMenuScreen(Screen):
         else:
             if MainMenu2_til.get_tile_act() != None:
                 id = MainMenu2_til.get_tile_act().get_child(0).get_text()
-                if id != "0":
-                    MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+                #if id != "0":
+
+                MainMenu2_til.set_tile_id(4,0,lv.ANIM.OFF)
    
     def return_setiing(self, event, msg):
         MainMenu2_til.set_tile_id(7,0,lv.ANIM.OFF)
@@ -424,53 +444,56 @@ class MainMenuScreen(Screen):
         flag = EventMesh.publish("get_lcd_state")
         if MainMenu2_til.get_tile_act() != None:
             id = MainMenu2_til.get_tile_act().get_child(0).get_text()
-            if id == "0":
+            if id == "4":
                 if flag == 1:
                     EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
                 else:
                     EventMesh.publish(constants.EVENT.SYSTEM_UP)
             else:
                 if flag == 1:
-                    MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+                    MainMenu2_til.set_tile_id(4,0,lv.ANIM.OFF)
                 else:
                     EventMesh.publish(constants.EVENT.SYSTEM_UP)
         else:
             if flag == 1:
-                MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+                MainMenu2_til.set_tile_id(4,0,lv.ANIM.OFF)
             else:
                 EventMesh.publish(constants.EVENT.SYSTEM_UP)
 
     def done_bottom_to_top(self):
         id = MainMenu2_til.get_tile_act().get_child(0).get_text()
-        if id == "0":
+        if id == "4":
             EventMesh.publish("load_screen", {"screen": "call_log"})
         self.menu_id = id
 
     def done_top_to_bottom(self):
         id = MainMenu2_til.get_tile_act().get_child(0).get_text()
-        if id == "0":
+        if id == "4":
             EventMesh.publish("load_screen", {"screen": "popup"})
         self.menu_id = id
     def done_left_to_right(self):
-        id = MainMenu2_til.get_tile_act().get_child(0).get_text()
-        print("done_left_to_right:ID{}".format(id))
-        if id == "0":
-            MainMenu2_til.set_tile_id(MainMenu2_num-2,0,lv.ANIM.OFF)
-        elif self.menu_id != '2' and id == '1':
-            MainMenu2_til.set_tile_id(MainMenu2_num-2,0,lv.ANIM.OFF) 
         self.menu_id = id
+        # id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+        # print("done_left_to_right:ID{}".format(id))
+        # if id == "0":
+        #     MainMenu2_til.set_tile_id(MainMenu2_num-2,0,lv.ANIM.OFF)
+        # elif self.menu_id != '2' and id == '1':
+        #     MainMenu2_til.set_tile_id(MainMenu2_num-2,0,lv.ANIM.OFF) 
+        # self.menu_id = id
+        pass
     def done_right_to_left(self):
-        id = MainMenu2_til.get_tile_act().get_child(0).get_text()
-        print("done_right_to_left:ID{}".format(id))
-        if id == "0":
-            MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
-        elif (self.menu_id != str(MainMenu2_num-2) ) and id == str(MainMenu2_num-1) :
-            MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
-        self.menu_id = id   
-
+        self.menu_id = id
+        # id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+        # print("done_right_to_left:ID{}".format(id))
+        # if id == "0":
+        #     MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+        # elif (self.menu_id != str(MainMenu2_num-2) ) and id == str(MainMenu2_num-1) :
+        #     MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+        # self.menu_id = id   
+        pass
     def Close(self):
         self.watchface.Close()
         print("main_menu Close !!!!!!!!")
-        self.menu_id = '1'
+        # self.menu_id = '0'
         return
 
index de287fb..9d0570b 100644 (file)
@@ -3,7 +3,7 @@ import lvgl as lv
 import ql_fs
 import EventMesh
 from misc import Power
-from ui import style_screen,style_font_youyuan_20,style_btn,style_img,Screen,style_contact_btn,style_bar,style_bar_indic
+from ui import style_screen,style_font_youyuan_20_gray,style_screen_btn_1_main_main_default,style_font_youyuan_20,style_btn,style_img,Screen,style_contact_btn,style_bar,style_bar_indic
 import constants
 import osTimer
 import audio
@@ -12,6 +12,7 @@ import ujson
 
 # -------------------------------------------setting screen----------------------------------------------------------
 
+
 set_icon_x = 25
 set_icon_y = 25
 
@@ -22,8 +23,8 @@ style_volume_btn.set_border_width(0)
 style_volume_btn.set_bg_color(lv.color_make(0x80, 0x80, 0x80))
 
 
-
 setting_cont_y = 5
+setting_cont_offset = 40
 setting_screen = lv.obj()
 print("setting_screen")
 setting_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
@@ -56,8 +57,8 @@ setting_cont_style.set_pad_bottom(0)
 
 
 setting_cont = lv.obj(setting_screen)
-setting_cont.set_pos(0, 0)
-setting_cont.set_size(128, 128)
+setting_cont.set_pos(0, 5)
+setting_cont.set_size(128, 123)
 setting_cont.add_style(setting_cont_style,lv.PART.MAIN | lv.STATE.DEFAULT)
 
 # setting_language = lv.btn(setting_cont)
@@ -78,12 +79,18 @@ setting_cont.add_style(setting_cont_style,lv.PART.MAIN | lv.STATE.DEFAULT)
 # setting_language_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 #setting_cont_y += 60
 
+setting_dialswitch_img_btn_1 = lv.btn(setting_cont)
+setting_dialswitch_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_dialswitch_img_btn_1.set_size(120,35)
+setting_dialswitch_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_dialswitch_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_dialswitch_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
 
 setting_dialswitch_label = lv.label(setting_cont)
 setting_dialswitch_label.set_text("表盘切换")
 setting_dialswitch_label.set_pos(34, setting_cont_y+5)
 setting_dialswitch_label.set_size(128-34, 35)
-setting_dialswitch_label.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_dialswitch_label.add_flag(lv.obj.FLAG.CLICKABLE)
 # setting_dialswitch_label.set_text_align(lv.ALIGN.LEFT_MID, 30, setting_cont_y)
 setting_dialswitch_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
 setting_dialswitch_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
@@ -91,10 +98,15 @@ setting_dialswitch_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STAT
 setting_dialswitch_img = lv.img(setting_cont)
 setting_dialswitch_img.set_pos(4, setting_cont_y)
 setting_dialswitch_img.set_size(set_icon_x, set_icon_y)
-setting_dialswitch_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_dialswitch_img.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_dialswitch_img.set_src("U:/static/menu_watch_switch.png")
 setting_dialswitch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-setting_cont_y+=35
+
+
+
+setting_cont_y+=setting_cont_offset
+
+
 
 
 # setting_themeswitch = lv.btn(setting_cont)
@@ -115,44 +127,66 @@ setting_cont_y+=35
 # setting_themeswitch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 #setting_cont_y+=60
 
+setting_imei_img_btn_1 = lv.btn(setting_cont)
+setting_imei_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_imei_img_btn_1.set_size(120,35)
+setting_imei_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_imei_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+setting_imei_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
 
 setting_imei_label = lv.label(setting_cont)
 setting_imei_label.set_text("设备IMEI号")
 setting_imei_label.set_pos(34, setting_cont_y+5)
 setting_imei_label.set_size(128-34, 35)
-setting_imei_label.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_imei_label.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_imei_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
 setting_imei_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 setting_imei_img = lv.img(setting_cont)
 setting_imei_img.set_pos(4, setting_cont_y)
 setting_imei_img.set_size(set_icon_x, set_icon_y)
-setting_imei_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_imei_img.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_imei_img.set_src("U:/static/menu_imei_qrcode.png")
 setting_imei_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-setting_cont_y+=35
 
 
+setting_cont_y+=setting_cont_offset
+
+setting_app_img_btn_1 = lv.btn(setting_cont)
+setting_app_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_app_img_btn_1.set_size(120,35)
+setting_app_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_app_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+setting_app_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+
 setting_app_label = lv.label(setting_cont)
 setting_app_label.set_text("手机APP")
 setting_app_label.set_pos(34, setting_cont_y+5)
 setting_app_label.set_size(128-34, 35)
-setting_app_label.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_app_label.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_app_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
 setting_app_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 setting_app_img = lv.img(setting_cont)
 setting_app_img.set_pos(4, setting_cont_y)
 setting_app_img.set_size(set_icon_x, set_icon_y)
-setting_app_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_app_img.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_app_img.set_src("U:/static/menu_app_qrcode.png")
 setting_app_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-setting_cont_y+=35
 
 
+setting_cont_y+=setting_cont_offset
+
+setting_bright_img_btn_1 = lv.btn(setting_cont)
+setting_bright_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_bright_img_btn_1.set_size(120,35)
+setting_bright_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_bright_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+setting_bright_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+
 setting_bright_label = lv.label(setting_cont)
 setting_bright_label.set_text("屏幕调节")
-setting_bright_label.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_bright_label.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_bright_label.set_size(128-34, 35)
 setting_bright_label.set_pos(34, setting_cont_y+5)
 setting_bright_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
@@ -161,15 +195,22 @@ setting_bright_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DE
 setting_bright_img = lv.img(setting_cont)
 setting_bright_img.set_pos(4, setting_cont_y)
 setting_bright_img.set_size(set_icon_x, set_icon_y)
-setting_bright_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_bright_img.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_bright_img.set_src("U:/static/menu_bright.png")
 setting_bright_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-setting_cont_y+=35
 
+setting_cont_y+=setting_cont_offset
+
+setting_volume_img_btn_1 = lv.btn(setting_cont)
+setting_volume_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_volume_img_btn_1.set_size(120,35)
+setting_volume_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_volume_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+setting_volume_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
 
 setting_volume_label = lv.label(setting_cont)
 setting_volume_label.set_text("铃声")
-setting_volume_label.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_volume_label.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_volume_label.set_size(128-34, 35)
 setting_volume_label.set_pos(34, setting_cont_y+5)
 setting_volume_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
@@ -178,15 +219,23 @@ setting_volume_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DE
 setting_volume_img = lv.img(setting_cont)
 setting_volume_img.set_pos(4, setting_cont_y)
 setting_volume_img.set_size(set_icon_x, set_icon_y)
-setting_volume_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_volume_img.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_volume_img.set_src("U:/static/menu_volume.png")
 setting_volume_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-setting_cont_y+=35
 
 
+setting_cont_y+=setting_cont_offset
+
+setting_restore_img_btn_1 = lv.btn(setting_cont)
+setting_restore_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_restore_img_btn_1.set_size(120,35)
+setting_restore_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_restore_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+setting_restore_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+
 setting_restore_label = lv.label(setting_cont)
 setting_restore_label.set_text("恢复出厂")
-setting_restore_label.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_restore_label.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_restore_label.set_size(128-34, 35)
 setting_restore_label.set_pos(34, setting_cont_y+5)
 setting_restore_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
@@ -195,15 +244,24 @@ setting_restore_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.D
 setting_restore_img = lv.img(setting_cont)
 setting_restore_img.set_pos(4, setting_cont_y)
 setting_restore_img.set_size(set_icon_x, set_icon_y)
-setting_restore_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_restore_img.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_restore_img.set_src("U:/static/menu_restore.png")
 setting_restore_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-setting_cont_y+=35
+
+
+setting_cont_y+=setting_cont_offset
+
+setting_poweroff_img_btn_1 = lv.btn(setting_cont)
+setting_poweroff_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_poweroff_img_btn_1.set_size(120,35)
+setting_poweroff_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_poweroff_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+setting_poweroff_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
 
 
 setting_poweroff_label = lv.label(setting_cont)
 setting_poweroff_label.set_text("关机")
-setting_poweroff_label.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_poweroff_label.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_poweroff_label.set_size(128-34, 35)
 setting_poweroff_label.set_pos(34, setting_cont_y+5)
 setting_poweroff_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
@@ -212,15 +270,51 @@ setting_poweroff_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.
 setting_poweroff_img = lv.img(setting_cont)
 setting_poweroff_img.set_pos(4, setting_cont_y)
 setting_poweroff_img.set_size(set_icon_x, set_icon_y)
-setting_poweroff_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_poweroff_img.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_poweroff_img.set_src("U:/static/menu_poweroff.png")
 setting_poweroff_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-setting_cont_y+=35
 
 
+setting_cont_y+=setting_cont_offset
+
+
+#重启setting_restart_img_btn_1
+setting_restart_img_btn_1 = lv.btn(setting_cont)
+setting_restart_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_restart_img_btn_1.set_size(120,35)
+setting_restart_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_restart_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+setting_restart_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+setting_restart_label = lv.label(setting_cont)
+setting_restart_label.set_text("重启")
+# setting_poweroff_label.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_restart_label.set_size(128-34, 35)
+setting_restart_label.set_pos(34, setting_cont_y+5)
+setting_restart_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_restart_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+setting_restart_img = lv.img(setting_cont)
+setting_restart_img.set_pos(4, setting_cont_y)
+setting_restart_img.set_size(set_icon_x, set_icon_y)
+# setting_poweroff_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_restart_img.set_src("U:/static/menu_poweroff.png")
+setting_restart_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+setting_cont_y+=setting_cont_offset
+
+setting_version_img_btn_1 = lv.btn(setting_cont)
+setting_version_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_version_img_btn_1.set_size(120,34)
+setting_version_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_version_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+setting_version_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+
 setting_version_label = lv.label(setting_cont)
 setting_version_label.set_text("关于设备")
-setting_version_label.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_version_label.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_version_label.set_size(128-34, 35)
 setting_version_label.set_pos(34, setting_cont_y+5)
 setting_version_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
@@ -229,15 +323,23 @@ setting_version_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.D
 setting_version_img = lv.img(setting_cont)
 setting_version_img.set_pos(4, setting_cont_y)
 setting_version_img.set_size(set_icon_x, set_icon_y)
-setting_version_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_version_img.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_version_img.set_src("U:/static/menu_version.png")
 setting_version_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-setting_cont_y+=35
 
 
+setting_cont_y+=setting_cont_offset
+
+setting_update_img_btn_1 = lv.btn(setting_cont)
+setting_update_img_btn_1.set_pos(int(0),int(setting_cont_y-5))
+setting_update_img_btn_1.set_size(120,35)
+setting_update_img_btn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+setting_update_img_btn_1.add_style(style_screen_btn_1_main_main_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+setting_update_img_btn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+
 setting_update_label = lv.label(setting_cont)
 setting_update_label.set_text("系统升级")
-setting_update_label.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_update_label.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_update_label.set_size(128-34, 35)
 setting_update_label.set_pos(34, setting_cont_y+5)
 setting_update_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
@@ -245,7 +347,7 @@ setting_update_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DE
 
 setting_update_label_btn = lv.label(setting_cont)
 setting_update_label_btn.set_text(" ")
-setting_update_label_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_update_label_btn.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_update_label_btn.set_size(128, 45)
 setting_update_label_btn.set_pos(0, setting_cont_y)
 setting_update_label_btn.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
@@ -254,43 +356,98 @@ setting_update_label_btn.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STAT
 setting_update_img = lv.img(setting_cont)
 setting_update_img.set_pos(4, setting_cont_y)
 setting_update_img.set_size(set_icon_x, set_icon_y)
-setting_update_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_update_img.add_flag(lv.obj.FLAG.CLICKABLE)
 setting_update_img.set_src("U:/static/menu_upgrade.png")
 setting_update_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
 
+
+
 class SettingScreen(Screen):
     NAME = "setting"
 
     def __init__(self):
         super().__init__()
+        self.is_sliding = 0
+        self.is_left_sliding = 0
         self.meta = setting_screen
         # setting_language.add_event_cb(lambda e: self.load_screen(e, {"screen": "language"}), lv.EVENT.CLICKED, None)
-        setting_dialswitch_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "dialswitch"})), lv.EVENT.CLICKED, None)
-        # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None)
-        setting_imei_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "imei"})), lv.EVENT.CLICKED, None)
-        setting_app_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "app"})), lv.EVENT.CLICKED, None)
-        setting_bright_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "brightness"})), lv.EVENT.CLICKED, None)
-        setting_volume_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "totalvolume"})), lv.EVENT.CLICKED, None)
-        setting_restore_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "restore"})), lv.EVENT.CLICKED, None)
-        setting_poweroff_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "poweroff"})), lv.EVENT.CLICKED, None)
-        setting_update_label_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "update"})), lv.EVENT.CLICKED, None)
-        setting_version_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "version"})), lv.EVENT.CLICKED, None)
+        # setting_dialswitch_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "dialswitch")), (lv.EVENT.CLICKED ), None)
+        # setting_imei_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "imei")), (lv.EVENT.CLICKED ), None)
+        # setting_app_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e,  "app")), (lv.EVENT.CLICKED ), None)
+        # setting_bright_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e,  "brightness")), (lv.EVENT.CLICKED ), None)
+        # setting_volume_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "totalvolume")), (lv.EVENT.CLICKED ), None)
+        # setting_restore_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e,  "restore")), (lv.EVENT.CLICKED ), None)
+        # setting_poweroff_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "poweroff")), (lv.EVENT.CLICKED ), None)
+        # setting_update_label_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "update")), (lv.EVENT.CLICKED ), None)
+        # setting_version_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "version")), (lv.EVENT.CLICKED ), None)
+
+        # img regist btton
+        # setting_language.add_event_cb(lambda e: self.load_screen(e, {"screen": "language"}), (lv.EVENT.CLICKED ), None)
+        # setting_dialswitch_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "dialswitch")), (lv.EVENT.CLICKED ), None)
+
+        setting_imei_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "imei")), (lv.EVENT.CLICKED ), None)
+        setting_app_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "app")), (lv.EVENT.CLICKED ), None)
+        setting_bright_img_btn_1.add_event_cb(lambda e:EventMesh.callback_wrapper( self.ui_setting_cb(e, "brightness")), (lv.EVENT.CLICKED ), None)
+        setting_volume_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "totalvolume")), (lv.EVENT.CLICKED ), None)
+        setting_restore_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "restore")), (lv.EVENT.CLICKED ), None)
+        setting_poweroff_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "poweroff")), (lv.EVENT.CLICKED ), None)
+        setting_restart_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "restart")), lv.EVENT.CLICKED, None)
+        setting_update_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "update")), (lv.EVENT.CLICKED ), None)
+        setting_version_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "version")), (lv.EVENT.CLICKED ), None)
+        setting_dialswitch_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "dialswitch")), lv.EVENT.CLICKED, None)
+
+        # # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None)
+        # setting_imei_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "imei")), lv.EVENT.PRESSING, None)
+        # setting_app_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e,  "app")), lv.EVENT.PRESSING, None)
+        # setting_bright_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e,  "brightness")), lv.EVENT.PRESSING, None)
+        # setting_volume_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "totalvolume")), lv.EVENT.PRESSING, None)
+        # setting_restore_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e,  "restore")), lv.EVENT.PRESSING, None)
+        # setting_poweroff_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "poweroff")), lv.EVENT.PRESSING, None)
+        # setting_update_label_btn.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "update")), lv.EVENT.PRESSING, None)
+        # setting_version_label.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "version")), lv.EVENT.PRESSING, None)
 
         # img regist btton
         # setting_language.add_event_cb(lambda e: self.load_screen(e, {"screen": "language"}), lv.EVENT.CLICKED, None)
-        setting_dialswitch_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "dialswitch"})), lv.EVENT.CLICKED, None)
+        setting_dialswitch_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "dialswitch")), lv.EVENT.PRESSING, None)
         # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None)
-        setting_imei_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "imei"})), lv.EVENT.CLICKED, None)
-        setting_app_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "app"})), lv.EVENT.CLICKED, None)
-        setting_bright_img.add_event_cb(lambda e:EventMesh.callback_wrapper( self.load_screen(e, {"screen": "brightness"})), lv.EVENT.CLICKED, None)
-        setting_volume_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "totalvolume"})), lv.EVENT.CLICKED, None)
-        setting_restore_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "restore"})), lv.EVENT.CLICKED, None)
-        setting_poweroff_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "poweroff"})), lv.EVENT.CLICKED, None)
-        setting_update_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "update"})), lv.EVENT.CLICKED, None)
-        setting_version_img.add_event_cb(lambda e: EventMesh.callback_wrapper(self.load_screen(e, {"screen": "version"})), lv.EVENT.CLICKED, None)
-
-    
+        setting_imei_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "imei")), lv.EVENT.PRESSING, None)
+        setting_app_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "app")), lv.EVENT.PRESSING, None)
+        setting_bright_img_btn_1.add_event_cb(lambda e:EventMesh.callback_wrapper( self.ui_setting_cb(e, "brightness")), lv.EVENT.PRESSING, None)
+        setting_volume_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "totalvolume")), lv.EVENT.PRESSING, None)
+        setting_restore_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "restore")), lv.EVENT.PRESSING, None)
+        setting_poweroff_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "poweroff")), lv.EVENT.PRESSING, None)
+        setting_restart_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "restart")), lv.EVENT.PRESSING, None)
+        setting_update_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "update")), lv.EVENT.PRESSING, None)
+        setting_version_img_btn_1.add_event_cb(lambda e: EventMesh.callback_wrapper(self.ui_setting_cb(e, "version")), lv.EVENT.PRESSING, None)
+   
+    def initialization(self):
+        self.is_left_sliding = 0
+        self.is_sliding = 0
+        pass
 
+    def ui_setting_cb(self, e, msg):
+        code = e.get_code()
+        EventMesh.publish("publish_message_event_ui",{"func":self.ui_setting_cb_do,"data":[code,msg]})  
+    def ui_setting_cb_do(self, data):
+        #code = e.get_code()
+
+        code = data[0]
+        msg = data[1]
+
+        #print("code!!!!!!!!",code,msg)
+        if code == lv.EVENT.PRESSING:
+            #print("PRESSING")
+            self.is_sliding += 1
+
+        elif  code == lv.EVENT.CLICKED:
+            #utime.sleep_ms(10)
+            print("1self.is_sliding",self.is_sliding)
+            if self.is_sliding <= 5 and self.is_sliding != 0:#如果是在滑动中则不需要点击事件
+                EventMesh.publish("load_screen", {"screen": "{}".format(msg)})
+                print("2self.is_sliding",self.is_sliding)
+                
+            self.is_sliding =0
+            
     def done_return(self):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
 
@@ -301,6 +458,23 @@ class SettingScreen(Screen):
     def btn8_press(self):
         EventMesh.publish("watch_top_show")
         EventMesh.publish("load_screen", {"screen": "main_menu"})
+    def done_bottom_to_top(self):
+        #print("done_bottom_to_top")
+        self.is_sliding = 0
+        pass
+
+    def done_top_to_bottom(self):
+        #print("done_top_to_bottom")
+        self.is_sliding = 0
+        pass
+    def done_left_to_right(self):
+        #print("done_left_to_right")
+        self.is_sliding = 0
+        pass
+    def done_right_to_left(self):
+        #print("done_right_to_left")
+        self.is_sliding = 0
+        pass  
 ##################################################################
 # -------------------------------------------language screen----------------------------------------------------------
 language_screen = lv.obj()
@@ -685,8 +859,8 @@ restore_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 restore_label = lv.label(restore_screen)
 restore_label.set_pos(0, 20)
-restore_label.set_size(128, 20)
-restore_label.set_text("恢复出厂设置?")
+restore_label.set_size(128, 40)
+restore_label.set_text("设备所有的数据将被清除,是否继续?")
 restore_label.set_long_mode(lv.label.LONG.WRAP)
 restore_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 restore_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
@@ -695,27 +869,27 @@ restore_confirm_label = lv.label(restore_screen)
 restore_confirm_label.set_text("确认")
 restore_confirm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 restore_confirm_label.set_size(64, 20)
-restore_confirm_label.set_pos(0,60)
+restore_confirm_label.set_pos(0,80)
 restore_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 
 restore_confirm = lv.label(restore_screen)
 restore_confirm.set_text(" ")
-restore_confirm.set_size(64, 40)
-restore_confirm.set_pos(0,60)
+restore_confirm.set_size(64, 48)
+restore_confirm.set_pos(0,80)
 restore_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
 
 restore_cancel_label = lv.label(restore_screen)
 restore_cancel_label.set_text("返回")
 restore_cancel_label.set_size(64, 20)
 restore_cancel_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-restore_cancel_label.set_pos(64,60)
+restore_cancel_label.set_pos(64,80)
 restore_cancel_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 restore_cancel = lv.label(restore_screen)
 restore_cancel.set_text(" ")
-restore_cancel.set_size(64, 40)
-restore_cancel.set_pos(64,60)
+restore_cancel.set_size(64, 48)
+restore_cancel.set_pos(64,80)
 restore_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
 
 
@@ -739,37 +913,38 @@ IMEI:\n\
 import versions 
 
 version_label1 = lv.label(version_screen)
-version_label1.set_pos(0, 5)
-version_label1.set_size(128, 40)
+version_label1.set_pos(10, 5)
+version_label1.set_size(118, 20)
 version_label1.set_long_mode(lv.label.LONG.WRAP)
-version_label1.set_text("Software Version:")
-version_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# version_label1.set_text("Software Version:")
+version_label1.set_text("产品名称:")
+version_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 10)
 version_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 
-version_label2 = lv.label(version_screen)
-version_label2.set_pos(0, 45)
-version_label2.set_size(128, 20)
-version_label2.set_long_mode(lv.label.LONG.WRAP)
-version_label2.set_text("Python Lvgl")
-version_label2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-version_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# version_label2 = lv.label(version_screen)
+# version_label2.set_pos(0, 45)
+# version_label2.set_size(128, 20)
+# version_label2.set_long_mode(lv.label.LONG.WRAP)
+# version_label2.set_text("Python Lvgl")
+# version_label2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# version_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-version_label3 = lv.label(version_screen)
-version_label3.set_pos(0, 65)
-version_label3.set_size(128, 20)
-version_label3.set_long_mode(lv.label.LONG.WRAP)
-version_label3.set_text("Version:")
-version_label3.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-version_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# version_label3 = lv.label(version_screen)
+# version_label3.set_pos(0, 65)
+# version_label3.set_size(128, 20)
+# version_label3.set_long_mode(lv.label.LONG.WRAP)
+# version_label3.set_text("Version:")
+# version_label3.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# version_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 version_label3 = lv.label(version_screen)
-version_label3.set_pos(0, 90)
-version_label3.set_size(128, 20)
+version_label3.set_pos(10, 25)
+version_label3.set_size(118, 40)
 version_label3.set_long_mode(lv.label.LONG.WRAP)
 version_label3.set_text(versions.Version)
-version_label3.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-version_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+version_label3.set_style_text_align(lv.TEXT_ALIGN.LEFT, 10)
+version_label3.add_style(style_font_youyuan_20_gray, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 # version_label4 = lv.label(version_screen)
 # version_label4.set_pos(0, version_label_y)
@@ -780,20 +955,20 @@ version_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 # version_label4.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 version_label5 = lv.label(version_screen)
-version_label5.set_pos(0, 115)
-version_label5.set_size(128, 20)
+version_label5.set_pos(10, 55)
+version_label5.set_size(118, 20)
 version_label5.set_long_mode(lv.label.LONG.WRAP)
-version_label5.set_text("Build Time:")
-version_label5.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label5.set_text("软件版本:")
+version_label5.set_style_text_align(lv.TEXT_ALIGN.LEFT, 10)
 version_label5.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 version_label6 = lv.label(version_screen)
-version_label6.set_pos(0, 140)
-version_label6.set_size(128, 40)
+version_label6.set_pos(10, 75)
+version_label6.set_size(118, 40)
 version_label6.set_long_mode(lv.label.LONG.WRAP)
 version_label6.set_text(versions.Build_Time)
-version_label6.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-version_label6.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+version_label6.set_style_text_align(lv.TEXT_ALIGN.LEFT, 10)
+version_label6.add_style(style_font_youyuan_20_gray, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 # version_label7 = lv.label(version_screen)
 # version_label7.set_pos(0, 210)
@@ -803,20 +978,20 @@ version_label6.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 # version_label7.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
 # version_label7.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-version_label8 = lv.label(version_screen)
-version_label8.set_pos(0, 180)
-version_label8.set_size(128, 20)
-version_label8.set_long_mode(lv.label.LONG.WRAP)
-version_label8.set_text("IMEI:")
-version_label8.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-version_label8.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# version_label8 = lv.label(version_screen)
+# version_label8.set_pos(0, 180)
+# version_label8.set_size(128, 20)
+# version_label8.set_long_mode(lv.label.LONG.WRAP)
+# version_label8.set_text("IMEI:")
+# version_label8.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# version_label8.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
-version_label9 = lv.label(version_screen)
-version_label9.set_pos(0, 200)
-version_label9.set_size(128, 38)
-version_label9.set_text(" ")
-version_label9.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-version_label9.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# version_label9 = lv.label(version_screen)
+# version_label9.set_pos(0, 200)
+# version_label9.set_size(128, 38)
+# version_label9.set_text(" ")
+# version_label9.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# version_label9.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
 
 
 
@@ -875,6 +1050,64 @@ class RestoreScreen(Screen):
         EventMesh.publish("load_screen", {"screen": "main_menu"})
 
 
+# -------------------------------------------restore screen----------------------------------------------------------
+restart_screen = lv.obj()
+print("restart_screen")
+restart_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+restart_confirm_label = lv.label(restart_screen)
+restart_confirm_label.set_text("确认")
+restart_confirm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+restart_confirm_label.set_size(64, 20)
+restart_confirm_label.set_pos(0,60)
+restart_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+restart_confirm = lv.label(restart_screen)
+restart_confirm.set_text(" ")
+restart_confirm.set_size(64, 40)
+restart_confirm.set_pos(0,60)
+restart_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
+
+restart_cancel_label = lv.label(restart_screen)
+restart_cancel_label.set_text("返回")
+restart_cancel_label.set_size(64, 20)
+restart_cancel_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+restart_cancel_label.set_pos(64,60)
+restart_cancel_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+restart_cancel = lv.label(restart_screen)
+restart_cancel.set_text(" ")
+restart_cancel.set_size(64, 40)
+restart_cancel.set_pos(64,60)
+restart_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
+
+class RestartScreen(Screen):
+    NAME = "restart"
+
+    def __init__(self):
+        super().__init__()
+        self.meta = restart_screen
+        restore_confirm.add_event_cb(lambda e: EventMesh.callback_wrapper(self.confirm(e)),lv.EVENT.CLICKED, None)
+        restart_cancel.add_event_cb(lambda e: EventMesh.callback_wrapper(self.concel(e)),lv.EVENT.CLICKED, None)
+        
+    
+    def confirm(self, e):
+        Power.powerRestart()
+
+    def concel(self, e):
+        EventMesh.publish("load_screen", {"screen": "setting"})
+
+    def done_return(self):
+        EventMesh.publish("load_screen", {"screen": "setting"})
+
+    def btn1_release(self):
+        EventMesh.publish("load_screen", {"screen": "setting"})
+        
+    def btn8_press(self):
+        EventMesh.publish("watch_top_show")
+        EventMesh.publish("load_screen", {"screen": "main_menu"})
+
 class UpdateScreen(Screen):
     NAME = "update"
 
@@ -906,8 +1139,8 @@ class VersionScreen(Screen):
         self.btn_count = 0
     def initialization(self):
         imei = EventMesh.publish(constants.EVENT.GET_IMEI)
-        print("imei",imei)
-        version_label9.set_text("{}".format(imei))
+        # print("imei",imei)
+        # version_label9.set_text("{}".format(imei))
 
     def Close(self):
         self.btn_count = 0
@@ -1045,6 +1278,7 @@ class PoweroffConfirmScreen(Screen):
         date_tmp = utime.localtime()
         time_tmp = utime.mktime(date_tmp) 
         EventMesh.publish("set_storage_config",["old_time",time_tmp])#关机保存一个是时间
+
         self.count = 0
         self.aud.play(1, 1, 'U:/static/R_VOLUME_SET_1.mp3')  #文件名前面要加上路径
         self.timer.start(1*1000,1,self.power_off)
index 6e03ed9..343bad7 100644 (file)
@@ -10,6 +10,6 @@ source "../services/microPython/config/config.in"
 source "../components/poc/poc_option.in"
 source "../components/GH301x/GH301x_option.in"
 source "../components/SC7A20/SC7A20_option.in"
-
+source "../components/juphoon/juphoon_option.in"
 endmenu
 
index d0ebceb..b6d1801 100644 (file)
@@ -957,7 +957,6 @@ frozen_mpy_list =   $(BUILD)/_boot.mpy \
                                        $(BUILD)/EventMesh.mpy \
                                        $(BUILD)/initTP.mpy \
                                        $(BUILD)/lcd.mpy \
-                                       $(BUILD)/location.mpy \
                                        $(BUILD)/mgr.mpy \
                                        $(BUILD)/protocol.mpy \
                                        $(BUILD)/ui.mpy \
index c09894c..0226a8e 100644 (file)
@@ -187,12 +187,20 @@ class FactoryModeLocationScreen(Screen):
         EventMesh.publish(constants.EVENT.START_LOCATION_TEST) #测试模式
 
     def timer_FactoryModeLocation_cb(self, *args, **kwargs):
-        EventMesh.publish("system_sleep_rest")#防止黑屏    
+        EventMesh.publish("system_sleep_rest")#防止黑屏  
+        self.timer_c += 1
+        if self.timer_c >= 7:
+            get_location_flag = EventMesh.publish("get_location_flag")
+            self.timer_c = 0
+            if get_location_flag != None:
+                if(get_location_flag == 0):
+                    EventMesh.publish(constants.EVENT.START_LOCATION_TEST) #测试模式
+                    self.time_count = utime.mktime(utime.localtime())
 
     def GET_LOCATION_DATA(self, event, msg):
-        print("GPS:{}".format(msg[0]))
-        print("WIFI:{}".format(msg[1]))
-        print("CALL:{}".format(msg[2]))
+        # print("GPS:{}".format(msg[0]))
+        # print("WIFI:{}".format(msg[1]))
+        # print("CALL:{}".format(msg[2]))
         EventMesh.publish("system_sleep_rest")#防止黑屏
         _DATA = ""
         time_tmp = utime.mktime(utime.localtime())
@@ -200,55 +208,36 @@ class FactoryModeLocationScreen(Screen):
         
         if len(msg[0]) > 1 : #GPS
             GNSS_DATA = "GNSS:------\n"
-            
+            gnss_data = msg[0][0]
+            if gnss_data :
+                GNSS_DATA = GNSS_DATA + "{},{},{}\n".format("A",gnss_data["latitude"],gnss_data["longitude"])
+                
+                self.time_GNSS =  time_tmp-self.time_count
+                EventMesh.txt_log("test location time:{}".format(self.time_GNSS))
+                self.time_count = utime.mktime(utime.localtime())      
+            else:
+                
+                GNSS_DATA = GNSS_DATA + "{},{},{}\n".format("V",0,0)
             _DATA += "定位时间:{};{}秒\n".format(self.time_GNSS,time_tmp-self.time_count)   
-            rmc_data = msg[0][1].split("RMC")
-            gsv_data = msg[0][1].split("GSV")
-            if len(rmc_data) >= 2 :
-                rmc_data = rmc_data[1:]
-                rmc_tmp = rmc_data[0].split(",")
-                if len(rmc_tmp) >= 2:
-                    GNSS_DATA = GNSS_DATA + "{},{},{}\n".format(rmc_tmp[2],rmc_tmp[3],rmc_tmp[5])
-                    if rmc_tmp[2] == 'A':
-                        if self.GNSS_status == 0:
-                            self.time_GNSS =  time_tmp-self.time_count
-                            EventMesh.txt_log("test location time:{}".format(self.time_GNSS))
-                        self.GNSS_status = 1
-                    else:
-                        self.GNSS_status = 0
-                        self.time_GNSS = 0
-                        
-            if len(gsv_data) >= 2 :  
-                gsv_data = gsv_data[1:]
-                GSV_dict= {}
-                for i in range(len(gsv_data)) :
-                    gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                    gsv_tmp = gsv_data[i].split(",")
-                    if len(gsv_tmp) < 7 :
-                        break
-                    gsv_tmp = gsv_tmp[4:]
-                    #print("gsv_tmp:{}".format(gsv_tmp))
-                    for i in range(len(gsv_tmp)) :
-                        if i % 4 == 0:
-                            GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                            print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                        if len(gsv_tmp)-i < 4:
-                            break 
+            
+            GSV_dict  = msg[0][1]     
+            #print("GET_LOCATION_DATA:{}".format(GSV_dict))
+            if GSV_dict :  
                 count = 0
                 try:
                     for j in range(200):
                         for key in GSV_dict :
                             
-                            if(int(key) != j):
+                            if(key != j):
                                 continue
                             #print("GSV_dict[key]:len:{}".format(len(GSV_dict[key])))
-                            if len(GSV_dict[key]) >= 1 :
-                                GNSS_DATA+="{:<3}:[{:<3}]".format(key,GSV_dict[key])#:<3 宽度为3左对齐
+                            if GSV_dict[key] >= 1 :
+                                GNSS_DATA+=" {:<3}:[{:<3}] ".format(key,GSV_dict[key])#:<3 宽度为3左对齐
                                 count+=1
                                 if count % 2 == 0:
                                     GNSS_DATA+="\n"
                         
-                        if count > 30:
+                        if count > 50:
                             break
                 except Exception as e:
                     usys.print_exception(e)
@@ -268,7 +257,8 @@ class FactoryModeLocationScreen(Screen):
                 _DATA += "CALL:------\n{}".format(msg[2][0])
                 #FactoryModeLocation_CALL_label.set_text("CALL:{}".format(msg[2][0]))
         print("GET_LOCATION_DATA:data:{}".format(_DATA))  
-        FactoryModeLocation_GNSS_label.set_text(_DATA)    
+        FactoryModeLocation_GNSS_label.set_text(_DATA) 
+        self.timer_c = 0   
     def Close(self):
         EventMesh.publish(constants.EVENT.CLOSE_LOCATION) 
         self.timer_FactoryModeLocation.stop()
index dd1bd82..de28d8f 100644 (file)
@@ -14,7 +14,7 @@ import osTimer
 import constants
 import sms
 from common import Lock, Abstract, LogAdapter
-from location import GPS, GPSMatch,CellLocator
+#from location import GPS, GPSMatch,CellLocator
 from misc import USB, Power, ADC
 from machine import ExtInt, Pin,Timer,RTC,UART
 import EventMesh
@@ -23,6 +23,7 @@ import audio
 from machine import I2C
 from Gsensor import SC7A20
 import pm
+import ure
 try :
     from Hsensor import GH3018
 except Exception as e:
@@ -1770,7 +1771,7 @@ class LocationManager(Abstract):
 
     def __init__(self):
         self.gps = None
-        self.match = GPSMatch()
+        #self.match = GPSMatch()
         self.timer_read_GPS_info = osTimer()
         self.wifi_data = []
         self.gps_data  = {}
@@ -1785,8 +1786,9 @@ class LocationManager(Abstract):
         self.location_thread_id  = 0
         self.location_queue = Queue(100)
         self.lpm_fd = None
-        #quecgnss.init()
-        #quecgnss.gnssEnable(0)
+        self.start_agps = 0
+        quecgnss.init()
+        quecgnss.gnssEnable(0)
     @staticmethod
     def get_date():
         return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
@@ -1796,20 +1798,20 @@ class LocationManager(Abstract):
         return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])
 
     def post_processor_after_instantiation(self):
-        _gps_cfg = {
-            "UARTn": UART.UART1,
-            "buadrate": 115200,
-            "databits": 8,
-            "parity": 0,
-            "stopbits": 1,
-            "flowctl": 0,
-            "PowerPin": Pin.GPIO2,
-            "StandbyPin": Pin.GPIO3,
-            "BackupPin": None,
-            "gps_mode": 0x01,
-        }
-        self.gps = GPS(**_gps_cfg)
-        self.gps.power_switch(0)#关闭GPS
+        # _gps_cfg = {
+        #     "UARTn": UART.UART1,
+        #     "buadrate": 115200,
+        #     "databits": 8,
+        #     "parity": 0,
+        #     "stopbits": 1,
+        #     "flowctl": 0,
+        #     "PowerPin": Pin.GPIO2,
+        #     "StandbyPin": Pin.GPIO3,
+        #     "BackupPin": None,
+        #     "gps_mode": 0x01,
+        # }
+        # self.gps = GPS(**_gps_cfg)
+        # self.gps.power_switch(0)#关闭GPS
         EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)
         EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
         EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)
@@ -1834,6 +1836,7 @@ class LocationManager(Abstract):
             return
         self.location_thread_id  = _thread.start_new_thread(self.location_thread, ())
         self.location_flag = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
         #self.gps_open(event, msg)
 
 
@@ -1848,11 +1851,13 @@ class LocationManager(Abstract):
         self.location_flag = 1
         #self.gps_open(event, msg)
         self.location_type = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
  
 
     def close_location(self, event, msg):
         self.location_flag = 0
         self.location_type = 0
+        self.timer_read_GPS_info.stop()
 
         
 
@@ -1863,8 +1868,6 @@ class LocationManager(Abstract):
 
     def WIFI_scan_open(self, event, msg):
         #print("WIFI_scan_open")
-        
-
         if wifiScan.getState() == False :
             self.wifi_data = []
             wifiScan.control(1)
@@ -1877,8 +1880,8 @@ class LocationManager(Abstract):
     def gps_open(self, event, msg):
         #print("publish:gps_open")
         #quecgnss.init()
-        quecgnss.gnssEnable(1)
-        self.gps.__gps_nmea_data_clean()
+        quecgnss.gnssEnable(2)
+        #self.gps.__gps_nmea_data_clean()
     def gps_close(self, event, msg):
         quecgnss.gnssEnable(0)
     def location_timer(self, *args, **kwargs):
@@ -1992,7 +1995,30 @@ class LocationManager(Abstract):
             else :
                 break
 
-
+    def GxGGA_latitude(self, gga_data):
+        """Parse latitude from GGA"""
+        if gga_data:
+            latitude_re = ure.search(r",[0-9]+\.[0-9]+,[NS],", gga_data)
+            if latitude_re:
+                latitude = latitude_re.group(0)[1:-3]
+                return str(float(latitude[:2]) + float(latitude[2:]) / 60)
+        return ""
+    def GxGGA_longitude(self, gga_data):
+        """Parse longitude from GGA"""
+        if gga_data:
+            longitude_re = ure.search(r",[0-9]+\.[0-9]+,[EW],", gga_data)
+            if longitude_re:
+                longitude = longitude_re.group(0)[1:-3]
+                return str(float(longitude[:3]) + float(longitude[3:]) / 60)
+        return ""
+
+    def GxGGA_altitude(self, gga_data):
+        """Parse altitude from GGA"""
+        if gga_data:
+            altitude_re = ure.search(r",-*[0-9]+\.[0-9]+,M,", gga_data)
+            if altitude_re:
+                return altitude_re.group(0)[1:-3]
+        return ""
     def location_thread(self):
         
         self.wifi_data = []
@@ -2000,22 +2026,27 @@ class LocationManager(Abstract):
         self.cell_data = []
         gnss_r_data = []
         self.GSV_sig_ok_count = 0
+        self.GSV_sig_very_ok_count = 0
         self.GGA_count = 0
         self.RMC_A_count = 0
+        # if self.start_agps == 1: #开启agps
+        #     self.start_agps = 0
+        #     quecgnss.configSet(2,1)
         if self.lpm_fd == None:
             self.lpm_fd = pm.create_wakelock("test_lock", len("test_lock"))
         pm.wakelock_lock(self.lpm_fd)
         print("location_thread:1")
         EventMesh.publish(constants.EVENT.GPSOPEN)
         print("location_thread:2")
-        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
-        
+        #self.timer_read_GPS_info.start(1000, 1, self.location_timer)
+        print("location_thread:3")
         #utime.sleep_ms(1000)
         self.location_timer_count = 0
         #quecgnss.read(4096)#去掉第一次错误数据
         #EventMesh.txt_log("START_LOCATION")
         # pm.autosleep(0)#唤醒
         # pm.sclkEx_set(0, 1, 5)
+        GSV_dict= {}
         while self.location_flag == 1:
             try :   
                 
@@ -2025,94 +2056,70 @@ class LocationManager(Abstract):
                 # if self.location_check_data_timer_count >= 3:
                 #     pm.autosleep(0)#唤醒
                 #     pm.sclkEx_set(0, 1, 5)
-                if self.location_check_data_timer_count >= 5 :#5秒查一次基站数据和wifi数据
+                if self.location_check_data_timer_count >= 1 :#3秒查一次基站数据和wifi数据
                     self.location_check_data_timer_count = 0
                     #print(self.location_timer_count)
-                    #GSV_dict= {}
+                    GSV_dict= {}
                     
                     #检查GNSS数据
                     if ( self.gps_data == {} or self.location_type == 1) and quecgnss.get_state() == 2:
-                        
-                        self.gps.__gps_nmea_data_clean()
-                        #gnss_r_data = [0,1]
-                        gnss_r_data = quecgnss.read(4096)
-                        #EventMesh.txt_log("gps Datalen:{}".format(gnss_r_data[0]))
-                        print("location gnss_r_data:len{}\n{}".format(gnss_r_data[0],gnss_r_data[1].decode()))
-                        #print("gnss_r_data len:{}".format(gnss_r_data[0]))
-                        if gnss_r_data[0] > 0 : #有数据
-                            tmp_ok_count = 0
-                            gsv_data = gnss_r_data[1].split("GSV")
-                                      
-                            if len(gsv_data) >= 2 :  
-                                gsv_data = gsv_data[1:]
-                                for i in range(len(gsv_data)) :
-                                    gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                                    gsv_tmp = gsv_data[i].split(",")
-                                    if len(gsv_tmp) < 7 :
-                                        break
-                                     
-                                    gsv_tmp = gsv_tmp[4:]
-                                    #print("gsv_tmp:{}".format(gsv_tmp))
-                                    for i in range(len(gsv_tmp)) :
-                                        if i % 4 == 0:
-                                            #GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                                            try:
-                                                #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
-                                                if gsv_tmp[i+3] != "" :
-                                                    if int(gsv_tmp[i+3])>=20:
-                                                        tmp_ok_count +=1    
-                                            except Exception as e:
-                                                usys.print_exception(e)
-                                            #print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                                        if len(gsv_tmp)-i < 4:
-                                            break 
-                                
-                                if(tmp_ok_count > self.GSV_sig_ok_count ):
-                                    self.GSV_sig_ok_count = tmp_ok_count
-                            
 
-                            # if len(match_gga_data) > 8:
-                            #     #print(match_gga_data)
-                            #     if(match_gga_data[7] ):
-                            #         gga_count_tmp = int(match_gga_data[7]) #可用卫星
-                            #         if(gga_count_tmp > self.GGA_count):
-                            #             self.GGA_count = gga_count_tmp
-                            print("GGA_count:{} GSV_sig_ok_coun:{} ".format(self.GGA_count,self.GSV_sig_ok_count))
+                        pass
+                        tmp_ok_count = 0
+                        tmp_very_ok_count = 0
+                        gsv_data = quecgnss.get_gsv()
+                        rmc_data = quecgnss.get_rmc()
+                        gga_data = quecgnss.get_gga()
+                        vtg_data = quecgnss.get_vtg()
+                        print("gsv:{}".format(quecgnss.get_gsv()))
+                        print("gga:{}".format(quecgnss.get_gga()))
+                        print("rmc:{}".format(quecgnss.get_rmc()))
+                        print("vtg:{}".format(quecgnss.get_vtg())) 
+                        for i in range(len(gsv_data)) :
                             
-                            match_rmc_data = self.match.GxRMC(gnss_r_data[1]).split(",")
-                             
-                            #print("match_rmc_data:\n{}".format(match_rmc_data))
-                            if len (match_rmc_data)>3: #有rmc数据
-                                if match_rmc_data[2] == 'A':
-                                    
-                                    if  self.gps.__check_gps_valid(gnss_r_data[1].decode()): #数据齐全 :
-                                        
-                                        #print("hhhhhh:{}\n\n".format(self.gps.__gsv_data))
-                                        match_vtg_data = self.gps.__vtg_data.split(",")#self.match.GxVTG(gnss_r_data[1]).split(",")
-                                        match_gga_data = self.gps.__gga_data.split(",")#self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        #match_gga_data = self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        
-                                        EventMesh.txt_log("GGA:{}".format(match_gga_data))
-                                        # EventMesh.txt_log("VTG:{}".format(match_vtg_data))
-                                        # EventMesh.txt_log("RMC:{}".format(match_rmc_data)) 
-                                        # EventMesh.txt_log("timer:{} ok_count:{} count:{}\n".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))   
-                                        print("LOCATION_ok :time:{}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n".format(self.location_timer_count))
+                            if i % 2 == 0:
+                                if i+1 >= len(gsv_data) :
+                                    print("gsv_data num error!!")
+                                    break
+                                GSV_dict[gsv_data[i]] = gsv_data[i+1]
+                                #print("type:gsv_data{}".format(type(gsv_data[i+1])))
+                                try:
+                                    #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
+                                    if gsv_data[i+1] :
+                                        if (gsv_data[i+1])>=20:
+                                            tmp_ok_count +=1   
+                                        if (gsv_data[i+1])>=30:
+                                            tmp_very_ok_count +=1  
+                                            
+                                except Exception as e:
+                                    usys.print_exception(e)
+                                
+                        if(tmp_ok_count > self.GSV_sig_ok_count ):
+                            self.GSV_sig_ok_count = tmp_ok_count
+                        if(tmp_very_ok_count > self.GSV_sig_very_ok_count ):
+                            self.GSV_sig_very_ok_count = tmp_very_ok_count
+                        match_rmc_data = rmc_data.split(",")
+                        if len (match_rmc_data)>3: #有rmc数据
+                                 if match_rmc_data[2] == 'A':    
+                                    match_gga_data = gga_data.split(",")
+                                    if len(match_gga_data) >4: #数据全
+                                        match_vtg_data = vtg_data.split(",")
                                         gps_date = "%s,%s"%(match_rmc_data[9],match_rmc_data[1][:6])#日期
-                                        gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
+                                        #gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
                                         latitude = "0,N" #纬度
-                                        latitude_tmp = str(gps_data_tmp[1]).split(".")
+                                        latitude_tmp = str(self.GxGGA_latitude(gga_data)).split(".")
                                         if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
                                             latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
                                             latitude = "%s,%s"%(latitude,match_rmc_data[4] )
 
                                         longitude = "0,E"#经度
-                                        longitude_tmp = str(gps_data_tmp[0]).split(".")
+                                        longitude_tmp = str(self.GxGGA_longitude(gga_data)).split(".")
                                         if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
                                             longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
                                             longitude = "%s,%s"%(longitude,match_rmc_data[6] ) #match_rmc_data[6] + str(gnss_r_data[1])
                                         
                                         high = "0"#高度
-                                        high = str(gps_data_tmp[2])
+                                        high = str(self.GxGGA_altitude(gga_data))
                                         number = "0"#可用卫星
                                         precision = "5.8"#精度
                                         if len(match_gga_data)>5 :
@@ -2137,11 +2144,7 @@ class LocationManager(Abstract):
                                             "date":  gps_date,
                                             "precision":  precision
                                         }
-                                    else :
-                                        EventMesh.txt_log("gps数据不全")
-                        else :
-                            EventMesh.txt_log("gps 无数据")
-
+# ***********************************************************************************
 
 
                 #检查wifi数据
@@ -2159,9 +2162,8 @@ class LocationManager(Abstract):
 
                 if self.location_type == 1: #测试模式
                     self.location_timer_count = 0
-                    if len(gnss_r_data) >= 1:
-                        if gnss_r_data[0] > 0:
-                            EventMesh.publish("PUSH_LOCATION_DATA", [gnss_r_data,self.wifi_data,self.cell_data]) 
+                    
+                    EventMesh.publish("PUSH_LOCATION_DATA", [[self.gps_data,GSV_dict],self.wifi_data,self.cell_data]) 
                     if self.gps_data  != {} : #发送数据 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
                         self.location_queue.put(constants.PROTOCOL.UD_SEND)
@@ -2171,10 +2173,13 @@ class LocationManager(Abstract):
                 elif self.location_type == 0: #正常模式     
                     if self.gps_data  != {} or self.location_timer_count > 100: #or( self.wifi_data != [] and self.cell_data != []): 
                         if self.location_queue.empty() == False:#有定位队列
-                            EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
-                        upload_time = EventMesh.publish("get_upload_data")
-                        
-                            
+                            EventMesh.txt_log("LOCATION timer:{} ok:{} very_ok:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GSV_sig_very_ok_count))   
+                            #EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
+                        if self.gps_data  == {}: #定位超时,且信噪比多个大于30,下次启动agps
+                            if self.GSV_sig_very_ok_count > 3:#3个超30以上
+                                self.start_agps = 1
+                                EventMesh.txt_log("open agps:{}".format(GSV_dict))
+                        #upload_time = EventMesh.publish("get_upload_data")    
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #if upload_time > 200  : 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
@@ -2190,7 +2195,7 @@ class LocationManager(Abstract):
                         
                     if self.GSV_sig_ok_count <= 1 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 20: #超过40秒且信号大于30的不足3个
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位   
-                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} count:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))
+                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #break
                 # if self.location_type != 1 and self.location_timer_count >= 60*4 : #4分钟关闭
@@ -2209,9 +2214,11 @@ class LocationManager(Abstract):
                 #self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                 EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 
             utime.sleep_ms(500)
-        self.timer_read_GPS_info.stop()
-        self.gps.power_switch(0)
+
+        #self.timer_read_GPS_info.stop()
+        #self.gps.power_switch(0)
         wifiScan.control(0)
+        EventMesh.publish(constants.EVENT.GPSCLOSE)
         # if EventMesh.publish("get_lcd_state" ) == 0:#休眠的时候,恢复休眠
         #     pm.autosleep(1)
         #     pm.sclkEx_set(1, 1, 5)
index a5adfa3..2a8e5aa 100644 (file)
@@ -955,7 +955,6 @@ frozen_mpy_list =   $(BUILD)/_boot.mpy \
                                        $(BUILD)/EventMesh.mpy \
                                        $(BUILD)/initTP.mpy \
                                        $(BUILD)/lcd.mpy \
-                                       $(BUILD)/location.mpy \
                                        $(BUILD)/mgr.mpy \
                                        $(BUILD)/protocol.mpy \
                                        $(BUILD)/ui.mpy \
index 0b9a4ae..8a55c09 100644 (file)
@@ -14,7 +14,7 @@ import osTimer
 import constants
 import sms
 from common import Lock, Abstract, LogAdapter
-from location import GPS, GPSMatch,CellLocator
+#from location import GPS, GPSMatch,CellLocator
 from misc import USB, Power, ADC
 from machine import ExtInt, Pin,Timer,RTC,UART
 import EventMesh
@@ -23,6 +23,7 @@ import audio
 from machine import I2C
 from Gsensor import SC7A20
 import pm
+import ure
 try :
     from Hsensor import GH3018
 except Exception as e:
@@ -1971,7 +1972,7 @@ class LocationManager(Abstract):
 
     def __init__(self):
         self.gps = None
-        self.match = GPSMatch()
+        #self.match = GPSMatch()
         self.timer_read_GPS_info = osTimer()
         self.wifi_data = []
         self.gps_data  = {}
@@ -1986,8 +1987,9 @@ class LocationManager(Abstract):
         self.location_thread_id  = 0
         self.location_queue = Queue(100)
         self.lpm_fd = None
-        #quecgnss.init()
-        #quecgnss.gnssEnable(0)
+        self.start_agps = 0
+        quecgnss.init()
+        quecgnss.gnssEnable(0)
     @staticmethod
     def get_date():
         return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
@@ -1997,20 +1999,20 @@ class LocationManager(Abstract):
         return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])
 
     def post_processor_after_instantiation(self):
-        _gps_cfg = {
-            "UARTn": UART.UART1,
-            "buadrate": 115200,
-            "databits": 8,
-            "parity": 0,
-            "stopbits": 1,
-            "flowctl": 0,
-            "PowerPin": Pin.GPIO2,
-            "StandbyPin": Pin.GPIO3,
-            "BackupPin": None,
-            "gps_mode": 0x01,
-        }
-        self.gps = GPS(**_gps_cfg)
-        self.gps.power_switch(0)#关闭GPS
+        # _gps_cfg = {
+        #     "UARTn": UART.UART1,
+        #     "buadrate": 115200,
+        #     "databits": 8,
+        #     "parity": 0,
+        #     "stopbits": 1,
+        #     "flowctl": 0,
+        #     "PowerPin": Pin.GPIO2,
+        #     "StandbyPin": Pin.GPIO3,
+        #     "BackupPin": None,
+        #     "gps_mode": 0x01,
+        # }
+        # self.gps = GPS(**_gps_cfg)
+        # self.gps.power_switch(0)#关闭GPS
         EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)
         EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
         EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)
@@ -2035,6 +2037,7 @@ class LocationManager(Abstract):
             return
         self.location_thread_id  = _thread.start_new_thread(self.location_thread, ())
         self.location_flag = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
         #self.gps_open(event, msg)
 
 
@@ -2049,11 +2052,13 @@ class LocationManager(Abstract):
         self.location_flag = 1
         #self.gps_open(event, msg)
         self.location_type = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
  
 
     def close_location(self, event, msg):
         self.location_flag = 0
         self.location_type = 0
+        self.timer_read_GPS_info.stop()
 
         
 
@@ -2078,8 +2083,8 @@ class LocationManager(Abstract):
     def gps_open(self, event, msg):
         #print("publish:gps_open")
         #quecgnss.init()
-        quecgnss.gnssEnable(1)
-        self.gps.__gps_nmea_data_clean()
+        quecgnss.gnssEnable(2)
+        #self.gps.__gps_nmea_data_clean()
     def gps_close(self, event, msg):
         quecgnss.gnssEnable(0)
     def location_timer(self, *args, **kwargs):
@@ -2193,7 +2198,30 @@ class LocationManager(Abstract):
             else :
                 break
 
-
+    def GxGGA_latitude(self, gga_data):
+        """Parse latitude from GGA"""
+        if gga_data:
+            latitude_re = ure.search(r",[0-9]+\.[0-9]+,[NS],", gga_data)
+            if latitude_re:
+                latitude = latitude_re.group(0)[1:-3]
+                return str(float(latitude[:2]) + float(latitude[2:]) / 60)
+        return ""
+    def GxGGA_longitude(self, gga_data):
+        """Parse longitude from GGA"""
+        if gga_data:
+            longitude_re = ure.search(r",[0-9]+\.[0-9]+,[EW],", gga_data)
+            if longitude_re:
+                longitude = longitude_re.group(0)[1:-3]
+                return str(float(longitude[:3]) + float(longitude[3:]) / 60)
+        return ""
+
+    def GxGGA_altitude(self, gga_data):
+        """Parse altitude from GGA"""
+        if gga_data:
+            altitude_re = ure.search(r",-*[0-9]+\.[0-9]+,M,", gga_data)
+            if altitude_re:
+                return altitude_re.group(0)[1:-3]
+        return ""
     def location_thread(self):
         
         self.wifi_data = []
@@ -2201,22 +2229,27 @@ class LocationManager(Abstract):
         self.cell_data = []
         gnss_r_data = []
         self.GSV_sig_ok_count = 0
+        self.GSV_sig_very_ok_count = 0
         self.GGA_count = 0
         self.RMC_A_count = 0
+        # if self.start_agps == 1: #开启agps
+        #     self.start_agps = 0
+        #     quecgnss.configSet(2,1)
         if self.lpm_fd == None:
             self.lpm_fd = pm.create_wakelock("test_lock", len("test_lock"))
         pm.wakelock_lock(self.lpm_fd)
         print("location_thread:1")
         EventMesh.publish(constants.EVENT.GPSOPEN)
         print("location_thread:2")
-        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
-        
+        #self.timer_read_GPS_info.start(1000, 1, self.location_timer)
+        print("location_thread:3")
         #utime.sleep_ms(1000)
         self.location_timer_count = 0
         #quecgnss.read(4096)#去掉第一次错误数据
         #EventMesh.txt_log("START_LOCATION")
         # pm.autosleep(0)#唤醒
         # pm.sclkEx_set(0, 1, 5)
+        GSV_dict= {}
         while self.location_flag == 1:
             try :   
                 
@@ -2226,94 +2259,70 @@ class LocationManager(Abstract):
                 # if self.location_check_data_timer_count >= 3:
                 #     pm.autosleep(0)#唤醒
                 #     pm.sclkEx_set(0, 1, 5)
-                if self.location_check_data_timer_count >= 5 :#5秒查一次基站数据和wifi数据
+                if self.location_check_data_timer_count >= 1 :#3秒查一次基站数据和wifi数据
                     self.location_check_data_timer_count = 0
                     #print(self.location_timer_count)
-                    #GSV_dict= {}
+                    GSV_dict= {}
                     
                     #检查GNSS数据
                     if ( self.gps_data == {} or self.location_type == 1) and quecgnss.get_state() == 2:
-                        
-                        self.gps.__gps_nmea_data_clean()
-                        #gnss_r_data = [0,1]
-                        gnss_r_data = quecgnss.read(4096)
-                        #EventMesh.txt_log("gps Datalen:{}".format(gnss_r_data[0]))
-                        # print("location gnss_r_data:len{}\n{}".format(gnss_r_data[0],gnss_r_data[1].decode()))
-                        #print("gnss_r_data len:{}".format(gnss_r_data[0]))
-                        if gnss_r_data[0] > 0 : #有数据
-                            tmp_ok_count = 0
-                            gsv_data = gnss_r_data[1].split("GSV")
-                                      
-                            if len(gsv_data) >= 2 :  
-                                gsv_data = gsv_data[1:]
-                                for i in range(len(gsv_data)) :
-                                    gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                                    gsv_tmp = gsv_data[i].split(",")
-                                    if len(gsv_tmp) < 7 :
-                                        break
-                                     
-                                    gsv_tmp = gsv_tmp[4:]
-                                    #print("gsv_tmp:{}".format(gsv_tmp))
-                                    for i in range(len(gsv_tmp)) :
-                                        if i % 4 == 0:
-                                            #GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                                            try:
-                                                #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
-                                                if gsv_tmp[i+3] != "" :
-                                                    if int(gsv_tmp[i+3])>=20:
-                                                        tmp_ok_count +=1    
-                                            except Exception as e:
-                                                usys.print_exception(e)
-                                            #print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                                        if len(gsv_tmp)-i < 4:
-                                            break 
-                                
-                                if(tmp_ok_count > self.GSV_sig_ok_count ):
-                                    self.GSV_sig_ok_count = tmp_ok_count
-                            
 
-                            # if len(match_gga_data) > 8:
-                            #     #print(match_gga_data)
-                            #     if(match_gga_data[7] ):
-                            #         gga_count_tmp = int(match_gga_data[7]) #可用卫星
-                            #         if(gga_count_tmp > self.GGA_count):
-                            #             self.GGA_count = gga_count_tmp
-                            print("GGA_count:{} GSV_sig_ok_coun:{} ".format(self.GGA_count,self.GSV_sig_ok_count))
+                        pass
+                        tmp_ok_count = 0
+                        tmp_very_ok_count = 0
+                        gsv_data = quecgnss.get_gsv()
+                        rmc_data = quecgnss.get_rmc()
+                        gga_data = quecgnss.get_gga()
+                        vtg_data = quecgnss.get_vtg()
+                        print("gsv:{}".format(quecgnss.get_gsv()))
+                        print("gga:{}".format(quecgnss.get_gga()))
+                        print("rmc:{}".format(quecgnss.get_rmc()))
+                        print("vtg:{}".format(quecgnss.get_vtg())) 
+                        for i in range(len(gsv_data)) :
                             
-                            match_rmc_data = self.match.GxRMC(gnss_r_data[1]).split(",")
-                             
-                            #print("match_rmc_data:\n{}".format(match_rmc_data))
-                            if len (match_rmc_data)>3: #有rmc数据
-                                if match_rmc_data[2] == 'A':
-                                    
-                                    if  self.gps.__check_gps_valid(gnss_r_data[1].decode()): #数据齐全 :
-                                        
-                                        #print("hhhhhh:{}\n\n".format(self.gps.__gsv_data))
-                                        match_vtg_data = self.gps.__vtg_data.split(",")#self.match.GxVTG(gnss_r_data[1]).split(",")
-                                        match_gga_data = self.gps.__gga_data.split(",")#self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        #match_gga_data = self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        
-                                        EventMesh.txt_log("GGA:{}".format(match_gga_data))
-                                        # EventMesh.txt_log("VTG:{}".format(match_vtg_data))
-                                        # EventMesh.txt_log("RMC:{}".format(match_rmc_data)) 
-                                        # EventMesh.txt_log("timer:{} ok_count:{} count:{}\n".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))   
-                                        print("LOCATION_ok :time:{}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n".format(self.location_timer_count))
+                            if i % 2 == 0:
+                                if i+1 >= len(gsv_data) :
+                                    print("gsv_data num error!!")
+                                    break
+                                GSV_dict[gsv_data[i]] = gsv_data[i+1]
+                                #print("type:gsv_data{}".format(type(gsv_data[i+1])))
+                                try:
+                                    #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
+                                    if gsv_data[i+1] :
+                                        if (gsv_data[i+1])>=20:
+                                            tmp_ok_count +=1   
+                                        if (gsv_data[i+1])>=30:
+                                            tmp_very_ok_count +=1  
+                                            
+                                except Exception as e:
+                                    usys.print_exception(e)
+                                
+                        if(tmp_ok_count > self.GSV_sig_ok_count ):
+                            self.GSV_sig_ok_count = tmp_ok_count
+                        if(tmp_very_ok_count > self.GSV_sig_very_ok_count ):
+                            self.GSV_sig_very_ok_count = tmp_very_ok_count
+                        match_rmc_data = rmc_data.split(",")
+                        if len (match_rmc_data)>3: #有rmc数据
+                                 if match_rmc_data[2] == 'A':    
+                                    match_gga_data = gga_data.split(",")
+                                    if len(match_gga_data) >4: #数据全
+                                        match_vtg_data = vtg_data.split(",")
                                         gps_date = "%s,%s"%(match_rmc_data[9],match_rmc_data[1][:6])#日期
-                                        gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
+                                        #gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
                                         latitude = "0,N" #纬度
-                                        latitude_tmp = str(gps_data_tmp[1]).split(".")
+                                        latitude_tmp = str(self.GxGGA_latitude(gga_data)).split(".")
                                         if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
                                             latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
                                             latitude = "%s,%s"%(latitude,match_rmc_data[4] )
 
                                         longitude = "0,E"#经度
-                                        longitude_tmp = str(gps_data_tmp[0]).split(".")
+                                        longitude_tmp = str(self.GxGGA_longitude(gga_data)).split(".")
                                         if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
                                             longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
                                             longitude = "%s,%s"%(longitude,match_rmc_data[6] ) #match_rmc_data[6] + str(gnss_r_data[1])
                                         
                                         high = "0"#高度
-                                        high = str(gps_data_tmp[2])
+                                        high = str(self.GxGGA_altitude(gga_data))
                                         number = "0"#可用卫星
                                         precision = "5.8"#精度
                                         if len(match_gga_data)>5 :
@@ -2338,11 +2347,7 @@ class LocationManager(Abstract):
                                             "date":  gps_date,
                                             "precision":  precision
                                         }
-                                    else :
-                                        EventMesh.txt_log("gps数据不全")
-                        else :
-                            EventMesh.txt_log("gps 无数据")
-
+# ***********************************************************************************
 
 
                 #检查wifi数据
@@ -2360,9 +2365,8 @@ class LocationManager(Abstract):
 
                 if self.location_type == 1: #测试模式
                     self.location_timer_count = 0
-                    if len(gnss_r_data) >= 1:
-                        if gnss_r_data[0] > 0:
-                            EventMesh.publish("PUSH_LOCATION_DATA", [gnss_r_data,self.wifi_data,self.cell_data]) 
+                    
+                    EventMesh.publish("PUSH_LOCATION_DATA", [[self.gps_data,GSV_dict],self.wifi_data,self.cell_data]) 
                     if self.gps_data  != {} : #发送数据 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
                         self.location_queue.put(constants.PROTOCOL.UD_SEND)
@@ -2372,10 +2376,13 @@ class LocationManager(Abstract):
                 elif self.location_type == 0: #正常模式     
                     if self.gps_data  != {} or self.location_timer_count > 100: #or( self.wifi_data != [] and self.cell_data != []): 
                         if self.location_queue.empty() == False:#有定位队列
-                            EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
-                        upload_time = EventMesh.publish("get_upload_data")
-                        
-                            
+                            EventMesh.txt_log("LOCATION timer:{} ok:{} very_ok:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GSV_sig_very_ok_count))   
+                            #EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
+                        if self.gps_data  == {}: #定位超时,且信噪比多个大于30,下次启动agps
+                            if self.GSV_sig_very_ok_count > 3:#3个超30以上
+                                self.start_agps = 1
+                                EventMesh.txt_log("open agps:{}".format(GSV_dict))
+                        #upload_time = EventMesh.publish("get_upload_data")    
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #if upload_time > 200  : 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
@@ -2391,7 +2398,7 @@ class LocationManager(Abstract):
                         
                     if self.GSV_sig_ok_count <= 1 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 20: #超过40秒且信号大于30的不足3个
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位   
-                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} count:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))
+                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #break
                 # if self.location_type != 1 and self.location_timer_count >= 60*4 : #4分钟关闭
@@ -2410,9 +2417,11 @@ class LocationManager(Abstract):
                 #self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                 EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 
             utime.sleep_ms(500)
-        self.timer_read_GPS_info.stop()
-        self.gps.power_switch(0)
+
+        #self.timer_read_GPS_info.stop()
+        #self.gps.power_switch(0)
         wifiScan.control(0)
+        EventMesh.publish(constants.EVENT.GPSCLOSE)
         # if EventMesh.publish("get_lcd_state" ) == 0:#休眠的时候,恢复休眠
         #     pm.autosleep(1)
         #     pm.sclkEx_set(1, 1, 5)
index 32485e2..73dffe4 100644 (file)
@@ -356,6 +356,8 @@ SRC_QSTR += \
                        source/modGsensor_SC7A20.c \
                        source/modHsensor.c \
                        source/modHsensor_GH3018.c \
+                       source/modVideoCall.c \
+                       source/modVideoCall_juphoon.c \
                        source/modrsa.c \
                        source/utils_crc32.c \
                        source/http_parser.c \
@@ -959,7 +961,6 @@ frozen_mpy_list =   $(BUILD)/_boot.mpy \
                                        $(BUILD)/EventMesh.mpy \
                                        $(BUILD)/initTP.mpy \
                                        $(BUILD)/lcd.mpy \
-                                       $(BUILD)/location.mpy \
                                        $(BUILD)/mgr.mpy \
                                        $(BUILD)/protocol.mpy \
                                        $(BUILD)/ui.mpy \
index c09894c..3d5f245 100644 (file)
@@ -173,7 +173,7 @@ class FactoryModeLocationScreen(Screen):
         self.time_count = 0
         self.time_GNSS = 0
         self.GNSS_status = 0
-
+        self.timer_c = 0
     def initialization(self):
         FactoryModeLocation_GNSS_label.set_text("GNSS:\n") 
         # FactoryModeLocation_WIFI_label.set_text("WIFI:")
@@ -187,12 +187,20 @@ class FactoryModeLocationScreen(Screen):
         EventMesh.publish(constants.EVENT.START_LOCATION_TEST) #测试模式
 
     def timer_FactoryModeLocation_cb(self, *args, **kwargs):
-        EventMesh.publish("system_sleep_rest")#防止黑屏    
+        EventMesh.publish("system_sleep_rest")#防止黑屏  
+        self.timer_c += 1
+        if self.timer_c >= 7:
+            get_location_flag = EventMesh.publish("get_location_flag")
+            self.timer_c = 0
+            if get_location_flag != None:
+                if(get_location_flag == 0):
+                    EventMesh.publish(constants.EVENT.START_LOCATION_TEST) #测试模式
+                    self.time_count = utime.mktime(utime.localtime())
 
     def GET_LOCATION_DATA(self, event, msg):
-        print("GPS:{}".format(msg[0]))
-        print("WIFI:{}".format(msg[1]))
-        print("CALL:{}".format(msg[2]))
+        # print("GPS:{}".format(msg[0]))
+        # print("WIFI:{}".format(msg[1]))
+        # print("CALL:{}".format(msg[2]))
         EventMesh.publish("system_sleep_rest")#防止黑屏
         _DATA = ""
         time_tmp = utime.mktime(utime.localtime())
@@ -200,55 +208,36 @@ class FactoryModeLocationScreen(Screen):
         
         if len(msg[0]) > 1 : #GPS
             GNSS_DATA = "GNSS:------\n"
-            
+            gnss_data = msg[0][0]
+            if gnss_data :
+                GNSS_DATA = GNSS_DATA + "{},{},{}\n".format("A",gnss_data["latitude"],gnss_data["longitude"])
+                
+                self.time_GNSS =  time_tmp-self.time_count
+                EventMesh.txt_log("test location time:{}".format(self.time_GNSS))
+                self.time_count = utime.mktime(utime.localtime())      
+            else:
+                
+                GNSS_DATA = GNSS_DATA + "{},{},{}\n".format("V",0,0)
             _DATA += "定位时间:{};{}秒\n".format(self.time_GNSS,time_tmp-self.time_count)   
-            rmc_data = msg[0][1].split("RMC")
-            gsv_data = msg[0][1].split("GSV")
-            if len(rmc_data) >= 2 :
-                rmc_data = rmc_data[1:]
-                rmc_tmp = rmc_data[0].split(",")
-                if len(rmc_tmp) >= 2:
-                    GNSS_DATA = GNSS_DATA + "{},{},{}\n".format(rmc_tmp[2],rmc_tmp[3],rmc_tmp[5])
-                    if rmc_tmp[2] == 'A':
-                        if self.GNSS_status == 0:
-                            self.time_GNSS =  time_tmp-self.time_count
-                            EventMesh.txt_log("test location time:{}".format(self.time_GNSS))
-                        self.GNSS_status = 1
-                    else:
-                        self.GNSS_status = 0
-                        self.time_GNSS = 0
-                        
-            if len(gsv_data) >= 2 :  
-                gsv_data = gsv_data[1:]
-                GSV_dict= {}
-                for i in range(len(gsv_data)) :
-                    gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                    gsv_tmp = gsv_data[i].split(",")
-                    if len(gsv_tmp) < 7 :
-                        break
-                    gsv_tmp = gsv_tmp[4:]
-                    #print("gsv_tmp:{}".format(gsv_tmp))
-                    for i in range(len(gsv_tmp)) :
-                        if i % 4 == 0:
-                            GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                            print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                        if len(gsv_tmp)-i < 4:
-                            break 
+            
+            GSV_dict  = msg[0][1]     
+            #print("GET_LOCATION_DATA:{}".format(GSV_dict))
+            if GSV_dict :  
                 count = 0
                 try:
                     for j in range(200):
                         for key in GSV_dict :
                             
-                            if(int(key) != j):
+                            if(key != j):
                                 continue
                             #print("GSV_dict[key]:len:{}".format(len(GSV_dict[key])))
-                            if len(GSV_dict[key]) >= 1 :
-                                GNSS_DATA+="{:<3}:[{:<3}]".format(key,GSV_dict[key])#:<3 宽度为3左对齐
+                            if GSV_dict[key] >= 1 :
+                                GNSS_DATA+=" {:<3}:[{:<3}] ".format(key,GSV_dict[key])#:<3 宽度为3左对齐
                                 count+=1
                                 if count % 2 == 0:
                                     GNSS_DATA+="\n"
                         
-                        if count > 30:
+                        if count > 50:
                             break
                 except Exception as e:
                     usys.print_exception(e)
@@ -268,7 +257,8 @@ class FactoryModeLocationScreen(Screen):
                 _DATA += "CALL:------\n{}".format(msg[2][0])
                 #FactoryModeLocation_CALL_label.set_text("CALL:{}".format(msg[2][0]))
         print("GET_LOCATION_DATA:data:{}".format(_DATA))  
-        FactoryModeLocation_GNSS_label.set_text(_DATA)    
+        FactoryModeLocation_GNSS_label.set_text(_DATA) 
+        self.timer_c = 0   
     def Close(self):
         EventMesh.publish(constants.EVENT.CLOSE_LOCATION) 
         self.timer_FactoryModeLocation.stop()
index 292abe3..1e0aeca 100644 (file)
@@ -23,6 +23,7 @@ import audio
 from machine import I2C
 from Gsensor import SC7A20
 import pm
+import ure
 try :
     from Hsensor import GH3018
 except Exception as e:
@@ -1802,8 +1803,9 @@ class LocationManager(Abstract):
         self.location_thread_id  = 0
         self.location_queue = Queue(100)
         self.lpm_fd = None
-        #quecgnss.init()
-        #quecgnss.gnssEnable(0)
+        self.start_agps = 0
+        quecgnss.init()
+        quecgnss.gnssEnable(0)
     @staticmethod
     def get_date():
         return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
@@ -1813,20 +1815,20 @@ class LocationManager(Abstract):
         return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])
 
     def post_processor_after_instantiation(self):
-        _gps_cfg = {
-            "UARTn": UART.UART1,
-            "buadrate": 115200,
-            "databits": 8,
-            "parity": 0,
-            "stopbits": 1,
-            "flowctl": 0,
-            "PowerPin": Pin.GPIO2,
-            "StandbyPin": Pin.GPIO3,
-            "BackupPin": None,
-            "gps_mode": 0x01,
-        }
-        self.gps = GPS(**_gps_cfg)
-        self.gps.power_switch(0)#关闭GPS
+        # _gps_cfg = {
+        #     "UARTn": UART.UART1,
+        #     "buadrate": 115200,
+        #     "databits": 8,
+        #     "parity": 0,
+        #     "stopbits": 1,
+        #     "flowctl": 0,
+        #     "PowerPin": Pin.GPIO2,
+        #     "StandbyPin": Pin.GPIO3,
+        #     "BackupPin": None,
+        #     "gps_mode": 0x01,
+        # }
+        # self.gps = GPS(**_gps_cfg)
+        # self.gps.power_switch(0)#关闭GPS
         EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)
         EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
         EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)
@@ -1851,6 +1853,7 @@ class LocationManager(Abstract):
             return
         self.location_thread_id  = _thread.start_new_thread(self.location_thread, ())
         self.location_flag = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
         #self.gps_open(event, msg)
 
 
@@ -1865,11 +1868,13 @@ class LocationManager(Abstract):
         self.location_flag = 1
         #self.gps_open(event, msg)
         self.location_type = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
  
 
     def close_location(self, event, msg):
         self.location_flag = 0
         self.location_type = 0
+        self.timer_read_GPS_info.stop()
 
         
 
@@ -1894,8 +1899,8 @@ class LocationManager(Abstract):
     def gps_open(self, event, msg):
         #print("publish:gps_open")
         #quecgnss.init()
-        quecgnss.gnssEnable(1)
-        self.gps.__gps_nmea_data_clean()
+        quecgnss.gnssEnable(2)
+        #self.gps.__gps_nmea_data_clean()
     def gps_close(self, event, msg):
         quecgnss.gnssEnable(0)
     def location_timer(self, *args, **kwargs):
@@ -2009,7 +2014,30 @@ class LocationManager(Abstract):
             else :
                 break
 
-
+    def GxGGA_latitude(self, gga_data):
+        """Parse latitude from GGA"""
+        if gga_data:
+            latitude_re = ure.search(r",[0-9]+\.[0-9]+,[NS],", gga_data)
+            if latitude_re:
+                latitude = latitude_re.group(0)[1:-3]
+                return str(float(latitude[:2]) + float(latitude[2:]) / 60)
+        return ""
+    def GxGGA_longitude(self, gga_data):
+        """Parse longitude from GGA"""
+        if gga_data:
+            longitude_re = ure.search(r",[0-9]+\.[0-9]+,[EW],", gga_data)
+            if longitude_re:
+                longitude = longitude_re.group(0)[1:-3]
+                return str(float(longitude[:3]) + float(longitude[3:]) / 60)
+        return ""
+
+    def GxGGA_altitude(self, gga_data):
+        """Parse altitude from GGA"""
+        if gga_data:
+            altitude_re = ure.search(r",-*[0-9]+\.[0-9]+,M,", gga_data)
+            if altitude_re:
+                return altitude_re.group(0)[1:-3]
+        return ""
     def location_thread(self):
         
         self.wifi_data = []
@@ -2017,22 +2045,27 @@ class LocationManager(Abstract):
         self.cell_data = []
         gnss_r_data = []
         self.GSV_sig_ok_count = 0
+        self.GSV_sig_very_ok_count = 0
         self.GGA_count = 0
         self.RMC_A_count = 0
+        # if self.start_agps == 1: #开启agps
+        #     self.start_agps = 0
+        #     quecgnss.configSet(2,1)
         if self.lpm_fd == None:
             self.lpm_fd = pm.create_wakelock("test_lock", len("test_lock"))
         pm.wakelock_lock(self.lpm_fd)
         print("location_thread:1")
         EventMesh.publish(constants.EVENT.GPSOPEN)
         print("location_thread:2")
-        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
-        
+        #self.timer_read_GPS_info.start(1000, 1, self.location_timer)
+        print("location_thread:3")
         #utime.sleep_ms(1000)
         self.location_timer_count = 0
         #quecgnss.read(4096)#去掉第一次错误数据
         #EventMesh.txt_log("START_LOCATION")
         # pm.autosleep(0)#唤醒
         # pm.sclkEx_set(0, 1, 5)
+        GSV_dict= {}
         while self.location_flag == 1:
             try :   
                 
@@ -2042,94 +2075,70 @@ class LocationManager(Abstract):
                 # if self.location_check_data_timer_count >= 3:
                 #     pm.autosleep(0)#唤醒
                 #     pm.sclkEx_set(0, 1, 5)
-                if self.location_check_data_timer_count >= 5 :#5秒查一次基站数据和wifi数据
+                if self.location_check_data_timer_count >= 1 :#3秒查一次基站数据和wifi数据
                     self.location_check_data_timer_count = 0
                     #print(self.location_timer_count)
-                    #GSV_dict= {}
+                    GSV_dict= {}
                     
                     #检查GNSS数据
                     if ( self.gps_data == {} or self.location_type == 1) and quecgnss.get_state() == 2:
-                        
-                        self.gps.__gps_nmea_data_clean()
-                        #gnss_r_data = [0,1]
-                        gnss_r_data = quecgnss.read(4096)
-                        #EventMesh.txt_log("gps Datalen:{}".format(gnss_r_data[0]))
-                        #print("location gnss_r_data:len{}\n{}".format(gnss_r_data[0],gnss_r_data[1].decode()))
-                        #print("gnss_r_data len:{}".format(gnss_r_data[0]))
-                        if gnss_r_data[0] > 0 : #有数据
-                            tmp_ok_count = 0
-                            gsv_data = gnss_r_data[1].split("GSV")
-                                      
-                            if len(gsv_data) >= 2 :  
-                                gsv_data = gsv_data[1:]
-                                for i in range(len(gsv_data)) :
-                                    gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                                    gsv_tmp = gsv_data[i].split(",")
-                                    if len(gsv_tmp) < 7 :
-                                        break
-                                     
-                                    gsv_tmp = gsv_tmp[4:]
-                                    #print("gsv_tmp:{}".format(gsv_tmp))
-                                    for i in range(len(gsv_tmp)) :
-                                        if i % 4 == 0:
-                                            #GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                                            try:
-                                                #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
-                                                if gsv_tmp[i+3] != "" :
-                                                    if int(gsv_tmp[i+3])>=20:
-                                                        tmp_ok_count +=1    
-                                            except Exception as e:
-                                                usys.print_exception(e)
-                                            #print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                                        if len(gsv_tmp)-i < 4:
-                                            break 
-                                
-                                if(tmp_ok_count > self.GSV_sig_ok_count ):
-                                    self.GSV_sig_ok_count = tmp_ok_count
-                            
 
-                            # if len(match_gga_data) > 8:
-                            #     #print(match_gga_data)
-                            #     if(match_gga_data[7] ):
-                            #         gga_count_tmp = int(match_gga_data[7]) #可用卫星
-                            #         if(gga_count_tmp > self.GGA_count):
-                            #             self.GGA_count = gga_count_tmp
-                            print("GGA_count:{} GSV_sig_ok_coun:{} ".format(self.GGA_count,self.GSV_sig_ok_count))
+                        pass
+                        tmp_ok_count = 0
+                        tmp_very_ok_count = 0
+                        gsv_data = quecgnss.get_gsv()
+                        rmc_data = quecgnss.get_rmc()
+                        gga_data = quecgnss.get_gga()
+                        vtg_data = quecgnss.get_vtg()
+                        print("gsv:{}".format(quecgnss.get_gsv()))
+                        print("gga:{}".format(quecgnss.get_gga()))
+                        print("rmc:{}".format(quecgnss.get_rmc()))
+                        print("vtg:{}".format(quecgnss.get_vtg())) 
+                        for i in range(len(gsv_data)) :
                             
-                            match_rmc_data = self.match.GxRMC(gnss_r_data[1]).split(",")
-                             
-                            #print("match_rmc_data:\n{}".format(match_rmc_data))
-                            if len (match_rmc_data)>3: #有rmc数据
-                                if match_rmc_data[2] == 'A':
-                                    
-                                    if  self.gps.__check_gps_valid(gnss_r_data[1].decode()): #数据齐全 :
-                                        
-                                        #print("hhhhhh:{}\n\n".format(self.gps.__gsv_data))
-                                        match_vtg_data = self.gps.__vtg_data.split(",")#self.match.GxVTG(gnss_r_data[1]).split(",")
-                                        match_gga_data = self.gps.__gga_data.split(",")#self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        #match_gga_data = self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        
-                                        EventMesh.txt_log("GGA:{}".format(match_gga_data))
-                                        # EventMesh.txt_log("VTG:{}".format(match_vtg_data))
-                                        # EventMesh.txt_log("RMC:{}".format(match_rmc_data)) 
-                                        # EventMesh.txt_log("timer:{} ok_count:{} count:{}\n".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))   
-                                        print("LOCATION_ok :time:{}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n".format(self.location_timer_count))
+                            if i % 2 == 0:
+                                if i+1 >= len(gsv_data) :
+                                    print("gsv_data num error!!")
+                                    break
+                                GSV_dict[gsv_data[i]] = gsv_data[i+1]
+                                #print("type:gsv_data{}".format(type(gsv_data[i+1])))
+                                try:
+                                    #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
+                                    if gsv_data[i+1] :
+                                        if (gsv_data[i+1])>=20:
+                                            tmp_ok_count +=1   
+                                        if (gsv_data[i+1])>=30:
+                                            tmp_very_ok_count +=1  
+                                            
+                                except Exception as e:
+                                    usys.print_exception(e)
+                                
+                        if(tmp_ok_count > self.GSV_sig_ok_count ):
+                            self.GSV_sig_ok_count = tmp_ok_count
+                        if(tmp_very_ok_count > self.GSV_sig_very_ok_count ):
+                            self.GSV_sig_very_ok_count = tmp_very_ok_count
+                        match_rmc_data = rmc_data.split(",")
+                        if len (match_rmc_data)>3: #有rmc数据
+                                 if match_rmc_data[2] == 'A':    
+                                    match_gga_data = gga_data.split(",")
+                                    if len(match_gga_data) >4: #数据全
+                                        match_vtg_data = vtg_data.split(",")
                                         gps_date = "%s,%s"%(match_rmc_data[9],match_rmc_data[1][:6])#日期
-                                        gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
+                                        #gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
                                         latitude = "0,N" #纬度
-                                        latitude_tmp = str(gps_data_tmp[1]).split(".")
+                                        latitude_tmp = str(self.GxGGA_latitude(gga_data)).split(".")
                                         if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
                                             latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
                                             latitude = "%s,%s"%(latitude,match_rmc_data[4] )
 
                                         longitude = "0,E"#经度
-                                        longitude_tmp = str(gps_data_tmp[0]).split(".")
+                                        longitude_tmp = str(self.GxGGA_longitude(gga_data)).split(".")
                                         if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
                                             longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
                                             longitude = "%s,%s"%(longitude,match_rmc_data[6] ) #match_rmc_data[6] + str(gnss_r_data[1])
                                         
                                         high = "0"#高度
-                                        high = str(gps_data_tmp[2])
+                                        high = str(self.GxGGA_altitude(gga_data))
                                         number = "0"#可用卫星
                                         precision = "5.8"#精度
                                         if len(match_gga_data)>5 :
@@ -2154,11 +2163,7 @@ class LocationManager(Abstract):
                                             "date":  gps_date,
                                             "precision":  precision
                                         }
-                                    else :
-                                        EventMesh.txt_log("gps数据不全")
-                        else :
-                            EventMesh.txt_log("gps 无数据")
-
+# ***********************************************************************************
 
 
                 #检查wifi数据
@@ -2176,9 +2181,8 @@ class LocationManager(Abstract):
 
                 if self.location_type == 1: #测试模式
                     self.location_timer_count = 0
-                    if len(gnss_r_data) >= 1:
-                        if gnss_r_data[0] > 0:
-                            EventMesh.publish("PUSH_LOCATION_DATA", [gnss_r_data,self.wifi_data,self.cell_data]) 
+                    
+                    EventMesh.publish("PUSH_LOCATION_DATA", [[self.gps_data,GSV_dict],self.wifi_data,self.cell_data]) 
                     if self.gps_data  != {} : #发送数据 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
                         self.location_queue.put(constants.PROTOCOL.UD_SEND)
@@ -2188,10 +2192,13 @@ class LocationManager(Abstract):
                 elif self.location_type == 0: #正常模式     
                     if self.gps_data  != {} or self.location_timer_count > 100: #or( self.wifi_data != [] and self.cell_data != []): 
                         if self.location_queue.empty() == False:#有定位队列
-                            EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
-                        upload_time = EventMesh.publish("get_upload_data")
-                        
-                            
+                            EventMesh.txt_log("LOCATION timer:{} ok:{} very_ok:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GSV_sig_very_ok_count))   
+                            #EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
+                        if self.gps_data  == {}: #定位超时,且信噪比多个大于30,下次启动agps
+                            if self.GSV_sig_very_ok_count > 3:#3个超30以上
+                                self.start_agps = 1
+                                EventMesh.txt_log("open agps:{}".format(GSV_dict))
+                        #upload_time = EventMesh.publish("get_upload_data")    
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #if upload_time > 200  : 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
@@ -2207,7 +2214,7 @@ class LocationManager(Abstract):
                         
                     if self.GSV_sig_ok_count <= 1 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 20: #超过40秒且信号大于30的不足3个
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位   
-                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} count:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))
+                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #break
                 # if self.location_type != 1 and self.location_timer_count >= 60*4 : #4分钟关闭
@@ -2226,9 +2233,11 @@ class LocationManager(Abstract):
                 #self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                 EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 
             utime.sleep_ms(500)
-        self.timer_read_GPS_info.stop()
-        self.gps.power_switch(0)
+
+        #self.timer_read_GPS_info.stop()
+        #self.gps.power_switch(0)
         wifiScan.control(0)
+        EventMesh.publish(constants.EVENT.GPSCLOSE)
         # if EventMesh.publish("get_lcd_state" ) == 0:#休眠的时候,恢复休眠
         #     pm.autosleep(1)
         #     pm.sclkEx_set(1, 1, 5)
index da13fde..17f50c2 100644 (file)
@@ -41,4 +41,4 @@
 #define CONFIG_JPEG 1
 #define CONFIG_CAMERA_SAVEPHOTOS 1
 //菊风视频通话
-//#define CONFIG_juphoon 1
\ No newline at end of file
+#define CONFIG_juphoon 1
\ No newline at end of file
index b1c37b7..7b20a27 100644 (file)
@@ -961,7 +961,6 @@ frozen_mpy_list =   $(BUILD)/_boot.mpy \
                                        $(BUILD)/EventMesh.mpy \
                                        $(BUILD)/initTP.mpy \
                                        $(BUILD)/lcd.mpy \
-                                       $(BUILD)/location.mpy \
                                        $(BUILD)/mgr.mpy \
                                        $(BUILD)/protocol.mpy \
                                        $(BUILD)/ui.mpy \
index 4af04d3..f9b5303 100644 (file)
@@ -14,7 +14,7 @@ import osTimer
 import constants
 import sms
 from common import Lock, Abstract, LogAdapter
-from location import GPS, GPSMatch,CellLocator
+#from location import GPS, GPSMatch,CellLocator
 from misc import USB, Power, ADC
 from machine import ExtInt, Pin,Timer,RTC,UART
 import EventMesh
@@ -1023,10 +1023,18 @@ class DeviceInfoManager(Abstract):
                 
         """定时测量心率,血氧,体温"""
         WEAR = EventMesh.publish(constants.EVENT.GET_WEAR)#佩戴数据
+        if WEAR == None :
+            WEAR = 0
         self.get_hr_state = EventMesh.publish("get_hr_state")
+        if self.get_hr_state == None :
+            self.get_hr_state = 0
         self.get_spo2_state = EventMesh.publish("get_spo2_state")
+        if self.get_spo2_state == None :
+            self.get_spo2_state = 0
         get_temp_time  = EventMesh.publish("get_temp_time")
         get_temp_state  = EventMesh.publish("get_temp_state")
+        if get_temp_state == None :
+            get_temp_state = 0
         hr_time = {}
         hr_time = EventMesh.publish("get_time_hr_spo2")#获取时间是否大于0
         if get_temp_state != None : #突然脱腕
@@ -1853,7 +1861,7 @@ class LocationManager(Abstract):
 
     def __init__(self):
         self.gps = None
-        self.match = GPSMatch()
+        #self.match = GPSMatch()
         self.timer_read_GPS_info = osTimer()
         self.wifi_data = []
         self.gps_data  = {}
@@ -2469,16 +2477,20 @@ class gethistoryDataManager(Abstract):
         if check_hr == True :
             with open("/ext/static/storage_file/history_hr.json","r") as fd:#音频文件编号
                 self.read_histroy_hr_data = ujson.load(fd)
-        
+                if self.read_histroy_hr_data == None:
+                    self.read_histroy_hr_data = []
         check_temp= ql_fs.path_exists("/ext/static/storage_file/history_temp.json")
         if check_temp == True :
             with open("/ext/static/storage_file/history_temp.json","r") as fd:#音频文件编号
                 self.read_histroy_temp_data = ujson.load(fd)
-
+                if self.read_histroy_temp_data == None:
+                    self.read_histroy_temp_data = []
         check_spo2= ql_fs.path_exists("/ext/static/storage_file/history_spo2.json")
         if check_spo2 == True :
             with open("/ext/static/storage_file/history_spo2.json","r") as fd:#音频文件编号
                 self.read_histroy_spo2_data = ujson.load(fd)
+                if self.read_histroy_spo2_data == None:
+                    self.read_histroy_spo2_data = []
         self.temp_value = 0
         
         # self.read_histroy_hr_data=[{"timeSec":16789890,"value":90},{"timeSec":16789888,"value":78},{"timeSec":16789688,"value":68},{"timeSec":16789898,"value":58},\
@@ -2536,7 +2548,10 @@ class gethistoryDataManager(Abstract):
             #print(self.read_histroy_temp_data)
 
     def get_history_hr_value(self, event, msg): #近7次心率历史数据统计显示
-        return self.read_histroy_hr_data
+        if self.read_histroy_hr_data:
+            return self.read_histroy_hr_data
+        else :
+            return []
 
     def set_history_hr_value(self, event, msg): 
         pass
@@ -2703,13 +2718,19 @@ class getHrTimeManager(Abstract):
         self.set_hr = msg
 
     def get_hr_state(self, event, msg): 
-        return self.set_hr
+        if self.set_hr:
+            return self.set_hr
+        else:
+            return 0
     
     def set_spo2_state(self, event, msg): 
         self.set_spo2 = msg
 
     def get_spo2_state(self, event, msg): 
-        return self.set_spo2
+        if self.set_spo2:
+            return self.set_spo2
+        else:
+            return 0
     
 #体温
 class getTempTimeManager(Abstract):
@@ -2735,13 +2756,19 @@ class getTempTimeManager(Abstract):
         EventMesh.publish("set_storage_config",["set_temp_time",self.set_time])
 
     def get_temp_time(self, event, msg): 
-        return self.set_time
+        if self.set_time:
+            return self.set_time
+        else :
+            return 0
     
     def set_temp_state(self, event, msg): 
         self.get_temp = msg
 
-    def get_temp_state(self, event, msg): 
-        return self.get_temp
+    def get_temp_state(self, event, msg):
+        if  self.get_temp:
+            return self.get_temp
+        else :
+            return 0
            
 class getBrightnessManager(Abstract):#获取亮度级别
     def __init__(self):
index 960db2b..d25a59c 100644 (file)
@@ -78,6 +78,22 @@ def set_log(log_adapter):
 
 def add_filter(flt):
     event_store.add_filter(flt)
+import utime
+import uos
+Txt_Log = 0
+def txt_log(data):
+    if Txt_Log != 0 :
+        print(data)
+        try:
+            f_stat = uos.stat("usr/log.txt")
+            if f_stat[6] >50*1024:
+                uos.remove("usr/log.txt") 
+        except Exception as e:
+            usys.print_exception(e)
+        with open("/ext/log.txt","a",encoding="utf-8") as fd:
+            d_time = utime.localtime()
+            data_tmp = "%02d-%02d %02d:%02d:%02d :"%(d_time[1],d_time[2],d_time[3],d_time[4],d_time[5])
+            fd.write(data_tmp+data+"\n")
 
 def callback_wrapper(callback):#按键回调
     def wrapped_callback(*args, **kwargs):
@@ -91,13 +107,4 @@ def callback_wrapper(callback):#按键回调
     return wrapped_callback
 
 
-import utime
-Txt_Log = 1
-def txt_log(data):
-    pass
-    # if Txt_Log != 0 :
-    #     with open("/usr/log.txt","a",encoding="utf-8") as fd:
-    #         d_time = utime.localtime()
-    #         data_tmp = "%02d-%02d %02d:%02d:%02d :"%(d_time[1],d_time[2],d_time[3],d_time[4],d_time[5])
-    #         fd.write(data_tmp+data+"\n")
 
index 48bc55a..1427776 100644 (file)
@@ -956,7 +956,6 @@ frozen_mpy_list =   $(BUILD)/_boot.mpy \
                                        $(BUILD)/EventMesh.mpy \
                                        $(BUILD)/initTP.mpy \
                                        $(BUILD)/lcd.mpy \
-                                       $(BUILD)/location.mpy \
                                        $(BUILD)/mgr.mpy \
                                        $(BUILD)/protocol.mpy \
                                        $(BUILD)/ui.mpy \
index 48e9580..2715812 100644 (file)
@@ -14,7 +14,7 @@ import osTimer
 import constants
 import sms
 from common import Lock, Abstract, LogAdapter
-from location import GPS, GPSMatch,CellLocator
+#from location import GPS, GPSMatch,CellLocator
 from misc import USB, Power, ADC
 from machine import ExtInt, Pin,Timer,RTC,UART
 import EventMesh
@@ -23,6 +23,7 @@ import audio
 from machine import I2C
 from Gsensor import SC7A20
 import pm
+import ure
 try :
     from Hsensor import GH3018
 except Exception as e:
@@ -1951,7 +1952,7 @@ class LocationManager(Abstract):
 
     def __init__(self):
         self.gps = None
-        self.match = GPSMatch()
+        #self.match = GPSMatch()
         self.timer_read_GPS_info = osTimer()
         self.wifi_data = []
         self.gps_data  = {}
@@ -1966,8 +1967,9 @@ class LocationManager(Abstract):
         self.location_thread_id  = 0
         self.location_queue = Queue(100)
         self.lpm_fd = None
-        #quecgnss.init()
-        #quecgnss.gnssEnable(0)
+        self.start_agps = 0
+        quecgnss.init()
+        quecgnss.gnssEnable(0)
     @staticmethod
     def get_date():
         return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
@@ -1977,20 +1979,20 @@ class LocationManager(Abstract):
         return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])
 
     def post_processor_after_instantiation(self):
-        _gps_cfg = {
-            "UARTn": UART.UART1,
-            "buadrate": 115200,
-            "databits": 8,
-            "parity": 0,
-            "stopbits": 1,
-            "flowctl": 0,
-            "PowerPin": Pin.GPIO2,
-            "StandbyPin": Pin.GPIO3,
-            "BackupPin": None,
-            "gps_mode": 0x01,
-        }
-        self.gps = GPS(**_gps_cfg)
-        self.gps.power_switch(0)#关闭GPS
+        # _gps_cfg = {
+        #     "UARTn": UART.UART1,
+        #     "buadrate": 115200,
+        #     "databits": 8,
+        #     "parity": 0,
+        #     "stopbits": 1,
+        #     "flowctl": 0,
+        #     "PowerPin": Pin.GPIO2,
+        #     "StandbyPin": Pin.GPIO3,
+        #     "BackupPin": None,
+        #     "gps_mode": 0x01,
+        # }
+        # self.gps = GPS(**_gps_cfg)
+        # self.gps.power_switch(0)#关闭GPS
         EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)
         EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
         EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)
@@ -2015,6 +2017,7 @@ class LocationManager(Abstract):
             return
         self.location_thread_id  = _thread.start_new_thread(self.location_thread, ())
         self.location_flag = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
         #self.gps_open(event, msg)
 
 
@@ -2029,11 +2032,13 @@ class LocationManager(Abstract):
         self.location_flag = 1
         #self.gps_open(event, msg)
         self.location_type = 1
+        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
  
 
     def close_location(self, event, msg):
         self.location_flag = 0
         self.location_type = 0
+        self.timer_read_GPS_info.stop()
 
         
 
@@ -2058,8 +2063,8 @@ class LocationManager(Abstract):
     def gps_open(self, event, msg):
         #print("publish:gps_open")
         #quecgnss.init()
-        quecgnss.gnssEnable(1)
-        self.gps.__gps_nmea_data_clean()
+        quecgnss.gnssEnable(2)
+        #self.gps.__gps_nmea_data_clean()
     def gps_close(self, event, msg):
         quecgnss.gnssEnable(0)
     def location_timer(self, *args, **kwargs):
@@ -2173,7 +2178,30 @@ class LocationManager(Abstract):
             else :
                 break
 
-
+    def GxGGA_latitude(self, gga_data):
+        """Parse latitude from GGA"""
+        if gga_data:
+            latitude_re = ure.search(r",[0-9]+\.[0-9]+,[NS],", gga_data)
+            if latitude_re:
+                latitude = latitude_re.group(0)[1:-3]
+                return str(float(latitude[:2]) + float(latitude[2:]) / 60)
+        return ""
+    def GxGGA_longitude(self, gga_data):
+        """Parse longitude from GGA"""
+        if gga_data:
+            longitude_re = ure.search(r",[0-9]+\.[0-9]+,[EW],", gga_data)
+            if longitude_re:
+                longitude = longitude_re.group(0)[1:-3]
+                return str(float(longitude[:3]) + float(longitude[3:]) / 60)
+        return ""
+
+    def GxGGA_altitude(self, gga_data):
+        """Parse altitude from GGA"""
+        if gga_data:
+            altitude_re = ure.search(r",-*[0-9]+\.[0-9]+,M,", gga_data)
+            if altitude_re:
+                return altitude_re.group(0)[1:-3]
+        return ""
     def location_thread(self):
         
         self.wifi_data = []
@@ -2181,22 +2209,27 @@ class LocationManager(Abstract):
         self.cell_data = []
         gnss_r_data = []
         self.GSV_sig_ok_count = 0
+        self.GSV_sig_very_ok_count = 0
         self.GGA_count = 0
         self.RMC_A_count = 0
+        # if self.start_agps == 1: #开启agps
+        #     self.start_agps = 0
+        #     quecgnss.configSet(2,1)
         if self.lpm_fd == None:
             self.lpm_fd = pm.create_wakelock("test_lock", len("test_lock"))
         pm.wakelock_lock(self.lpm_fd)
         print("location_thread:1")
         EventMesh.publish(constants.EVENT.GPSOPEN)
         print("location_thread:2")
-        self.timer_read_GPS_info.start(1000, 1, self.location_timer)
-        
+        #self.timer_read_GPS_info.start(1000, 1, self.location_timer)
+        print("location_thread:3")
         #utime.sleep_ms(1000)
         self.location_timer_count = 0
         #quecgnss.read(4096)#去掉第一次错误数据
         #EventMesh.txt_log("START_LOCATION")
         # pm.autosleep(0)#唤醒
         # pm.sclkEx_set(0, 1, 5)
+        GSV_dict= {}
         while self.location_flag == 1:
             try :   
                 
@@ -2206,94 +2239,70 @@ class LocationManager(Abstract):
                 # if self.location_check_data_timer_count >= 3:
                 #     pm.autosleep(0)#唤醒
                 #     pm.sclkEx_set(0, 1, 5)
-                if self.location_check_data_timer_count >= 5 :#5秒查一次基站数据和wifi数据
+                if self.location_check_data_timer_count >= 1 :#3秒查一次基站数据和wifi数据
                     self.location_check_data_timer_count = 0
                     #print(self.location_timer_count)
-                    #GSV_dict= {}
+                    GSV_dict= {}
                     
                     #检查GNSS数据
                     if ( self.gps_data == {} or self.location_type == 1) and quecgnss.get_state() == 2:
-                        
-                        self.gps.__gps_nmea_data_clean()
-                        #gnss_r_data = [0,1]
-                        gnss_r_data = quecgnss.read(4096)
-                        #EventMesh.txt_log("gps Datalen:{}".format(gnss_r_data[0]))
-                        # print("location gnss_r_data:len{}\n{}".format(gnss_r_data[0],gnss_r_data[1].decode()))
-                        #print("gnss_r_data len:{}".format(gnss_r_data[0]))
-                        if gnss_r_data[0] > 0 : #有数据
-                            tmp_ok_count = 0
-                            gsv_data = gnss_r_data[1].split("GSV")
-                                      
-                            if len(gsv_data) >= 2 :  
-                                gsv_data = gsv_data[1:]
-                                for i in range(len(gsv_data)) :
-                                    gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                                    gsv_tmp = gsv_data[i].split(",")
-                                    if len(gsv_tmp) < 7 :
-                                        break
-                                     
-                                    gsv_tmp = gsv_tmp[4:]
-                                    #print("gsv_tmp:{}".format(gsv_tmp))
-                                    for i in range(len(gsv_tmp)) :
-                                        if i % 4 == 0:
-                                            #GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                                            try:
-                                                #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
-                                                if gsv_tmp[i+3] != "" :
-                                                    if int(gsv_tmp[i+3])>=20:
-                                                        tmp_ok_count +=1    
-                                            except Exception as e:
-                                                usys.print_exception(e)
-                                            #print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                                        if len(gsv_tmp)-i < 4:
-                                            break 
-                                
-                                if(tmp_ok_count > self.GSV_sig_ok_count ):
-                                    self.GSV_sig_ok_count = tmp_ok_count
-                            
 
-                            # if len(match_gga_data) > 8:
-                            #     #print(match_gga_data)
-                            #     if(match_gga_data[7] ):
-                            #         gga_count_tmp = int(match_gga_data[7]) #可用卫星
-                            #         if(gga_count_tmp > self.GGA_count):
-                            #             self.GGA_count = gga_count_tmp
-                            print("GGA_count:{} GSV_sig_ok_coun:{} ".format(self.GGA_count,self.GSV_sig_ok_count))
+                        pass
+                        tmp_ok_count = 0
+                        tmp_very_ok_count = 0
+                        gsv_data = quecgnss.get_gsv()
+                        rmc_data = quecgnss.get_rmc()
+                        gga_data = quecgnss.get_gga()
+                        vtg_data = quecgnss.get_vtg()
+                        print("gsv:{}".format(quecgnss.get_gsv()))
+                        print("gga:{}".format(quecgnss.get_gga()))
+                        print("rmc:{}".format(quecgnss.get_rmc()))
+                        print("vtg:{}".format(quecgnss.get_vtg())) 
+                        for i in range(len(gsv_data)) :
                             
-                            match_rmc_data = self.match.GxRMC(gnss_r_data[1]).split(",")
-                             
-                            #print("match_rmc_data:\n{}".format(match_rmc_data))
-                            if len (match_rmc_data)>3: #有rmc数据
-                                if match_rmc_data[2] == 'A':
-                                    
-                                    if  self.gps.__check_gps_valid(gnss_r_data[1].decode()): #数据齐全 :
-                                        
-                                        #print("hhhhhh:{}\n\n".format(self.gps.__gsv_data))
-                                        match_vtg_data = self.gps.__vtg_data.split(",")#self.match.GxVTG(gnss_r_data[1]).split(",")
-                                        match_gga_data = self.gps.__gga_data.split(",")#self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        #match_gga_data = self.match.GxGGA(gnss_r_data[1]).split(",")
-                                        
-                                        EventMesh.txt_log("GGA:{}".format(match_gga_data))
-                                        # EventMesh.txt_log("VTG:{}".format(match_vtg_data))
-                                        # EventMesh.txt_log("RMC:{}".format(match_rmc_data)) 
-                                        # EventMesh.txt_log("timer:{} ok_count:{} count:{}\n".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))   
-                                        print("LOCATION_ok :time:{}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n".format(self.location_timer_count))
+                            if i % 2 == 0:
+                                if i+1 >= len(gsv_data) :
+                                    print("gsv_data num error!!")
+                                    break
+                                GSV_dict[gsv_data[i]] = gsv_data[i+1]
+                                #print("type:gsv_data{}".format(type(gsv_data[i+1])))
+                                try:
+                                    #print("gsv_tmp[i+3]:{}".format(gsv_tmp[i+3]))
+                                    if gsv_data[i+1] :
+                                        if (gsv_data[i+1])>=20:
+                                            tmp_ok_count +=1   
+                                        if (gsv_data[i+1])>=30:
+                                            tmp_very_ok_count +=1  
+                                            
+                                except Exception as e:
+                                    usys.print_exception(e)
+                                
+                        if(tmp_ok_count > self.GSV_sig_ok_count ):
+                            self.GSV_sig_ok_count = tmp_ok_count
+                        if(tmp_very_ok_count > self.GSV_sig_very_ok_count ):
+                            self.GSV_sig_very_ok_count = tmp_very_ok_count
+                        match_rmc_data = rmc_data.split(",")
+                        if len (match_rmc_data)>3: #有rmc数据
+                                 if match_rmc_data[2] == 'A':    
+                                    match_gga_data = gga_data.split(",")
+                                    if len(match_gga_data) >4: #数据全
+                                        match_vtg_data = vtg_data.split(",")
                                         gps_date = "%s,%s"%(match_rmc_data[9],match_rmc_data[1][:6])#日期
-                                        gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
+                                        #gps_data_tmp = self.gps.read_coordinates(gnss_r_data[1])
                                         latitude = "0,N" #纬度
-                                        latitude_tmp = str(gps_data_tmp[1]).split(".")
+                                        latitude_tmp = str(self.GxGGA_latitude(gga_data)).split(".")
                                         if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
                                             latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
                                             latitude = "%s,%s"%(latitude,match_rmc_data[4] )
 
                                         longitude = "0,E"#经度
-                                        longitude_tmp = str(gps_data_tmp[0]).split(".")
+                                        longitude_tmp = str(self.GxGGA_longitude(gga_data)).split(".")
                                         if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
                                             longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
                                             longitude = "%s,%s"%(longitude,match_rmc_data[6] ) #match_rmc_data[6] + str(gnss_r_data[1])
                                         
                                         high = "0"#高度
-                                        high = str(gps_data_tmp[2])
+                                        high = str(self.GxGGA_altitude(gga_data))
                                         number = "0"#可用卫星
                                         precision = "5.8"#精度
                                         if len(match_gga_data)>5 :
@@ -2318,11 +2327,7 @@ class LocationManager(Abstract):
                                             "date":  gps_date,
                                             "precision":  precision
                                         }
-                                    else :
-                                        EventMesh.txt_log("gps数据不全")
-                        else :
-                            EventMesh.txt_log("gps 无数据")
-
+# ***********************************************************************************
 
 
                 #检查wifi数据
@@ -2340,9 +2345,8 @@ class LocationManager(Abstract):
 
                 if self.location_type == 1: #测试模式
                     self.location_timer_count = 0
-                    if len(gnss_r_data) >= 1:
-                        if gnss_r_data[0] > 0:
-                            EventMesh.publish("PUSH_LOCATION_DATA", [gnss_r_data,self.wifi_data,self.cell_data]) 
+                    
+                    EventMesh.publish("PUSH_LOCATION_DATA", [[self.gps_data,GSV_dict],self.wifi_data,self.cell_data]) 
                     if self.gps_data  != {} : #发送数据 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
                         self.location_queue.put(constants.PROTOCOL.UD_SEND)
@@ -2352,10 +2356,13 @@ class LocationManager(Abstract):
                 elif self.location_type == 0: #正常模式     
                     if self.gps_data  != {} or self.location_timer_count > 100: #or( self.wifi_data != [] and self.cell_data != []): 
                         if self.location_queue.empty() == False:#有定位队列
-                            EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
-                        upload_time = EventMesh.publish("get_upload_data")
-                        
-                            
+                            EventMesh.txt_log("LOCATION timer:{} ok:{} very_ok:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GSV_sig_very_ok_count))   
+                            #EventMesh.txt_log("LOCATION:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
+                        if self.gps_data  == {}: #定位超时,且信噪比多个大于30,下次启动agps
+                            if self.GSV_sig_very_ok_count > 3:#3个超30以上
+                                self.start_agps = 1
+                                EventMesh.txt_log("open agps:{}".format(GSV_dict))
+                        #upload_time = EventMesh.publish("get_upload_data")    
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #if upload_time > 200  : 
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
@@ -2371,7 +2378,7 @@ class LocationManager(Abstract):
                         
                     if self.GSV_sig_ok_count <= 1 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 20: #超过40秒且信号大于30的不足3个
                         EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位   
-                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} count:{}".format(self.location_timer_count,self.GSV_sig_ok_count,self.GGA_count))
+                        EventMesh.txt_log("GSV_sig_ok_count<3:timer:{} ok_count:{} ".format(self.location_timer_count,self.GSV_sig_ok_count))
                         self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                         #break
                 # if self.location_type != 1 and self.location_timer_count >= 60*4 : #4分钟关闭
@@ -2390,9 +2397,11 @@ class LocationManager(Abstract):
                 #self.Location_send([self.gps_data,self.wifi_data,self.cell_data])
                 EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位 
             utime.sleep_ms(500)
-        self.timer_read_GPS_info.stop()
-        self.gps.power_switch(0)
+
+        #self.timer_read_GPS_info.stop()
+        #self.gps.power_switch(0)
         wifiScan.control(0)
+        EventMesh.publish(constants.EVENT.GPSCLOSE)
         # if EventMesh.publish("get_lcd_state" ) == 0:#休眠的时候,恢复休眠
         #     pm.autosleep(1)
         #     pm.sclkEx_set(1, 1, 5)