鼠标修改
authorp15692025051 <846603105@qq.com>
Mon, 11 Mar 2024 06:11:28 +0000 (14:11 +0800)
committerp15692025051 <846603105@qq.com>
Mon, 11 Mar 2024 06:11:28 +0000 (14:11 +0800)
30 files changed:
2.code/1.sdk/components/ble/profiles/ble_hid/hid_service.c
2.code/1.sdk/components/ble/profiles/ble_simple_profile/simple_gatt_service.c
2.code/1.sdk/components/ble/profiles/ble_simple_profile/simple_gatt_service.h
2.code/1.sdk/components/modules/audio_code_sbc/sbc.c
2.code/1.sdk/components/modules/audio_encode/audio_encoder.c
2.code/1.sdk/components/modules/os/include/os_mem.h
2.code/1.sdk/components/modules/platform/source/app_boot_vectors.s
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/alios_api.c
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/bizbus_common.h
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/cJSON.h [deleted file]
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/cJSON.lib [deleted file]
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/upay_lite.lib
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/upay_vendor.h
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/ble_simple_peripheral.c
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/ble_simple_peripheral.h
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/config.h
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/flash_usage_config.h
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/gpio.c
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/inflash.c
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/keyscan.c
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/proj_main.c
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/sensor.c
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/sensor.h
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/user_task.c
2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/user_task.h
2.code/1.sdk/examples/none_evm/ble_voice_mouse/keil/Output/config.json
2.code/1.sdk/examples/none_evm/ble_voice_mouse/keil/ble_voice_mouse.uvguix.Administrator
2.code/1.sdk/examples/none_evm/ble_voice_mouse/keil/ble_voice_mouse.uvoptx
2.code/1.sdk/examples/none_evm/ble_voice_mouse/keil/ble_voice_mouse.uvprojx
2.code/1.sdk/examples/none_evm/ble_voice_mouse/keil/feedback.txt

index 067aa43..c3d7392 100644 (file)
@@ -592,6 +592,7 @@ bool  caps_lock_status_get(void)
  */
 void hid_gatt_report_notify(uint8_t conidx, uint8_t rpt_info_id, uint8_t *p_data, uint16_t len)
 {
+    co_printf("hid_gatt_report_notify!!!!!!!!!\n");
     if (rpt_info_id < HID_NUM_REPORTS && hid_link_ntf_enable[conidx])
     {
         gatt_ntf_t ntf;
@@ -601,6 +602,7 @@ void hid_gatt_report_notify(uint8_t conidx, uint8_t rpt_info_id, uint8_t *p_data
         ntf.data_len = len;
         ntf.p_data = p_data;
         gatt_notification(ntf);
+        
     }
 }
 
index 38e174e..7083c61 100644 (file)
@@ -19,7 +19,7 @@
 #include "user_task.h"
 
 #include "simple_gatt_service.h"
-
+#include "bizbus_common.h"
 #include "timer.h"
 
 /*
@@ -45,11 +45,20 @@ uint8_t sp_char1_ccc[SP_CHAR1_CCC_LEN] = {0};
 
 // Characteristic 2 data 
 #define SP_CHAR2_VALUE_LEN  40
-uint8_t sp_char2_value[SP_CHAR2_VALUE_LEN] = {0};
+//uint8_t sp_char2_value[SP_CHAR2_VALUE_LEN] = {0};
 // Characteristic 2 client characteristic configuration
 #define SP_CHAR2_CCC_LEN   2
 uint8_t sp_char2_ccc[SP_CHAR2_CCC_LEN] = {0};
 
+#define SP_ALIAPP_VALUE_LEN  512
+//uint8_t sp_aliapp_value[SP_ALIAPP_VALUE_LEN] = {0};
+#define SP_ALIAPP_CCC_LEN   2
+uint8_t sp_aliapp_ccc[SP_ALIAPP_CCC_LEN] = {0};
+
+#define SP_HID_VALUE_LEN  40
+//uint8_t sp_aliapp_value[SP_ALIAPP_VALUE_LEN] = {0};
+#define SP_HID_CCC_LEN   2
+uint8_t sp_hid_ccc[SP_HID_CCC_LEN] = {0};
 /*
  * TYPEDEFS (ÀàÐͶ¨Òå)
  */
@@ -109,7 +118,8 @@ const gatt_attribute_t simple_profile_att_table[SP_IDX_NB] =
                                                     GATT_PROP_READ | GATT_PROP_WRITE,                           /* Permissions */
                                                     SP_CHAR1_CCC_LEN,                                           /* Max size of the value */
                                                     NULL,                                                       /* Value of the attribute */    /* Can assign a buffer here, or can be assigned in the application by user */
-                                                },                                                                                                                                     
+                                                },             
+                                                                                                                       
 
         // Characteristic 2 Declaration           
         [SP_IDX_CHAR2_DECLARATION]          =   {
@@ -132,7 +142,47 @@ const gatt_attribute_t simple_profile_att_table[SP_IDX_NB] =
                                                     GATT_PROP_READ | GATT_PROP_WRITE,                           /* Permissions */
                                                     SP_CHAR1_CCC_LEN,                                           /* Max size of the value */
                                                     NULL,                                                       /* Value of the attribute */    /* Can assign a buffer here, or can be assigned in the application by user */
-                                                },                                                                                                                                     
+                                                },     
+        //HIDÄ£ÄâͨµÀ,ÒòΪwindowsÓ¦ÓÃÈí¼þÎÞ·¨Ê¹Óñê×¼µÄhidͨµÀ£¬ËùÒÔ¼ÓÒ»¸öÄ£Äâ       
+        [SP_IDX_HID_DECLARATION]          =   {
+                                                    { UUID_SIZE_2, UUID16_ARR(GATT_CHARACTER_UUID) },           /* UUID */
+                                                    GATT_PROP_READ,                                             /* Permissions */
+                                                    0,                                                          /* Max size of the value */
+                                                    NULL,                                                       /* Value of the attribute */
+                                                },               
+        [SP_IDX_HID_VALUE]                =   {
+                                                    { UUID_SIZE_16, SP_HID_TX_RX_UUID },                      /* UUID */
+                                                    GATT_PROP_WRITE | GATT_PROP_NOTI,                           /* Permissions */
+                                                    SP_HID_VALUE_LEN,                                         /* Max size of the value */
+                                                    NULL,                                                       /* Value of the attribute */    /* Can assign a buffer here, or can be assigned in the application by user */
+                                                },        
+        [SP_IDX_HID_CFG]                  =   {
+                                                    { UUID_SIZE_2, UUID16_ARR(GATT_CLIENT_CHAR_CFG_UUID) },     /* UUID */
+                                                    GATT_PROP_READ | GATT_PROP_WRITE,                           /* Permissions */
+                                                    SP_HID_CCC_LEN,                                           /* Max size of the value */
+                                                    NULL,                                                       /* Value of the attribute */    /* Can assign a buffer here, or can be assigned in the application by user */
+                                                },     
+
+        // ali °¢Àïapp ¼øÈ¨×¨ÓÃͨµÀ                          
+        [SP_IDX_ALIAPP_DECLARATION]          =   {
+                                                    { UUID_SIZE_2, UUID16_ARR(GATT_CHARACTER_UUID) },           /* UUID */
+                                                    GATT_PROP_READ,                                             /* Permissions */
+                                                    0,                                                          /* Max size of the value */
+                                                    NULL,                                                       /* Value of the attribute */
+                                                },
+        [SP_IDX_ALIAPP_VALUE]                =   {
+                                                    { UUID_SIZE_16, SP_ALIAPP_TX_RX_UUID },                      /* UUID */
+                                                    GATT_PROP_WRITE | GATT_PROP_NOTI,                           /* Permissions */
+                                                    SP_ALIAPP_VALUE_LEN,                                         /* Max size of the value */
+                                                    NULL,                                                       /* Value of the attribute */    /* Can assign a buffer here, or can be assigned in the application by user */
+                                                },                
+        [SP_IDX_ALIAPP_CFG]                  =   {
+                                                    { UUID_SIZE_2, UUID16_ARR(GATT_CLIENT_CHAR_CFG_UUID) },     /* UUID */
+                                                    GATT_PROP_READ | GATT_PROP_WRITE,                           /* Permissions */
+                                                    SP_ALIAPP_CCC_LEN,                                           /* Max size of the value */
+                                                    NULL,                                                       /* Value of the attribute */    /* Can assign a buffer here, or can be assigned in the application by user */
+                                                },     
+                                                                                                                                                               
 };
 
 void ntf_data(uint8_t con_idx,uint8_t att_idx,uint8_t *data,uint16_t len)
@@ -189,6 +239,15 @@ static uint16_t sp_gatt_msg_handler(gatt_msg_t *p_msg)
                                        {
                         memcpy(p_msg->param.msg.p_msg_data, sp_char1_ccc, SP_CHAR1_CCC_LEN);
                         return SP_CHAR1_CCC_LEN;
+                                       }else if(p_msg->att_idx == SP_IDX_ALIAPP_CFG)
+                                       {
+                        memcpy(p_msg->param.msg.p_msg_data, sp_aliapp_ccc, SP_ALIAPP_CCC_LEN);
+                        co_printf("SP_IDX_ALIAPP_CFG:%s\n",sp_aliapp_ccc);
+                        return SP_ALIAPP_CCC_LEN;
+                                       }else if(p_msg->att_idx == SP_IDX_HID_CFG)
+                                       {
+                        memcpy(p_msg->param.msg.p_msg_data, sp_hid_ccc, SP_HID_CCC_LEN);
+                        return SP_HID_CCC_LEN;
                                        }
                     else if(p_msg->att_idx == SP_IDX_CHAR2_CFG)
                                        {
@@ -219,6 +278,16 @@ static uint16_t sp_gatt_msg_handler(gatt_msg_t *p_msg)
                         user_event_send(USER_EVT_BLE_RX, p_msg->param.msg.p_msg_data, p_msg->param.msg.msg_len);
                                                co_printf("char1_recv(att_idx:%d, handle:0x%02x): ", p_msg->att_idx, p_msg->handle);
                                                show_reg(p_msg->param.msg.p_msg_data,p_msg->param.msg.msg_len,1);
+                                       }else if (p_msg->att_idx == SP_IDX_ALIAPP_VALUE)
+                                       {
+                        user_event_send(USER_EVT_ALIAPP_RX, p_msg->param.msg.p_msg_data, p_msg->param.msg.msg_len);
+                                               co_printf("SP_IDX_ALIAPP_VALUE(att_idx:%d, handle:0x%02x): ", p_msg->att_idx, p_msg->handle);
+                                               show_reg(p_msg->param.msg.p_msg_data,p_msg->param.msg.msg_len,1);
+                                       }else if (p_msg->att_idx == SP_IDX_HID_VALUE)
+                                       {
+                        //user_event_send(USER_EVT_BLE_RX, p_msg->param.msg.p_msg_data, p_msg->param.msg.msg_len);
+                                               co_printf("hid_recv(att_idx:%d, handle:0x%02x): ", p_msg->att_idx, p_msg->handle);
+                                               show_reg(p_msg->param.msg.p_msg_data,p_msg->param.msg.msg_len,1);
                                        }
                     else if (p_msg->att_idx == SP_IDX_CHAR2_VALUE)
                                        {
@@ -252,6 +321,31 @@ static uint16_t sp_gatt_msg_handler(gatt_msg_t *p_msg)
                         {
                             ntf_char2_enable = 0;
                             co_printf("char2_ntf_disable\r\n");
+                        }
+                                       }else if (p_msg->att_idx == SP_IDX_HID_CFG)
+                                       {
+                        memcpy(sp_hid_ccc,p_msg->param.msg.p_msg_data,SP_HID_CCC_LEN);
+                                               if(p_msg->param.msg.p_msg_data[0] & 0x01)
+                        {
+                                                       
+                            co_printf("hid_ntf_enable\r\n");
+                        }
+                        else
+                        {
+                            co_printf("hid_ntf_disable\r\n");
+                        }
+                                       }else if (p_msg->att_idx == SP_IDX_ALIAPP_CFG)
+                                       {
+                        memcpy(sp_char2_ccc,p_msg->param.msg.p_msg_data,SP_ALIAPP_CCC_LEN);
+                                               if(p_msg->param.msg.p_msg_data[0] & 0x01)
+                        {
+                                                       
+                            co_printf("SP_IDX_ALIAPP_CFG\r\n");
+                        }
+                        else
+                        {
+                            
+                            co_printf("SP_IDX_ALIAPP_CFG\r\n");
                         }
                                        }
                                }
index eb12771..6bf9d18 100644 (file)
@@ -35,17 +35,27 @@ enum
     SP_IDX_CHAR1_VALUE,
        SP_IDX_CHAR1_CFG,
     
+
     SP_IDX_CHAR2_DECLARATION,
     SP_IDX_CHAR2_VALUE,
        SP_IDX_CHAR2_CFG,
-    
+    //HIDÄ£ÄâͨµÀ,ÒòΪwindowsÓ¦ÓÃÈí¼þÎÞ·¨Ê¹Óñê×¼µÄhidͨµÀ£¬ËùÒÔ¼ÓÒ»¸öÄ£Äâ
+    SP_IDX_HID_DECLARATION,
+    SP_IDX_HID_VALUE,
+       SP_IDX_HID_CFG,
+    //°¢Àï¼øÈ¨Í¨µÀ
+    SP_IDX_ALIAPP_DECLARATION,
+    SP_IDX_ALIAPP_VALUE,
+    SP_IDX_ALIAPP_CFG,
+
     SP_IDX_NB,
 };
 
 // Simple GATT Profile Service UUID
 #define SP_SVC_UUID              0xFFF1
