From: p15692025051 <846603105@qq.com> Date: Fri, 3 Nov 2023 08:19:33 +0000 (+0800) Subject: C06S心率调试,编码器调试 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=2a16ff48c62cf51cfe6d1a837acd3c67ed650773;p=mirrors%2FASR1603_G5.git C06S心率调试,编码器调试 --- diff --git a/2.sdk/Helios_SDK/components/HX3918/hx3918.h b/2.sdk/Helios_SDK/components/HX3918/hx3918.h index 39bfd53e..79feaf24 100644 --- a/2.sdk/Helios_SDK/components/HX3918/hx3918.h +++ b/2.sdk/Helios_SDK/components/HX3918/hx3918.h @@ -3,7 +3,7 @@ #include #include #include "helios_debug.h" -#define HX3918_DEBUG 0 +#define HX3918_DEBUG 1 #if HX3918_DEBUG == 1 #define HX3918_LOG(msg, ...) custom_log("HX3918", msg, ##__VA_ARGS__) #else diff --git a/2.sdk/Helios_SDK/components/HX3918/hx3918_hrs_agc.c b/2.sdk/Helios_SDK/components/HX3918/hx3918_hrs_agc.c index 45b2e5d0..9596320b 100644 --- a/2.sdk/Helios_SDK/components/HX3918/hx3918_hrs_agc.c +++ b/2.sdk/Helios_SDK/components/HX3918/hx3918_hrs_agc.c @@ -188,6 +188,10 @@ void hx3918_hrs_ppg_init(void) //20200615 ericy ppg fs=25hz, phase3 conversion r hx3918_delay(5); hx3918_write_reg(0x4d, 0x00); //release hx3918_delay(5); + #ifdef SAR_ALG_LIB + hx3918_prox_reg_init(); +#endif + read_fifo_first_flg = 1; } @@ -683,15 +687,16 @@ uint8_t hx3918_hrs_read(ppg_sensor_data_t * s_dat) int32_t *PPG_buf = &(s_dat->green_data[0]); int32_t *ir_buf = &(s_dat->ir_data[0]); int32_t *s_buf = &(s_dat->s_buf[0]); - s_dat->green_cur = calReg.led_cur; //int32_t *sar_lp_data = &s_dat->sar_data; int32_t ps_data[4]= {0}; int32_t ps_green_data = 0; uint8_t data_count = 0; + uint8_t i=0; + s_dat->green_cur = calReg.led_cur; if (!s_ppg_state || s_cal_state) { - return NULL; + return 0; } read_data_packet(ps_data); @@ -700,7 +705,7 @@ uint8_t hx3918_hrs_read(ppg_sensor_data_t * s_dat) data_count = hx3918_read_fifo_data(s_buf,2,1); s_dat->count = data_count; HX3918_LOG("hx3918_hrs_read data_count:%d\r\n ",data_count); - for (uint8_t i=0; i 20) + break; + HX3918_LOG(" hx3918_read_offset cnt=%d,recordoffset =%d writeoffset=%d\r\n",cnt,recordoffset,writeoffset); } else { offset = mid; - TYHX_LOG(" final ch=%d,offset =%d lp=%d\r\n",chx_offset,offset,lp); + HX3918_LOG(" final ch=%d,offset =%d lp=%d\r\n",chx_offset,offset,lp); break; } //TYHX_LOG(" ch=%d,lp =%d,writeoffset=%d,recordoffset=%d\r\n",chx_offset,lp,writeoffset,recordoffset); @@ -317,6 +321,7 @@ bool hx3918_prox_reg_init(void) { bool write_ok = true; data_updata_ready = 0; + data_convert_ready = 0; //prf 默认25HZ // if (hx3918_chip_id != PROX_CHIPID) // { @@ -332,12 +337,12 @@ bool hx3918_prox_reg_init(void) #ifdef INDEPENDDENT_CH // write_ok &= hx3918_write_reg(0x55,0x0C); //CS1->CH0 - write_ok &= hx3918_write_reg(0x55,0x03); //CS0->CH0 + write_ok &= hx3918_write_reg(0x57,0x03); //CS0->CH1 // write_ok &= hx3918_write_reg(0x57,0x30); //CS2->CH1 // write_ok &= hx3918_write_reg(0x57,0x03); //CS0->CH1 - write_ok &= hx3918_write_reg(0x57,0x0c); //CS1->CH1 + //write_ok &= hx3918_write_reg(0x57,0x0c); //CS1->CH1 #elif defined(DIFFERENCE_CH) //?????????????¨, ???????·?? // write_ok &= hx3918_write_reg(0x55,0x2c); //CS1->CH0[P],CS2->CH0[N] @@ -456,7 +461,7 @@ uint8_t hx3918_report_prox_status(void) data_updata_ready = 0; } - if (data_updata_ready == 1&& (glp[0] != gbl[0])) + if (data_convert_ready == 1&& (glp[0] != gbl[0])) { if (is_offset_manual == 0) { @@ -467,22 +472,22 @@ uint8_t hx3918_report_prox_status(void) gdiff[0] = glp[0]- nv_base_data[0]; } gdiff[1] = glp[1]- gbl[1]; - + data_updata_ready = 1; hx3918_update_min_nv_data(gbl[0]); } if ((glp[0] == gbl[0]) && (glp[0] != 0) && is_offset_manual ==1) { - if (data_updata_ready == 0) + if (data_convert_ready == 0) { // 恢复寄存器 hx3918_write_reg(0x9c,0x07); // lp_out_delta_bypass //hx3918_write_reg(0x85,0x0f); // prox_int_high_num_i2c //hx3918_write_reg(0xa3,0xff); //lp_out_delta_thres_ch1[7:0] //hx3918_write_reg(0xa4,0x0f); // lp_out_delta_thres_ch1[11:8] - hx3918_write_reg(0x70,0x99); // RA_UP_ALP_1_0_CFG - data_updata_ready = 1; - HX3918_LOG("data_updata_ready == 1\r\n"); + hx3918_write_reg(0x70,0x00); // RA_UP_ALP_1_0_CFG + data_convert_ready = 1; + TYHX_LOG("data_convert_ready == 1\r\n"); } } if(gdiff[0]>sar_wear_thres) @@ -710,7 +715,7 @@ bool hx3918_prox_factory_init(void) for (i = 0; i<5; i++) { hx3918_chip_id = hx3918_check_device_id(); - TYHX_LOG(" power restart ,prox device_id is : 0x%.2x !\r\n", hx3918_chip_id); + HX3918_LOG(" power restart ,prox device_id is : 0x%.2x !\r\n", hx3918_chip_id); if (hx3918_chip_id == PROX_CHIPID) { hx3918_write_reg(0x18,0x40); //prf =100HZ @@ -722,7 +727,7 @@ bool hx3918_prox_factory_init(void) if(hx3918_chip_id != PROX_CHIPID) { - TYHX_LOG("no proximity device\r\n"); + HX3918_LOG("no proximity device\r\n"); hx3918_power_down(); } return ret; @@ -769,13 +774,15 @@ void hx3918_prox_factory_hanging_cali(void) // int16_t lp[2] = {0}; //uint8_t device_id = 0x00; is_offset_manual = 0; + HX3918_LOG("hx3918_prox_factory_hanging_cali0\n"); hx3918_prox_factory_init(); + HX3918_LOG("hx3918_prox_factory_hanging_cali1\n"); hx3918_delay(50);//delay 100ms - + HX3918_LOG("hx3918_prox_factory_hanging_cali2\n"); prox_factory_offset0 = hx3918_read_offset(WEAR_CH); prox_factory_offset1 = hx3918_read_offset(REF_CH); - + HX3918_LOG("hx3918_prox_factory_hanging_cali3\n"); prox_factory_lp[0] = hx3918_read_diff_lp(WEAR_CH); prox_factory_lp[1] = hx3918_read_diff_lp(REF_CH); @@ -792,7 +799,7 @@ void hx3918_prox_factory_hanging_cali(void) nv_wear_offset[1] = prox_factory_offset1; nv_base_data[0] = prox_factory_lp[0]; nv_base_data[1] = prox_factory_lp[1]; - HX3918_LOG("base0,base1= %d %d\r\n", glp[0],glp[1]); + HX3918_LOG("base0,base1= %d %d\r\n", prox_factory_lp[0],prox_factory_lp[1]); #ifdef DIFFERENCE_CH //将差分数据读到的OFFSET, NV_BASE记录到FLASH里面, 校准存储把自学习的记录也需要清掉重新计算 diff --git a/2.sdk/Helios_SDK/components/HX3918/hx3918_prox.h b/2.sdk/Helios_SDK/components/HX3918/hx3918_prox.h index 6069fdde..9882344f 100644 --- a/2.sdk/Helios_SDK/components/HX3918/hx3918_prox.h +++ b/2.sdk/Helios_SDK/components/HX3918/hx3918_prox.h @@ -77,8 +77,6 @@ #define READ_DEVATION 845 #elif defined(FULL375PF) #define READ_DEVATION 560 -#elif defined(FULL375PF) -#define READ_DEVATION 420 #elif defined(FULL50PF) #define READ_DEVATION 420 #endif diff --git a/2.sdk/Helios_SDK/components/HX3918/hx3918_spo2_agc.c b/2.sdk/Helios_SDK/components/HX3918/hx3918_spo2_agc.c index 03e0109b..523f1f94 100644 --- a/2.sdk/Helios_SDK/components/HX3918/hx3918_spo2_agc.c +++ b/2.sdk/Helios_SDK/components/HX3918/hx3918_spo2_agc.c @@ -188,7 +188,10 @@ void hx3918_spo2_ppg_init(void) //2023 3918 hx3918_delay(5); hx3918_write_reg(0X4d,0X00); //release hx3918_delay(5); - + +#ifdef SAR_ALG_LIB + hx3918_prox_reg_init(); +#endif read_fifo_first_flg = 1; } @@ -271,6 +274,15 @@ bool hx3918_spo2_check_wear(int32_t infrared_data) return true; } } + else{ + + if (spo2_wear_status == MSG_SPO2_INIT ) + { + spo2_wear_status = MSG_SPO2_NO_WEAR; + spo2_wear_status_pre = MSG_SPO2_NO_WEAR; + } + } + return false; } @@ -766,24 +778,25 @@ uint8_t hx3918_spo2_read(ppg_sensor_data_t * s_dat) int32_t Green_src_data; int32_t Amb_data; bool recal = false; +uint8_t i=0; int32_t *green_buf = &(s_dat->green_data[0]); int32_t *red_buf = &(s_dat->red_data[0]); int32_t *ir_buf = &(s_dat->ir_data[0]); int32_t *s_buf = &(s_dat->s_buf[0]); //int32_t *sar_lp_data = &s_dat->sar_data; + uint8_t data_count = 0; s_dat->green_cur = calReg.green_cur; s_dat->red_cur = calReg.red_cur; s_dat->ir_cur = calReg.ir_cur; - uint8_t data_count = 0; if (!s_ppg_state || s_cal_state) { - return NULL; + return 0; } data_count = hx3918_read_fifo_data(s_buf,4,1); //*sar_lp_data = hx3918_read_sar_data(); s_dat->count = data_count; - TYHX_LOG("\r\n spo2 ir data: "); - for (uint8_t i=0; icallback, mp_obj_new_int(cb_msg->state)); } break; + #if MICROPY_QPY_MODULE_GPIO_ENCODER + case CALLBACK_TYPE_ID_ENCODER: + { + st_CallBack_Encoder *cb_msg = (st_CallBack_Encoder *)msg.msg; + arg = mp_obj_new_int(cb_msg->spin_direct); + mp_sched_schedule_ex(&cb_msg->callback, arg); + } + break; + #endif #if MICROPY_QPY_MODULE_BT case CALLBACK_TYPE_ID_BT: { diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/callbackdeal.h b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/callbackdeal.h index fb282a5c..62d78e7d 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/callbackdeal.h +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/callbackdeal.h @@ -75,6 +75,9 @@ enum { #endif CALLBACK_TYPE_ID_TP, CALLBACK_TYPE_ID_Gsensor, +#if MICROPY_QPY_MODULE_GPIO_ENCODER + CALLBACK_TYPE_ID_ENCODER, +#endif #if MICROPY_QPY_MODULE_BT CALLBACK_TYPE_ID_BT, #endif @@ -121,7 +124,10 @@ typedef struct{ uint8_t state; c_callback_t callback; }st_CallBack_Gsensor; - +typedef struct{ + uint32_t spin_direct; + c_callback_t callback; +}st_CallBack_Encoder; typedef struct{ uint8_t pin_no; uint8_t edge; diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_HX3918.c b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_HX3918.c index a4aba300..c28ceec4 100644 --- a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_HX3918.c +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modHsensor_HX3918.c @@ -414,7 +414,9 @@ void HX3918_test(uint32_t mode) // Helios_GPIO_SetLevel(g_HX3918->power, HELIOS_LVL_HIGH); // Helios_msleep(20); // hx3918_init(WEAR_MODE);//打开佩戴检测 + HX3918_LOG("HX3918_test: hx3918_prox_factory_hanging_cali\r\n"); #ifdef SAR_ALG_LIB + //hx3918_prox_init(); hx3918_prox_factory_hanging_cali(); #endif } @@ -488,10 +490,18 @@ void HX3918_close(void) } void HX3918_restart(void) { + // Helios_GPIO_SetLevel(g_HX3918->power, HELIOS_LVL_LOW); + // Helios_msleep(50); + // Helios_GPIO_SetLevel(g_HX3918->power, HELIOS_LVL_HIGH); + // Helios_msleep(50); + Helios_GPIO_SetLevel(g_HX3918->power, HELIOS_LVL_LOW); - Helios_msleep(50); + Helios_msleep(10); Helios_GPIO_SetLevel(g_HX3918->power, HELIOS_LVL_HIGH); - Helios_msleep(50); + Helios_GPIO_SetLevel(31, HELIOS_LVL_LOW); + Helios_msleep(20); + Helios_GPIO_SetLevel(31, HELIOS_LVL_HIGH); + Helios_msleep(20); } //关闭hsensor STATIC mp_obj_t mp_HX3918_close(mp_obj_t self_in) diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modgpio_encoder.c b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modgpio_encoder.c new file mode 100644 index 00000000..89ca406f --- /dev/null +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modgpio_encoder.c @@ -0,0 +1,240 @@ +#include +#include +#include + +#include "obj.h" +#include "runtime.h" +#include "mperrno.h" + +#include "mpconfigboard.h" +#if MICROPY_QPY_MODULE_GPIO_ENCODER + +#include "helios_debug.h" +#include "helios_extint.h" +#include "helios_gpio.h" +#include "modgpio_encoder.h" +#include "callbackdeal.h" + +#define HELIOS_ENCODER_LOG(msg, ...) custom_log("gpio codec", msg, ##__VA_ARGS__) + +#define STEP_RIGHT 1 +#define STEP_LEFT 2 + + +char first_line = 0; //第一次跳变的线(A 0r B) +char first_line_edge = 0; //跳边沿 +int gpio_a = 0; +int gpio_b = 0; +int step1_switch = 0; +static c_callback_t *usr_callback = NULL; +static c_callback_t cb = {0}; + +/* 定义encoder_obj_t结构体 */ +typedef struct _encoder_obj_t +{ + mp_obj_base_t base; //定义的对象结构体要包含该成员 +}encoder_obj_t; + +void knob_line_A_detection(void) +{ + step1_switch = 0; + if (Helios_GPIO_GetLevel(gpio_a) == 0) //A线产生下降沿 + { + if (first_line == 'B') + { + if (first_line_edge == 0) + { + first_line = 0; + //先B下降沿,然后A下降沿,判断为逆时针转动一次 + step1_switch = STEP_RIGHT; + } + else + { + //先B上升沿,然后A下降沿,判断为顺时针转动一次 + first_line = 0; + step1_switch = STEP_LEFT; + } + } + else + { + //首次A下降沿 + first_line = 'A'; + first_line_edge = 0; + } + } + else //A线产生上升沿 + { + if (first_line == 'B') + { + if (first_line_edge == 0) + { + //先B下降沿,然后A上升沿,判断为顺时针转动一次 + first_line = 0; + step1_switch = STEP_LEFT; + } + else + { + first_line = 0; + //先B上升沿,然后A上升沿,判断为逆时针转动一次 + step1_switch = STEP_RIGHT; + } + } + else + { + //首次A上升沿 + first_line = 'A'; + first_line_edge = 1; + } + } + if (usr_callback && step1_switch) { + st_CallBack_Encoder *encoder_int = malloc(sizeof(st_CallBack_Encoder)); + if(NULL != encoder_int) { + encoder_int->spin_direct = step1_switch; + encoder_int->callback = cb; + qpy_send_msg_to_callback_deal_thread(CALLBACK_TYPE_ID_ENCODER, encoder_int); + } + } + Helios_ExtInt_Enable((Helios_GPIONum)gpio_a); +} + +void knob_line_B_detection(void) +{ + step1_switch = 0; + if (Helios_GPIO_GetLevel(gpio_b) == 0) //B线产生下降沿 + { + if (first_line == 'A') + { + if (first_line_edge == 0) + { + first_line = 0; + //先A下降沿,然后B下降沿,判断为顺时针转动一次 + step1_switch = STEP_LEFT; + } + else + { + //先A上升沿,然后B下降沿,判断为逆时针转动一次 + first_line = 0; + step1_switch = STEP_RIGHT; + } + } + else + { + //首次B上升沿 + first_line = 'B'; + first_line_edge = 0; + } + } + else //B线产生上升沿 + { + if (first_line == 'A') + { + if (first_line_edge == 0) + { + //先A下降沿,然后B上升沿,判断为逆时针转动一次 + first_line = 0; + step1_switch = STEP_RIGHT; + } + else + { + first_line = 0; + //先A上升沿,然后B上升沿,判断为顺时针转动一次 + step1_switch = STEP_LEFT; + } + } + else + { + //首次B上升沿 + first_line = 'B'; + first_line_edge = 1; + } + } + + if (usr_callback && step1_switch) { + st_CallBack_Encoder *encoder_int = malloc(sizeof(st_CallBack_Encoder)); + if(NULL != encoder_int) { + encoder_int->spin_direct = step1_switch; + encoder_int->callback = cb; + qpy_send_msg_to_callback_deal_thread(CALLBACK_TYPE_ID_ENCODER, encoder_int); + } + } + + Helios_ExtInt_Enable((Helios_GPIONum)gpio_b); +} + + +mp_obj_t encoder_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { + enum { ARG_pin_A, ARG_pin_B}; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_pin_A, MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = 0} }, + { MP_QSTR_pin_B, MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = 0} }, + }; + + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + int pin_a = args[ARG_pin_A].u_int; + int pin_b = args[ARG_pin_B].u_int; + int ret=-1; + gpio_a = pin_a; + gpio_b = pin_b; + encoder_obj_t *self = m_new_obj_with_finaliser(encoder_obj_t); + self->base.type = &encoder_type; + HELIOS_ENCODER_LOG("encoder_make_new start!!!,a:%d,b:%d", gpio_a, gpio_b); + // init extint A + Helios_ExtIntStruct extint_struct = {0}; + extint_struct.gpio_trigger = HELIOS_EDGE_TRIGGER; + extint_struct.gpio_edge = HELIOS_EDGE_BOTH; + extint_struct.gpio_debounce = HELIOS_DEBOUNCE_EN; + extint_struct.gpio_pull = HELIOS_PULL_UP; + extint_struct.eint_cb = NULL; + extint_struct.wakeup_eint_cb = knob_line_A_detection; + if(0 != Helios_ExtInt_Init((Helios_GPIONum)pin_a, &extint_struct)) { + mp_raise_ValueError("Interrupt initialization failed"); + } + Helios_ExtInt_Enable((Helios_GPIONum)pin_a); + + // init extint B + extint_struct.gpio_trigger = HELIOS_EDGE_TRIGGER; + extint_struct.gpio_edge = HELIOS_EDGE_BOTH; + extint_struct.gpio_debounce = HELIOS_DEBOUNCE_EN; + extint_struct.gpio_pull = HELIOS_PULL_UP; + extint_struct.eint_cb = NULL; + extint_struct.wakeup_eint_cb = knob_line_B_detection; + if(0 != Helios_ExtInt_Init((Helios_GPIONum)pin_b, &extint_struct)) { + mp_raise_ValueError("Interrupt initialization failed"); + } + Helios_ExtInt_Enable((Helios_GPIONum)pin_b); + + return MP_OBJ_FROM_PTR(self); +} + +STATIC mp_obj_t set_callback(mp_obj_t self_in, const mp_obj_t handler) +{ + usr_callback = &cb; + mp_sched_schedule_callback_register(usr_callback, handler); + + return mp_obj_new_int(1); +} +STATIC MP_DEFINE_CONST_FUN_OBJ_2(set_callback_obj, set_callback); + + +/* 定义type的本地字典 */ +STATIC const mp_rom_map_elem_t encoder_locals_dict_table[] = { + { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_encoder) }, + { MP_ROM_QSTR(MP_QSTR_set_callback), MP_ROM_PTR(&set_callback_obj) }, +}; + +STATIC MP_DEFINE_CONST_DICT(encoder_locals_dict, encoder_locals_dict_table); + +/* 定义mp_obj_type_t类型的结构体;注意这里和定义module使用的类型是不一样的 */ +const mp_obj_type_t encoder_type = { + .base={ &mp_type_type }, + .name = MP_QSTR_ENCODER, //type类的name属性是放在这里定义,而不是放在DICT中 + .make_new = encoder_make_new, //添加的make new属性 + .locals_dict = (mp_obj_dict_t*)&encoder_locals_dict, //注册encoder_locals_dict +}; + + + +#endif /* MICROPY_QPY_MODULE_GPIO_ENCODER */ + diff --git a/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modgpio_encoder.h b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modgpio_encoder.h new file mode 100644 index 00000000..31b438e1 --- /dev/null +++ b/2.sdk/Helios_SDK/services/microPython/ports/quectel/core/source/modgpio_encoder.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MICROPY_INCLUDED_ENCODER_H +#define MICROPY_INCLUDED_ENCODER_H + +#include "helios_os.h" + +#include + + +#endif // MICROPY_INCLUDED_ENCODER_H + 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 82f311e5..e8cddda0 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 @@ -707,6 +707,12 @@ extern const struct _mp_obj_module_t mp_module_Gsensor; #else #define MICROPY_PORT_BUILTIN_MODULES_Gsensor #endif +#if MICROPY_QPY_MODULE_GPIO_ENCODER +extern const struct _mp_obj_type_t encoder_type; +#define MICROPY_PORT_BUILTIN_MODULES_ENCODER { MP_OBJ_NEW_QSTR(MP_QSTR_encoder), (mp_obj_t)&encoder_type}, +#else +#define MICROPY_PORT_BUILTIN_MODULES_ENCODER +#endif #if 1 //MICROPY_QPY_MODULE_Hsensor extern const struct _mp_obj_module_t mp_module_Hsensor; @@ -786,6 +792,7 @@ extern const struct _mp_obj_module_t mp_module_network; MICROPY_PORT_BUILTIN_MODULES_ALIPAY \ MICROPY_PORT_BUILTIN_MODULES_G729 \ MICROPY_PORT_BUILTIN_MODULES_Gsensor \ + MICROPY_PORT_BUILTIN_MODULES_ENCODER \ MICROPY_PORT_BUILTIN_MODULES_Hsensor \ MICROPY_PORT_BUILTIN_MODULES_VideoCall \ MICROPY_PORT_BUILTIN_MODULES_code128\ 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 7b20a27c..b86010e9 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 @@ -357,6 +357,7 @@ SRC_QSTR += \ source/modHsensor.c \ source/modHsensor_GH3018.c \ source/modHsensor_HX3918.c \ + source/modgpio_encoder.c \ source/modrsa.c \ source/utils_crc32.c \ source/http_parser.c \ 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 10b43b41..dc498ccb 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 @@ -345,7 +345,7 @@ class FactoryModeHsensorTestScreen(Screen): print("打开校准模式") self.Hsensor.set_sar(1) self.Hsensor.open_test(255) #打开校准模式 - utime.sleep_ms(500) + utime.sleep_ms(1000) self.Hsensor.open_heart() self.hsensorTest_timer_count = 5 @@ -375,7 +375,8 @@ class FactoryModeHsensorTestScreen(Screen): self.hsensorTest_timer_count -= 1 if self.hsensorTest_timer_count == 0: self.Hsensor.close() - self.Hsensor.init(); + utime.sleep_ms(500) + self.Hsensor.init() def Close(self): self.hsensorTest_timer.stop() diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py index 8ecb7159..a78c30ef 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py @@ -5,7 +5,10 @@ from misc import PowerKey import EventMesh from machine import Pin from machine import ExtInt +import utime import constants +import encoder + class BtnDevice(Abstract): def __init__(self, tp=None): @@ -20,13 +23,18 @@ class BtnDevice(Abstract): self.GPIO41_status = 0 self.powerKey_status = 0 self.Coder_timer = osTimer() - #self.Coder_data_str_1 = "" + self.Coder_timer_count = 0 + self.Coder_data_str_1 = "" self.Coder_data_str_2 = "" self.Coder_IO_tmp = 0 self.Coder_data_tmp = [] self.Coder_data1 = [] - + self.start_timer_a = 0 + self.start_timer_b = 0 + self.start_timer_flag = 0 + self.tmp_a = 1 + self.tmp_b = 1 def post_processor_after_instantiation(self): # self.keypad.init() # self.keypad.set_callback(self.key_callback) @@ -37,6 +45,8 @@ class BtnDevice(Abstract): self.extint = ExtInt(ExtInt.GPIO41, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.pwk_extint_cb) self.extint.enable() + # self.coder = encoder(Pin.GPIO22,Pin.GPIO21) + # self.coder.set_callback(self.Coder_cb) self.Coder_A = ExtInt(ExtInt.GPIO22, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.Coder_cb) self.Coder_A.enable() @@ -53,30 +63,54 @@ class BtnDevice(Abstract): def Coder_cb(self,args): - if self.Coder_data_str_2 == "": + #print("Coder_cb {}".format(args)) + self.Coder_timer_count = 0 + if self.start_timer_flag == 0: #self.Coder_timer.stop() - self.Coder_timer.start(1000, 1, self.Coder_timer_cb) + #self.Coder_data_str_2 = "11" + self.start_timer_flag = 1 + self.Coder_timer_count = 0 + self.Coder_timer.start(100, 1, self.Coder_timer_cb) rest_flag = 0 - # data_tmp = "" - # if args[0] == 21: - # data_tmp = "B{},".format(args[1]) - # elif args[0] == 22: - # data_tmp = "A{},".format(args[1]) - # self.Coder_data_str_1+=data_tmp + data_tmp = "" + if args[0] == 21: + # if self.Coder_B.read_level() == 1: + # self.start_timer_b = utime.ticks_us() + # else : + diff = utime.ticks_diff(utime.ticks_us(), self.start_timer_b) + self.start_timer_b = utime.ticks_us() + if diff > 8000 :#and diff <200000: + data_tmp = "B:{} {} {}\n".format(args[1],diff//1000,self.Coder_B.read_level()) + else : + return + elif args[0] == 22: + #if self.Coder_A.read_level() == 1: + + diff = utime.ticks_diff(utime.ticks_us(), self.start_timer_a) + self.start_timer_a = utime.ticks_us() + if diff > 8000 :#and diff <200000: + data_tmp = "A:{} {} {}\n".format(args[1],diff//1000,self.Coder_A.read_level()) + else : + return + #self.Coder_data_str_1+=data_tmp if self.Coder_IO_tmp != 0 : - if self.Coder_IO_tmp != args[0]: + if self.Coder_IO_tmp != args[0] :#上一个中断io和当前中断io不一样 if self.Coder_data1 == []: self.Coder_data1 = self.Coder_data_tmp if self.Coder_data1[0] == 22 and self.Coder_data1[1] == 1: - #self.Coder_data_str_1 += "-左滑" + #self.Coder_data_str_1 += "-上滑\n" self.Coder_data_str_2+="上滑 " - EventMesh.publish("done_UP") + flag = EventMesh.publish("get_lcd_state") + if flag == 1: + EventMesh.publish("done_UP") #rest_flag = 1 elif self.Coder_data1[0] == 21 and self.Coder_data1[1] == 1 : - #self.Coder_data_str_1 += "-右滑" + #self.Coder_data_str_1 += "-下滑\n" self.Coder_data_str_2+="下滑 " - EventMesh.publish("done_DOWN") + flag = EventMesh.publish("get_lcd_state") + if flag == 1: + EventMesh.publish("done_DOWN") else: rest_flag = 1 elif args[0] != self.Coder_data1[0] and args[1] == 0:#分段 @@ -85,24 +119,51 @@ class BtnDevice(Abstract): #self.Coder_data_str_1+="分段" rest_flag = 1 - if rest_flag == 1 : + if rest_flag == 1 :#判断完有效清数据 self.Coder_data1 = [] self.Coder_IO_tmp = 0 else : + self.Coder_IO_tmp = args[0] self.Coder_data_tmp =args def Coder_timer_cb(self, *args): - #print("Coder1:{}".format(self.Coder_data_str_1)) - print("Coder2:{}".format(self.Coder_data_str_2)) - - #self.Coder_data_str_1 = "" - self.Coder_data_str_2 = "" - self.Coder_data1 = [] - self.Coder_IO_tmp = 0 - self.Coder_timer.stop() + # tmp = self.Coder_A.read_level() + # data_tmp = "" + # if self.tmp_a != tmp : + # if self.start_timer_a != 0: + # data_tmp = "A{} {},".format(self.tmp_a,self.start_timer_a*6) + # self.start_timer_a = 0 + # else: + # self.start_timer_a += 1 + # self.tmp_a = tmp + + # tmp = self.Coder_B.read_level() + # if self.tmp_b != tmp : + # if self.start_timer_b != 0: + # data_tmp = "B{} {},".format(self.tmp_b,self.start_timer_b*6) + # self.start_timer_b = 0 + # else: + # self.start_timer_b += 1 + # self.tmp_b = tmp + # self.Coder_data_str_1+=data_tmp + self.Coder_timer_count += 1 + if self.Coder_timer_count > 4: + #print("Coder1:\n{}".format(self.Coder_data_str_1)) + print("Coder2:\n{}".format(self.Coder_data_str_2)) + self.Coder_timer_count = 0 + self.Coder_data_str_1 = "" + self.Coder_data_str_2 = "" + self.Coder_data1 = [] + self.Coder_IO_tmp = 0 + self.start_timer_b = 0 + self.start_timer_a = 0 + self.tmp_a = 1 + self.tmp_b = 1 + self.Coder_timer.stop() + self.start_timer_flag=0 def pwk_extint_cb(self,args): #print('### interrupt {} '.format(args)) # args[0]:gpio号 args[1]:上升沿或下降沿 diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/main_1.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/main_1.py index 1fdd2dfa..68ba3fff 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/main_1.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/main_1.py @@ -1,60 +1,2 @@ -import sms -import atcmd -import net -import machine -import usys -resp=bytearray(50) -# atcmd.sendSync('AT+log=52,1\r\n',resp,'',200) -# print("AT+log=52,1:{}".format(resp)) -from common import Abstract -class App(object): - def __init__(self): - self.managers = [] - - def append_manager(self, manager): - try: - if isinstance(manager, Abstract): - manager.post_processor_after_instantiation() - self.managers.append(manager) - except Exception as e: - usys.print_exception(e) - return self - - def start(self): - try: - for manager in self.managers: - manager.post_processor_before_initialization() - manager.initialization() - manager.post_processor_after_initialization() - except Exception as e: - usys.print_exception(e) - -class watchApp(App): - def __init__(self): - super(watchApp, self).__init__() - self.__ui = None - - def set_ui(self, ui): - self.__ui = ui - - def start(self): - if self.__ui is not None: - self.__ui.start() - super().start() - - - -if __name__ == '__main__': - - from ui_main_menu import MainMenuScreen - # from ui_WatchFaceScreen import WatchFaceScreen - - import ui as _ui - # import ui as _ui - #print("init4:{}".format(utime.localtime())) - ui = _ui.UI() - ui.post_processor_after_instantiation() - ui.add_screen(MainMenuScreen()) - - - +import main_init +main_init.main_init() \ No newline at end of file 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 0eea0181..b9b089e2 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 @@ -2163,10 +2163,10 @@ class LocationManager(Abstract): 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())) + # 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)) : if i % 2 == 0: diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui.py index b196f053..7c9271d9 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui.py @@ -7233,6 +7233,8 @@ class UI(object): self.system_sleep_timeout_rest() def ui_press(self, event, key): + EventMesh.publish("publish_message_event_ui",{"func":self.ui_press_do,"data":event}) + def ui_press_do(self, event): screen_NAME = EventMesh.publish("get_screen_NAME") if screen_NAME == "system_init": return @@ -7256,7 +7258,10 @@ class UI(object): self.screen.done_UP() # if event == "done_press": # self.system_sleep_timeout_rest() + def btn_press(self, event, key): + EventMesh.publish("publish_message_event_ui",{"func":self.btn_press_do,"data":event}) + def btn_press_do(self, event): screen_NAME = EventMesh.publish("get_screen_NAME") if screen_NAME == "system_init": return @@ -7264,8 +7269,6 @@ class UI(object): #主表盘按电源键,息屏 #息屏状态按按钮都亮屏 - - if self.main_flag != 1 and self.sleep_flag == 0: if event == "btn8_long_press": if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:#有卡时触发sos报警 无卡时自动关机 diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_WatchFaceScreen.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_WatchFaceScreen.py index fb0130ae..6dbc5fbf 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_WatchFaceScreen.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_WatchFaceScreen.py @@ -188,14 +188,15 @@ watchface1_SPO2_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFA class WatchFace1(): NAME = "Watchface1" # # #表盘1 - def __init__(self,main_menu): + def __init__(self): print("Watchface1:__init__") self.meta = Watchface1 + def set_parent(self,main_menu): Watchface1.set_parent(main_menu)#设置父控件 - def initialization(self,main_menu): + def initialization(self): print("Watchface1:initialization") - + #Watchface1.set_parent(main_menu)#设置父控件 #获取信号 signal = EventMesh.publish("screen_get_sig") if signal: @@ -449,14 +450,15 @@ watchface2_step_txt.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAU class WatchFace2(): NAME = "Watchface2" # # #表盘2 - def __init__(self,main_menu): + def __init__(self): print("Watchface2:__init__") self.meta = Watchface2 - Watchface2.set_parent(main_menu)#设置父控件 - - def initialization(self,main_menu): + def set_parent(self,main_menu): + Watchface1.set_parent(main_menu)#设置父控件 + + def initialization(self): print("Watchface2:initialization") - + #Watchface2.set_parent(main_menu)#设置父控件 #获取信号 signal = EventMesh.publish("screen_get_sig") if signal: @@ -593,41 +595,54 @@ class WatchFace2(): class WatchFace(): #NAME = "Watchface" - def __init__(self): + def __init__(self,main_menu): #表盘 self.meta = None self.watchface_style_num = "Watchface1" self.watchface_list = [] + self.watchface_style = None self.timer_update = osTimer() EventMesh.subscribe("set_change_face", self.change_face) self.PWM_backlight = None read_data = EventMesh.publish("get_storage_config","watchface") if read_data != None: self.watchface_style_num = read_data - - - - def initialization(self,main_menu): if self.watchface_list == [] : #第一次初始化 - self.watchface_list.append( WatchFace1(main_menu)) - self.watchface_list.append( WatchFace2(main_menu)) - print("watchface INIT !!!!!!!!:",self.watchface_style_num) + self.watchface_list.append( WatchFace1()) + self.watchface_list.append( WatchFace2()) + self.set_parent( main_menu) + for wat in self.watchface_list: if wat.NAME == self.watchface_style_num : self.watchface_style = wat wat.meta.add_flag(lv.obj.FLAG.HIDDEN) #隐藏 - self.watchface_style.initialization(main_menu) + self.watchface_style.initialization() self.meta = self.watchface_style.meta self.watchface_style.meta.clear_flag(lv.obj.FLAG.HIDDEN)#显示 + + def initialization(self): + + print("watchface INIT !!!!!!!!:",self.watchface_style_num) + self.timer_update.start(10000, 1, self.timerout_update) + def set_parent(self,main_menu): + Watchface1.set_parent(main_menu)#设置父控件 + Watchface2.set_parent(main_menu)#设置父控件 + def timerout_update(self, *args, **kwargs): self.watchface_style.timerout_update() def change_face(self, event=None, msg=None): print("change_face :",msg) self.watchface_style_num = str(msg) - + for wat in self.watchface_list: + if wat.NAME == self.watchface_style_num : + self.watchface_style = wat + wat.meta.add_flag(lv.obj.FLAG.HIDDEN) #隐藏 + self.watchface_style.initialization() + self.meta = self.watchface_style.meta + self.watchface_style.meta.clear_flag(lv.obj.FLAG.HIDDEN)#显示 EventMesh.publish("load_screen", {"screen": "main_menu"}) diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_main_menu.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_main_menu.py index 4cb52449..d570acce 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_main_menu.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_main_menu.py @@ -9,7 +9,7 @@ import osTimer import constants from misc import Power import pm -from ui import Screen +from ui import Screen,style_screen from ui_WatchFaceScreen import WatchFace from lcd import LCD_SIZE_W,LCD_SIZE_H MAIN_ICON_SZIE = 120 #菜单界面图片的大小 @@ -50,45 +50,7 @@ style_btn.set_shadow_opa(0) style_btn.set_border_width(0) -# MainMenu = lv.obj() -# class MainMenuScreen(Screen): -# NAME = "main_menu" - -# def __init__(self): -# super().__init__() -# #主菜单 -# self.meta = MainMenu -# self.main_menu_style_num = "MainMenu2" - -# def initialization(self): -# print("main_menu INIT !!!!!!!!") -# EventMesh.publish("load_screen", {"screen": self.main_menu_style_num}) - - -# def post_processor_after_instantiation(self): -# EventMesh.subscribe("change_style", self.change_style) - - -# def change_style(self, event=None, msg=None): #换风格 -# self.main_menu_style_num = msg -# EventMesh.publish("load_screen", {"screen": self.main_menu_style_num}) - -# def Close(self): -# return - - -# def done_return(self): -# EventMesh.publish("load_screen", {"screen": "Watchface"}) - -# def btn1_release(self): -# EventMesh.publish("load_screen", {"screen": "Watchface"}) - -# def btn8_press(self): -# EventMesh.publish("load_screen", {"screen": "Watchface"}) - - - - +MainMenu = lv.obj() style_font_youyuan_font_60 = lv.style_t() style_font_youyuan_font_60.init() @@ -96,7 +58,11 @@ style_font_youyuan_font_60.set_text_color(lv.color_make(0xFF, 0xFF, 0xFF)) style_font_youyuan_font_60.set_text_font(lv.font_60_main_menu) MainMenu2x = 0 MainMenu2_num = 0 -MainMenu2 = lv.obj() +MainMenu2 = lv.obj(MainMenu) +MainMenu2.set_size(LCD_SIZE_W,LCD_SIZE_H) +#MainMenu1.set_pos(0,0) +MainMenu2.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF) +MainMenu2.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT) print("MainMenu2") MainMenu2_til = lv.tileview(MainMenu2) MainMenu2_til.set_scrollbar_mode(0) @@ -111,6 +77,7 @@ label_text = lv.label(MainMenu2_Watchface) label_text.set_pos(0, LCD_SIZE_W) label_text.set_size(0, 0) label_text.set_text("0") + MainMenu2_num+=1 # #支付宝 # MainMenu2_alipay = MainMenu2_til.add_tile(MainMenu2x, 0, lv.DIR.LEFT | lv.DIR.RIGHT) @@ -325,21 +292,132 @@ MainMenu2x+=1 +################################################################################################################ +MainMenu1x = 0 +MainMenu1_num = 0 +MainMenu1 = lv.obj(MainMenu) +MainMenu1.set_size(LCD_SIZE_W,LCD_SIZE_H) +#MainMenu1.set_pos(0,0) +MainMenu1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF) +MainMenu1.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT) +print("MainMenu1") +MainMenu1_til = lv.tileview(MainMenu1) +MainMenu1_til.set_scrollbar_mode(0) +MainMenu1_til.set_size(240,284) +MainMenu1_til.add_style(style_MainMenu_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT) +#MainMenu1_til.add_flag(lv.obj.FLAG.SCROLL_ELASTIC) +#LV_OBJ_FLAG_SCROLL_MOMENTUM +#表盘 +MainMenu1_Watchface = MainMenu1_til.add_tile(0, 1, lv.DIR.LEFT | lv.DIR.RIGHT) + +label_text = lv.label(MainMenu1_Watchface) +label_text.set_pos(0, LCD_SIZE_W) +label_text.set_size(0, 0) +label_text.set_text("0") + + + +MainMenu1_num+=1 + +#拨号盘 +MainMenu1_phone = MainMenu1_til.add_tile(MainMenu1x, 0, lv.DIR.LEFT | lv.DIR.RIGHT) +label_text = lv.label(MainMenu1_phone) +label_text.set_pos(0, LCD_SIZE_H) +label_text.set_size(0, 0) +label_text.set_text("{}".format(MainMenu1_num)) +MainMenu1_img_phone = lv.img(MainMenu1_phone) +MainMenu1_img_phone.set_size(MAIN_ICON_SZIE,MAIN_ICON_SZIE) +MainMenu1_img_phone.set_pos(MAIN_ICON_X,MAIN_ICON_Y) +MainMenu1_img_phone.set_src("U:/static/IMAGE_ONE_PAGE_CALL.png") +MainMenu1_img_phone.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_phone.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) + +MainMenu1_img_phone_text = lv.label(MainMenu1_phone) +MainMenu1_img_phone_text.set_pos(int(0),int(MAIN_LABEL_Y)) +MainMenu1_img_phone_text.set_size(LCD_SIZE_W,LCD_SIZE_H-MAIN_LABEL_Y) +MainMenu1_img_phone_text.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_phone_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu1_img_phone_text.set_text("拨号盘人") +MainMenu1_img_phone_text.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT) +MainMenu1_num+=1 +MainMenu1x+=1 + +#通讯录 +MainMenu1_contacts = MainMenu1_til.add_tile(MainMenu1x, 0, lv.DIR.LEFT | lv.DIR.RIGHT) +label_text = lv.label(MainMenu1_contacts) +label_text.set_pos(0, LCD_SIZE_H) +label_text.set_size(0, 0) +label_text.set_text("{}".format(MainMenu1_num)) +MainMenu1_img_contacts = lv.img(MainMenu1_contacts) +MainMenu1_img_contacts.set_size(MAIN_ICON_SZIE,MAIN_ICON_SZIE) +MainMenu1_img_contacts.set_pos(MAIN_ICON_X,MAIN_ICON_Y) +MainMenu1_img_contacts.set_src("U:/static/IMAGE_ONE_PAGE_CONTACTS.png") +MainMenu1_img_contacts.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_contacts.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) + +MainMenu1_img_contacts_txt = lv.label(MainMenu1_contacts) +MainMenu1_img_contacts_txt.set_pos(int(0),int(MAIN_LABEL_Y)) +MainMenu1_img_contacts_txt.set_size(LCD_SIZE_W,LCD_SIZE_H-MAIN_LABEL_Y) +MainMenu1_img_contacts_txt.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_contacts_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu1_img_contacts_txt.set_text("联系人拨") +MainMenu1_img_contacts_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT) +MainMenu1_num+=1 +MainMenu1x+=1 +#短信 +MainMenu1_SMS = MainMenu1_til.add_tile(MainMenu1x, 0, lv.DIR.LEFT | lv.DIR.RIGHT) +label_text = lv.label(MainMenu1_SMS) +label_text.set_pos(0, LCD_SIZE_H) +label_text.set_size(0, 0) +label_text.set_text("{}".format(MainMenu1_num)) +MainMenu1_img_sms = lv.img(MainMenu1_SMS) +MainMenu1_img_sms.set_size(MAIN_ICON_SZIE,MAIN_ICON_SZIE) +MainMenu1_img_sms.set_pos(MAIN_ICON_X,MAIN_ICON_Y) +MainMenu1_img_sms.set_src("U:/static/IMAGE_ONE_PAGE_SMS.png") +MainMenu1_img_sms.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_sms.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT) + +MainMenu1_img_sms_txt = lv.label(MainMenu1_SMS) +MainMenu1_img_sms_txt.set_pos(int(0),int(MAIN_LABEL_Y)) +MainMenu1_img_sms_txt.set_size(LCD_SIZE_W,LCD_SIZE_H-MAIN_LABEL_Y) +MainMenu1_img_sms_txt.add_flag(lv.obj.FLAG.CLICKABLE) +MainMenu1_img_sms_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0) +MainMenu1_img_sms_txt.set_text("短信") +MainMenu1_img_sms_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT) +MainMenu1_num+=1 +MainMenu1x+=1 #主菜单风格2,单页 class MainMenuScreen(Screen): NAME = "main_menu" def __init__(self): - self.meta = MainMenu2 - self.watchface = WatchFace() + self.meta = MainMenu + self.MainMenu_Watchface = None + self.MainMenu_til = None + self.MainMenu_num = None + self.watchface = None + self.set_mainmenu(msg = "2") + + self.watchface = WatchFace(self.MainMenu_Watchface ) + + read_data = EventMesh.publish("get_storage_config","MainMenu") + if read_data != None: + self.set_mainmenu(msg = [read_data,0]) + EventMesh.subscribe("set_mainmenu", self.set_mainmenu) self.menu_id = "0" self.menu_new_id = "255" self.menu_old_id = "255" self.is_sliding = 0 self.scroll_begin_event_count = 0 self.menu_action = 0 # =1左滑 =2右划 + ###1 + MainMenu1_til.add_event_cb(lambda e: EventMesh.callback_wrapper(self.scroll_begin_event_cb(e)),lv.EVENT.SCROLL_END,None) + #lv_obj_add_event_cb(lv_tabview_get_content(tabview), scroll_begin_event, LV_EVENT_SCROLL_END, NULL); + MainMenu1_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "Phone")), lv.EVENT.CLICKED, None) + MainMenu1_img_phone.add_event_cb(lambda e: EventMesh.callback_wrapper(self.img_cb(e, "Phone")), lv.EVENT.PRESSING, None) + ##2 print("MainMenu1:__init__") MainMenu2_til.add_event_cb(lambda e: EventMesh.callback_wrapper(self.scroll_begin_event_cb(e)),lv.EVENT.SCROLL_END,None) #lv_obj_add_event_cb(lv_tabview_get_content(tabview), scroll_begin_event, LV_EVENT_SCROLL_END, NULL); @@ -368,14 +446,55 @@ class MainMenuScreen(Screen): #MainMenu2_img_alipay.add_event_cb(lambda e: img_cb(e, "Watchface_set"), lv.EVENT.CLICKED, None) def initialization(self): - self.watchface.initialization(MainMenu2_Watchface) + + self.watchface.initialization() self.is_sliding = 0 if self.menu_id =="0": - MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(0,1,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) + # self.MainMenu_til.set_tile_id(self.meta_info[0],self.meta_info[1],lv.ANIM.OFF) pass# - + + #切换菜单风格 + def set_mainmenu(self, event=None, msg=None): + if self.watchface != None: + self.watchface.Close() + MainMenu2.add_flag(lv.obj.FLAG.HIDDEN)#隐藏菜单 + MainMenu1.add_flag(lv.obj.FLAG.HIDDEN) + if msg[0] == "2": + MainMenu2.clear_flag(lv.obj.FLAG.HIDDEN)#显示菜单 + self.MainMenu_Watchface = MainMenu2_Watchface + self.MainMenu_til = MainMenu2_til + self.MainMenu_num = MainMenu2_num + # self.watchface = MainMenu2_watchface + print("set_mainmenu2") + elif msg[0] == "1": + MainMenu1.clear_flag(lv.obj.FLAG.HIDDEN) + self.MainMenu_Watchface = MainMenu1_Watchface + self.MainMenu_til = MainMenu1_til + self.MainMenu_num = MainMenu1_num + #self.watchface = MainMenu1_watchface + print("set_mainmenu1") + else : + MainMenu1.clear_flag(lv.obj.FLAG.HIDDEN) + self.MainMenu_Watchface = MainMenu1_Watchface + self.MainMenu_til = MainMenu1_til + self.MainMenu_num = MainMenu1_num + #self.watchface = MainMenu1_watchface + msg[0] = "1" + + EventMesh.publish("set_storage_config",["MainMenu",msg[0]]) + if self.watchface != None: + self.watchface.set_parent(self.MainMenu_Watchface)#切换父对象,比较危险 + self.watchface.initialization() + self.menu_id = "0" + if len (msg ) >= 2: + if msg[1] != 0 : + #EventMesh.publish("load_screen", {"screen": "setting"}) + EventMesh.publish("load_screen", {"screen": "main_menu"}) + #self.MainMenu_til.set_tile_id(0,1,lv.ANIM.OFF) + #self.initialization() + self.MainMenu_til.set_tile_id(0,1,lv.ANIM.OFF) def scroll_begin_event_cb(self, e): pass # EventMesh.publish("publish_message_event_ui",{"func":self.scroll_begin_event,"data":0}) @@ -384,18 +503,18 @@ class MainMenuScreen(Screen): # self.scroll_begin_event_count+=1 # if self.scroll_begin_event_count == 1: - # self.menu_new_id = MainMenu2_til.get_tile_act().get_child(0).get_text() + # self.menu_new_id = self.MainMenu_til.get_tile_act().get_child(0).get_text() # #print("scroll_begin_event scroll_begin_event {} old_id {} new_id{}".format(self.scroll_begin_event_count,self.menu_old_id,self.menu_new_id)) # elif self.scroll_begin_event_count == 2: - # self.menu_old_id = MainMenu2_til.get_tile_act().get_child(0).get_text() + # self.menu_old_id = self.MainMenu_til.get_tile_act().get_child(0).get_text() # print("scroll_begin_event menu_action {} old_id {} new_id {}".format(self.menu_action,self.menu_old_id,self.menu_new_id)) # self.scroll_begin_event_count = 0 # if self.menu_old_id == self.menu_new_id and self.menu_action == 1: - # MainMenu2_til.set_tile_id(int(self.menu_old_id)-2,0,lv.ANIM.ON) + # self.MainMenu_til.set_tile_id(int(self.menu_old_id)-2,0,lv.ANIM.ON) # print("scroll_begin_event menu_action == 1") # elif self.menu_old_id == self.menu_new_id and self.menu_action == 2: # print("scroll_begin_event menu_action == 2") - # MainMenu2_til.set_tile_id(int(self.menu_old_id),0,lv.ANIM.ON) + # self.MainMenu_til.set_tile_id(int(self.menu_old_id),0,lv.ANIM.ON) # self.menu_action = 0 # else : # self.scroll_begin_event_count = 0 @@ -406,7 +525,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) + self.MainMenu_til.set_tile_id(0,1,lv.ANIM.OFF) def img_cb(self,e,msg): code = e.get_code() @@ -429,32 +548,32 @@ class MainMenuScreen(Screen): self.watchface.timer_update.stop() def done_return(self): - MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(0,1,lv.ANIM.OFF) def btn1_release(self): flag = EventMesh.publish("get_lcd_state") if flag == 0: EventMesh.publish(constants.EVENT.SYSTEM_UP) else: - if MainMenu2_til.get_tile_act() != None: - id = MainMenu2_til.get_tile_act().get_child(0).get_text() + if self.MainMenu_til.get_tile_act() != None: + id = self.MainMenu_til.get_tile_act().get_child(0).get_text() if id != "0": - MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(0,1,lv.ANIM.OFF) else: EventMesh.publish("load_screen", {"screen": "alipay_open"}) def return_alipay(self, event, msg): - MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(0,0,lv.ANIM.OFF) def return_setiing(self, event, msg): - MainMenu2_til.set_tile_id(7,0,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(7,0,lv.ANIM.OFF) def btn8_press(self): 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 self.MainMenu_til.get_tile_act() != None: + id = self.MainMenu_til.get_tile_act().get_child(0).get_text() if id == "0": if flag == 1: EventMesh.publish(constants.EVENT.SYSTEM_SLEEP) @@ -462,71 +581,71 @@ class MainMenuScreen(Screen): EventMesh.publish(constants.EVENT.SYSTEM_UP) else: if flag == 1: - MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(0,1,lv.ANIM.OFF) else: EventMesh.publish(constants.EVENT.SYSTEM_UP) else: if flag == 1: - MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(0,1,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() + id = self.MainMenu_til.get_tile_act().get_child(0).get_text() if id == "0": 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() + id = self.MainMenu_til.get_tile_act().get_child(0).get_text() if id == "0": 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() + id = self.MainMenu_til.get_tile_act().get_child(0).get_text() print("done_left_to_right:ID{} menu_id{}".format(id,self.menu_id)) if id == "0": - MainMenu2_til.set_tile_id(MainMenu2_num-2,0,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(self.MainMenu_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.MainMenu_til.set_tile_id(self.MainMenu_num-2,0,lv.ANIM.OFF) elif self.menu_id == id : self.menu_action = 1 self.menu_id = id def done_right_to_left(self): - id = MainMenu2_til.get_tile_act().get_child(0).get_text() + id = self.MainMenu_til.get_tile_act().get_child(0).get_text() print("done_right_to_left:ID{} menu_id{}".format(id,self.menu_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.MainMenu_til.set_tile_id(0,0,lv.ANIM.OFF) + elif (self.menu_id != str(self.MainMenu_num-2) ) and id == str(self.MainMenu_num-1) : + self.MainMenu_til.set_tile_id(0,0,lv.ANIM.OFF) else : self.menu_action = 2 self.menu_id = id def done_DOWN(self):#下滑 - id = MainMenu2_til.get_tile_act().get_child(0).get_text() - print("done_right_to_left: {} {} {}".format(id,self.menu_id,MainMenu2_num)) + id = self.MainMenu_til.get_tile_act().get_child(0).get_text() + print("done_right_to_left: {} {} {}".format(id,self.menu_id,self.MainMenu_num)) if id == "0": - MainMenu2_til.set_tile_id(MainMenu2_num-2,0,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(self.MainMenu_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.MainMenu_til.set_tile_id(self.MainMenu_num-2,0,lv.ANIM.OFF) else : if id == "1": - MainMenu2_til.set_tile_id(MainMenu2_num-2,0,lv.ANIM.OFF) + self.MainMenu_til.set_tile_id(self.MainMenu_num-2,0,lv.ANIM.OFF) else : - MainMenu2_til.set_tile_id(int(id)-2,0,lv.ANIM.ON) + self.MainMenu_til.set_tile_id(int(id)-2,0,lv.ANIM.OFF) self.menu_id = id def done_UP(self):#上滑 - id = MainMenu2_til.get_tile_act().get_child(0).get_text() - print("done_right_to_left: {} {} {}".format(id,self.menu_id,MainMenu2_num)) + id = self.MainMenu_til.get_tile_act().get_child(0).get_text() + print("done_right_to_left: {} {} {}".format(id,self.menu_id,self.MainMenu_num)) 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.MainMenu_til.set_tile_id(0,0,lv.ANIM.OFF) + elif (self.menu_id != str(self.MainMenu_num-2) ) and id == str(self.MainMenu_num-1) : + self.MainMenu_til.set_tile_id(0,0,lv.ANIM.OFF) else : - if int(id) == MainMenu2_num-1 : - MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF) + if int(id) == self.MainMenu_num-1 : + self.MainMenu_til.set_tile_id(0,0,lv.ANIM.OFF) else : - MainMenu2_til.set_tile_id(int(id),0,lv.ANIM.ON) + self.MainMenu_til.set_tile_id(int(id),0,lv.ANIM.OFF) self.menu_id = id def Close(self): diff --git a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_setting.py b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_setting.py index 34669aaa..fd729818 100644 --- a/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_setting.py +++ b/2.sdk/project/C06S/sdk/services/microPython/ports/quectel/core/ui_setting.py @@ -1098,15 +1098,16 @@ class PowerOnScreen(Screen): def fun(self,*argc): EventMesh.publish("system_sleep_rest")#防止黑屏 if self.count == 0: - self.aud.play(1, 1, 'E:/static/R_POWER_1.mp3') #播放来电铃声 + temp = Power.getVbatt() + if temp > 3400:#低电播放音频会导致一直复位 + self.aud.play(1, 1, 'E:/static/R_POWER_1.mp3') #播放来电铃声 else: - play_state = EventMesh.publish("get_audio_state")#音频播放状态 - if play_state != None: - if self.count >= 9:#在上一个界面在播放音频时切换界面则关闭 以免一直播放 - self.count = 0 - self.timer.stop() - EventMesh.publish("load_screen", {"screen": "main_menu"}) - return + + if self.count >= 9:#在上一个界面在播放音频时切换界面则关闭 以免一直播放 + self.count = 0 + self.timer.stop() + EventMesh.publish("load_screen", {"screen": "main_menu"}) + return self.count+=1 def Close(self): diff --git a/2.sdk/project/C06S/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/mpconfigboard.h b/2.sdk/project/C06S/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/mpconfigboard.h index d8f4b3ef..5db3e8b3 100644 --- a/2.sdk/project/C06S/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/mpconfigboard.h +++ b/2.sdk/project/C06S/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_VOLTE/config/mpconfigboard.h @@ -54,7 +54,7 @@ #define MICROPY_QPY_MODULE_UCRYPTOLIB (1) #define MICROPY_QPY_MODULE_ALIPAY (0) #define MICROPY_QPY_MODULE_VFS_THREADSAFE (1) - +#define MICROPY_QPY_MODULE_GPIO_ENCODER (1) #if CONFIG_MBEDTLS #define MICROPY_QPY_MODULE_USSL (0) #define MICROPY_QPY_SSL_MBEDTLS (1)