血压单片机代码
authorp15692025051 <846603105@qq.com>
Fri, 19 Apr 2024 10:23:58 +0000 (18:23 +0800)
committerp15692025051 <846603105@qq.com>
Fri, 19 Apr 2024 10:23:58 +0000 (18:23 +0800)
15 files changed:
1.doc/K18/BLE_Watch/code/proj_main.c
1.doc/K18/BLE_Watch/code/sensor_drive.c
1.doc/K18/BLE_Watch/code/sensor_drive.h
1.doc/K18/BLE_Watch/code/user_task.c
1.doc/K18/BLE_Watch/code/user_task.h
1.doc/K18/BLE_Watch/components/driver/driver_timer.c
1.doc/K18/BLE_Watch/keil/BLE_Watch.uvgui.Administrator
1.doc/K18/BLE_Watch/keil/BLE_Watch.uvopt
1.doc/K18/BLE_Watch/keil/BLE_Watch.uvproj
1.doc/K18/BLE_Watch/keil/Imitate_IIC.c
1.doc/K18/BLE_Watch/keil/VC9202/vc9202_driver.c
1.doc/K18/BLE_Watch/keil/VC9202/vc9202_user.c
1.doc/K18/BLE_Watch/keil/feedback.txt
1.doc/K18/BLE_Watch/keil/uart.c
1.doc/K18/BLE_Watch/keil/uart.h

index 501094b..1597515 100644 (file)
@@ -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();
 }
index 3971835..ed0cb6f 100644 (file)
@@ -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();
 }
+
+
index 05da144..252d8fc 100644 (file)
@@ -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
index 7a23584..a6d695b 100644 (file)
@@ -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);
+}
 
index 333afde..cdef99e 100644 (file)
@@ -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
 
index 1caf243..cb636ef 100644 (file)
@@ -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");
-    }
+    
     //
 }
 
index 2274094..2b7b5ab 100644 (file)
@@ -6,7 +6,7 @@
   <Header>### uVision Project, (C) Keil Software</Header>
 
   <PrjGuiSettings>
-    <LastAddFilePath>H:\1.work\3.ASR\3.Z5\1.doc\K18\BLE_Watch\keil\VC9202</LastAddFilePath>
+    <LastAddFilePath>H:\1.work\3.ASR\3.Z5\1.doc\K18\BLE_Watch\code</LastAddFilePath>
   </PrjGuiSettings>
 
   <ViewPool/>
@@ -15,7 +15,7 @@
     <View>
       <WinId>38003</WinId>
       <ViewName>Registers</ViewName>
-      <TableColWidths>197 198</TableColWidths>
+      <TableColWidths>161 162</TableColWidths>
     </View>
     <View>
       <WinId>346</WinId>
         <yPos>-1</yPos>
       </MaxPosition>
       <NormalPosition>
-        <Top>141</Top>
-        <Left>-164</Left>
-        <Right>1544</Right>
-        <Bottom>974</Bottom>
+        <Top>235</Top>
+        <Left>142</Left>
+        <Right>1417</Right>
+        <Bottom>963</Bottom>
       </NormalPosition>
     </WindowPosition>
     <MDIClientArea>
       <RegID>0</RegID>
       <MDITabState>
-        <Len>556</Len>
-        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000400000003000000010000004D483A5C312E776F726B5C332E4153525C332E5A355C312E646F635C4B31385C424C455F57617463685C6B65696C5C5643393230325C7663393230325F6472697665725F746573746D6F64652E6300000000187663393230325F6472697665725F746573746D6F64652E6300000000C5D4F200FFFFFFFF3C483A5C312E776F726B5C332E4153525C332E5A355C312E646F635C4B31385C424C455F57617463685C636F64655C73656E736F725F64726976652E63000000000E73656E736F725F64726976652E6300000000FFDC7800FFFFFFFF42483A5C312E776F726B5C332E4153525C332E5A355C312E646F635C4B31385C424C455F57617463685C6B65696C5C5643393230325C7663393230325F757365722E63000000000D7663393230325F757365722E6300000000BECEA100FFFFFFFF34483A5C312E776F726B5C332E4153525C332E5A355C312E646F635C4B31385C424C455F57617463685C6B65696C5C756172742E630000000006756172742E6300000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000FD000000FB00000000060000F1020000</Data>
+        <Len>60</Len>
+        <Data>010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000000000000</Data>
       </MDITabState>
     </MDIClientArea>
     <ViewEx>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>C5020000D70000006107000065010000</Data>