-
-#define SP_CHAR1_TX_RX_UUID            {0xb8, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07}
+#define SP_HID_TX_RX_UUID               {0xb6, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb6, 0x83, 0x07}
+#define SP_ALIAPP_TX_RX_UUID           {0xb7, 0x4c, 0x19, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb7, 0x83, 0x07}
+#define SP_CHAR1_TX_RX_UUID            {0xb8, 0x4c, 0x19, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07}
 #define SP_CHAR2_TX_RX_UUID            {0xb9, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07}
 
 /*
index 6348ef4..22298b5 100644 (file)
@@ -535,7 +535,7 @@ int sbc_encode(sbc_t *sbc, const void *input, uint32_t input_len,
 
        if (!priv->init) {
                priv->frame.frequency = sbc->frequency;
-               priv->frame.allocation = sbc->allocation;
+               priv->frame.allocation = (int)sbc->allocation;
                priv->frame.subband_mode = sbc->subbands;
                priv->frame.subbands = sbc->subbands ? 8 : 4;
                priv->frame.block_mode = sbc->blocks;
index 45aeb50..58e10b2 100644 (file)
@@ -218,6 +218,7 @@ static int audio_encoder_next_frame_handler(struct pcm_data_t *pcm_data)
                                  &encoder_env.out_buffer[encoder_env.encode_write_pos],
                                  encoder_env.frame_size,
                                  &encoded_len);
+                                       co_printf("org_len:%d\n",org_len);
         }
         encoder_env.reserved_space -= encoder_env.frame_size;
         encoder_frame_out_func(&encoder_env.out_buffer[encoder_env.encode_write_pos],encoder_env.frame_size);
index 81b48a3..bd75179 100644 (file)
@@ -227,7 +227,7 @@ __STATIC __INLINE uint16_t os_get_free_heap_size(void)
 
 #endif
 
-
+#define USER_MEM_API_ENABLE 1
 /** @functions API for memory leakage debug,
  *   before call these functions, must define USER_MEM_API_ENABLE in your project Preprocessor Symbols.
  * @{
index 961af40..5e5824f 100644 (file)
 ; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 ; *
 ; *****************************************************************************/
+Heap_Size EQU 0x00000100
+                       AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
 
 ; <h> Stack Configuration
 ;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
@@ -159,7 +164,11 @@ Default_Handler PROC
                 EXPORT  ssp_isr_ram       [WEAK]
                 EXPORT  pdm_isr_ram       [WEAK]
                 EXPORT  uart0_isr_ram     [WEAK]
-                EXPORT  uart1_isr_ram     [WEAK]                                       
+                EXPORT  uart1_isr_ram     [WEAK]
+                                       IF      :DEF:__MICROLIB
+                                               EXPORT __heap_base
+                                               EXPORT  __heap_limit
+                                       ENDIF
 adc_isr
 ssp_isr_ram
 pdm_isr_ram
index bf50a05..b2e7878 100644 (file)
@@ -1,8 +1,15 @@
 #include "bizbus_common.h"
 #include "upay_vendor.h"
-//#include "os_mem.h"
-//#include "co_printf.h"
-//#include "stdarg.h"
+#include "flash_usage_config.h"
+#include "os_mem.h"
+#include "co_printf.h"
+#include "stdarg.h"
+#include "driver_flash.h"
+#include "stdlib.h"
+#include "driver_system.h"
+#include "ble_simple_peripheral.h"
+static int32_t ali_timestamp = 0;
+static int32_t system_curr_time = 0;//设置时间的时候保存的系统运行时间
 //安全数据API,需要一块单独大小为2.5K的区域存储,要求恢复出厂设置不能被清除、OTA不能被清除、常规烧录升级不能被清除
 /**
  * 安全数据写入,大小为2.5K,需要厂商实现
  */
 int32_t hal_flash_id2_write(uint32_t offset, void *data, uint32_t write_len)
 {
-    return 1;
+    co_printf("hal_flash_id2_write:offset:%d,data:%s,write_len:%d\n",offset,data,write_len);
+    flash_erase(ALI_DATA_ADDR+offset,write_len);
+    flash_write(ALI_DATA_ADDR+offset,write_len,(uint8_t *)data);
+    return 0;
 }
 
 /**
@@ -29,7 +39,10 @@ int32_t hal_flash_id2_write(uint32_t offset, void *data, uint32_t write_len)
  */
 int32_t hal_flash_id2_read(uint32_t offset, void *data, uint32_t read_len)
 {
-    return 1;
+    
+    flash_read(ALI_DATA_ADDR+offset,read_len,(uint8_t *)data);
+    co_printf("hal_flash_id2_read:offset:%d,data:%s,read_len:%d\n",ALI_DATA_ADDR+offset,data,read_len);
+    return 0;
 }
 /**
  * 安全数据擦除,大小为2.5K,需要厂商实现
@@ -42,26 +55,30 @@ int32_t hal_flash_id2_read(uint32_t offset, void *data, uint32_t read_len)
 
 int32_t hal_flash_id2_erase(uint32_t erase_offset,uint32_t earse_len)
 {
-    return 1;
+    co_printf("hal_flash_id2_erase:offset:%d,earse_len:%d\n",erase_offset,earse_len);
+    flash_erase(ALI_DATA_ADDR+erase_offset,earse_len);
+    return 0;
 }
 
 // hal 需要厂商实现,与APP SDK端的数据收发
 bizbus_ret_t bizbus_hal_send(char *sid, uint8_t *data, uint32_t data_len)
 {
-    bizbus_ret_t a;
-    return a;
-}
-bizbus_ret_t bizbus_hal_recv(uint8_t * data, uint32_t data_len)
-{
-    bizbus_ret_t a;
-    return a;
+    ble_aliapp_data_tx(data,data_len);
+    return BIZBUS_SUCCESS;
 }
+// bizbus_ret_t bizbus_hal_recv(uint8_t * data, uint32_t data_len)
+// {
+    
+//     return BIZBUS_SUCCESS;
+// }
 //厂商实现,设置ble 系统UTC时间
 bizbus_ret_t bizbus_set_time(uint8_t *time_str)
 {
-    bizbus_ret_t a;
-    return a;
+    ali_timestamp = atoi((char *)time_str);
+    system_curr_time =  system_get_curr_time();
+    return BIZBUS_SUCCESS;
 }
+//收到数据调用该函数
 // bizbus_ret_t bizbus_recv(uint8_t *json_string, uint32_t data_len)
 // {
 
@@ -83,11 +100,11 @@ bizbus_ret_t bizbus_set_time(uint8_t *time_str)
 
 void *aos_malloc(unsigned int size)
 {
-    return 0;//os_malloc(size);
+    return os_malloc(size);
 }
 void aos_free(void *mem)
 {
-    //os_free(mem);
+    os_free(mem);
 }
 int aos_kv_init(void)
 {
@@ -107,17 +124,17 @@ void aos_idt_pk_cfg(uint8_t *data)
 }
 void aos_printf(const char *fmt, ...)
 {
-    // va_list args;
-    // va_start(args,fmt);
-    // co_printf(fmt,args);
-    // va_end(args);
+    va_list args;
+    va_start(args,fmt);
+    co_printf(fmt,args);
+    va_end(args);
     //co_printf(fmt,##__VA_ARGS__);
 }
-//#define aos_printf(fmt, ...) co_printf(fmt,##__VA_ARGS__);
+//
 /*!!!!!!!!!!*/
 uint32_t upay_get_timestamp(void)
 {
-    return 1;
+    return ali_timestamp+((system_get_curr_time()-system_curr_time)/1000);
 }
 int upay_id2_check_status(uint8_t *id2_st)
 {
@@ -133,18 +150,18 @@ int32_t is_need_to_request_cert(void)
 }
 bizbus_ret_t bizbus_gtd_id2_init(void)
 {
-    bizbus_ret_t a;
-    return a;
+    
+    return BIZBUS_SUCCESS;
 }
 bizbus_ret_t bizbus_gtd_wear_init(void)
 {
-    bizbus_ret_t a;
-    return a;
+   
+    return BIZBUS_SUCCESS;
 }
 bizbus_ret_t bizbus_recv_gtd_hdl(uint8_t *data, uint32_t data_len)
 {
-    bizbus_ret_t a;
-    return a;
+    
+    return BIZBUS_SUCCESS;
 }
 void* ALIPAY_malloc(uint32_t size)
 {
@@ -159,5 +176,5 @@ void ALIPAY_free(void* pt)
 
 void* ALIPAY_realloc(void* pt, uint32_t size)
 {
-    return 0;//os_realloc(pt,size);
-}
\ No newline at end of file
+    return os_realloc(pt,size);
+}
index 41d1a33..6955ad2 100644 (file)
@@ -3,9 +3,10 @@
 #define _BIZBUS_HAL_H_
 
 #include <stdint.h>
-//#include <stdio.h>
+#include <stdio.h>
+#include <string.h>
 //#include <stdbool.h>
-
+//#define aos_printf(fmt, ...) co_printf(fmt,##__VA_ARGS__);
 typedef enum _bizbus_ret_t {
     BIZBUS_SUCCESS,
     BIZBUS_ERR_INIT_FAILED,
@@ -77,5 +78,5 @@ typedef int (* bizbus_pk_get_func)(char product_key[BIZBUS_PK_LEN + 1]);
 bizbus_ret_t bizbus_register_ds_get(bizbus_ds_get_func ds_get_func);
 bizbus_ret_t bizbus_register_dn_get(bizbus_dn_get_func dn_get_func);
 bizbus_ret_t bizbus_register_pk_get(bizbus_pk_get_func pk_get_func);
-
+bizbus_ret_t bizbus_recv(uint8_t *json_string, uint32_t data_len);
 #endif
diff --git a/2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/cJSON.h b/2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/cJSON.h
deleted file mode 100644 (file)
index e97e5f4..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
-  Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy
-  of this software and associated documentation files (the "Software"), to deal
-  in the Software without restriction, including without limitation the rights
-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-  copies of the Software, and to permit persons to whom the Software is
-  furnished to do so, subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be included in
-  all copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-  THE SOFTWARE.
-*/
-
-#ifndef cJSON__h
-#define cJSON__h
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32))
-#define __WINDOWS__
-#endif
-
-#ifdef __WINDOWS__
-
-/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a project with a different default calling convention.  For windows you have 3 define options:
-
-CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols
-CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default)
-CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol
-
-For *nix builds that support visibility attribute, you can define similar behavior by
-
-setting default visibility to hidden by adding
--fvisibility=hidden (for gcc)
-or
--xldscope=hidden (for sun cc)
-to CFLAGS
-
-then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does
-
-*/
-
-#define CJSON_CDECL __cdecl
-#define CJSON_STDCALL __stdcall
-
-/* export symbols by default, this is necessary for copy pasting the C and header file */
-#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS)
-#define CJSON_EXPORT_SYMBOLS
-#endif
-
-#if defined(CJSON_HIDE_SYMBOLS)
-#define CJSON_PUBLIC(type)   type CJSON_STDCALL
-#elif defined(CJSON_EXPORT_SYMBOLS)
-#define CJSON_PUBLIC(type)   __declspec(dllexport) type CJSON_STDCALL
-#elif defined(CJSON_IMPORT_SYMBOLS)
-#define CJSON_PUBLIC(type)   __declspec(dllimport) type CJSON_STDCALL
-#endif
-#else /* !__WINDOWS__ */
-#define CJSON_CDECL
-#define CJSON_STDCALL
-
-#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY)
-#define CJSON_PUBLIC(type)   __attribute__((visibility("default"))) type
-#else
-#define CJSON_PUBLIC(type) type
-#endif
-#endif
-
-/* project version */
-#define CJSON_VERSION_MAJOR 1
-#define CJSON_VERSION_MINOR 7
-#define CJSON_VERSION_PATCH 14
-
-#include <stddef.h>
-
-/* cJSON Types: */
-#define cJSON_Invalid (0)
-#define cJSON_False  (1 << 0)
-#define cJSON_True   (1 << 1)
-#define cJSON_NULL   (1 << 2)
-#define cJSON_Number (1 << 3)
-#define cJSON_String (1 << 4)
-#define cJSON_Array  (1 << 5)
-#define cJSON_Object (1 << 6)
-#define cJSON_Raw    (1 << 7) /* raw json */
-
-#define cJSON_IsReference 256
-#define cJSON_StringIsConst 512
-
-/* The cJSON structure: */
-typedef struct cJSON
-{
-    /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
-    struct cJSON *next;
-    struct cJSON *prev;
-    /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
-    struct cJSON *child;
-
-    /* The type of the item, as above. */
-    int type;
-
-    /* The item's string, if type==cJSON_String  and type == cJSON_Raw */
-    char *valuestring;
-    /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
-    int valueint;
-    /* The item's number, if type==cJSON_Number */
-    double valuedouble;
-
-    /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
-    char *string;
-} cJSON;
-
-typedef struct cJSON_Hooks
-{
-      /* malloc/free are CDECL on Windows regardless of the default calling convention of the compiler, so ensure the hooks allow passing those functions directly. */
-      void *(CJSON_CDECL *malloc_fn)(size_t sz);
-      void (CJSON_CDECL *free_fn)(void *ptr);
-} cJSON_Hooks;
-
-typedef int cJSON_bool;
-
-/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them.
- * This is to prevent stack overflows. */
-#ifndef CJSON_NESTING_LIMIT
-#define CJSON_NESTING_LIMIT 1000
-#endif
-
-/* returns the version of cJSON as a string */
-CJSON_PUBLIC(const char*) cJSON_Version(void);
-
-/* Supply malloc, realloc and free functions to cJSON */
-CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
-
-/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */
-/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */
-CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
-CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t buffer_length);
-/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
-/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */
-CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
-CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer_length, const char **return_parse_end, cJSON_bool require_null_terminated);
-
-/* Render a cJSON entity to text for transfer/storage. */
-CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
-/* Render a cJSON entity to text for transfer/storage without any formatting. */
-CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
-/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
-CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
-/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */
-/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */
-CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format);
-/* Delete a cJSON entity and all subentities. */
-CJSON_PUBLIC(void) cJSON_Delete(cJSON *item);
-
-/* Returns the number of items in an array (or object). */
-CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
-/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */
-CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
-/* Get item "string" from object. Case insensitive. */
-CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
-CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string);
-CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);
-/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
-CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
-
-/* Check item type and return its value */
-CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item);
-CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item);
-
-/* These functions check the type of an item */
-CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
-CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
-CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
-CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
-CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
-CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
-CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
-CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
-CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
-CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
-
-/* These calls create a cJSON item of the appropriate type. */
-CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
-CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
-CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
-CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
-CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
-CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
-/* raw json */
-CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
-CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
-CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
-
-/* Create a string where valuestring references a string so
- * it will not be freed by cJSON_Delete */
-CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string);
-/* Create an object/array that only references it's elements so
- * they will not be freed by cJSON_Delete */
-CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child);
-CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child);
-
-/* These utilities create an Array of count items.
- * The parameter count cannot be greater than the number of elements in the number array, otherwise array access will be out of bounds.*/
-CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
-CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
-CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);
-CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int count);
-
-/* Append item to the specified array/object. */
-CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);
-CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
-/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
- * WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
- * writing to `item->string` */
-CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
-/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
-CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
-CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
-
-/* Remove/Detach items from Arrays/Objects. */
-CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
-CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which);
-CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which);
-CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string);
-CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string);
-CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string);
-CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string);
-
-/* Update array items. */
-CJSON_PUBLIC(cJSON_bool) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
-CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement);
-CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
-CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
-CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem);
-
-/* Duplicate a cJSON item */
-CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
-/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
- * need to be released. With recurse!=0, it will duplicate any children connected to the item.
- * The item->next and ->prev pointers are always zero on return from Duplicate. */
-/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal.
- * case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */
-CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive);
-
-/* Minify a strings, remove blank characters(such as ' ', '\t', '\r', '\n') from strings.
- * The input pointer json cannot point to a read-only address area, such as a string constant, 
- * but should point to a readable and writable adress area. */
-CJSON_PUBLIC(void) cJSON_Minify(char *json);
-
-/* Helper functions for creating and adding items to an object at the same time.
- * They return the added item or NULL on failure. */
-CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
-CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
-CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
-CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
-CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
-CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);
-CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw);
-CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name);
-CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name);
-
-/* When assigning an integer value, it needs to be propagated to valuedouble too. */
-#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
-/* helper for the cJSON_SetNumberValue macro */
-CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
-#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number))
-/* Change the valuestring of a cJSON_String object, only takes effect when type of object is cJSON_String */
-CJSON_PUBLIC(char*) cJSON_SetValuestring(cJSON *object, const char *valuestring);
-
-/* Macro for iterating over an array or object */
-#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)
-
-/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */
-CJSON_PUBLIC(void *) cJSON_malloc(size_t size);
-CJSON_PUBLIC(void) cJSON_free(void *object);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/cJSON.lib b/2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/cJSON.lib
deleted file mode 100644 (file)
index bc2149a..0000000
Binary files a/2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/cJSON.lib and /dev/null differ
index 5ce23d2..1d17aa2 100644 (file)
Binary files a/2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/upay_lite.lib and b/2.code/1.sdk/examples/none_evm/ble_voice_mouse/code/alios/upay_lite/upay_lite.lib differ
index 73789ed..75103dd 100644 (file)
@@ -21,7 +21,7 @@
 
 //#include "upay_common.h"
 
