HX51功能分析(基于AC700N-SDK1.3.6) 相对于BT-360
配置了NTC,采集AD值判断温度,需配置IO口和AD通道(板级配置不是demo,没有配置NTC)
该XH51为耳包,有SD卡功能,无TWS,板级配置不一样
使用ADkey,配置按键AD值
常驻音量增强模式 DACVDD_LDO_2_50V,(关于 LDO,它实际上是 “Low Dropout” 的缩写,是一种电源管理器件,称为低压差线性稳压器。LDO稳压器主要用于将输入电压调节到一个稳定的输出电压,并且即使输入电压非常接近输出电压也能正常工作。)
升级擦除VM(flash)
app_config.h中做了很多功能的控制宏
新增出厂设置的UI
\apps\earphone\music\sd_music.c SD卡音乐模式下按键的配置
出厂设置全流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 static u8 fac_cnt_6s;if (get_bt_connect_status() >= BT_STATUS_CONNECTING){ break ; } fac_cnt_6s ++; if (fac_cnt_6s < 30 ){ break ; } user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0 , NULL ); user_send_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0 , NULL ); tone_play_index(IDEX_TONE_NUM_0,1 ); pwm_led_mode_set(PWM_LED0_ON); os_time_dly(20 ); pwm_led_mode_set(PWM_LED_ALL_OFF); os_time_dly(20 ); pwm_led_mode_set(PWM_LED0_ON); os_time_dly(20 ); pwm_led_mode_set(PWM_LED_ALL_OFF); os_time_dly(20 ); pwm_led_mode_set(PWM_LED0_ON); os_time_dly(20 ); pwm_led_mode_set(PWM_LED_ALL_OFF); os_time_dly(20 ); pwm_led_mode_set(PWM_LED0_ON); os_time_dly(20 ); pwm_led_mode_set(PWM_LED_ALL_OFF); os_time_dly(20 ); pwm_led_mode_set(PWM_LED0_ON); os_time_dly(140 ); power_set_soft_poweroff(); typedef enum { STATUS_NULL = 0 , STATUS_POWERON, ...... STATUS_PHONE_ACTIV, STATUS_FACTORY_SETTING, ...... STATUS_POWER_NULL, } UI_STATUS; if (get_bt_connect_status() >= BT_STATUS_CONNECTING){ break ; } enter_factory_setting(); extern u8 fac_cnt; void enter_factory_setting (void ) { if (get_bt_connect_status() >= BT_STATUS_CONNECTING){ user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0 , NULL ); } ui_update_status(STATUS_FACTORY_SETTING); user_send_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0 , NULL ); while (fac_cnt < 10 ){ delay(2 ); } sys_enter_soft_poweroff(NULL ); } case STATUS_POWEROFF: log_info("[STATUS_POWEROFF]\n" ); if (fac_cnt >= 10 ){ pwm_led_mode_set(PWM_LED_ALL_OFF); break ; } if (p_led->power_off != PWM_LED1_FLASH_THREE) { pwm_led_mode_set(p_led->power_off); } else { if (sys_ui_var.ui_flash_cnt) { if (sys_ui_var.ui_flash_cnt % 2 ) { pwm_led_mode_set(PWM_LED1_OFF); } else { pwm_led_mode_set(PWM_LED1_ON); } } } break ; case STATUS_FACTORY_SETTING: sys_ui_var.ui_flash_cnt = 6 ; if (fac_cnt < 10 ) { if (fac_cnt % 2 ) { pwm_led_mode_set(PWM_LED_ALL_OFF); } else { pwm_led_mode_set(PWM_LED0_ON); } }else { sys_ui_var.ui_flash_cnt = 0 ; } fac_cnt ++; break ;
ui状态的变更ui_manage 东西有点多,单纯文字描述吧
总体流程 :每次ui变更调用ui_update_status(u8 status), 再调用ui_manage_scan具体去执行状态任务。
ui_update_status: 为部分ui设定ui_flash_cnt(定时闪灯ui),将status写入一个系统ui结构体sys_ui_var.ui_cbuf中,再调用ui_manage_scan
ui_manage_scan: 检查ui_flash_cnt,检查定时闪灯有没有结束:
上个任务结束 则从缓存读取新ui状态,根据ui状态的种类 存入ui状态变量,(系统有两个ui状态变量,power_status和other_status,前者为电量、充电方面的状态,后者为开机、关机、蓝牙连接……)。
上个任务未结束 则ui_flash_cnt自减,同时设定任务定时器usr_timeout_add(NULL, ui_manage_scan, 300, 1);
最后再依次switch (sys_ui_var.power_status);switch (sys_ui_var.other_status);执行ui任务。
分隔
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 #define CONFIG_VM_OPT port_protect(port_group, IO_PORTB_01); if (scan_para->click_cnt >= 6 ) { key_event = KEY_EVENT_SIX_CLICK; } enum { KEY_EVENT_CLICK, KEY_EVENT_LONG, KEY_EVENT_HOLD, KEY_EVENT_UP, KEY_EVENT_DOUBLE_CLICK, KEY_EVENT_TRIPLE_CLICK, KEY_EVENT_FOURTH_CLICK, KEY_EVENT_FIRTH_CLICK, KEY_EVENT_SIX_CLICK, KEY_EVENT_USER, KEY_EVENT_MAX, }; const int CONFIG_LOW_LATENCY_ENABLE = 1 ;#if EARPHONEIN_PWOFF_IO if (get_power_on_status() && (gpio_read(IO_PORTB_02))) { #else if (get_power_on_status()){ #endif #if TCFG_USER_TWS_ENABLE if (tws_api_get_role() == TWS_ROLE_MASTER) { if (tws_api_get_tws_state() & TWS_STA_SIBLING_CONNECTED) { if (enable) { tws_api_sync_call_by_uuid('T' , SYNC_CMD_LOW_LATENCY_ENABLE, 300 ); } else { tws_api_sync_call_by_uuid('T' , SYNC_CMD_LOW_LATENCY_DISABLE, 300 ); } } else { if (earphone_a2dp_codec_set_low_latency_mode(enable, enable ? 800 : 600 ) == 0 ) { if (enable) { tone_play(TONE_NUM_1, 1 ); } else { tone_play(TONE_NUM_2, 1 ); } } } } #else if (earphone_a2dp_codec_set_low_latency_mode(enable, enable ? 800 : 600 ) == 0 ) { if (enable) { tone_play(TONE_NUM_1, 1 ); } else { tone_play(TONE_NUM_2, 1 ); } } #endif #define USE_CONFIG_BIN_FILE 0 #define USE_CONFIG_STATUS_SETTING 1 #define USE_CONFIG_AUDIO_SETTING USE_CONFIG_BIN_FILE #define USE_CONFIG_CHARGE_SETTING USE_CONFIG_BIN_FILE #define USE_CONFIG_KEY_SETTING USE_CONFIG_BIN_FILE #define USE_CONFIG_MIC_TYPE_SETTING USE_CONFIG_BIN_FILE #define USE_CONFIG_LOWPOWER_V_SETTING USE_CONFIG_BIN_FILE #define USE_CONFIG_AUTO_OFF_SETTING USE_CONFIG_BIN_FILE #define USE_CONFIG_COMBINE_VOL_SETTING 1