+          <Data>F20200002D0100008E070000BB010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000920100002C020000</Data>
+          <Data>03000000660000004A010000C3010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000920100002C020000</Data>
+          <Data>03000000660000004A010000C3010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000920100002C020000</Data>
+          <Data>03000000660000004A010000C3010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000920100002C020000</Data>
+          <Data>03000000660000004A010000C3010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000006002000099060000EE020000</Data>
+          <Data>03000000F7010000E804000085020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000006002000099060000EE020000</Data>
+          <Data>03000000F7010000E804000085020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000066000000920100008C010000</Data>
+          <Data>03000000660000004A0100008A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000060020000E8040000EE020000</Data>
+          <Data>03000000F7010000E804000085020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000060020000E8040000EE020000</Data>
+          <Data>03000000F7010000E804000085020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000060020000E8040000EE020000</Data>
+          <Data>03000000F7010000E804000085020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000060020000E8040000EE020000</Data>
+          <Data>03000000F7010000E804000085020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>00000000070300009C0600001A030000</Data>
+          <Data>000000009E020000EB040000B1020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
       </Window>
       <DockMan>
         <Len>3312</Len>
-        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C5020000D70000006107000065010000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C300000180004000000000000071060000D700000061070000AD020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF950100004F00000099010000450200000100000002000010040000000100000012FFFFFFD2040000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000D1010000D7000000660300002D020000000000004F00000095010000450200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000D10100009D020000610700003F030000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000450200009C06000049020000010000000100001004000000010000007FFDFFFF8C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000D101000031020000BC060000EF02000000000000490200009C060000070300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
+        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F20200002D0100008E070000BB010000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000009E0600002D0100008E07000003030000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF4D0100004F00000051010000DC010000010000000200001004000000010000006DFEFFFF4D030000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000FE0100002D0100004B03000081020000000000004F0000004D010000DC0100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000FE010000F30200008E07000095030000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000DC010000EB040000E0010000010000000100001004000000010000007FFDFFFF8C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000FE01000085020000E90600004303000000000000E0010000EB0400009E0200000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
       </DockMan>
       <ToolBar>
         <RegID>59392</RegID>
         <Name>File</Name>
         <Buttons>
           <Len>2946</Len>
-          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000E534C5F535741595F535441545553960000000000000014000E534C5F535741595F53544154555313534C5F444952454354494F4E5F5354415455530B534C5F44495354414E4345096D6573685F696E697412646563696D616C5F706F696E745F7365656E0D75617274315F6973725F72616D0F696E7465726E616C5F6D616C6C6F630648415F42554618737065616B65725F676174745F6164645F736572766963650D6F735F74696D65725F696E69740D706D755F6973725F72616D5F430E7379735F74696D65725F696E69740B636F6E6669675F666C616717534C5F5343374132305F4932635F5370695F5772697465117472616E73706172656E745F73746172740D6170705F61745F726563765F630D75617274305F6973725F72616D0A756172745F706172616D15766353706F72744D6F74696F6E416C676F496E69741273656E645F6872735F646174615F666C61670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
+          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000400020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000004000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000400000000000000000000000000000000000001000000010000009600000002002050000000000E534C5F535741595F535441545553960000000000000014000E534C5F535741595F53544154555313534C5F444952454354494F4E5F5354415455530B534C5F44495354414E4345096D6573685F696E697412646563696D616C5F706F696E745F7365656E0D75617274315F6973725F72616D0F696E7465726E616C5F6D616C6C6F630648415F42554618737065616B65725F676174745F6164645F736572766963650D6F735F74696D65725F696E69740D706D755F6973725F72616D5F430E7379735F74696D65725F696E69740B636F6E6669675F666C616717534C5F5343374132305F4932635F5370695F5772697465117472616E73706172656E745F73746172740D6170705F61745F726563765F630D75617274305F6973725F72616D0A756172745F706172616D15766353706F72744D6F74696F6E416C676F496E69741273656E645F6872735F646174615F666C61670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000004001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
         </Buttons>
         <OriginalItems>
           <Len>1423</Len>
         <Name>Build</Name>
         <Buttons>
           <Len>976</Len>