-
+//#define aos_printf(fmt, ...) co_printf(fmt,##__VA_ARGS__);
 //安全数据API,需要一块单独大小为2.5K的区域存储,要求恢复出厂设置不能被清除、OTA不能被清除、常规烧录升级不能被清除
 /**
  * 安全数据写入,大小为2.5K,需要厂商实现
index 796e1b9..55c836e 100644 (file)
@@ -282,16 +282,18 @@ void sp_start_adv(void)
     }
     else
     {
-        gap_bond_info_t bond_info;
+               //gap_bond_manager_delete_all();
+        gap_bond_info_t bond_info={0};
+               co_printf("gap_bond_manager_get_info 1 !!!!!!!!\n");
         gap_bond_manager_get_info(0, &bond_info);
-        
+        co_printf("gap_bond_manager_get_info 2 bond_info.bond_flag:%d!!!!!!!!\n",bond_info.bond_flag);
         // Set advertising parameters
         gap_adv_param_t adv_param;
         adv_param.adv_mode = GAP_ADV_MODE_UNDIRECT;
         adv_param.adv_addr_type = GAP_ADDR_TYPE_PRIVATE;
         adv_param.adv_chnl_map = GAP_ADV_CHAN_ALL;
         adv_param.adv_filt_policy = GAP_ADV_ALLOW_SCAN_ANY_CON_ANY;
-        //adv_param.disc_mode = (bond_info.bond_flag == true) ? GAP_ADV_DISC_MODE_NON_DISC : GAP_ADV_DISC_MODE_GEN_DISC;
+        adv_param.disc_mode = (bond_info.bond_flag == true) ? GAP_ADV_DISC_MODE_NON_DISC : GAP_ADV_DISC_MODE_GEN_DISC;
         adv_param.adv_intv_min = MSEC_TO_UNITS(30, UNIT_0_625_MS);
         adv_param.adv_intv_max = MSEC_TO_UNITS(30, UNIT_0_625_MS);
 
@@ -304,7 +306,9 @@ void sp_start_adv(void)
         memcpy(&scan_rsp_data[2], name, ADV_NAME_BT1_LEN);
         
         // Set advertising data & scan response data
+               co_printf("gap_bond_manager_get_info 3 !!!!!!!!\n");
         gap_set_advertising_data(adv_data, (bond_info.bond_flag == true) ? (sizeof(adv_data) - 7) : sizeof(adv_data));
+               co_printf("gap_bond_manager_get_info 4 !!!!!!!!\n");
         gap_set_advertising_rsp_data(scan_rsp_data, ADV_NAME_BT1_LEN + 2);
         co_printf("%s\r\n", (bond_info.bond_flag == true) ? "Have bond info" : "Nothing bond info");
     }
@@ -390,11 +394,11 @@ void simple_peripheral_init(void)
        co_printf("Local MAC: %02X:%02X:%02X:%02X:%02X:%02X\r\n", addr.addr[5], addr.addr[4], addr.addr[3], addr.addr[2], addr.addr[1], addr.addr[0]);
 
        // Adding services to database
-       dis_gatt_add_service();
-       sp_gatt_add_service();
-       hid_gatt_add_service();
-       ota_gatt_add_service();
-       batt_gatt_add_service();
+       dis_gatt_add_service();//
+       sp_gatt_add_service();//¼Òô
+       hid_gatt_add_service();//hid
+       ota_gatt_add_service();//Éý¼¶
+       batt_gatt_add_service();//µç³Ø
 }
 
 void enable_latency(void)
@@ -418,17 +422,42 @@ void disable_latency(void)
        }
     smart_latency_cnt_reset();
 }
+//Ä£ÄâHID·¢ËÍ
+void ble_s_hid_data_tx(uint8_t * p_data, uint8_t len)
+{
+       //ntf_data(m_conn_index, SP_IDX_CHAR1_VALUE, p_data, len);
+    ntf_data(m_conn_index, SP_IDX_HID_VALUE, p_data, len);
+    disable_latency();
+    conn_sleep_cnt_reset();
+}
+#define aliapp_data_tx_one_len 150
+void ble_aliapp_data_tx(uint8_t * p_data, uint16_t len)
+{
+       //ntf_data(m_conn_index, SP_IDX_CHAR1_VALUE, p_data, len);
+       int count = len/aliapp_data_tx_one_len;
 
+       ntf_data(m_conn_index, SP_IDX_ALIAPP_VALUE, "-$$", strlen("-$$"));
+       for(int i=0;i<(count);i++)
+       {
+               ntf_data(m_conn_index, SP_IDX_ALIAPP_VALUE, p_data+i*aliapp_data_tx_one_len, aliapp_data_tx_one_len);
+       }
+       if(len%aliapp_data_tx_one_len)
+               ntf_data(m_conn_index, SP_IDX_ALIAPP_VALUE, p_data+(count)*aliapp_data_tx_one_len, (len-(count)*aliapp_data_tx_one_len));
+    ntf_data(m_conn_index, SP_IDX_ALIAPP_VALUE, "$$-\n", strlen("$$-\n"));
+    disable_latency();
+    conn_sleep_cnt_reset();
+}
 void ble_app_data_tx(uint8_t * p_data, uint8_t len)
 {
        ntf_data(m_conn_index, SP_IDX_CHAR1_VALUE, p_data, len);
-    
+    //ntf_data(m_conn_index, SP_IDX_ALIAPP_VALUE, p_data, len);
     disable_latency();
     conn_sleep_cnt_reset();
 }
 
 void ble_hid_data_tx(uint8_t * p_data, uint8_t len)
 {
+       co_printf("ble_hid_data_tx!!!!!!!!!\n");
        ntf_data(m_conn_index, SP_IDX_CHAR2_VALUE, p_data, len);
     
     disable_latency();
@@ -466,7 +495,11 @@ void hid_mouse_value_send(uint8_t click, int8_t x, int8_t y, int8_t wheel)
        if (g_device_param.mouse_mode == WORK_2_4G_MODE)
                ble_hid_data_tx(mouse_buff, sizeof(mouse_buff));
        else
+       {
+               ble_s_hid_data_tx(mouse_buff, sizeof(mouse_buff));
                hid_gatt_report_notify(m_conn_index, 0, mouse_buff, sizeof(mouse_buff));
+       }
+               
     
     disable_latency();
     conn_sleep_cnt_reset();
@@ -482,7 +515,11 @@ void hid_consumer_value_send(uint16_t key_code)
        if (g_device_param.mouse_mode == WORK_2_4G_MODE)
         ble_hid_data_tx(code_buff, sizeof(code_buff));
        else
+       {
+               ble_s_hid_data_tx(code_buff, sizeof(code_buff));
                hid_gatt_report_notify(m_conn_index, 1, code_buff, sizeof(code_buff));
+       }
+               
     
     disable_latency();
     conn_sleep_cnt_reset();
@@ -493,7 +530,11 @@ void hid_keyboard_value_send(uint8_t * p_keys_buff)
        if (g_device_param.mouse_mode == WORK_2_4G_MODE)
         ble_hid_data_tx(p_keys_buff, 8);
        else
+       {
+               ble_s_hid_data_tx(p_keys_buff, 8);
                hid_gatt_report_notify(m_conn_index, 2, p_keys_buff, 8);
+       }
+               
     
     disable_latency();
     conn_sleep_cnt_reset();
index 10fe414..920836c 100644 (file)
@@ -75,6 +75,7 @@ void sp_start_adv(void);
 uint8_t curr_conn_index_get(void);
 void enable_latency(void);
 void disable_latency(void);
+void ble_aliapp_data_tx(uint8_t * p_data, uint16_t len);
 void ble_app_data_tx(uint8_t * p_data,uint8_t len);
 void ble_hid_data_tx(uint8_t * p_data, uint8_t len);
 void ble_send_debug(char * str, uint8_t len, uint32_t data);
index d416c0b..bba74c4 100644 (file)
 
 #define HW_VERSION                      "V1.0"
 #define FW_VERSION                      "V1.0.109"
-#define ADV_NAME_BT1_LEN                12
-#define ADV_NAME_BT1                    "FR_Mouse_BLE"
+#define ADV_NAME_BT1_LEN                7
+#define ADV_NAME_BT1                    "VMouse"
 
-#define ADV_NAME_2_4G_LEN               11
-#define ADV_NAME_2_4G                   "FR_Mouse_DG"
+#define ADV_NAME_2_4G_LEN               7
+#define ADV_NAME_2_4G                   "VMouse"
 
-#define ADV_NAME_2_4G_PAIR_LEN          13
-#define ADV_NAME_2_4G_PAIR               "FR_Mouse_DG_P"
+#define ADV_NAME_2_4G_PAIR_LEN          9
+#define ADV_NAME_2_4G_PAIR               "VMouse_P"
 
 #define UART_LOG_ENABLE                 ENABLE     // ÓÉÓÚPA3¸´Ó㬴ò¿ªLOG¿ÉÄÜÔì³ÉijЩ¹¦ÄÜÊÜÏÞ
 #define WDT_ENABLE                      ENABLE      // ¿´ÃŹ·
@@ -57,7 +57,7 @@
 
 #define MOUSE_SLEEP_ENABLE              ENABLE      // Ê¹ÄÜÊó±êÐÝÃß
 #define MOUSE_ADV_SLEEP_TIMEOUT_SEC     (20)        // Êó±ê˯Ãßʱ¼ä£¬µ¥Î»S
-#define MOUSE_CONN_SLEEP_TIMEOUT_SEC    (60*10)     // Êó±ê˯Ãßʱ¼ä£¬µ¥Î»S
+#define MOUSE_CONN_SLEEP_TIMEOUT_SEC    (60*1)     // Êó±ê˯Ãßʱ¼ä£¬µ¥Î»S
 
 /*
  * TYPEDEFS (ÀàÐͶ¨Òå)
index 5b5f1a2..2921b69 100644 (file)
@@ -10,7 +10,7 @@
 #define _FLASH_USAGE_CONFIG_H
 
 /*
- * MACROS (ºê¶¨Òå)
+ * MACROS (????)
  */
 
 /*
@@ -32,6 +32,7 @@
        #define JUMP_TABLE_STATIC_KEY_OFFSET    0x7F000
        #define BLE_BONDING_INFO_SAVE_ADDR      0x7D000
        #define BLE_REMOTE_SERVICE_SAVE_ADDR    0x7E000
+       #define ALI_DATA_ADDR                                   0x6f000 //Óû§ÅäÖÃÇø0x7c000-0x7D000
     #define FLASH_MAX_SIZE                  0x80000
 #endif // FOR_4M_FLASH
 
@@ -45,7 +46,7 @@
 /*
  * uncomment this MACRO if user need protect flash from unexpected erase or write operation
  */
