From 2df73f77e2aa7c3653e19e81ae7eb3ca395dc6c2 Mon Sep 17 00:00:00 2001 From: zhaohe <1013909206@qq.com> Date: Tue, 1 Mar 2022 19:36:20 +0800 Subject: [PATCH] update --- .clang-format | 2 +- APP/adc.c | 183 +-- APP/adc.h | 33 +- APP/board.h | 12 + APP/key.c | 67 +- APP/key.h | 29 +- APP/light.c | 194 ++- APP/light.h | 38 +- APP/main.c | 688 +++------- APP/main.h | 2 +- APP/ozone_pwm_control.c | 6 +- APP/ozone_pwm_control.h | 3 +- project_ozone/Listings/project_o.map | 20 +- project_ozone/Listings/startup_es8p5066.lst | 2 +- project_ozone/project_o.uvgui.zel | 1878 +++++++++++++++++++++++++++ project_ozone/project_o.uvopt | 4 +- project_ozone/project_o.uvproj | 7 +- 17 files changed, 2306 insertions(+), 862 deletions(-) create mode 100644 APP/board.h create mode 100644 project_ozone/project_o.uvgui.zel diff --git a/.clang-format b/.clang-format index 1b046df..21765c9 100644 --- a/.clang-format +++ b/.clang-format @@ -2,4 +2,4 @@ # http://clang.llvm.org/docs/ClangFormatStyleOptions.html Language: Cpp BasedOnStyle: Google -ColumnLimit: 120 \ No newline at end of file +ColumnLimit: 150 \ No newline at end of file diff --git a/APP/adc.c b/APP/adc.c index 406b74e..393b3d6 100644 --- a/APP/adc.c +++ b/APP/adc.c @@ -1,59 +1,7 @@ #include "adc.h" -static adc_t s_adc[] = { - {.port = "A", .pin = 2}, - {.port = "B", .pin = 8}, - {.port = "B", .pin = 9}, -}; -/*********************************************************************************************************************** - * =====================================================adc====================================================== - ** - ***********************************************************************************************************************/ -// uint16_t meanvalue; -adc_t adc = {0}; -void ADCInit(uint8_t *port, uint8_t pin) { - // GPIO_PIN(A, 28); - ADC_InitStruType x; - GPIO_InitSettingType y; - y.Signal = GPIO_Pin_Signal_Analog; //模拟 - y.Dir = GPIO_Direction_Input; //输入 - y.Func = GPIO_Reuse_Func0; - // x.CHS设置adc采集的通道每个引脚对应一个通道 - // GPIO_Init(GPIO_Pin_B9, &y); - if (pin == 2) { - GPIO_Init(GPIO_Pin_A2, &y); - x.CHS = ADC_CHS_AIN8; - printf("A4\r\n"); - } else if (pin == 8) { - GPIO_Init(GPIO_Pin_B8, &y); - x.CHS = ADC_CHS_AIN3; - printf("B8\r\n"); - } else if (pin == 9) { - GPIO_Init(GPIO_Pin_B9, &y); - x.CHS = ADC_CHS_AIN4; - printf("B9\r\n"); - } - - //经过分频以后Tadclk=1/(PCLK/4)约等于0.083us - x.CLKS = ADC_CLKS_PCLK; - x.CLKDIV = ADC_CLKDIV_1_4; /* ADC时钟源预分频 */ - //采集到的模拟量*3.3/4096=现在的电压 - - x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */ - x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */ - x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */ - // x.CHS = ADC_CHS_AIN4; - // x.CHS = ADC_CHS_AIN8; - x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */ - //采样时间st*2+1(个Tadclk)=1.743us - x.ST = 10; /* AD采样时间选择 */ - x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */ - ADC_Init(&x); -} - -//测试读取adc采集的电压值 - -void ADCPA2Init() { +// uint16_t meanvalue; +static void prv_adc_pa2_init() { ADC_InitStruType x; GPIO_InitSettingType y; y.Signal = GPIO_Pin_Signal_Analog; //模拟 @@ -77,22 +25,9 @@ void ADCPA2Init() { x.ST = 10; /* AD硬件采样时间选择 */ x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */ ADC_Init(&x); + prv_adc_get_value(); } - -void get_pa2_adc_value(void) { - volatile uint32_t pa2_adc_val = 0; - ADCPA2Init(); - ADC_SoftStart(); - //正在转换 - while (ADC_GetConvStatus() != RESET) - ; - pa2_adc_val = ADC_GetConvValue(); - ADC_SoftStop(); - printf("%d\r\n", pa2_adc_val); - printf("pa2_val:%lf\r\n", pa2_adc_val * 3.3 / 4096); -} - -void ADCPB8Init() { +static void prv_adc_pb8_init() { ADC_InitStruType x; GPIO_InitSettingType y; y.Signal = GPIO_Pin_Signal_Analog; //模拟 @@ -116,22 +51,10 @@ void ADCPB8Init() { x.ST = 10; /* AD硬件采样时间选择 */ x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */ ADC_Init(&x); + prv_adc_get_value(); } -void get_pb8_adc_value(void) { - volatile uint32_t pb8_adc_val = 0; - ADCPB8Init(); - ADC_SoftStart(); - //正在转换 - while (ADC_GetConvStatus() != RESET) - ; - pb8_adc_val = ADC_GetConvValue(); - ADC_SoftStop(); - printf("%d\r\n", pb8_adc_val); - printf("pb8_val:%lf\r\n", pb8_adc_val * 3.3 / 4096); -} - -void ADCPB9Init() { +static void prv_adc_pb9_init() { ADC_InitStruType x; GPIO_InitSettingType y; y.Signal = GPIO_Pin_Signal_Analog; //模拟 @@ -156,89 +79,39 @@ void ADCPB9Init() { x.ST = 10; /* AD硬件采样时间选择 */ x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */ ADC_Init(&x); + prv_adc_get_value(); } -void get_pb9_adc_value(void) { - volatile uint32_t pb9_adc_val = 0; - ADCPB9Init(); +static float prv_adc_get_value() { ADC_SoftStart(); - //正在转换 while (ADC_GetConvStatus() != RESET) ; - pb9_adc_val = ADC_GetConvValue(); + uint16_t adcv = ADC_GetConvValue(); ADC_SoftStop(); - printf("%d\r\n", pb9_adc_val); - printf("pb9_val:%lf\r\n", pb9_adc_val * 3.3 / 4096); + printf("%d\r\n", adcv); + return adcv * 3.3 / 4096; } -void try_adc_gather(void) { - static uint32_t adc_ticket = 0; - // static uint32_t adc_ticket_count = 0; - if (port_haspassedms(adc_ticket) > 1000) { - // adc_ticket_count++; - adc_ticket = get_sys_ticket(); - // if (adc_ticket_count < 5) { - get_pb8_adc_value(); - get_pa2_adc_value(); - get_pb9_adc_value(); - // } - // get_adc_value(); - // if (adc_ticket_count >= 5) { - // if (adc_ticket_count == 10) { - // adc_ticket_count = 0; - // } - // ADC_Disable(); - // get_pa2_adc_value(); - // } +static float prv_adc_get_value_average(int average) { + if (average == 0) { + average = 1; } -} - -void get_adc_value(void) { - // uint16_t adc_value = 0; - for (int i = 0; i < 3; i++) { - ADCInit(s_adc[i].port, s_adc[i].pin); - ADC_SoftStart(); - while (ADC_GetConvStatus() == SET) - ; //正在转换 - s_adc[i].adc_just_now_gather_val = ADC_GetConvValue(); - ADC_SoftStop(); - // record_adc_gather_value(s_adc[i].adc_just_now_gather_val); - printf("%d\r\n", s_adc[i].adc_just_now_gather_val); - printf("voltage:%lf\r\n", (s_adc[i].adc_just_now_gather_val) * 3.3 / 4096); + float value = 0; + for (size_t i = 0; i < average; i++) { + value += prv_adc_get_value(); } + return value / average; } -void record_adc_gather_value(uint16_t adc_value) { - /** - * @brief 记录adc各个通道采集到的数据 - * - */ - for (int i = 0; i < 3; i++) { - s_adc[i].adc_value_buff[s_adc[i].adc_value_count++] = adc_value; - if (s_adc[i].adc_value_count == 5) { - s_adc[i].past_count_reached_five = true; - s_adc[i].adc_value_count = 0; - } - if (s_adc[i].past_count_reached_five == true) { - beg_average_value(s_adc[i].adc_value_buff); - } - } +float adc_get_value_pa2(void) { + prv_adc_pa2_init(); + return prv_adc_get_value_average(AVERAGE_TABLE_SIZE); } - -void beg_average_value(uint16_t *adc_buff) { - // uint16_t adc_average_value = 0; - // uint32_t adc_sum_value = 0; - // for (int i = 0; i < 5; i++) { - // adc_sum_value += *adc_buff; - // adc_buff++; - // } - // adc_average_value = adc_sum_value / 5; - // if (adc_average_value <= 16 || adc.abnormal_state == true) { - // adc.abnormal_state = true; - // process_voltage_abnormal(); - // // printf("short out%d\r\n", adc_average_value); //短路 - // } else { - // //例:adc_value=1700则电压=1700/4096=1.369 - // printf("adc_value_t%d\r\n", adc_average_value); - // } +float adc_get_value_pb8(void) { + prv_adc_pb8_init(); + return prv_adc_get_value_average(AVERAGE_TABLE_SIZE); +} +float adc_get_value_pb9(void) { + prv_adc_pb9_init(); + return prv_adc_get_value_average(AVERAGE_TABLE_SIZE); } diff --git a/APP/adc.h b/APP/adc.h index 40d3e6a..fdfa029 100644 --- a/APP/adc.h +++ b/APP/adc.h @@ -1,33 +1,10 @@ -#ifndef _ADC_H_ -#define _ADC_H_ - +#pragma once #include "port.h" #include "systick.h" -void ADCInit(uint8_t *port, uint8_t pin); -void ADCPA2Init(); -void get_adc_value(void); -void get_pa2_adc_value(void); -void try_adc_gather(void); -void beg_average_value(uint16_t *adc_buff); - -typedef struct { - bool abnormal_state; - bool past_count_reached_five; - bool first_detection_abnormal; - uint16_t adc_value_buff[5]; - uint8_t adc_value_count; - uint16_t adc_just_now_gather_val; - uint8_t *port; - uint8_t pin; -} adc_t; -void record_adc_gather_value(uint16_t adc_value); -// typedef struct { -// uint16_t adc_value_buff[5]; -// uint8_t adc_value_count; -// bool abnormal_state; -// bool past_count_reached_five; //消抖使用 -// } adc_t; +#define AVERAGE_TABLE_SIZE 30 -#endif +float adc_get_value_pa2(void); +float adc_get_value_pb8(void); +float adc_get_value_pb9(void); \ No newline at end of file diff --git a/APP/board.h b/APP/board.h new file mode 100644 index 0000000..1ae7e19 --- /dev/null +++ b/APP/board.h @@ -0,0 +1,12 @@ +#pragma once +#define VERSION "1.0" + +#define KEY_PERIOD 20 +#define EXCEPTION_CHECK_PERIOD 50 + +//鑷姩鍏虫満鏃讹紝涓涓伅绛夋晥鐨勬椂闂 +#define AUTO_SHUTDOWN_ONE_LIGHT_EQ_TIME_S 20 +//闂存瓏宸ヤ綔鍛ㄦ湡 +#define INTERVAL_WORK_PERIOD_MS (60 * 1000) +//闂存瓏宸ヤ綔宸ヤ綔鏃堕棿鍗犳暣涓懆鏈熺殑鐧惧垎姣 +#define INTERVAL_WORK_DUTY (50) \ No newline at end of file diff --git a/APP/key.c b/APP/key.c index f794943..2500ade 100644 --- a/APP/key.c +++ b/APP/key.c @@ -1,4 +1,30 @@ #include "key.h" +static zkey_module_t *s_module; +static bool s_inited; + +static void prv_zkey_process_each_after_filter(zkey_t *each, bool now_io_state) { + if (now_io_state != each->last_io_state) { + if (now_io_state) { + each->keep_state_count = 0; + each->hasProcessed = false; + each->cur_state = zks_rising_edge; + s_module->onkey(each, each->cur_state); + } else { + each->cur_state = zks_falling_edge; + s_module->onkey(each, each->cur_state); + each->keep_state_count = 0; + } + each->last_io_state = now_io_state; + } else { + each->cur_state = zks_keep; + if (now_io_state) { + s_module->onkey(each, each->cur_state); + } + } +} + +void zkey_process_each(zkey_t *each); + void zkey_init(zkey_module_t *module) { /** * @brief 按键初始化,三个状态的初始化,之前的,现在的,之后的 @@ -13,18 +39,6 @@ void zkey_init(zkey_module_t *module) { s_module->keys[i].after_filter_state = s_module->keys[i].get_key_state(); } } - -void zkey_do_loop_in_each_period(void *_null) { /** - * @brief 循环查询按键的状态 - * - */ - if (!s_inited) return; - for (int i = 0; i < s_module->nkey; i++) //开始对每个按键进行查询 - { - zkey_process_each(&s_module->keys[i]); - } -} - void zkey_process_each(zkey_t *each) { /** * @brief 按键是否发生变换,没变换的时候进行时间记录 @@ -46,27 +60,16 @@ void zkey_process_each(zkey_t *each) { each->after_filter_state = now_io_state; } each->last_real_state = now_io_state; - zkey_process_each_after_filter(each, each->after_filter_state); + prv_zkey_process_each_after_filter(each, each->after_filter_state); } -void zkey_process_each_after_filter(zkey_t *each, bool now_io_state) { - if (now_io_state != each->last_io_state) { - if (now_io_state) { - each->keep_state_count = 0; - each->hasProcessed = false; - each->cur_state = zks_rising_edge; - s_module->onkey(each, each->cur_state); - } else { - each->cur_state = zks_falling_edge; - s_module->onkey(each, each->cur_state); - each->keep_state_count = 0; - } - each->last_io_state = now_io_state; - } else { - each->cur_state = zks_keep; - if (now_io_state) { - s_module->onkey(each, each->cur_state); - } +void zkey_do_loop_in_each_period(void *_null) { /** + * @brief 循环查询按键的状态 + * + */ + if (!s_inited) return; + for (int i = 0; i < s_module->nkey; i++) //开始对每个按键进行查询 + { + zkey_process_each(&s_module->keys[i]); } } - diff --git a/APP/key.h b/APP/key.h index fa9b999..e84d3ab 100644 --- a/APP/key.h +++ b/APP/key.h @@ -3,6 +3,8 @@ #include "port.h" #include "pwm.h" #define POWER_KEY_TRIGGER_TIME 3000 +#define KEY_SCAN_PERIOD 20 //扫描周期20ms + #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #define ZKEY_INIT(_name, _get_key_state) \ { .name = _name, .get_key_state = _get_key_state } @@ -13,6 +15,8 @@ .onkey = _onkey /**/ \ } + +typedef bool (*get_key_state_t)(void); typedef enum { // mode1 zks_keep, @@ -22,11 +26,11 @@ typedef enum { // mode2 zks_trigger_event, //触发 zks_longtime_trigger_event, //长时间触发 -} zkey_event_t; -typedef zkey_event_t zkey_state_t; - -typedef bool (*get_key_state_t)(void); +} zkey_state_t; +/** + * @brief zkey + */ typedef struct { const char *name; get_key_state_t get_key_state; @@ -40,28 +44,17 @@ typedef struct { uint32_t currentstatekeep_count; //消抖使用 bool last_real_state; //消抖使用 - } zkey_t; -static uint16_t s_key_press_state; -static uint16_t s_key_long_press_time_ms = 3000; //长按判断时间 -#define KEY_SCAN_PERIOD 20 //扫描周期20ms - +/** + * @brief zkey_module + */ typedef struct { zkey_t *keys; int nkey; void (*onkey)(zkey_t *key, zkey_state_t key_state); } zkey_module_t; -static zkey_module_t *s_module; -static bool s_inited; - void zkey_init(zkey_module_t *module); void zkey_do_loop_in_each_period(void *_null); -void zkey_process_each(zkey_t *each); -void zkey_process_each_after_filter(zkey_t *each, bool now_io_state); -void read_key_state(void); -void onkey(zkey_t *key, zkey_state_t key_state); -void port_key_state(void); - #endif diff --git a/APP/light.c b/APP/light.c index ec81fe2..05df5ff 100644 --- a/APP/light.c +++ b/APP/light.c @@ -1,70 +1,38 @@ #include "light.h" -rgb_message_t rgb_message; -TIMING_MODE_T timing_mode; -timing_message_t timing_message; +static bool s_flicker; +static rgb_light_mode_t s_rgb_now_state; +static rgb_light_mode_t s_rgb_light_mode_config; +static int s_errornum = 0; +static bool s_errorlight_display_state; +static bool s_autoshutdown_light_state; +static timing_light_mode_t get_timing_light_mode_by_errornum(int errornum) { return (timing_light_mode_t)errornum; } /** * @brief 璁剧疆鐏殑妯″紡,楂樹綆涓垎鍒寒涓嶅悓棰滆壊鐨勭伅 * 楂樻。绾㈣壊锛屼腑妗h摑鑹诧紝浣庢。缁胯壊 */ -void light_module_set_rgb_mode(RGB_MODE_T mode) { +static void prv_light_module_set_rgb_mode(rgb_light_mode_t mode) { if (mode == RGB_COLOR_RED) { port_led_r_set(true); port_led_g_set(false); port_led_b_set(false); - rgb_message.turn_off_the_mode_before_rgb = RGB_COLOR_RED; } else if (mode == RGB_COLOR_BLUE) { port_led_r_set(false); port_led_g_set(false); port_led_b_set(true); - rgb_message.turn_off_the_mode_before_rgb = RGB_COLOR_BLUE; } else if (mode == RGB_COLOR_GERRN) { port_led_r_set(false); port_led_g_set(true); port_led_b_set(false); - rgb_message.turn_off_the_mode_before_rgb = RGB_COLOR_GERRN; } else if (mode == RGB_CLOSE) { - // rgb_message.turn_off_the_mode_before_rgb = RGB_CLOSE; port_led_r_set(false); port_led_g_set(false); port_led_b_set(false); } -} -/** - * @brief 璁剧疆rgb闂儊鎴栬呬笉闂儊 - * - * @param mode - */ -void light_module_set_rgb_flicker_mode(bool state) { - if (state == false) { - rgb_message.rgb_flicker_mode = false; - } else if (state == true) { - rgb_message.rgb_flicker_mode = true; - } + s_rgb_now_state = mode; } -void process_rgb_flicker_mode() { - static uint32_t rgb_flicker_ticket = 0; - static uint8_t rgb_ticket_count = 0; - if (port_haspassedms(rgb_flicker_ticket) > 1000) { - rgb_flicker_ticket = get_sys_ticket(); - if (rgb_ticket_count < 3) { - // turn_off_the_mode_before_rgb淇濆瓨浜嗗叧闂箣鍓嶇殑RGB浜伅鐨勬ā寮 - light_module_set_rgb_mode(rgb_message.turn_off_the_mode_before_rgb); - } else { - light_module_set_rgb_mode(RGB_CLOSE); - rgb_ticket_count = 0; - } - rgb_ticket_count++; - } -} - -/** - * @brief 瀹氭椂30min 60min 90min 120min鍒嗗埆鎵撳紑led3 led2 led1 led0鐏 - * - * @param mode - */ -void light_module_set_timing_light_mode(TIMING_MODE_T mode) { +static void prv_set_timing_light_mode(timing_light_mode_t mode) { if (mode == OPEN_ONE_LED) { port_led0_set(true); port_led1_set(false); @@ -91,78 +59,96 @@ void light_module_set_timing_light_mode(TIMING_MODE_T mode) { port_led2_set(false); port_led3_set(false); } - timing_message.now_timing_mode = mode; } +void prv_light_module_rgb_light_control_schedule() { + if (s_rgb_light_mode_config == RGB_CLOSE) { + prv_light_module_set_rgb_mode(RGB_CLOSE); + return; + } -/** - * @brief 鍏抽棴rgb锛屽叧闂璴ed0~led3 - * - */ -void light_module_close_all_light(void) { - light_module_set_rgb_mode(RGB_CLOSE); - light_module_set_timing_light_mode(CLOSE_ALL_LED); - light_module_set_rgb_flicker_mode(false); -} + if (!s_flicker) { + prv_light_module_set_rgb_mode(s_rgb_light_mode_config); + return; + } -/** - * @brief 娴嬭瘯鎸夐敭鎺у埗RGB鐨勪寒鐏 - * - */ -void test_set_rgb_mode(void) { - printf("try_test_set_rgb_mode\r\n"); - static int i = 0; - if (i == 0) { - i = 1; - light_module_set_rgb_mode(RGB_COLOR_RED); - } else if (i == 1) { - i = 2; - light_module_set_rgb_mode(RGB_COLOR_BLUE); - } else if (i == 2) { - i = 3; - light_module_set_rgb_mode(RGB_COLOR_GERRN); - } else if (i == 3) { - i = 0; - light_module_set_rgb_mode(RGB_CLOSE); + /** + * @brief 闂儊鏁堟灉 + */ + if (s_flicker) { + static uint32_t rgb_flicker_ticket = 0; + static uint8_t rgb_ticket_count = 0; + if (port_haspassedms(rgb_flicker_ticket) > 1000) { + rgb_flicker_ticket = get_sys_ticket(); + if (s_rgb_now_state == RGB_CLOSE) { + prv_light_module_set_rgb_mode(s_rgb_light_mode_config); + } else { + prv_light_module_set_rgb_mode(RGB_CLOSE); + } + } } } /** - * @brief 娴嬭瘯鎸夐敭鎺у埗led0~led3鐨勪寒鐏 - * + * @brief 鍊掕鏃舵寚绀虹伅鐘舵佹帶鍒 */ -void test_set_led_mode(void) { - printf("try_test_set_led_mode\r\n"); - static int j = 0; - if (j == 0) { - j = 1; - light_module_set_timing_light_mode(OPEN_ONE_LED); - } else if (j == 1) { - j = 2; - light_module_set_timing_light_mode(OPEN_TWO_LED); - } else if (j == 2) { - j = 3; - light_module_set_timing_light_mode(OPEN_THREE_LED); - } else if (j == 3) { - j = 4; - light_module_set_timing_light_mode(OPEN_FOUR_LED); - } else if (j == 4) { - j = 0; - light_module_set_timing_light_mode(CLOSE_ALL_LED); +static void prv_time_light_control_schedule() { + if (s_autoshutdown_light_state) { + /** + * @brief 鏄剧ず鑷姩鍏虫満鍊掕鏃舵寚绀虹伅 + */ + int lightnum = hook_get_autoshutdown_timecount() / AUTO_SHUTDOWN_ONE_LIGHT_EQ_TIME_S; + prv_set_timing_light_mode( // + get_timing_light_mode_by_lightnum(lightnum)); + } else if (s_errorlight_display_state) { + /** + * @brief 鏄剧ず寮傚父鎸囩ず鐏 + */ + static uint32_t ticket = 0; + static bool state; + if (port_haspassedms(ticket) > 300) { + ticket = get_sys_ticket(); + state = !state; + if (state) { + prv_set_timing_light_mode(get_timing_light_mode_by_errornum(s_errornum)); + } else { + prv_set_timing_light_mode(CLOSE_ALL_LED); + } + } } } -/** - * @brief 娴嬭瘯鎸夐敭鎺у埗rgb闂儊鎴栬呬笉闂儊 - * - */ -void test_set_rgb_flicker_mode(void) { - printf("test_light_module_set_rgb_flicker_mode\r\n"); - static bool m = false; - if (m == 0) { - light_module_set_rgb_flicker_mode(true); - } else if (m == 1) { - light_module_set_rgb_flicker_mode(false); - } - m = !m; +/*********************************************************************************************************************** + * ======================================================Extern======================================================= * + ***********************************************************************************************************************/ + +void light_module_set_rgb_mode(rgb_light_mode_t mode) { + printf("light_module_set_rgb_mode %d\n", mode); + s_rgb_light_mode_config = RGB_COLOR_BLUE; + prv_light_module_set_rgb_mode(mode); +} + +void light_module_set_rgb_flicker_mode(bool state) { + printf("light_module_set_rgb_flicker_mode %d\n", state); + s_flicker = state; +} +void light_module_set_autoshutdown_indicator_light(bool open) { s_autoshutdown_light_state = open; } +void light_module_set_error_light_mode(bool open, uint8_t error_mode) { + printf("light_module_set_error_light_mode %d\n", error_mode); + s_errorlight_display_state = open; + s_errornum = error_mode; +} +void light_module_close_all_light(void) { + printf("light_module_close_all_light\n"); + light_module_set_rgb_mode(RGB_CLOSE); + light_module_set_timing_light_mode(CLOSE_ALL_LED); + light_module_set_rgb_flicker_mode(false); + s_errornum = 0; + s_flicker = false; + s_autoshutdown_light_state = false; + s_errorlight_display_state = false; +} +void light_module_schedule(void) { + prv_light_module_rgb_light_control_schedule(); + prv_time_light_control_schedule(); } diff --git a/APP/light.h b/APP/light.h index e6e8887..b33ae00 100644 --- a/APP/light.h +++ b/APP/light.h @@ -5,19 +5,14 @@ #include "port.h" #include "system_ES8P5066.h" #include "systick.h" +#include "board.h" typedef enum { RGB_CLOSE = 0, /*鍏抽棴鐏*/ RGB_COLOR_RED = 1, /*鎵撳紑绾㈢伅*/ RGB_COLOR_GERRN = 2, /*鎵撳紑缁跨伅*/ RGB_COLOR_BLUE = 3, /*鎵撳紑钃濈伅*/ -} RGB_MODE_T; - -typedef struct { - RGB_MODE_T turn_off_the_mode_before_rgb; - bool rgb_flicker_mode; - bool already_set_rgb_mode; -} rgb_message_t; +} rgb_light_mode_t; typedef enum { CLOSE_ALL_LED = 0, /*鍏抽棴瀹氭椂鎸囩ず鐏疞ED0 LED1 LED2 LED3*/ @@ -25,29 +20,18 @@ typedef enum { OPEN_TWO_LED = 2, /*鎵撳紑LED0 鎵撳紑LED1*/ OPEN_THREE_LED = 3, /*鎵撳紑LED0 鎵撳紑LED1 鎵撳紑LED2*/ OPEN_FOUR_LED = 4, /*鎵撳紑LED0 鎵撳紑LED1 鎵撳紑LED2 鎵撳紑LED3*/ -} TIMING_MODE_T; - -typedef struct { - TIMING_MODE_T now_timing_mode; -} timing_message_t; - -// typedef enum { -// ERROR_MODE0 = 0, /*鎵撳紑LED0*/ -// ERROR_MODE1 = 1, /*鎵撳紑LED1*/ -// ERROR_MODE2 = 2, /*鎵撳紑LED2*/ -// ERROR_MODE3 = 3, /*鎵撳紑LED3*/ -// } ERROR_MODE_T; +} timing_light_mode_t; -void light_module_set_rgb_mode(RGB_MODE_T mode); -void light_module_set_timing_light_mode(TIMING_MODE_T mode); -void light_module_set_error_light_mode(uint8_t error_mode); +void light_module_set_rgb_mode(rgb_light_mode_t mode); +void light_module_set_error_light_mode(bool open, uint8_t error_mode); +void light_module_set_autoshutdown_indicator_light(bool light); +void light_module_set_rgb_flicker_mode(bool state); void light_module_close_all_light(void); -void process_rgb_flicker_mode(void); - +static timing_light_mode_t get_timing_light_mode_by_lightnum(int number) { return (timing_light_mode_t)number; } void light_module_schedule(void); -void test_set_rgb_mode(void); -void test_set_led_mode(void); -void test_set_rgb_flicker_mode(void); +//澶栭儴瀹炵幇 +int hook_get_autoshutdown_timecount(); + #endif diff --git a/APP/main.c b/APP/main.c index 36d947e..c3a2238 100644 --- a/APP/main.c +++ b/APP/main.c @@ -1,37 +1,52 @@ #include "main.h" #include //定义布尔 -#define TIMING_TICK 20000 -#define INTERVAL_PERIOD 10000 + +#include "board.h" + +/*********************************************************************************************************************** + * =====================================================函数声明====================================================== * + ***********************************************************************************************************************/ +void onkey(zkey_t *key, zkey_state_t key_state); /*********************************************************************************************************************** * =====================================================全局变量====================================================== * ***********************************************************************************************************************/ -bool starting_up_state = false; //开关机标志位 -bool timing_function_enable_falg = false; //定时功能使能标志位 -static uint32_t s_timing_shutdown_begin_ticket = 0; //定时开始时,此时的系统时间 -static uint32_t s_timing_time; //定时时间 +static zkey_t s_keys[] = { + ZKEY_INIT("timerkey", port_gpio_get_timer_key_state), + ZKEY_INIT("gearskey", port_gpio_get_gears_key_state), + ZKEY_INIT("intervalkey", port_gpio_get_interval_key_state), + ZKEY_INIT("switchkey", port_gpio_get_switch_key_state), +}; +zkey_module_t key_module = ZMODULE_INIT(s_keys, onkey); -static uint32_t s_interval_period = 0; //间歇功能的周期 -static uint8_t s_now_interval_duty = 0; //间歇功能的占空比 -static uint8_t s_intervalkey_press_count = 0; //间歇按键按下的次数 -uint8_t rgb_ticket_count = 3; +/*********************************************************************************************************************** + * =====================================================全局状态====================================================== * + ***********************************************************************************************************************/ +static bool error_even_trigger_after_stop_ozone_work_state; //错误事件触发后停止臭氧工作标志位 -WORK_LEVEL_T now_level; //现在的档位 -WORK_LEVEL_T shutdown_before_level; //关机前的档位 +// 设置 +bool g_setting_interval_work_flag = false; //现在的档位 +WORK_LEVEL_T g_setting_level = WORK_LEVEL_LOW; //关机前的档位 -error_state_t error_state; //哪个错误事件 -static bool error_even_trigger_after_stop_ozone_work_state; //错误事件触发后停止臭氧工作标志位 +//标志位 +bool g_power_flag = false; //开关机标志位 +static int g_error_num; +bool g_auto_shutdown_flag = false; //定时功能使能标志位 +static uint32_t g_auto_shutdown_countdown_s; //定时时间 +//其他 static bool pwm_modble_enable_falg; //硬件pwm使能标志位 -//####################### HOOK实现 ################################// + +/*********************************************************************************************************************** + * =======================================================HOOK======================================================== * + ***********************************************************************************************************************/ void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty) { set_pwm_modbul_freq_duty(frequency, duty); port_fan_set(true); //打开风扇 pwm_modble_enable_falg = true; printf("work\r\n"); } - void HOOK_pwm_stop(void) { set_pwm_modbul_freq_duty(1, 0); //关闭PWM输出 port_fan_set(false); //风扇结束工作 @@ -39,316 +54,66 @@ void HOOK_pwm_stop(void) { printf("rest\r\n"); } bool HOOK_pwm_is_enable(void) { return pwm_modble_enable_falg; } -//####################### 间歇功能 ################################// -void process_intervalkey_press_even(void) { - s_intervalkey_press_count++; - if (s_intervalkey_press_count == 1) { - //间歇功能开启后rgb亮三秒灭一秒,为了让用户更快的知道间歇功能已经开启,所以rgb_ticket_count设置3,先让rgb灭1s - rgb_ticket_count = 3; - update_interval_period_duty(50); - } else { - update_interval_period_duty(100); // 调用update_interval_period_duty(100)后将s_intervalkey_press_count=0 - } -} - -/** - * @brief - * - */ -void update_interval_period_duty(uint8_t interval_duty) { - if (interval_duty == 100) { //占空比设置100一直工作 - printf("duty 100\r\n"); - s_interval_period = 0; - s_now_interval_duty = 100; - s_intervalkey_press_count = 0; - ozone_pwm_control_disable(); - restore_the_mode_before_intermittent_work(); - } else if (interval_duty == 50) { - printf("duty 50\r\n"); - s_interval_period = INTERVAL_PERIOD; - s_now_interval_duty = 50; - ozone_pwm_control_enable(); - } - ozone_pwm_control_module_set_pwm_output_1(s_interval_period, s_now_interval_duty); -} - -/** - * @brief 恢复间歇工作前的工作档位 - * - */ -void restore_the_mode_before_intermittent_work(void) { - if (now_level == WORK_LEVEL_LOW) { - light_module_set_rgb_mode(RGB_COLOR_GERRN); - set_pwm_modbul_freq_duty(1, 25); - port_fan_set(true); //打开风扇 - } else if (now_level == WORK_LEVEL_MIDDLE) { - light_module_set_rgb_mode(RGB_COLOR_BLUE); - set_pwm_modbul_freq_duty(1, 50); - port_fan_set(true); //打开风扇 - } else if (now_level == WORK_LEVEL_HIGHT) { - light_module_set_rgb_mode(RGB_COLOR_RED); - set_pwm_modbul_freq_duty(1, 100); - port_fan_set(true); //打开风扇 - } -} -/** - * @brief 间歇功能开启时,rgb亮3s灭1s - * - */ -void process_rgb_flicker(void) { - static uint32_t rgb_ticket = 0; - if (port_haspassedms(rgb_ticket) > 1000) { - rgb_ticket = get_sys_ticket(); - if (rgb_ticket_count < 3) { - if (now_level == WORK_LEVEL_LOW) { - light_module_set_rgb_mode(RGB_COLOR_GERRN); - } else if (now_level == WORK_LEVEL_MIDDLE) { - light_module_set_rgb_mode(RGB_COLOR_BLUE); - } else if (now_level == WORK_LEVEL_HIGHT) { - light_module_set_rgb_mode(RGB_COLOR_RED); - } - } else { - light_module_set_rgb_mode(RGB_CLOSE); - rgb_ticket_count = 0; - } - rgb_ticket_count++; - } -} +int hook_get_autoshutdown_timecount() { return g_auto_shutdown_countdown_s; } /*********************************************************************************************************************** - * =======================================================按键======================================================== * + * =================================================INTERNAL_FUNCTION================================================= * ***********************************************************************************************************************/ -static zkey_t s_keys[] = { - ZKEY_INIT("timerkey", port_gpio_get_timer_key_state), - ZKEY_INIT("gearskey", port_gpio_get_gears_key_state), - ZKEY_INIT("intervalkey", port_gpio_get_interval_key_state), - ZKEY_INIT("switchkey", port_gpio_get_switch_key_state), -}; - -zkey_module_t key_module = ZMODULE_INIT(s_keys, onkey); -void onkey(zkey_t *key, zkey_state_t key_state) { - /** - * @brief 判断每个按键触发的状态 - * - * @param key - * @param key_state - */ - if (starting_up_state) { //开机中 - if (error_state.fan_error_status == false && error_state.way_circuit_error_status == false) { //设备无异常 - if (key == &s_keys[0] && //定时按键 - key->cur_state == zks_keep && //长按 - !key->hasProcessed && //没有被处理过 - key->keep_state_count >= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) //按下持续时间大于3s - { - key->hasProcessed = true; - } else if (key == &s_keys[0] && //定时按键 - key->cur_state == zks_falling_edge && //下降沿触发 - !key->hasProcessed && key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) //小于3s - { - key->hasProcessed = true; - printf("key0 zks_falling_edge\r\n"); - update_timing_time(); - updae_led_light_mode(); - } else if (key == &s_keys[1] && //高低档位选择 - key->cur_state == zks_rising_edge && // - !key->hasProcessed && // - key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) { - key->hasProcessed = true; - printf("key1 zks_rising_edge\r\n"); - process_gearskey_press_even(); - } else if (key == &s_keys[2] && //间歇功能设置选择 - key->cur_state == zks_rising_edge && // - !key->hasProcessed && // - key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) { - key->hasProcessed = true; - printf("key2 zks_rising_edge\r\n"); - process_intervalkey_press_even(); - } else if (key == &s_keys[3] && //开关按键 - key->cur_state == zks_rising_edge && // - !key->hasProcessed && // - key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) { - key->hasProcessed = true; - printf("key2 zks_rising_edge\r\n"); - shutdown(); - } - } else if (error_state.fan_error_status == true || error_state.way_circuit_error_status == true) { //设备存在异常 - if (key == &s_keys[3] && //开关按键 - key->cur_state == zks_rising_edge && // - !key->hasProcessed && // - key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) { - key->hasProcessed = true; - printf("key2 zks_rising_edge\r\n"); - shutdown(); - } - } - } else { //关机中 - if (key == &s_keys[3] && //开关按键 - key->cur_state == zks_rising_edge && // - !key->hasProcessed && // - key->keep_state_count <= POWER_KEY_TRIGGER_TIME / KEY_SCAN_PERIOD) { - key->hasProcessed = true; - printf("key zks_rising_edge\r\n"); - starting_up(); - } - } -} - -/** - * @brief 上电臭氧工作情况,设备中有开关机按键,所以外部上电后,不让设备工作 - * - */ -void power_on_ozone_working_status(void) { - update_ozone_work_gears(WORK_LEVEL_CLOSE); - light_module_set_timing_light_mode(CLOSE_ALL_LED); - port_fan_set(false); //关闭风扇 -} - -//####################### 档位设置 #######################/ /** * @brief 根据档位设置pwm输出,rgb的颜色 * * @param gears */ -void update_ozone_work_gears(WORK_LEVEL_T level) { +void update_ozone_work_level(bool interval_work, WORK_LEVEL_T level) { + printf("update_ozone_work_level(interval_work:%d,level:%d)\n", interval_work, level); + rgb_light_mode_t lightmode; + int duty = 0; + if (level == WORK_LEVEL_CLOSE) { - ozone_pwm_control_module_set_pwm_output_2(1, 0, s_interval_period, s_now_interval_duty); - light_module_set_rgb_mode(RGB_CLOSE); + duty = 0; + lightmode = RGB_CLOSE; } else if (level == WORK_LEVEL_LOW) { - ozone_pwm_control_module_set_pwm_output_2(1, 25, s_interval_period, s_now_interval_duty); - light_module_set_rgb_mode(RGB_COLOR_GERRN); + duty = 25; + lightmode = RGB_COLOR_GERRN; } else if (level == WORK_LEVEL_MIDDLE) { - ozone_pwm_control_module_set_pwm_output_2(1, 50, s_interval_period, s_now_interval_duty); - light_module_set_rgb_mode(RGB_COLOR_BLUE); + duty = 50; + lightmode = RGB_COLOR_BLUE; } else if (level == WORK_LEVEL_HIGHT) { - ozone_pwm_control_module_set_pwm_output_2(1, 100, s_interval_period, s_now_interval_duty); - light_module_set_rgb_mode(RGB_COLOR_RED); + duty = 100; + lightmode = RGB_COLOR_RED; } - now_level = level; -} -void process_gearskey_press_even(void) { - static uint8_t gearskey_press_count; - gearskey_press_count++; - if (gearskey_press_count == 1) { - update_ozone_work_gears(WORK_LEVEL_MIDDLE); - } else if (gearskey_press_count == 2) { - update_ozone_work_gears(WORK_LEVEL_LOW); - } else if (gearskey_press_count == 3) { - gearskey_press_count = 0; - update_ozone_work_gears(WORK_LEVEL_HIGHT); - } -} -//####################### 开机关机 #######################/ -void shutdown(void) { - ozone_pwm_control_disable(); - error_state.fan_error_status = false; - error_state.way_circuit_error_status = false; - s_intervalkey_press_count = 0; - shutdown_before_level = now_level; - starting_up_state = false; - update_ozone_work_gears(WORK_LEVEL_CLOSE); - light_module_set_timing_light_mode(CLOSE_ALL_LED); - port_fan_set(false); //关闭风扇 -} -/** - * @brief 开机后,根据关机时的档位进行设置,如果关机时档位为关闭则设置为高档工作 - * - */ -void starting_up(void) { - //开机没有间歇功能所以设置占空比为100 - update_interval_period_duty(100); - //开机没有定时功能所以将 timing_function_enable_falg = false; s_timing_time = 0; - timing_function_enable_falg = false; - s_timing_time = 0; - starting_up_state = true; - if (shutdown_before_level == WORK_LEVEL_CLOSE) { - update_ozone_work_gears(WORK_LEVEL_HIGHT); + if (interval_work) { + ozone_pwm_control_module_set_pwm_output_2(1, 0, INTERVAL_WORK_DUTY, INTERVAL_WORK_PERIOD_MS); } else { - update_ozone_work_gears(shutdown_before_level); - } - port_fan_set(true); //打开你风扇 -} - -void process_switchkey(void) { - static bool switchkey_press_count = 0; - switchkey_press_count = !switchkey_press_count; - if (switchkey_press_count) { //开机 - starting_up(); - } else { //关机 - shutdown(); - } -} - -//####################### 定时功能 #######################/ -/** - * @brief 根据现在的时间进行更改 - * - */ -void updae_led_light_mode(void) { - if ((s_timing_time / TIMING_TICK) == 0) { - light_module_set_timing_light_mode(CLOSE_ALL_LED); - } else if ((s_timing_time / TIMING_TICK) == 1) { - light_module_set_timing_light_mode(OPEN_ONE_LED); - } else if ((s_timing_time / TIMING_TICK) == 2) { - light_module_set_timing_light_mode(OPEN_TWO_LED); - } else if ((s_timing_time / TIMING_TICK) == 3) { - light_module_set_timing_light_mode(OPEN_THREE_LED); - } else if ((s_timing_time / TIMING_TICK) == 4) { - light_module_set_timing_light_mode(OPEN_FOUR_LED); + set_pwm_modbul_freq_duty(1, duty); } + light_module_set_rgb_mode(lightmode); + light_module_set_rgb_flicker_mode(interval_work); } /** - * @brief 每次按键按下时间timing_time=timing_time+TIMING_TICK - * 当timing_time==timing_time = 4 * TIMING_TICK; - * timing_time = 0; - * + * @brief 关机 */ -void update_timing_time(void) { - s_timing_shutdown_begin_ticket = get_sys_ticket(); //更新定时关机开始的时间 - update_begin_ticket(); //更新间歇开始的时间 - timing_function_enable_falg = true; //使能定时功能 - if (s_timing_time == 0) { - s_timing_time = 1 * TIMING_TICK; - } else if ((s_timing_time / TIMING_TICK) == 1) { - s_timing_time = 2 * TIMING_TICK; - } else if ((s_timing_time / TIMING_TICK) == 2) { - s_timing_time = 3 * TIMING_TICK; - } else if ((s_timing_time / TIMING_TICK) == 3) { - s_timing_time = 4 * TIMING_TICK; - } else if ((s_timing_time / TIMING_TICK) == 4) { - s_timing_time = 0 * TIMING_TICK; - timing_function_enable_falg = false; - update_interval_period_duty(100); - } - printf("timing time:%d\r\n", s_timing_time); -} +void shutdown(void) { + printf("shutdown\n"); + g_power_flag = false; + g_error_num = 0; + g_auto_shutdown_flag = false; + g_auto_shutdown_countdown_s = 0; -/** - * @brief 定时每过TIMING_TICK timing_time=timing_time-TIMING_TICK - * 当TIMING_TICK==0的时候关机 - * - */ -void try_shutdown(void) { - if (port_haspassedms(s_timing_shutdown_begin_ticket) > TIMING_TICK) { - s_timing_shutdown_begin_ticket = get_sys_ticket(); - printf("time minus %dms", TIMING_TICK); - s_timing_time -= TIMING_TICK; - updae_led_light_mode(); - } - if (s_timing_time == 0) { //定时时间到 - timing_function_enable_falg = false; //失能定时功能 - shutdown(); - } + update_ozone_work_level(false, WORK_LEVEL_CLOSE); + port_fan_set(false); //关闭风扇 + light_module_close_all_light(); } -bool timing_function_is_enable(void) { return timing_function_enable_falg; } - +/*********************************************************************************************************************** + * ======================================================看门狗======================================================= * + ***********************************************************************************************************************/ void iwdt_init(void) { /** * @brief 看门狗介绍:当计数到0时,窗口计数器+1 * 当窗口计数为“2”的时候,产生中断 * 当窗口计数器为“4”的之前没有进行喂狗操作,产生复位 - * */ IWDT_InitStruType x; @@ -357,165 +122,99 @@ void iwdt_init(void) { x.WDT_Rst = Enable; /* IWDT复位使能 */ x.WDT_Clock = IWDT_CLOCK_WDT; /* LRC */ IWDT_Init(&x); - /* 使能IWDT */ IWDT_Enable(); } - void feed_iwdt(void) { //喂狗 - if (0x01 == IWDT_GetFlagStatus()) //产生中断 - { + if (0x01 == IWDT_GetFlagStatus()) { IWDT_Clear(); // printf("喂狗\r\n"); } } -void process_error_even(void) { - if (error_state.fan_error_status == false && error_state.way_circuit_error_status == false) { //没有错误 - return; - } else { - if (!error_even_trigger_after_stop_ozone_work_state) { - error_even_trigger_after_stop_ozone_work_state = true; - set_pwm_modbul_freq_duty(1, 0); - light_module_set_rgb_mode(RGB_CLOSE); - light_module_set_timing_light_mode(CLOSE_ALL_LED); - port_fan_set(false); //关闭风扇 - } - if (error_state.fan_error_status == true) { //电扇电压异常 - static uint32_t error_even_fan_ticket = 0; - static uint8_t one_led_flicker_state = 1; - if (port_haspassedms(error_even_fan_ticket) > 500) { - error_even_fan_ticket = get_sys_ticket(); - one_led_flicker_state = !one_led_flicker_state; - port_led0_set(one_led_flicker_state); - } - } else if (error_state.way_circuit_error_status == true) { //总电路电压异常 - static uint32_t error_even_way_circuit = 0; - static uint8_t two_led_flicker_state = 1; - if (port_haspassedms(error_even_way_circuit) > 500) { - error_even_way_circuit = get_sys_ticket(); - two_led_flicker_state = !two_led_flicker_state; - port_led0_set(two_led_flicker_state); - port_led1_set(two_led_flicker_state); - } +void onkey(zkey_t *key, zkey_state_t key_state) { + if (key->hasProcessed) return; + /** + * @brief 关机时,只处理电源按键 + */ + if (!g_power_flag) { + if (key == &s_keys[3] && key->cur_state == zks_falling_edge) { + key->hasProcessed = true; + printf("key zks_rising_edge\r\n"); + /** + * @brief 开机 + * 1.设置标志位 + * 2.打开风扇 + * 3.打开臭氧并打开相应的指示灯 + */ + + g_power_flag = true; //开关机标志位 + g_error_num = 0; + g_auto_shutdown_flag = false; //定时功能使能标志位 + g_auto_shutdown_countdown_s = 0; //定时时间 + + port_fan_set(true); //打开你风扇 + update_ozone_work_level(g_setting_interval_work_flag, g_setting_level); } + return; } -} -/*********************************************************************************************************************** - * =======================================================测试======================================================== - ** - ***********************************************************************************************************************/ -void test_adc(void) { - while (1) { - ADC_InitStruType x; - GPIO_InitSettingType y; - y.Signal = GPIO_Pin_Signal_Analog; //模拟 - y.Dir = GPIO_Direction_Input; //输入 - y.Func = GPIO_Reuse_Func0; - // x.CHS设置adc采集的通道每个引脚对应一个通道 - GPIO_Init(GPIO_Pin_A2, &y); - - //经过分频以后Tadclk=1/(PCLK/4)约等于0.083us - x.CLKS = ADC_CLKS_PCLK; - x.CLKDIV = ADC_CLKDIV_1_32; /* ADC时钟源预分频 */ - - //采集到的模拟量*3.3/4096=现在的电压 - - x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */ - x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */ - x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */ - x.CHS = ADC_CHS_AIN8; - x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */ - //采样时间st*2+1(个Tadclk)=1.743us - x.ST = 10; /* AD硬件采样时间选择 */ - x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */ - ADC_Init(&x); - uint32_t pa2_adc_val = 0; - ADC_SoftStart(); - ADC_SoftStop(); - //正在转换 - while (ADC_GetConvStatus() != RESET) - ; - pa2_adc_val = ADC_GetConvValue(); - printf("%d\r\n", pa2_adc_val); - printf("pa2_adc_valpa2_val:%lf\r\n", pa2_adc_val * 3.3 / 4096); - - y.Signal = GPIO_Pin_Signal_Analog; //模拟 - y.Dir = GPIO_Direction_Input; //输入 - y.Func = GPIO_Reuse_Func0; - // x.CHS设置adc采集的通道每个引脚对应一个通道 - GPIO_Init(GPIO_Pin_B8, &y); - - //经过分频以后Tadclk=1/(PCLK/4)约等于0.083us - x.CLKS = ADC_CLKS_PCLK; - x.CLKDIV = ADC_CLKDIV_1_32; /* ADC时钟源预分频 */ - - //采集到的模拟量*3.3/4096=现在的电压 - - x.VREF_SEL = ADC_VREF_SEL_0; /* 内部参考电压2.048v,仅设置内部参考电压为多少 */ - x.VREFP = ADC_VREFP_VDD; /* 选择芯片的工作电压VDD,这个是设置adc具体是要哪个电压来做参考adc的参考电压为多少 */ - x.VREFN = ADC_VREFN_VSS; /* 负向参考电压选择 */ - x.CHS = ADC_CHS_AIN3; - x.SMPS = ADC_SMPS_SOFT; /* AD采样模式为软件控制 */ - //采样时间st*2+1(个Tadclk)=1.743us - x.ST = 10; /* AD硬件采样时间选择 */ - x.BITSEL = ADC_BITSEL_12; /* AD分辨率12位 */ - ADC_Init(&x); - uint32_t pb8_adc_val = 0; - ADC_SoftStart(); - ADC_SoftStop(); - //正在转换 - while (ADC_GetConvStatus() != RESET) - ; - pb8_adc_val = ADC_GetConvValue(); - printf("pb8_adc_val%d\r\n", pb8_adc_val); - printf("pb8_val:%lf\r\n", pb8_adc_val * 3.3 / 4096); - Delayms(1000); - } -} -void test(void) { - port_fan_set(false); - Delayms(10000); - port_fan_set(true); - printf("open\r\n"); - Delayms(10000); - while (1) { - // unused_gpio_init(); - // gpio_init(); - // port_fan_set(false); - // printf("close\r\n"); - // Delayms(30000); - // port_fan_set(true); - // printf("open\r\n"); - // Delayms(10000); + /** + * @brief 发生异常时,除了电源按键外,所有按键失效。 + */ + if (g_error_num != 0) { //设备存在异常 + if (key == &s_keys[3] && key->cur_state == zks_falling_edge) { + key->hasProcessed = true; + printf("process key[2] event\r\n"); + /** + * @brief 关机 + */ + shutdown(); + } + return; } - error_state.way_circuit_error_status = true; - error_state.fan_error_status = true; - // while (1) { - // port_fan_set(true); //测试关闭风扇 - // printf("open\r\n"); - // Delayms(50000); - // port_fan_set(false); //测试关闭风扇 - // printf("close\r\n"); - // Delayms(50000); - // port_do_debug_light_state(); - // printf("Initialization completed\r\n"); - // } - // while (1) { - // port_do_debug_light_state(); - // printf("Initialization completed\r\n"); - // } + if (key == &s_keys[0] && key->cur_state == zks_falling_edge) //小于3s + { + printf("process key[0] event\r\n"); + /** + * @brief 处理定时按键事件 + */ + if (!g_auto_shutdown_flag) { + g_auto_shutdown_flag = true; + g_auto_shutdown_countdown_s = 0; + } + g_auto_shutdown_countdown_s += AUTO_SHUTDOWN_ONE_LIGHT_EQ_TIME_S; + } else if (key == &s_keys[1] && key->cur_state == zks_falling_edge) { + /** + * @brief 处理等级按键 + */ + printf("process key[1] event\r\n"); + if (g_setting_level == WORK_LEVEL_HIGHT) { + update_ozone_work_level(g_setting_interval_work_flag, WORK_LEVEL_LOW); + } else if (g_setting_level == WORK_LEVEL_MIDDLE) { + update_ozone_work_level(g_setting_interval_work_flag, WORK_LEVEL_HIGHT); + } else if (g_setting_level == WORK_LEVEL_LOW) { + update_ozone_work_level(g_setting_interval_work_flag, WORK_LEVEL_MIDDLE); + } + } else if (key == &s_keys[2] && key->cur_state == zks_falling_edge) { + printf("process key[2] event\r\n"); + /** + * @brief 处理间歇按键事件 + */ + g_setting_interval_work_flag = !g_setting_interval_work_flag; + update_ozone_work_level(g_setting_interval_work_flag, g_setting_level); + } else if (key == &s_keys[3] && key->cur_state == zks_falling_edge) { + printf("process key[2] event\r\n"); + /** + * @brief 关机 + */ + shutdown(); + } } -/** - * @brief 间歇功能使能后,rgb闪烁 - * - */ /*********************************************************************************************************************** * ======================================================主函数======================================================= - ** ***********************************************************************************************************************/ int main(void) { HRC_Config(Enable, SCU_HRC_48M, Enable); //时钟源SCU_CLK_HRC @@ -523,50 +222,89 @@ int main(void) { DeviceClockAllEnable(); //打开所有外设时钟 User_SysTickInit(); //滴答定时器初始化为(配置为1ms中断) SysTick_Enable(); - - // all_gpio_reset(); + //硬件初始化 unused_gpio_init(); gpio_init(); - uart0_init(); - zkey_init(&key_module); t16_pa4_init(); - // iwdt_init(); - power_on_ozone_working_status(); + + //模块初始化 + zkey_init(&key_module); + + //上电默认关机 + shutdown(); + + //启动结束 printf("Initialization completed\r\n"); - // test(); - // test_adc(); + while (true) { + /******************************************************************************************************************* + * ==================================================调试指示灯=================================================== * + *******************************************************************************************************************/ port_do_debug_light_state(); - // feed_iwdt(); - static uint32_t keylastprocess = 0; - if (port_haspassedms(keylastprocess) > 40) { - keylastprocess = get_sys_ticket(); - zkey_do_loop_in_each_period(NULL); + + /*********************************************************************************************************************** + * =================================================按键模块调度代码================================================== * + ***********************************************************************************************************************/ + { + static uint32_t keylastprocess = 0; + if (port_haspassedms(keylastprocess) > KEY_PERIOD) { + keylastprocess = get_sys_ticket(); + zkey_do_loop_in_each_period(NULL); + } } - if (starting_up_state) { //开机中 - port_do_debug_light_state(); - process_error_even(); - try_adc_gather(); - if (timing_function_is_enable()) { //定时功能是开启的 - try_shutdown(); + /*********************************************************************************************************************** + * ===============================================灯光控制模块调度代码================================================ * + ***********************************************************************************************************************/ + light_module_schedule(); + + /*********************************************************************************************************************** + * ===============================================臭氧控制模块调度代码================================================ * + ***********************************************************************************************************************/ + ozone_pwm_control_module_loop(); + + /*********************************************************************************************************************** + * ===================================================自动关机逻辑==================================================== * + ***********************************************************************************************************************/ + // + if (g_power_flag && g_auto_shutdown_flag) { + static uint32_t ticket = 0; + ticket = get_sys_ticket(); + // + if (port_haspassedms(ticket) > 1000) { + ticket = get_sys_ticket(); + if (g_auto_shutdown_countdown_s > 0) { + g_auto_shutdown_countdown_s -= 1; + } else { + g_auto_shutdown_flag = false; + /** + * @brief 触发定时关机 + */ + shutdown(); + } } - if (ozone_pwm_control_is_enable() == true) { - ozone_pwm_control_module_loop(); - process_rgb_flicker(); + // + } + /*********************************************************************************************************************** + * ===================================================定时指示灯显示逻辑==================================================== + ***********************************************************************************************************************/ + updae_timing_light_state(); + /*********************************************************************************************************************** + * ===================================================异常监控逻辑==================================================== + ***********************************************************************************************************************/ + { + static uint32_t ticket = 0; + if (port_haspassedms(ticket) > EXCEPTION_CHECK_PERIOD) { + ticket = get_sys_ticket(); + + /** + * @brief + * 这里检测ADC的数值是否超出规定范围 + */ + if (false) { + } } - } else { //关机中 } + // End.................................. } -} - -/** - * 上电工作状态设置测试通过 - * 开关机按键测试通过 - * 定时按键测试通过 - * 间歇按键闪烁测试通过 - * 档位按键测试通过 - * 模拟风扇错误触发后led0闪烁测试通过 - * 模拟总电路错误触发后led0,led1闪烁测试通过 - * 注意:需要加个逻辑,如果总电路电压异常,则风扇电压异常不触发,这个逻辑之后再加 - */ +} \ No newline at end of file diff --git a/APP/main.h b/APP/main.h index c4d0761..4bedf6e 100644 --- a/APP/main.h +++ b/APP/main.h @@ -49,7 +49,7 @@ void process_gearskey_press_even(void); void shutdown(void); void starting_up(void); void process_switchkey(void); -void updae_led_light_mode(void); +void updae_timing_light_state(void); void update_timing_time(void); void try_shutdown(void); bool timing_function_is_enable(void); diff --git a/APP/ozone_pwm_control.c b/APP/ozone_pwm_control.c index e969a35..c282637 100644 --- a/APP/ozone_pwm_control.c +++ b/APP/ozone_pwm_control.c @@ -11,7 +11,7 @@ void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty); void HOOK_pwm_stop(void); bool HOOK_pwm_is_enable(void); -void update_begin_ticket(void) { +static void prv_update_begin_ticket(void) { begin_ticket = get_sys_ticket(); //更新大周期的开始时间(间歇时间的开始的时间) } @@ -28,7 +28,7 @@ bool ozone_pwm_control_is_enable(void) { return ozone_pwm_control_enable_falg; } void ozone_pwm_control_module_set_pwm_output_1(uint32_t large_period, uint8_t large_duty) { s_large_period = large_period; s_large_duty = large_duty; - update_begin_ticket(); + prv_update_begin_ticket(); ozone_pwm_control_enable(); if (large_duty == 100) { ozone_pwm_control_disable(); @@ -48,7 +48,7 @@ void ozone_pwm_control_module_set_pwm_output_2(uint32_t hardware_period, uint8_t s_hardware_duty = hardware_duty; s_large_period = large_period; s_large_duty = large_duty; - update_begin_ticket(); + prv_update_begin_ticket(); ozone_pwm_control_enable(); HOOK_pwm_module_set_pwm_duty(hardware_period, hardware_duty); if (large_duty == 100) { diff --git a/APP/ozone_pwm_control.h b/APP/ozone_pwm_control.h index 0d1f007..c3deb35 100644 --- a/APP/ozone_pwm_control.h +++ b/APP/ozone_pwm_control.h @@ -1,7 +1,6 @@ #ifndef _OZONE_PWM_CONTROL_H_ #define _OZONE_PWM_CONTROL_H_ - #include #include @@ -16,7 +15,7 @@ void ozone_pwm_control_module_set_pwm_output_2(uint32_t hardware_period, uint8_t void ozone_pwm_control_module_set_pwm(uint32_t frequency, uint32_t duty); void ozone_pwm_control_module_stop_pwm(void); void ozone_pwm_control_module_loop(void); -void update_begin_ticket(void); + void ozone_pwm_control_enable(void); void ozone_pwm_control_disable(void); bool ozone_pwm_control_is_enable(void); diff --git a/project_ozone/Listings/project_o.map b/project_ozone/Listings/project_o.map index b637b81..c10276d 100644 --- a/project_ozone/Listings/project_o.map +++ b/project_ozone/Listings/project_o.map @@ -38,7 +38,7 @@ Section Cross References main.o(i.main) refers to main.o(.data) for .data main.o(i.onkey) refers to printfa.o(i.__0printf) for __2printf main.o(i.onkey) refers to main.o(i.update_timing_time) for update_timing_time - main.o(i.onkey) refers to main.o(i.updae_led_light_mode) for updae_led_light_mode + main.o(i.onkey) refers to main.o(i.updae_timing_light_state) for updae_timing_light_state main.o(i.onkey) refers to main.o(i.process_gearskey_press_even) for process_gearskey_press_even main.o(i.onkey) refers to main.o(i.process_intervalkey_press_even) for process_intervalkey_press_even main.o(i.onkey) refers to main.o(i.shutdown) for shutdown @@ -98,11 +98,11 @@ Section Cross References main.o(i.try_shutdown) refers to systick.o(i.port_haspassedms) for port_haspassedms main.o(i.try_shutdown) refers to systick.o(i.get_sys_ticket) for get_sys_ticket main.o(i.try_shutdown) refers to printfa.o(i.__0printf) for __2printf - main.o(i.try_shutdown) refers to main.o(i.updae_led_light_mode) for updae_led_light_mode + main.o(i.try_shutdown) refers to main.o(i.updae_timing_light_state) for updae_timing_light_state main.o(i.try_shutdown) refers to main.o(i.shutdown) for shutdown main.o(i.try_shutdown) refers to main.o(.data) for .data - main.o(i.updae_led_light_mode) refers to light.o(i.light_module_set_timing_light_mode) for light_module_set_timing_light_mode - main.o(i.updae_led_light_mode) refers to main.o(.data) for .data + main.o(i.updae_timing_light_state) refers to light.o(i.light_module_set_timing_light_mode) for light_module_set_timing_light_mode + main.o(i.updae_timing_light_state) refers to main.o(.data) for .data main.o(i.update_interval_period_duty) refers to printfa.o(i.__0printf) for __2printf main.o(i.update_interval_period_duty) refers to ozone_pwm_control.o(i.ozone_pwm_control_disable) for ozone_pwm_control_disable main.o(i.update_interval_period_duty) refers to main.o(i.restore_the_mode_before_intermittent_work) for restore_the_mode_before_intermittent_work @@ -1179,7 +1179,7 @@ Image Symbol Table i.try_shutdown 0x00002534 Section 0 main.o(i.try_shutdown) i.uart0_init 0x00002584 Section 0 uart0.o(i.uart0_init) i.unused_gpio_init 0x00002610 Section 0 port.o(i.unused_gpio_init) - i.updae_led_light_mode 0x000026a0 Section 0 main.o(i.updae_led_light_mode) + i.updae_timing_light_state 0x000026a0 Section 0 main.o(i.updae_timing_light_state) i.update_begin_ticket 0x000026fc Section 0 ozone_pwm_control.o(i.update_begin_ticket) i.update_interval_period_duty 0x0000270c Section 0 main.o(i.update_interval_period_duty) i.update_ozone_work_gears 0x00002770 Section 0 main.o(i.update_ozone_work_gears) @@ -1204,7 +1204,7 @@ Image Symbol Table error_even_fan_ticket 0x2000001c Data 4 main.o(.data) error_even_way_circuit 0x20000020 Data 4 main.o(.data) keylastprocess 0x20000024 Data 4 main.o(.data) - s_timing_time 0x20000028 Data 4 main.o(.data) + s_auto_shutdown_countdown_s 0x20000028 Data 4 main.o(.data) s_keys 0x2000002c Data 112 main.o(.data) .data 0x200000a8 Section 8 systick.o(.data) debug_led_state 0x200000a8 Data 1 systick.o(.data) @@ -1450,7 +1450,7 @@ Image Symbol Table try_shutdown 0x00002535 Thumb Code 56 main.o(i.try_shutdown) uart0_init 0x00002585 Thumb Code 134 uart0.o(i.uart0_init) unused_gpio_init 0x00002611 Thumb Code 144 port.o(i.unused_gpio_init) - updae_led_light_mode 0x000026a1 Thumb Code 70 main.o(i.updae_led_light_mode) + updae_timing_light_state 0x000026a1 Thumb Code 70 main.o(i.updae_timing_light_state) update_begin_ticket 0x000026fd Thumb Code 12 ozone_pwm_control.o(i.update_begin_ticket) update_interval_period_duty 0x0000270d Thumb Code 68 main.o(i.update_interval_period_duty) update_ozone_work_gears 0x00002771 Thumb Code 80 main.o(i.update_ozone_work_gears) @@ -1461,8 +1461,8 @@ Image Symbol Table zkey_process_each_after_filter 0x00002909 Thumb Code 70 key.o(i.zkey_process_each_after_filter) Region$$Table$$Base 0x00002984 Number 0 anon$$obj.o(Region$$Table) Region$$Table$$Limit 0x000029a4 Number 0 anon$$obj.o(Region$$Table) - starting_up_state 0x20000000 Data 1 main.o(.data) - timing_function_enable_falg 0x20000001 Data 1 main.o(.data) + g_power_flag 0x20000000 Data 1 main.o(.data) + g_auto_shutdown_flag 0x20000001 Data 1 main.o(.data) rgb_ticket_count 0x20000004 Data 1 main.o(.data) now_level 0x20000009 Data 1 main.o(.data) shutdown_before_level 0x2000000a Data 1 main.o(.data) @@ -1639,7 +1639,7 @@ Memory Map of the image 0x00002534 0x00002534 0x00000050 Code RO 22 i.try_shutdown main.o 0x00002584 0x00002584 0x0000008c Code RO 478 i.uart0_init uart0.o 0x00002610 0x00002610 0x00000090 Code RO 275 i.unused_gpio_init port.o - 0x000026a0 0x000026a0 0x0000005c Code RO 23 i.updae_led_light_mode main.o + 0x000026a0 0x000026a0 0x0000005c Code RO 23 i.updae_timing_light_state main.o 0x000026fc 0x000026fc 0x00000010 Code RO 695 i.update_begin_ticket ozone_pwm_control.o 0x0000270c 0x0000270c 0x00000064 Code RO 24 i.update_interval_period_duty main.o 0x00002770 0x00002770 0x00000054 Code RO 25 i.update_ozone_work_gears main.o diff --git a/project_ozone/Listings/startup_es8p5066.lst b/project_ozone/Listings/startup_es8p5066.lst index e08fa7c..fa9fe68 100644 --- a/project_ozone/Listings/startup_es8p5066.lst +++ b/project_ozone/Listings/startup_es8p5066.lst @@ -304,7 +304,7 @@ ARM Macro Assembler Page 5 Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M0 --apcs=interw ork --depend=.\objects\startup_es8p5066.d -o.\objects\startup_es8p5066.o -IC:\K eil_v5\ARM\RV31\INC -IC:\Keil_v5\ARM\CMSIS\Include -IC:\Keil_v5\ARM\INC\HR --pr -edefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 527" --list=.\l +edefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 536" --list=.\l istings\startup_es8p5066.lst ..\MDK_StartUp\startup_ES8P5066.s diff --git a/project_ozone/project_o.uvgui.zel b/project_ozone/project_o.uvgui.zel new file mode 100644 index 0000000..75106c6 --- /dev/null +++ b/project_ozone/project_o.uvgui.zel @@ -0,0 +1,1878 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + + + + + + + + 38003 + Registers + 140 90 + + + 346 + Code Coverage + 1010 160 + + + 204 + Performance Analyzer + 1170 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 80 80 80 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser + 500 + 300 + + + + + + + + 1 + 1 + 0 + 0 + -1 + + + + + + + 44 + 0 + 1 + + -32000 + -32000 + + + -1 + -1 + + + 57 + 309 + 1754 + 942 + + + + 0 + + 268 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000001000000000000000100000047463A5C776F726B73706163655C70726F6A6563745F6F7A6F6E655F67656E657261746F725C70726F6A6563745F6F7A6F6E655F65733870353036365C4150505C6C696768742E6800000000076C696768742E6800000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000031020000A7000000D206000012020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000004F00000090050000DF000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000A1010000 + + + 16 + 22000000390000001201000004010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000A1010000 + + + 16 + 22000000390000003E01000079020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000002D02000090050000BD020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + A3040000660000008D05000001010000 + + + 16 + 22000000390000001201000004010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000300200008D050000A4020000 + + + 16 + 22000000390000001201000004010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 22000000390000001201000004010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 22000000390000001201000004010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000A1010000 + + + 16 + 22000000390000003E01000079020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000A1010000 + + + 16 + 22000000390000003E01000079020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000D2010000950500003B030000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000001902000090050000BD020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000D50100008D05000035020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + F40000006300000090050000DF000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A0040000630000009005000029020000 + + + 16 + 22000000390000001201000004010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000002D02000090050000A9020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F40000006300000090050000DF000000 + + + 16 + 22000000390000001201000004010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000ED000000A4020000 + + + 16 + 22000000390000003E01000079020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000D2010000900500004E020000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000D50100008D05000035020000 + + + 16 + 22000000390000003E01000079020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 22000000390000001201000004010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 22000000390000001201000004010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000D50100008D05000035020000 + + + 16 + 22000000390000003E01000079020000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000D50100008D05000035020000 + + + 16 + 22000000390000003E01000079020000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + F7000000660000008D050000C6000000 + + + 16 + 2200000039000000EA020000C9000000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + A3040000660000008D0500007C010000 + + + 16 + 22000000390000001201000004010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000003B030000950500004E030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000300200008D05000090020000 + + + 16 + 22000000390000001201000004010000 + + + + 3312 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000002200000039000000EA020000C9000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200001004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C300000180004000000000000022000000390000001201000004010000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000BA010000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000022000000390000001201000004010000000000004F000000F0000000BA0100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000022000000390000001201000004010000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000BA01000095050000BE01000001000000010000100400000001000000ADFDFFFF8E000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000002200000039000000EA020000C900000000000000BE010000950500003B0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2537 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000000000000010000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65FF7F0000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 976 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64FF7F0000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000000000000100000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000000000000100000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000000000000100000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F720100000000000000000000000100000001000000000000000000000001000000000000000000054465627567FF7F0000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + + + 1 + 0 + + 100 + 0 + + ..\APP\light.h + 0 + 15 + 33 + 1 + + 0 + + + + +
diff --git a/project_ozone/project_o.uvopt b/project_ozone/project_o.uvopt index eec4ad3..082a3fd 100644 --- a/project_ozone/project_o.uvopt +++ b/project_ozone/project_o.uvopt @@ -10,7 +10,7 @@ *.s*; *.src; *.a* *.obj; *.o *.lib - *.txt; *.h; *.inc + *.txt; *.h; *.inc; *.md *.plm *.cpp 0 @@ -103,7 +103,7 @@ 1 0 0 - 3 + 12 diff --git a/project_ozone/project_o.uvproj b/project_ozone/project_o.uvproj index 84d462a..a3a27dc 100644 --- a/project_ozone/project_o.uvproj +++ b/project_ozone/project_o.uvproj @@ -10,7 +10,7 @@ Target 1 0x4 ARM-ADS - 5060750::V5.06 update 6 (build 750)::ARMCC + 5060960::V5.06 update 7 (build 960)::ARMCC 0 @@ -149,7 +149,7 @@ 1 0 - 3 + 12 @@ -224,6 +224,7 @@ 0 0 0 + 0 0 0 8 @@ -390,7 +391,7 @@ 0 0 0 - 0 + 4