-          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008626C655F6D6573689600000000000000010008626C655F6D657368000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
+          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008626C655F6D6573689600000000000000010008626C655F6D657368000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
         </Buttons>
         <OriginalItems>
           <Len>583</Len>
         <Name>Debug</Name>
         <Buttons>
           <Len>2373</Len>
-          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
+          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
         </Buttons>
         <OriginalItems>
           <Len>898</Len>
     </ViewEx>
   </WinLayoutEx>
 
-  <MDIGroups>
-    <Orientation>1</Orientation>
-    <ActiveMDIGroup>0</ActiveMDIGroup>
-    <MDIGroup>
-      <Size>100</Size>
-      <ActiveTab>3</ActiveTab>
-      <Doc>
-        <Name>.\VC9202\vc9202_driver_testmode.c</Name>
-        <ColumnNumber>18</ColumnNumber>
-        <TopLine>19</TopLine>
-        <CurrentLine>35</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-      <Doc>
-        <Name>..\code\sensor_drive.c</Name>
-        <ColumnNumber>3</ColumnNumber>
-        <TopLine>193</TopLine>
-        <CurrentLine>210</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-      <Doc>
-        <Name>.\VC9202\vc9202_user.c</Name>
-        <ColumnNumber>3</ColumnNumber>
-        <TopLine>353</TopLine>
-        <CurrentLine>369</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-      <Doc>
-        <Name>.\uart.c</Name>
-        <ColumnNumber>0</ColumnNumber>
-        <TopLine>115</TopLine>
-        <CurrentLine>136</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-    </MDIGroup>
-  </MDIGroups>
-
 </ProjectGui>
index ebd4732..e455bca 100644 (file)
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>10</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\code\user_task.c</PathWithFileName>
+      <FilenameWithoutPath>user_task.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
   </Group>
 
   <Group>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>10</FileNumber>
+      <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>2</GroupNumber>
-      <FileNumber>11</FileNumber>
+      <FileNumber>12</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>3</GroupNumber>
-      <FileNumber>12</FileNumber>
+      <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>13</FileNumber>
+      <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>4</GroupNumber>
-      <FileNumber>14</FileNumber>
+      <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>15</FileNumber>
+      <FileNumber>16</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>5</GroupNumber>
-      <FileNumber>16</FileNumber>
+      <FileNumber>17</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
 
   <Group>
     <GroupName>driver</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>17</FileNumber>
+      <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>18</FileNumber>
+      <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>19</FileNumber>
+      <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>20</FileNumber>
+      <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>21</FileNumber>
+      <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>22</FileNumber>
+      <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>23</FileNumber>
+      <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>24</FileNumber>
+      <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>25</FileNumber>
+      <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>26</FileNumber>
+      <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>27</FileNumber>
+      <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>6</GroupNumber>
-      <FileNumber>28</FileNumber>
+      <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>29</FileNumber>
+      <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>7</GroupNumber>
-      <FileNumber>30</FileNumber>
+      <FileNumber>31</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     <RteFlg>0</RteFlg>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>31</FileNumber>
+      <FileNumber>32</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>32</FileNumber>
+      <FileNumber>33</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>33</FileNumber>
+      <FileNumber>34</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>34</FileNumber>
+      <FileNumber>35</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>35</FileNumber>
+      <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>36</FileNumber>
+      <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>37</FileNumber>
+      <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>38</FileNumber>
+      <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
     </File>
     <File>
       <GroupNumber>8</GroupNumber>
-      <FileNumber>39</FileNumber>
+      <FileNumber>40</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
index deea2f9..f446851 100644 (file)
               <FileType>1</FileType>
               <FilePath>..\components\ble\profiles\ble_ota\ota.c</FilePath>
             </File>
+            <File>
+              <FileName>user_task.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\code\user_task.c</FilePath>
+            </File>
           </Files>
         </Group>
         <Group>
index 981fbf3..773c3bf 100644 (file)
@@ -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());
index f15c78d..eacc75b 100644 (file)
@@ -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;
index f098696..b3eabc0 100644 (file)
@@ -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;
                                        }
                                        
                                        
index 79ca303..9f17fbd 100644 (file)
@@ -1,4 +1,4 @@
-;#<FEEDBACK># ARM Linker, 5060960: Last Updated: Sun Apr 07 15:04:04 2024
+;#<FEEDBACK># 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
index 7d19807..71c8eb2 100644 (file)
@@ -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");
index 69cbe93..442e083 100644 (file)
@@ -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