-#define FLASH_PROTECT
+//#define FLASH_PROTECT
 
 #endif // _FLASH_USAGE_CONFIG_H
 
index 6da1212..3f7284d 100644 (file)
@@ -32,7 +32,8 @@ void user_gpio_init(void)
         µÍµçƽ£º2.4Gģʽ
         ¸¡¿Õ/¸ßµçƽ£ºÀ¶ÑÀģʽ
     */
-       if (pmu_get_gpio_value(MODE_DETECT_PIN_PORT, MODE_DETECT_BIT) == 0)
+       //if (pmu_get_gpio_value(MODE_DETECT_PIN_PORT, MODE_DETECT_BIT) == 0)
+       if(1)
        {
                g_device_param.mouse_mode = WORK_2_4G_MODE;
                patch_set_2ms(true);
index de918d7..cc8a931 100644 (file)
@@ -89,6 +89,10 @@ void user_inflash_init(void)
     {
         user_data.peer_addr.addr[3] += 1;
     }
+    user_data.peer_addr.addr[5] = 0xc0;
+    user_data.peer_addr.addr[4] = 0xc2;
+    user_data.peer_addr.addr[1] = 0xA5;
+    user_data.peer_addr.addr[0] = 0xA5;
     gap_address_set(&user_data.peer_addr);
     
     if (user_data_tmp.reset_status == 0xA5A5A5A5)
index 6be8508..cb602b9 100644 (file)
@@ -656,6 +656,17 @@ void button_callback(Button_t btn, PressEvent event, uint8_t repeat)
                {
                        case SINGLE_CLICK:
                                co_printf("mode_button SINGLE_CLICK\r\n");
+                               if(g_device_param.mouse_mode == WORK_BT1_MODE)
+                               {
+                                       g_device_param.mouse_mode = WORK_2_4G_MODE;
+                                       patch_set_2ms(true);
+                                       co_printf("[gpio]2.4G mode select\r\n");
+                               }
+                               else
+                               {
+                                       g_device_param.mouse_mode = WORK_BT1_MODE;
+                                       co_printf("[gpio]BT mode select\r\n");
+                               }
                                break;
 
                        case LONG_PRESS_START:
index a2cd186..ccb985d 100644 (file)
 
 #include "ble_simple_peripheral.h"
 #include "simple_gatt_service.h"
-
+#include "version.h"
  /*
   * LOCAL VARIABLES
   */
 device_param_t g_device_param =
 {
-    .sensor_model = UNKNOWN,
+    .sensor_model = sensor_UNKNOWN,
        .is_enter_sleep = false,
        .latency_cnt = SMART_LATENCY_TIMEOUT_SEC,
        .bat_cnt = BAT_DETECT_TIMEOUT_PER_10SEC,
@@ -146,7 +146,7 @@ void user_init_static_memory(void)
  */
 void user_custom_parameters(void)
 {
-#if 0
+#if 1
        __jump_table.addr.addr[0] = 0xBD;
        __jump_table.addr.addr[1] = 0xAD;
        __jump_table.addr.addr[2] = 0xAA;
@@ -183,7 +183,7 @@ void user_custom_parameters(void)
  */
 __attribute__((section("ram_code"))) void user_entry_before_sleep_imp(void)
 {
-       uart_putc_noint_no_wait(UART1, 's');
+       //uart_putc_noint_no_wait(UART1, 's');
 }
 
 /*********************************************************************
@@ -208,7 +208,7 @@ __attribute__((section("ram_code"))) void user_entry_after_sleep_imp(void)
 
        uart_init(UART1, BAUD_RATE_921600);
        //NVIC_EnableIRQ(UART1_IRQn);
-       uart_putc_noint_no_wait(UART1, 'w');
+       //uart_putc_noint_no_wait(UART1, 'w');
        // Do some things here, can be uart print
 
        NVIC_EnableIRQ(PMU_IRQn);
@@ -281,10 +281,28 @@ bool system_nosleep_evt_get(void)
  */
 #include "bizbus_common.h"
 #include "upay_vendor.h"
+#include "cJSON.h"
 void user_entry_after_ble_init(void)
 {
        co_printf("\r\nFR801X Mouse demo\r\n");
-    
+       char *build_date,*build_time;
+       get_SDK_compile_date_time(&build_date,&build_time);
+    co_printf("\r\nbuild_date:%s,build_time%s\r\n",build_date,build_time);
+       co_printf("\r\nbuild_date:%s,build_time%s\r\n",build_date,build_time);
+       co_printf("\r\nbuild_date:%s,build_time%s\r\n",build_date,build_time);
+       #if 1
+       char data [100]={0};
+       sprintf(data,"hahah:%f",23.014);
+       co_printf("\r\nsprintf data:%s!!!!!!!!!!!\r\n",data);
+       // memset(data,'a',sizeof(data)-1);
+       // flash_erase(ALI_DATA_ADDR,sizeof(data));
+    // flash_write(ALI_DATA_ADDR,sizeof(data),(uint8_t *)data);
+       // memset(data,'b',sizeof(data));
+       co_delay_100us(10 * 30);
+       flash_read(ALI_DATA_ADDR,sizeof(data),(uint8_t *)data);
+       co_printf("\r\ndata:%s\r\n",data);
+       #endif
+       cJSON_InitHooks(NULL);
        user_timer_init();
        user_led_init();
        user_gpio_init();
@@ -299,8 +317,19 @@ void user_entry_after_ble_init(void)
        wdt_init(WDT_ACT_CALL_IRQ, 10);
        wdt_start();
        #endif
-       bizbus_init_para_t para;
+       bizbus_init_para_t para = {0};;
+       strcpy((char *)para.pk_str,"a1c7Ojs6HMR");
+       strcpy((char *)para.ps_str,"TxPFIJ5F1kwa0zO3");
+       strcpy((char *)para.version_str, "HAAS-3AX-");
+    strcpy((char *)para.vendor_str, "AAA-BBB-");
+    strcpy((char *)para.id2_pk, "12345678901");
+       para.dn_without_prefix = 1; //新接入客户统一传1
+       mac_addr_t addr;
+       gap_address_get(&addr);
+       sprintf((char *)para.mac_str,"%02X%02X%02X%02X%02X%02X", addr.addr[5], addr.addr[4], addr.addr[3], addr.addr[2], addr.addr[1], addr.addr[0]);
+       co_printf("bizbus_init:mac:%s\n",para.mac_str);
        bizbus_init(&para);
+       
        // Application layer initialization, can included bond manager init, 
        // advertising parameters init, scanning parameter init, GATT service adding, etc.    
        simple_peripheral_init();
index b812481..7c10860 100644 (file)
 #undef LOG_LEVEL_MODULE
 #define LOG_LEVEL_MODULE    (LOG_LEVEL_INFO)
 
-#define sensor_delay()      __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
-
+//#define sensor_delay()      __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
+void sensor_delay(void)
+{
+       int count = 30;
+       while(count--)
+       {
+               __nop();
+       }
+}
 #define PRODUCT_ID1_REG                        0x00
 #define PRODUCT_ID2_REG                        0x01
 #define MOTION_STATUS_REG              0x02
@@ -46,12 +53,12 @@ const char * sensor_type_str[SENSOR_MAX] =
 
 const uint8_t SENSOR_PID_TABLE[SENSOR_MAX][2] =
 {
-    {0},          // UNKNOWN
-    {0x60,0x60},          // PAW3205
+    {0xff},          // UNKNOWN
+    {0x31, 0x00},          // PAW3205
     {0x30, 0x02}, // PAW3212
-    {0},          // PAW3065
-    {0},          // PAW3065XY
-    {0},          // KA8
+    {0x31, 0x04},          // PAW3065
+    {0xff},          // PAW3065XY
+    {0xff},          // KA8
     {0x58, 0x59}, // KA8G2
     {0x58, 0x57}, // KA5857
 };
@@ -63,7 +70,7 @@ Target CPI = SENSOR_DPI_TABLE[x][2] * CPI_X
 const uint8_t SENSOR_DPI_TABLE[SENSOR_MAX][3] =
 {
     {0},          // UNKNOWN
-    {0},          // PAW3205
+    {16, 63, 38},          // PAW3205
     {16, 63, 38}, // PAW3212
     {0},          // PAW3065
     {0},          // PAW3065XY
@@ -98,6 +105,9 @@ static void sensor_sync_clk(void)
 static uint8_t sensor_read_byte(void)
 {
        uint8_t data;
+       // sensor_sdio_set_output();
+       // sensor_sdio_cpu_set();
+       // __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
        sensor_sdio_set_input();
        for (uint8_t i = 0; i < 8; i++)
        {
@@ -129,6 +139,8 @@ static uint8_t sensor_read_byte(void)
 static void sensor_write_byte(uint8_t data)
 {
        sensor_sdio_set_output();
+       // sensor_sdio_cpu_set();
+       // __nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();__nop();
        for (uint8_t i = 0; i < 8; i++)
        {
                if (data & 0x80)
@@ -157,6 +169,7 @@ static void sensor_write_byte(uint8_t data)
 static void sensor_write_reg(uint8_t reg_addr, uint8_t data)
 {
        sensor_write_byte(reg_addr | 0x80);
+       co_delay_10us(1);
        sensor_write_byte(data);
 }
 
@@ -170,6 +183,7 @@ static void sensor_write_reg(uint8_t reg_addr, uint8_t data)
 static void sensor_read_reg(uint8_t reg_addr, uint8_t* p_data)
 {
        sensor_write_byte(reg_addr);
+       co_delay_10us(1);
        *p_data = sensor_read_byte();
 }
 
@@ -220,8 +234,24 @@ void sensor_gpio_pmu_init(void)
 ************************************************************************************************************************/
 void snesor_dpi_init(uint16_t dpi)
 {
-    sensor_write_reg(CPI_X_REG, dpi/SENSOR_DPI_TABLE[g_device_param.sensor_model][2]);
-    sensor_write_reg(CPI_Y_REG, dpi/SENSOR_DPI_TABLE[g_device_param.sensor_model][2]);
+       if(g_device_param.sensor_model ==PAW3205)
+       {
+               sensor_write_reg(0x09,0x5a);    //Unlock WP
+
+       }
+
+       sensor_write_reg(CPI_X_REG,0x14);// dpi/SENSOR_DPI_TABLE[g_device_param.sensor_model][2]);
+       sensor_write_reg(CPI_Y_REG, 0xe3);//dpi/SENSOR_DPI_TABLE[g_device_param.sensor_model][2]);
+       uint8_t reg_val = 0;
+       sensor_read_reg(CPI_X_REG, &reg_val);
+       LOG_INFO("[sensosor]snesor_dpi_init:[%02x]: 0x%x\r\n", CPI_X_REG,reg_val);
+       sensor_read_reg(CPI_Y_REG, &reg_val);
+       LOG_INFO("[sensosor]snesor_dpi_init:[%02x]: 0x%x\r\n", CPI_Y_REG,reg_val);
+       if(g_device_param.sensor_model ==PAW3205)
+       {
+               sensor_write_reg(0x09,0x00);    //Lock WP
+       }
+    
     LOG_INFO("[sensosor]dpi set:%d\r\n", dpi);
     
        #if 0
@@ -232,7 +262,103 @@ void snesor_dpi_init(uint16_t dpi)
     LOG_INFO("[sensosor]y dpi_tmp:%d\r\n", tmp*SENSOR_DPI_TABLE[g_device_param.sensor_model][2]);
        #endif
 }
-
+void reg_init(void)
+{
+       uint8_t reg_val = 0;
+       if(g_device_param.sensor_model ==PAW3205)
+       {
+               sensor_write_reg(0x09,0x5a);    //Unlock WP
+
+               sensor_write_reg(0x28,0xb4);
+               sensor_read_reg(0x28, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x28]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x29,0x46);
+               sensor_read_reg(0x29, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x29]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x2a,0x96);
+               sensor_read_reg(0x2a, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x2a]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x2b,0x8c);
+               sensor_read_reg(0x2b, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x2b]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x2c,0x6e);
+               sensor_read_reg(0x2c, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x2c]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x2d,0x64);
+               sensor_read_reg(0x2d, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x2d]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x38,0x5f);
+               sensor_read_reg(0x38, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x38]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x39,0x0f);
+               sensor_read_reg(0x39, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x39]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x3a,0x32);
+               sensor_read_reg(0x3a, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x3a]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x3b,0x47);
+               sensor_read_reg(0x3b, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x3b]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x42,0x10);
+               sensor_read_reg(0x42, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x42]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x54,0x2e);
+               sensor_read_reg(0x54, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x54]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x55,0xf2);
+               sensor_read_reg(0x55, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x55]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x61,0xf4);
+               sensor_read_reg(0x61, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x61]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x63,0x70);
+               sensor_read_reg(0x63, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x63]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x75,0x52);
+               sensor_read_reg(0x75, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x75]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x76,0x41);
+               sensor_read_reg(0x76, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x76]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x77,0xed);
+               sensor_read_reg(0x77, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x77]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x78,0x23);
+               sensor_read_reg(0x78, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x78]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x79,0x46);
+               sensor_read_reg(0x79, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x79]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x7a,0xe5);
+               sensor_read_reg(0x7a, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x7a]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x7c,0x48);
+               sensor_read_reg(0x7c, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x7c]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x7d,0x80);
+               sensor_read_reg(0x7d, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x7d]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x7e,0x77);
+               sensor_read_reg(0x7e, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x7e]: 0x%x\r\n", reg_val);
+               sensor_write_reg(0x1B,0x35);
+               // check reg value
+               sensor_read_reg(0x1B, &reg_val);
+               LOG_INFO("[sensosor]reg_init:[0x1B]: 0x%x\r\n", reg_val);
+               // sensor_write_reg(0x7f,0x01);
+               // sensor_write_reg(0x0B,0x00);
+               // sensor_write_reg(0x7f,0x00);
+               sensor_write_byte(0xff);
+               sensor_write_byte(0x01);
+               sensor_write_reg(0x0B,0x00);
+               sensor_write_byte(0xff);
+               sensor_write_byte(0x00);
+
+               sensor_write_reg(0x09,0x00);    //Lock WP
+               //sensor_poweron();
+       }
+       
+}
 /************************************************************************************************************************
 * º¯ÊýÃû³Æ: sensor_init()
 * ¹¦ÄÜ˵Ã÷: ³õʼ»¯sensor
@@ -256,23 +382,45 @@ uint8_t user_sensor_init(void)
        sensor_sclk_cpu_set();
        sensor_sdio_cpu_set();
 
-       sensor_read_reg(PRODUCT_ID1_REG, &sensor_id1);
-    sensor_read_reg(PRODUCT_ID2_REG, &sensor_id2);
-    LOG_INFO("[sensosor]id1: 0x%02x, id2: 0x%02x\r\n", sensor_id1, sensor_id2);
-                                     
-    for (uint8_t i = 0; i < SENSOR_MAX; i++)
+       
+    
+    // if(g_device_param.sensor_model ==PAW3205)
+       // {
+       //      sensor_write_reg(0x09,0x5a);    //Unlock WP
+
+       // }                                 
+    while(1)
     {
-        if (sensor_id1 == SENSOR_PID_TABLE[i][0] && sensor_id2 == SENSOR_PID_TABLE[i][1])
-        {
-            g_device_param.sensor_model = i;
-            LOG_INFO("[sensosor]model: %s\r\n", sensor_type_str[g_device_param.sensor_model]);
-            snesor_dpi_init(user_data.dpi);
-            return 0;
-        }
+               
+               sensor_read_reg(PRODUCT_ID1_REG, &sensor_id1);
+       sensor_read_reg(PRODUCT_ID2_REG, &sensor_id2);
+               LOG_INFO("[sensosor]id1: 0x%02x, id2: 0x%02x\r\n", sensor_id1, sensor_id2);
+               for (uint8_t i = 0; i < SENSOR_MAX; i++)
+               {
+                       if (sensor_id1 == SENSOR_PID_TABLE[i][0] && sensor_id2 == SENSOR_PID_TABLE[i][1])
+                       {
+                               g_device_param.sensor_model = i;
+                               LOG_INFO("[sensosor]model: %s\r\n", sensor_type_str[g_device_param.sensor_model]);
+                               
+                               // sensor_write_reg(0x26,0xb4);
+                               // uint8_t data;
+                               // sensor_read_reg(0x26, &data);
+                               //LOG_INFO("[sensosor][0x26]: %02x\r\n", data);
+                               //reg_init();
+                               snesor_dpi_init(user_data.dpi);
+                               sensor_poweron();
+                               //while(1);
+                               return 0;
+                       }
+               }
+               sensor_sync_clk();
+               co_delay_10us(5);
+               LOG_INFO("[sensosor]type unknown!!!!\r\n");
+               
     }
+    //sensor_write_reg(0x09,0x00);     //Lock WP
     
-    LOG_INFO("[sensosor]type unknown!!!!\r\n");
-    while(1);
+
 }
 
 /************************************************************************************************************************
@@ -282,17 +430,64 @@ uint8_t user_sensor_init(void)
 * Êä ³ö: ÎÞ
 * ×¢ÒâÊÂÏî: ÎÞ
 ************************************************************************************************************************/
