From: p15692025051 <846603105@qq.com> Date: Fri, 19 Apr 2024 10:23:58 +0000 (+0800) Subject: 血压单片机代码 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=ac093ec5fdc0c01140db5e709d09ba0480df7fcb;p=mirrors%2FASR3603_Z5.git 血压单片机代码 --- diff --git a/1.doc/K18/BLE_Watch/code/proj_main.c b/1.doc/K18/BLE_Watch/code/proj_main.c index 501094bc..1597515c 100644 --- a/1.doc/K18/BLE_Watch/code/proj_main.c +++ b/1.doc/K18/BLE_Watch/code/proj_main.c @@ -37,6 +37,7 @@ #include "flash_usage_config.h" #include "lib_hr.h" #include "sensor_drive.h" +#include "user_task.h" SysConfig sys_config ={0}; void init_sys_config(void); /* @@ -132,7 +133,8 @@ void user_custom_parameters(void) */ __attribute__((section("ram_code"))) void user_entry_before_sleep_imp(void) { - + //pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1);//心率使能 高电平 + //co_printf("sleep\r\n"); } /********************************************************************* * @fn user_entry_after_sleep_imp @@ -149,6 +151,11 @@ __attribute__((section("ram_code"))) void user_entry_before_sleep_imp(void) */ __attribute__((section("ram_code"))) void user_entry_after_sleep_imp(void) { + system_set_port_pull(GPIO_PC6, true); + system_set_port_mux(GPIO_PORT_C, GPIO_BIT_6, PORTC6_FUNC_UART0_RXD); + system_set_port_mux(GPIO_PORT_C, GPIO_BIT_5, PORTC5_FUNC_UART0_TXD); + uart_init(UART0, BAUD_RATE_921600); + NVIC_EnableIRQ(UART0_IRQn); /* set PA2 and PA3 for AT command interface */ system_set_port_pull(GPIO_PA2, true); system_set_port_mux(GPIO_PORT_A, GPIO_BIT_2, PORTA2_FUNC_UART1_RXD); @@ -156,7 +163,13 @@ __attribute__((section("ram_code"))) void user_entry_after_sleep_imp(void) uart_init(UART1, BAUD_RATE_921600); NVIC_EnableIRQ(UART1_IRQn); + + + NVIC_EnableIRQ(PMU_IRQn); + user_i2c1_init(); + user_i2c0_init(); + //co_printf("UP\r\n"); } /********************************************************************* @@ -199,7 +212,7 @@ void user_entry_before_ble_init(void) system_set_port_pull(GPIO_PC6, true); system_set_port_mux(GPIO_PORT_C, GPIO_BIT_6, PORTC6_FUNC_UART0_RXD); system_set_port_mux(GPIO_PORT_C, GPIO_BIT_5, PORTC5_FUNC_UART0_TXD); - uart_init(UART0, BAUD_RATE_115200); + uart_init(UART0, BAUD_RATE_921600); NVIC_EnableIRQ(UART0_IRQn); co_printf("user_entry_before_ble_init!!!!!\n\n\n"); @@ -293,16 +306,18 @@ extern uint8_t *uart0_rivce_data ; void user_entry_after_ble_init(void) { - co_printf("\r\n\r\n--------333333333init_sys_config--------\r\n\r\n"); + co_printf("\r\n\r\n--------init_sys_config--------\r\n\r\n"); + co_printf("\r\n\r\n--------%s--------\r\n\r\n",Versions); + //system_set_tx_power(RF_TX_POWER_POS_10dBm); //设置发射功率为10DB - system_sleep_disable(); //关睡眠 - simple_peripheral_init();//蓝牙初始化 - co_printf("heap:%d!!!!!!!!!!\n\n",os_get_free_heap_size()); + //system_sleep_disable(); //关睡眠 + // + //co_printf("heap:%d!!!!!!!!!!\n\n",os_get_free_heap_size()); UART_send_buf = os_malloc(UART_SEND_MAX+10); memset(UART_send_buf,0,UART_SEND_MAX); - co_printf("heap:%d!!!!!!!!!!\n\n",os_get_free_heap_size()); + //co_printf("heap:%d!!!!!!!!!!\n\n",os_get_free_heap_size()); uart0_rivce_data = os_malloc(UART_READ_MAX+10); - co_printf("heap:%d!!!!!!!!!!\n\n",os_get_free_heap_size()); + //co_printf("heap:%d!!!!!!!!!!\n\n",os_get_free_heap_size()); if(UART_send_buf == NULL) { while(1) @@ -320,38 +335,12 @@ void user_entry_after_ble_init(void) mac_addr_t MAC_T = {0}; gap_address_get(&MAC_T); co_printf("MAC: %X:%X:%X:%X:%X:%X\n",MAC_T.addr[0],MAC_T.addr[1],MAC_T.addr[2],MAC_T.addr[3],MAC_T.addr[4],MAC_T.addr[5]); - timer_init(TIMER0,10000,TIMER_PERIODIC);//10ms - timer_run(TIMER0); - NVIC_EnableIRQ(TIMER0_IRQn); - + // timer_init(TIMER0,10000,TIMER_PERIODIC);//10ms + // timer_run(TIMER0); + // NVIC_EnableIRQ(TIMER0_IRQn); + user_task_init(); sensor_init(); - os_user_loop_event_set(sensor_while); + //os_user_loop_event_set(sensor_while); - // while(1) - // { - // sensor_INT(); - // } - // while(1) - // { - - - - // uart0_receive();//串口0接收数据处理 - // /////////////////////血压测量///////////////////////////// - // BP_test(); - // /////////////////////心率测量///////////////////////////// - // HRS_test(); - // /////////////////////心率变异性测量///////////////////////////// - // HRV_test(); - // /////////////////////血氧测量///////////////////////////// - // SPO2_test(); - // /////////////////////中医测量///////////////////////////// - //YYL_test(); - // //////////////////////情绪测量////////////////////////////////// - //EMO_test(); - - // co_delay_100us(500); - - // //co_printf("main:end\n"); - // } + system_sleep_enable(); } diff --git a/1.doc/K18/BLE_Watch/code/sensor_drive.c b/1.doc/K18/BLE_Watch/code/sensor_drive.c index 39718355..ed0cb6fd 100644 --- a/1.doc/K18/BLE_Watch/code/sensor_drive.c +++ b/1.doc/K18/BLE_Watch/code/sensor_drive.c @@ -33,7 +33,7 @@ #include "algo.h" #include "yyl_pfev01.h" #include "os_mem.h" - +#define VC9202_OPEN_IRQ 1 InitParamTypeDef pInit_Param={0}; char is_HA_activate = 0; @@ -42,6 +42,7 @@ unsigned char *HA_BUF = NULL;//恒爱算法库和中医算法库缓冲区 int yyl_in_data_len = 0; +char yyl_close_flag = 0; extern char send_bp_data_flag;//发送血压数据标致位 extern char send_hrs_data_flag;//发送心率数据标标致位 extern char send_hrv_data_flag;//发送心率变异性标致位 @@ -67,40 +68,51 @@ extern int UART_send_buf_len ; char task_sensor_evn_flag = 0; os_event_t evt; int os_msg_post_count = 0; -unsigned char HR_IRQ_FLAG = 0; +unsigned char USER_IRQ_FLAG = 0; unsigned char BP_IRQ_FLAG = 0; -void pmu_gpio_isr_ram(void) //中断处理 +__attribute__((section("ram_code"))) void pmu_gpio_isr_ram(void) //中断处理 { - uint32_t pmu_int_pin_setting = ool_read32(PMU_REG_PORTA_TRIG_MASK); + //uint32_t pmu_int_pin_setting = ool_read32(PMU_REG_PORTA_TRIG_MASK); uint32_t gpio_value = ool_read32(PMU_REG_GPIOA_V); ool_write32(PMU_REG_PORTA_LAST, gpio_value); - uint32_t tmp = gpio_value & pmu_int_pin_setting; - uint32_t pressed_key = tmp^pmu_int_pin_setting; - //co_printf("K:0x%08x\r\n", (pressed_key));//PD PC PB PA - if((pressed_key&0x00800000)==0x00800000)//PC7//心率中断 低电平 - { - - //co_printf("PC7 = 0 \r\n"); - HR_IRQ_FLAG =1; - } - else if((pressed_key&0x80000000)==0x80000000)//PD7 //4G中断1 - { - //co_printf("PD7 = 0 \r\n"); - } - else if((pressed_key&0x40000000)==0x40000000)//PD6 //4G中断0 + //uint32_t pressed_key = gpio_value & pmu_int_pin_setting; + //uint32_t pressed_key = tmp^pmu_int_pin_setting; + // uint32_t gpio_value = ool_read32(PMU_REG_GPIOA_V); + // ool_write32(PMU_REG_PORTD_LAST, gpio_value); + //co_printf("IRQ\r\n"); + //co_printf("pressed_key:0x%x,gpio_value:0x%x,pmu_int_pin_setting:0x%x,GPIO_PC7:0x%x!!!!!!!!!\r\n", pressed_key,gpio_value,pmu_int_pin_setting,GPIO_PC7);//PD PC PB PA + if(USER_IRQ_FLAG == 1) { - //co_printf("PD6 = 0 \r\n"); + //co_printf("IRQ_FLAG_ERROR\r\n"); + return; } - else if((pressed_key&0x20000000)==0x20000000)//PD5//血压中断 + //if((pressed_key&GPIO_PC7)!=0)//PC7//心率中断 低电平 { - - } - else if((pressed_key&0x10000000)==0x10000000)//PD4// 三轴地磁传感器中断 - { - //co_printf("PD4 = 0 \r\n"); + //co_printf("PC7 = 0 \r\n"); + user_event_send(USER_IRQ, NULL, NULL);//无法判断是哪个中断产生,只能都执行 + //co_printf("IRQ_ERROR1:gpio_value:0x%x\r\n",gpio_value); + USER_IRQ_FLAG =1; } + // if((pressed_key&GPIO_PD7)==0)//PD7 //4G中断1 + // { + // user_event_send(USER_4G_IRQ, NULL, NULL); + // co_printf("PD7 = 0 \r\n"); + // } + // if((pressed_key&GPIO_PD6)!=0)//PD6 //4G中断0 + // { + // //co_printf("PD6 = 0 \r\n"); + // } + // if((pressed_key&GPIO_PD5)!=0)//PD5//血压中断 + // { + // //co_printf("PD5 = 0 \r\n"); + // BP_IRQ_FLAG = 1; + // } + // if((pressed_key&GPIO_PD4)!=0)//PD4// 三轴地磁传感器中断 + // { + // //co_printf("PD4 = 0 \r\n"); + // } //NVIC_DisableIRQ(PMU_IRQn); } @@ -229,31 +241,7 @@ void gsensor_init(void) //co_delay_100us(10000); //} } - /////////////////////////////////////数据转换////////////////////////////////// -//////////////////////////////////////十六进制转字符串ASCII码/////////////////////////////////////////////////////////////////////// -// char str_high=0,str_low=0;//uint8转字符高位和低位 -// void uintTOstr(char hex_data)//十六进制转字符串ASCII码 -// { -// str_high =(hex_data&0xF0)>>4;//取高位的4位 -// str_low =(hex_data&0x0F);//取低位的4位 -// if(str_high>=0)//0-9 -// { -// if(str_high<=9) -// str_high=str_high+48; -// } -// else if(str_high>=0x0A&&str_high<=0x0F)//A-F -// str_high=str_high+55; -// if(str_low>=0)//0-9 -// { -// if(str_low<=9) -// { -// str_low=str_low+48; -// } -// } - -// else if(str_low>=0x0A&&str_low<=0x0F)//A-F -// str_low=str_low+55; -// } + int read_BP_data_len = 0; @@ -300,7 +288,7 @@ char BP_test(void) read_BP_data();//读血压数据 read_BP_data_len += 16; - co_printf("read_BP_data_len :%d\n",read_BP_data_len); + co_printf("read_BP_data_len :%d\r\n",read_BP_data_len); uart0_receive();//串口0接收数据处理 irq_flag=0; } @@ -422,6 +410,7 @@ char EMO_test(void) return send_emo_data_flag; } +#if !VC9202_OPEN_IRQ //不开中断,死循环测试 char HRS_test(void) { bool irq_flag=0; @@ -541,18 +530,70 @@ char factory_test(void) return send_factory_data_flag; } ////////////////////////////////////云医链中医测试//////////////////////////////////////////////// -unsigned int yyl_timer=0; -void YYL_test_timer(void) +char YYL_test(void) +{ + char irq_flag; + + while(send_yyl_data_flag==1)//中医 + { + while(gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==1&&send_yyl_data_flag)//等待HR_INT变低 + { + //co_printf(" get_SPO2_waite \n"); + //vcHr02IRQHandler(); + irq_flag=1; + uart0_receive();//串口0接收数据处理 + } + while((gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==0)&&irq_flag&&send_yyl_data_flag)//等待HR_INT变高 + { + //加心率获取到数据退出测量或者加获取有效数据次数或者测试时间 + + //co_printf("YYL_test1!!\n"); + vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1);//里面获取ppg数据 + uart0_receive();//串口0接收数据处理 + if(yyl_in_data_len< YYL_PPG_TEST_LEN-1) + { + + + }else + { + // sensor_INT();//唤醒上位机 + // co_delay_10us(100*1000); + } + irq_flag = 0; + //co_printf("YYL_test2!!\n"); + } + } + + + // YYL_test_count++; + // co_printf("os_msg_post_count:%d YYL_test_count:%d\n",os_msg_post_count,YYL_test_count); + return send_yyl_data_flag; +} +char temp_test(void) { - if(send_yyl_data_flag==2) + bool irq_flag=0; + while(send_temp_data_flag) { - if(yyl_timer>=30) + while(gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==1&&send_temp_data_flag)//等待HR_INT变低 + { + //vcHr02IRQHandler(); + co_delay_100us(10); + uart0_receive();//串口0接收数据处理 + irq_flag = 1; + } + while((gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==0)&&irq_flag&&send_temp_data_flag)//等待HR_INT变高 //高电平获取数据 { - //YYL_open(); - yyl_timer=0; + vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1); + uart0_receive();//串口0接收数据处理 + irq_flag = 0; } } + return send_temp_data_flag; } +#endif + +////////////////////////////////////云医链中医测试//////////////////////////////////////////////// + int YYL_test_count = 0; extern unsigned int yyl_time; void YYL_out_data(void) @@ -562,7 +603,12 @@ void YYL_out_data(void) int pOutputData_len ; int printf_len = 0; co_printf("YYL_Output_PFE!!\n"); - if(yyl_in_data_len>= 3000-1) + // if(yyl_close_flag == 1 )//中医状态关闭,不返回 + // { + // co_printf("YYL_out_data return!!\n"); + // return; + // } + if(yyl_in_data_len>= YYL_PPG_TEST_LEN-1) { co_printf("WORK_MODE_HRV hr:%d \nPPG:",vc9202_alg_results.hr_rate); pOutputData = YYL_Output_PFE(&pOutputData_len); @@ -597,7 +643,6 @@ void YYL_out_data(void) if(count>=255) break; } - uart0_write_for_hci("\"}\n",sizeof("\"}\n"),NULL, NULL); printf_len+=3; co_printf("%s","\"}\n"); @@ -609,48 +654,9 @@ void YYL_out_data(void) // pInit_Param.work_mode = WORK_MODE_NONE; // vc9202_usr_init(&pInit_Param); // send_yyl_data_flag=2; - // yyl_timer=0; + //co_printf(" colse\n"); } -} -char YYL_test(void) -{ - char irq_flag; - - while(send_yyl_data_flag==1)//中医 - { - while(gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==1&&send_yyl_data_flag)//等待HR_INT变低 - { - //co_printf(" get_SPO2_waite \n"); - //vcHr02IRQHandler(); - irq_flag=1; - uart0_receive();//串口0接收数据处理 - } - while((gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==0)&&irq_flag&&send_yyl_data_flag)//等待HR_INT变高 - { - //加心率获取到数据退出测量或者加获取有效数据次数或者测试时间 - - //co_printf("YYL_test1!!\n"); - vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1);//里面获取ppg数据 - uart0_receive();//串口0接收数据处理 - if(yyl_in_data_len< 3000-1) - { - - - }else - { - // sensor_INT();//唤醒上位机 - // co_delay_10us(100*1000); - } - irq_flag = 0; - //co_printf("YYL_test2!!\n"); - } - } - - - // YYL_test_count++; - // co_printf("os_msg_post_count:%d YYL_test_count:%d\n",os_msg_post_count,YYL_test_count); - return send_yyl_data_flag; } ////////////////////////////获取温度数据////////////////////////////////////////////////////// int temper_data; @@ -691,42 +697,7 @@ void get_tp_data() co_delay_100us(500); // } } -#if 0 -void temp_test(void) -{ - - - //send_temp_data_flag=0; - //开佩戴 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 1); //心率使能 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 - //pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 - pInit_Param.work_mode = WORK_MODE_WEAR; - vc9202_usr_init(&pInit_Param); - vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1);//中断里更新佩戴状态 - get_tp_data(); - UART_send_buf_len = snprintf((char *)UART_send_buf,UART_SEND_MAX,"{\"cmd\":\"2\",\"temp_data\":\""); - uart0_write_for_hci(UART_send_buf,UART_send_buf_len,NULL, NULL); - float shi=0.00,ge=0.00; - shi=(temper_data/256)/10; - ge=(temper_data/256)%10; - uart_putc_noint(UART0,(int)(shi+48)); //0x30 - uart_putc_noint(UART0,(int)(ge+48)); - uart_putc_noint(UART0,'.'); - shi = temper_data; - shi = shi/256; - shi = (int)(shi*100)%100/10; - uart_putc_noint(UART0,(int)shi+48); //0x30 - ge= temper_data; - ge = ge/256; - ge = (int)(ge*100)%100%10; - uart_putc_noint(UART0,(int)ge+48); //0x30 - uart0_write_for_hci(uart0_residue_data, 3, NULL, NULL); - //co_delay_100us(1000); - -} -#else void send_temp_data(void) { @@ -752,28 +723,8 @@ void send_temp_data(void) //co_delay_100us(1000); } -char temp_test(void) -{ - bool irq_flag=0; - while(send_temp_data_flag) - { - while(gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==1&&send_temp_data_flag)//等待HR_INT变低 - { - //vcHr02IRQHandler(); - co_delay_100us(10); - uart0_receive();//串口0接收数据处理 - irq_flag = 1; - } - while((gpio_get_pin_value(GPIO_PORT_C, GPIO_BIT_7)==0)&&irq_flag&&send_temp_data_flag)//等待HR_INT变高 //高电平获取数据 - { - vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1); - uart0_receive();//串口0接收数据处理 - irq_flag = 0; - } - } - return send_temp_data_flag; -} -#endif + + void gsensor_test(void) { @@ -786,36 +737,23 @@ void gsensor_test(void) "{\"cmd\":\"2\",\"gsensor_data\":\"%d,%d,%d\"}", sl_x_dat[0],sl_y_dat[0],sl_z_dat[0]); uart0_write_for_hci(UART_send_buf,UART_send_buf_len,NULL, NULL); - // for(uint8_t i=0;i<5;i++)//转码 - // { - // uintTOstr(sl_x_dat[i]); - // uart_putc_noint(UART0,str_high); - // uart_putc_noint(UART0,str_low); - // } - // uart_putc_noint(UART0,'/'); - // for(uint8_t i=0;i<5;i++)//转码 - // { - // uintTOstr(sl_y_dat[i]); - // uart_putc_noint(UART0,str_high); - // uart_putc_noint(UART0,str_low); - // } - // uart_putc_noint(UART0,'/'); - // for(uint8_t i=0;i<5;i++)//转码 - // { - // uintTOstr(sl_z_dat[i]); - // uart_putc_noint(UART0,str_high); - // uart_putc_noint(UART0,str_low); - // } - // uart0_write_for_hci(uart0_residue_data, 3, NULL, NULL); - + } void BP_open(void)//血压 { + user_i2c1_init(); + system_set_port_mux(GPIO_PORT_D, GPIO_BIT_5, PORTD5_FUNC_D5); + gpio_set_dir(GPIO_PORT_D, GPIO_BIT_5, GPIO_DIR_IN); + system_set_port_pull(GPIO_PD5, true); //设置上拉 + //gpio_set_pin_value(GPIO_PORT_D, GPIO_BIT_5, 1); //血压中断 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 1); //血压使能 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 0); //心率失能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(1), 1); //血压使能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1); //心率失能 + + //pmu_port_wakeup_func_set(GPIO_PD5);//使能血压中断 + pmu_port_wakeup_func_clear(GPIO_PC7);//使能心率中断 co_delay_100us(5000); IIC1_Start_I2c(); IIC1_Write_One_Byte(0x0A); @@ -827,12 +765,15 @@ void BP_open(void)//血压 send_bp_data_flag = 1; read_BP_data_len =0; co_printf(" BP_open \n"); + user_event_send(USER_EVT_OPEN_BP, NULL, NULL); + } void EMO_open(void)//情绪 { - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 1); //血压使能 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 0); //心率失能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(1), 1); //血压使能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1); //心率失能 + //pmu_port_wakeup_func_set(GPIO_PD5);//使能 co_delay_100us(5000); IIC1_Start_I2c(); IIC1_Write_One_Byte(0x0A); @@ -860,12 +801,26 @@ void EMO_open(void)//情绪 co_printf(" EMO_open \n"); } +static os_timer_t YYL_timer = {0}; +void YYL_timer_handle(void *arg)//1分钟开始一次 +{ + if(send_yyl_data_flag == 0) + { + co_printf(" YYL_timer_handle return \n"); + return; + } + yyl_close_flag = 0; + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1); //心率使能 + pInit_Param.work_mode = WORK_MODE_HRV; + vc9202_usr_init(&pInit_Param); + yyl_in_data_len = 0; +} void YYL_open(void)//中医 { - - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 1); //心率使能 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 - //pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 + yyl_close_flag = 0; + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1); //心率使能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(1), 0); //血压使能 + pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 pInit_Param.work_mode = WORK_MODE_HRV; vc9202_usr_init(&pInit_Param); if(HA_BUF != NULL) @@ -876,15 +831,23 @@ void YYL_open(void)//中医 HA_BUF = os_malloc(HA_BUF_LEN); if(HA_BUF == NULL) { - while(1) - { - co_printf(" YYL_open malloc error!!!!!\n"); - co_delay_10us(100*1000); - } + // while(1) + // { + co_printf(" YYL_open malloc error!!!!!\n"); + // co_delay_10us(100*1000); + // } } YYL_Init_PFE( HA_BUF, HA_BUF_LEN);//中医初始化 send_yyl_data_flag = 1; + if(YYL_timer.timer_id == 0) + { + os_timer_init(&YYL_timer, YYL_timer_handle, NULL); + os_timer_start(&YYL_timer, 60*1000, true); + } + co_printf(" YYL_open \n"); + + yyl_in_data_len = 0; //init_algorithm(HA_BUF, sizeof(HA_BUF)); } @@ -892,9 +855,9 @@ void YYL_open(void)//中医 void HRS_open(void)//心率 { - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 1); //心率使能 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 - //pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1); //心率使能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(1), 0); //血压使能 + pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 pInit_Param.work_mode = WORK_MODE_HR; vc9202_usr_init(&pInit_Param); send_hrs_data_flag = 1; @@ -905,9 +868,9 @@ void HRS_open(void)//心率 void SPO2_open(void)//血氧 { - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 1); //心率使能 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 - //pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1); //心率使能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(1), 0); //血压使能 + pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 pInit_Param.work_mode = WORK_MODE_SPO2; vc9202_usr_init(&pInit_Param); send_spo2_data_flag = 1; @@ -918,9 +881,9 @@ void SPO2_open(void)//血氧 void temp_open(void) { - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 1); //心率使能 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 - //pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1); //心率使能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(1), 0); //血压使能 + pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 pInit_Param.work_mode = WORK_MODE_WEAR; // WORK_MODE_TEMPERATURE; vc9202_usr_init(&pInit_Param); send_temp_data_flag = 1; @@ -930,9 +893,9 @@ void temp_open(void) void wear_open(void)//佩戴 { - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 1); //心率使能 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 - //pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1); //心率使能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(1), 0); //血压使能 + pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 pInit_Param.work_mode = WORK_MODE_WEAR; vc9202_usr_init(&pInit_Param); send_wear_data_flag = 1; @@ -943,9 +906,9 @@ void wear_open(void)//佩戴 void factory_open(void)//工厂模式 { - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 1); //心率使能 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 - //pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1); //心率使能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(1), 0); //血压使能 + pmu_port_wakeup_func_set(GPIO_PC7);//使能心率中断 pInit_Param.work_mode = WORK_MODE_FACTORY; vc9202_usr_init(&pInit_Param); send_factory_data_flag = 1; @@ -953,6 +916,10 @@ void factory_open(void)//工厂模式 //vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1); } +void OTA_open(void) +{ + simple_peripheral_init();//蓝牙初始化 +} void sensor_close(void) { pInit_Param.work_mode = WORK_MODE_NONE; @@ -967,49 +934,58 @@ void sensor_close(void) send_sleep_data_flag=0;//发送sleep数据标致位 send_step_data_flag=0;//发送step数据标致位 send_wear_data_flag=0;//发送wear数据标致位 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 0); //心率使能 低电平 - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 0); //心率使能 低电平 + pmu_set_gpio_value(GPIO_PORT_A, BIT(1), 0); //血压使能 pmu_port_wakeup_func_clear(GPIO_PC7);//失能中断GPIO中断 + pmu_port_wakeup_func_clear(GPIO_PD5);//失能中断GPIO中断 if(HA_BUF != NULL) { os_free(HA_BUF); HA_BUF = NULL; } + if(YYL_timer.timer_id != 0) + os_timer_stop(&YYL_timer); co_printf(" sensor_close \n"); } + void sensor_while(void) { uart0_receive(); //factory_open(); - //if(HR_IRQ_FLAG == 1) +#if VC9202_OPEN_IRQ + if(USER_IRQ_FLAG == 1) { - //co_printf("sensor_while:HR_IRQ_FLAG:%d BP_IRQ_FLAG:%d\n",HR_IRQ_FLAG,BP_IRQ_FLAG); - //HR_IRQ_FLAG = 0; - /////////////////////心率测量///////////////////////////// - HRS_test(); - // /////////////////////心率变异性测量///////////////////////////// - HRV_test(); - // /////////////////////血氧测量///////////////////////////// - SPO2_test(); - // /////////////////////中医测量///////////////////////////// - YYL_test(); - // /////////////////////佩戴模式模式///////////////////////////// - wear_test(); - // /////////////////////工厂模式///////////////////////////// - factory_test(); - - temp_test(); + USER_IRQ_FLAG = 0; + vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1); + //system_sleep_enable(); } +#else + /////////////////////心率测量///////////////////////////// + HRS_test(); + // /////////////////////心率变异性测量///////////////////////////// + HRV_test(); + // /////////////////////血氧测量///////////////////////////// + SPO2_test(); + // /////////////////////中医测量///////////////////////////// + YYL_test(); + // /////////////////////佩戴模式模式///////////////////////////// + wear_test(); + // /////////////////////工厂模式///////////////////////////// + factory_test(); + + temp_test(); +#endif + //if(BP_IRQ_FLAG == 1) { - //co_printf("sensor_while:HR_IRQ_FLAG:%d BP_IRQ_FLAG:%d\n",HR_IRQ_FLAG,BP_IRQ_FLAG); - //BP_IRQ_FLAG = 0; + //co_printf("sensor_while:USER_IRQ_FLAG:%d BP_IRQ_FLAG:%d\r\n",USER_IRQ_FLAG,BP_IRQ_FLAG); + BP_IRQ_FLAG = 0; EMO_test(); BP_test(); } - YYL_test_timer(); + //YYL_test_timer(); // pmu_port_wakeup_func_set(GPIO_PC7|GPIO_PD4|GPIO_PD5|GPIO_PD6|GPIO_PD7);//GPIO中断 // NVIC_EnableIRQ(PMU_IRQn); @@ -1017,10 +993,10 @@ void sensor_while(void) //产生中断,告诉上位机有数据 void sensor_INT(void) { - gpio_set_pin_value(GPIO_PORT_D, GPIO_BIT_6, 1); - co_delay_100us(2); - gpio_set_pin_value(GPIO_PORT_D, GPIO_BIT_6, 0); //中断信号使能 低电平 - co_delay_100us(2); + // gpio_set_pin_value(GPIO_PORT_D, GPIO_BIT_6, 1); + // co_delay_100us(2); + // gpio_set_pin_value(GPIO_PORT_D, GPIO_BIT_6, 0); //中断信号使能 低电平 + // co_delay_100us(2); } void sensor_init(void) { @@ -1039,39 +1015,61 @@ void sensor_init(void) //BP_INT = PD5 //血压中断 //4G_INT0 = PD6 //4G中断0 //4G_INT1 = PD7 //4G中断1 - pmu_set_aldo_voltage(PMU_ALDO_MODE_NORMAL,PMU_ALDO_VOL_3_3); //设置内部LDO输出电压 - - system_set_port_mux(GPIO_PORT_D, GPIO_BIT_6, PORTD0_FUNC_D0); - gpio_set_dir(GPIO_PORT_D, GPIO_BIT_6, GPIO_DIR_OUT); - gpio_set_pin_value(GPIO_PORT_D, GPIO_BIT_6, 0); //中断信号使能 低电平 - - system_set_port_mux(GPIO_PORT_A, GPIO_BIT_0, PORTA0_FUNC_A0); - gpio_set_dir(GPIO_PORT_A, GPIO_BIT_0, GPIO_DIR_OUT); - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 0); //心率使能 低电平 - - - system_set_port_mux(GPIO_PORT_A, GPIO_BIT_1, PORTA1_FUNC_A1); - gpio_set_dir(GPIO_PORT_A, GPIO_BIT_1, GPIO_DIR_OUT); - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 - - system_set_port_pull((GPIO_PA0 | GPIO_PA1), true); //设置上拉 - - system_set_port_mux(GPIO_PORT_D, GPIO_BIT_5, PORTD5_FUNC_D5); - gpio_set_dir(GPIO_PORT_D, GPIO_BIT_5, GPIO_DIR_IN); - system_set_port_pull(GPIO_PD5, true); //设置上拉 - gpio_set_pin_value(GPIO_PORT_D, GPIO_BIT_5, 1); //血压中断 - + pmu_set_aldo_voltage(PMU_ALDO_MODE_NORMAL,PMU_ALDO_VOL_2_1); //设置内部LDO输出电压 + + // system_set_port_mux(GPIO_PORT_D, GPIO_BIT_6, PORTD0_FUNC_D0); + // pmu_set_pin_to_PMU(GPIO_PORT_D, BIT(6) ); + // pmu_set_pin_pull(GPIO_PORT_D, BIT(6) , false); + // pmu_set_pin_dir(GPIO_PORT_D, BIT(6), GPIO_DIR_OUT); + // pmu_set_gpio_value(GPIO_PORT_D, BIT(6), 0);//中断信号使能 低电平 + //4G读数据中断 + // pmu_set_port_mux(GPIO_PORT_D, GPIO_BIT_6, PMU_PORT_MUX_GPIO); + // pmu_set_pin_to_PMU(GPIO_PORT_D, BIT(6)); + // pmu_set_pin_dir(GPIO_PORT_D, BIT(6), GPIO_DIR_IN); + // pmu_port_wakeup_func_set(GPIO_PD6);//GPIO中断 + //4G读数据中断 + pmu_set_port_mux(GPIO_PORT_D, GPIO_BIT_7, PMU_PORT_MUX_GPIO); + pmu_set_pin_to_PMU(GPIO_PORT_D, BIT(7)); + pmu_set_pin_dir(GPIO_PORT_D, BIT(7), GPIO_DIR_IN); + pmu_port_wakeup_func_set(GPIO_PD7);//GPIO中断 + //pmu_set_pin_pull(GPIO_PORT_D, BIT(5), true); + + pmu_set_port_mux(GPIO_PORT_A, GPIO_BIT_0, PMU_PORT_MUX_GPIO); + pmu_set_pin_to_PMU(GPIO_PORT_A, BIT(0) ); + pmu_set_pin_pull(GPIO_PORT_A, BIT(0) , false); + pmu_set_pin_dir(GPIO_PORT_A, BIT(0) , GPIO_DIR_OUT); + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 0);//心率使能 低电平 + - system_set_port_mux(GPIO_PORT_C, GPIO_BIT_7, PORTC7_FUNC_C7); - gpio_set_dir(GPIO_PORT_C, GPIO_BIT_7, GPIO_DIR_IN); - system_set_port_pull(GPIO_PC7, true); //设置上拉 - gpio_set_pin_value(GPIO_PORT_C, GPIO_BIT_7, 0); //心率中断 + pmu_set_port_mux(GPIO_PORT_A, GPIO_BIT_0, PMU_PORT_MUX_GPIO); + pmu_set_pin_to_PMU(GPIO_PORT_A, BIT(1) ); + pmu_set_pin_pull(GPIO_PORT_A, BIT(1) , false); + pmu_set_pin_dir(GPIO_PORT_A, BIT(1) , GPIO_DIR_OUT); + pmu_set_gpio_value(GPIO_PORT_A, BIT(1) , 0);//血压使能 - pmu_set_pin_pull(GPIO_PORT_C,BIT(7),true);//上拉//心率中断 - pmu_set_pin_pull(GPIO_PORT_D,BIT(4),true);//上拉// 三轴地磁传感器中断 - pmu_set_pin_pull(GPIO_PORT_D,BIT(5),true);//上拉//血压中断 - pmu_set_pin_pull(GPIO_PORT_D,BIT(6),true);//上拉 //4G中断0 - pmu_set_pin_pull(GPIO_PORT_D,BIT(7),true);//上拉 //4G中断1 + + // system_set_port_mux(GPIO_PORT_D, GPIO_BIT_5, PORTD5_FUNC_D5); + // gpio_set_dir(GPIO_PORT_D, GPIO_BIT_5, GPIO_DIR_IN); + // system_set_port_pull(GPIO_PD5, true); //设置上拉 + // gpio_set_pin_value(GPIO_PORT_D, GPIO_BIT_5, 1); //血压中断 + + //血压中断 + // pmu_set_port_mux(GPIO_PORT_D, GPIO_BIT_5, PMU_PORT_MUX_GPIO); + // pmu_set_pin_to_PMU(GPIO_PORT_D, BIT(5)); + // pmu_set_pin_dir(GPIO_PORT_D, BIT(5), GPIO_DIR_IN); + //pmu_set_pin_pull(GPIO_PORT_D, BIT(5), true); + + //心率中断 + pmu_set_port_mux(GPIO_PORT_C, GPIO_BIT_7, PMU_PORT_MUX_GPIO); + pmu_set_pin_to_PMU(GPIO_PORT_C, BIT(7)); + pmu_set_pin_dir(GPIO_PORT_C, BIT(7), GPIO_DIR_IN); + //pmu_set_pin_pull(GPIO_PORT_C, BIT(7), true); + + //pmu_set_pin_pull(GPIO_PORT_C,BIT(7),true);//上拉//心率中断 + //pmu_set_pin_pull(GPIO_PORT_D,BIT(4),true);//上拉// 三轴地磁传感器中断 + //pmu_set_pin_pull(GPIO_PORT_D,BIT(5),true);//上拉//血压中断 + //pmu_set_pin_pull(GPIO_PORT_D,BIT(6),true);//上拉 //4G中断0 + //pmu_set_pin_pull(GPIO_PORT_D,BIT(7),true);//上拉 //4G中断1 //pmu_port_wakeup_func_set(GPIO_PC7|GPIO_PD4|GPIO_PD5|GPIO_PD6|GPIO_PD7);//GPIO中断 //pmu_port_wakeup_func_set(GPIO_PC7|GPIO_PD4|GPIO_PD6|GPIO_PD7);//GPIO中断 NVIC_EnableIRQ(PMU_IRQn); @@ -1086,7 +1084,11 @@ void sensor_init(void) get_tp_data(); gsensor_init();//gsensor初始化 + //测试代码 + //OTA_open();//OTA升级 //wear_open();//佩戴 //YYL_open();//中医 - //SPO2_open(); + //BP_open(); } + + diff --git a/1.doc/K18/BLE_Watch/code/sensor_drive.h b/1.doc/K18/BLE_Watch/code/sensor_drive.h index 05da1447..252d8fca 100644 --- a/1.doc/K18/BLE_Watch/code/sensor_drive.h +++ b/1.doc/K18/BLE_Watch/code/sensor_drive.h @@ -5,6 +5,7 @@ // #define PPG_BUF_LEN 60*100 // extern char ppg_buf[PPG_BUF_LEN]; // extern int ppg_buf_len ; +#define YYL_PPG_TEST_LEN 2000 //中医一分钟测试数据量 typedef enum { UART0_EVEN=0,//串口数据处理 @@ -12,6 +13,7 @@ typedef enum BP_IRQ ,//血压中断 }SENSOR_IRQ; + extern int yyl_in_data_len; int task_sensor_evn(os_event_t *param); void BP_open(void);//血压 @@ -42,4 +44,5 @@ void sensor_while(void); void sensor_INT(void); void YYL_out_data(void); void factory_open(void); +void OTA_open(void); #endif //_SENSOR_H diff --git a/1.doc/K18/BLE_Watch/code/user_task.c b/1.doc/K18/BLE_Watch/code/user_task.c index 7a235841..a6d695ba 100644 --- a/1.doc/K18/BLE_Watch/code/user_task.c +++ b/1.doc/K18/BLE_Watch/code/user_task.c @@ -6,48 +6,88 @@ #include "co_printf.h" #include "user_task.h" #include "button.h" - -uint16_t user_task_id; - +#include "vc9202_user.h" +#include "driver_system.h" +#include "uart.h" +#include "sensor_drive.h" +uint16_t user_task_id = 0; +extern int uart0_data_len ; +extern char uart0_flag; +extern unsigned char USER_IRQ_FLAG; static int user_task_func(os_event_t *param) { - switch(param->event_id) + static int USER_IRQ_count = 0; + switch (param->event_id) { - case USER_EVT_BUTTON: + case USER_IRQ: + // + USER_IRQ_count++; + co_delay_10us(1); + if(USER_IRQ_count > 50)//等待1.5ms再处理数据 { - struct button_msg_t *button_msg; - const char *button_type_str[] = { - "BUTTON_PRESSED", - "BUTTON_RELEASED", - "BUTTON_SHORT_PRESSED", - "BUTTON_MULTI_PRESSED", - "BUTTON_LONG_PRESSED", - "BUTTON_LONG_PRESSING", - "BUTTON_LONG_RELEASED", - "BUTTON_LONG_LONG_PRESSED", - "BUTTON_LONG_LONG_RELEASED", - "BUTTON_COMB_PRESSED", - "BUTTON_COMB_RELEASED", - "BUTTON_COMB_SHORT_PRESSED", - "BUTTON_COMB_LONG_PRESSED", - "BUTTON_COMB_LONG_PRESSING", - "BUTTON_COMB_LONG_RELEASED", - "BUTTON_COMB_LONG_LONG_PRESSED", - "BUTTON_COMB_LONG_LONG_RELEASED", - }; - - button_msg = (struct button_msg_t *)param->param; - - co_printf("KEY 0x%08x, TYPE %s.\r\n", button_msg->button_index, button_type_str[button_msg->button_type]); - } + //co_printf("USER_IRQ!!uart0_data_len:%d\r\n",uart0_data_len); + if(uart0_data_len > 0 ) + { + if(uart0_flag == 0 && USER_IRQ_count < 80000)//数据没接收完,等待数据接收完,最大等待800ms + { + user_event_send(USER_IRQ, NULL, NULL); + } + else + { + USER_IRQ_count = 0; + user_parse_data();//串口数据处理 + USER_IRQ_FLAG = 0; + system_sleep_enable();//睡眠 + } + + } + else + { + USER_IRQ_count = 0; + //co_printf("USER_HR_IRQ!!\r\n"); + vc9202_usr_interrupt_handler(SPORT_TYPE_NORMAL,1);//心率中断处理 + USER_IRQ_FLAG = 0; + system_sleep_enable();//睡眠 + } + + }else + user_event_send(USER_IRQ, NULL, NULL); + + break; + case USER_EVT_OPEN_BP: + BP_test(); break; - } + case USER_EVT_ENTER_SLEEP: - return EVT_CONSUMED; -} + + co_printf("enter sleep!!\r\n"); + system_sleep_enable(); + + // + break; + case USER_EVT_EXIT_SLEEP: + + + co_printf("exit sleep!!\r\n"); + break; + } + + return EVT_CONSUMED; +} void user_task_init(void) { user_task_id = os_task_create(user_task_func); } +void user_event_send(uint16_t event, uint8_t* p_data, uint16_t len) +{ + os_event_t user_event; + + user_event.event_id = event; + user_event.src_task_id = user_task_id; + user_event.param = p_data; + user_event.param_len = len; + if(user_task_id != 0) + os_msg_post(user_task_id, &user_event); +} diff --git a/1.doc/K18/BLE_Watch/code/user_task.h b/1.doc/K18/BLE_Watch/code/user_task.h index 333afde1..cdef99e9 100644 --- a/1.doc/K18/BLE_Watch/code/user_task.h +++ b/1.doc/K18/BLE_Watch/code/user_task.h @@ -2,13 +2,16 @@ #define _USER_TASK_H enum user_event_t { - USER_EVT_AT_COMMAND, - USER_EVT_BUTTON, + + USER_IRQ, + USER_EVT_OPEN_BP, + USER_EVT_ENTER_SLEEP, + USER_EVT_EXIT_SLEEP, }; extern uint16_t user_task_id; void user_task_init(void); - +void user_event_send(uint16_t event, uint8_t* p_data, uint16_t len); #endif // _USER_TASK_H diff --git a/1.doc/K18/BLE_Watch/components/driver/driver_timer.c b/1.doc/K18/BLE_Watch/components/driver/driver_timer.c index 1caf2438..cb636ef0 100644 --- a/1.doc/K18/BLE_Watch/components/driver/driver_timer.c +++ b/1.doc/K18/BLE_Watch/components/driver/driver_timer.c @@ -312,25 +312,17 @@ uint8_t timer_init(uint32_t timer_addr, uint32_t count_us, uint8_t run_mode) return true; } -unsigned int timer0_count = 0; -extern unsigned int timestamp_d; //秒的时间戳,需要配合RTC使用 -extern unsigned int uart0_timer;//判断主机是否在线的超时时间计数 -extern unsigned int yyl_timer; -extern unsigned int gsensor_timer_10ms; + + + __attribute__((weak)) __attribute__((section("ram_code"))) void timer0_isr_ram(void) { timer_clear_interrupt(TIMER0); - timer0_count++; - if(gsensor_timer_10ms < 10000000) - gsensor_timer_10ms++; - if(timer0_count > 100) - { - timer0_count=0; - timestamp_d++; - uart0_timer++; - yyl_timer++; + + + //co_printf("timer0_isr_ram:0\r\n"); - } + // } diff --git a/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvgui.Administrator b/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvgui.Administrator index 2274094b..2b7b5ab8 100644 --- a/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvgui.Administrator +++ b/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvgui.Administrator @@ -6,7 +6,7 @@
### uVision Project, (C) Keil Software
- H:\1.work\3.ASR\3.Z5\1.doc\K18\BLE_Watch\keil\VC9202 + H:\1.work\3.ASR\3.Z5\1.doc\K18\BLE_Watch\code @@ -15,7 +15,7 @@ 38003 Registers - 197 198 + 161 162 346 @@ -101,17 +101,17 @@ -1 - 141 - -164 - 1544 - 974 + 235 + 142 + 1417 + 963 0 - 556 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000400000003000000010000004D483A5C312E776F726B5C332E4153525C332E5A355C312E646F635C4B31385C424C455F57617463685C6B65696C5C5643393230325C7663393230325F6472697665725F746573746D6F64652E6300000000187663393230325F6472697665725F746573746D6F64652E6300000000C5D4F200FFFFFFFF3C483A5C312E776F726B5C332E4153525C332E5A355C312E646F635C4B31385C424C455F57617463685C636F64655C73656E736F725F64726976652E63000000000E73656E736F725F64726976652E6300000000FFDC7800FFFFFFFF42483A5C312E776F726B5C332E4153525C332E5A355C312E646F635C4B31385C424C455F57617463685C6B65696C5C5643393230325C7663393230325F757365722E63000000000D7663393230325F757365722E6300000000BECEA100FFFFFFFF34483A5C312E776F726B5C332E4153525C332E5A355C312E646F635C4B31385C424C455F57617463685C6B65696C5C756172742E630000000006756172742E6300000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FD000000FB00000000060000F1020000 + 60 + 010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000000000000 @@ -134,7 +134,7 @@ 16 - C5020000D70000006107000065010000 + F20200002D0100008E070000BB010000 @@ -150,7 +150,7 @@ 0 16 - 0300000066000000920100002C020000 + 03000000660000004A010000C3010000 16 @@ -170,7 +170,7 @@ 0 16 - 0300000066000000920100002C020000 + 03000000660000004A010000C3010000 16 @@ -450,7 +450,7 @@ 0 16 - 0300000066000000920100002C020000 + 03000000660000004A010000C3010000 16 @@ -470,7 +470,7 @@ 0 16 - 0300000066000000920100002C020000 + 03000000660000004A010000C3010000 16 @@ -490,7 +490,7 @@ 0 16 - 030000006002000099060000EE020000 + 03000000F7010000E804000085020000 16 @@ -530,7 +530,7 @@ 0 16 - 030000006002000099060000EE020000 + 03000000F7010000E804000085020000 16 @@ -1150,7 +1150,7 @@ 0 16 - 0300000066000000920100008C010000 + 03000000660000004A0100008A010000 16 @@ -1170,7 +1170,7 @@ 0 16 - 0300000060020000E8040000EE020000 + 03000000F7010000E804000085020000 16 @@ -1190,7 +1190,7 @@ 0 16 - 0300000060020000E8040000EE020000 + 03000000F7010000E804000085020000 16 @@ -1250,7 +1250,7 @@ 0 16 - 0300000060020000E8040000EE020000 + 03000000F7010000E804000085020000 16 @@ -1270,7 +1270,7 @@ 0 16 - 0300000060020000E8040000EE020000 + 03000000F7010000E804000085020000 16 @@ -1730,7 +1730,7 @@ 0 16 - 00000000070300009C0600001A030000 + 000000009E020000EB040000B1020000 16 @@ -1799,14 +1799,14 @@ 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C5020000D70000006107000065010000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C300000180004000000000000071060000D700000061070000AD020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF950100004F00000099010000450200000100000002000010040000000100000012FFFFFFD2040000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000D1010000D7000000660300002D020000000000004F00000095010000450200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000D10100009D020000610700003F030000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000450200009C06000049020000010000000100001004000000010000007FFDFFFF8C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000D101000031020000BC060000EF02000000000000490200009C060000070300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F20200002D0100008E070000BB010000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000009E0600002D0100008E07000003030000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF4D0100004F00000051010000DC010000010000000200001004000000010000006DFEFFFF4D030000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000FE0100002D0100004B03000081020000000000004F0000004D010000DC0100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000FE010000F30200008E07000095030000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000DC010000EB040000E0010000010000000100001004000000010000007FFDFFFF8C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000FE01000085020000E90600004303000000000000E0010000EB0400009E0200000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File 2946 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000E534C5F535741595F535441545553960000000000000014000E534C5F535741595F53544154555313534C5F444952454354494F4E5F5354415455530B534C5F44495354414E4345096D6573685F696E697412646563696D616C5F706F696E745F7365656E0D75617274315F6973725F72616D0F696E7465726E616C5F6D616C6C6F630648415F42554618737065616B65725F676174745F6164645F736572766963650D6F735F74696D65725F696E69740D706D755F6973725F72616D5F430E7379735F74696D65725F696E69740B636F6E6669675F666C616717534C5F5343374132305F4932635F5370695F5772697465117472616E73706172656E745F73746172740D6170705F61745F726563765F630D75617274305F6973725F72616D0A756172745F706172616D15766353706F72744D6F74696F6E416C676F496E69741273656E645F6872735F646174615F666C61670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000400020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000004000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000400000000000000000000000000000000000001000000010000009600000002002050000000000E534C5F535741595F535441545553960000000000000014000E534C5F535741595F53544154555313534C5F444952454354494F4E5F5354415455530B534C5F44495354414E4345096D6573685F696E697412646563696D616C5F706F696E745F7365656E0D75617274315F6973725F72616D0F696E7465726E616C5F6D616C6C6F630648415F42554618737065616B65725F676174745F6164645F736572766963650D6F735F74696D65725F696E69740D706D755F6973725F72616D5F430E7379735F74696D65725F696E69740B636F6E6669675F666C616717534C5F5343374132305F4932635F5370695F5772697465117472616E73706172656E745F73746172740D6170705F61745F726563765F630D75617274305F6973725F72616D0A756172745F706172616D15766353706F72744D6F74696F6E416C676F496E69741273656E645F6872735F646174615F666C61670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000004001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 976 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008626C655F6D6573689600000000000000010008626C655F6D657368000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008626C655F6D6573689600000000000000010008626C655F6D657368000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1857,49 +1857,4 @@ - - 1 - 0 - - 100 - 3 - - .\VC9202\vc9202_driver_testmode.c - 18 - 19 - 35 - 1 - - 0 - - - ..\code\sensor_drive.c - 3 - 193 - 210 - 1 - - 0 - - - .\VC9202\vc9202_user.c - 3 - 353 - 369 - 1 - - 0 - - - .\uart.c - 0 - 115 - 136 - 1 - - 0 - - - - diff --git a/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvopt b/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvopt index ebd4732b..e455bca3 100644 --- a/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvopt +++ b/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvopt @@ -283,6 +283,18 @@ 0 0 + + 1 + 10 + 1 + 0 + 0 + 0 + ..\code\user_task.c + user_task.c + 0 + 0 + @@ -293,7 +305,7 @@ 0 2 - 10 + 11 1 0 0 @@ -305,7 +317,7 @@ 2 - 11 + 12 2 0 0 @@ -325,7 +337,7 @@ 0 3 - 12 + 13 1 0 0 @@ -345,7 +357,7 @@ 0 4 - 13 + 14 1 0 0 @@ -357,7 +369,7 @@ 4 - 14 + 15 1 0 0 @@ -377,7 +389,7 @@ 0 5 - 15 + 16 4 0 0 @@ -389,7 +401,7 @@ 5 - 16 + 17 4 0 0 @@ -403,13 +415,13 @@ driver - 1 + 0 0 0 0 6 - 17 + 18 1 0 0 @@ -421,7 +433,7 @@ 6 - 18 + 19 1 0 0 @@ -433,7 +445,7 @@ 6 - 19 + 20 1 0 0 @@ -445,7 +457,7 @@ 6 - 20 + 21 1 0 0 @@ -457,7 +469,7 @@ 6 - 21 + 22 1 0 0 @@ -469,7 +481,7 @@ 6 - 22 + 23 1 0 0 @@ -481,7 +493,7 @@ 6 - 23 + 24 1 0 0 @@ -493,7 +505,7 @@ 6 - 24 + 25 1 0 0 @@ -505,7 +517,7 @@ 6 - 25 + 26 1 0 0 @@ -517,7 +529,7 @@ 6 - 26 + 27 1 0 0 @@ -529,7 +541,7 @@ 6 - 27 + 28 1 0 0 @@ -541,7 +553,7 @@ 6 - 28 + 29 1 0 0 @@ -561,7 +573,7 @@ 0 7 - 29 + 30 1 0 0 @@ -573,7 +585,7 @@ 7 - 30 + 31 5 0 0 @@ -593,7 +605,7 @@ 0 8 - 31 + 32 4 0 0 @@ -605,7 +617,7 @@ 8 - 32 + 33 4 0 0 @@ -617,7 +629,7 @@ 8 - 33 + 34 4 0 0 @@ -629,7 +641,7 @@ 8 - 34 + 35 4 0 0 @@ -641,7 +653,7 @@ 8 - 35 + 36 1 0 0 @@ -653,7 +665,7 @@ 8 - 36 + 37 1 0 0 @@ -665,7 +677,7 @@ 8 - 37 + 38 1 0 0 @@ -677,7 +689,7 @@ 8 - 38 + 39 1 0 0 @@ -689,7 +701,7 @@ 8 - 39 + 40 4 0 0 diff --git a/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvproj b/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvproj index deea2f95..f4468518 100644 --- a/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvproj +++ b/1.doc/K18/BLE_Watch/keil/BLE_Watch.uvproj @@ -467,6 +467,11 @@ 1 ..\components\ble\profiles\ble_ota\ota.c + + user_task.c + 1 + ..\code\user_task.c + diff --git a/1.doc/K18/BLE_Watch/keil/Imitate_IIC.c b/1.doc/K18/BLE_Watch/keil/Imitate_IIC.c index 981fbf36..773c3bfa 100644 --- a/1.doc/K18/BLE_Watch/keil/Imitate_IIC.c +++ b/1.doc/K18/BLE_Watch/keil/Imitate_IIC.c @@ -572,7 +572,7 @@ void user_i2c0_init(void) I2C_SDA_DIR_OUT_0; I2C_SDA_OUT_H_0; - co_printf("iic -> TP_GS \n"); + //co_printf("iic -> TP_GS \n"); //co_printf("PORTC dir:%x\r\n",gpio_portc_get_dir()); diff --git a/1.doc/K18/BLE_Watch/keil/VC9202/vc9202_driver.c b/1.doc/K18/BLE_Watch/keil/VC9202/vc9202_driver.c index f15c78d3..eacc75b6 100644 --- a/1.doc/K18/BLE_Watch/keil/VC9202/vc9202_driver.c +++ b/1.doc/K18/BLE_Watch/keil/VC9202/vc9202_driver.c @@ -1499,6 +1499,9 @@ unsigned char vc9202_drv_reg_init(InitParamTypeDef *pInit_Param) { dev9202_info.work_frequency = 100; dev9202_info.fifo_time = 200; + }else if(WORK_MODE_WEAR == dev9202_info.work_mode) + { + dev9202_info.fifo_time = 2000; } fifo_div = dev9202_info.fifo_time / (1000 / dev9202_info.work_frequency) - 1; clk_div = (20000 / dev9202_info.work_frequency) - 1; diff --git a/1.doc/K18/BLE_Watch/keil/VC9202/vc9202_user.c b/1.doc/K18/BLE_Watch/keil/VC9202/vc9202_user.c index f0986960..b3eabc06 100644 --- a/1.doc/K18/BLE_Watch/keil/VC9202/vc9202_user.c +++ b/1.doc/K18/BLE_Watch/keil/VC9202/vc9202_user.c @@ -30,6 +30,7 @@ static WorkModeTypeDef work_mode = WORK_MODE_NONE; AlgoCalcResultsTypeDef vc9202_alg_results = {0}; extern unsigned char *UART_send_buf; extern int UART_send_buf_len ; +extern InitParamTypeDef pInit_Param; /* 蓝牙发送原始数据接口 */ //extern void vc9202_debug_send_heart_rate_data( SamplingDataTypeDef* presult ,GsensorTypeDef* paxis, unsigned char heart_rate, unsigned char algo_mode, unsigned char ppgsize ); //extern void vc9202_debug_send_spo2_data( SamplingDataTypeDef* presult ,GsensorTypeDef* paxis, unsigned char spo2_val, unsigned char ppgsize ); @@ -207,26 +208,17 @@ void vcHr02PhyInit(void) /*------------------INSERT YOUR CODE HERE-----------------*/ system_set_port_mux(GPIO_PORT_A, GPIO_BIT_0, PORTA0_FUNC_A0); - gpio_set_dir(GPIO_PORT_A, GPIO_BIT_0, GPIO_DIR_OUT); - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_0, 1); //心率使能 - - - system_set_port_mux(GPIO_PORT_A, GPIO_BIT_1, PORTA1_FUNC_A1); - gpio_set_dir(GPIO_PORT_A, GPIO_BIT_1, GPIO_DIR_OUT); - gpio_set_pin_value(GPIO_PORT_A, GPIO_BIT_1, 0); //血压使能 //心率工作时血压要拉低 - - system_set_port_pull((GPIO_PA0 | GPIO_PA1), true); //设置上拉 - - system_set_port_mux(GPIO_PORT_D, GPIO_BIT_5, PORTD5_FUNC_D5); - gpio_set_dir(GPIO_PORT_D, GPIO_BIT_5, GPIO_DIR_IN); - system_set_port_pull(GPIO_PD5, true); //设置上拉 - gpio_set_pin_value(GPIO_PORT_D, GPIO_BIT_5, 0); //血压中断 - + pmu_set_pin_to_PMU(GPIO_PORT_A, BIT(0) ); + pmu_set_pin_pull(GPIO_PORT_A, BIT(0) , false); + pmu_set_pin_dir(GPIO_PORT_A, BIT(0) , GPIO_DIR_OUT); + pmu_set_gpio_value(GPIO_PORT_A, BIT(0), 1);//心率使能 低电平 + - system_set_port_mux(GPIO_PORT_C, GPIO_BIT_7, PORTC7_FUNC_C7); - gpio_set_dir(GPIO_PORT_C, GPIO_BIT_7, GPIO_DIR_IN); - system_set_port_pull(GPIO_PC7, true); //设置上拉 - gpio_set_pin_value(GPIO_PORT_C, GPIO_BIT_7, 1); //心率中断 + system_set_port_mux(GPIO_PORT_A, GPIO_BIT_0, PORTA0_FUNC_A0); + pmu_set_pin_to_PMU(GPIO_PORT_A, BIT(1) ); + pmu_set_pin_pull(GPIO_PORT_A, BIT(1) , false); + pmu_set_pin_dir(GPIO_PORT_A, BIT(1) , GPIO_DIR_OUT); + pmu_set_gpio_value(GPIO_PORT_A, BIT(1) , 0);//血压使能 @@ -387,10 +379,11 @@ static void get_gsensor_data( GsensorTypeDef *pGsensorParam, unsigned char *pgse pGsensorParam->effective_bits = 12; // stk8321_get_fifo_data(&gsensor_len, gsensor_buff); //unsigned char SC7A20_FIFO_NUM = 0; - if(gsensor_timer_10ms > 8)//最快80ms更新一次 + unsigned int system__time = system_get_curr_time(); + if(system__time - gsensor_timer_10ms > 8)//最快80ms更新一次 { SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_L_ALGO(); - gsensor_timer_10ms = 0; + gsensor_timer_10ms = system__time; } //co_printf("get_gsensor_data:gsensor_len:%d ppg_size:%d\r\n",gsensor_len,ppg_size); @@ -684,6 +677,7 @@ static short int alg_calculate_hrv_handler( short int last_hr_val, SamplingDataT return heart_rate_value; } unsigned int yyl_time = 0; +extern char yyl_close_flag ; void vc9202_usr_interrupt_handler( AlgoSportMode hr_alg_mode, unsigned char spo2_alg_mode ) { //unsigned char wear_status = WEAR_STA_NONE; @@ -759,7 +753,7 @@ void vc9202_usr_interrupt_handler( AlgoSportMode hr_alg_mode, unsigned char spo2 get_gsensor_data(&gsensor_data, &gsensor_size, ppg_size); //co_printf("WORK_MODE_HRV2\n"); vc9202_alg_results.hr_rate = alg_calculate_hrv_handler( vc9202_alg_results.hr_rate, &data, ppg_size, &gsensor_data, hr_alg_mode ); - if(yyl_in_data_len< 3000-1 && ppg_size != 0) + if(yyl_in_data_len< YYL_PPG_TEST_LEN-1 && ppg_size != 0) { if(yyl_in_data_len == 0) { @@ -784,11 +778,16 @@ void vc9202_usr_interrupt_handler( AlgoSportMode hr_alg_mode, unsigned char spo2 //if(data.ppg_data[i]) YYL_Input_PFE(&yyl_in_data,vc9202_alg_results.hr_rate); yyl_in_data_len++; - } //co_printf(" \n"); - //co_printf("WORK_MODE_HRV4 yyl_in_data_len:%d\n",yyl_in_data_len); + co_printf("WORK_MODE_HRV4 yyl_in_data_len:%d\n",yyl_in_data_len); + } + if(yyl_in_data_len >= YYL_PPG_TEST_LEN-1) //存满3000个关闭 + { + pInit_Param.work_mode = WORK_MODE_WEAR; + vc9202_usr_init(&pInit_Param); + yyl_close_flag = 1; } diff --git a/1.doc/K18/BLE_Watch/keil/feedback.txt b/1.doc/K18/BLE_Watch/keil/feedback.txt index 79ca3036..9f17fbda 100644 --- a/1.doc/K18/BLE_Watch/keil/feedback.txt +++ b/1.doc/K18/BLE_Watch/keil/feedback.txt @@ -1,4 +1,4 @@ -;## ARM Linker, 5060960: Last Updated: Sun Apr 07 15:04:04 2024 +;## ARM Linker, 5060960: Last Updated: Fri Apr 19 18:18:55 2024 ;VERSION 0.2 ;FILE acpower_add_doublefre.o acPower_add_doublefre_init <= USED 0 @@ -143,17 +143,12 @@ pmu_disable_irq <= USED 0 pmu_enable_charge <= USED 0 pmu_get_gpio_port_value <= USED 0 pmu_get_gpio_value <= USED 0 -pmu_port_wakeup_func_set <= USED 0 -pmu_set_gpio_value <= USED 0 pmu_set_led1_as_pwm <= USED 0 pmu_set_led1_value <= USED 0 pmu_set_led2_as_pwm <= USED 0 pmu_set_led2_value <= USED 0 pmu_set_lp_clk_src <= USED 0 -pmu_set_pin_dir <= USED 0 pmu_set_pin_to_CPU <= USED 0 -pmu_set_pin_to_PMU <= USED 0 -pmu_set_port_mux <= USED 0 ;FILE driver_pmu_qdec.o pmu_qdec_autorest_cnt_flag <= USED 0 pmu_qdec_init <= USED 0 @@ -174,7 +169,9 @@ __asm___14_driver_timer_c_89f15fa2____REVSH <= USED 0 __asm___14_driver_timer_c_89f15fa2____RRX <= USED 0 timer_get_current_value <= USED 0 timer_get_load_value <= USED 0 +timer_init <= USED 0 timer_reload <= USED 0 +timer_run <= USED 0 timer_set_load_value <= USED 0 timer_stop <= USED 0 ;FILE driver_uart.o @@ -317,6 +314,8 @@ l2cc_dbg_pdu_unpack <= USED 0 ;FILE l2cm.o ;FILE lib_hr.o amplitudevalue <= USED 0 +bubble <= USED 0 +change_sampling_rate_simplified <= USED 0 compute_bp_feature <= USED 0 convolution <= USED 0 corrcoef <= USED 0 @@ -329,21 +328,31 @@ get_emotion_pi <= USED 0 get_hr <= USED 0 get_pi <= USED 0 get_sleep_time <= USED 0 +ha_ismoving <= USED 0 +ha_iswarable <= USED 0 heart_rate <= USED 0 init_sleep_data <= USED 0 init_sleep_time <= USED 0 +insertsort <= USED 0 is_good_ppg <= USED 0 is_kpt <= USED 0 isperiodic <= USED 0 isppgsignal <= USED 0 load_bp_model <= USED 0 load_gen_info <= USED 0 +max_simplified <= USED 0 +mean <= USED 0 +meanfilter <= USED 0 +medianfilter <= USED 0 merge_sample_feature <= USED 0 moving_value <= USED 0 periodic_value <= USED 0 periodicvalue <= USED 0 +ppg_correction <= USED 0 +ppg_fearure_extractor_simplified <= USED 0 ppg_hrv_midvalue <= USED 0 ppg_keypoints_extractor_simplified <= USED 0 +ppg_midvalue <= USED 0 quicksort <= USED 0 version_get_number <= USED 0 version_get_string <= USED 0 @@ -839,11 +848,9 @@ os_msg_send <= USED 0 ke_task_delete <= USED 0 ke_task_saved_update <= USED 0 os_get_free_task_id_num <= USED 0 -os_get_free_task_type <= USED 0 -os_task_create <= USED 0 -os_task_create_x <= USED 0 os_task_delete <= USED 0 os_task_process_saved_msg <= USED 0 +os_user_loop_event_set <= USED 0 ;FILE os_timer.o ;FILE ota.o __asm___5_ota_c_56ada2da____REV16 <= USED 0 @@ -901,9 +908,11 @@ __asm___11_proj_main_c_30fea291____REVSH <= USED 0 __asm___11_proj_main_c_30fea291____RRX <= USED 0 ;FILE rwble_hl.o ;FILE sensor_drive.o +EMO_test <= USED 0 __asm___14_sensor_drive_c_eae9c459____REV16 <= USED 0 __asm___14_sensor_drive_c_eae9c459____REVSH <= USED 0 __asm___14_sensor_drive_c_eae9c459____RRX <= USED 0 +sensor_while <= USED 0 ;FILE sha256.o sha256_final <= USED 0 sha256_gatt_gen_auth_value <= USED 0 @@ -976,7 +985,7 @@ system_prevent_sleep_clear <= USED 0 system_prevent_sleep_set <= USED 0 system_set_rf_power <= USED 0 system_set_tx_power <= USED 0 -system_sleep_enable <= USED 0 +system_sleep_disable <= USED 0 val_to_str <= USED 0 ;FILE uart.o __asm___6_uart_c_57f9c24c____REV16 <= USED 0 @@ -988,13 +997,10 @@ ble_bond_clr_all_info <= USED 0 ble_bond_clr_info <= USED 0 ble_bond_get_bond_info <= USED 0 ble_bond_get_last_bond_idx <= USED 0 -;FILE user_mem.o -ke_free_user <= USED 0 -ke_get_mem_max_usage <= USED 0 -ke_malloc_user <= USED 0 -show_ke_malloc <= USED 0 -show_mem_list <= USED 0 -show_msg_list <= USED 0 +;FILE user_task.o +__asm___11_user_task_c_d5bb1f8c____REV16 <= USED 0 +__asm___11_user_task_c_d5bb1f8c____REVSH <= USED 0 +__asm___11_user_task_c_d5bb1f8c____RRX <= USED 0 ;FILE vc9202_driver.o vc9202_drv_electrostatic_death <= USED 0 vc9202_drv_get_chip_id <= USED 0 diff --git a/1.doc/K18/BLE_Watch/keil/uart.c b/1.doc/K18/BLE_Watch/keil/uart.c index 7d198070..71c8eb2f 100644 --- a/1.doc/K18/BLE_Watch/keil/uart.c +++ b/1.doc/K18/BLE_Watch/keil/uart.c @@ -15,12 +15,14 @@ char send_step_data_flag= 0;//step数据标致位 char send_wear_data_flag= 0;//wear数据标致位 uint8_t *uart0_rivce_data = NULL; //uint8_t uart0_rivce_data[UART_READ_MAX] ; -char *Versions = "20240316-v0.5.3.031624"; +char *Versions = "20240419-v0.5.3.031624"; int uart0_data_len =0; + +static int32_t system_curr_time = 0;//设置时间的时候保存的系统运行时间 unsigned int timestamp_d = 0; //秒的时间戳,需要配合RTC使用 unsigned int get_timestamp(void)//获取时间戳 { - return timestamp_d; + return timestamp_d+((system_get_curr_time()-system_curr_time)/1000);; } @@ -117,7 +119,7 @@ __attribute__((section("ram_code"))) void uart0_isr_ram(void) } } #include "vc9202_user.h" -unsigned int uart0_timer = 0; +//unsigned int uart0_timer = 0; extern uint8_t bp_data[100]; extern uint16_t bp_data_len ; extern AlgoCalcResultsTypeDef vc9202_alg_results; @@ -125,21 +127,25 @@ void uart0_receive(void) { //return ; - if(uart0_timer > 100)//100秒没数据,关闭测试 - { - uart0_timer = 0; - //sensor_close(); - co_printf("\nHost no response!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); - } + // if(uart0_timer > 100)//100秒没数据,关闭测试 + // { + // uart0_timer = 0; + // //sensor_close(); + // co_printf("\nHost no response!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); + // } if(uart0_flag == 0) { return ; } - - uart0_timer = 0;//有串口数据,说明主机在线 + user_parse_data(); +} +void user_parse_data(void) +{ + //uart0_timer = 0;// if(uart0_data_len >0) co_printf("uart_read:%s\n",uart0_rivce_data); + //return ; //co_printf("uart0_receive:%s\n",uart0_rivce_data); if(strstr((char *)uart0_rivce_data,"\"cmd\":\"1\""))//{"cmd":" { @@ -202,6 +208,10 @@ void uart0_receive(void) { uart0_write_for_hci("{\"cmd\":\"1\",\"work_mode\":\"1\"}\r\n", sizeof("{\"cmd\":\"1\",\"work_mode\":\"1\"}\r\n")-1, NULL, NULL); factory_open();//工厂模式 + }else if(strstr((char *)uart0_rivce_data,"\"OTA\""))//:"OTA"}//OTA:蓝牙OTA升级模式 + { + uart0_write_for_hci("{\"cmd\":\"1\",\"work_mode\":\"1\"}\r\n", sizeof("{\"cmd\":\"1\",\"work_mode\":\"1\"}\r\n")-1, NULL, NULL); + OTA_open();// } else if(strstr((char *)uart0_rivce_data,"\"close\""))//:"close"}//close:关闭所有测试,进入低功耗待机模式 { @@ -324,6 +334,7 @@ void uart0_receive(void) //co_printf("[CHENG]:send_wear_status=%d\r\n", vc9202_alg_results.wear_status); UART_send_buf_len = snprintf((char *)UART_send_buf,UART_SEND_MAX,"{\"cmd\":\"2\",\"wear_data\":\"%d\"}\n",vc9202_alg_results.wear_status); uart0_write_for_hci(UART_send_buf,UART_send_buf_len,NULL, NULL); + co_printf("%s",UART_send_buf); // memset(UART_send_buf,0,UART_SEND_MAX); // UART_send_buf_len = snprintf((char *)UART_send_buf,UART_SEND_MAX,"{\"cmd\":\"2\",\"wear_data\":\"%d\"}\n",wear); // uart0_write_for_hci(UART_send_buf,UART_send_buf_len,NULL, NULL); @@ -368,6 +379,7 @@ void uart0_receive(void) memset(data_tmp,0,sizeof(data_tmp)); memcpy(data_tmp,str_tmp,len_tmp); timestamp_d = atoi(data_tmp); + system_curr_time = system_get_curr_time(); co_printf("timestamp_d:%d\n",timestamp_d); UART_send_buf_len = snprintf((char *)UART_send_buf,UART_SEND_MAX,"{\"cmd\":\"3\",\"set_config\":\"1\"}\n"); diff --git a/1.doc/K18/BLE_Watch/keil/uart.h b/1.doc/K18/BLE_Watch/keil/uart.h index 69cbe936..442e0833 100644 --- a/1.doc/K18/BLE_Watch/keil/uart.h +++ b/1.doc/K18/BLE_Watch/keil/uart.h @@ -44,7 +44,7 @@ #include "DRIVER_FLASH.H" #define UART_SEND_MAX 1024 #define UART_READ_MAX 512 - +extern char *Versions; typedef struct { char config_flag; @@ -58,4 +58,5 @@ void uart0_receive(void); void uart0_send(void); extern void save_sys_config(void); unsigned int get_timestamp(void); +void user_parse_data(void); #endif