From: p15692025051 <846603105@qq.com> Date: Tue, 17 Oct 2023 03:17:06 +0000 (+0800) Subject: GPS修改同步 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=fd82ddfa495f28fda3590538258df1ba463e9b98;p=mirrors%2FASR1603_G5.git GPS修改同步 --- diff --git a/2.sdk/Helios_SDK/components/juphoon/jrtc.h b/2.sdk/Helios_SDK/components/juphoon/jrtc.h index c7dd639e..d7b70dec 100644 --- a/2.sdk/Helios_SDK/components/juphoon/jrtc.h +++ b/2.sdk/Helios_SDK/components/juphoon/jrtc.h @@ -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); diff --git a/2.sdk/Helios_SDK/components/juphoon/jrtc0.h b/2.sdk/Helios_SDK/components/juphoon/jrtc0.h index 749a3b5b..78a1c689 100644 --- a/2.sdk/Helios_SDK/components/juphoon/jrtc0.h +++ b/2.sdk/Helios_SDK/components/juphoon/jrtc0.h @@ -5,143 +5,143 @@ 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]; diff --git a/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a b/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a index 2e7e8da3..52ab3141 100644 Binary files a/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a and b/2.sdk/Helios_SDK/components/juphoon/lib/libjrtc.a differ diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c index 3c73bd9b..d65ec440 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modGsensor_SC7A20.c @@ -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, ®_addr, 1, &data, 1) == 0) { diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/mpconfigport.h b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/mpconfigport.h index 63986577..82f311e5 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/mpconfigport.h +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/mpconfigport.h @@ -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 diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/EventMesh.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/EventMesh.py index d7df6833..b0d2a6ab 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/EventMesh.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/EventMesh.py @@ -1,7 +1,7 @@ import _thread import usys - - +import uos +import utime class EventStore(object): def __init__(self): self.map = dict() diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/Makefile b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/Makefile index d0ebceb3..73dffe43 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/Makefile +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/Makefile @@ -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 diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/alarm.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/alarm.py index 1e440b68..b2746a81 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/alarm.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/alarm.py @@ -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: diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/appFactoryMode.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/appFactoryMode.py index c09894c7..3d5f245e 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/appFactoryMode.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/appFactoryMode.py @@ -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 index 00000000..73d9c438 --- /dev/null +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/calculator.py @@ -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"}) + diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_1.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_1.py index 9eac0c5b..8666de66 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_1.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_1.py @@ -1,2 +1,2 @@ -from usr.main_init import main_init +from main_init import main_init main_init() \ No newline at end of file diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_init.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_init.py index 0a2f8631..b61b15a7 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_init.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/main_init.py @@ -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()) diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/mgr.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/mgr.py index 3c3345ba..1e0aecaa 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/mgr.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/mgr.py @@ -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) diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/protocol.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/protocol.py index 9a0a1271..83716e65 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/protocol.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/protocol.py @@ -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']}) diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui.py index 71ff5a8d..a6d58828 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui.py @@ -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 diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_main_menu.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_main_menu.py index 04a64870..7c02406c 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_main_menu.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_main_menu.py @@ -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 diff --git a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_setting.py b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_setting.py index de287fb1..9d0570ba 100644 --- a/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_setting.py +++ b/2.sdk/project/A616/sdk/services/microPython/ports/quectel/core/ui_setting.py @@ -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) diff --git a/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h b/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h index 26766385..17f50c23 100644 --- a/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h +++ b/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h @@ -40,3 +40,5 @@ #define CONFIG_CAMERA 1 #define CONFIG_JPEG 1 #define CONFIG_CAMERA_SAVEPHOTOS 1 +//菊风视频通话 +#define CONFIG_juphoon 1 \ No newline at end of file diff --git a/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in b/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in index 6e03ed93..343bad71 100644 --- a/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in +++ b/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.in @@ -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 diff --git a/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk b/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk index bf69c97c..7416fca4 100644 --- a/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk +++ b/2.sdk/project/A616/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk @@ -61,4 +61,6 @@ CONFIG_LCD=y # CONFIG_POC is not set #CONFIG_GH301x=y CONFIG_SC7A20=y +#¾Õ·çÊÓÆµÍ¨»° +CONFIG_juphoon=y diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/Makefile b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/Makefile index d0ebceb3..b6d1801d 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/Makefile +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/Makefile @@ -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 \ diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/appFactoryMode.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/appFactoryMode.py index c09894c7..0226a8e3 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/appFactoryMode.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/appFactoryMode.py @@ -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/C06S/sdk/services/microPython/ports/quectel/core/mgr.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py index dd1bd82f..de28d8f9 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/mgr.py @@ -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) diff --git a/2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/Makefile b/2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/Makefile index a5adfa30..2a8e5aad 100644 --- a/2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/Makefile +++ b/2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/Makefile @@ -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 \ diff --git a/2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/mgr.py b/2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/mgr.py index 0b9a4ae8..8a55c09b 100644 --- a/2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/mgr.py +++ b/2.sdk/project/D10/sdk/services/microPython/ports/quectel/core/mgr.py @@ -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) diff --git a/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile b/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile index 32485e25..73dffe43 100644 --- a/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile +++ b/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/Makefile @@ -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 \ diff --git a/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/appFactoryMode.py b/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/appFactoryMode.py index c09894c7..3d5f245e 100644 --- a/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/appFactoryMode.py +++ b/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/appFactoryMode.py @@ -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/K01/sdk/services/microPython/ports/quectel/core/mgr.py b/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/mgr.py index 292abe3d..1e0aecaa 100644 --- a/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/mgr.py +++ b/2.sdk/project/K01/sdk/services/microPython/ports/quectel/core/mgr.py @@ -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) diff --git a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h index da13fded..17f50c23 100644 --- a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h +++ b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/autoconf.h @@ -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 diff --git a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk index 8f299ee2..42b702bf 100644 --- a/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk +++ b/2.sdk/project/K01/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/config.mk @@ -62,5 +62,5 @@ CONFIG_LCD=y #CONFIG_GH301x=y CONFIG_SC7A20=y #菊风视频通话 -#CONFIG_juphoon=y +CONFIG_juphoon=y diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/Makefile b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/Makefile index b1c37b7a..7b20a27c 100644 --- a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/Makefile +++ b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/Makefile @@ -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 \ diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py index 4af04d30..f9b5303e 100644 --- a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py +++ b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py @@ -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): diff --git a/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/EventMesh.py b/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/EventMesh.py index 960db2b9..d25a59c6 100644 --- a/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/EventMesh.py +++ b/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/EventMesh.py @@ -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") diff --git a/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/Makefile b/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/Makefile index 48bc55a5..1427776c 100644 --- a/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/Makefile +++ b/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/Makefile @@ -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 \ diff --git a/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/mgr.py b/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/mgr.py index 48e95800..27158122 100644 --- a/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/mgr.py +++ b/2.sdk/project/S6/sdk/services/microPython/ports/quectel/core/mgr.py @@ -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)