+uint8_t SW_CPI;                                //CPI setting temp
+uint8_t CPI_MAX;                       //Max value of cpi[2:0]
+uint8_t CPI_Dft;                       //For THREE level CPI switch
+uint8_t CPI_Low;
+uint8_t CPI_Hi;
+uint8_t CPI_3200;
 void sensor_poweron(void)
 {
        uint8_t reg_val = 0;
-
+       
        LOG_INFO("[sensosor]%s\r\n", __func__);
-
+       SW_CPI  = 0x02;                         //1000 cpi
+       CPI_MAX = 0x04;                         //1600 cpi
+
+       CPI_Dft = SW_CPI;                       //For THREE level, Default CPI(1000)
+       CPI_Low = 0x01;                         //For THREE level, LOW CPI(800)
+       CPI_Hi  = 0x04;                         //For THREE level, High CPI(1600)
+       
+       CPI_3200= 0;
+
+       SW_CPI += 0x01;
+  
+       #if 1   //THREE level CPI switch
+               if(SW_CPI > CPI_Hi)
+                       SW_CPI = CPI_Low;
+               else if(SW_CPI > CPI_Dft)
+                       SW_CPI = CPI_Hi;
+               else
+                       SW_CPI = CPI_Dft;
+       #endif
+       
+       if(SW_CPI > CPI_MAX)
+       {
+               SW_CPI = 0x00;
+       }
+       reg_val = SW_CPI;
        sensor_gpio_cpu_init();
-
+       sensor_sclk_cpu_set();
+       sensor_sdio_cpu_set();
+       uint8_t data = 0;
+       sensor_read_reg(PRODUCT_ID1_REG,&data);
+       //co_delay_10us(1);
+       while( data != SENSOR_PID_TABLE[g_device_param.sensor_model][0])
+       {
+               sensor_read_reg(PRODUCT_ID1_REG,&data);
+               co_delay_10us(1);
+               LOG_INFO("[sensosor]sensor_poweron:read ID error:!!!\n");
+               sensor_sync_clk();
+               //resync();
+       }
+       co_delay_10us(5);
+       if(g_device_param.sensor_model ==PAW3205)
+       {
+               sensor_write_reg(0x09,0x5a);    //Unlock WP
+       }
        for (uint8_t i = 0; i < 32; i++)
        {
-               reg_val = 0x17;
+               reg_val = 0x02;
                LOG_INFO("[sensosor]cfg set reg_val: 0x%x\r\n", reg_val);
                sensor_write_reg(CONFIGURATION_REG, reg_val);
                co_delay_100us(10 * 3);
@@ -301,7 +496,7 @@ void sensor_poweron(void)
                sensor_read_reg(CONFIGURATION_REG, &reg_val);
                LOG_INFO("[sensosor]cfg curr: 0x%x\r\n", reg_val);
 
-               if (reg_val != 0x17)
+               if (reg_val != 0x02)
                {
                        sensor_sync_clk();
                }
@@ -311,6 +506,12 @@ void sensor_poweron(void)
                        break;
                }
        }
+       if(g_device_param.sensor_model ==PAW3205)
+       {
+               sensor_write_reg(0x4B, 0x1B);
+               sensor_write_reg(0x09,0x00);    //Lock WP
+       }
+       
 }
 
 /************************************************************************************************************************
@@ -323,19 +524,59 @@ void sensor_poweron(void)
 void sensor_powerdown(void)
 {
        uint8_t reg_val = 0;
-
+       
        LOG_INFO("[sensosor]%s\r\n", __func__);
     
     sensor_gpio_cpu_init();
     sensor_sclk_cpu_set();
     sensor_sdio_cpu_clr();
-    
+       SW_CPI  = 0x02;                         //1000 cpi
+       CPI_MAX = 0x04;                         //1600 cpi
+
+       CPI_Dft = SW_CPI;                       //For THREE level, Default CPI(1000)
+       CPI_Low = 0x01;                         //For THREE level, LOW CPI(800)
+       CPI_Hi  = 0x04;                         //For THREE level, High CPI(1600)
+       
+       CPI_3200= 0;
+
+       SW_CPI += 0x01;
+  
+       #if 1   //THREE level CPI switch
+               if(SW_CPI > CPI_Hi)
+                       SW_CPI = CPI_Low;
+               else if(SW_CPI > CPI_Dft)
+                       SW_CPI = CPI_Hi;
+               else
+                       SW_CPI = CPI_Dft;
+       #endif
+       
+       if(SW_CPI > CPI_MAX)
+       {
+               SW_CPI = 0x00;
+       }
+       reg_val = SW_CPI;
+       uint8_t data = 0;
+       sensor_read_reg(PRODUCT_ID1_REG,&data);
+       //co_delay_10us(1);
+       while( data != SENSOR_PID_TABLE[g_device_param.sensor_model][0])
+       {
+               sensor_read_reg(PRODUCT_ID1_REG,&data);
+               co_delay_10us(1);
+               LOG_INFO("[sensosor]sensor_powerdown:read ID error:!!!\n");
+               sensor_sync_clk();
+               //resync();
+       }
+       co_delay_10us(5);
+    if(g_device_param.sensor_model ==PAW3205)
+       {
+               sensor_write_reg(0x09,0x5a);    //Unlock WP
+       }
        for (uint8_t i = 0; i < 32; i++)
        {
         sensor_read_reg(CONFIGURATION_REG, &reg_val);
                LOG_INFO("[sensosor]cfg prev reg_val: 0x%x\r\n", reg_val);
         
-               reg_val = 0x1f;
+               reg_val = 0x0A;
                LOG_INFO("[sensosor]cfg set reg_val: 0x%x\r\n", reg_val);
                sensor_write_reg(CONFIGURATION_REG, reg_val);
 
@@ -343,7 +584,7 @@ void sensor_powerdown(void)
                sensor_read_reg(CONFIGURATION_REG, &reg_val);
                LOG_INFO("[sensosor]cfg curr reg_val: 0x%x\r\n", reg_val);
 
-               if (reg_val != 0x1f)
+               if (reg_val != 0x0A)
                {
                        sensor_sync_clk();
                }
@@ -353,8 +594,14 @@ void sensor_powerdown(void)
                        break;
                }
        }
+       if(g_device_param.sensor_model ==PAW3205)
+       {
+               sensor_write_reg(0x4B, 0x13);
+               sensor_write_reg(0x09,0x5a);    //Unlock WP
+       }
 }
 
+
 /************************************************************************************************************************
 * º¯ÊýÃû³Æ: sensor_get_motion()
 * ¹¦ÄÜ˵Ã÷: »ñÈ¡sensorÒÆ¶¯
@@ -365,28 +612,60 @@ void sensor_powerdown(void)
 uint8_t sensor_get_motion(int8_t * p_x_delta, int8_t * p_y_delta)
 {
        #if 1
-       uint8_t data = 0;
-    
+       uint8_t data = 0,t_motion_x = 0,t_motion_y = 0;
+       static uint8_t motion_x = 0,motion_y = 0;
+
+    // if(g_device_param.sensor_model ==PAW3205)
+       // {
+       //      sensor_write_reg(0x09,0x5a);    //Unlock WP
+       // }
+       
+       
+       sensor_read_reg(PRODUCT_ID1_REG,&data);
+       //co_delay_10us(1);
+       while( data != SENSOR_PID_TABLE[g_device_param.sensor_model][0])
+       {
+               sensor_read_reg(PRODUCT_ID1_REG,&data);
+               co_delay_10us(1);
+               LOG_INFO("[sensosor]sensor_get_motion:read ID error:!!!\n");
+               sensor_sync_clk();
+               //resync();
+       }
+       //LOG_INFO("[sensosor]sensor_get_motion:read ID :0x%x ",data);
        sensor_read_reg(MOTION_STATUS_REG, &data);
-
+       //LOG_INFO("[%02x]:0x%02x,",MOTION_STATUS_REG,data);
+       //LOG_INFO("[sensosor]sensor_get_motion: MOTION_STATUS_REG:0x%02x\n", data);
        if (data & 0x80)
        {
+               //LOG_INFO("[%02x]:0x%02x,",MOTION_STATUS_REG,data);
                sensor_read_reg(DELTA_X_REG, &data);
+               //LOG_INFO("[%02x]:0x%02x,",DELTA_X_REG,data);
                /* XÖá·½ÏòÑ¡Ôñ¼°Î¢µ÷ */
                #if 0
-               * p_x_delta = (data ^ 0xff) + 1;
+               t_motion_x = (data ^ 0xff) + 1;
                #else
-               *p_x_delta = -(data ^ 0xff) + 1;
+               t_motion_x = -(data ^ 0xff) + 1;
                #endif
 
                sensor_read_reg(DELTA_Y_REG, &data);
+               //LOG_INFO("[%02x]:0x%02x \n",DELTA_Y_REG,data);
                /* YÖá·½ÏòÑ¡Ôñ¼°Î¢µ÷ */
                #if 1
-               * p_y_delta = (data ^ 0xff);
+               t_motion_y = (data ^ 0xff);
                #else
-               *p_y_delta = -(data ^ 0xff) - 1;
+               t_motion_y = -(data ^ 0xff) - 1;
                #endif
-
+               if(motion_x == t_motion_x && motion_y == t_motion_y)
+               {
+                       //LOG_INFO("[sensosor]sensor_get_motion:return1: x:%d,y:%d data:%d\n",t_motion_x, t_motion_y,data);
+                       return 1;
+               }
+                       
+               motion_x = t_motion_x;
+               motion_y = t_motion_y;
+               *p_x_delta = t_motion_x;
+               *p_y_delta = t_motion_y;
+               //LOG_INFO("[sensosor]sensor_get_motion: x:%d,y:%d\n",motion_x, motion_y);
                return 0;
        }
 
index 965f68b..d93f1f7 100644 (file)
  * CONSTANTS (³£Á¿¶¨Òå)
 */
 // User Definition
-#define UNKNOWN     0x00
-#define PAW3205     0x01
-#define PAW3212     0x02
-#define PAW3065     0x03
-#define PAW3065XY   0x04
-#define KA8         0x05
-#define KA8G2       0x06
-#define KA5857      0x07
-#define SENSOR_MAX  0x08
-    
+// #define UNKNOWN     0x00
+// #define PAW3205     0x01
+// #define PAW3212     0x02
+// #define PAW3065     0x03
+// #define PAW3065XY   0x04
+// #define KA8         0x05
+// #define KA8G2       0x06
+// #define KA5857      0x07
+// #define SENSOR_MAX  0x08
+
+enum sensor_type {
+    sensor_UNKNOWN,
+    PAW3205,
+    PAW3212,
+    PAW3065,
+    PAW3065XY,
+    KA8,
+    KA8G2,
+    KA5857,
+    SENSOR_MAX,
+};    
 /*
  * GLOBAL VARIABLES (È«¾Ö±äÁ¿)
 */
index de48eda..f81a0ef 100644 (file)
@@ -16,7 +16,9 @@
 #include "os_timer.h"
 
 #include "co_printf.h"
-
+#include "bizbus_common.h"
+#include "os_mem.h"
+#include "cJSON.h"
 uint16_t user_task_id;
 
 hid_mouse_param_t hid_mouse_param;
@@ -53,7 +55,12 @@ static int user_task_func(os_event_t *param)
                case USER_EVT_BLE_RX:
                        ble_rx_data_cope(param->param, param->param_len);
                        break;
-
+               case USER_EVT_ALIAPP_RX:
+                       co_printf("\nUSER_EVT_ALIAPP_RX:%s\n",param->param);
+                       co_printf("\nUSER_EVT_ALIAPP_RX:free_heap_size%d\n",os_get_free_heap_size());
+                       
+                       bizbus_recv(param->param, param->param_len);
+                       break;
                case USER_EVT_ENTER_SLEEP:
                        g_device_param.is_enter_sleep = true;
             sensor_powerdown();
index 6f370a2..7bd08cc 100644 (file)
@@ -14,6 +14,7 @@ enum user_event_t {
     USER_EVT_SENSOR_TX,
     USER_EVT_QDEC_TX,
     USER_EVT_BLE_RX,
+    USER_EVT_ALIAPP_RX,
     USER_EVT_ENTER_SLEEP,
     USER_EVT_EXIT_SLEEP,
 };
index 16a974f..f127a34 100644 (file)
@@ -1 +1 @@
-{"write_times": 0, "uart_baud": "921600", "uart_port": "COM23", "boot_mode": true}
\ No newline at end of file
+{"write_times": 104, "uart_baud": "921600", "boot_mode": true, "uart_port": "COM93"}
\ No newline at end of file
index 0485eef..aa264ab 100644 (file)
@@ -1,54 +1,64 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
 <ProjectGui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_guix.xsd">
 
-  <SchemaVersion>-5.1</SchemaVersion>
+  <SchemaVersion>-6.1</SchemaVersion>
 
   <Header>### uVision Project, (C) Keil Software</Header>
 
+  <PrjGuiSettings>
+    <LastAddFilePath></LastAddFilePath>
+  </PrjGuiSettings>
+
   <ViewPool/>
 
   <SECTreeCtrl>
     <View>
       <WinId>38003</WinId>
       <ViewName>Registers</ViewName>
-      <TableColWidths>115 275</TableColWidths>
+      <TableColWidths>140 90</TableColWidths>
     </View>
     <View>
       <WinId>346</WinId>
       <ViewName>Code Coverage</ViewName>
-      <TableColWidths>850 160</TableColWidths>
+      <TableColWidths>1010 160</TableColWidths>
     </View>
     <View>
       <WinId>204</WinId>
       <ViewName>Performance Analyzer</ViewName>
-      <TableColWidths>1010</TableColWidths>
+      <TableColWidths>1170</TableColWidths>
     </View>
   </SECTreeCtrl>
 
   <TreeListPane>
+    <View>
+      <WinId>35141</WinId>
+      <ViewName>Event Statistics</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 50 700</TableColWidths>
+    </View>
     <View>
       <WinId>1506</WinId>
       <ViewName>Symbols</ViewName>
       <UserString></UserString>
-      <TableColWidths>133 133 133</TableColWidths>
+      <TableColWidths>80 80 80</TableColWidths>
     </View>
     <View>
       <WinId>1936</WinId>
       <ViewName>Watch 1</ViewName>
       <UserString></UserString>
-      <TableColWidths>133 133 133</TableColWidths>
+      <TableColWidths>200 133 133</TableColWidths>
     </View>
     <View>
       <WinId>1937</WinId>
       <ViewName>Watch 2</ViewName>
       <UserString></UserString>
-      <TableColWidths>133 133 133</TableColWidths>
+      <TableColWidths>200 133 133</TableColWidths>
     </View>
     <View>
       <WinId>1935</WinId>
       <ViewName>Call Stack + Locals</ViewName>
       <UserString></UserString>
-      <TableColWidths>133 133 133</TableColWidths>
+      <TableColWidths>200 133 133</TableColWidths>
     </View>
     <View>
       <WinId>2506</WinId>
       <UserString></UserString>
       <TableColWidths>75 135 130 95 70 230 200 150</TableColWidths>
     </View>
+    <View>
+      <WinId>466</WinId>
+      <ViewName>Source Browser</ViewName>
+      <UserString>500</UserString>
+      <TableColWidths>300</TableColWidths>
+    </View>
   </TreeListPane>
 
+  <CompViewPool/>
+
   <WindowSettings>
     <LogicAnalizer>
       <ShowLACursor>1</ShowLACursor>
         <yPos>-1</yPos>
       </MaxPosition>
       <NormalPosition>
-        <Top>222</Top>
-        <Left>112</Left>
-        <Right>1477</Right>
-        <Bottom>1017</Bottom>
+        <Top>514</Top>
+        <Left>86</Left>
+        <Right>1585</Right>
+        <Bottom>1428</Bottom>
       </NormalPosition>
     </WindowPosition>
     <MDIClientArea>
       <RegID>0</RegID>
       <MDITabState>
-        <Len>304</Len>
-        <Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000001000000000000000100000067443A5C312E776F726B5C362ECAF3B1EA5C764D6F7573655C322E636F64655C312E73646B5C6578616D706C65735C6E6F6E655F65766D5C626C655F766F6963655F6D6F7573655C636F64655C616C696F735C757061795F6C6974655C616C696F735F6170692E63000000000B616C696F735F6170692E63000000009CC1B600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000C0200004C010000BD05000079020000</Data>
+        <Len>60</Len>
+        <Data>010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000000000000</Data>
       </MDITabState>
     </MDIClientArea>
     <ViewEx>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>940100004F00000090050000DD000000</Data>
+          <Data>F40000004F00000090050000DD000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>4D0100004C02000049050000DA020000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000660000008D01000063010000</Data>
+          <Data>0300000066000000ED000000AD020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000660000008D01000063010000</Data>
+          <Data>0300000066000000ED000000AD020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000F40100002B030000</Data>
+          <Data>560000006D00000072010000A9020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>000000002902000090050000B7020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D050000FF000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>97010000660000008D050000C4000000</Data>
+          <Data>F7000000660000008D050000C4000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000660000008D01000063010000</Data>
+          <Data>0300000066000000ED000000AD020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000F40100002B030000</Data>
+          <Data>560000006D00000072010000A9020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000660000008D01000063010000</Data>
+          <Data>0300000066000000ED000000AD020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000F40100002B030000</Data>
+          <Data>560000006D00000072010000A9020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>000000009401000045050000E1020000</Data>
+          <Data>00000000DE020000CB05000058030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000097010000C805000061020000</Data>
+          <Data>03000000E10200008D0500003F030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>97010000660000008D050000C4000000</Data>
+          <Data>F40000006300000090050000DD000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>97010000660000008D050000C4000000</Data>
+          <Data>F7000000660000008D050000C4000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A0040000630000009005000025020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>000000002902000090050000A3020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>97010000660000008D050000C4000000</Data>
+          <Data>F7000000660000008D050000C4000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>97010000660000008D050000C4000000</Data>
+          <Data>F7000000660000008D050000C4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000001E030000FB000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35141</RegID>
+        <PaneID>35141</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>F40000006300000090050000DD000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>97010000660000008D050000C4000000</Data>
+          <Data>F7000000660000008D050000C4000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03040000660000008D0500000C020000</Data>
+          <Data>A3040000660000008D0500007A010000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>03000000660000008D0100007F020000</Data>
+          <Data>0300000066000000ED0000009E020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000F40100002B030000</Data>
+          <Data>560000006D00000072010000A9020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000097010000C805000061020000</Data>
+          <Data>00000000DE0200009005000058030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000A00300007D010000</Data>
+          <Data>560000006D0000001E030000FB000000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0300000097010000C805000061020000</Data>
+          <Data>03000000E10200008D0500003F030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000F40100002B030000</Data>
+          <Data>560000006D00000072010000A9020000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>030000002C0200008D0500009E020000</Data>
+          <Data>030000002C0200008D0500008A020000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
-          <Data>D8000000EF000000680200007F020000</Data>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>463</RegID>
+        <PaneID>463</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>03000000E10200008D0500003F030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D00000072010000A9020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>466</RegID>
+        <PaneID>466</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>03000000E10200008D0500003F030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D00000072010000A9020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>470</RegID>
+        <PaneID>470</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>F7000000660000008D050000C4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000001E030000FB000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50000</RegID>
+        <PaneID>50000</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50001</RegID>
+        <PaneID>50001</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50002</RegID>
+        <PaneID>50002</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50003</RegID>
+        <PaneID>50003</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50004</RegID>
+        <PaneID>50004</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50005</RegID>
+        <PaneID>50005</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50006</RegID>
+        <PaneID>50006</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50007</RegID>
+        <PaneID>50007</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50008</RegID>
+        <PaneID>50008</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50009</RegID>
+        <PaneID>50009</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50010</RegID>
+        <PaneID>50010</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50011</RegID>
+        <PaneID>50011</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50012</RegID>
+        <PaneID>50012</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50013</RegID>
+        <PaneID>50013</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50014</RegID>
+        <PaneID>50014</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50015</RegID>
+        <PaneID>50015</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50016</RegID>
+        <PaneID>50016</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50017</RegID>
+        <PaneID>50017</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50018</RegID>
+        <PaneID>50018</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>50019</RegID>
+        <PaneID>50019</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D0500007A010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
         </RectRecentFloat>
       </Window>
       <Window>
         <IsFloating>0</IsFloating>
         <IsTabbed>0</IsTabbed>
         <IsActivated>0</IsActivated>
-        <MRUWidth>940</MRUWidth>
+        <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
         <RecentFrameAlignment>8192</RecentFrameAlignment>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>0000000000000000B70300001C000000</Data>
+          <Data>0000000000000000D10300001C000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <RecentRowIndex>0</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>00000000E102000045050000F4020000</Data>
+          <Data>0000000058030000CB0500006B030000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <IsFloating>0</IsFloating>
         <IsTabbed>0</IsTabbed>
         <IsActivated>0</IsActivated>
-        <MRUWidth>463</MRUWidth>
+        <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
         <RecentFrameAlignment>8192</RecentFrameAlignment>
         <RecentRowIndex>1</RecentRowIndex>
         <RectRecentDocked>
           <Len>16</Len>
-          <Data>000000001C000000DA01000038000000</Data>
+          <Data>000000001C000000E701000038000000</Data>
         </RectRecentDocked>
         <RectRecentFloat>
           <Len>16</Len>
         <IsFloating>0</IsFloating>
         <IsTabbed>0</IsTabbed>
         <IsActivated>0</IsActivated>
-        <MRUWidth>612</MRUWidth>
+        <MRUWidth>32767</MRUWidth>
         <PinState>0</PinState>
         <RecentFrameAlignment>8192</RecentFrameAlignment>
         <RecentRowIndex>2</RecentRowIndex>
           <Data>0A0000000A0000006E0000006E000000</Data>
         </RectRecentFloat>
       </Window>
+      <Window>
+        <RegID>824</RegID>
+        <PaneID>824</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>4096</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>030000002C0200008D0500008A020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000004601000036010000</Data>
+        </RectRecentFloat>
+      </Window>
       <DockMan>
-        <Len>2619</Len>
-        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF94010000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E6500200000000000004D0100004C02000049050000DA020000940100004F00000090050000DD0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFFC0300004F0000000004000025020000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000B90300004C0200004905000022040000000400004F00000090050000250200000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF900100004F000000940100007C010000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000B9FFFFFF4C0200004901000095040000000000004F000000900100007C0100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000000000000B9FFFFFF1204000049050000B4040000000000001502000090050000B702000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000007C01000045050000800100000100000001000010040000000100000071FEFFFFF8000000FFFFFFFF04000000C5000000C7000000B40100007794000001800080000001000000B9FFFFFF990400008405000093050000000000008001000045050000E10200000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
+        <Len>3312</Len>
+        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000560000006D0000001E030000FB000000F40000004F00000090050000DD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200001004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000560000006D0000004601000036010000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000C6020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000560000006D0000004601000036010000000000004F000000F0000000C60200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000560000006D0000004601000036010000000000001502000090050000B702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000C6020000CB050000CA020000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000560000006D0000001E030000FB00000000000000CA020000CB050000580300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
       </DockMan>
       <ToolBar>
         <RegID>59392</RegID>
         <Name>File</Name>
         <Buttons>
-          <Len>2002</Len>
-          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000</Data>
+          <Len>2951</Len>
+          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000400020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000004000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000400000000000000000000000000000000000001000000010000009600000002002050000000000F696E7465726E616C5F6D616C6C6F639600000000000000140012646563696D616C5F706F696E745F7365656E0D75617274315F6973725F72616D0F696E7465726E616C5F6D616C6C6F630648415F42554618737065616B65725F676174745F6164645F736572766963650D6F735F74696D65725F696E69740D706D755F6973725F72616D5F430E7379735F74696D65725F696E69740B636F6E6669675F666C616717534C5F5343374132305F4932635F5370695F5772697465117472616E73706172656E745F73746172740D6170705F61745F726563765F630D75617274305F6973725F72616D0A756172745F706172616D15766353706F72744D6F74696F6E416C676F496E69741273656E645F6872735F646174615F666C61670D554152545F73656E645F62756616766353706F72744D6F74696F6E43616C63756C61746509636F5F7072696E74660D7274635F6765745F76616C75650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000004001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000000000000010000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65FF7F0000</Data>
         </Buttons>
         <OriginalItems>
           <Len>1423</Len>
         <RegID>59399</RegID>
         <Name>Build</Name>
         <Buttons>
-          <Len>692</Len>
-          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000F626C655F766F6963655F6D6F757365960000000000000001000F626C655F766F6963655F6D6F757365000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64CF010000</Data>
+          <Len>990</Len>
+          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000F626C655F766F6963655F6D6F757365960000000000000001000F626C655F766F6963655F6D6F757365000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64FF7F0000</Data>
         </Buttons>
         <OriginalItems>
           <Len>583</Len>
         <RegID>59400</RegID>
         <Name>Debug</Name>
         <Buttons>
-          <Len>2220</Len>
-          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
+          <Len>2373</Len>
+          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000000000000100000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000000000000100000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000000000000100000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F720100000000000000000000000100000001000000000000000000000001000000000000000000054465627567FF7F0000</Data>
         </Buttons>
         <OriginalItems>
           <Len>898</Len>
       </ToolBar>
       <ControlBarsSummary>
         <Bars>0</Bars>
-        <ScreenCX>1707</ScreenCX>
-        <ScreenCY>1067</ScreenCY>
+        <ScreenCX>1920</ScreenCX>
+        <ScreenCY>1080</ScreenCY>
       </ControlBarsSummary>
     </ViewEx>
   </WinLayoutEx>
 
-  <MDIGroups>
-    <Orientation>1</Orientation>
-    <ActiveMDIGroup>0</ActiveMDIGroup>
-    <MDIGroup>
-      <Size>100</Size>
-      <ActiveTab>0</ActiveTab>
-      <Doc>
-        <Name>..\code\alios\upay_lite\alios_api.c</Name>
-        <ColumnNumber>12</ColumnNumber>
-        <TopLine>76</TopLine>
-        <CurrentLine>86</CurrentLine>
-        <Folding>1</Folding>
-        <ContractedFolders></ContractedFolders>
-        <PaneID>0</PaneID>
-      </Doc>
-    </MDIGroup>
-  </MDIGroups>
-
 </ProjectGui>
index 8c168a3..d35d229 100644 (file)
         <tRSysVw>1</tRSysVw>
         <sRunDeb>0</sRunDeb>
         <sLrtime>0</sLrtime>
+        <bEvRecOn>1</bEvRecOn>
+        <bSchkAxf>0</bSchkAxf>
+        <bTchkAxf>0</bTchkAxf>
         <nTsel>6</nTsel>
         <sDll></sDll>
         <sDllPa></sDllPa>
       </DebugFlag>
       <LintExecutable></LintExecutable>
       <LintConfigFile></LintConfigFile>
+      <bLintAuto>0</bLintAuto>
+      <bAutoGenD>0</bAutoGenD>
+      <LntExFlags>0</LntExFlags>
+      <pMisraName></pMisraName>
+      <pszMrule></pszMrule>
+      <pSingCmds></pSingCmds>
+      <pMultCmds></pMultCmds>
+      <pMisraNamep></pMisraNamep>
+      <pszMrulep></pszMrulep>
+      <pSingCmdsp></pSingCmdsp>
+      <pMultCmdsp></pMultCmdsp>
     </TargetOption>
   </Target>
 
       <FileNumber>1</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\proj_main.c</PathWithFileName>
       <FileNumber>2</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\config.h</PathWithFileName>
       <FileNumber>3</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\ble_simple_peripheral.c</PathWithFileName>
       <FileNumber>4</FileNumber>
       <FileType>5</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\ble_simple_peripheral.h</PathWithFileName>
       <FileNumber>5</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\user_task.c</PathWithFileName>
       <FileNumber>6</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\timer.c</PathWithFileName>
       <FileNumber>7</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\gpio.c</PathWithFileName>
       <FileNumber>8</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\keyscan.c</PathWithFileName>
       <FileNumber>9</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\button.c</PathWithFileName>
       <FileNumber>10</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\sensor.c</PathWithFileName>
       <FileNumber>11</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\qdec.c</PathWithFileName>
       <FileNumber>12</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\amic.c</PathWithFileName>
       <FileNumber>13</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\app.c</PathWithFileName>
       <FileNumber>14</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\led.c</PathWithFileName>
       <FileNumber>15</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\inflash.c</PathWithFileName>
       <FileNumber>16</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\func.c</PathWithFileName>
       <FileNumber>17</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\code\adc.c</PathWithFileName>
 
   <Group>
     <GroupName>audio</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
       <FileNumber>18</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\modules\audio_code_sbc\sbc.c</PathWithFileName>
       <FileNumber>19</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\modules\audio_code_sbc\sbc_primitives.c</PathWithFileName>
       <FileNumber>20</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\modules\audio_code_adpcm\adpcm.c</PathWithFileName>
       <FileNumber>21</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\modules\audio_encode\audio_encoder.c</PathWithFileName>
 
   <Group>
     <GroupName>profiles</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
       <FileNumber>22</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\ble\profiles\ble_dev_info\dev_info_service.c</PathWithFileName>
       <FileNumber>23</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\ble\profiles\ble_simple_profile\simple_gatt_service.c</PathWithFileName>
       <FileNumber>24</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\ble\profiles\ble_hid\hid_service.c</PathWithFileName>
       <FileNumber>25</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\ble\profiles\ble_ota\ota_service.c</PathWithFileName>
       <FileNumber>26</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\ble\profiles\ble_ota\ota.c</PathWithFileName>
       <FileNumber>27</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\ble\profiles\ble_batt\batt_service.c</PathWithFileName>
 
   <Group>
     <GroupName>driver</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
       <FileNumber>28</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_pmu.c</PathWithFileName>
       <FileNumber>29</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_keyscan.c</PathWithFileName>
       <FileNumber>30</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_pmu_qdec.c</PathWithFileName>
       <FileNumber>31</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_rtc.c</PathWithFileName>
       <FileNumber>32</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_uart.c</PathWithFileName>
       <FileNumber>33</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_wdt.c</PathWithFileName>
       <FileNumber>34</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_i2s.c</PathWithFileName>
       <FileNumber>35</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_exti.c</PathWithFileName>
       <FileNumber>36</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_timer.c</PathWithFileName>
       <FileNumber>37</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_iic.c</PathWithFileName>
       <FileNumber>38</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_efuse.c</PathWithFileName>
       <FileNumber>39</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_codec.c</PathWithFileName>
       <FileNumber>40</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\driver\driver_adc.c</PathWithFileName>
 
   <Group>
     <GroupName>platform</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
       <FileNumber>41</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\modules\platform\source\core_cm3_isr.c</PathWithFileName>
       <FileNumber>42</FileNumber>
       <FileType>2</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\modules\platform\source\app_boot_vectors.s</PathWithFileName>
 
   <Group>
     <GroupName>patch</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
       <GroupNumber>6</GroupNumber>
       <FileNumber>43</FileNumber>
       <FileType>1</FileType>
-      <tvExp>1</tvExp>
-      <Focus>1</Focus>
+      <tvExp>0</tvExp>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\modules\patch\patch.c</PathWithFileName>
 
   <Group>
     <GroupName>lib</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>
       <FileNumber>44</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
-      <Focus>1</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
       <PathWithFileName>..\..\..\..\components\ble\library\fr8010h_stack.lib</PathWithFileName>
     <File>
       <GroupNumber>8</GroupNumber>
       <FileNumber>45</FileNumber>
-      <FileType>4</FileType>
+      <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>0</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\code\alios\upay_lite\upay_lite.lib</PathWithFileName>
-      <FilenameWithoutPath>upay_lite.lib</FilenameWithoutPath>
+      <PathWithFileName>..\code\alios\upay_lite\alios_api.c</PathWithFileName>
+      <FilenameWithoutPath>alios_api.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
       <FileNumber>46</FileNumber>
       <FileType>4</FileType>
       <tvExp>0</tvExp>
-      <Focus>0</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\code\alios\upay_lite\cJSON.lib</PathWithFileName>
-      <FilenameWithoutPath>cJSON.lib</FilenameWithoutPath>
+      <PathWithFileName>..\code\alios\upay_lite\upay_lite.lib</PathWithFileName>
+      <FilenameWithoutPath>upay_lite.lib</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
+  </Group>
+
+  <Group>
+    <GroupName>cJSON</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
     <File>
-      <GroupNumber>8</GroupNumber>
+      <GroupNumber>9</GroupNumber>
       <FileNumber>47</FileNumber>
       <FileType>1</FileType>
       <tvExp>0</tvExp>
-      <Focus>0</Focus>
       <tvExpOptDlg>0</tvExpOptDlg>
       <bDave2>0</bDave2>
-      <PathWithFileName>..\code\alios\upay_lite\alios_api.c</PathWithFileName>
-      <FilenameWithoutPath>alios_api.c</FilenameWithoutPath>
+      <PathWithFileName>..\code\alios\upay_lite\cJSON\cJSON.c</PathWithFileName>
+      <FilenameWithoutPath>cJSON.c</FilenameWithoutPath>
       <RteFlg>0</RteFlg>
       <bShared>0</bShared>
     </File>
index f2edf50..012c0f8 100644 (file)
       <TargetName>ble_voice_mouse</TargetName>
       <ToolsetNumber>0x4</ToolsetNumber>
       <ToolsetName>ARM-ADS</ToolsetName>
+      <pArmCC>5060960::V5.06 update 7 (build 960)::ARMCC</pArmCC>
+      <pCCUsed>5060960::V5.06 update 7 (build 960)::ARMCC</pCCUsed>
+      <uAC6>8</uAC6>
       <TargetOption>
         <TargetCommonOption>
           <Device>ARMCM3</Device>
           <Vendor>ARM</Vendor>
-          <PackID>ARM.CMSIS.4.2.0</PackID>
+          <PackID>ARM.CMSIS.5.8.0</PackID>
           <PackURL>http://www.keil.com/pack/</PackURL>
           <Cpu>IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M3") CLOCK(12000000) ESEL ELITTLE</Cpu>
           <FlashUtilSpec></FlashUtilSpec>
@@ -84,6 +87,8 @@
             <UserProg2Name>fromelf --text -a -c -o "Output/@L.asm" "#L"</UserProg2Name>
             <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
             <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopA1X>0</nStopA1X>
+            <nStopA2X>0</nStopA2X>
           </AfterMake>
           <SelectedForBatchBuild>0</SelectedForBatchBuild>
           <SVCSIdString></SVCSIdString>
         </CommonProperty>
         <DllOption>
           <SimDllName>SARMCM3.DLL</SimDllName>
-          <SimDllArguments>  -MPU</SimDllArguments>
+          <SimDllArguments> </SimDllArguments>
           <SimDlgDll>DCM.DLL</SimDlgDll>
           <SimDlgDllArguments>-pCM3</SimDlgDllArguments>
           <TargetDllName>SARMCM3.DLL</TargetDllName>
-          <TargetDllArguments> -MPU</TargetDllArguments>
+          <TargetDllArguments></TargetDllArguments>
           <TargetDlgDll>TCM.DLL</TargetDlgDll>
           <TargetDlgDllArguments>-pCM3</TargetDlgDllArguments>
         </DllOption>
             <HexOffset>0</HexOffset>
             <Oh166RecLen>16</Oh166RecLen>
           </OPTHX>
-          <Simulator>
-            <UseSimulator>0</UseSimulator>
-            <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
-            <RunToMain>1</RunToMain>
-            <RestoreBreakpoints>1</RestoreBreakpoints>
-            <RestoreWatchpoints>1</RestoreWatchpoints>
-            <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
-            <RestoreFunctions>1</RestoreFunctions>
-            <RestoreToolbox>1</RestoreToolbox>
-            <LimitSpeedToRealTime>0</LimitSpeedToRealTime>
-            <RestoreSysVw>1</RestoreSysVw>
-          </Simulator>
-          <Target>
-            <UseTarget>1</UseTarget>
-            <LoadApplicationAtStartup>1</LoadApplicationAtStartup>
-            <RunToMain>1</RunToMain>
-            <RestoreBreakpoints>1</RestoreBreakpoints>
-            <RestoreWatchpoints>1</RestoreWatchpoints>
-            <RestoreMemoryDisplay>1</RestoreMemoryDisplay>
-            <RestoreFunctions>0</RestoreFunctions>
-            <RestoreToolbox>1</RestoreToolbox>
-            <RestoreTracepoints>1</RestoreTracepoints>
-            <RestoreSysVw>1</RestoreSysVw>
-          </Target>
-          <RunDebugAfterBuild>0</RunDebugAfterBuild>
-          <TargetSelection>6</TargetSelection>
-          <SimDlls>
-            <CpuDll></CpuDll>
-            <CpuDllArguments></CpuDllArguments>
-            <PeripheralDll></PeripheralDll>
-            <PeripheralDllArguments></PeripheralDllArguments>
-            <InitializationFile></InitializationFile>
-          </SimDlls>
-          <TargetDlls>
-            <CpuDll></CpuDll>
-            <CpuDllArguments></CpuDllArguments>
-            <PeripheralDll></PeripheralDll>
-            <PeripheralDllArguments></PeripheralDllArguments>
-            <InitializationFile></InitializationFile>
-            <Driver>Segger\JL2CM3.dll</Driver>
-          </TargetDlls>
         </DebugOption>
         <Utilities>
           <Flash1>
             <hadXRAM>0</hadXRAM>
             <uocXRam>0</uocXRam>
             <RvdsVP>0</RvdsVP>
+            <RvdsMve>0</RvdsMve>
+            <RvdsCdeCp>0</RvdsCdeCp>
             <hadIRAM2>0</hadIRAM2>
             <hadIROM2>0</hadIROM2>
             <StupSel>1</StupSel>
             <useUlib>1</useUlib>
             <EndSel>1</EndSel>
             <uLtcg>0</uLtcg>
+            <nSecure>0</nSecure>
             <RoSelD>3</RoSelD>
             <RwSelD>3</RwSelD>
             <CodeSel>0</CodeSel>
             <uThumb>0</uThumb>
             <uSurpInc>0</uSurpInc>
             <uC99>1</uC99>
+            <uGnu>0</uGnu>
             <useXO>0</useXO>
+            <v6Lang>1</v6Lang>
+            <v6LangP>1</v6LangP>
+            <vShortEn>1</vShortEn>
+            <vShortWch>1</vShortWch>
+            <v6Lto>0</v6Lto>
+            <v6WtE>0</v6WtE>
+            <v6Rtti>0</v6Rtti>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define></Define>
               <Undefine></Undefine>
-              <IncludePath>..\..\..\..\components\ble\include;..\..\..\..\components\ble\include\gap;..\..\..\..\components\ble\include\gatt;..\..\..\..\components\driver\include;..\..\..\..\components\modules\os\include;..\..\..\..\components\modules\sys\include;..\..\..\..\components\modules\platform\include;..\..\..\..\components\modules\common\include;..\..\..\..\components\modules\lowpow\include;..\..\..\..\components\ble\profiles\ble_batt;..\..\..\..\components\ble\profiles\ble_dev_info;..\..\..\..\components\ble\profiles\ble_hid;..\..\..\..\components\ble\profiles\ble_ota;..\..\..\..\components\ble\profiles\ble_simple_profile;..\code;..\..\..\..\components\modules\audio_code_adpcm;..\..\..\..\components\modules\audio_code_sbc;..\..\..\..\components\modules\audio_encode;..\code\alios\upay_lite</IncludePath>
+              <IncludePath>..\..\..\..\components\ble\include;..\..\..\..\components\ble\include\gap;..\..\..\..\components\ble\include\gatt;..\..\..\..\components\driver\include;..\..\..\..\components\modules\os\include;..\..\..\..\components\modules\sys\include;..\..\..\..\components\modules\platform\include;..\..\..\..\components\modules\common\include;..\..\..\..\components\modules\lowpow\include;..\..\..\..\components\ble\profiles\ble_batt;..\..\..\..\components\ble\profiles\ble_dev_info;..\..\..\..\components\ble\profiles\ble_hid;..\..\..\..\components\ble\profiles\ble_ota;..\..\..\..\components\ble\profiles\ble_simple_profile;..\code;..\..\..\..\components\modules\audio_code_adpcm;..\..\..\..\components\modules\audio_code_sbc;..\..\..\..\components\modules\audio_encode;..\code\alios\upay_lite;..\code\alios\upay_lite\cJSON</IncludePath>
             </VariousControls>
           </Cads>
           <Aads>
             <NoWarn>0</NoWarn>
             <uSurpInc>0</uSurpInc>
             <useXO>0</useXO>
+            <ClangAsOpt>1</ClangAsOpt>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define></Define>
           <GroupName>alios</GroupName>
           <Files>
             <File>
-              <FileName>upay_lite.lib</FileName>
-              <FileType>4</FileType>
-              <FilePath>..\code\alios\upay_lite\upay_lite.lib</FilePath>
+              <FileName>alios_api.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\code\alios\upay_lite\alios_api.c</FilePath>
             </File>
             <File>
-              <FileName>cJSON.lib</FileName>
+              <FileName>upay_lite.lib</FileName>
               <FileType>4</FileType>
-              <FilePath>..\code\alios\upay_lite\cJSON.lib</FilePath>
+              <FilePath>..\code\alios\upay_lite\upay_lite.lib</FilePath>
             </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>cJSON</GroupName>
+          <Files>
             <File>
-              <FileName>alios_api.c</FileName>
+              <FileName>cJSON.c</FileName>
               <FileType>1</FileType>
-              <FilePath>..\code\alios\upay_lite\alios_api.c</FilePath>
+              <FilePath>..\code\alios\upay_lite\cJSON\cJSON.c</FilePath>
             </File>
           </Files>
         </Group>
     </Target>
   </Targets>
 
+  <RTE>
+    <apis/>
+    <components/>
+    <files/>
+  </RTE>
+
 </Project>
index f3b6d78..ffe2d95 100644 (file)
@@ -1,4 +1,4 @@
-;#<FEEDBACK># ARM Linker, 5050106: Last Updated: Wed Feb 28 17:24:20 2024
+;#<FEEDBACK># ARM Linker, 5060960: Last Updated: Mon Mar 11 11:32:51 2024
 ;VERSION 0.2
 ;FILE adc.o
 __asm___5_adc_c_e3544fbe____REV16 <= USED 0
@@ -16,30 +16,17 @@ calib_lld_receive <= USED 0
 calib_lld_reset <= USED 0
 calib_lld_send <= USED 0
 calib_set_freq_config <= USED 0
+;FILE aes_decrypt.o
+;FILE aes_encrypt.o
+tc_aes128_set_encrypt_key <= USED 0
+tc_aes_encrypt <= USED 0
 ;FILE alios_api.o
 ALIPAY_free <= USED 0
 ALIPAY_malloc <= USED 0
 ALIPAY_realloc <= USED 0
 alipay_exec_env_init <= USED 0
-aos_free <= USED 0
-aos_idt_id2_pull_entry <= USED 0
-aos_idt_pk_cfg <= USED 0
-aos_kv_init <= USED 0
-aos_malloc <= USED 0
 aos_printf <= USED 0
-bizbus_gtd_id2_init <= USED 0
-bizbus_gtd_wear_init <= USED 0
-bizbus_hal_recv <= USED 0
-bizbus_hal_send <= USED 0
-bizbus_recv_gtd_hdl <= USED 0
-bizbus_set_time <= USED 0
-hal_flash_id2_erase <= USED 0
-hal_flash_id2_read <= USED 0
-hal_flash_id2_write <= USED 0
 is_need_to_request_cert <= USED 0
-upay_get_timestamp <= USED 0
-upay_id2_check_status <= USED 0
-upay_id2_init <= USED 0
 ;FILE amic.o
 __asm___6_amic_c_fa3602f1____REV16 <= USED 0
 __asm___6_amic_c_fa3602f1____REVSH <= USED 0
@@ -103,9 +90,22 @@ attmdb_svc_visibility_set <= USED 0
 __asm___15_audio_encoder_c_f0e25b87____REV16 <= USED 0
 __asm___15_audio_encoder_c_f0e25b87____REVSH <= USED 0
 __asm___15_audio_encoder_c_f0e25b87____RRX <= USED 0
+;FILE base64.o
 ;FILE batt_service.o
 batt_gatt_notify <= USED 0
 batt_gatt_op_cmp_handler <= USED 0
+;FILE bizbus_base.o
+bizbus_unregister <= USED 0
+;FILE bizbus_fgs.o
+;FILE bizbus_flash.o
+HAL_GetProductKey <= USED 0
+HAL_SetDeviceName <= USED 0
+HAL_SetProductKey <= USED 0
+bizbus_register_dn_get <= USED 0
+bizbus_register_ds_get <= USED 0
+bizbus_register_pk_get <= USED 0
+;FILE bizbus_fnd.o
+bt_birdShield_get_authResult <= USED 0
 ;FILE ble_simple_peripheral.o
 __asm___23_ble_simple_peripheral_c_4fde123a____REV16 <= USED 0
 __asm___23_ble_simple_peripheral_c_4fde123a____REVSH <= USED 0
@@ -114,6 +114,73 @@ ble_send_debug <= USED 0
 hid_consumer_value_send <= USED 0
 ;FILE button.o
 button_deInit <= USED 0
+;FILE cbc_mode.o
+tc_cbc_mode_encrypt_modified <= USED 0
+;FILE cjson.o
+cJSON_AddArrayToObject <= USED 0
+cJSON_AddBoolToObject <= USED 0
+cJSON_AddFalseToObject <= USED 0
+cJSON_AddItemReferenceToArray <= USED 0
+cJSON_AddItemReferenceToObject <= USED 0
+cJSON_AddItemToArray <= USED 0
+cJSON_AddItemToObject <= USED 0
+cJSON_AddItemToObjectCS <= USED 0
+cJSON_AddNullToObject <= USED 0
+cJSON_AddNumberToObject <= USED 0
+cJSON_AddObjectToObject <= USED 0
+cJSON_AddRawToObject <= USED 0
+cJSON_AddTrueToObject <= USED 0
+cJSON_Compare <= USED 0
+cJSON_CreateArray <= USED 0
+cJSON_CreateArrayReference <= USED 0
+cJSON_CreateBool <= USED 0
+cJSON_CreateDoubleArray <= USED 0
+cJSON_CreateFalse <= USED 0
+cJSON_CreateFloatArray <= USED 0
+cJSON_CreateIntArray <= USED 0
+cJSON_CreateNull <= USED 0
+cJSON_CreateNumber <= USED 0
+cJSON_CreateObjectReference <= USED 0
+cJSON_CreateRaw <= USED 0
+cJSON_CreateStringArray <= USED 0
+cJSON_CreateStringReference <= USED 0
+cJSON_CreateTrue <= USED 0
+cJSON_DeleteItemFromArray <= USED 0
+cJSON_DeleteItemFromObject <= USED 0
+cJSON_DeleteItemFromObjectCaseSensitive <= USED 0
+cJSON_DetachItemFromArray <= USED 0
+cJSON_DetachItemFromObject <= USED 0
+cJSON_DetachItemFromObjectCaseSensitive <= USED 0
+cJSON_DetachItemViaPointer <= USED 0
+cJSON_Duplicate <= USED 0
+cJSON_GetArrayItem <= USED 0
+cJSON_GetArraySize <= USED 0
+cJSON_GetNumberValue <= USED 0
+cJSON_GetObjectItem <= USED 0
+cJSON_HasObjectItem <= USED 0
+cJSON_InsertItemInArray <= USED 0
+cJSON_IsArray <= USED 0
+cJSON_IsBool <= USED 0
+cJSON_IsFalse <= USED 0
+cJSON_IsInvalid <= USED 0
+cJSON_IsNull <= USED 0
+cJSON_IsNumber <= USED 0
+cJSON_IsObject <= USED 0
+cJSON_IsRaw <= USED 0
+cJSON_IsTrue <= USED 0
+cJSON_Minify <= USED 0
+cJSON_ParseWithLength <= USED 0
+cJSON_Print <= USED 0
+cJSON_PrintBuffered <= USED 0
+cJSON_PrintPreallocated <= USED 0
+cJSON_ReplaceItemInArray <= USED 0
+cJSON_ReplaceItemInObject <= USED 0
+cJSON_ReplaceItemInObjectCaseSensitive <= USED 0
+cJSON_ReplaceItemViaPointer <= USED 0
+cJSON_SetNumberHelper <= USED 0
+cJSON_SetValuestring <= USED 0
+cJSON_Version <= USED 0
+cJSON_malloc <= USED 0
 ;FILE core_cm3_isr.o
 __asm___14_core_cm3_isr_c_5a2a0181____REV16 <= USED 0
 __asm___14_core_cm3_isr_c_5a2a0181____REVSH <= USED 0
@@ -136,6 +203,7 @@ speaker_codec_init <= USED 0
 __asm___14_driver_efuse_c_9109bb6a____REV16 <= USED 0
 __asm___14_driver_efuse_c_9109bb6a____REVSH <= USED 0
 __asm___14_driver_efuse_c_9109bb6a____RRX <= USED 0
+efuse_get_chip_unique_id <= USED 0
 efuse_get_chip_unique_id_new <= USED 0
 efuse_write <= USED 0
 ;FILE driver_exti.o
@@ -208,7 +276,6 @@ __asm___7_entry_c_a06f3641____REV16 <= USED 0
 __asm___7_entry_c_a06f3641____REVSH <= USED 0
 __asm___7_entry_c_a06f3641____RRX <= USED 0
 check_and_set_rand_seed <= USED 0
-get_SDK_compile_date_time <= USED 0
 pmu_recalib_rc <= USED 0
 ;FILE flash.o
 __asm___7_flash_c_48468d59____REV16 <= USED 0
@@ -217,6 +284,8 @@ __asm___7_flash_c_48468d59____RRX <= USED 0
 flash_OTP_erase <= USED 0
 flash_OTP_protect <= USED 0
 flash_OTP_write <= USED 0
+flash_protect_disable <= USED 0
+flash_protect_enable <= USED 0
 flash_protect_enable1 <= USED 0
 flash_read_id <= USED 0
 ;FILE func.o
@@ -871,10 +940,15 @@ sbc_init_msbc <= USED 0
 sbc_reinit <= USED 0
 ;FILE sbc_primitives.o
 ;FILE sensor.o
-__asm___8_sensor_c_c8adf411____REV16 <= USED 0
-__asm___8_sensor_c_c8adf411____REVSH <= USED 0
-__asm___8_sensor_c_c8adf411____RRX <= USED 0
+__asm___8_sensor_c_f4deda73____REV16 <= USED 0
+__asm___8_sensor_c_f4deda73____REVSH <= USED 0
+__asm___8_sensor_c_f4deda73____RRX <= USED 0
+reg_init <= USED 0
 sensor_gpio_pmu_init <= USED 0
+;FILE sha1.o
+utils_sha1 <= USED 0
+utils_sha1_clone <= USED 0
+utils_sha1_free <= USED 0
 ;FILE simple_gatt_service.o
 ;FILE smpc.o
 ;FILE smpc_api.o
@@ -898,7 +972,6 @@ hex_arr_to_str <= USED 0
 kalmanFilter <= USED 0
 str_to_hex_arr <= USED 0
 str_to_val <= USED 0
-system_get_curr_time <= USED 0
 system_get_spare_exmem <= USED 0
 system_optimize_power_consumption_set <= USED 0
 system_power_off <= USED 0
@@ -916,7 +989,16 @@ ble_bond_addr_check_result <= USED 0
 ble_bond_clr_info <= USED 0
 ble_bond_get_last_bond_idx <= USED 0
 gatt_load_peer_svc_from_flash <= 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_b527fdeb____REV16 <= USED 0
 __asm___11_user_task_c_b527fdeb____REVSH <= USED 0
 __asm___11_user_task_c_b527fdeb____RRX <= USED 0
+;FILE utils.o
+_compare <= USED 0