Index: BT_doublebyte/sdk/ConfigFiles/MDK/YC3121.FLM
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ConfigFiles/MDK/YC3121.FLM
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ConfigFiles/MDK/YC3121_keil.sct
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ConfigFiles/MDK/YC3121_keil.sct	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ConfigFiles/MDK/YC3121_keil.sct	(working copy)
@@ -0,0 +1,55 @@
+; *************************************************************
+; *** Scatter-Loading Description File generated by uVision ***
+; *************************************************************
+
+LR_IROM1 0x00000000 0x0001fff  {    ; load region size_region
+  ER_IROM1 0x00000000 0x00001fff  {  ; load address = execution address
+   startup.o (RESET, +First)
+   startup.o (|.text|,+RO)
+;   *(InRoot$$Sections)
+  }
+  ;ER_IROM2 0x4000   {
+  ;rom_main.o (+RO)
+  ;}
+  
+  ;ER_IROM3 0x100000 {
+	  ;*(InRoot$$Sections)
+  ;}
+	
+  ;ER_IROM4 0x100400   {
+  ;flash_start.o (+RO)
+  ;.ANY (+RO) 
+  ;}
+  
+  ;RW_IRAM1 0x000d0000 0x0010000  {  ; RW data
+   ;.ANY (+RW +ZI)
+  ;}
+  
+;  ARM_LIB_STACK 0xE0000 EMPTY -0x10000{}
+}
+
+;LR_IROM2 0x4000 0x4000{
+;	ER_IROM2 0x4000 {
+;	  rom_main.o (+RO)
+;	}
+;}
+
+LR_IROM3 0x1000200 0x200{
+	ER_IROM3 0x1000200 {
+	  flash_start.o (|.flash_start|,+RO)
+	}
+}
+
+LR_IROM4 0x1000400 (0x10000-0x400){
+	ER_IROM4 0x1000400 {
+;	  flash_start.o (|.flash_start|,+RO)
+	  *(InRoot$$Sections)
+	  .ANY (+RO)
+	}
+	
+	
+	 RW_IRAM2 0x00020000 0x010000  {  ; RW data
+	.ANY (+RW +ZI)
+	}
+}
+
Index: BT_doublebyte/sdk/ConfigFiles/MDK/flash.ini
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ConfigFiles/MDK/flash.ini	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ConfigFiles/MDK/flash.ini	(working copy)
@@ -0,0 +1,10 @@
+FUNC void Setup(void)
+{
+	SP = 0x30000;
+	PC = 0x1000200;
+	
+}
+
+
+Setup();
+
Index: BT_doublebyte/sdk/Librarier/core/board_config.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/board_config.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/board_config.h	(working copy)
@@ -0,0 +1,275 @@
+/*
+File Name    : board_config.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/07/17
+Description  : board I/O config file.
+*/
+
+#ifndef __BOARD_CONFIG_H__
+#define __BOARD_CONFIG_H__
+
+#include "yc3121.h"
+#include "yc_gpio.h"
+#include "yc_exti.h"
+#include "yc_spi.h"
+
+//寮?鍙戞澘閫夋嫨
+#define MPOS_BOARD_V2_1  0
+#define EPOS_BOARD_V1_0  1
+#define BOARD_VER  EPOS_BOARD_V1_0
+
+//ADC绠¤剼閰嶇疆
+#define ADC_IO_PORT  GPIOC
+#define ADC2_IO_PIN  GPIO_Pin_7
+#define ADC3_IO_PIN  GPIO_Pin_8
+
+//澶栭儴涓柇绠¤剼閰嶇疆
+#define EXTI_PORT  EXTI_Line0
+#define EXTI_PIN   EXTI_PinSource14
+
+#if (BOARD_VER == MPOS_BOARD_V2_1)
+//DEBUG涓插彛閰嶇疆
+#define UARTBAUD            115200
+#define UART0_TX_PORT       GPIOA
+#define UART0_TX_PIN        GPIO_Pin_1
+#define UART0_RX_PORT       GPIOA
+#define UART0_RX_PIN        GPIO_Pin_0
+
+//涓插彛1閰嶇疆
+#define UART1_TX_PORT       GPIOA
+#define UART1_TX_PIN        GPIO_Pin_14
+#define UART1_RX_PORT       GPIOA
+#define UART1_RX_PIN        GPIO_Pin_15
+
+//BEEP椹卞姩IO
+#define BEEP_PWM   0
+#define BEEP_PORT  GPIOA
+#define BEEP_PIN   GPIO_Pin_11
+
+//IC鍗″湪浣嶆娴婭O
+#define DET_PORT  GPIOC
+#define DET_PIN   GPIO_Pin_12
+
+//NFC IO
+#define NFC_SPI	SPI1
+#define NFC_12M_CLK_PORT  GPIOA
+#define NFC_12M_CLK_PIN   GPIO_Pin_3
+
+#define NFC_RST_PORT  GPIOA
+#define NFC_RST_PIN   GPIO_Pin_4
+
+#define NFC_SPI_MISO_PORT  GPIOB
+#define NFC_SPI_MISO_PIN   GPIO_Pin_2
+
+#define NFC_SPI_MOSI_PORT  GPIOB
+#define NFC_SPI_MOSI_PIN   GPIO_Pin_1
+
+#define NFC_SPI_SCL_PORT  GPIOB
+#define NFC_SPI_SCL_PIN   GPIO_Pin_0
+
+#define NFC_SPI_CS_PORT  GPIOB
+#define NFC_SPI_CS_PIN   GPIO_Pin_6
+
+//EEPROM鍐欎繚鎶ゆ帶鍒禝O
+#define IIC_WP2_PORT    GPIOB
+#define IIC_WP2_PIN     GPIO_Pin_0
+#define IIC_WP128_PORT  GPIOC
+#define IIC_WP128_PIN   GPIO_Pin_10
+
+//IIC椹卞姩IO
+#define IIC_SDA_PORT GPIOB
+#define IIC_SDA_PIN  GPIO_Pin_2
+#define IIC_SCL_PORT GPIOA
+#define IIC_SCL_PIN  GPIO_Pin_11
+
+//KEYBOARD閰嶇疆
+#define GPIO_GROUP_Line_1 GPIOC
+#define Line_1 GPIO_Pin_7
+
+#define GPIO_GROUP_Line_2 GPIOC
+#define Line_2 GPIO_Pin_9
+
+#define GPIO_GROUP_Line_3 GPIOC
+#define Line_3 GPIO_Pin_8
+
+#define GPIO_GROUP_Line_4 GPIOC
+#define Line_4 GPIO_Pin_10
+
+#define GPIO_GROUP_Line_5 GPIOC
+#define Line_5 GPIO_Pin_11
+
+//LCD灞忓箷椹卞姩閰嶇疆
+#define LCD_SPI     SPI0
+#define LCDSDA_PIN  GPIO_Pin_1
+#define LCDSDA_PORT GPIOB
+#define LCDSCL_PIN  GPIO_Pin_0
+#define LCDSCL_PORT GPIOB
+#define LCDCS_PIN   GPIO_Pin_6
+#define LCDCS_PORT  GPIOC
+#define LCDRST_PIN  GPIO_Pin_5
+#define LCDRST_PORT GPIOA
+#define LCDA0_PIN   GPIO_Pin_10
+#define LCDA0_PORT  GPIOA
+#define LCDBL_PIN   GPIO_Pin_2
+#define LCDBL_PORT  GPIOA
+
+#elif (BOARD_VER == EPOS_BOARD_V1_0)
+//DEBUG涓插彛閰嶇疆
+#define UARTBAUD            921600
+#define UART0_TX_PORT       GPIOA
+#define UART0_TX_PIN        GPIO_Pin_1
+#define UART0_RX_PORT       GPIOA
+#define UART0_RX_PIN        GPIO_Pin_0
+
+//涓插彛1閰嶇疆
+#define UART1_TX_PORT       GPIOA
+#define UART1_TX_PIN        GPIO_Pin_14
+#define UART1_RX_PORT       GPIOA
+#define UART1_RX_PIN        GPIO_Pin_15
+
+//BEEP椹卞姩IO
+#define BEEP_PWM   0
+#define BEEP_PORT  GPIOC
+#define BEEP_PIN   GPIO_Pin_1
+
+//IC鍗″湪浣嶆娴婭O
+#define DET_PORT  GPIOA
+#define DET_PIN   GPIO_Pin_4
+
+//NFC IO
+#define NFC_SPI	SPI1
+#define NFC_12M_CLK_PORT  GPIOC
+#define NFC_12M_CLK_PIN   GPIO_Pin_10
+
+#define NFC_RST_PORT  GPIOC
+#define NFC_RST_PIN   GPIO_Pin_5
+
+#define NFC_TVDD_PORT  GPIOC
+#define NFC_TVDD_PIN   GPIO_Pin_4
+
+#define NFC_SPI_MISO_PORT  GPIOC
+#define NFC_SPI_MISO_PIN   GPIO_Pin_6
+
+#define NFC_SPI_MOSI_PORT  GPIOC
+#define NFC_SPI_MOSI_PIN   GPIO_Pin_7
+
+#define NFC_SPI_SCL_PORT  GPIOC
+#define NFC_SPI_SCL_PIN   GPIO_Pin_8
+
+#define NFC_SPI_CS_PORT  GPIOC
+#define NFC_SPI_CS_PIN   GPIO_Pin_9
+
+//IIC椹卞姩IO
+
+//KEYBOARD閰嶇疆
+#define KEY_PORT_1    GPIOA
+#define KEY_PIN_1     GPIO_Pin_9
+
+#define KEY_PORT_2    GPIOA
+#define KEY_PIN_2     GPIO_Pin_15
+
+#define KEY_PORT_3    GPIOA
+#define KEY_PIN_3     GPIO_Pin_14
+
+#define KEY_PORT_4    GPIOA
+#define KEY_PIN_4     GPIO_Pin_8
+
+#define KEY_PORT_5    GPIOA
+#define KEY_PIN_5     GPIO_Pin_7
+
+#define KEY_PORT_6    GPIOA
+#define KEY_PIN_6     GPIO_Pin_6
+
+//TFT灞忓箷椹卞姩閰嶇疆
+#define ST7789VTFTSPI       SPI1
+#define ST7789_TFT_SDA_PIN  GPIO_Pin_7
+#define ST7789_TFT_SDA_PORT GPIOC
+
+#define ST7789_TFT_A0_PIN   GPIO_Pin_10
+#define ST7789_TFT_A0_PORT  GPIOA
+
+#define ST7789_TFT_SCL_PIN  GPIO_Pin_8
+#define ST7789_TFT_SCL_PORT GPIOC
+
+#define ST7789_TFT_RST_PIN  GPIO_Pin_11
+#define ST7789_TFT_RST_PORT GPIOA
+
+#define ST7789_TFT_CS_PIN   GPIO_Pin_5
+#define ST7789_TFT_CS_PORT  GPIOA
+
+#define ST7789_TFT_BL_PIN   GPIO_Pin_12
+#define ST7789_TFT_BL_PORT  GPIOA
+#define ST7789_TFT_BL_HIGH_LIGHT	1
+
+/*QRdecode tft */
+//tft camera io
+#define QR_CAMERA_FREQ       24
+#define QR_CAMERA_SDA        28
+#define QR_CAMERA_SCL        29
+#define QR_CAMERA_RST        32
+#define QR_CAMERA_PD         31//power down
+#define QR_CAMERA_MCLK       35
+#define QR_CAMERA_PCLK       34
+#define QR_CAMERA_DATA       30
+#define QR_CAMERA_CS         42
+
+//tft io
+#define QR_TFT_RST             (11)                  /*rst pin*/
+#define QR_TFT_CS              ( 5)                   /*cs pin*/
+#define QR_TFT_CLK             (40)                  /*clk pin*/
+#define QR_TFT_MOSI            (39)                  /*mosi pin*/
+#define QR_TFT_A0              (10)                  /*a0 pin*/
+#define QR_TFT_BL              (12 | (1 << 7))       /*bl pin*/
+#define QR_TFT_START_COLUMN    ( (320 - 236) / 2 )   /*display center*/
+
+//key io
+#define QR_KEY_T_MATRIX        ( 0)                  /*key mode :0: T matrix key,1:matrix key*/
+#define QR_KEY_LINE_NUM        ( 6)                  /*Value range 0~10*/
+#define QR_KEY_COL_NUM         ( 0)                  /*Value range (T matrix key: 0)*/
+#define QR_KEY_CANCEL_POSTION  ( (5 << 4) | 6 )      /*Exit key*/
+#define QR_KEY_LINE_1          ( 9)                  /*GPIO pin*/
+#define QR_KEY_LINE_2          (15)                  /*GPIO pin*/
+#define QR_KEY_LINE_3          (14)                  /*GPIO pin*/
+#define QR_KEY_LINE_4          ( 8)                  /*GPIO pin*/
+#define QR_KEY_LINE_5          ( 7)                  /*GPIO pin*/
+#define QR_KEY_LINE_6          ( 6)                  /*GPIO pin*/
+
+/*QRdecode lcd */
+//lcd io
+#define QR_LCD_RST             (14)
+#define QR_LCD_CS              (15)
+#define QR_LCD_CLK             (10)
+#define QR_LCD_MOSI            ( 3)
+#define QR_LCD_A0              (11)
+#define QR_LCD_BL              (39 | (1 << 7))
+#define QR_LCD_SPI_BOUDSPEED   (0xFF)
+#define QR_LCD_BLANK_LINE_NUM  ( 0)                   /*Value range 0~7*/
+#define QR_LCD_COLUMN_NUM      (64)                   /*Value range 0~7*/
+#define QR_LCD_START_COLUMN    ((128 - 64)/2)
+
+//lcd camera io
+
+#define QR_LCD_CAMERA_FREQ       (24)
+#define QR_LCD_CAMERA_SDA        (17)
+#define QR_LCD_CAMERA_SCL        (16)
+#define QR_LCD_CAMERA_RST        (41)
+#define QR_LCD_CAMERA_PD         ( 5)//power down
+#define QR_LCD_CAMERA_MCLK       (40)
+#define QR_LCD_CAMERA_PCLK       (38)
+#define QR_LCD_CAMERA_DATA       ( 2)
+#define QR_LCD_CAMERA_CS         (42)
+
+/*touch*/
+#define TP_Y_HIGH_PORT          GPIOA
+#define TP_Y_HIGH_IO_PIN        GPIO_Pin_4
+#define TP_Y_LOW_PORT           GPIOC
+#define TP_Y_LOW_IO_PIN         GPIO_Pin_12
+#define TP_X_HIGH_PORT          GPIOA
+#define TP_X_HIGH_IO_PIN        GPIO_Pin_13
+#define TP_X_LOW_PORT           GPIOC
+#define TP_X_LOW_IO_PIN         GPIO_Pin_11
+
+#endif
+
+#endif
Index: BT_doublebyte/sdk/Librarier/core/bt_code.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/bt_code.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/bt_code.h	(working copy)
@@ -0,0 +1,6 @@
+#include "yc3121.h"
+
+#if (VERSIONS == EXIST_BT)
+extern const unsigned char bt_code[];
+#elif (VERSIONS == NO_BT)
+#endif
Index: BT_doublebyte/sdk/Librarier/core/bt_code.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/bt_code.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/bt_code.c	(working copy)
@@ -0,0 +1,363 @@
+const unsigned char bt_code[] = {
+0x00,0x02,0xaa,0x55,0xb6,0x11,0xc2,0x84,0x00,0x18,0xc0,0x00,0x00,0x5a,0xc0,0x00,
+0x80,0xbe,0xc0,0x1a,0x00,0x56,0xc0,0x1e,0x80,0x43,0xc0,0x2a,0x80,0x2d,0xc0,0x30,
+0x00,0x6d,0xc0,0x42,0x80,0xc4,0xc0,0x44,0x80,0xe5,0xc0,0x46,0x80,0x62,0xc0,0x4a,
+0x00,0xa4,0xc0,0x51,0x00,0xee,0xc0,0x51,0x80,0xaf,0xc0,0x54,0x80,0xb2,0xc0,0x56,
+0x00,0xf5,0xc0,0x5c,0x00,0xf6,0xc0,0x5d,0x81,0x86,0xc0,0x5e,0x01,0xfa,0xc0,0x5e,
+0x82,0x1b,0xc0,0x6d,0x82,0x30,0xc0,0x75,0x82,0x37,0xc0,0x78,0x80,0x87,0xc0,0x7a,
+0x80,0x9c,0x20,0x20,0x4a,0x8b,0xc0,0x01,0x82,0x41,0xc0,0x02,0x82,0x4d,0xc0,0x03,
+0x02,0x56,0xc0,0x03,0x82,0x5c,0xc0,0x04,0x02,0x65,0xc0,0x05,0x82,0x76,0xc0,0x09,
+0x82,0x86,0xc0,0x0a,0x03,0x21,0xc0,0x0e,0x03,0x36,0xc0,0x0f,0x03,0x5f,0xc0,0x0f,
+0x83,0x8d,0xc0,0x11,0x03,0xef,0xc0,0x19,0x04,0x17,0xc0,0x1d,0x04,0x2a,0xc0,0x1f,
+0x04,0x35,0xc0,0x20,0x84,0x47,0xc0,0x28,0x04,0x4d,0xc0,0x29,0x04,0x55,0xc0,0x46,
+0x83,0x74,0xc0,0x4c,0x84,0x69,0x20,0x20,0x4a,0x8b,0x6f,0xe2,0x00,0x19,0x1f,0xe2,
+0x02,0x00,0xc5,0x05,0x45,0x57,0x68,0x42,0x01,0x5c,0x6f,0xe2,0x00,0x47,0x79,0x3f,
+0xfe,0x00,0x28,0x4f,0xfe,0x00,0x79,0x20,0xfe,0x00,0x28,0x4f,0xfe,0x01,0x79,0x20,
+0xfe,0x01,0x67,0xe2,0x00,0x47,0x28,0x4c,0x00,0x01,0x20,0x20,0xc5,0x57,0x20,0x40,
+0x00,0x3c,0x20,0x20,0x45,0x57,0x6f,0xe2,0x00,0x47,0xc4,0x01,0x80,0x00,0x79,0x3f,
+0xfe,0x03,0x79,0x40,0x7e,0x06,0x67,0xe2,0x00,0x47,0x70,0x4b,0xee,0x01,0x20,0x60,
+0x00,0x00,0x20,0x40,0x4c,0x24,0x20,0x40,0x6b,0x69,0x20,0x40,0x45,0x10,0x6f,0xe2,
+0x4b,0xee,0x24,0x5a,0x00,0x54,0x24,0x36,0xc3,0xde,0x20,0x40,0x4a,0x87,0x20,0x40,
+0x6b,0x81,0x20,0x40,0x44,0x85,0x20,0x40,0x47,0x53,0x20,0x40,0x47,0x24,0x20,0x40,
+0x60,0xe9,0x6f,0xe2,0x00,0x0b,0x1f,0xe0,0xfe,0x01,0x67,0xe2,0x00,0x0b,0x20,0x40,
+0x48,0x3d,0x20,0x20,0x43,0xde,0x70,0x4b,0xee,0x00,0x20,0x20,0x46,0x89,0x6f,0xe2,
+0x00,0x4c,0x79,0x3f,0xfe,0x02,0x67,0xe2,0x00,0x4c,0x20,0x20,0x43,0x2f,0x6f,0xe2,
+0x89,0x73,0x79,0x20,0x7e,0x06,0x67,0xe2,0x89,0x73,0x70,0x4b,0xf3,0x01,0x1c,0xe2,
+0x7e,0x00,0x24,0x3a,0x40,0x02,0x70,0x4b,0xf3,0x00,0x20,0x20,0x40,0x02,0x6f,0xe2,
+0x40,0xce,0x79,0x3f,0xfe,0x05,0x1f,0xe6,0x7c,0x09,0x20,0x21,0x00,0x69,0x1f,0xe6,
+0x7c,0x0f,0x24,0x21,0x00,0x6b,0x20,0x20,0x49,0xab,0x70,0x40,0xce,0x09,0x20,0x20,
+0x49,0xab,0x70,0x40,0xce,0x0f,0x20,0x20,0x49,0xab,0x6f,0xe2,0x02,0x5d,0xc0,0x00,
+0x80,0x71,0xc0,0x01,0x00,0x7c,0x20,0x20,0x4a,0x8b,0x6f,0xe4,0x02,0x59,0x68,0x44,
+0x01,0x5d,0x98,0x40,0xfe,0x00,0x67,0xe4,0x02,0x59,0x1f,0xe6,0x7c,0x00,0x20,0x22,
+0xca,0x8b,0x68,0x44,0x10,0x00,0x18,0x40,0x84,0x04,0x98,0x46,0x7c,0x00,0x20,0x42,
+0xc7,0x43,0x20,0x20,0x46,0x09,0x6f,0xe4,0x02,0x5b,0x68,0x44,0x01,0x5d,0x98,0x40,
+0xfe,0x00,0x67,0xe4,0x02,0x5b,0x1f,0xe6,0x7c,0x00,0x20,0x22,0xca,0x8b,0x68,0x44,
+0x14,0x00,0x18,0x40,0x84,0x04,0x98,0x46,0x7c,0x00,0x20,0x42,0xc7,0x47,0x20,0x20,
+0x46,0x09,0x79,0x3f,0x80,0x2c,0x70,0x44,0xe1,0x00,0x20,0x40,0x79,0x64,0x20,0x40,
+0x5f,0xf8,0x78,0x57,0x7c,0x00,0x20,0x40,0x5a,0xc0,0x20,0x21,0x57,0x83,0x20,0x40,
+0x4c,0x27,0x20,0x40,0x57,0xed,0x20,0x40,0x58,0x63,0x24,0x2c,0x57,0x75,0x20,0x56,
+0x83,0x0c,0x6f,0xe2,0x4b,0xf4,0x24,0x5a,0x00,0x99,0x20,0x40,0x57,0x91,0x20,0x36,
+0xd7,0x62,0xc5,0x16,0x57,0x62,0x20,0x20,0x57,0x6f,0x79,0x20,0x00,0x2c,0x78,0x56,
+0xfc,0x00,0x20,0x60,0x00,0x00,0x78,0x37,0x7c,0x00,0x20,0x40,0x58,0x9b,0x20,0x56,
+0x83,0x0c,0x6f,0xe2,0x4b,0xf4,0x24,0x5a,0x00,0x99,0x20,0x36,0xd7,0x62,0xc5,0x16,
+0x57,0x62,0x20,0x20,0x57,0x6f,0x18,0x42,0x7e,0x00,0x20,0x40,0x7d,0x2b,0x1c,0x30,
+0x7e,0x00,0x79,0x20,0x7e,0x2c,0x20,0x40,0x7d,0x14,0x79,0x3f,0xfe,0x2c,0x20,0x40,
+0x4a,0x76,0x20,0x40,0x7d,0x14,0x20,0x74,0x00,0x00,0x20,0x40,0x00,0xbb,0x20,0x20,
+0x4a,0x2f,0x1b,0x42,0x7e,0x00,0x20,0x40,0x00,0xba,0x20,0x20,0x4a,0xe9,0x6f,0xe4,
+0x40,0x4e,0x1f,0xe3,0x7e,0x00,0x20,0x40,0x7d,0x2b,0x1e,0x02,0x7e,0x00,0x20,0x40,
+0x7d,0x14,0x1b,0x42,0x04,0x00,0x20,0x40,0x00,0xba,0x20,0x20,0x4b,0x67,0x20,0x40,
+0x7d,0x14,0x98,0x00,0x0c,0x00,0x79,0x3f,0x8c,0x10,0x20,0x20,0x7d,0x1f,0x20,0x40,
+0x68,0xc4,0x20,0x40,0x60,0xd7,0x20,0x40,0x00,0xc2,0x20,0x20,0x40,0x0a,0x20,0x75,
+0x80,0x00,0x20,0x20,0x7b,0x9a,0x20,0x30,0x80,0xd4,0x70,0x89,0x55,0xd4,0x20,0x00,
+0x00,0x04,0x70,0x89,0x55,0xd2,0x20,0x00,0x00,0x04,0x70,0x89,0x55,0xd1,0x20,0x00,
+0x00,0x04,0x6f,0xe2,0x41,0xdf,0xc0,0x00,0x00,0xd2,0xc0,0x00,0x80,0xe2,0xc0,0x01,
+0x00,0xd2,0xc0,0x01,0x80,0xe2,0xc0,0x02,0x00,0xe2,0xc0,0x10,0x00,0xe2,0x70,0x89,
+0x55,0xd0,0x70,0x89,0x56,0xe0,0x18,0x00,0x2a,0x08,0x18,0x00,0x2a,0x00,0x78,0x50,
+0xfc,0x00,0x78,0x50,0x7c,0x00,0x78,0x2f,0x7c,0x00,0x70,0x89,0x02,0x00,0x70,0x89,
+0x01,0x00,0x70,0x89,0x00,0x00,0x70,0x89,0x03,0x00,0x70,0x89,0x04,0x70,0x6f,0xe2,
+0x89,0x06,0x79,0x20,0x7e,0x00,0x67,0xe2,0x89,0x06,0x20,0x60,0x00,0x00,0x70,0x89,
+0x55,0xd0,0x70,0x89,0x56,0xc0,0x20,0x20,0x00,0xd4,0x60,0x42,0x00,0x17,0x20,0x40,
+0x49,0x2a,0x20,0x40,0x49,0x80,0x58,0x00,0x05,0x00,0x20,0x40,0x4a,0x8e,0x6f,0xe2,
+0x89,0x06,0x79,0x20,0x7e,0x00,0x67,0xe2,0x89,0x06,0x20,0x20,0x49,0x37,0x70,0x89,
+0x06,0x7c,0x20,0x75,0x80,0x00,0x58,0x00,0x00,0x00,0x67,0xe4,0x41,0xdd,0x1c,0x43,
+0x7e,0x00,0x67,0xe8,0x40,0x94,0x20,0x60,0x00,0x00,0x20,0x20,0x4b,0x7f,0x58,0x00,
+0x01,0x08,0x67,0xe4,0x41,0xf4,0x58,0x00,0x01,0x27,0x67,0xe4,0x41,0xf6,0x58,0x00,
+0x01,0x3b,0x67,0xe4,0x41,0xfe,0x58,0x00,0x01,0x45,0x67,0xe4,0x41,0xfa,0x58,0x00,
+0x01,0x5a,0x67,0xe4,0x41,0xea,0x58,0x00,0x01,0x6c,0x67,0xe4,0x41,0xf2,0x58,0x00,
+0x01,0x75,0x67,0xe4,0x45,0x41,0x20,0x40,0x4d,0xaf,0x20,0x40,0x4d,0xbc,0x20,0x40,
+0x4c,0x2a,0x20,0x20,0x50,0x4d,0x20,0x40,0x01,0x71,0x20,0x40,0x56,0x48,0x24,0x7a,
+0x00,0x00,0x20,0x20,0x4e,0x3d,0x68,0x44,0x4f,0xf4,0x6f,0xe4,0x4f,0xf6,0x98,0x46,
+0x7e,0x00,0x20,0x62,0x80,0x00,0x20,0x20,0x01,0x0c,0x20,0x40,0x01,0x0c,0x58,0x00,
+0x18,0x00,0x67,0xe4,0x4f,0xf0,0x67,0xe4,0x4f,0xf4,0x67,0xe4,0x4f,0xf6,0x6f,0xe4,
+0x4f,0xf2,0x67,0xe4,0x80,0x4a,0x6f,0xe4,0x4f,0xf0,0x67,0xe4,0x80,0x48,0x1f,0xe2,
+0x14,0x00,0x20,0x60,0x00,0x00,0x20,0x40,0x01,0x0c,0x58,0x00,0x1c,0x00,0x67,0xe4,
+0x4f,0xf0,0x67,0xe4,0x4f,0xf4,0x67,0xe4,0x4f,0xf6,0x6f,0xe4,0x4f,0xf2,0x67,0xe4,
+0x80,0x4a,0x6f,0xe4,0x4f,0xf0,0x67,0xe4,0x80,0x48,0x1f,0xe2,0x14,0x00,0x20,0x60,
+0x00,0x00,0x1a,0x62,0x7e,0x00,0xc0,0x04,0x81,0x31,0xc0,0x01,0x01,0x2f,0xc0,0x0a,
+0x01,0x38,0xc0,0x04,0x01,0x2d,0x20,0x20,0x4d,0xdf,0x20,0x40,0x01,0x11,0x20,0x20,
+0x4e,0x02,0x70,0x4a,0xd0,0x00,0x20,0x20,0x4d,0xfb,0x6f,0xe2,0x4a,0xcf,0x24,0x5a,
+0x01,0x36,0x20,0x40,0x01,0x1c,0x70,0x4a,0xd0,0x06,0x20,0x20,0x4e,0x08,0x70,0x4a,
+0xd0,0x06,0x20,0x60,0x00,0x00,0x20,0x40,0x01,0x1c,0x20,0x40,0x03,0xf9,0x20,0x20,
+0x4e,0x28,0x20,0x40,0x01,0x3d,0x20,0x20,0x50,0xc3,0x6f,0xe2,0x4a,0xd0,0x20,0x7a,
+0x00,0x00,0x1f,0xe0,0xff,0xff,0x67,0xe2,0x4a,0xd0,0x24,0x7a,0x00,0x00,0x6f,0xe4,
+0x46,0x52,0xc2,0x80,0x4d,0x64,0x20,0x60,0x00,0x00,0x20,0x40,0x4f,0x11,0x20,0x74,
+0x00,0x00,0x1a,0x22,0x7e,0x00,0x67,0xe4,0x46,0x71,0x20,0x40,0x01,0x51,0x67,0xe2,
+0x46,0x70,0x68,0x44,0x04,0x74,0x60,0x44,0x46,0x73,0x20,0x40,0x5b,0x6c,0x24,0x3a,
+0x4a,0x8b,0x6f,0xe2,0x04,0x9e,0x20,0x20,0x50,0x42,0x6f,0xe2,0x4b,0xed,0x24,0x3a,
+0x01,0x55,0x1f,0x22,0x7e,0x00,0x20,0x60,0x00,0x00,0x1a,0x42,0x7e,0x00,0x20,0x60,
+0x00,0x00,0xef,0xe2,0x00,0x03,0x67,0xe2,0x4b,0xf2,0x20,0x20,0x50,0x1f,0x20,0x40,
+0x02,0xda,0x24,0x34,0x01,0x6a,0x6f,0xe2,0x4b,0xf2,0x1f,0xe2,0x0e,0x00,0x6f,0xec,
+0x81,0x0e,0xaf,0xef,0xff,0xff,0x20,0x20,0x81,0x6a,0x6f,0xe2,0x4b,0xf3,0x24,0x3a,
+0x01,0x6a,0x6f,0xe2,0x4f,0xef,0xc0,0x00,0x81,0x6a,0x6f,0xe2,0x44,0x96,0xc0,0x80,
+0x01,0x68,0x20,0x20,0x4d,0x4d,0xc0,0x7f,0xcd,0x4d,0x20,0x20,0x01,0x6a,0x20,0x40,
+0x67,0xbc,0x20,0x20,0x4d,0x4b,0x20,0x40,0x01,0x74,0x20,0x40,0x01,0x71,0x20,0x40,
+0x56,0x48,0x24,0x7a,0x00,0x00,0x20,0x20,0x4e,0x3d,0x20,0x40,0x03,0x0c,0x20,0x21,
+0x4d,0x54,0x20,0x20,0x4d,0x56,0x20,0x60,0x00,0x00,0x20,0x40,0x4d,0xd7,0x70,0x0a,
+0xff,0x07,0x6f,0xe4,0x04,0xfb,0x20,0x7a,0x00,0x00,0x1f,0xe2,0x72,0x00,0x6f,0xe4,
+0x04,0xfb,0x9f,0x26,0x7e,0x00,0x67,0xe4,0x04,0xfb,0x1f,0x22,0x7e,0x00,0x20,0x40,
+0x02,0x26,0x6f,0xe4,0x04,0xfd,0x1f,0xe2,0x0c,0x00,0x20,0x40,0x67,0xc1,0x18,0xc2,
+0x7e,0x00,0x67,0xe4,0x04,0xfd,0x20,0x40,0x67,0xb9,0x20,0x20,0x01,0x76,0x6f,0xe2,
+0x0a,0xff,0xc0,0x13,0x81,0xf8,0xc0,0x06,0x01,0x93,0xc0,0x3b,0x01,0x9c,0xc0,0x3b,
+0x81,0xa2,0xc0,0x3c,0x01,0xa7,0xc0,0x0a,0x81,0xe1,0xc0,0x7f,0x01,0xe4,0xc0,0x20,
+0x01,0x57,0xc0,0x7f,0x81,0x91,0x20,0x20,0x4e,0x5c,0x70,0x4b,0xf3,0x00,0x20,0x20,
+0x50,0x0c,0x1a,0x22,0x06,0x00,0xef,0xe2,0x00,0x03,0xc0,0x00,0x4f,0x1c,0xc0,0x00,
+0xcf,0x1f,0xc0,0x01,0x4f,0x25,0xc0,0x01,0x81,0x9a,0x20,0x20,0x50,0x1c,0x58,0x00,
+0x00,0x01,0x20,0x20,0x4f,0x20,0xd8,0x40,0x00,0x0c,0x20,0x40,0x5b,0x4d,0x18,0xc0,
+0x8b,0xfe,0x58,0x00,0x00,0x00,0xe7,0xe4,0x00,0x05,0x20,0x20,0x50,0x1f,0x20,0x40,
+0x01,0xab,0x20,0x40,0x01,0xc8,0x58,0x00,0x00,0x00,0xe7,0xe4,0x00,0x05,0x20,0x20,
+0x01,0xda,0xef,0xe2,0x00,0x03,0x20,0x40,0x01,0xaf,0x20,0x40,0x01,0xb6,0x20,0x20,
+0x01,0xda,0x20,0x40,0x01,0xcc,0x58,0x28,0x00,0x02,0xe7,0xe6,0x00,0x05,0x20,0x60,
+0x00,0x00,0x67,0xe2,0x0a,0x96,0x20,0x40,0x01,0xcc,0x59,0x28,0x03,0x02,0xe7,0xe8,
+0x00,0x05,0x6f,0xe2,0x0a,0x96,0xe7,0xe6,0x00,0x05,0x20,0x60,0x00,0x00,0x20,0x40,
+0x01,0xcc,0x20,0x40,0x01,0xc8,0x20,0x40,0x01,0xc8,0x58,0x00,0x00,0x00,0xe7,0xe4,
+0x00,0x05,0x18,0x40,0x85,0xff,0x20,0x40,0x5b,0x4d,0x18,0xc0,0x8c,0x04,0xef,0xe2,
+0x00,0x06,0xc2,0x82,0x01,0xc3,0xc2,0x82,0x81,0xc3,0x18,0x40,0x84,0x01,0x20,0x60,
+0x00,0x00,0x20,0x40,0x01,0xcc,0x5a,0x29,0x02,0x02,0xe7,0xf0,0x00,0x05,0x18,0x40,
+0x85,0xff,0x20,0x60,0x00,0x00,0xef,0xe2,0x00,0x03,0x1f,0xe2,0x72,0x00,0xe7,0xe2,
+0x00,0x05,0x20,0x20,0x67,0xed,0x20,0x40,0x01,0xcf,0xe0,0x44,0x00,0x05,0x20,0x60,
+0x00,0x00,0x6f,0xe4,0x44,0x8e,0x98,0x00,0x0c,0x00,0xef,0xe4,0x00,0x06,0x20,0x7a,
+0x00,0x00,0x1f,0xe0,0x84,0x01,0xef,0xe2,0x00,0x06,0x98,0xc0,0x8c,0x00,0xef,0xe2,
+0x00,0x06,0x98,0xc0,0x8c,0x00,0x18,0xc2,0x0a,0x00,0x20,0x20,0x01,0xd1,0x60,0x44,
+0x0a,0x9e,0x70,0x0a,0xff,0x29,0x58,0x00,0x00,0x02,0x20,0x40,0x50,0xa5,0x68,0x44,
+0x0a,0x9e,0xe0,0x44,0x00,0x0a,0x20,0x20,0x67,0xb9,0xef,0xe6,0x00,0x03,0x67,0xe6,
+0x40,0xaa,0x20,0x20,0x50,0x1f,0xef,0xe2,0x00,0x03,0xc0,0x00,0x01,0xef,0xc0,0x00,
+0x81,0xe9,0xc0,0x01,0x01,0xf5,0x20,0x20,0x50,0x1c,0xef,0xe4,0x00,0x03,0x1f,0xe2,
+0x24,0x00,0xef,0xe2,0x00,0x03,0x1f,0xe2,0x22,0x00,0xd8,0x40,0x00,0x00,0x20,0x20,
+0x50,0x2a,0xef,0xe4,0x00,0x03,0x1f,0xe2,0x0a,0x00,0xef,0xe2,0x00,0x03,0x1f,0xe2,
+0x72,0x00,0x20,0x40,0x67,0xda,0x20,0x20,0x50,0x1f,0xef,0xe2,0x00,0x03,0x1f,0xe2,
+0x2c,0x00,0x20,0x20,0x50,0x1f,0x20,0x40,0x50,0x1f,0x20,0x20,0x4d,0x85,0x6f,0xe2,
+0x46,0x79,0xc2,0x81,0x82,0xec,0x6f,0xe2,0x46,0x79,0xc3,0x83,0x80,0x00,0x18,0x40,
+0xff,0xfd,0xd8,0x40,0x00,0xc8,0x20,0x40,0x7d,0xb5,0x68,0x42,0x46,0x7a,0x20,0x40,
+0x7d,0xb5,0x1f,0xe2,0x22,0x00,0x18,0x42,0x7e,0x00,0x9a,0x26,0x7e,0x00,0x67,0xe2,
+0x46,0x7a,0x68,0x44,0x46,0x7b,0x18,0x40,0x85,0xff,0x20,0x40,0x5b,0x4d,0x20,0x3a,
+0x02,0x17,0xe8,0x48,0x00,0x06,0x59,0x28,0x03,0x02,0x98,0x46,0x7c,0x00,0x24,0x22,
+0x82,0x17,0xef,0xe2,0x00,0x06,0xc2,0x82,0x82,0x13,0xc2,0x82,0x4f,0x01,0x20,0x20,
+0x02,0x17,0x20,0x40,0x03,0xff,0x68,0x44,0x46,0x7b,0x20,0x40,0x5e,0x4d,0x20,0x20,
+0x4f,0x03,0x70,0x46,0x7a,0x00,0x70,0x0b,0x01,0x01,0x20,0x40,0x50,0xe0,0x20,0x20,
+0x50,0x1c,0x6f,0xe2,0x0a,0xff,0x67,0xe4,0x4b,0xfa,0x70,0x4b,0xf9,0x02,0x6f,0xe2,
+0x0b,0x00,0x67,0xe4,0x4b,0xfb,0x60,0x50,0x0a,0x9e,0x68,0x50,0x0a,0x9e,0x20,0x40,
+0x67,0xb5,0x6f,0xe8,0x4b,0xf9,0xe7,0xe8,0x00,0x0a,0x20,0x60,0x00,0x00,0x67,0xe4,
+0x4b,0xfb,0x6f,0xe2,0x0a,0xff,0x67,0xe2,0x4b,0xfa,0x70,0x4b,0xf9,0x02,0x60,0x50,
+0x0a,0x9e,0x68,0x50,0x0a,0x9e,0x20,0x40,0x67,0xb5,0x6f,0xe8,0x4b,0xf9,0xe7,0xe8,
+0x00,0x0a,0x20,0x60,0x00,0x00,0xda,0x40,0x00,0x00,0x20,0x40,0x56,0x48,0x24,0x3a,
+0x4a,0x8b,0x20,0x40,0x56,0x58,0xda,0x40,0x0c,0x00,0xd8,0xe0,0x00,0x00,0x20,0x20,
+0x56,0x21,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x57,0x09,0x20,0x40,0x57,0x09,0x70,0x4a,
+0xdb,0x01,0x70,0x4a,0xdc,0x00,0x58,0x00,0x00,0x00,0x67,0xf0,0x4a,0xd1,0x58,0x00,
+0x00,0x1b,0x67,0xe4,0x4a,0xd9,0x20,0x60,0x00,0x00,0x20,0x40,0x49,0xba,0x78,0x23,
+0xfc,0x00,0x78,0x24,0xfc,0x00,0x09,0x80,0x00,0x08,0x19,0x89,0x7e,0x00,0x67,0xe2,
+0x02,0xd5,0x09,0x80,0x00,0x08,0x19,0x89,0x7e,0x00,0xe7,0xe2,0x00,0x05,0x1f,0xe2,
+0x72,0x00,0x20,0x3a,0x58,0x8b,0x20,0x20,0x58,0x87,0x20,0x40,0x58,0xa3,0x20,0x40,
+0x49,0x15,0x68,0x42,0x00,0x17,0x20,0x40,0x49,0x1c,0x20,0x00,0x05,0xdc,0x20,0x40,
+0x49,0x21,0x78,0x28,0x7c,0x00,0xd9,0x60,0x15,0x7c,0x20,0x20,0x58,0x69,0x20,0x40,
+0x57,0xaf,0x20,0x40,0x02,0x59,0x20,0x20,0x58,0xa7,0x20,0x36,0x80,0xea,0xc5,0x16,
+0x00,0xea,0x20,0x20,0x57,0xbe,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x58,0xb3,0x6f,0xe2,
+0x4a,0xdb,0x08,0x00,0x86,0x08,0xef,0xe2,0x00,0x06,0x1f,0xe2,0x72,0x00,0x08,0x00,
+0x86,0x08,0x20,0x22,0xd8,0xbc,0x20,0x20,0x58,0xb9,0x6f,0xe2,0x4b,0xed,0x24,0x3a,
+0x58,0xc4,0x6f,0xe2,0x44,0x56,0xc0,0x00,0xd8,0xd3,0x6f,0xe2,0x44,0x57,0x1f,0xf2,
+0x7e,0x00,0x1f,0xeb,0xfe,0x00,0x67,0xe2,0x4a,0xdb,0x68,0x42,0x43,0x41,0x18,0x40,
+0xfe,0x06,0x67,0xe2,0x4a,0xdc,0x6f,0xec,0x44,0x72,0x67,0xec,0x4a,0xdd,0x18,0x42,
+0x72,0x00,0xd8,0xc0,0x43,0x42,0x20,0x40,0x7c,0xcf,0x20,0x20,0x58,0xde,0x6f,0xe2,
+0x4b,0xed,0x24,0x3a,0x58,0xf7,0xd8,0x40,0x00,0x04,0x6f,0xe2,0x44,0x57,0x7d,0x3a,
+0x04,0x06,0x60,0x42,0x4a,0xdb,0x68,0x42,0x43,0x61,0x18,0x40,0xfe,0x06,0x67,0xe2,
+0x4a,0xdc,0x6f,0xec,0x44,0x72,0x67,0xec,0x4a,0xdd,0xd8,0xc0,0x43,0x62,0x18,0x42,
+0x72,0x00,0x20,0x40,0x7c,0xcf,0x20,0x40,0x58,0xa1,0x20,0x20,0x5a,0xe2,0x20,0x40,
+0x5a,0xc9,0xc6,0x16,0x00,0x00,0x20,0x40,0x59,0x9a,0x6f,0xe2,0x02,0xd5,0x2f,0xef,
+0xfe,0x04,0x79,0x20,0x80,0x2a,0x1f,0xe3,0x7e,0x00,0x98,0x42,0xfe,0x00,0x2f,0xef,
+0xfe,0x02,0x79,0x20,0x80,0x0f,0xc6,0x07,0x80,0x00,0x6f,0xe2,0x02,0xd6,0x20,0x3a,
+0x02,0x99,0x6f,0xe2,0x04,0x3b,0xc3,0x02,0x02,0x99,0x20,0x40,0x73,0x42,0x20,0x40,
+0x72,0xb2,0x7d,0x3a,0x00,0x0f,0x24,0x7a,0x00,0x00,0x68,0x42,0x04,0x52,0x79,0x40,
+0x04,0x02,0x60,0x42,0x04,0x52,0x6f,0xe2,0x4b,0xed,0x24,0x7a,0x00,0x00,0x20,0x20,
+0x02,0x9f,0x6f,0xe2,0x02,0xd6,0x20,0x7a,0x00,0x00,0x6f,0xe2,0x02,0xd5,0x2f,0xe0,
+0x06,0x01,0x20,0x20,0x82,0xc7,0x2f,0xe0,0x06,0x02,0x20,0x20,0x82,0xa7,0x20,0x60,
+0x00,0x00,0x6f,0xe4,0x02,0xd9,0xc1,0x82,0x00,0x00,0xef,0xe6,0x00,0x06,0x67,0xe6,
+0x04,0x73,0x79,0x20,0x00,0x0f,0xc0,0x09,0x02,0xbb,0xc0,0x29,0x02,0xbd,0xc0,0x0b,
+0x02,0xb4,0xc0,0x0c,0x5e,0x3b,0xc0,0x01,0x5c,0xa1,0xc0,0x0f,0x03,0xf9,0x79,0x3f,
+0x80,0x0f,0x20,0x60,0x00,0x00,0x58,0x00,0x0b,0x1e,0x67,0xe4,0x4a,0xd5,0x20,0x40,
+0x02,0xc0,0x1f,0x20,0xf3,0xfe,0xda,0x20,0x02,0xe0,0x20,0x40,0x5a,0xbe,0x20,0x20,
+0x02,0xe0,0x20,0x40,0x02,0xbd,0x20,0x20,0x02,0xd7,0x20,0x40,0x02,0xc0,0xda,0x20,
+0x02,0xde,0x20,0x20,0x5a,0xbe,0x6f,0xe2,0x02,0xd6,0x1f,0xe0,0xf3,0xf9,0x1f,0xe0,
+0xff,0xfc,0x67,0xe4,0x4a,0xd1,0xe8,0x44,0x00,0x06,0x60,0x44,0x4a,0xd3,0x20,0x60,
+0x00,0x00,0x79,0x20,0x00,0x0f,0x20,0x40,0x02,0xcf,0x6f,0xe2,0x04,0x73,0xc0,0x09,
+0x02,0xd7,0xc0,0x0b,0x02,0xd6,0xc1,0x29,0x00,0x00,0x79,0x3f,0x80,0x0f,0x20,0x60,
+0x00,0x00,0x6f,0xe2,0x02,0xd6,0x68,0x44,0x4a,0xd1,0x98,0x40,0x84,0x00,0x60,0x44,
+0x4a,0xd1,0x1f,0xe2,0x72,0x00,0xda,0x20,0x02,0xd7,0x20,0x20,0x5a,0xbe,0x20,0x20,
+0x02,0xe0,0x20,0x40,0x02,0xda,0x24,0x74,0x00,0x00,0x20,0x20,0x5e,0x13,0x20,0x40,
+0x7d,0xc1,0x6f,0xe4,0x4a,0xd3,0x68,0x44,0x4a,0xd1,0x98,0x46,0x7c,0x00,0x24,0x62,
+0x80,0x00,0x20,0x20,0x7d,0xbf,0x6f,0xe4,0x4a,0xd5,0x1f,0xe2,0x0a,0x00,0x6f,0xe2,
+0x02,0xd6,0x1f,0xe2,0x72,0x00,0x20,0x40,0x7c,0xdc,0x18,0xa2,0x7e,0x00,0x67,0xe4,
+0x4a,0xd5,0x20,0x40,0x02,0xda,0x24,0x74,0x00,0x00,0xd8,0xe0,0x00,0x03,0x20,0x40,
+0x50,0xe6,0x20,0x20,0x02,0xec,0x20,0x40,0x5c,0x74,0x24,0x7a,0x00,0x00,0x70,0x0b,
+0x22,0x17,0x58,0x00,0x0b,0x1e,0x67,0xe4,0x4a,0xd7,0x68,0x44,0x0b,0x1e,0x18,0x40,
+0x84,0x04,0x58,0x00,0x00,0xf9,0x20,0x40,0x7d,0xb5,0x1f,0xe0,0xa5,0xfc,0x18,0x00,
+0x02,0x02,0x1f,0xe2,0x22,0x00,0x20,0x40,0x5c,0x32,0x6f,0xe4,0x4a,0xd7,0x1f,0xe2,
+0x0c,0x00,0x1a,0x22,0x72,0x00,0x20,0x40,0x7c,0xcf,0x18,0xc2,0x7e,0x00,0x67,0xe4,
+0x4a,0xd7,0x6f,0xe4,0x0b,0x1e,0x9a,0x46,0x7e,0x00,0x67,0xe4,0x0b,0x1e,0x20,0x3a,
+0x03,0x08,0xd8,0x40,0x00,0xf9,0x20,0x40,0x7d,0xb5,0x1f,0xe2,0x24,0x00,0x18,0x00,
+0x02,0x01,0x20,0x20,0x02,0xf7,0x58,0x00,0x00,0x00,0x67,0xe4,0x4a,0xd5,0xd8,0xe0,
+0x00,0x03,0x20,0x20,0x50,0xe2,0x70,0x4b,0xf4,0x00,0x68,0x44,0x4f,0xf0,0x6f,0xe4,
+0x4f,0xf2,0x98,0x46,0x22,0x00,0x68,0x44,0x4f,0xf4,0x6f,0xe4,0x4f,0xf6,0x60,0x44,
+0x4b,0xf7,0x67,0xe4,0x4b,0xf5,0x98,0x46,0x7e,0x00,0x20,0x21,0x03,0x1c,0x20,0x22,
+0x83,0x1c,0x1a,0x22,0x04,0x00,0x6f,0xe4,0x4b,0xf5,0x98,0x40,0xfe,0x00,0x68,0x44,
+0x4b,0xf7,0x98,0x46,0x7e,0x00,0xd8,0x40,0x02,0xc0,0x98,0x46,0x7c,0x00,0x24,0x61,
+0x00,0x00,0x70,0x4b,0xf4,0x01,0x20,0x60,0x00,0x00,0x68,0x42,0x04,0x52,0x28,0x4c,
+0x00,0x05,0x20,0x60,0x80,0x00,0x6f,0xe2,0x02,0xd5,0x1f,0xe3,0xfe,0x00,0x98,0x42,
+0xfe,0x00,0xc4,0x01,0x80,0x00,0x79,0x3f,0x84,0x05,0x79,0x40,0x04,0x03,0x60,0x42,
+0x04,0x52,0x28,0x40,0x06,0x03,0x24,0x60,0x80,0x00,0x6f,0xe2,0x4b,0xed,0x24,0x3a,
+0x03,0x31,0x6f,0xe2,0x4a,0xdd,0x20,0x20,0x03,0x32,0x6f,0xe2,0x43,0xb0,0xc0,0x02,
+0xd9,0xac,0x6f,0xe2,0x44,0x97,0xc0,0x01,0x59,0xb0,0x20,0x60,0x00,0x00,0x6f,0xe2,
+0x04,0x52,0xc3,0x82,0x80,0x00,0x20,0x40,0x5a,0x1c,0x6f,0xe2,0x4b,0xed,0x24,0x3a,
+0x59,0xfc,0x20,0x40,0x5c,0x53,0x20,0x3a,0x5a,0x3e,0xef,0xe2,0x00,0x06,0xe8,0x42,
+0x00,0x06,0x18,0x42,0x22,0x00,0x9a,0x26,0x7e,0x00,0x20,0x40,0x03,0x5b,0x20,0x40,
+0x7d,0xb5,0x1f,0xe2,0x04,0x00,0xef,0xe2,0x00,0x06,0x1f,0xe2,0x02,0x00,0x1a,0x22,
+0x7e,0x00,0x98,0xc0,0x8c,0x00,0xd8,0xa0,0x4a,0xdd,0x18,0x42,0x72,0x00,0x20,0x40,
+0x7c,0xcf,0x20,0x40,0x5a,0x2e,0x20,0x40,0x5a,0x40,0x20,0x40,0x5c,0x53,0xef,0xe2,
+0x00,0x06,0x1f,0xe2,0x22,0x00,0x18,0xc2,0x26,0x00,0xe8,0x42,0x00,0x06,0x18,0x42,
+0x24,0x00,0x9a,0x46,0x7e,0x00,0x20,0x40,0x03,0x5b,0x20,0x40,0x7d,0xb5,0x9a,0x40,
+0xfe,0x00,0xe7,0xe2,0x00,0x13,0x9a,0x26,0x7c,0x00,0x24,0x62,0x80,0x00,0x20,0x20,
+0x5c,0x76,0x18,0xc2,0x0a,0x00,0x68,0x44,0x4a,0xd9,0x18,0xa2,0x0c,0x00,0x20,0x60,
+0x00,0x00,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x5a,0x41,0x60,0x42,0x4a,0xdc,0x68,0x42,
+0x04,0x52,0x79,0x20,0x04,0x05,0x18,0x41,0x7e,0xfc,0x98,0x21,0xfe,0x00,0x67,0xe2,
+0x04,0x52,0x1f,0xe1,0x7e,0x1f,0x28,0x0f,0xfe,0x29,0x79,0x20,0xfe,0x04,0x67,0xe2,
+0x4a,0xdb,0x6f,0xe2,0x4a,0xdb,0x28,0x20,0x06,0x01,0x24,0x20,0x83,0x70,0x6f,0xe2,
+0x4a,0xdc,0x20,0x7a,0x00,0x00,0x6f,0xe2,0x04,0x3b,0xc4,0x02,0x00,0x00,0x20,0x40,
+0x73,0x42,0x20,0x20,0x72,0x99,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x72,0x9a,0xda,0x60,
+0x4a,0xdb,0x68,0x4a,0x43,0xd5,0x20,0x40,0x72,0x77,0x18,0x00,0x70,0x08,0x98,0x00,
+0x5e,0x00,0x18,0x00,0x22,0x00,0x20,0x40,0x72,0x63,0x20,0x40,0x72,0xe8,0xda,0x60,
+0x4a,0xdd,0x6f,0xe2,0x4a,0xdc,0x1f,0xe0,0xa5,0xff,0x9a,0x60,0x8a,0x00,0x18,0x00,
+0x70,0x0c,0x1d,0xe2,0x7e,0x00,0xe7,0xe8,0x00,0x05,0x20,0x40,0x72,0x8e,0x6f,0xe2,
+0x4a,0xdc,0x1f,0xe0,0xfe,0x04,0x67,0xe2,0x4a,0xdc,0x68,0x4a,0x43,0xd5,0x18,0x40,
+0x84,0x01,0x60,0x4a,0x43,0xd5,0x20,0x60,0x00,0x00,0xc6,0x07,0x80,0x00,0xc6,0x16,
+0x00,0x00,0x20,0x40,0x5c,0x70,0x24,0x7a,0x00,0x00,0x6f,0xe2,0x02,0xd5,0x1f,0xe1,
+0x7e,0x03,0x67,0xe2,0x44,0xde,0xef,0xe2,0x00,0x06,0x67,0xe2,0x44,0xdd,0x20,0x7a,
+0x00,0x00,0x18,0xc2,0x7e,0x00,0x67,0xe4,0x44,0xdf,0x6f,0xe2,0x44,0xde,0xc0,0x01,
+0x83,0xce,0x20,0x40,0x03,0xa0,0xd8,0xe0,0x00,0x03,0x24,0x34,0x4b,0xec,0x20,0x40,
+0x4b,0xf0,0x20,0x20,0x5a,0x6b,0x6f,0xe2,0x44,0xde,0xc0,0x01,0x03,0xa4,0xc0,0x00,
+0x83,0xb8,0x20,0x60,0x00,0x00,0x6f,0xe4,0x44,0xdf,0x1f,0xe2,0x0c,0x00,0xef,0xe4,
+0x00,0x06,0x67,0xe4,0x44,0xce,0xef,0xe4,0x00,0x06,0x20,0x40,0x5a,0x7a,0x24,0x74,
+0x00,0x00,0x68,0x42,0x44,0xdd,0x60,0x42,0x44,0xd0,0x6f,0xe4,0x44,0xce,0x1f,0xe0,
+0xfe,0x04,0x98,0x46,0x7c,0x00,0x20,0x22,0xfd,0xbf,0x6f,0xe2,0x44,0xdd,0x1f,0xe2,
+0x72,0x00,0xd8,0xa0,0x0d,0x7d,0x6f,0xe4,0x44,0xdf,0x1f,0xe2,0x0c,0x00,0x20,0x40,
+0x7c,0xdc,0x20,0x20,0x7d,0xc1,0x20,0x40,0x5a,0x99,0x24,0x74,0x00,0x00,0x6f,0xe2,
+0x44,0xd0,0xd8,0xa0,0x0d,0x7d,0x98,0xa0,0xa2,0x00,0x68,0x42,0x44,0xdd,0x98,0x40,
+0xfe,0x00,0x67,0xe2,0x44,0xd0,0x6f,0xe2,0x44,0xdd,0x1f,0xe2,0x72,0x00,0x1a,0x22,
+0x0a,0x00,0x6f,0xe4,0x44,0xdf,0x1f,0xe2,0x0c,0x00,0x20,0x40,0x7c,0xcf,0x58,0x00,
+0x0d,0x7d,0x67,0xe4,0x44,0xdf,0x6f,0xe4,0x44,0xce,0x1f,0xe0,0xfe,0x04,0x68,0x42,
+0x44,0xd0,0x98,0x46,0x7c,0x00,0x20,0x22,0xfd,0xbf,0x20,0x20,0x7d,0xc1,0x6f,0xe2,
+0x02,0xd7,0xc0,0x04,0x03,0xd2,0xc0,0x0a,0x03,0xe0,0x20,0x20,0x60,0x45,0xda,0x20,
+0x00,0x09,0xda,0x40,0x00,0x09,0x20,0x40,0x5c,0x22,0x58,0x00,0x00,0x21,0xe7,0xf0,
+0x00,0x05,0x20,0x40,0x03,0xd9,0x20,0x60,0x00,0x00,0x6f,0xe2,0x02,0xd8,0x1f,0xe1,
+0x7e,0x20,0x20,0x3a,0x03,0xde,0x70,0x4b,0xed,0x00,0x20,0x60,0x00,0x00,0x70,0x4b,
+0xed,0x01,0x20,0x60,0x00,0x00,0xef,0xe4,0x00,0x06,0x67,0xe4,0x4a,0xd9,0x20,0x20,
+0x03,0xe3,0xda,0x20,0x00,0x09,0xda,0x40,0x00,0x15,0x20,0x40,0x5c,0x22,0x58,0x00,
+0x00,0xfb,0xe7,0xe4,0x00,0x05,0x58,0x00,0x08,0x48,0xe7,0xe4,0x00,0x05,0x58,0x00,
+0x00,0xfb,0xe7,0xe4,0x00,0x05,0x58,0x00,0x08,0x48,0xe7,0xe4,0x00,0x05,0x20,0x60,
+0x00,0x00,0xef,0xe4,0x00,0x06,0xc0,0x02,0x03,0xf4,0xc0,0x03,0x5e,0xd4,0xc0,0x02,
+0xde,0x96,0x20,0x60,0x00,0x00,0xef,0xe6,0x00,0x06,0x67,0xe6,0x04,0x73,0xc0,0x08,
+0x03,0xfb,0xc0,0x04,0x04,0x04,0x20,0x20,0x5c,0x8d,0xd8,0xe0,0x00,0x07,0x20,0x20,
+0x50,0xe2,0x20,0x40,0x5e,0x91,0x20,0x40,0x5a,0xb3,0xd9,0x60,0x00,0x01,0x20,0x20,
+0x5d,0xde,0xd8,0xe0,0x00,0x07,0x20,0x20,0x50,0xe6,0x20,0x40,0x5c,0xa9,0x67,0xe4,
+0x44,0x78,0x20,0x20,0x5c,0xa2,0x20,0x40,0x5e,0x91,0x20,0x40,0x5a,0xbb,0x20,0x20,
+0x04,0x07,0x68,0x44,0x44,0x2c,0x60,0x44,0x0a,0x9e,0x20,0x40,0x5b,0x36,0x20,0x40,
+0x5b,0x4d,0x18,0xc0,0x8d,0xfe,0x18,0xc2,0x7e,0x00,0x67,0xe4,0x04,0x98,0x68,0x44,
+0x44,0x44,0x58,0x00,0x2a,0x00,0x98,0x46,0x7c,0x00,0x20,0x22,0x84,0x13,0x20,0x20,
+0x5d,0x2d,0xd8,0x40,0x2a,0x00,0x20,0x40,0x5b,0x5c,0x20,0x3a,0x5e,0x56,0x20,0x20,
+0x5d,0x8b,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x5b,0xd5,0x78,0x55,0xfc,0x00,0x20,0x37,
+0x04,0x1c,0x24,0x36,0xdb,0xe6,0x20,0x40,0x4b,0xa0,0x6f,0xe4,0x40,0xc1,0x67,0xe4,
+0x04,0x49,0x24,0x36,0xcb,0xb3,0xc5,0x07,0xcb,0xb3,0x6f,0xe2,0x44,0xdd,0x24,0x3a,
+0x4b,0xb3,0x6f,0xe2,0x4a,0xdc,0x24,0x3a,0x4b,0xb3,0x6f,0xe2,0x44,0xbb,0xc2,0x82,
+0xcb,0xb3,0x6f,0xe2,0x04,0x3b,0xc2,0x82,0xcb,0xb3,0x20,0x20,0x4b,0x95,0x6f,0xe2,
+0x00,0x7d,0xc0,0x08,0x04,0x2e,0xc0,0x0b,0x84,0x34,0x20,0x20,0x60,0xfe,0x68,0x42,
+0x05,0x4e,0x18,0x46,0x7c,0x06,0x20,0x21,0x04,0x32,0x20,0x20,0x62,0x06,0x70,0x00,
+0x7e,0x24,0x20,0x20,0x61,0x34,0x20,0x20,0x62,0xb8,0x78,0x54,0x7c,0x00,0x20,0x40,
+0x66,0xa3,0x6f,0xe2,0x00,0x48,0x20,0x7a,0x00,0x00,0xc2,0x83,0x84,0x3b,0x20,0x20,
+0x63,0xf2,0xc0,0x42,0x04,0x3e,0xc0,0x41,0x84,0x41,0x20,0x20,0x64,0x21,0x20,0x40,
+0x04,0x44,0x6f,0xe2,0x00,0x48,0x20,0x20,0x64,0x7b,0x20,0x40,0x04,0x44,0x6f,0xe2,
+0x00,0x48,0x20,0x20,0x64,0xef,0x6f,0xe2,0x46,0x2c,0x20,0x3a,0x65,0x0d,0x20,0x20,
+0x65,0x06,0x6f,0xe2,0x40,0x9e,0x79,0x3f,0xfe,0x03,0x67,0xe2,0x40,0x9e,0x58,0x00,
+0x00,0x01,0x67,0xe4,0x04,0xca,0x20,0x60,0x00,0x00,0x58,0x00,0x00,0x00,0x67,0xe2,
+0x42,0x26,0x67,0xe2,0x45,0x36,0x67,0xe2,0x45,0x2f,0x6f,0xe2,0x45,0x3d,0xc0,0x00,
+0xe8,0xd7,0x70,0x45,0x3b,0x85,0x20,0x60,0x00,0x00,0x6f,0xe2,0x04,0xf9,0xc0,0x1f,
+0xe9,0x3e,0xc0,0x39,0xe9,0x47,0xc0,0x77,0x84,0x5b,0xc0,0x29,0xea,0x05,0x20,0x60,
+0x00,0x00,0x6f,0xe4,0x04,0xfd,0x1f,0xe2,0x0c,0x00,0x20,0x40,0x69,0x84,0x6f,0xe2,
+0x04,0xff,0xc0,0x20,0xe9,0x66,0xc0,0x20,0x69,0x6e,0xc0,0x38,0xe9,0xa7,0xc0,0x38,
+0x04,0x65,0xc0,0x24,0xe9,0xbe,0x20,0x20,0x6a,0x58,0x70,0x0a,0x95,0x08,0x20,0x40,
+0x7b,0xab,0x20,0x40,0x69,0x72,0x20,0x20,0x69,0xba,0x6f,0xe2,0x44,0x90,0x20,0x3a,
+0x5e,0xd0,0x20,0x40,0x74,0x38,0x20,0x20,0x79,0x32,0x92,0xad,0xaa,0x55,0x40,0x00,
+0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x00,0x20,0x00,0x01,0x00,
+0x00,0x00,0x20,0x22,0x10,0x00,0x0c,0x12,0x00,0x39,0x00,0x00,0x00,0x08,0x00,0x08,
+0x22,0x00,0xe8,0x09,0x18,0xd0,0x04,0x00,0x04,0x44,0x02,0x00,0x05,0x00,0x00,0x00,
+0x00,0x00,0x00,0x20,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0xaa,0x55,0x01,0x00,0x92,0x40,0x0a,0xaa,0x55,0x01,0x00,0x54,0x46,0x40,
+0xaa,0x55,0x01,0x00,0x06,0x42,0x13,0xaa,0x55,0x01,0x00,0x5b,0x41,0x01,0xaa,0x55,
+0x08,0x00,0x98,0x40,0xff,0xfb,0x8f,0xfa,0x8b,0x85,0x59,0x83,0xaa,0x55,0x03,0x00,
+0x14,0x42,0x25,0x4a,0x05,0xaa,0x55,0x04,0x00,0x3d,0x45,0x00,0xf7,0x01,0x07,0xaa,
+0x55,0x03,0x00,0x2d,0x46,0x03,0x00,0x04,0xaa,0x55,0x01,0x00,0x2c,0x46,0x01,0xaa,
+0x55,0x06,0x00,0x57,0x46,0x04,0x30,0x30,0x30,0x30,0x30,0xaa,0x55,0x10,0x00,0xf0,
+0x4f,0x00,0x1c,0xff,0x1f,0x00,0x1c,0x00,0x1c,0x00,0x4c,0xe0,0x4f,0x00,0x4c,0x00,
+0x4c,0xaa,0x55,0x03,0x00,0xef,0x4b,0x00,0x80,0x02,0xaa,0x55,0x02,0x00,0x68,0x46,
+0x10,0x0f,0xaa,0x55,0x01,0x00,0x6c,0x46,0x03,0xaa,0x55,0x01,0x00,0x6f,0x46,0x07,
+0xaa,0x55,0x03,0x00,0xaa,0x40,0x24,0x04,0x04,0xaa,0x55,0x01,0x00,0x79,0x46,0x00,
+0xaa,0x55,0x01,0x00,0xcf,0x4a,0x00,0xaa,0x55,0x01,0x00,0x91,0x40,0x00,0xaa,0x55,
+0x03,0x00,0x54,0x41,0x00,0x01,0x08,0xaa,0x55,0x01,0x00,0x74,0x41,0x02,0xaa,0x55,
+0x01,0x00,0x93,0x40,0x00,0xaa,0x55,0x01,0x00,0x6d,0x46,0x28,0xaa,0x55,0x06,0x00,
+0xa0,0x40,0xa7,0x2a,0x2a,0x21,0x10,0x55,0xaa,0x55,0x0f,0x00,0xe7,0x44,0x0e,0x33,
+0x31,0x32,0x31,0x20,0x4d,0x6f,0x75,0x20,0x42,0x74,0x31,0x32,0x31,0xaa,0x55,0x03,
+0x00,0xe4,0x41,0x20,0x00,0x02,0xaa,0x55,0x01,0x00,0xe8,0x41,0x01,0xaa,0x55,0x01,
+0x00,0x90,0x44,0x00,0xaa,0x55,0x01,0x00,0x5f,0x44,0x07,0xaa,0x55,0x01,0x00,0x98,
+0x44,0x00,0xaa,0x55,0x04,0x00,0x75,0x46,0x2d,0x00,0x2f,0x00,0xaa,0x55,0x01,0x00,
+0x40,0x43,0x00,0xaa,0x55,0x02,0x00,0x54,0x44,0x40,0x00,0xaa,0x55,0x01,0x00,0x6e,
+0x46,0x05,0xaa,0x55,0x06,0x00,0x72,0x44,0x21,0x22,0x01,0x33,0x02,0x3a,0xaa,0x55,
+0x0d,0x00,0x81,0x43,0x0c,0x33,0x31,0x32,0x31,0x20,0x4d,0x6f,0x75,0x20,0x42,0x6c,
+0x65,0xaa,0x55,0x04,0x00,0x41,0x43,0x03,0x02,0x01,0x02,0xaa,0x55,0x12,0x00,0x61,
+0x43,0x0e,0x02,0x01,0x02,0x0d,0x09,0x33,0x31,0x32,0x31,0x20,0x4d,0x6f,0x75,0x20,
+0x42,0x6c,0x65,0xaa,0x55,0x07,0x00,0x25,0x44,0x02,0x03,0x00,0x05,0x10,0x02,0x03,
+0xaa,0x55,0x08,0x00,0x68,0x44,0x08,0x00,0x10,0x00,0x00,0x00,0x2c,0x01,0xaa,0x55,
+0x01,0x00,0x78,0x44,0xf0,0xaa,0x55,0x01,0x00,0x7a,0x44,0x17,0xaa,0x55,0x02,0x00,
+0xcc,0x44,0x31,0x00,0xaa,0x55,0x01,0x00,0xd1,0x40,0x01,0xaa,0x55,0x0c,0x00,0x49,
+0x45,0x05,0x03,0x00,0x12,0x00,0x01,0x01,0x00,0x01,0x11,0x03,0x00,0xaa,0x55,0x12,
+0x00,0x5f,0x45,0x01,0x07,0x00,0x00,0x00,0x00,0xde,0xca,0xfa,0xde,0xde,0xca,0xde,
+0xaf,0xde,0xca,0xca,0xff,0xaa,0x55,0x02,0x00,0x47,0x45,0x83,0x46,0xaa,0x55,0xb8,
+0x00,0x83,0x46,0x03,0x12,0x00,0x01,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x36,0x00,
+0x52,0x09,0x00,0x00,0x0a,0x00,0x01,0x00,0x01,0x09,0x00,0x01,0x35,0x03,0x19,0x12,
+0x00,0x09,0x00,0x04,0x35,0x0d,0x35,0x06,0x19,0x01,0x00,0x09,0x00,0x01,0x35,0x03,
+0x19,0x00,0x01,0x09,0x00,0x09,0x35,0x08,0x35,0x06,0x19,0x12,0x00,0x09,0x01,0x00,
+0x09,0x02,0x00,0x09,0x01,0x03,0x09,0x02,0x01,0x09,0x05,0xac,0x09,0x02,0x02,0x09,
+0x02,0x39,0x09,0x02,0x03,0x09,0x06,0x44,0x09,0x02,0x04,0x28,0x01,0x09,0x02,0x05,
+0x09,0x00,0x02,0x03,0x11,0x01,0x00,0x03,0x01,0x00,0x00,0x01,0x00,0x03,0x36,0x00,
+0x46,0x09,0x00,0x00,0x0a,0x00,0x01,0x00,0x03,0x09,0x00,0x01,0x35,0x03,0x19,0x11,
+0x01,0x09,0x00,0x02,0x0a,0x00,0x00,0x00,0x00,0x09,0x00,0x04,0x35,0x0c,0x35,0x03,
+0x19,0x01,0x00,0x35,0x05,0x19,0x00,0x03,0x08,0x01,0x09,0x00,0x06,0x35,0x09,0x09,
+0x65,0x6e,0x09,0x00,0x6a,0x09,0x01,0x00,0x09,0x01,0x00,0x25,0x0a,0x53,0x50,0x50,
+0x20,0x73,0x6c,0x61,0x76,0x65,0x00,0x00,0x00,0x01,0x00,0xaa,0x55,0x02,0x00,0x8e,
+0x44,0xaf,0x47,0xaa,0x55,0x4e,0x01,0xaf,0x47,0x01,0x00,0x02,0x00,0x28,0x02,0x01,
+0x18,0x02,0x00,0x02,0x03,0x28,0x01,0x20,0x03,0x00,0x02,0x05,0x2a,0x01,0x00,0x04,
+0x00,0x02,0x02,0x29,0x02,0x01,0x00,0x05,0x00,0x02,0x00,0x28,0x02,0x00,0x18,0x06,
+0x00,0x02,0x03,0x28,0x01,0x4e,0x07,0x00,0x02,0x00,0x2a,0x13,0x41,0x73,0x74,0x20,
+0x4c,0x45,0x20,0x4d,0x6f,0x75,0x73,0x65,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x08,
+0x00,0x02,0x03,0x28,0x01,0x4e,0x09,0x00,0x02,0x01,0x2a,0x02,0x00,0x00,0x0a,0x00,
+0x02,0x03,0x28,0x01,0x02,0x0b,0x00,0x02,0x04,0x2a,0x08,0x10,0x00,0x20,0x00,0x05,
+0x00,0x2c,0x01,0x0c,0x00,0x02,0x00,0x28,0x10,0x55,0xe4,0x05,0xd2,0xaf,0x9f,0xa9,
+0x8f,0xe5,0x4a,0x7d,0xfe,0x43,0x53,0x53,0x49,0x0d,0x00,0x02,0x03,0x28,0x01,0x12,
+0x0e,0x00,0x10,0x16,0x96,0x24,0x47,0xc6,0x23,0x61,0xba,0xd9,0x4b,0x4d,0x1e,0x43,
+0x53,0x53,0x49,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x02,0x02,0x29,0x02,0x00,0x00,
+0x10,0x00,0x02,0x03,0x28,0x01,0x08,0x11,0x00,0x10,0xb3,0x9b,0x72,0x34,0xbe,0xec,
+0xd4,0xa8,0xf4,0x43,0x41,0x88,0x43,0x53,0x53,0x49,0x14,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,
+0x00,0x02,0x03,0x28,0x01,0x04,0x13,0x00,0x10,0xfe,0x69,0xca,0x9a,0x56,0x19,0xf6,
+0xab,0x02,0x4d,0xaa,0x6d,0x43,0x53,0x53,0x49,0x14,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,
+0x02,0x03,0x28,0x01,0x1a,0x15,0x00,0x10,0x18,0x03,0xa6,0x28,0x5e,0xd8,0xec,0x91,
+0x1c,0x48,0xa3,0xac,0x43,0x53,0x53,0x49,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x00,0x02,
+0x02,0x29,0x02,0x00,0x00,0x00,0x00,0xaa,0x55,0x07,0x00,0x76,0x41,0x0f,0x84,0xf0,
+0x0a,0x0b,0xb2,0x32,0xaa,0x55,0x02,0x00,0x57,0x41,0x8b,0x0b,0xaa,0x55,0x08,0x00,
+0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0x55,0x02,0x00,0xbd,0x40,
+0x02,0x24,0xaa,0x55,0x08,0x00,0xad,0x40,0x40,0x00,0x00,0x02,0x32,0x00,0x00,0x02,
+0xaa,0x55,0x02,0x00,0xbb,0x40,0x20,0x00,0xaa,0x55,0x04,0x00,0xb7,0x40,0x20,0x00,
+0x00,0x20,0xaa,0x55,0x04,0x00,0xbf,0x40,0x80,0x04,0x00,0x10,0xaa,0x55,0x05,0x00,
+0xe2,0x44,0x08,0x0e,0x05,0x04,0x00,0xaa,0x55,0x02,0x00,0x02,0x42,0x30,0x1f,0xaa,
+0x55,0x01,0x00,0x10,0x42,0x20,0xaa,0x55,0x01,0x00,0xe0,0x41,0x01,0xaa,0x55,0x0f,
+0x00,0xde,0x4b,0x4b,0xba,0x55,0xd0,0x56,0xe0,0x57,0x88,0x58,0x6c,0x59,0x10,0x07,
+0xff,0xff,0xaa,0x55,0x02,0x00,0xc3,0x40,0xde,0x4b,0xb2,0x5a
+};
Index: BT_doublebyte/sdk/Librarier/core/bt_code_boot.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/bt_code_boot.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/bt_code_boot.c	(working copy)
@@ -0,0 +1,65 @@
+const unsigned char bt_code[] = {
+0x00,0x02,0xaa,0x55,0x3e,0x00,0xc0,0x00,0x80,0x02,0xc0,0x5d,0x80,0x0a,0x20,0x40,
+0x68,0xc4,0x20,0x40,0x60,0xd7,0x20,0x40,0x00,0x08,0x70,0x89,0x06,0x7c,0x20,0x20,
+0x00,0x06,0x20,0x20,0x40,0x0a,0x20,0x75,0x80,0x00,0x20,0x20,0x7b,0x9a,0x6f,0xe2,
+0x0a,0xff,0xc0,0x13,0x80,0x0d,0x20,0x20,0x4e,0x5c,0x20,0x40,0x50,0x1f,0x20,0x20,
+0x4d,0x85,0x18,0xe3,0xaa,0x55,0x01,0x00,0x92,0x40,0x0a,0xaa,0x55,0x01,0x00,0x54,
+0x46,0x40,0xaa,0x55,0x01,0x00,0x06,0x42,0x13,0xaa,0x55,0x08,0x00,0x98,0x40,0xff,
+0xff,0x8f,0xf8,0x9b,0x9d,0x59,0x83,0xaa,0x55,0x03,0x00,0x14,0x42,0x07,0x4a,0x05,
+0xaa,0x55,0x04,0x00,0x3d,0x45,0x00,0x7f,0x00,0x07,0xaa,0x55,0x03,0x00,0x2d,0x46,
+0x03,0x00,0x04,0xaa,0x55,0x01,0x00,0x2c,0x46,0x01,0xaa,0x55,0x06,0x00,0x57,0x46,
+0x04,0x30,0x30,0x30,0x30,0x30,0xaa,0x55,0x10,0x00,0xf0,0x4f,0x00,0x1c,0xff,0x1f,
+0x00,0x1c,0x00,0x1c,0x00,0x4c,0xe0,0x4f,0x00,0x4c,0x00,0x4c,0xaa,0x55,0x02,0x00,
+0x68,0x46,0x00,0x01,0xaa,0x55,0x01,0x00,0x6c,0x46,0x03,0xaa,0x55,0x01,0x00,0x6f,
+0x46,0x07,0xaa,0x55,0x03,0x00,0xaa,0x40,0x24,0x04,0x04,0xaa,0x55,0x01,0x00,0x79,
+0x46,0x00,0xaa,0x55,0x01,0x00,0x91,0x40,0x00,0xaa,0x55,0x03,0x00,0x54,0x41,0x00,
+0x01,0x08,0xaa,0x55,0x01,0x00,0x74,0x41,0x02,0xaa,0x55,0x01,0x00,0x93,0x40,0x00,
+0xaa,0x55,0x01,0x00,0x6d,0x46,0x28,0xaa,0x55,0x06,0x00,0xa0,0x40,0xa7,0x2a,0x2a,
+0x31,0x10,0x3a,0xaa,0x55,0x0c,0x00,0xe7,0x44,0x0b,0x59,0x69,0x63,0x68,0x69,0x70,
+0x20,0x33,0x31,0x32,0x31,0xaa,0x55,0x03,0x00,0xe4,0x41,0x20,0x00,0x01,0xaa,0x55,
+0x01,0x00,0xe8,0x41,0x00,0xaa,0x55,0x01,0x00,0x90,0x44,0x01,0xaa,0x55,0x01,0x00,
+0x5f,0x44,0x07,0xaa,0x55,0x01,0x00,0x98,0x44,0x01,0xaa,0x55,0x04,0x00,0x75,0x46,
+0x09,0x00,0x2f,0x00,0xaa,0x55,0x01,0x00,0x40,0x43,0x00,0xaa,0x55,0x02,0x00,0x54,
+0x44,0xf0,0x00,0xaa,0x55,0x01,0x00,0x6e,0x46,0x05,0xaa,0x55,0x06,0x00,0x72,0x44,
+0x21,0x22,0x00,0x33,0x02,0x3a,0xaa,0x55,0x10,0x00,0x81,0x43,0x0f,0x59,0x69,0x63,
+0x68,0x69,0x70,0x20,0x33,0x31,0x32,0x31,0x20,0x4d,0x6f,0x75,0xaa,0x55,0x04,0x00,
+0x41,0x43,0x03,0x02,0x01,0x0e,0xaa,0x55,0x13,0x00,0x61,0x43,0x0e,0x11,0x09,0x59,
+0x69,0x63,0x68,0x69,0x70,0x20,0x31,0x30,0x32,0x31,0x73,0x20,0x4d,0x6f,0x75,0xaa,
+0x55,0x07,0x00,0x25,0x44,0x02,0x03,0x00,0x05,0x10,0x02,0x03,0xaa,0x55,0x08,0x00,
+0x68,0x44,0x08,0x00,0x10,0x00,0x00,0x00,0x2c,0x01,0xaa,0x55,0x01,0x00,0x78,0x44,
+0xb5,0xaa,0x55,0x01,0x00,0x7a,0x44,0x17,0xaa,0x55,0x02,0x00,0xcc,0x44,0x31,0x00,
+0xaa,0x55,0x01,0x00,0xd1,0x40,0x01,0xaa,0x55,0x0c,0x00,0x49,0x45,0x05,0x03,0x00,
+0x12,0x00,0x01,0x01,0x00,0x01,0x11,0x03,0x00,0xaa,0x55,0x01,0x00,0x5f,0x45,0x00,
+0xaa,0x55,0x02,0x00,0x47,0x45,0x83,0x46,0xaa,0x55,0xb8,0x00,0x83,0x46,0x03,0x12,
+0x00,0x01,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x36,0x00,0x52,0x09,0x00,0x00,0x0a,
+0x00,0x01,0x00,0x01,0x09,0x00,0x01,0x35,0x03,0x19,0x12,0x00,0x09,0x00,0x04,0x35,
+0x0d,0x35,0x06,0x19,0x01,0x00,0x09,0x00,0x01,0x35,0x03,0x19,0x00,0x01,0x09,0x00,
+0x09,0x35,0x08,0x35,0x06,0x19,0x12,0x00,0x09,0x01,0x00,0x09,0x02,0x00,0x09,0x01,
+0x03,0x09,0x02,0x01,0x09,0x05,0xac,0x09,0x02,0x02,0x09,0x02,0x39,0x09,0x02,0x03,
+0x09,0x06,0x44,0x09,0x02,0x04,0x28,0x01,0x09,0x02,0x05,0x09,0x00,0x02,0x03,0x11,
+0x01,0x00,0x03,0x01,0x00,0x00,0x01,0x00,0x03,0x36,0x00,0x46,0x09,0x00,0x00,0x0a,
+0x00,0x01,0x00,0x03,0x09,0x00,0x01,0x35,0x03,0x19,0x11,0x01,0x09,0x00,0x02,0x0a,
+0x00,0x00,0x00,0x00,0x09,0x00,0x04,0x35,0x0c,0x35,0x03,0x19,0x01,0x00,0x35,0x05,
+0x19,0x00,0x03,0x08,0x01,0x09,0x00,0x06,0x35,0x09,0x09,0x65,0x6e,0x09,0x00,0x6a,
+0x09,0x01,0x00,0x09,0x01,0x00,0x25,0x0a,0x53,0x50,0x50,0x20,0x73,0x6c,0x61,0x76,
+0x65,0x00,0x00,0x00,0x01,0x00,0xaa,0x55,0x02,0x00,0x8e,0x44,0xaf,0x47,0xaa,0x55,
+0x8a,0x00,0xaf,0x47,0x01,0x00,0x02,0x00,0x28,0x02,0x00,0x18,0x02,0x00,0x02,0x03,
+0x28,0x01,0x0a,0x03,0x00,0x02,0x00,0x2a,0x13,0x41,0x73,0x74,0x20,0x4c,0x45,0x20,
+0x4d,0x6f,0x75,0x73,0x65,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x04,0x00,0x02,0x00,
+0x28,0x10,0x55,0xe4,0x05,0xd2,0xaf,0x9f,0xa9,0x8f,0xe5,0x4a,0x7d,0xfe,0x43,0x53,
+0x53,0x49,0x05,0x00,0x02,0x03,0x28,0x01,0x10,0x06,0x00,0x02,0x87,0x05,0x14,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x07,0x00,0x02,0x02,0x29,0x02,0x00,0x00,0x08,0x00,0x02,0x03,0x28,
+0x01,0x0e,0x09,0x00,0x02,0x98,0x05,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,0x55,
+0x01,0x00,0x00,0x40,0x02,0xaa,0x55,0x01,0x00,0x17,0x40,0x08,0xaa,0x55,0x07,0x00,
+0x76,0x41,0x0f,0x84,0x30,0x0a,0x0b,0xb2,0x32,0xaa,0x55,0x02,0x00,0x57,0x41,0x8b,
+0x0b,0xaa,0x55,0x08,0x00,0xa1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xaa,
+0x55,0x02,0x00,0xbd,0x40,0x02,0x24,0xaa,0x55,0x08,0x00,0xad,0x40,0x24,0x00,0x80,
+0x00,0x24,0x00,0x80,0x00,0xaa,0x55,0x02,0x00,0xbb,0x40,0x20,0x00,0xaa,0x55,0x04,
+0x00,0xb7,0x40,0x20,0x00,0x00,0x20,0xaa,0x55,0x04,0x00,0xbf,0x40,0x80,0x04,0x00,
+0x10,0xaa,0x55,0x05,0x00,0xe2,0x44,0x08,0x0e,0x05,0x04,0x00,0xaa,0x55,0x02,0x00,
+0x02,0x42,0x30,0x1f,0xaa,0x55,0x01,0x00,0x10,0x42,0x20,0xaa,0x55,0x01,0x00,0xe0,
+0x41,0x01,0xaa,0x55,0x03,0x00,0xb1,0x4a,0x07,0xff,0xff,0xaa,0x55,0x02,0x00,0xc3,
+0x40,0xb1,0x4a,0xa5,0x71
+};
Index: BT_doublebyte/sdk/Librarier/core/misc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/misc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/misc.h	(working copy)
@@ -0,0 +1,107 @@
+#ifndef __MISC_H
+#define __MISC_H
+#include "yc3121.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum
+{
+    SVCall_IRQn		= -5, //SVC_IRQHandler
+    PendSV_IRQn		= -2, //PENDSV_IRQHandler
+    SysTick_IRQn	= -1, //SYSTICK_IRQHandler
+    USB_IRQn   		= 0,
+    IIC_IRQn   		= 1,
+    QSPI_IRQn  		= 2,
+    SPI0_IRQn  		= 3,
+    SPI1_IRQn  		= 4,
+    UART0_IRQn 		= 5,
+    UART1_IRQn 		= 6,
+    MEMCP_IRQn 		= 7,//DMA MEM_TO_MEM
+    RSA_IRQn   		= 8,
+    SCI0_IRQn  		= 9,
+    SCI1_IRQn  		= 10,
+    BT_IRQn    		= 11,
+    GPIO_IRQn  		= 12,
+    TIM0_IRQn  		= 13,
+    TIM1_IRQn  		= 14,
+    TIM2_IRQn  		= 15,
+    TIM3_IRQn  		= 16,
+    TIM4_IRQn  		= 17,
+    TIM5_IRQn  		= 18,
+    TIM6_IRQn  		= 19,
+    TIM7_IRQn  		= 20,
+    TIM8_IRQn  		= 21,
+    SM4_IRQn   		= 22,
+    SEC_IRQn   		= 23,
+    MSR_IRQn   		= 24,
+    TRNG_IRQn  		= 25,
+    WDT_IRQn   		= 26
+} IRQn_Type;
+
+/**
+  * @brief  Enable External Interrupt
+  * @param  IRQnx IRQn External interrupt number. Value cannot be negative.
+  * @retval none
+  */
+void	NVIC_EnableIRQ(IRQn_Type IRQnx);
+
+/**
+  * @brief  Disable External Interrupt
+  * @param  IRQnx IRQn External interrupt number. Value cannot be negative.
+  * @retval none
+  */
+void NVIC_DisableIRQ(IRQn_Type IRQnx);
+
+/**
+ * @brief  Set  Interrupt Priority
+ * @param  IRQn  Interrupt number.
+ * @retval SUCCESS or ERROR
+ */
+uint32_t NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority);
+
+
+/**
+ * @brief  trigger PendSV Interrupt
+ * @param  none
+ * @retval none
+ */
+void trigger_PendSV(void);
+
+/**
+ * @brief  System Reset
+ * @param  none
+ * @retval none
+ */
+void soft_reset(void);
+
+
+/**
+ * @brief  get cortex M0 PRIMASK REG value
+ * @param  none
+ * @retval 0:interrupt not masking; 1:interrupt is masking
+ */
+uint32_t get_primask(void);
+
+
+/**
+ * @brief  get cortex M0 msp REG value
+ * @param  none
+ * @retval msp REG value
+ */
+uint32_t get_msp(void);
+
+/**
+ * @brief  set MSP
+ * @param  mainStackPointer
+ * @retval none
+ */
+void set_msp(uint32_t mainStackPointer);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MISC_H */
+
Index: BT_doublebyte/sdk/Librarier/core/misc.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/misc.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/misc.c	(working copy)
@@ -0,0 +1,120 @@
+#include "misc.h"
+
+/* following defines should be used for structure members */
+#define     __IM        volatile const          /*! Defines 'read only' structure member permissions */
+#define     __OM        volatile                /*! Defines 'write only' structure member permissions */
+#define     __IOM       volatile                /*! Defines 'read / write' structure member permissions */
+
+/* Memory mapping of Cortex-M0 Hardware */
+#define SCS_BASE        (0xE000E000UL)          /*!< System Control Space Base Address */
+#define NVIC_BASE       (SCS_BASE +  0x0100UL)  /*!< NVIC Base Address */
+#define SCB_BASE        (SCS_BASE +  0x0D00UL)  /*!< System Control Block Base Address */
+
+typedef struct
+{
+    __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */
+    __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */
+    uint32_t RESERVED0;
+    __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */
+    __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */
+    __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */
+    uint32_t RESERVED1;
+    __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */
+    __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */
+} SCB_Type;
+
+/**
+  \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).
+ */
+typedef struct
+{
+    __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */
+    uint32_t RESERVED0[31U];
+    __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */
+    uint32_t RSERVED1[31U];
+    __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */
+    uint32_t RESERVED2[31U];
+    __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */
+    uint32_t RESERVED3[31U];
+    uint32_t RESERVED4[64U];
+    __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */
+}  NVIC_Type;
+
+#define SCB				((SCB_Type*)SCB_BASE)   /*!< SCB configuration struct */
+#define NVIC			((NVIC_Type*)NVIC_BASE)   /*!< NVIC configuration struct */
+
+/* The following MACROS handle generation of the register offset and byte masks */
+#define _BIT_SHIFT(IRQn)	(((((uint32_t)(int32_t)(IRQn)))&0x03UL)*8UL)
+#define _SHP_IDX(IRQn)		((((((uint32_t)(int32_t)(IRQn))&0x0FUL)-8UL) >>2UL))
+#define _IP_IDX(IRQn)		((((uint32_t)(int32_t)(IRQn))>>2UL))
+
+/* ----------------Configuration of the Cortex-M0 Processor and Core Peripherals---------------- */
+#define __CM0_REV                 0x0000            /*!< Cortex-M0 Core Revision                                               */
+#define __MPU_PRESENT                  0            /*!< MPU present or not                                                    */
+#define __NVIC_PRIO_BITS               2            /*!< Number of Bits used for Priority Levels                               */
+#define __Vendor_SysTickConfig         0            /*!< Set to 1 if different SysTick Config is used                          */
+/* End of group Configuration_of_CMSIS */
+
+uint32_t NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
+{
+    if ((int32_t)(IRQn) < 0)
+    {
+        SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
+                                    (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
+    }
+    else
+    {
+        NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
+                                    (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
+    }
+    return SUCCESS;
+}
+
+#define SBC_ICSR_PENDSV_IRQ	28
+void trigger_PendSV(void)
+{
+    SCB->ICSR |= (1 << SBC_ICSR_PENDSV_IRQ);
+}
+
+void	NVIC_EnableIRQ(IRQn_Type IRQnx)
+{
+    enable_intr((int) IRQnx);
+}
+
+void  NVIC_DisableIRQ(IRQn_Type IRQnx)
+{
+    disable_intr((int) IRQnx);
+}
+
+void soft_reset(void)
+{
+    SYSCTRL_RST_EN |= 0x01;
+    SYSCTRL_RESET = 0x55;
+    while (1);
+}
+
+uint32_t get_primask(void)
+{
+    __asm volatile("mrs r0, primask");
+}
+
+uint32_t get_msp(void)
+{
+    __asm volatile("mrs r0, msp");
+}
+
+#if defined ( __CC_ARM   )	//MDK
+void set_msp(uint32_t mainStackPointer)
+{
+    __asm volatile("msr msp,mainStackPointer");
+}
+#else
+void set_msp(uint32_t mainStackPointer)
+{
+    __asm volatile("msr msp,r0");
+}
+#endif
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/core/rom_api.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/rom_api.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/rom_api.h	(working copy)
@@ -0,0 +1,42 @@
+/*
+File Name    : rom_api.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/02/11
+Description  : rom fun information.
+*/
+
+#ifndef __ROM_API_H__
+#define __ROM_API_H__
+
+/* TIMER */
+#define FUNC_DELAY_US_ADDR               (0x4238 + 1)
+#define FUNC_DELAY_MS_ADDR               (0x425c + 1)
+
+/* OTP */
+#define FUNC_INIT_OTP_ADDR               (0x442c + 1)
+#define FUNC_DEINIT_OTP_ADDR             (0x4480 + 1)
+#define FUNC_READ_OTP_ADDR               (0x449c + 1)
+#define FUNC_WRITE_OTP_ADDR              (0x4594 + 1)
+#define FUNC_READ_CHIPID_ADDR            (0x45d8 + 1)
+#define FUNC_READ_CHIPLF_ADDR            (0x45e6 + 1)
+
+/* LPM */
+#define FUNC_LPM_READ_ADDR               (0x4c80 + 1)
+#define FUNC_LPM_WRITE_ADDR              (0x4c9c + 1)
+#define FUNC_LPM_BT_WRITE_ADDR           (0x4cb0 + 1)
+#define FUNC_LPM_BT_READ_ADDR            (0x4d24 + 1)
+#define FUNC_LPM_SLEEP_ADDR              (0x4d68 + 1)
+#define FUNC_SETLPMVAL_ADDR              (0x4280 + 1)
+
+/* QSPI */
+#define FUNC_ENC_WRITE_FLASH_ADDR        (0x51f0 + 1)
+#define FUNC_QSPI_FLASH_SECTORERASE_ADDR (0x48b4 + 1)
+#define FUNC_QSPI_FLASH_BLOCKERASE_ADDR  (0x48c0 + 1)
+#define FUNC_QSPI_FLASH_WRITE_ADDR       (0x47f4 + 1)
+#define FUNC_QSPI_FLASH_READ_ADDR        (0x48f6 + 1)
+#define FUNC_FLASH_BLANK_CHECK           (0x513c + 1)
+#define FUNC_PREFETCH                    (0x4404 + 1)
+#define FUNC_READ_FLASH_ID               (0x4960 + 1)
+
+#endif
Index: BT_doublebyte/sdk/Librarier/core/system.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/system.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/system.h	(working copy)
@@ -0,0 +1,43 @@
+/*
+File Name    : system.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2018/05/22
+Description  : none.
+*/
+
+#ifndef __SYSTEM_H__
+#define __SYSTEM_H__
+
+
+#include <string.h>
+#include "yc_uart.h"
+
+//#define SDK_DEBUG	//Debug switch
+
+#define BIT_SET(a,b) ((a) |= (1<<(b)))
+#define BIT_CLEAR(a,b) ((a) &= ~(1<<(b)))
+#define BIT_FLIP(a,b) ((a) ^= (1<<(b)))				//bit Negation
+#define BIT_GET(a,b) (((a) & (1<<(b)))>>(b))
+
+/**
+ * @brief Print format string to serial port 0.You need to initialize the serial port 0 before you use MyPrintf.
+ *
+ * @param format : format string
+ * @param ...: format parameter
+ */
+void MyPrintf(char *format, ...);
+
+void _assert_handler(const char *file, int line, const char *func);
+
+void printv(uint8_t *buf, uint32_t len, uint8_t *s);
+
+#define _ASSERT(x)	\
+if (!(x))                                                                    \
+{                                                                             \
+  _assert_handler(__FILE__,__LINE__,__FUNCTION__);\
+}
+
+
+#endif /*__SYSTEM_H__*/
+
Index: BT_doublebyte/sdk/Librarier/core/system.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/system.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/system.c	(working copy)
@@ -0,0 +1,275 @@
+/*
+File Name    : system.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/4
+Description  : none.
+*/
+
+#include <stdarg.h>
+#include "system.h"
+
+//*****************************************************************************
+//
+//! A simple  MyPrintf function supporting \%c, \%d, \%p, \%s, \%u,\%x, and \%X.
+//!
+//! \param format is the format string.
+//! \param ... are the optional arguments, which depend on the contents of the
+//! \return None.
+//
+//*****************************************************************************
+
+static const int8_t *const g_pcHex1 = "0123456789abcdef";
+static const int8_t *const g_pcHex2 = "0123456789ABCDEF";
+
+#ifdef ENABLE_PERIAL_TEST
+    extern uint8_t uart_printf_switch_gloab;
+#endif
+
+void printfsend(UART_TypeDef UARTx, uint8_t *buf, int len)
+{
+    uint8_t printbuf[256];
+    for (int i = 0; i < len; i++)
+    {
+        printbuf[i] = buf[i];
+    }
+
+#ifdef ENABLE_PERIAL_TEST
+    if (uart_printf_switch_gloab)
+    {
+        UART_SendBuf(UART1, printbuf, len);
+    }
+    else
+    {
+        UART_SendBuf(UART0, printbuf, len);
+    }
+#else
+    UART_SendBuf(UARTx, printbuf, len);
+#endif
+}
+
+void MyPrintf(char *format, ...)
+{
+    uint32_t ulIdx, ulValue, ulPos, ulCount, ulBase, ulNeg;
+    int8_t *pcStr, pcBuf[16], cFill;
+    char HexFormat;
+    va_list vaArgP;
+
+    va_start(vaArgP, format);
+
+    while (*format)
+    {
+        // Find the first non-% character, or the end of the string.
+        for (ulIdx = 0; (format[ulIdx] != '%') && (format[ulIdx] != '\0'); ulIdx++)
+        {}
+
+        // Write this portion of the string.
+        if (ulIdx > 0)
+        {
+//				printfsend(UART0,format, ulIdx);
+            printfsend(UART0, (uint8_t *)format, ulIdx);
+        }
+
+        format += ulIdx;
+
+        if (*format == '%')
+        {
+            format++;
+
+            // Set the digit count to zero, and the fill character to space
+            // (i.e. to the defaults).
+            ulCount = 0;
+            cFill = ' ';
+
+again:
+            switch (*format++)
+            {
+            case '0':
+            case '1':
+            case '2':
+            case '3':
+            case '4':
+            case '5':
+            case '6':
+            case '7':
+            case '8':
+            case '9':
+            {
+                if ((format[-1] == '0') && (ulCount == 0))
+                {
+                    cFill = '0';
+                }
+
+                ulCount *= 10;
+                ulCount += format[-1] - '0';
+
+                goto again;
+            }
+
+            case 'c':
+            {
+                ulValue = va_arg(vaArgP, unsigned long);
+//					printfsend(UART0,(char *)&ulValue, 1);
+                printfsend(UART0, (uint8_t *)&ulValue, 1);
+                break;
+            }
+
+            case 'd':
+            {
+                ulValue = va_arg(vaArgP, unsigned long);
+                ulPos = 0;
+
+                if ((long)ulValue < 0)
+                {
+                    ulValue = -(long)ulValue;
+                    ulNeg = 1;
+                }
+                else
+                {
+                    ulNeg = 0;
+                }
+
+                ulBase = 10;
+                goto convert;
+            }
+
+            case 's':
+            {
+//					pcStr = va_arg(vaArgP, char *);
+                pcStr = (int8_t *)va_arg(vaArgP, char *);
+
+                for (ulIdx = 0; pcStr[ulIdx] != '\0'; ulIdx++)
+                {}
+
+//					printfsend(UART0,pcStr, ulIdx);
+                printfsend(UART0, (uint8_t *)pcStr, ulIdx);
+
+                if (ulCount > ulIdx)
+                {
+                    ulCount -= ulIdx;
+                    while (ulCount--)
+                    {
+//							printfsend(UART0, " ", 1);
+                        printfsend(UART0, (uint8_t *)" ", 1);
+                    }
+                }
+                break;
+            }
+
+            case 'u':
+            {
+                ulValue = va_arg(vaArgP, unsigned long);
+                ulPos = 0;
+                ulBase = 10;
+                ulNeg = 0;
+                goto convert;
+            }
+
+            case 'X':
+            {
+                ulValue = va_arg(vaArgP, unsigned long);
+                ulPos = 0;
+                ulBase = 16;
+                ulNeg = 0;
+                HexFormat = 'X';
+                goto convert;
+            }
+
+            case 'x':
+
+            case 'p':
+            {
+                ulValue = va_arg(vaArgP, unsigned long);
+                ulPos = 0;
+                ulBase = 16;
+                ulNeg = 0;
+                HexFormat = 'x';
+
+convert:
+                for (ulIdx = 1;
+                        (((ulIdx * ulBase) <= ulValue) &&
+                         (((ulIdx * ulBase) / ulBase) == ulIdx));
+                        ulIdx *= ulBase, ulCount--)
+                {
+                }
+
+                if (ulNeg)
+                {
+                    ulCount--;
+                }
+
+                if (ulNeg && (cFill == '0'))
+                {
+                    pcBuf[ulPos++] = '-';
+                    ulNeg = 0;
+                }
+
+                if ((ulCount > 1) && (ulCount < 16))
+                {
+                    for (ulCount--; ulCount; ulCount--)
+                    {
+                        pcBuf[ulPos++] = cFill;
+                    }
+                }
+
+                if (ulNeg)
+                {
+                    pcBuf[ulPos++] = '-';
+                }
+
+                for (; ulIdx; ulIdx /= ulBase)
+                {
+                    if (HexFormat == 'x')
+                        pcBuf[ulPos++] = g_pcHex1[(ulValue / ulIdx) % ulBase];//x
+                    else
+                        pcBuf[ulPos++] = g_pcHex2[(ulValue / ulIdx) % ulBase];//X
+                }
+
+//					printfsend(UART0, pcBuf, ulPos);
+                printfsend(UART0, (uint8_t *)pcBuf, ulPos);
+                break;
+            }
+
+            case '%':
+            {
+//					printfsend(UART0, format - 1, 1);
+                printfsend(UART0, (uint8_t *)format - 1, 1);
+                break;
+            }
+
+            default:
+            {
+//					printfsend(UART0, "ERROR", 5);
+                printfsend(UART0, (uint8_t *)"ERROR", 5);
+                break;
+            }
+            }//switch
+        }//if
+    }//while
+    va_end(vaArgP);
+}
+
+void printv(uint8_t *buf, uint32_t len, uint8_t *s)
+{
+    uint32_t i = 0;
+    uint32_t n = 0;
+    MyPrintf("\r\n %s:", s);
+    for (i = 0; i < len; i++)
+    {
+        if (i % 16 == 0)
+        {
+            MyPrintf("\r\n%08x:", n);
+            n += 16;
+        }
+        MyPrintf("%02x ", buf[i]);
+
+    }
+}
+
+void _assert_handler(const char *file, int line, const char *func)
+{
+#if defined (SDK_DEBUG)
+    MyPrintf("Assert trigger at file: %s line:%d func: %s\n ", file, line, func);
+#endif
+    while (1);
+}
Index: BT_doublebyte/sdk/Librarier/core/type.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/type.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/type.h	(working copy)
@@ -0,0 +1,67 @@
+/*
+File Name    : type.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2018/05/25
+Description  : Data type definition.
+*/
+
+#ifndef __TYPE_H__
+#define __TYPE_H__
+
+#if defined (__CC_ARM) || defined ( __ICCARM__ )
+typedef unsigned char      uint8_t;
+typedef unsigned short     uint16_t;
+typedef unsigned int       uint32_t;
+typedef unsigned long long uint64_t;
+typedef unsigned char      byte;
+typedef unsigned short     word;
+
+typedef signed char       int8_t;
+typedef signed short      int16_t;
+typedef signed int        int32_t;
+typedef signed long long  int64_t;
+#else
+#include "stdio.h"
+typedef unsigned char      byte;
+typedef unsigned short     word;
+#endif
+
+/** 
+  * @brief  __NOINLINE definition
+  */ 
+#if defined ( __CC_ARM   ) || defined   (  __GNUC__  )
+/* ARM & GNUCompiler 
+   ---------------- 
+*/
+#define __NOINLINE   noinline
+
+#elif defined ( __ICCARM__ )
+/* ICCARM Compiler
+   ---------------
+*/
+#define __NOINLINE _Pragma("optimize = no_inline")
+
+#endif
+
+#ifndef Boolean
+typedef enum {FALSE = 0, TRUE =1} Boolean;
+#define IS_BOOLEAN(bool) ((bool == FALSE) || (bool == TRUE))
+#endif
+
+#ifndef FunctionalState
+typedef enum {DISABLE = 0, ENABLE =1} FunctionalState;
+#define IS_FUNCTIONAL_STATE(state) ((state== DISABLE) || (state == ENABLE))
+#endif
+
+#ifndef FunctionalState
+typedef enum {ERROR = 0, SUCCESS = 1} ErrorStatus;
+#define IS_ERROR_STATE(status) ((status== ERROR) || (status == SUCCESS))
+#endif
+
+#ifndef FlagStatus
+typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
+#endif
+
+#endif /*__TYPE_H__*/
+
Index: BT_doublebyte/sdk/Librarier/core/yc3121.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/yc3121.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/core/yc3121.h	(working copy)
@@ -0,0 +1,676 @@
+/*
+File Name    : yc3121.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2018/03/27
+Description  : Register and hardware information.
+*/
+
+#ifndef __YC3121_H__
+#define __YC3121_H__
+
+#include "type.h"
+#include "system.h"
+#include <string.h>
+#include "rom_api.h"
+
+#define NO_BT           0
+#define EXIST_BT        1
+#define NO_XTAL         2
+
+#define VERSIONS		EXIST_BT
+
+#define M0_FPGA     1
+#define POS_FPGA    2
+#define POS_CHIP    3
+
+#define HARDWAER	POS_CHIP
+
+#if (HARDWAER == M0_FPGA)
+    #define CPU_MHZ        (24*1000000)
+#elif (HARDWAER == POS_CHIP)
+    #define CRYSTAL_CLK (192*1000000)
+    #define CPU_MHZ     ((CRYSTAL_CLK)/((SYSCTRL_HCLK_CON&0x0f)+2))
+#endif
+
+#define noinline __attribute__((noinline))
+
+#define SRAM_ADDRESS        0x20000
+#define SRAM_SIZE           0x10000
+
+#define IPC_HOLD_BT				   *(volatile byte*)0xC4FEF
+#define IPC_RX_START_ADDR		 	(volatile byte*)0xc4ff0
+#define IPC_RX_END_ADDR				(volatile byte*)0xc4ff2
+#define IPC_RX_READ_PTR				(volatile byte*)0xc4ff4
+#define IPC_RX_WRITE_PTR			(volatile byte*)0xc4ff6
+#define IPC_TX_START_ADDR			(volatile byte*)0xc4ff8
+#define IPC_TX_END_ADDR				(volatile byte*)0xc4ffa
+#define IPC_TX_READ_PTR				(volatile byte*)0xc4ffc
+#define IPC_TX_WRITE_PTR			(volatile byte*)0xc4ffe
+
+#define BT_REV             *(volatile byte*)0xc8000
+#define BT_STEP            *(volatile byte*)0xc8001
+#define BT_PC              *(volatile word*)0xc800e
+#define BT_RESET           *(volatile byte*)0xc8010
+#define BT_UCODE_HI        *(volatile byte*)0xc8022
+#define BT_UCODE_CTRL      *(volatile byte*)0xc8023
+#define BT_UCODE_LO        *(volatile byte*)0xc8024
+#define BT_UCODE_DATA      *(volatile byte*)0xc8025
+#define BT_RHALFSLOT_LOW   *(volatile byte*)0xc8040
+#define BT_CONTRU          *(volatile byte*)0xc812c
+#define BT_CONTWU          *(volatile byte*)0xc812e
+#define BT_CONFIG          *(volatile byte*)0xc8043
+#define BT_CLKPLL_EN       *(volatile byte*)0xc8905
+#define BT_CHGPUMP_EN      *(volatile byte*)0xc8973
+#define WAKEUP_BT          *(volatile byte*)0xF853C
+
+#define BT_INIT_FLAG       7
+#define WAKEUP_BT_FLAG     2
+
+//register base address
+
+#define WDT_BASEADDR        0xf0000
+#define SCI7816_BASEADDR    0xf0400
+
+#define TIMER_BASEADDR      0xf0c00
+#define SM4_BASEADDR        0xf5200
+#define RSA_BASEADDR        0xf5800
+#define USB_BASEADDR        0xf6000
+#define DES_BASEADDR        0xf8000
+#define CRC_BASEADDR        0xf8200
+#define AES_BASEADDR        0xf8300
+#define LPM_BASEADDR        0xf8400
+#define SYSCTRL_BASEADDR    0xf8500
+#define SECURE_BASEADDR     0xf8540
+#define CLKGEN_BASEADDR     0xf8560
+#define MPU_BASEADDR        0xf8580
+#define SHA_BASEADDR        0xf8600
+#define GPIO_BASEADDR       0xf8700
+#define DMA_BASEADDR        0xf8800
+#define QSPI_BASEADDR       DMA_BASEADDR
+#define ISO7811_BASEADDR    0xf8f00
+
+#define WD_CONFIG         *(volatile int*)(WDT_BASEADDR + 0x00)
+#define WD_STATUS         *(volatile int*)(WDT_BASEADDR + 0x04)
+#define WD_KICK           *(volatile int*)(WDT_BASEADDR + 0x08)
+#define WD_CLEAR          *(volatile int*)(WDT_BASEADDR + 0x0c)
+
+#define SCI7816_MODE      *(volatile int*)(SCI7816_BASEADDR + 0x00)
+#define SCI7816_CTRL      *(volatile int*)(SCI7816_BASEADDR + 0x08)
+#define SCI7816_STAT      *(volatile int*)(SCI7816_BASEADDR + 0x0c)
+#define SCI7816_INT       *(volatile int*)(SCI7816_BASEADDR + 0x10)
+#define SCI7816_DATA      *(volatile int*)(SCI7816_BASEADDR + 0x20)
+#define SCI7816_ETU       *(volatile int*)(SCI7816_BASEADDR + 0x28)
+#define SCI7816_BGT       *(volatile int*)(SCI7816_BASEADDR + 0x2c)
+#define SCI7816_CWT       *(volatile int*)(SCI7816_BASEADDR + 0x30)
+#define SCI7816_EDC       *(volatile int*)(SCI7816_BASEADDR + 0x34)
+
+#define PWM_TOTAL				9
+
+#define TIM_PCNT(x)     *(volatile int*)(TIMER_BASEADDR + x*8)
+#define TIM_NCNT(x)     *(volatile int*)(TIMER_BASEADDR + 4 + x*8)
+#define TIM_CTRL        *(volatile int*)(TIMER_BASEADDR + PWM_TOTAL*8)
+#define TIM_CTRL1       *(volatile int*)(TIMER_BASEADDR + PWM_TOTAL*8 + 4)
+#define TIM_CNT(x)      *(volatile int*)(TIMER_BASEADDR + PWM_TOTAL*8 + (PWM_TOTAL*4 + 31)/32*4 + x*4)
+
+#define SHA_DATA(x)     *(volatile int*)(SHA_BASEADDR + 0x00 + x*4)
+#define SHA_BDATA(x)    *(volatile uint8_t*)(SHA_BASEADDR + 0x00 + x)
+#define SHA_RESULT(x)   *(volatile int*)(SHA_BASEADDR + 0x80 + x*4)
+#define SHA_CTRL        *(volatile int*)(SHA_BASEADDR + 0xc0)
+
+#define SYSCTRL_PRIV_CTRL    *(volatile int*)(SYSCTRL_BASEADDR + 0x0)
+#define SYSCTRL_STATUS       *(volatile int*)(SYSCTRL_BASEADDR + 0x4)
+#define OTP_ADDR             *(volatile short*)(SYSCTRL_BASEADDR + 0x8)
+#define OTP_CTRL             *(volatile short*)(SYSCTRL_BASEADDR + 0xa)
+#define OTP_RDATA            *(volatile byte*)(SYSCTRL_BASEADDR + 0xc)
+#define OTP_STATUS           *(volatile int*)(SYSCTRL_BASEADDR + 0xc)
+
+#define SYSCTRL_LPM_RDATA    *(volatile int*)(SYSCTRL_BASEADDR + 0x10)
+#define SYSCTRL_LPM_SCB      *(volatile int*)(SYSCTRL_BASEADDR + 0x14)
+#define SYSCTRL_HWCTRL(x)    *(volatile uint8_t*)(SYSCTRL_BASEADDR + 0x18 + x)
+#define SYSCTRL_RNG_CTRL     *(volatile int*)(SYSCTRL_BASEADDR + 0x28)
+#define SYSCTRL_RNG_DATAB(x) *(volatile uint8_t*)(SYSCTRL_BASEADDR + 0x2c+x)
+
+#define SYSCTRL_RNG_DATA(x)  *(volatile int*)(SYSCTRL_BASEADDR + 0x2c+x*4)
+
+#define SYSCTRL_ROM_SWITCH   *(volatile uint8_t*)(SYSCTRL_BASEADDR + 0x3c)
+#define SYSCTRL_LPM_STATUS   *(volatile byte *)(SYSCTRL_BASEADDR + 0x3d)
+#define SYSCTRL_OTPN_ADDR    *(volatile uint8_t*)(SYSCTRL_BASEADDR + 0x3e)
+#define SYSCTRL_OTPU_ADDR    *(volatile uint8_t*)(SYSCTRL_BASEADDR + 0x3f)
+
+#define SECURE_CTRL          *(volatile int*)(SECURE_BASEADDR + 0x0)
+#define SECURE_STATUS        *(volatile int*)(SECURE_BASEADDR + 0x4)
+#define SECURE_MEDCON        *(volatile int*)(SECURE_BASEADDR + 0x8)
+#define SECURE_RAMKEY        *(volatile int*)(SECURE_BASEADDR + 0xc)
+
+#define SYSCTRL_HCLK_CON     *(volatile int*)(CLKGEN_BASEADDR + 0x00)
+#define SYSCTRL_RSACLK       *(volatile int*)(CLKGEN_BASEADDR + 0x08)
+#define SYSCTRL_CLK_CLS      *(volatile int*)(CLKGEN_BASEADDR + 0x0c)
+#define SYSCTRL_RST_EN       *(volatile int*)(CLKGEN_BASEADDR + 0x14)
+#define SYSCTRL_RST_TYPE     *(volatile int*)(CLKGEN_BASEADDR + 0x18)
+#define SYSCTRL_RESET        *(volatile int*)(CLKGEN_BASEADDR + 0x1c)
+
+#define MPUCTRL_ID           *(volatile int*)(MPU_BASEADDR + 0x00)
+#define MPUCTRL_CTRL         *(volatile int*)(MPU_BASEADDR + 0x04)
+#define MPUCTRL_FSR          *(volatile int*)(MPU_BASEADDR + 0x0c)
+#define MPUCTRL_FAR          *(volatile int*)(MPU_BASEADDR + 0x10)
+
+#define MPUCTRL_PROTECTION      *(volatile int*)(MPU_BASEADDR + 0x14)
+#define MPUCTRL_USER_START      *(volatile int*)(MPU_BASEADDR + 0x18)
+#define MPUCTRL_REGION_BASE(x)	*(volatile int*)(MPU_BASEADDR + 0x40 + x*4)
+#define MPUCTRL_REGION_LIMIT(x)	*(volatile int*)(MPU_BASEADDR + 0x60 + x*4)
+
+#define LPM_CTRL         (volatile int*)(LPM_BASEADDR + 0x00)
+#define LPM_SENSOR       (volatile int*)(LPM_BASEADDR + 0x04)
+#define LPM_WKUP_TIMER   (volatile int*)(LPM_BASEADDR + 0x08)
+#define LPM_SECMAX       (volatile int*)(LPM_BASEADDR+0x0c)
+#define LPM_GPIO_WKUP    (volatile int*)(LPM_BASEADDR + 0x10)
+#define LPM_GPIO_WKHI    (volatile int*)(LPM_BASEADDR + 0x14)
+#define LPM_SLEEP        (volatile int*)(LPM_BASEADDR + 0x20)
+#define LPM_CLR_INTR     (volatile int*)(LPM_BASEADDR + 0x24)
+#define LPM_STATUS       (volatile int*)(LPM_BASEADDR + 0x78)
+#define LPM_RTC_CNT      (volatile int*)(LPM_BASEADDR + 0x7c)
+#define LPM_KEY(x)       (volatile int*)(LPM_BASEADDR + 0x80 + x*4)
+
+#define GPIO_GROUP_NUM			3
+#define GPIO_PIN_NUM			  16
+
+#define GPIO_CONFIG(x)         *((volatile uint8_t*)(GPIO_BASEADDR + x))
+#define GPIO_INTR_EN(groupx)   *((volatile uint16_t*)(GPIO_BASEADDR+GPIO_GROUP_NUM*GPIO_PIN_NUM) + groupx)
+#define GPIO_TRIG_MODE(groupx) *((volatile uint16_t*)(GPIO_BASEADDR+(GPIO_GROUP_NUM*GPIO_PIN_NUM) +GPIO_GROUP_NUM*2) +groupx)
+#define GPIO_IN(groupx)        *((volatile uint16_t*)(GPIO_BASEADDR+(GPIO_GROUP_NUM*GPIO_PIN_NUM) +GPIO_GROUP_NUM*4)+groupx)
+
+#define DMA_SRC_ADDR(x)    *(volatile int*)(DMA_BASEADDR + 0x00 + x*0x100)
+#define DMA_DEST_ADDR(x)   *(volatile int*)(DMA_BASEADDR + 0x04 + x*0x100)
+#define DMA_LEN(x)         *(volatile int*)(DMA_BASEADDR + 0x08 + x*0x100)
+#define DMA_CONFIG(x)      *(volatile uint8_t*)(DMA_BASEADDR + 0x0c + x*0x100)
+#define DMA_START(x)       *(volatile uint8_t*)(DMA_BASEADDR + 0x0f + x*0x100)
+#define DMA_STATUS(x)      *(volatile int*)(DMA_BASEADDR + 0x10 + x*0x100)
+#define DMA_RPTR(x)        *(volatile int*)(DMA_BASEADDR + 0x14 + x*0x100)
+#define DMA_WPTR(x)        *(volatile int*)(DMA_BASEADDR + 0x18 + x*0x100)
+
+#define QSPI_CTRL         *(volatile int*)(QSPI_BASEADDR + 0x1c)
+#define QAES_ADDRKEY      *(volatile int*)(QSPI_BASEADDR + 0x20)
+#define QAES_CTRL         *(volatile int*)(QSPI_BASEADDR + 0x24)
+#define QAES_RAND(x)      *(volatile int*)(QSPI_BASEADDR + 0x28 + x*4)
+#define QAES_KEY(x)       *(volatile int*)(QSPI_BASEADDR + 0x30 + x*4)
+#define QAES_DATA(x)      *(volatile int*)(QSPI_BASEADDR + 0x40 + x*4)
+#define QAES_KEYB(x)      *(volatile byte*)(QSPI_BASEADDR + 0x30 + x)
+#define SPID0_CTRL        *(volatile int*)0xf891c
+#define SPID1_CTRL        *(volatile int*)0xf8a1c
+#define UART0_CTRL        *(volatile int*)0xf8b1c
+#define UART0_INTR        *(volatile int*)0xf8b20
+#define UART0_RDATA       *(volatile byte*)0xf8b24
+#define UART0_STATUS      *(volatile int*)0xf8b28
+#define UART1_CTRL        *(volatile int*)0xf8c1c
+#define UART1_INTR        *(volatile int*)0xf8c20
+#define UART1_RDATA       *(volatile byte*)0xf8c24
+#define UART1_STATUS      *(volatile int*)0xf8c28
+#define IICD_DELAY        *(volatile int*)0xf8d1c
+#define IICD_CTRL         *(volatile int*)0xf8d20
+
+#define USB_CONFIG        *(volatile byte*)USB_BASEADDR
+#define USB_INT_MASK(x)   *(volatile byte*)(USB_BASEADDR + 1 + x)
+#define USB_ADDR          *(volatile byte*)(USB_BASEADDR + 4)
+#define USB_TRG           *(volatile byte*)(USB_BASEADDR + 0x10)
+#define USB_STALL         *(volatile byte*)(USB_BASEADDR + 0x11)
+#define USB_CLEAR         *(volatile byte*)(USB_BASEADDR + 0x12)
+#define USB_EP(x)         *(volatile byte*)(USB_BASEADDR + 0x18 + x)
+#define USB_EP_LEN(x)     *(volatile byte*)(USB_BASEADDR + 0x20 + x)
+#define USB_STATUS        *(volatile byte*)(USB_BASEADDR + 0x26)
+#define USB_FIFO_EMPTY    *(volatile byte*)(USB_BASEADDR + 0x27)
+#define USB_FIFO_FULL     *(volatile byte*)(USB_BASEADDR + 0x28)
+
+
+#define AES_CNTRL_REG     *((volatile uint32_t *)(AES_BASEADDR))
+#define AES_DATA_REG0      ((volatile uint32_t *)(AES_BASEADDR+0x10))
+#define AES_DATA_REG1      ((volatile uint32_t *)(AES_BASEADDR+0x14))
+#define AES_DATA_REG2      ((volatile uint32_t *)(AES_BASEADDR+0x18))
+#define AES_DATA_REG3      ((volatile uint32_t *)(AES_BASEADDR+0x1C))
+#define AES_KEY_REG0       ((volatile uint32_t *)(AES_BASEADDR+0x20))
+#define AES_KEY_REG1       ((volatile uint32_t *)(AES_BASEADDR+0x24))
+#define AES_KEY_REG2       ((volatile uint32_t *)(AES_BASEADDR+0x28))
+#define AES_KEY_REG3       ((volatile uint32_t *)(AES_BASEADDR+0x2C))
+#define AES_KEY_REG4       ((volatile uint32_t *)(AES_BASEADDR+0x30))
+#define AES_KEY_REG5       ((volatile uint32_t *)(AES_BASEADDR+0x34))
+#define AES_KEY_REG6       ((volatile uint32_t *)(AES_BASEADDR+0x38))
+#define AES_KEY_REG7       ((volatile uint32_t *)(AES_BASEADDR+0x3C))
+#define AES_RAND_REG0      ((volatile uint32_t *)(AES_BASEADDR+0x40))
+#define AES_RAND_REG1      ((volatile uint32_t *)(AES_BASEADDR+0x44))
+#define AES_FKEY_REG0      ((volatile uint32_t *)(AES_BASEADDR+0x50))
+
+#define AES_DATAB(x)      *(volatile byte*)(AES_BASEADDR + 0x10 + (x))
+#define AES_KEYB(x)       *(volatile byte*)(AES_BASEADDR + 0x20 + (x))
+
+#define	DESCNTRL_REG      *((volatile uint32_t *)(DES_BASEADDR+0x00))
+#define	DESRAND_REG        ((volatile uint32_t *)(DES_BASEADDR+0x0c))
+#define	DESFAKE_KEY        ((volatile uint32_t *)(DES_BASEADDR+0x10))
+#define	DESIV_REG          ((volatile uint32_t *)(DES_BASEADDR+0x18))
+#define	DESDATA_REG        ((volatile uint32_t *)(DES_BASEADDR+0x20))
+#define	DESKEY1_REG        ((volatile uint32_t *)(DES_BASEADDR+0x28))
+#define	DESKEY2_REG        ((volatile uint32_t *)(DES_BASEADDR+0x30))
+#define	DESKEY3_REG        ((volatile uint32_t *)(DES_BASEADDR+0x38))
+#define	DES_KEYB(x)       *(volatile byte *)(DES_BASEADDR+0x28 + x)
+#define	DES_DATAB(x)      *(volatile byte *)(DES_BASEADDR+0x20 + x)
+
+#define SM4_REG0         (*(volatile uint32_t *)(SM4_BASEADDR + 0x0))
+#define SM4_REG1         (*(volatile uint32_t *)(SM4_BASEADDR + 0x4))
+#define SM4_IER          (*(volatile uint32_t *)(SM4_BASEADDR + 0x8))
+#define SM4_MR           (*(volatile uint32_t *)(SM4_BASEADDR + 0xc))
+#define SM4_KEY0         ((volatile uint32_t *)(SM4_BASEADDR + 0x10))
+#define SM4_KEY1         ((volatile uint32_t *)(SM4_BASEADDR + 0x14))
+#define SM4_KEY2         ((volatile uint32_t *)(SM4_BASEADDR + 0x18))
+#define SM4_KEY3         ((volatile uint32_t *)(SM4_BASEADDR + 0x1c))
+#define SM4_IV0          ((volatile uint32_t *)(SM4_BASEADDR + 0x20))
+#define SM4_IV1          ((volatile uint32_t *)(SM4_BASEADDR + 0x24))
+#define SM4_IV2          ((volatile uint32_t *)(SM4_BASEADDR + 0x28))
+#define SM4_IV3          ((volatile uint32_t *)(SM4_BASEADDR + 0x2c))
+#define SM4_DATA0        ((volatile uint32_t *)(SM4_BASEADDR + 0x30))
+#define SM4_DATA1        ((volatile uint32_t *)(SM4_BASEADDR + 0x34))
+#define SM4_DATA2        ((volatile uint32_t *)(SM4_BASEADDR + 0x38))
+#define SM4_DATA3        ((volatile uint32_t *)(SM4_BASEADDR + 0x3c))
+
+
+#define RECR             (*((volatile uint32_t *)(RSA_BASEADDR+0x00)))
+#define RESR             (*((volatile uint32_t *)(RSA_BASEADDR+0x04)))
+#define REFR             (*((volatile uint32_t *)(RSA_BASEADDR+0x08)))
+#define RESCR            (*((volatile uint32_t *)(RSA_BASEADDR+0x0c)))
+#define REDQR            (*((volatile uint32_t *)(RSA_BASEADDR+0x10)))
+#define REINT            (*((volatile uint32_t *)(RSA_BASEADDR+0x14)))
+#define RECFR            (*((volatile uint32_t *)(RSA_BASEADDR+0x18)))
+#define REBKR            ((volatile uint32_t *)(RSA_BASEADDR+0x1c))
+#define REDRR            (*((volatile uint32_t *)(RSA_BASEADDR+0x24)))
+#define REDAR            ((volatile uint32_t *)(RSA_BASEADDR+0x100))
+#define REDAR1           ((volatile uint32_t *)(RSA_BASEADDR+0x120))
+#define REDAR2           ((volatile uint32_t *)(RSA_BASEADDR+0x140))
+#define REDAR3           ((volatile uint32_t *)(RSA_BASEADDR+0x160))
+#define REDXR            ((volatile uint32_t *)(RSA_BASEADDR+0x200))
+#define REDXR1           ((volatile uint32_t *)(RSA_BASEADDR+0x220))
+#define REDXR2           ((volatile uint32_t *)(RSA_BASEADDR+0x240))
+#define REDXR3           ((volatile uint32_t *)(RSA_BASEADDR+0x260))
+#define REDYR            ((volatile uint32_t *)(RSA_BASEADDR+0x280))
+#define REDYR1           ((volatile uint32_t *)(RSA_BASEADDR+0x2a0))
+#define REDYR2           ((volatile uint32_t *)(RSA_BASEADDR+0x2c0))
+#define REDYR3           ((volatile uint32_t *)(RSA_BASEADDR+0x2e0))
+#define REDBR            ((volatile uint32_t *)(RSA_BASEADDR+0x300))
+#define REDBR1           ((volatile uint32_t *)(RSA_BASEADDR+0x320))
+#define REDBR2           ((volatile uint32_t *)(RSA_BASEADDR+0x340))
+#define REDBR3           ((volatile uint32_t *)(RSA_BASEADDR+0x360))
+#define REDBRH           ((volatile uint32_t *)(RSA_BASEADDR+0x380))
+#define REDCR            ((volatile uint32_t *)(RSA_BASEADDR+0x500))
+#define REDCR1           ((volatile uint32_t *)(RSA_BASEADDR+0x520))
+#define REDCR2           ((volatile uint32_t *)(RSA_BASEADDR+0x540))
+#define REDCR3           ((volatile uint32_t *)(RSA_BASEADDR+0x560))
+#define REDCRH           ((volatile uint32_t *)(RSA_BASEADDR+0x580))
+#define REDUR            ((volatile uint32_t *)(RSA_BASEADDR+0x600))
+#define REDVR            ((volatile uint32_t *)(RSA_BASEADDR+0x680))
+#define REDVR2           ((volatile uint32_t *)(RSA_BASEADDR+0x6c0))
+#define REDPR            ((volatile uint32_t *)(RSA_BASEADDR+0x700))
+#define REDPR1           ((volatile uint32_t *)(RSA_BASEADDR+0x720))
+#define REDPR2           ((volatile uint32_t *)(RSA_BASEADDR+0x740))
+#define REDPR3           ((volatile uint32_t *)(RSA_BASEADDR+0x760))
+#define REDPRH           ((volatile uint32_t *)(RSA_BASEADDR+0x780))
+
+#define ISO7811_BASE_ADDR_T1   *((volatile uint32_t *)(ISO7811_BASEADDR+0x00))
+#define ISO7811_BASE_ADDR_T2   *((volatile uint32_t *)(ISO7811_BASEADDR+0x04))
+#define ISO7811_BASE_ADDR_T3   *((volatile uint32_t *)(ISO7811_BASEADDR+0x08))
+#define ISO7811_CTRL           *((volatile uint32_t *)(ISO7811_BASEADDR+0x0C))
+
+#define ISO7811_T1_PEAK_VALUE_CFG   *((volatile uint32_t *)(ISO7811_BASEADDR+0x10))
+#define ISO7811_T1_PEAK_WIDTH_CFG   *((volatile uint32_t *)(ISO7811_BASEADDR+0x14))
+#define ISO7811_T1_PULSE_WIDTH_CFG  *((volatile uint32_t *)(ISO7811_BASEADDR+0x18))
+#define ISO7811_T1_AGC_CFG          *((volatile uint32_t *)(ISO7811_BASEADDR+0x1c))
+
+#define ISO7811_T2_PEAK_VALUE_CFG   *((volatile uint32_t *)(ISO7811_BASEADDR+0x20))
+#define ISO7811_T2_PEAK_WIDTH_CFG   *((volatile uint32_t *)(ISO7811_BASEADDR+0x24))
+#define ISO7811_T2_PULSE_WIDTH_CFG  *((volatile uint32_t *)(ISO7811_BASEADDR+0x28))
+#define ISO7811_T2_AGC_CFG          *((volatile uint32_t *)(ISO7811_BASEADDR+0x2c))
+
+#define ISO7811_T3_PEAK_VALUE_CFG   *((volatile uint32_t *)(ISO7811_BASEADDR+0x30))
+#define ISO7811_T3_PEAK_WIDTH_CFG   *((volatile uint32_t *)(ISO7811_BASEADDR+0x34))
+#define ISO7811_T3_PULSE_WIDTH_CFG  *((volatile uint32_t *)(ISO7811_BASEADDR+0x38))
+#define ISO7811_T3_AGC_CFG          *((volatile uint32_t *)(ISO7811_BASEADDR+0x3c))
+
+#define ISO7811_STATUS              *((volatile uint32_t *)(ISO7811_BASEADDR+0x40))
+#define ISO7811_CHAR_NUM            *((volatile uint32_t *)(ISO7811_BASEADDR+0x44))
+#define ISO7811_INTERFER_CHAR_NUM   *((volatile uint32_t *)(ISO7811_BASEADDR+0x48))
+#define ISO7811_DC_EST              *((volatile uint32_t *)(ISO7811_BASEADDR+0x4c))
+#define ISO7811_INTF_PEAK           *((volatile uint32_t *)(ISO7811_BASEADDR+0x50))
+#define ISO7811_AGC_PEAK_VAL        *((volatile uint32_t *)(ISO7811_BASEADDR +0x54))
+
+#define SYST_CSR           *(volatile int*)0xE000E010
+#define SYST_RVR           *(volatile int*)0xE000E014
+#define SYST_CVR           *(volatile int*)0xE000E018
+
+#define TRACE_FIFO         *(volatile int*)0xe0002020
+#define NVIC_ISER          *(volatile int*)0xe000e100
+#define NVIC_ICER          *(volatile int*)0xe000e180
+#define NVIC_ISPR          *(volatile int*)0xe000e200
+#define NVIC_ICPR          *(volatile int*)0xe000e280
+
+#define CRC_RESULT_REG     *(volatile uint32_t *)(CRC_BASEADDR+0X04)
+#define CRC_MASK_REG       *(volatile uint32_t *)(CRC_BASEADDR+0X08)
+#define CRC_DATAB_REG      *(volatile byte *)(CRC_BASEADDR+0X80)
+#define CRC_DATAS_REG      *(volatile short int *)(CRC_BASEADDR+0X80)
+#define CRC_DATA_REG       *(volatile int *)(CRC_BASEADDR+0X80)
+
+#define ADC_CTRL0 *(volatile uint8_t*)0xC8970
+#define ADC_CTRL1	*(volatile uint8_t*)0xC8971
+#define ADC_CTRL2	*(volatile uint8_t*)0xC8972
+#define ADC_CTRL3 *(volatile uint8_t*)0xC8973
+#define ADC_ENBLE *(volatile uint8_t*)0xC8906
+#define ADC_RDATA *(volatile uint16_t*)0xf850e
+
+/* SysTick registers */
+/* SysTick control & status */
+#define SYSTICK_CSR     ((volatile unsigned int *)0xE000E010)
+/* SysTick Reload value */
+#define SYSTICK_RVR     ((volatile unsigned int *)0xE000E014)
+/* SysTick Current value */
+#define SYSTICK_CVR     ((volatile unsigned int *)0xE000E018)
+/* SysTick CSR register bits */
+#define SYSTICK_CSR_COUNTFLAG     16
+#define SYSTICK_CSR_CLKSOURCE     2
+#define SYSTICK_CSR_TICKINT       1
+#define SYSTICK_CSR_ENABLE        0
+
+//================ bit definitions ====================
+#define OTBIT_DIN                       1<<0
+#define OTBIT_DLE                       1<<1
+#define OTBIT_CEB                       1<<2
+#define OTBIT_RSTB                      1<<3
+#define OTBIT_CLE                       1<<4
+#define OTBIT_PGMEN                     1<<5
+#define OTBIT_PGMVFY                    1<<6
+#define OTBIT_READEN                    1<<7
+#define OTBIT_VPPEN                     1<<8
+#define OTBIT_WEB                       1<<9
+
+#define AES_CNTRL_REG_START             0x1
+
+#define AES_CNTRL_KEY_SEL_128           0X00
+#define AES_CNTRL_KEY_SEL_192           0X08
+#define AES_CNTRL_KEY_SEL_256           0X10
+
+#define AES_CNTRL_ENC                   0X00
+#define AES_CNTRL_DEC                   0X02
+
+#define AES_CNTRL_ENABLE_RAND           0X20
+
+#define DMACH_QSPI                    0
+#define DMACH_SPID0                   1
+#define DMACH_SPID1                   2
+#define DMACH_UART0                   3
+#define DMACH_UART1                   4
+#define DMACH_IICD                    5
+#define DMACH_MEMCP                   6
+
+#define DMA_START_BIT                 7
+#define DMA_CLR_INTR_BIT              6
+#define DMA_RESET_BIT                 5
+
+//==DES==
+#define DESCNTRL_REG_START            0x1
+#define DESCNTRL_REG_ENCRYPT          0x2
+#define DESCNTRL_REG_KEY_SEL          0xc
+#define DESCNTRL_REG_DES_MODE         0x10
+#define DESCNTRL_REG_OP_MODE          0x60
+#define DESCNTRL_REG_RAND_EN          0x80
+
+#define DESCNTRL_REG_ENCRYPT_ENC      0X00
+#define DESCNTRL_REG_ENCRYPT_DEC      0X02
+
+#define DESCNTRL_REG_KEY_SEL_DES1     0x00
+#define DESCNTRL_REG_KEY_SEL_DES2     0x04
+#define DESCNTRL_REG_KEY_SEL_DES3     0x08
+
+#define DESCNTRL_REG_KEY_SEL_TDES2    0x00
+#define DESCNTRL_REG_KEY_SEL_TDES3    0x04
+
+#define DESCNTRL_REG_DES_MODE_DES     0X00
+#define DESCNTRL_REG_DES_MODE_TDES    0X10
+
+#define DESCNTRL_REG_OP_MODE_ECB      0x00
+#define DESCNTRL_REG_OP_MODE_CBC      0x20
+//==DES==END==
+
+//==RSA==
+//sfr bit
+// RECR register
+#define RECR_start                    0x01
+#define RECR_idle_run                 0x02
+#define RECR_bus_crypt_en             0x04
+// RESR register
+#define RESR_error_flag               0x01
+#define RESR_opdata_error             0x02
+//REINT register
+#define REINT_rsa_int                 0x01
+//==RSA==END==
+
+#define CLKCLS_INT      1
+#define CLKCLS_SHA      2
+#define CLKCLS_CRC      3
+#define CLKCLS_TIM      4
+#define CLKCLS_WDT      5
+#define CLKCLS_USB      6
+#define CLKCLS_SPI      7
+#define CLKCLS_DES      8
+#define CLKCLS_RSA      9
+#define CLKCLS_AES      10
+#define CLKCLS_GPIO     11
+#define CLKCLS_7816     12
+#define CLKCLS_BT       13
+#define CLKCLS_SM4      14
+#define CLKCLS_UART     15
+#define CLKCLS_7811     16
+#define CLKCLS_ADC7811  17
+#define CLKCLS_CP       18
+
+#define INTR_USB     0
+#define INTR_IIC     1
+#define INTR_QSPI    2
+#define INTR_SPI0    3
+#define INTR_SPI1    4
+#define INTR_UART0   5
+#define INTR_UART1   6
+#define INTR_MEMCP   7
+#define INTR_RSA     8
+#define INTR_SCI0    9
+#define INTR_SCI1    10
+#define INTR_BT      11
+#define INTR_GPIO    12
+#define INTR_TMR0    13
+#define INTR_TMR1    14
+#define INTR_TMR2    15
+#define INTR_TMR3    16
+#define INTR_TMR4    17
+#define INTR_TMR5    18
+#define INTR_TMR6    19
+#define INTR_TMR7    20
+#define INTR_TMR8    21
+#define INTR_SM4     22
+#define INTR_SEC     23
+#define INTR_ISO7811 24
+#define INTR_TRNG    25
+#define INTR_WDT     26
+
+#define SCICFG_TMODE      0
+#define SCICFG_BIT_ORDER  1
+#define SCICFG_PAD_TYPE   2
+#define SCICFG_ETU_SEL    3
+#define SCICFG_RETRY      5
+#define SCICFG_RETRY_EN   8
+#define SCICFG_IO_EN      9
+#define SCICFG_BGTEN      10
+#define SCICFG_CWTEN      11
+#define SCICFG_MCLK_SEL   12
+#define SCICFG_MASTER     15
+#define SCICFG_EDCEN      16
+
+#define KCFG_COL      3
+#define KCFG_MDDBC    8
+#define KCFG_MUDBC    12
+#define KCFG_UDBC     16
+#define KCFG_CYLE     20
+
+#define SM4_CNTRL_ECB 0X00
+#define SM4_CNTRL_CBC 0X02
+#define SM4_CNTRL_ENC 0X01
+#define SM4_CNTRL_DEC 0X00
+
+/* =============== qspi flash command =================== */
+#define W25X_WRITE_ENABLE       0x06
+#define W25X_WRITE_DISABLE      0x04
+#define W25X_READ_STATUS1       0x05
+#define W25X_READ_STATUS2       0x35
+#define W25X_WRITE_STATUS       0x01
+#define W25X_READ_DATA          0x03
+#define W25X_FASTREAD_DATA      0x0B
+#define W25X_FASTREAD_DUAL1     0x3B
+#define W25X_FASTREAD_DUAL2     0xBB
+
+#define W25X_FASTREAD_QUAD1     0x6B
+#define W25X_FASTREAD_QUAD2     0xEB
+#define W25X_FASTREAD_QUAD3     0xE7
+
+#define W25X_PAGE_PROGRAM       0x02
+#define W25X_SECTOR_ERASE       0x20
+#define W25X_BLOCK_ERASE32K     0x52
+#define W25X_BLOCK_ERASE64K     0xD8
+#define W25X_CHIP_ERASE         0xC7
+#define W25X_POWER_DOWN         0xB9
+#define W25X_RELEASE_POWERDOWN  0xAB
+#define W25X_DEVICEID           0xAB
+#define W25X_MANUFACT_DEVICEID  0x90
+#define W25X_JEDEC_DEVICEID     0x9F
+
+#define QSPICFG_XIPEN       1 << 12
+#define QSPICFG_DECEN       1 << 13
+#define QSPICFG_DUAL_MODE   1 << 0
+#define QSPICFG_QUAD_MODE   2 << 0
+#define QSPICFG_MBYTE       1 << 2
+#define QSPICFG_MBYTE_CONT  1 << 3
+#define QSPICFG_RETRY       3 << 24
+
+#define QCSFT_DUMMY         8
+#define QCSFT_CMD           16
+
+#define QSPICFG_MODE_3B     QSPICFG_DUAL_MODE | W25X_FASTREAD_DUAL1 << QCSFT_CMD | 8 << QCSFT_DUMMY
+#define QSPICFG_MODE_6B     QSPICFG_QUAD_MODE | W25X_FASTREAD_QUAD1 << QCSFT_CMD | 8 << QCSFT_DUMMY
+#define QSPICFG_MODE_BB     QSPICFG_DUAL_MODE | QSPICFG_MBYTE | 0x60 | W25X_FASTREAD_DUAL2 << QCSFT_CMD
+#define QSPICFG_MODE_EB     QSPICFG_QUAD_MODE | QSPICFG_MBYTE | 0x60 | W25X_FASTREAD_QUAD2 << QCSFT_CMD | 4 << QCSFT_DUMMY
+#define QSPICFG_MODE_E7     QSPICFG_QUAD_MODE | QSPICFG_MBYTE | 0x60 | W25X_FASTREAD_QUAD3 << QCSFT_CMD | 2 << QCSFT_DUMMY
+
+#define LPMCFG_BUCK_EN      1 << 25
+#define LPMCFG_TIMER_EN     1 << 28
+#define LPMCFG_KRST_EN      1 << 29
+#define LPMCFG_SENSOR_DUR   1 << 30
+
+#define LPMSEN_SENSOR_DLY         5
+#define LPMSEN_SENSOR_LOCK        7
+#define LPMSEN_SHIELD_IO_EN       8
+#define LPMSEN_SHIELD_IO_TYPE     12
+#define LPMSEN_SHIELD_IO_PU       16
+#define LPMSEN_SHIELD_INTERVAL    24
+#define LPMSEN_SHIELD_ENABLE      27
+#define LPMSEN_SHIELD_PU_DLY      28
+#define LPMSEN_SHIELD_A_DLY       30
+#define LPMCFG_SENSOR_LOCK        31
+
+//gpio ctrl bit define
+#define  GPCFG_INPUT              0
+#define  GPCFG_QSPI_NCS           2
+#define  GPCFG_QSPI_SCK           3
+#define  GPCFG_QSPI_IO0           4
+#define  GPCFG_QSPI_IO1           5
+#define  GPCFG_QSPI_IO2           6
+#define  GPCFG_QSPI_IO3           7
+#define  GPCFG_UART0_TXD          8
+#define  GPCFG_UART0_RXD          9
+#define  GPCFG_UART0_RTS          10
+#define  GPCFG_UART0_CTS          11
+#define  GPCFG_UART1_TXD          12
+#define  GPCFG_UART1_RXD          13
+#define  GPCFG_UART1_RTS          14
+#define  GPCFG_UART1_CTS          15
+#define  GPCFG_PWM_OUT0           16
+#define  GPCFG_PWM_OUT1           17
+#define  GPCFG_PWM_OUT2           18
+#define  GPCFG_PWM_OUT3           19
+#define  GPCFG_PWM_OUT4           20
+#define  GPCFG_PWM_OUT5           21
+#define  GPCFG_PWM_OUT6           22
+#define  GPCFG_PWM_OUT7           23
+#define  GPCFG_SPID0_NCS          24
+#define  GPCFG_SPID0_SCK          25
+#define  GPCFG_SPID0_MOSI         26
+#define  GPCFG_SPID0_SDIO         27
+#define  GPCFG_SPID0_MISO         28
+#define  GPCFG_SPID0_NCSIN        29
+#define  GPCFG_SPID0_SCKIN        30
+#define  GPCFG_PWM_OUT8           31
+
+#define  GPCFG_SPID1_NCS          48
+#define  GPCFG_SPID1_SCK          49
+#define  GPCFG_SPID1_MOSI         50
+#define  GPCFG_SPID1_SDIO         51
+#define  GPCFG_SPID1_MISO         52
+#define  GPCFG_SPID1_NCSIN        53
+#define  GPCFG_SPID1_SCKIN        54
+#define  GPCFG_NFC_CLK_OUT        55
+#define  GPCFG_SCI7816_IO         56
+
+#define  GPCFG_ICE                57
+#define  GPCFG_IIC_SCL            58
+#define  GPCFG_IIC_SDA            59
+#define  GPCFG_JTAG_SWCLK         60
+#define  GPCFG_JTAG_SWDAT         61
+#define  GPCFG_OUTPUT_LOW         62
+#define  GPCFG_OUTPUT_HIGH        63
+#define  GPCFG_PU                 64
+#define  GPCFG_PD                 128
+#define  GPCFG_ANALOG             192
+
+#define TIM_CTRL_ENABLE         ((uint32_t)0)
+#define TIM_CTRL_START_LEVEL    ((uint32_t)1)
+#define TIM_CTRL_MODE           ((uint32_t)2)
+#define TIM_CTRL_AUTO_RELOAD    ((uint32_t)3)
+
+/* =============== macros =================== */
+#define PREFETCH_LINE(addr)	*(volatile int*)addr = 0
+#define GETWORD(p)    ((uint16_t)((*(volatile uint8_t *)((uint32_t)p)) |((((uint16_t)(*(volatile uint8_t *)((uint32_t)(p+1))))<<8) & 0xff00)))
+static inline void enable_clock(int id)
+{
+    SYSCTRL_CLK_CLS &= ~(1 << id);
+}
+static inline void disable_clock(int id)
+{
+    SYSCTRL_CLK_CLS |= 1 << id;
+}
+static inline void enable_intr(int intid)
+{
+    NVIC_ISER |= 1 << intid;
+}
+static inline void disable_intr(int intid)
+{
+    NVIC_ICER = 1 << intid;
+}
+static inline int issim()
+{
+    return SYSCTRL_ROM_SWITCH & 2;
+}
+static inline void seesim(void)
+{
+    *(volatile uint8_t *)(0xf853c) = (*(volatile uint8_t *)(0xf853c)) & 2 ? 0 : 2;
+}
+extern void delay(int);//delay(x)=delay(x*110+450ns)
+extern void invalidate_icache(int addr, int len);
+
+//#define SCY_FALSE  seesim1()
+
+/*********************************************/
+#define SYSCTRL_PCLK_CON		*(volatile int*)0xf7208
+#define SYSCTRL_POWERMODE		*(volatile int*)0xf7218
+
+//#define debug
+#endif	/* __YC3121_H__ */
Index: BT_doublebyte/sdk/Librarier/sdk/yc_7816/readme.txt
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/readme.txt	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/readme.txt	(working copy)
@@ -0,0 +1,46 @@
+鍦ㄤ娇鐢⊿CI鎺ュ彛鏃讹紝闇瑕佸垵濮嬪寲SCI鍚処O鍙ｅ紩鑴氾紝鏍规嵁瀹為檯浣跨敤寮曡剼鍜屽崱鍒颁綅妫娴嬬數骞宠繘琛屽垵濮嬪寲銆
+娉ㄦ剰涓锛氬崱鍒颁綅鐢靛钩璁剧疆涓烘湭鎻掑崱鏃禝O寮曡剼鐢靛钩鐘舵併 1涓洪珮鐢靛钩銆佷綆涓0浣庣數骞.
+
+涓嬮潰鍑芥暟鍦ㄥ璁惧垵濮嬪寲鏃惰皟鐢ㄣ
+void ISO7816_IO_Config(void)
+{
+    sci_pin.clk.gpio_group = GPIOC;
+    sci_pin.clk.gpio_pin = GPIO_Pin_13;
+
+    sci_pin.io.gpio_group = GPIOC;
+    sci_pin.io.gpio_pin = GPIO_Pin_14;
+
+    sci_pin.reset.gpio_group = GPIOC;
+    sci_pin.reset.gpio_pin = GPIO_Pin_15;
+
+    sci_pin.detect.gpio_group = DET_PORT;
+    sci_pin.detect.gpio_pin = DET_PIN;
+    GPIO_Config(sci_pin.detect.gpio_group,sci_pin.detect.gpio_pin,INPUT|PULL_UP);
+    sci_pin.detect_state = 1;
+	
+    period_7816 = (CPU_MHZ / 4000000 / 2) - 1;
+    contact_reset_l_cnt = 42000 * (CPU_MHZ / 1000000) / 4;
+    contact_atr_rfb_time_cnt = 47000 * (CPU_MHZ / 1000000) / 4;
+    contact_atr_rab_time_cnt = (20164 * (CPU_MHZ / 1000000) / 4) * 372;
+
+    atr_time_start();
+}
+
+娉ㄦ剰浜岋細
+yc_7816.h鍐呭畯瀹氫箟
+閲忎骇鏃跺簲濡備笅锛
+//#define DEBUG_7816_EMV          //瀹氫箟鏃跺紑鍚疎MV娴嬭瘯鏃舵墦鍗颁氦浜掔姸鎬
+//#define DEBUG_7816              //瀹氫箟鏃跺紑鍚墦鍗颁氦浜掓暟鎹
+//#define EMV_L1_TEST             //瀹氫箟鏃惰繘琛孍MV娴嬭瘯锛岄噺浜т唬鐮佸睆钄芥瀹氫箟
+
+杩囨鏃跺涓嬶細
+#define DEBUG_7816_EMV          //瀹氫箟鏃跺紑鍚疎MV娴嬭瘯鏃舵墦鍗颁氦浜掔姸鎬
+//#define DEBUG_7816              //瀹氫箟鏃跺紑鍚墦鍗颁氦浜掓暟鎹
+#define EMV_L1_TEST             //瀹氫箟鏃惰繘琛孍MV娴嬭瘯锛岄噺浜т唬鐮佸睆钄芥瀹氫箟
+
+娉ㄦ剰涓夛細
+SCI妯″潡鐢ㄥ埌涓や釜瀹氭椂鍣ㄣ傚畾鏃跺櫒0鐢ㄤ簬璁℃椂銆佸畾鏃跺櫒3鐢ㄤ簬浜х敓clk銆傚簲鐢ㄤ唬鐮佽閬垮厤浣跨敤杩欎袱涓畾鏃跺櫒銆
+
+娉ㄦ剰鍥涳細
+閲忎骇鏃跺紑鍚秴鏃堕鍑哄姛鑳斤紝鏃堕棿璁剧疆榛樿涓3S.搴旂敤鍥轰欢濡傚紑鍚湅闂ㄧ嫍寤鸿鏃堕棿澶т簬绛変簬6S.
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816.h	(working copy)
@@ -0,0 +1,231 @@
+/*
+File Name    : yc_iso7816.h
+Author       : Yichip
+Version      : V2.0
+Date         : 2020/7/28
+Description  : iso7816 encapsulation.
+*/
+
+#ifndef __YC_ISO7816_H__
+#define __YC_ISO7816_H__
+
+#include "yc3121.h"
+#include "yc_gpio.h"
+
+//#define DEBUG_7816_EMV          //瀹氫箟鏃跺紑鍚疎MV娴嬭瘯鏃舵墦鍗颁氦浜掔姸鎬
+//#define DEBUG_7816              //瀹氫箟鏃跺紑鍚墦鍗颁氦浜掓暟鎹
+//#define EMV_L1_TEST             //瀹氫箟鏃惰繘琛孍MV娴嬭瘯锛岄噺浜т唬鐮佸睆钄芥瀹氫箟
+
+typedef struct
+{
+    uint8_t gpio_group;
+    uint16_t gpio_pin;
+} GPIO_DEF;
+
+typedef struct
+{
+    GPIO_DEF clk;
+    GPIO_DEF io;
+    GPIO_DEF reset;
+    GPIO_DEF detect;
+    uint8_t detect_state;		//鏈彃鍗℃椂锛屽崱鍒颁綅IO鐢靛钩鐘舵侊紝楂樹负1銆佷綆涓0
+} SCI_PIN_Def;
+
+extern SCI_PIN_Def sci_pin;
+
+#define 	TIM0_CNT    TIM_CNT(0)
+#define     SYSCTRL_HWCTRL_VAL  SYSCTRL_HWCTRL(0)     
+
+#define 	ISO7816_TIMx  TIM3
+
+#define 	CONTACT_RESET_L_CNT				contact_reset_l_cnt        //(40000-45000) 澶嶄綅寮曡剼淇濇寔浣庣數骞虫寔缁椂闂
+#define 	CONTACT_ATR_RFB_TIME_CNT		contact_atr_rfb_time_cnt        //42019(400-40000)	绛夊緟IC鍥炲簲绗竴涓狝TR瀛楄妭鐨勬渶澶ф椂闂
+#define 	CONTACT_ATR_RAB_TIME_CNT		contact_atr_rab_time_cnt  //19200etu鍐呭浣嶄俊鎭簲绛斿畬鎴(TS - LAST)
+#define     CONTACT_OVER_TIME_CNT           contact_over_time_cnt       //閲忎骇涓渶澶х殑鎺ユ敹銆佸彂閫佽秴鏃舵椂闂达紝璁剧疆涓3S
+#define     CONTACT_OVER_TIME_VAL           3                           //閲忎骇涓渶澶х殑鎺ユ敹銆佸彂閫佽秴鏃舵椂闂达紝璁剧疆涓3S
+
+#define 	ATR_SIZE_MAX                0x33
+#define	 	REC_SIZE_MAX                0x107 //5+256+2
+#define 	SEND_SIZE_MAX               0x103 //3+254+2
+
+
+#define 	PROTOCOL_T0                 0
+#define 	PROTOCOL_T1                 1
+
+//閿欒鐮佸畾涔
+#define 	OK                          0
+#define 	NOK                         1
+
+#define     ISO7816_POWER_OFF           0x4E
+#define     ISO7816_ATR_ERROR           0x4F
+#define     ISO7816_ATR_LEN_ERROR       0x50
+#define     ISO7816_ATR_TCK_ERROR       0x51
+#define     ISO7816_PROTOCOL_ERROE      0x53
+#define     ISO7816_T1_LRC_ERROR        0x54
+#define     ISO7816_CARD_STUTES_ERROR   0x56
+#define     ISO7816_OPERATE_MODE_ERROR  0x57
+#define     ISO7816_PARA_ERROR          0x59
+#define     ISO7816_REC_TIMEOUT         0x5A
+#define     ISO7816_SEND_TIMEOUT        0x5B
+#define     ISO7816_ERR_NUM_OVER        0x5C
+#define     ISO7816_T1_TRANSFER_ERROR   0x60
+
+#define     ISO7816_CARD_PRESENT        0x61
+#define     ISO7816_CARD_ABSENT         0x62
+
+#define     ISO7816_ATR_TB1_ERROR       0x70
+#define 	ISO7816_PROCEDURE_INS_ERROR 0x71
+
+#define     ISO7816_PARITY_ERROR        0x73
+#define     ISO7816_ATR_TA1_ERROR       0x74
+
+#define 	ISO7816_ATR_TC2_ERROR		0x75
+#define 	ISO7816_ATR_TC3_ERROR		0x76
+#define 	ISO7816_ATR_TA2_ERROR		0x77
+#define 	ISO7816_ATR_TC1_ERROR		0x78
+#define 	ISO7816_ATR_TD2_ERROR		0x79
+#define 	ISO7816_ATR_TB2_ERROR		0x80
+
+#define     ISO7816_ATR_TA3_ERROR       0x78
+#define     ISO7816_ATR_TB3_ERROR       0x79
+#define     ISO7816_RET_RESPONSE_DIFFERENT  0x7C
+#define     ISO7816_RET_BROKEN_CHAIN        0x7D
+#define     ISO7816_RET_CHAIN               0x7E
+#define     ISO7816_DATALEN_ERR             0x7F
+#define     ISO7816_NOTLRC_ERROR        0x81
+
+
+#define 	BIT7    ((uint8_t)1<<7)
+#define 	BIT6    ((uint8_t)1<<6)
+#define 	BIT5    ((uint8_t)1<<5)
+#define 	BIT4    ((uint8_t)1<<4)
+#define 	BIT3    ((uint8_t)1<<3)
+#define 	BIT2    ((uint8_t)1<<2)
+#define 	BIT1    ((uint8_t)1<<1)
+#define 	BIT0    ((uint8_t)1<<0)
+
+
+//***********
+#define     ISO7816_ACTIVE_CARD         0x00
+#define     ISO7816_WARM_RESET          0x01
+#define     ISO7816_DEACTIVE_CARD       0x02
+
+#define     ISO7816_VCC_0V              0x00
+#define     ISO7816_VCC_3_3V            0x01
+#define     ISO7816_VCC_1_8V            0x02
+
+#define     ISO7816_TYPE_T0             0x00
+#define     ISO7816_TYPE_T1             0x01
+
+#define     ISO7816_NULL_T0             0x60
+
+#define     COMPARE_RETURN(ret);        if(OK != ret)        \
+                                        {                   \
+                                            return  ret;    \
+                                        }
+#define     GET_4_BITS_H(a)            (((a) >>4)& 0x0F)
+#define     GET_4_BITS_L(a)            ((a)& 0x0F)
+
+#define  R_BLK                                 0x80      /*R-BLK鐨勯珮2浣*/
+#define  S_BLK                                 0xC0      /*S-BLK鐨勯珮2浣*/
+#define  S_RQS_MSK                             0x3F      /*S-BLK request  浣6浣峬ask*/
+#define  S_RSP_MSK                             0x23      /*S-BLK response 浣6浣峬ask*/
+#define  IFSC                                  0xFE      /*淇℃伅鍩焥ize*/
+#define  HALF_FIFO                             8         /*鍗婄┖*/
+#define  M_BIT                                 0x20      /*琛ㄧずchain鐘舵*/
+#define  NS_BIT                                0x40      /*I-BLK搴忓垪鍙蜂綅*/
+#define  NR_BIT                                0x10      /*R-BLK搴忓垪鍙蜂綅*/
+
+#define  ERR_PARITY                            1         /*濂囧伓鏍￠獙閿*/
+#define  ERR_CHKSUM                            2         /*鏍￠獙鍑洪敊*/
+#define  ERR_PCB                               4         /*鍗忚鎺у埗瀛楄妭閿*/
+#define  ERR_LEN                               8         /*闀垮害瀛楄妭閿*/
+#define  ERR_RELVNT_S                          16        /*鏈塖 request, 鏃爏 response*/
+#define  ERR_FF								   32		/*鎺ユ敹鍒版暟鎹暱搴︿负FF*/
+/*7816鍙戦佹帴鏀*/
+#define RECV                                  1
+#define SEND                                  0
+#define I_BLOCK_C                             0
+#define R_BLOCK_C                             1
+#define S_BLOCK_C                             2
+#define T_S_IFS                                 2          /*璋冩暣淇℃伅鍩熺殑S-BLK*/
+#define T_S_ABORT                               3          /*鎵撴柇CHAIN鐨凷-BLK*/
+#define T_S_WTS                                 4          /*璇锋眰寤堕暱绛夊緟鏃剁殑S-BLK*/
+
+#define T1_HEAD_LEN                             3		   /*甯уご闀垮害*/
+#define ERR_SEND_CNT                            3		   /*閿欒閲嶅彂娆℃暟*/
+
+
+//鐩稿叧鍏ㄥ眬鍙橀噺鍙傛暟
+typedef struct
+{
+    uint8_t   bIFSC;
+    uint8_t   bIFSD;
+    uint8_t   bNum;
+    uint8_t   bNumCard;
+    uint8_t   bLink;
+    uint8_t   bEDCType;
+    uint16_t  wtx;
+    uint8_t   bFlgSBSnd;
+    uint8_t   bFlgSRec;
+    uint8_t   bFlgIRec;
+    uint8_t   bRecRBLink;
+    uint8_t 	bErrCnt;
+    uint8_t 	bErrNotify;
+    uint8_t 	bFlagSendChain;
+    uint8_t 	aRBlk[5];
+} st_T1_Parameters;
+
+//ATR绛7816闇瑕佺敤鐨勫弬鏁
+typedef struct
+{
+    uint8_t bFlag;
+    uint8_t bTA1;		 						//TA1鐨勫
+    uint8_t bTA2;								//TA2鐨勫
+    uint8_t bTA2Flag;							//TA2鏄惁瀛樺湪鏍囧織
+    uint8_t bProlType;						//鍗忚绫诲瀷鏍囧織 0涓篢0  1涓篢1
+    uint8_t aAtr[ATR_SIZE_MAX];				//ATR缂撳瓨鍖
+    uint8_t aRecBuff[REC_SIZE_MAX];			//鎺ユ敹鏁版嵁缂撳瓨鍖
+} st_7816_Para;
+
+//璺烼1鏈夊叧鐨勫弬鏁
+extern st_T1_Parameters g_T1;
+//璺7816鍗忚鍙傛暟鏈夊叧鐨勫弬鏁
+extern st_7816_Para g_7816Para;
+
+extern unsigned int terminal_send_cwt;
+extern unsigned int terminal_rec_cwt;
+extern unsigned int terminal_rec_bwt;
+
+
+extern uint16_t fi_table[16];
+extern uint16_t di_table[16];
+
+extern unsigned int terminal_rec_bwt_atr;
+extern unsigned int terminal_change_rec_bwt_num;
+
+extern uint32_t period_7816;
+extern uint32_t contact_reset_l_cnt;
+extern uint32_t contact_atr_rfb_time_cnt;
+extern uint32_t contact_atr_rab_time_cnt;
+extern uint32_t contact_over_time_cnt;
+
+extern volatile unsigned int time0_cnt_last;
+
+void atr_time_start(void);
+uint16_t ISO7816_OperateSelect(uint8_t OperateMode, uint8_t vcard_set);
+uint16_t ISO7816_GetAtr(uint8_t *pAtr, uint8_t *pLength);
+void iso7816_deactive(void);
+uint16_t ISO7816_DisposeATR(uint8_t *pATR, uint8_t ATRLen);
+void ISO7816_config_mode_fun(void);
+uint16_t ISO7816_DisposePPS(uint8_t TA1);
+uint16_t ISO7816_TPDU_T1Send(uint8_t *pCommand, uint16_t CommandLength, uint8_t Type);
+uint16_t ISO7816_Dispose_CMD(uint8_t *pCmd, uint16_t CmdLen, uint8_t *pResp,  uint16_t *pRespLen);
+//state 0-vcard off  1-3.3 vcard   2-1.8 vcard
+uint8_t ISO7816_cold_reset(uint8_t state);
+void ISO7816_warm_reset(void);
+//鍗℃娴
+uint8_t detect_io_state(void);
+uint16_t ISO7816_LoopBack(void);
+
+#endif	/* __YC_ISO7816_H__ */
Index: BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816.c	(working copy)
@@ -0,0 +1,1249 @@
+/*
+File Name    : yc_iso7816.c
+Author       : Yichip
+Version      : V2.0
+Date         : 2020/7/28
+Description  : iso7816 encapsulation.
+*/
+
+#include"string.h"
+
+#include "yc_7816.h"
+#include "system.h"
+#include "yc_timer.h"
+#include "yc_exti.h"
+#include "yc_7816_T1.h"
+#include "yc_7816_T0.h"
+
+unsigned int terminal_send_cwt = 12;
+unsigned int terminal_rec_cwt = 10086;
+unsigned int terminal_rec_bwt = 15380;
+unsigned int terminal_rec_bgt = 26;
+
+unsigned int terminal_rec_bwt_atr = 0;
+unsigned int terminal_change_rec_bwt_num = 0;
+
+
+unsigned char atr_cwt_valid_flag = 0;	//鎺ユ敹澶嶄綅淇℃伅鏃讹紝濡傛灉鏈敹鍒扮涓涓瓧鑺備箣鍓峜wt鏍囧織缃竴锛屾鏍囧織姝ゆ椂鏃犳晥
+
+volatile unsigned int time0_cnt_last = 0;
+volatile unsigned int time0_cnt_new = 0;
+
+volatile unsigned char contact_atr_reset_l_flag = 0;			//澶嶄綅IO淇濇寔浣庣數骞冲埌鏃堕棿鏍囧織
+volatile unsigned char contact_atr_rfb_overtime_falg = 0;		//ICC 鍥炲簲绗竴涓瓧鑺傝秴鏃舵爣蹇
+volatile unsigned char contact_atr_rab_overtime_falg = 0;		//ICC 鍥炲簲鎵鏈夊瓧鑺傝秴鏃舵爣蹇
+
+
+uint16_t fi_table[16] = {372, 372, 558, 744, 1116, 1488, 1860, 0,
+                         0, 512, 768, 1024, 1536, 2048, 0, 0
+                        };
+uint16_t di_table[16] = {0, 1, 2, 4, 8, 16, 32, 64,
+                         12, 20, 0, 0, 0, 0, 0, 0
+                        };
+
+uint32_t period_7816 = 0;
+uint32_t contact_reset_l_cnt = 0;
+uint32_t contact_atr_rfb_time_cnt = 0;
+uint32_t contact_atr_rab_time_cnt = 0;
+uint32_t contact_over_time_cnt = 0;
+
+//璺烼1鏈夊叧鐨勫弬鏁
+st_T1_Parameters g_T1;
+//璺7816鍗忚鍙傛暟鏈夊叧鐨勫弬鏁
+st_7816_Para g_7816Para;
+//sci鎺ュ彛寮曡剼瀹氫箟
+SCI_PIN_Def sci_pin;
+
+uint8_t get_io_num(uint8_t gpio_group, uint16_t pin)
+{
+    uint16_t val;
+    uint8_t num = 0, i;
+
+    val = pin;
+    for (i = 0; i < 16; i++)
+    {
+        if ((val >> i) & 1)
+        {
+            num = i;
+            break;
+        }
+    }
+
+    val = gpio_group * 16 + num;
+    return val;
+}
+
+uint8_t detect_io_state(void)
+{
+    return GPIO_ReadInputDataBit((GPIO_TypeDef)sci_pin.detect.gpio_group, sci_pin.detect.gpio_pin);
+}
+
+uint8_t crad_in_io_filter(void)
+{
+    uint8_t ret[2];
+
+    ret[0] = detect_io_state();
+    delay_ms(2);
+    ret[1] = detect_io_state();
+    if (ret[0] == ret[1])
+    {
+        return ret[0];
+    }
+
+    return 2;
+}
+
+//state 0-vcard off  1-3.3 vcard   2-1.8 vcard
+void vcard_control(uint8_t state)
+{
+    if (state == 1)
+    {
+        SYSCTRL_HWCTRL(0) |= 0x1f;
+    }
+    else if (state == 2)
+    {
+        SYSCTRL_HWCTRL(0) &= 0xef;
+        SYSCTRL_HWCTRL(0) |= 0x8;
+    }
+    else
+    {
+        SYSCTRL_HWCTRL(0) &= 0xf7;
+    }
+}
+
+void iso7816_deactive(void)
+{
+    GPIO_CONFIG(get_io_num(sci_pin.reset.gpio_group, sci_pin.reset.gpio_pin)) = GPCFG_OUTPUT_LOW;//RST
+    delay_ms(1);
+
+    GPIO_CONFIG(get_io_num(sci_pin.clk.gpio_group, sci_pin.clk.gpio_pin)) = GPCFG_OUTPUT_LOW;//clk
+    TIM_Cmd(ISO7816_TIMx, DISABLE);
+
+    GPIO_CONFIG(get_io_num(sci_pin.io.gpio_group, sci_pin.io.gpio_pin)) = GPCFG_OUTPUT_LOW;//io
+
+    vcard_control(ISO7816_VCC_0V);
+#ifdef DEBUG_7816
+    MyPrintf("power down\n");
+#endif
+}
+
+void timer0_enable(unsigned long num)
+{
+    TIM_InitTypeDef TIM_struct;
+
+    enable_clock(CLKCLS_TIM);
+
+    TIM_struct.period = num;
+    TIM_struct.TIMx = (TIM_NumTypeDef)0;
+    TIM_Init(&TIM_struct);
+    TIM_Cmd((TIM_NumTypeDef)0, ENABLE);
+}
+
+void atr_time_start(void)
+{
+    timer0_enable(0xffffffff);
+
+    contact_over_time_cnt = CONTACT_OVER_TIME_VAL*CPU_MHZ;
+}
+
+uint16_t ISO7816_RecAtrBytes(uint8_t *RxBuf, uint16_t RxLen)
+{
+    uint16_t  RemainLen = 0;
+
+    if ((!RxLen) || (NULL == RxBuf))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    do
+    {
+        if (detect_io_state() == sci_pin.detect_state)
+        {
+            return ISO7816_CARD_ABSENT;
+        }
+
+        if ((SCI7816_STAT & 0x80) && (atr_cwt_valid_flag == 1))				//CWT
+        {
+#ifdef DEBUG_7816
+            MyPrintf("CWT error\n");
+#endif
+            return ISO7816_REC_TIMEOUT;
+        }
+
+        if (contact_atr_rfb_overtime_falg == 0)
+        {
+            time0_cnt_new = TIM0_CNT;
+            time0_cnt_new = time0_cnt_last - time0_cnt_new;
+            if (time0_cnt_new >= CONTACT_ATR_RFB_TIME_CNT) //icc not response atr
+            {
+#ifdef DEBUG_7816
+                MyPrintf("receive atr firstbyte overtime %d\n", CONTACT_ATR_RFB_TIME_CNT);
+#endif
+                return ISO7816_REC_TIMEOUT;
+            }
+        }
+
+        if (contact_atr_rab_overtime_falg == 0)
+        {
+            time0_cnt_new = TIM0_CNT;
+            time0_cnt_new = time0_cnt_last - time0_cnt_new;
+            if (time0_cnt_new >= CONTACT_ATR_RAB_TIME_CNT) //icc response atr overtime
+            {
+#ifdef DEBUG_7816
+                MyPrintf("receive atr allbyte overtime\n");
+#endif
+                return ISO7816_REC_TIMEOUT;
+            }
+        }
+
+        if (SCI7816_STAT & 1)
+        {
+            *(RxBuf + RemainLen) = SCI7816_DATA;
+
+            if (SCI7816_STAT & 0x100)	//parity error
+            {
+#ifdef DEBUG_7816
+                MyPrintf("PARITY error\n");
+#endif
+                return ISO7816_PARITY_ERROR;
+            }
+
+#ifdef DEBUG_7816
+            MyPrintf("%02X ", *(RxBuf + RemainLen));
+#endif
+
+            RemainLen++;
+        }
+    }
+    while (RemainLen < RxLen);
+
+    return OK;
+}
+
+uint8_t ISO7816_cold_reset(uint8_t state)
+{
+    PWM_InitTypeDef PWM_struct;
+
+    uint16_t fi_table_1[16] = {372, 372, 558, 744, 1116, 1488, 1860, 0,
+                               0, 512, 768, 1024, 1536, 2048, 0, 0
+                              };
+    uint16_t di_table_1[16] = {0, 1, 2, 4, 8, 16, 32, 64,
+                               12, 20, 0, 0, 0, 0, 0, 0
+                              };
+
+#ifdef DEBUG_7816
+    MyPrintf("sci7816 cold reset\n");
+#endif
+
+    memcpy(fi_table, fi_table_1, 16);
+    memcpy(di_table, di_table_1, 16);
+
+    terminal_send_cwt = 20;
+    terminal_rec_cwt = 10086;
+
+    terminal_rec_bwt = 15380;
+    terminal_rec_bgt = 100;
+
+    g_7816Para.bTA1 = 0xff;
+    g_7816Para.bTA2 = 0xFF;
+    g_7816Para.bTA2Flag = 0;
+
+    g_7816Para.bFlag = 0;
+
+    contact_atr_reset_l_flag = 0;
+    contact_atr_rfb_overtime_falg = 0;
+    contact_atr_rab_overtime_falg = 0;
+
+    atr_cwt_valid_flag = 0;
+
+    vcard_control(ISO7816_VCC_0V);
+    GPIO_CONFIG(get_io_num(sci_pin.clk.gpio_group, sci_pin.clk.gpio_pin)) = GPCFG_OUTPUT_LOW;//clk
+    GPIO_CONFIG(get_io_num(sci_pin.reset.gpio_group, sci_pin.reset.gpio_pin)) = GPCFG_OUTPUT_LOW;//RST
+    GPIO_CONFIG(get_io_num(sci_pin.io.gpio_group, sci_pin.io.gpio_pin)) = GPCFG_OUTPUT_LOW;	//io
+
+    //enable power
+    vcard_control(state);
+
+    PWM_struct.HighLevelPeriod = period_7816;
+    PWM_struct.LowLevelPeriod = period_7816;
+    PWM_struct.SatrtLevel = OutputHigh;
+    PWM_struct.TIMx = ISO7816_TIMx;
+    TIM_PWMInit(&PWM_struct);
+    TIM_Cmd(ISO7816_TIMx, ENABLE);
+    GPIO_CONFIG(get_io_num(sci_pin.clk.gpio_group, sci_pin.clk.gpio_pin)) = GPCFG_PWM_OUT0 + ISO7816_TIMx;
+
+    //enable io
+    GPIO_CONFIG(get_io_num(sci_pin.io.gpio_group, sci_pin.io.gpio_pin)) = GPCFG_SCI7816_IO | GPCFG_PU;
+    uint8_t TempChar;
+    while (SCI7816_STAT & 1)
+    {
+        TempChar = SCI7816_DATA;
+#ifdef DEBUG_7816
+        MyPrintf("%02x", TempChar);
+        MyPrintf("\n");
+#endif
+
+        if (detect_io_state() == sci_pin.detect_state)
+        {
+            return ISO7816_CARD_ABSENT;
+        }
+    }
+
+    //clk
+    //delay 40000-45000clk  (250ns*42000clk = 10.5ms)
+    time0_cnt_last = TIM0_CNT;
+    time0_cnt_new = 0;
+    while (time0_cnt_new <= CONTACT_RESET_L_CNT)
+    {
+        time0_cnt_new = TIM0_CNT;
+        time0_cnt_new = time0_cnt_last - time0_cnt_new;
+    }
+
+    //config sci
+    SCI7816_CTRL |= 0x04;	//check atr first byte
+    SCI7816_CTRL |= 0x03;	//clear tx/rx fifo
+    SCI7816_STAT |= 0X124;	//clear tx/rx retry error
+
+    //config sci7816 tmode bit=1 瀹炵幇ATR鍙戦佸瓧鑺傛牎楠屼綅閿欒鏃跺彧瑕佸垽鏂嚭妫楠岄敊璇嵆鍙紝涓嶉渶瑕佸皢IO鎷変綆
+    SCI7816_MODE = (4 | 0 << SCICFG_ETU_SEL | 1 << SCICFG_MASTER | 3 << SCICFG_MCLK_SEL\
+                    | 1 << SCICFG_BGTEN | 1 << SCICFG_CWTEN | 1 << SCICFG_EDCEN | 1 << SCICFG_IO_EN) | 1 << SCICFG_TMODE;
+
+    SCI7816_ETU = 372;
+    SCI7816_BGT = terminal_rec_bgt;
+    SCI7816_CWT = terminal_rec_cwt;
+
+    //rst disable
+    GPIO_CONFIG(get_io_num(sci_pin.reset.gpio_group, sci_pin.reset.gpio_pin)) = GPCFG_OUTPUT_HIGH;//RST
+
+    //icc response atr firstbyte max time 42020 clk
+    time0_cnt_last = TIM0_CNT;
+    contact_atr_rfb_overtime_falg = 0;
+    contact_atr_rab_overtime_falg = 1;
+    return  OK;
+}
+
+void ISO7816_warm_reset(void)
+{
+#ifdef DEBUG_7816
+    MyPrintf("sci7816 warm reset\n");
+#endif
+
+    g_7816Para.bTA1 = 0xff;
+    g_7816Para.bTA2 = 0xFF;
+    g_7816Para.bTA2Flag = 0;
+
+    atr_cwt_valid_flag = 0;
+
+    SCI7816_CTRL |= 0x04;	//check atr first byte
+    SCI7816_CTRL |= 0x03;	//clear tx/rx fifo
+    SCI7816_STAT |= 0X124;	//clear tx/rx retry error
+
+    //config sci7816 tmode bit=1 瀹炵幇ATR鍙戦佸瓧鑺傛牎楠屼綅閿欒鏃跺彧瑕佸垽鏂嚭妫楠岄敊璇嵆鍙紝涓嶉渶瑕佸皢IO鎷変綆
+    SCI7816_MODE = (4 | 0 << SCICFG_ETU_SEL | 1 << SCICFG_MASTER | 3 << SCICFG_MCLK_SEL\
+                    | 1 << SCICFG_BGTEN | 1 << SCICFG_CWTEN | 1 << SCICFG_EDCEN | 1 << SCICFG_IO_EN) | 1 << SCICFG_TMODE;
+
+    GPIO_CONFIG(get_io_num(sci_pin.reset.gpio_group, sci_pin.reset.gpio_pin)) = GPCFG_OUTPUT_LOW;//RST
+
+    //delay 40000-45000clk  (250ns*42000clk = 10.5ms)
+    time0_cnt_last = TIM0_CNT;
+    time0_cnt_new = 0;
+    while (time0_cnt_new <= CONTACT_RESET_L_CNT)
+    {
+        time0_cnt_new = TIM0_CNT;
+        time0_cnt_new = time0_cnt_last - time0_cnt_new;
+    }
+
+    GPIO_CONFIG(get_io_num(sci_pin.reset.gpio_group, sci_pin.reset.gpio_pin)) = GPCFG_OUTPUT_HIGH;//RST
+
+    //icc response atr firstbyte max time 42020 clk
+    time0_cnt_last = TIM0_CNT;
+    contact_atr_rfb_overtime_falg = 0;
+    contact_atr_rab_overtime_falg = 1;
+}
+
+void ISO7816_config_mode_fun(void)
+{
+    if (g_7816Para.bProlType == PROTOCOL_T0)
+    {
+        SCI7816_MODE |= (1 << SCICFG_RETRY_EN) | (4 << SCICFG_RETRY);
+        SCI7816_MODE &= ~(1 << SCICFG_TMODE);
+    }
+    else
+    {
+        SCI7816_MODE |= 1 << SCICFG_TMODE;
+    }
+}
+
+uint16_t ISO7816_GetAtr(uint8_t *pAtr, uint8_t *pLength)
+{
+    uint8_t i;
+    uint8_t Len, Y, K, Tck;
+    uint16_t ret;
+    uint8_t TDn = 0;
+    uint8_t TD2Flag = 0;
+
+    if ((NULL == pAtr) || (NULL == pLength))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    ret = ISO7816_RecAtrBytes(pAtr, 1);  //Ts
+    if (OK != ret)
+    {
+        return ret;
+    }
+
+    SCI7816_CTRL &= 0XFB;
+
+    if ((pAtr[0] != 0x3b) && (pAtr[0] != 0x3f))
+    {
+        if (pAtr[0] == 0x23)
+        {
+            SCI7816_MODE &= ~(1 << SCICFG_BIT_ORDER);		//姝ｅ悜鍗＄墖
+        }
+        else if (pAtr[0] == 0x03)
+        {
+            SCI7816_MODE |= (1 << SCICFG_BIT_ORDER);		//鍙嶅悜鍗＄墖
+        }
+        else
+        {
+            return ISO7816_ATR_ERROR;
+        }
+    }
+
+    contact_atr_rfb_overtime_falg = 1;
+
+    time0_cnt_last = TIM0_CNT;
+    contact_atr_rab_overtime_falg = 0;
+
+    atr_cwt_valid_flag = 1;
+
+    ret = ISO7816_RecAtrBytes(pAtr + 1, 1); //T0
+    COMPARE_RETURN(ret);
+
+    Y = pAtr[1] & 0xF0;
+    K = pAtr[1] & 0x0F;
+    Len = 2;
+    g_7816Para.bProlType = 0xff;
+    while (Y)
+    {
+        TDn++;
+        if (Y & BIT4)
+        {
+            ret = ISO7816_RecAtrBytes(&pAtr[Len++], 1);
+            COMPARE_RETURN(ret);
+        }
+        if (Y & BIT5)
+        {
+            ret = ISO7816_RecAtrBytes(&pAtr[Len++], 1);
+            COMPARE_RETURN(ret);
+        }
+        if (Y & BIT6)
+        {
+            ret = ISO7816_RecAtrBytes(&pAtr[Len++], 1);
+            COMPARE_RETURN(ret);
+        }
+        if (Y & BIT7)
+        {
+            ret = ISO7816_RecAtrBytes(&pAtr[Len], 1);
+            COMPARE_RETURN(ret);
+            Y = pAtr[Len] & 0xF0;
+            if (g_7816Para.bProlType == 0xff)
+            {
+                g_7816Para.bProlType = pAtr[Len] & 0x0F;
+                if (1 < g_7816Para.bProlType)
+                {
+                    //濡傛灉鍗忚澶т簬1锛岄粯璁や负0
+                    g_7816Para.bProlType = 0;
+                }
+            }
+            //TD2瀛樺湪锛屽苟涓斿间负1 鎴 E
+            if (TDn == 2) /*&& (((pAtr[Len] & 0x0F) == 1) || ((pAtr[Len] & 0x0F) == 14))*/
+            {
+                TD2Flag = 1;
+            }
+
+            Len++;
+        }
+        else
+        {
+            Y = 0;
+        }
+    }
+
+    //濡傛灉鍗忚娌℃湁淇敼锛岄粯璁や负0
+    if (g_7816Para.bProlType == 0xff)
+    {
+        g_7816Para.bProlType = 0;
+    }
+
+    if (K)
+    {
+        ret = ISO7816_RecAtrBytes(&pAtr[Len], K);
+        COMPARE_RETURN(ret);
+        Len += K;
+    }
+    if (g_7816Para.bProlType || (TD2Flag == 1))
+    {
+        ret = ISO7816_RecAtrBytes(&pAtr[Len], 1);
+        COMPARE_RETURN(ret);
+        Len++;
+    }
+    if ((ATR_SIZE_MAX - 1) < Len)
+    {
+        return ISO7816_ATR_LEN_ERROR;
+    }
+    if (g_7816Para.bProlType)
+    {
+        for (i = 1, Tck = 0; i < Len; i++)
+        {
+            Tck ^= pAtr[i];
+        }
+        if (Tck)
+        {
+            return ISO7816_ATR_TCK_ERROR;
+        }
+    }
+
+    *pLength = Len;
+
+    //鍒ゆ柇Rx Fifo 涓槸鍚﹁繕鏈夋暟鎹紝濡傛灉鏈夌殑璇濓紝鐩存帴Warmrest
+    delay_ms(2);
+    i = 3;
+    ret = 0;
+    do
+    {
+        while (SCI7816_STAT & 1)
+        {
+            ret = 1;
+            ISO7816_RecAtrBytes(&pAtr[Len], 1);
+
+            if (detect_io_state() == sci_pin.detect_state)
+            {
+                return ISO7816_CARD_ABSENT;
+            }
+        }
+        if (ret == 1)
+        {
+            return ISO7816_ATR_LEN_ERROR;
+        }
+
+    }
+    while (i--);
+
+    return OK;
+}
+
+uint16_t ISO7816_DisposeATR(uint8_t *pATR, uint8_t ATRLen)
+{
+    uint8_t tmpLen;
+    uint8_t tmpTDx;
+    uint8_t offset;
+    uint32_t tmpTimer;
+    uint8_t TC1_N = 0;
+    uint8_t TD1_N = 0, TD1_Flag = 0;
+    uint8_t tmpCWI, tmpBWI;
+
+    //IFSC 榛樿鍊32
+    g_T1.bIFSC = 32;
+    g_7816Para.bFlag &= (~BIT0);
+    if ((pATR == NULL) || (ATRLen < 3) || (ATRLen > ATR_SIZE_MAX))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    tmpTDx = pATR[1] & 0xF0;
+
+    offset = 2;
+    //TA1--TD1
+    //TA1
+    if ((tmpTDx & BIT4) != 0)
+    {
+        offset++;
+        g_7816Para.bFlag |= BIT0;
+        g_7816Para.bTA1 = pATR[2];
+
+        if ((g_7816Para.bTA1 != 0x11) && (g_7816Para.bTA1 != 0x12) && (g_7816Para.bTA1 != 0x13))
+        {
+            //涓嶅彂PPS
+            //return ISO7816_ATR_TA1_ERROR;
+        }
+    }
+    //TB1
+    if ((tmpTDx & BIT5) != 0)
+    {
+        //濡傛灉鏄喎澶嶄綅锛屽繀椤昏鏈塗B1,骞朵笖鍊间负0
+        if (((g_7816Para.bFlag & BIT1) == 0) && (pATR[offset]) != 0)
+        {
+            return ISO7816_ATR_TB1_ERROR;
+        }
+        offset++;
+    }
+    else
+    {
+        //濡傛灉鏄喎澶嶄綅锛屽繀椤昏鏈塗B1
+        if ((g_7816Para.bFlag & BIT1) == 0)
+        {
+            return ISO7816_ATR_TB1_ERROR;
+        }
+    }
+
+    //TC1
+    if ((tmpTDx & BIT6) != 0)
+    {
+        if (pATR[offset] == 0xFF)
+        {
+            if (g_7816Para.bProlType == 1)
+            {
+                terminal_send_cwt = 11;
+            }
+            else//T0
+            {
+                terminal_send_cwt = 12;
+            }
+        }
+        else
+        {
+            terminal_send_cwt = pATR[offset] + 12;
+        }
+        //淇濆瓨N鍊硷紝鍚庨潰浼氱敤鍒
+        TC1_N = pATR[offset];
+        //TC1_Flag = 1;
+        offset++;
+    }
+    else
+    {
+        if (g_7816Para.bProlType == 1)
+        {
+            terminal_send_cwt = 11;
+        }
+        else//T0
+        {
+            terminal_send_cwt = 12;
+        }
+    }
+
+
+    //TD1
+    if ((tmpTDx & BIT7) != 0)
+    {
+        //鍙敮鎸乀=0  T=1
+        TD1_N = pATR[offset];
+        if ((TD1_N & 0x0F) == 1)
+        {
+            TD1_Flag = 1;
+        }
+        g_7816Para.bProlType = pATR[offset] & 0x0f;
+        tmpTDx = pATR[offset];
+        offset++;
+    }
+    else
+    {
+        tmpTDx = 0;
+        g_7816Para.bTA1 = 0x11;
+    }
+
+    //TA2-TD2
+    if (tmpTDx != 0)
+    {
+        //TA2
+        if ((tmpTDx & BIT4) != 0)
+        {
+            g_7816Para.bTA2Flag = 1;
+            g_7816Para.bTA2 = pATR[offset];
+            if ((pATR[offset] & 0x10) != 0)
+            {
+                return ISO7816_ATR_TA2_ERROR;
+            }
+            offset++;
+
+            tmpTimer = 10086;
+            if ((g_7816Para.bFlag & BIT0) && (g_7816Para.bTA1 != 0x11))
+            {
+                if ((g_7816Para.bTA1 & 0xF) > 1)
+                {
+                    tmpTimer *= di_table[g_7816Para.bTA1 & 0xF];  // * DI
+
+                    if ((g_7816Para.bTA1 & 0x0f) == 3)
+                    {
+                        tmpTimer += 20;
+                    }
+                }
+
+                //澶氬姞2涓狤TU
+                tmpTimer += 20;
+                //濡傛灉娌℃湁瓒呴檺锛岃缃甒T鏃堕棿
+                terminal_rec_cwt = tmpTimer;
+            }
+        }
+        else
+        {
+            g_7816Para.bTA1 = 0x11;
+        }
+        //TB2
+        if ((tmpTDx & BIT5) != 0)
+        {
+            return ISO7816_ATR_TB2_ERROR;
+        }
+
+        //TC2
+        if ((tmpTDx & BIT6) != 0)
+        {
+            if (g_7816Para.bProlType == PROTOCOL_T0)
+            {
+                //TC2鍙敮鎸10
+                if (10 != pATR[offset])
+                {
+                    return ISO7816_ATR_TC2_ERROR;
+                }
+                else
+                {
+                    tmpTimer = 960 *  pATR[offset] + 480;   //榛樿9600 + 480
+                    if (g_7816Para.bFlag & BIT0)
+                    {
+                        tmpTimer *= di_table[g_7816Para.bTA1 & 0xF];  // * DI
+
+                    }
+
+                    terminal_rec_cwt = tmpTimer;
+
+                }
+            }
+            offset++;
+        }
+        //TD2
+        if ((tmpTDx & BIT7) != 0)
+        {
+            //TD1鎸囨槑浜員=1鍗忚锛孴D2涓嶆敮鎸 T=1鐨勮瘽鎶ラ敊銆
+            if (TD1_Flag)
+            {
+                if ((pATR[offset] & 0x0f) != 1)
+                {
+                    return ISO7816_ATR_TD2_ERROR;
+                }
+            }
+            //鏀寔T=1
+            else if (((pATR[offset] & 0x0f) != 1) && ((pATR[offset] & 0x0f) != 14))
+            {
+                return ISO7816_ATR_ERROR;
+            }
+            tmpTDx = pATR[offset];
+            offset++;
+        }
+        else
+        {
+            tmpTDx = 0;
+        }
+    }
+
+    //TA3-TD3
+    if (tmpTDx != 0)
+    {
+        //TA3
+        if ((tmpTDx & BIT4) != 0)
+        {
+            if ((pATR[offset] < 16) || (pATR[offset] == 0xff))
+            {
+                return ISO7816_ATR_TA3_ERROR;
+            }
+            //璁剧疆鍗＄墖鏈澶ф暟鎹暱搴
+            g_T1.bIFSC = pATR[offset];
+            offset++;
+        }
+        //TB3
+        if ((tmpTDx & BIT5) != 0)
+        {
+            if (g_7816Para.bProlType != 0)
+            {
+                tmpCWI = pATR[offset] & 0x0f;
+                tmpBWI = (pATR[offset] & 0xf0) >> 4;
+                if ((tmpCWI > 5) || (tmpBWI > 4))
+                {
+                    return ISO7816_ATR_TB3_ERROR;
+                }
+                if ((TC1_N > 0x1e) && (TC1_N != 0xff))
+                {
+                    return ISO7816_ATR_TB3_ERROR;
+                }
+                //2鐨凜WI娆″箓
+                tmpLen = 1;
+                while (tmpCWI > 0)
+                {
+                    tmpLen = tmpLen * 2;
+                    tmpCWI--;
+                }
+                if ((tmpLen <= (TC1_N + 1)) && (TC1_N != 0xff))
+                {
+                    return ISO7816_ATR_TB3_ERROR;
+                }
+
+                //璁剧疆CWI  BWI
+                tmpLen = 0;
+                if ((g_7816Para.bFlag & BIT0) != 0)
+                {
+                    tmpLen = di_table[g_7816Para.bTA1 & 0x0f];
+                }
+                else
+                {
+                    tmpLen = 1;
+                }
+
+                terminal_rec_cwt = (1 << (pATR[offset] & 0x0F)) + 4;
+                terminal_rec_bwt = (1 << ((pATR[offset] & 0xF0) >> 4));
+                if (terminal_rec_bwt == 0)
+                {
+                    terminal_rec_bwt = 1;
+                }
+                terminal_rec_bwt = terminal_rec_bwt * 960 * tmpLen + 11 + 960 * tmpLen + 20;
+
+                terminal_rec_bwt_atr = terminal_rec_bwt;
+
+#ifdef DEBUG_7816
+                MyPrintf("para_1\n");
+                MyPrintf("%02x", terminal_send_cwt);
+                MyPrintf("\n");
+
+                MyPrintf("%02x", terminal_rec_cwt);
+                MyPrintf("\n");
+
+                MyPrintf("%02x", terminal_rec_bwt);
+                MyPrintf("\n");
+
+                MyPrintf("%02x", terminal_rec_bgt);
+                MyPrintf("\n");
+#endif
+            }
+
+            offset++;
+        }
+        else
+        {
+            if (g_7816Para.bProlType == 1)
+            {
+                return ISO7816_ATR_TB3_ERROR;
+            }
+        }
+
+        //TC3
+        if ((tmpTDx & BIT6) != 0)
+        {
+            //TC3鍙敮鎸0
+            if (0 != pATR[offset])
+            {
+                return ISO7816_ATR_TC3_ERROR;
+            }
+            offset++;
+        }
+    }
+    else
+    {
+        //濡傛灉鏄疶1鍗忚锛屾病鏈塗B3锛屽垯闇瑕佸浣嶆搷浣
+        if (g_7816Para.bProlType == 1)
+        {
+            return ISO7816_ATR_TB3_ERROR;
+        }
+    }
+    return OK;
+}
+
+uint16_t ISO7816_OperateSelect(uint8_t OperateMode, uint8_t vcard_set)
+{
+    uint16_t ret;
+    switch (OperateMode)
+    {
+    case ISO7816_ACTIVE_CARD:
+        ret = crad_in_io_filter();
+        if (ret == sci_pin.detect_state)
+        {
+            return ISO7816_CARD_STUTES_ERROR;
+        }
+        if ((SYSCTRL_HWCTRL_VAL & 8) == 0)
+        {
+            ret = ISO7816_cold_reset(vcard_set);
+        }
+        else
+        {
+            ISO7816_warm_reset();
+            ret = OK;
+        }
+        if (ret != OK)
+        {
+            return ISO7816_CARD_STUTES_ERROR;
+        }
+
+        //琛ㄧず鍐峰浣
+        g_7816Para.bFlag &= (~BIT1);
+        break;
+    case ISO7816_WARM_RESET:
+        ISO7816_warm_reset();
+
+        //琛ㄧず鐑浣
+        g_7816Para.bFlag |= BIT1;
+        break;
+    case ISO7816_DEACTIVE_CARD:
+        ret = crad_in_io_filter();
+        if (ret == sci_pin.detect_state)
+        {
+            return ISO7816_CARD_STUTES_ERROR;
+        }
+
+        //IC鍗′笅鐢
+        iso7816_deactive();
+        break;
+    default:
+        return ISO7816_OPERATE_MODE_ERROR;
+    }
+    return OK;
+}
+
+
+uint16_t ISO7816_DisposePPS(uint8_t TA1)
+{
+    uint16_t f;
+    uint8_t rateL, rateH;
+    uint8_t   fi, di;
+
+    fi = GET_4_BITS_H(TA1);
+    di = GET_4_BITS_L(TA1);
+    if ((!fi_table[fi]) || (!di_table[di]))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+    f = fi_table[fi] / di_table[di];
+
+    rateL = (uint8_t)f;
+    rateH = f >> 8;
+
+    if (g_7816Para.bTA2Flag == 0)
+    {
+        f = 372;
+    }
+    else
+    {
+        if ((g_7816Para.bTA2 & 0x10) != 0)
+        {
+            f = 372;
+        }
+    }
+
+    //璁剧疆閫氳閫熺巼瀵勫瓨鍣
+    SCI7816_ETU = f;
+
+    return OK;
+}
+
+
+uint16_t ISO7816_Dispose_CMD(uint8_t *pCmd, uint16_t CmdLen, uint8_t *pResp,  uint16_t *pRespLen)
+{
+    uint16_t  ret;
+    uint16_t  tmpRespLen, tmpCmdLen;
+    uint16_t  tmpOffset;
+    uint8_t   tmpCMDBuf[5];
+    uint8_t   tmpRECBuf[286];
+    uint8_t   tmp61Flag;
+
+    tmpOffset = 0;
+    tmp61Flag = 0;
+    tmpCmdLen =  CmdLen;
+
+    if (PROTOCOL_T0 == g_7816Para.bProlType)
+    {
+        //澶勭悊61xx 6cxx  涔熷彲浠ヨ繑鍥炵粰涓婂眰搴旂敤澶勭悊
+        if ((g_7816Para.bFlag & BIT2) != 0) //T0 Process
+        {
+            memcpy(tmpCMDBuf, pCmd, 5);
+            ret = ISO7816_TPDU_T0(pCmd, tmpCmdLen,  tmpRECBuf + tmpOffset, &tmpRespLen);
+            COMPARE_RETURN(ret);
+            tmpOffset += tmpRespLen;
+
+            while (1)
+            {
+                if (tmpRespLen >= 2)
+                {
+                    if (tmpRECBuf[tmpOffset - 2] == 0x61)
+                    {
+                        tmpCMDBuf[0] = 0;
+                        tmpCMDBuf[1] = 0xC0;
+                        tmpCMDBuf[2] = 0;
+                        tmpCMDBuf[3] = 0;
+                        tmpCMDBuf[4] = tmpRECBuf[tmpOffset - 1];
+                        tmpOffset -= 2;
+                        ret = ISO7816_TPDU_T0(tmpCMDBuf, 5, tmpRECBuf + tmpOffset, &tmpRespLen);
+                        COMPARE_RETURN(ret);
+
+                        tmp61Flag = 1;
+                        tmpOffset += tmpRespLen;
+
+                        continue;
+                    }
+                    else if (tmpRECBuf[tmpOffset - 2] == 0x6C)
+                    {
+                        tmpCMDBuf[4] = tmpRECBuf[tmpOffset - 1];
+                        tmpOffset -= 2;
+                        ret = ISO7816_TPDU_T0(tmpCMDBuf, 5, tmpRECBuf + tmpOffset, &tmpRespLen);
+                        COMPARE_RETURN(ret);
+
+                        tmpOffset += tmpRespLen;
+
+                        continue;
+                    }
+                    else if ((tmpRECBuf[tmpOffset - 2] == 0x90) && (tmpRECBuf[tmpOffset - 1] == 0x00))
+                    {
+                        break;
+                    }
+                    //data
+                    else if ((tmpRECBuf[tmpOffset - 2] == 0x62) || (tmpRECBuf[tmpOffset - 2] == 0x63) || ((tmpRECBuf[tmpOffset - 2] & 0xF0) == 0x90))
+                    {
+                        if (tmp61Flag == 1)
+                        {
+                            break;
+                        }
+
+                        if ((g_7816Para.bFlag & BIT3) != 0)
+                        {
+                            break;
+                        }
+
+                        if ((CmdLen > 5) && (tmpCMDBuf[1] == 0xA4))
+                        {
+                            tmpCMDBuf[0] = 0;
+                            tmpCMDBuf[1] = 0xC0;
+                            tmpCMDBuf[2] = 0;
+                            tmpCMDBuf[3] = 0;
+                            tmpCMDBuf[4] = 0;
+                            tmpOffset -= 2;
+                            ret = ISO7816_TPDU_T0(tmpCMDBuf, 5, tmpRECBuf + tmpOffset, &tmpRespLen);
+                            COMPARE_RETURN(ret);
+
+                            tmpOffset += tmpRespLen;
+                            continue;
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        break;
+                    }
+                }
+                else
+                {
+                    break;
+                }
+
+
+            }
+
+            memcpy(pResp, tmpRECBuf, tmpOffset);
+            *pRespLen = tmpOffset;
+            return OK;
+        }
+        else
+        {
+            return ISO7816_TPDU_T0(pCmd, CmdLen, pResp, pRespLen);
+        }
+    }
+    else
+    {
+        g_T1.bIFSD = 254;
+        return ISO7816_TPDU_T1(pCmd, CmdLen, pResp, pRespLen);
+    }
+    return OK;
+}
+
+uint16_t ISO7816_LoopBack(void)
+{
+    uint8_t ATRLen;
+    uint16_t Ret;
+    uint16_t RecLen;
+    uint16_t SendLen;
+    uint8_t ApduCmd[280];
+
+    uint8_t SELECT_PSE[]	= {0x00, 0xA4, 0x04, 0x00, 0x0E,
+                               0x31, 0x50, 0x41, 0x59, 0x2E, 0x53, 0x59, 0x53, 0x2E, 0x44, 0x44, 0x46, 0x30, 0x31, 0x00
+                           };  /* SELECT_PPSE */
+
+    atr_time_start();
+
+TOResetCard:
+#if 1
+    /*if(KEY1_IO_STATE)
+    {
+    	delay_ms(30000);
+    }
+    else
+    {
+    	delay_ms(5000);
+    }*/
+    delay_ms(3000);
+#endif
+
+    //婵娲诲崱鐗
+    Ret = ISO7816_OperateSelect(ISO7816_ACTIVE_CARD, 1);
+    if (Ret == ISO7816_CARD_STUTES_ERROR)
+    {
+        goto TOResetCard;
+    }
+
+TOWarmResetCard:
+    //鎺ユ敹澶嶄綅淇℃伅
+    Ret = ISO7816_GetAtr(&g_7816Para.aAtr[1], &ATRLen);
+
+    //娓呴櫎atr鐩稿叧璁＄畻鍣
+    if (OK != Ret)
+    {
+        if ((ISO7816_ATR_LEN_ERROR == Ret))
+        {
+            if ((g_7816Para.bFlag & BIT1) == 0)
+            {
+                delay_ms(10);
+                ISO7816_OperateSelect(ISO7816_WARM_RESET, 1);
+                goto TOWarmResetCard;
+            }
+
+        }
+        iso7816_deactive();
+        delay_ms(5);
+        goto TOResetCard;
+    }
+
+    g_7816Para.aAtr[0] = ATRLen;
+    delay_ms(50);
+
+    //鑷姩鍙戦丆0
+    g_7816Para.bFlag |= BIT2;
+    memset(&g_T1.bIFSC, 0, sizeof(g_T1));
+
+    g_T1.bIFSC = 32;
+    //ATR鏁版嵁澶勭悊
+    Ret = ISO7816_DisposeATR(&g_7816Para.aAtr[1], ATRLen);
+    if (OK != Ret)
+    {
+        if ((Ret == ISO7816_ATR_TA1_ERROR) || (Ret == ISO7816_ATR_TB1_ERROR)
+                || (Ret == ISO7816_ATR_TB3_ERROR) || (Ret == ISO7816_ATR_TA3_ERROR)
+                || (Ret == ISO7816_ATR_TC2_ERROR) || (Ret == ISO7816_ATR_TC3_ERROR)
+                || (Ret == ISO7816_ATR_TA2_ERROR) || (Ret == ISO7816_ATR_TD2_ERROR)
+                || (Ret == ISO7816_ATR_TB2_ERROR))
+        {
+            if ((g_7816Para.bFlag & BIT1) == 0)
+            {
+                ISO7816_OperateSelect(ISO7816_WARM_RESET, 1);
+                goto TOWarmResetCard;
+            }
+            else
+            {
+                ISO7816_OperateSelect(ISO7816_DEACTIVE_CARD, 1);
+                delay_ms(10);
+                goto TOResetCard;
+            }
+        }
+        else
+        {
+            ISO7816_OperateSelect(ISO7816_DEACTIVE_CARD, 1);
+            delay_ms(10);
+            goto TOResetCard;
+        }
+    }
+
+    ISO7816_config_mode_fun();
+
+#ifdef DEBUG_7816_EMV
+    MyPrintf("reset ok\n");
+#endif
+
+    //澶勭悊PPS
+    if ((g_7816Para.bFlag & BIT0) == 1)
+    {
+        if (g_7816Para.bTA1 != 0x11)
+        {
+            Ret = ISO7816_DisposePPS(g_7816Para.bTA1);
+            if (OK != Ret)
+            {
+                ISO7816_OperateSelect(ISO7816_DEACTIVE_CARD, 1);
+                delay_ms(10);
+                goto TOResetCard;
+            }
+        }
+    }
+
+    memcpy(ApduCmd, SELECT_PSE, 20);
+    SendLen = 20;
+
+    //t1
+    if (g_7816Para.bProlType == PROTOCOL_T1)
+    {
+        uint8_t TmpCmd[5];
+        //璁剧疆IFSD
+        g_T1.bIFSD = 254;
+        TmpCmd[0] = 254;
+
+        Ret = ISO7816_TPDU_T1Send(TmpCmd, 1, T_S_IFS);
+        if (Ret != OK)
+        {
+            ISO7816_OperateSelect(ISO7816_DEACTIVE_CARD, 1);
+            delay_ms(10);
+            goto TOResetCard;
+        }
+    }
+
+TOSendCMD:
+    delay_ms(2);
+
+#ifdef DEBUG_7816_EMV
+    MyPrintf("cmd\n");
+#endif
+    Ret = ISO7816_Dispose_CMD(ApduCmd, SendLen, g_7816Para.aRecBuff, &RecLen);
+    if (OK != Ret)
+    {
+        if ((ISO7816_PARITY_ERROR == Ret))
+        {
+            ISO7816_OperateSelect(ISO7816_WARM_RESET, 1);
+            delay_ms(10);
+            goto TOWarmResetCard;
+        }
+
+        ISO7816_OperateSelect(ISO7816_DEACTIVE_CARD, 1);
+        delay_ms(10);
+        goto TOResetCard;
+
+    }
+#ifdef DEBUG_7816_EMV
+    MyPrintf("cmd ok\n");
+#endif
+    delay_ms(2);
+
+    if (RecLen >= 6)
+    {
+        if (g_7816Para.aRecBuff[1] == 0x70)
+        {
+            ISO7816_OperateSelect(ISO7816_DEACTIVE_CARD, 1);
+            delay_ms(100);
+            goto TOResetCard;
+        }
+        else
+        {
+            SendLen = RecLen - 2;
+            memcpy(ApduCmd, g_7816Para.aRecBuff, SendLen);
+
+            delay_ms(2);
+            goto TOSendCMD;
+        }
+    }
+    else
+    {
+        if (g_7816Para.aRecBuff[0] == 0xff)
+        {
+            ISO7816_OperateSelect(ISO7816_DEACTIVE_CARD, 1);
+            delay_ms(10);
+            goto TOResetCard;
+        }
+    }
+
+    delay_ms(2);
+
+    memcpy(ApduCmd, SELECT_PSE, 20);
+    SendLen = 20;
+    goto TOSendCMD ;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T0.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T0.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T0.h	(working copy)
@@ -0,0 +1,9 @@
+
+uint16_t ISO7816_RecBytes(uint8_t *RxBuf, uint16_t RxLen);
+
+uint16_t ISO7816_SendBytes_T0(uint8_t *pBuff, uint16_t Len);
+
+uint16_t ISO7816_TPDU_T0(uint8_t *pCommand, uint16_t CommandLength,
+                         uint8_t *pResponse, uint16_t *pResponseLength);
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T0.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T0.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T0.c	(working copy)
@@ -0,0 +1,338 @@
+#include "string.h"
+#include "yc3121.h"
+#include "yc_7816.h"
+#include "yc_timer.h"
+
+uint16_t ISO7816_RecBytes(uint8_t *RxBuf, uint16_t RxLen)
+{
+    uint16_t  RemainLen = 0;
+
+    if ((!(RxLen)) || (NULL == RxBuf))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    SCI7816_CWT = terminal_rec_cwt;
+    time0_cnt_last = TIM0_CNT;
+    do
+    {
+        if (detect_io_state() == sci_pin.detect_state)
+        {
+            return ISO7816_CARD_ABSENT;
+        }
+        if (SCI7816_STAT & 0x80)				//CWT
+        {
+            return ISO7816_REC_TIMEOUT;
+        }
+        if (SCI7816_STAT & 0x04)
+        {
+            return ISO7816_ERR_NUM_OVER;
+        }
+
+        if ((SYSCTRL_HWCTRL_VAL & 8) == 0)
+        {
+            return ISO7816_POWER_OFF;
+        }
+
+        #ifndef EMV_L1_TEST
+        if ((time0_cnt_last - TIM0_CNT) >=contact_over_time_cnt)
+        {
+            #ifdef DEBUG_7816
+			MyPrintf("REC_TIMEOUT\n");
+			#endif
+            return ISO7816_REC_TIMEOUT;
+        }
+        #endif
+
+        if (SCI7816_STAT & 1)
+        {
+            *(RxBuf + RemainLen) = SCI7816_DATA;
+
+#ifdef DEBUG_7816
+            MyPrintf("%02X ", *(RxBuf + RemainLen));
+#endif
+
+            RemainLen++;
+        }
+
+    }
+    while (RemainLen < (RxLen));
+
+    return OK;
+}
+
+uint16_t ISO7816_SendBytes_T0(uint8_t *pBuff, uint16_t Len)
+{
+    uint8_t   i;
+
+    if ((!Len) || (NULL == pBuff))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+#ifdef DEBUG_7816
+    MyPrintf("send:\n");
+#endif
+    delay_ms(2);
+
+    time0_cnt_last = TIM0_CNT;
+    SCI7816_CWT = 0;						//quick startup send
+    while (SCI7816_STAT & 8)				//dummy
+    {
+        if (detect_io_state() == sci_pin.detect_state)
+        {
+            return ISO7816_CARD_ABSENT;
+        }
+        if ((SYSCTRL_HWCTRL_VAL & 8) == 0)
+        {
+            return ISO7816_POWER_OFF;
+        }
+
+        #ifndef EMV_L1_TEST
+        if ((time0_cnt_last - TIM0_CNT) >=contact_over_time_cnt)
+        {
+            #ifdef DEBUG_7816
+			MyPrintf("SEND_TIMEOUT1\n");
+			#endif
+            return ISO7816_SEND_TIMEOUT;
+        }
+        #endif
+    }
+
+    for (i = 0; i < Len; i++)
+    {
+        SCI7816_INT = 0;
+        SCI7816_DATA = pBuff[i];
+        SCI7816_CWT = terminal_send_cwt;
+        while (SCI7816_STAT & 8)
+        {
+            if (SCI7816_STAT & 0x20)			//鍑洪敊娆℃暟鍒颁笂闄
+            {
+                SCI7816_CTRL |= 0x03;	//clear tx/rx fifo
+                SCI7816_STAT |= 0X24;	//clear tx/rx retry error
+                //鐩存帴涓嬬數
+                return ISO7816_ERR_NUM_OVER;
+            }
+
+            if (detect_io_state() == sci_pin.detect_state)
+            {
+                return ISO7816_CARD_ABSENT;
+            }
+
+            if ((SYSCTRL_HWCTRL_VAL & 8) == 0)
+            {
+                return ISO7816_POWER_OFF;
+            }
+
+            #ifndef EMV_L1_TEST
+            if ((time0_cnt_last - TIM0_CNT) >=contact_over_time_cnt)
+            {
+                #ifdef DEBUG_7816
+                MyPrintf("SEND_TIMEOUT2\n");
+                #endif
+                return ISO7816_SEND_TIMEOUT;
+            }
+            #endif
+        }
+
+#ifdef DEBUG_7816
+        MyPrintf("%02X ", pBuff[i]);
+#endif
+    }
+
+    while ((SCI7816_INT & 0x02) == 0)
+    {
+        if (detect_io_state() == sci_pin.detect_state)
+        {
+            return ISO7816_CARD_ABSENT;
+        }
+
+        if ((SYSCTRL_HWCTRL_VAL & 8) == 0)
+        {
+            return ISO7816_POWER_OFF;
+        }
+
+        #ifndef EMV_L1_TEST
+        if ((time0_cnt_last - TIM0_CNT) >=contact_over_time_cnt)
+        {
+            #ifdef DEBUG_7816
+			MyPrintf("SEND_TIMEOUT3\n");
+			#endif
+            return ISO7816_SEND_TIMEOUT;
+        }
+        #endif
+    }
+    SCI7816_CWT = (terminal_rec_cwt | (1 << 24));
+
+#ifdef DEBUG_7816
+    MyPrintf("\n");
+#endif
+    return OK;
+}
+
+uint16_t ISO7816_TPDU_T0(uint8_t *pCommand, uint16_t CommandLength,
+                         uint8_t *pResponse, uint16_t *pResponseLength)
+
+{
+    uint8_t   sw1, Ins;
+    uint16_t  p3;
+    uint16_t  ret, tmpRecLen = 0, tmpSendOffset;
+
+    tmpRecLen = 0;
+
+    if ((NULL == pCommand) || (NULL == pResponse) ||
+            (CommandLength < 4) || (NULL == pResponseLength))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    if (CommandLength == 4)
+    {
+        pCommand[4] = 0;
+    }
+    Ins = pCommand[1];
+
+    g_7816Para.bFlag &= (~BIT3);
+
+    ret = ISO7816_SendBytes_T0(pCommand, 5);
+    COMPARE_RETURN(ret);
+
+    //鎺ユ敹杩囩▼瀛楄妭
+    pResponse[tmpRecLen] = ISO7816_NULL_T0;
+    do
+    {
+        ret = ISO7816_RecBytes(&pResponse[tmpRecLen], 1);
+        COMPARE_RETURN(ret);
+    }
+    while (pResponse[tmpRecLen] == ISO7816_NULL_T0);   //濡傛灉鏄60鐨勮瘽绛夊緟
+
+    sw1 = pResponse[0];
+    p3 = pCommand[4];
+    tmpSendOffset = 5;
+
+    //杩囩▼瀛楄妭鍒ゆ柇
+    do
+    {
+        //閿欒鐮佹垨鎵ц姝ｇ‘
+        if ((0x60 == (sw1 & 0xF0)) || (0x90 == (sw1 & 0xF0)))
+        {
+            tmpRecLen++;
+            ret = ISO7816_RecBytes(&pResponse[tmpRecLen++], 1);
+            if (ret != OK)
+            {
+                return ret;
+            }
+
+            //閿欒鐮
+            g_7816Para.bFlag |= BIT3;
+
+            *pResponseLength = tmpRecLen;
+            return  OK;
+        }
+
+        if (Ins == sw1)
+        {
+            if (5 == CommandLength)
+            {
+                ret = ISO7816_RecBytes(&pResponse[tmpRecLen], p3 + 2 - tmpRecLen);
+                COMPARE_RETURN(ret);
+                *pResponseLength = p3 + 2;
+                return  OK;
+            }
+            else
+            {
+                ret = ISO7816_SendBytes_T0(pCommand + tmpSendOffset, p3);
+                COMPARE_RETURN(ret);
+
+                pResponse[tmpRecLen] = ISO7816_NULL_T0;
+                //濡傛灉鏄60 鍒欑瓑寰呮帴鏀跺瓧鑺
+                do
+                {
+                    ret = ISO7816_RecBytes(&pResponse[tmpRecLen], 1);
+                    COMPARE_RETURN(ret);
+                }
+                while (pResponse[tmpRecLen] == ISO7816_NULL_T0);
+                tmpRecLen++;
+
+                ret = ISO7816_RecBytes(&pResponse[tmpRecLen++], 1);
+                COMPARE_RETURN(ret);
+                *pResponseLength = tmpRecLen;
+                return  OK;
+            }
+        }
+        else if (sw1 == (uint8_t)(~Ins)) //濡傛灉鏄疘NS鐨勮ˉ鐮
+        {
+
+            if (5 == CommandLength)
+            {
+                ret = ISO7816_RecBytes(&pResponse[tmpRecLen++], 1);
+                COMPARE_RETURN(ret);
+
+                if (tmpRecLen >= (p3 + 2))
+                {
+                    *pResponseLength = tmpRecLen;
+                    return  OK;
+                }
+
+                //鍐嶆鎺ユ敹杩囩▼瀛楄妭
+                ret = ISO7816_RecBytes(&pResponse[tmpRecLen], 1);
+                COMPARE_RETURN(ret);
+
+                sw1 = pResponse[tmpRecLen];
+
+            }
+            else
+            {
+                if (p3)
+                {
+                    //濡傛灉鏄疘NS鐨勮ˉ鐮侊紝涓涓瓧鑺備竴涓瓧鑺備紶閫
+                    ret = ISO7816_SendBytes_T0(pCommand + tmpSendOffset, 1);
+                    COMPARE_RETURN(ret);
+                    tmpSendOffset++;
+                    p3--;
+
+                    //鎺ユ敹杩囩▼瀛楄妭
+                    do
+                    {
+                        ret = ISO7816_RecBytes(&pResponse[tmpRecLen], 1);
+                        COMPARE_RETURN(ret);
+                    }
+                    while (pResponse[tmpRecLen] == ISO7816_NULL_T0);
+
+                    sw1 = pResponse[tmpRecLen];
+
+                    continue;
+                }
+                else
+                {
+                    //鎺ユ敹杩囩▼瀛楄妭
+                    do
+                    {
+                        ret = ISO7816_RecBytes(&pResponse[tmpRecLen], 1);
+                        COMPARE_RETURN(ret);
+                    }
+                    while (pResponse[tmpRecLen] == ISO7816_NULL_T0);
+
+                    sw1 = pResponse[tmpRecLen++];
+
+                    ret = ISO7816_RecBytes(pResponse + 1, 1);
+                    COMPARE_RETURN(ret);
+                    *pResponseLength = 2;
+                    return  OK;
+                }
+            }
+
+        }
+        else
+        {
+            return ISO7816_PROCEDURE_INS_ERROR;
+        }
+
+    }
+    while (1);
+}
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T1.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T1.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T1.h	(working copy)
@@ -0,0 +1,8 @@
+
+uint16_t ISO7816_SendBytes_T1(uint8_t *pBuff, uint16_t Len, uint8_t state);
+
+uint16_t ISO7816_TPDU_T1Send(uint8_t *pCommand, uint16_t CommandLength, uint8_t Type);
+uint16_t ISO7816_TPDU_T1(uint8_t *pCommand, uint16_t CommandLength,
+                         uint8_t *pResponse,  uint16_t *pResponseLength);
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T1.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T1.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_7816/yc_7816_T1.c	(working copy)
@@ -0,0 +1,1090 @@
+#include "string.h"
+#include "yc3121.h"
+#include "yc_7816.h"
+#include "yc_7816_t0.h"
+#include "yc_timer.h"
+
+uint16_t ISO7816_CalcLRC(uint8_t *pBuff, uint16_t I_Len, uint8_t *pLRC)
+{
+    uint16_t i;
+
+    if ((pBuff == NULL) || (pLRC == NULL))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+    *pLRC = 0;
+    for (i = 0; i < I_Len; i++)
+    {
+        *pLRC ^= pBuff[i];
+    }
+    return OK;
+}
+
+uint16_t ISO7816_CheckLRC(uint8_t *pBuff, uint16_t I_Len, uint8_t LRC)
+{
+    uint8_t tmpLRC = 0;
+    if (OK != ISO7816_CalcLRC(pBuff, I_Len, &tmpLRC))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    if (LRC != tmpLRC)
+    {
+        return ISO7816_T1_LRC_ERROR;
+    }
+    return OK;
+}
+
+uint16_t ISO7816_SendBytes_T1(uint8_t *pBuff, uint16_t Len, uint8_t state)
+{
+    uint8_t   i;
+
+    if ((!Len) || (NULL == pBuff))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+#ifdef DEBUG_7816
+    MyPrintf("send:\n");
+#endif
+
+    if (state == 0)
+    {
+        while (!(SCI7816_STAT & 0x40))			//bgt
+        {
+            if (detect_io_state() == sci_pin.detect_state)
+            {
+                return ISO7816_CARD_ABSENT;
+            }
+        }
+        SCI7816_CWT = 0;						//quick startup send
+        while (SCI7816_STAT & 8)				//dummy
+        {
+            if (detect_io_state() == sci_pin.detect_state)
+            {
+                return ISO7816_CARD_ABSENT;
+            }
+        }
+    }
+
+    SCI7816_CWT = terminal_send_cwt - 10;
+
+    for (i = 0; i < Len; i++)
+    {
+        while (SCI7816_STAT & 0x10)		//sendbuf full
+        {
+            if (detect_io_state() == sci_pin.detect_state)
+            {
+                return ISO7816_CARD_ABSENT;
+            }
+        }
+
+        SCI7816_INT = 0;
+
+        SCI7816_DATA = pBuff[i];
+
+#ifdef DEBUG_7816
+        MyPrintf("%02X ", pBuff[i]);
+#endif
+
+        SCI7816_INT = 0;
+    }
+
+    if (state == 1)
+    {
+        while (SCI7816_STAT & 8)
+        {
+            if (detect_io_state() == sci_pin.detect_state)
+            {
+                return ISO7816_CARD_ABSENT;
+            }
+            SCI7816_INT = 0;
+        }
+
+        SCI7816_CWT = terminal_rec_bwt;
+
+        while ((SCI7816_INT & 0x02) == 0)
+        {
+            if (detect_io_state() == sci_pin.detect_state)
+            {
+                return ISO7816_CARD_ABSENT;
+            }
+        }
+
+        SCI7816_CWT = terminal_rec_cwt;
+    }
+
+#ifdef DEBUG_7816
+    MyPrintf("\n");
+#endif
+    return OK;
+}
+
+
+
+uint16_t ISO7816_RecBlock_DATA(uint8_t *RxBuf, uint16_t RxLen)
+{
+    uint16_t  RemainLen = 0;
+    uint8_t parity_flag = 0;
+
+    if ((!(RxLen)) || (NULL == RxBuf))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    do
+    {
+        if (detect_io_state() == sci_pin.detect_state)
+        {
+            return ISO7816_CARD_ABSENT;
+        }
+        if (SCI7816_STAT & 0x80)				//CWT
+        {
+            return ISO7816_REC_TIMEOUT;
+        }
+        if (SCI7816_STAT & 1)
+        {
+            *(RxBuf + RemainLen) = SCI7816_DATA;
+
+#ifdef DEBUG_7816
+            MyPrintf("%02X ", *(RxBuf + RemainLen));
+#endif
+
+            RemainLen++;
+
+            if (SCI7816_STAT & 0x100)	//parity error
+            {
+                parity_flag = 1;
+            }
+        }
+    }
+    while (RemainLen < (RxLen));
+
+    if (parity_flag)
+    {
+        return ISO7816_PARITY_ERROR;
+    }
+    return OK;
+}
+
+
+uint16_t ISO7816_SendBlock_Soft(uint8_t *pBuff, uint16_t I_Len, uint8_t *pHead)
+{
+    uint16_t  ret;
+    uint8_t Lrc1, Lrc2;
+    uint8_t *pAddr;
+    uint16_t sendLen;
+    uint8_t DataBack = 0;
+
+    if ((NULL == pBuff) || (pHead == NULL))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    ISO7816_CalcLRC(pHead, 3, &Lrc1);
+
+    //鍙戦佹暟鎹
+    if (I_Len != 0)
+    {
+        ISO7816_CalcLRC(pBuff, I_Len, &Lrc2);
+        if (g_T1.bLink != 0)
+        {
+            DataBack = pBuff[I_Len];
+        }
+        pBuff[I_Len] =  Lrc1 ^ Lrc2;
+        pAddr = pBuff;
+        sendLen = I_Len + 1;
+
+        ret = ISO7816_SendBytes_T1(pHead, 3, 0);
+        COMPARE_RETURN(ret);
+    }
+    else
+    {
+        pHead[3] = Lrc1;
+        pAddr = pHead;
+        sendLen = 4;
+        while (!(SCI7816_STAT & 0x40))			//bgt
+        {
+            if (detect_io_state() == sci_pin.detect_state)
+            {
+                return ISO7816_CARD_ABSENT;
+            }
+        }
+    }
+
+    //鍙戦佹暟鎹
+    ret = ISO7816_SendBytes_T1(pAddr, sendLen, 1);
+    COMPARE_RETURN(ret);
+
+    if ((g_T1.bLink != 0) && (I_Len != 0))
+    {
+        pBuff[I_Len] = DataBack;
+    }
+    return OK;
+}
+
+void ISO7816_read_recfifo(void)
+{
+    uint16_t num = 0;
+    uint8_t data;
+    while ((SCI7816_STAT & 1) && (num < 256))
+    {
+        data = SCI7816_DATA;
+        num++;
+    }
+}
+
+uint16_t ISO7816_RecBlock_Soft(uint8_t *RxBuf, uint16_t *pRxLen)
+{
+    uint16_t  ret;
+    uint16_t tmpLen;
+    uint16_t RemainLen;
+    uint16_t RetBack;
+
+    if ((NULL == pRxLen) || (NULL == RxBuf))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    ret = ISO7816_RecBlock_DATA(RxBuf, T1_HEAD_LEN);
+    if ((ret == ISO7816_REC_TIMEOUT) || (ret == ISO7816_PARA_ERROR))
+    {
+        return ret;
+    }
+
+    RetBack = ret;
+
+    if (RxBuf[T1_HEAD_LEN - 1] > g_T1.bIFSD)
+    {
+        delay_ms(100);
+        ISO7816_read_recfifo();
+        return ISO7816_DATALEN_ERR;
+    }
+
+    RemainLen = RxBuf[T1_HEAD_LEN - 1] + 1; //淇℃伅鍩 + LRC
+    ret = ISO7816_RecBlock_DATA(RxBuf + T1_HEAD_LEN, RemainLen);
+    if (ret != OK)
+    {
+        return ret;
+    }
+
+    *pRxLen =  RemainLen + T1_HEAD_LEN;
+    tmpLen = *pRxLen - 1;
+
+    if (RetBack != OK)
+    {
+        return RetBack;
+    }
+
+    return ISO7816_CheckLRC(RxBuf, tmpLen, RxBuf[tmpLen]);
+}
+
+uint8_t ISO7816_T1_Is_Blk_Valid(uint8_t *pProlg, uint8_t dir)
+{
+    uint8_t Ret = 0;
+
+    if (pProlg[0] > 0)
+    {
+        Ret |= ERR_PCB;
+        return Ret;
+    }
+
+    if (0 == (pProlg[1] & 0x80))
+    {
+
+        if ((pProlg[1] & 0x1F) > 0)
+        {
+            Ret |= ERR_PCB;
+            return Ret;
+        }
+        if ((pProlg[1] & NS_BIT) != g_T1.bNumCard)
+        {
+            Ret |= ERR_PCB;
+            return Ret;
+        }
+
+        //鍒ゆ柇闀垮害
+        if ((pProlg[2] > g_T1.bIFSD) || (pProlg[2] == 0))
+        {
+            if (pProlg[2] == 0xff)
+            {
+                Ret |= ERR_FF;
+            }
+            else
+            {
+                Ret |= ERR_LEN;
+            }
+
+            return Ret;
+        }
+
+        if (g_T1.bFlagSendChain)
+        {
+            Ret |= ERR_PCB;
+            return Ret;
+        }
+    }
+    else if (R_BLK == (pProlg[1] & 0xC0))
+    {
+        if ((pProlg[1] & 0x20) != 0)
+        {
+            Ret |= ERR_PCB;
+            return Ret;
+        }
+
+        if ((pProlg[1] & 0x0F) > 2)
+        {
+            Ret |= ERR_PCB;
+            return Ret;
+        }
+
+        if (pProlg[2] > 0)
+        {
+            Ret |= ERR_LEN;
+            return Ret;
+        }
+
+        if (dir == RECV)
+        {
+            if (((pProlg[1] & NR_BIT) << 2) == g_T1.bNum)
+            {
+                if (0 == g_T1.bLink)
+                {
+                    g_T1.bErrNotify = 1;
+                    Ret |= ERR_PCB;
+                    return Ret;
+                }
+            }
+        }
+        else
+        {
+            if (((pProlg[1] & NR_BIT) << 2) != g_T1.bNum)
+            {
+                g_T1.bErrNotify = 1;
+                Ret |= ERR_PCB;
+                return Ret;
+            }
+        }
+
+    }
+    else if (S_BLK == (pProlg[1] & 0xC0))
+    {
+        if ((pProlg[1] & 0x1C) > 0)
+        {
+            Ret |= ERR_PCB;
+            return Ret;
+        }
+        if (((pProlg[1] & 0x20) > 0) && (0 == g_T1.bFlgSBSnd))
+        {
+            Ret |= ERR_PCB;
+            return Ret;
+        }
+
+        //鍒ゆ柇闀垮害
+        if (0 == (pProlg[1] & 0x1))
+        {
+            if (pProlg[2] > 0)
+            {
+                Ret |= ERR_LEN;
+                return Ret;
+            }
+        }
+        else
+        {
+            if (pProlg[2] != 1)
+            {
+                Ret |= ERR_LEN;
+                return Ret;
+            }
+
+            if ((1 == (pProlg[1] & 0x03)) && ((pProlg[3] == 0xff) || (pProlg[3] < 0x10)))
+            {
+                Ret |= ERR_LEN;
+                return Ret;
+            }
+        }
+    }
+    else
+    {
+
+    }
+
+    if (g_T1.bFlgSBSnd != 0)
+    {
+        if (0 == (pProlg[1] & 0x80))
+        {
+            Ret |= ERR_RELVNT_S;
+            return Ret;
+        }
+    }
+
+    return Ret;
+}
+
+uint16_t ISO7816_TPDU_T1Rec(uint8_t *pRec, uint16_t *RecLen)
+{
+    uint16_t Ret;
+    uint8_t r_cnt = 0;
+    uint8_t ifs_cnt = 0;
+    uint8_t s_blk[5];
+    uint16_t tmpRecLen;
+    uint8_t SWTXFlag = 0;
+
+    if (g_T1.bFlgIRec == 1)
+    {
+        g_T1.bFlgIRec = 0;
+
+        memcpy(pRec, &g_7816Para.aRecBuff[3],  g_7816Para.aRecBuff[2]);
+        *RecLen = g_7816Para.aRecBuff[2];
+    }
+    else
+    {
+        while (1)
+        {
+            if (g_T1.bFlgSRec == 1)
+            {
+                g_T1.bFlgSRec = 0;
+            }
+            else
+            {
+                //鎺ユ敹鏁版嵁
+                Ret = ISO7816_RecBlock_Soft(g_7816Para.aRecBuff, &tmpRecLen);
+                //濡傛灉鏍￠獙閿欒锛屽垯鐩存帴璺宠繃妫鏌
+                if (Ret == OK)
+                {
+                    Ret = ISO7816_T1_Is_Blk_Valid(g_7816Para.aRecBuff, RECV);
+                }
+                else if ((Ret == ISO7816_T1_LRC_ERROR) || (Ret == ISO7816_PARITY_ERROR))
+                {
+                    Ret = ERR_CHKSUM;
+                }
+                else if (Ret == ISO7816_DATALEN_ERR)
+                {
+                    Ret = ERR_FF;//ERR_LEN;;
+                }
+                else
+                {
+                    return Ret;
+                }
+
+                //鎭㈠WTX
+                if (SWTXFlag == 1)
+                {
+                    terminal_rec_bwt = terminal_rec_bwt_atr;
+                    SWTXFlag = 0;
+                }
+
+                /*鏃犳晥鍒欏彂R/S*/
+                if (Ret != 0)
+                {
+                    g_T1.bErrCnt++;
+
+                    if ((ifs_cnt + g_T1.bErrCnt) <= 1)
+                    {
+                        g_T1.aRBlk[0] = 0;    //g_Nad;
+                        g_T1.aRBlk[1] = 0x80 | (g_T1.bNumCard >> 2);
+                        g_T1.aRBlk[2] = 0;
+                        if (g_T1.bRecRBLink == 0)
+                        {
+                            if (Ret & (ERR_PCB | ERR_LEN | ERR_RELVNT_S))
+                            {
+                                g_T1.aRBlk[1] |= 2;
+                            }
+                            else if (Ret & (ERR_PARITY | ERR_CHKSUM))
+                            {
+                                g_T1.aRBlk[1] |= 1;
+                            }
+                            else
+                            {
+                                return ISO7816_ERR_NUM_OVER;
+                            }
+                        }
+                        else
+                        {
+                            if ((Ret == ERR_FF) && (g_7816Para.aRecBuff[2] == 0xff))
+                            {
+                                return ISO7816_ERR_NUM_OVER;
+                            }
+                        }
+                    }
+
+                    if (g_T1.bErrCnt < ERR_SEND_CNT)
+                    {
+                        if (g_7816Para.aRecBuff[1] & 0x80)
+                        {
+                            Ret = ISO7816_SendBlock_Soft(&g_T1.aRBlk[3], 0, g_T1.aRBlk);
+                            COMPARE_RETURN(Ret);
+                        }
+                        else
+                        {
+                            if (g_T1.bRecRBLink != 0)
+                            {
+                                if (g_T1.bErrCnt < (ERR_SEND_CNT - 1))
+                                {
+                                    Ret = ISO7816_SendBlock_Soft(&g_T1.aRBlk[3], 0, g_T1.aRBlk);
+                                    COMPARE_RETURN(Ret);
+                                }
+                                else
+                                {
+                                    return ISO7816_ERR_NUM_OVER;
+                                }
+                            }
+                            else
+                            {
+                                Ret = ISO7816_SendBlock_Soft(&g_T1.aRBlk[3], 0, g_T1.aRBlk);
+                                COMPARE_RETURN(Ret);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        return ISO7816_ERR_NUM_OVER;
+                    }
+                    continue;
+                }
+                g_T1.bErrCnt = 0;
+            }
+
+            if (R_BLK == (g_7816Para.aRecBuff[1] & 0xC0))
+            {
+                g_T1.aRBlk[0] = 0;
+                g_T1.aRBlk[1] = 0x80 | (g_T1.bNumCard >> 2);
+                g_T1.aRBlk[2] = 0;
+                if (r_cnt < ERR_SEND_CNT)
+                {
+                    Ret = ISO7816_SendBlock_Soft(&g_T1.aRBlk[3], 0, g_T1.aRBlk);
+                    COMPARE_RETURN(Ret);
+                    continue;
+                }
+                r_cnt++;
+                return ISO7816_ERR_NUM_OVER;
+            }
+            else if (S_BLK == (g_7816Para.aRecBuff[1] & 0xC0))
+            {
+                s_blk[0] = 0;
+                s_blk[1] = 0xC0;
+                if (0 == (g_7816Para.aRecBuff[1] & S_RQS_MSK))
+                {
+                    s_blk[1] |= 0x20;
+                    s_blk[2]  = 0;
+                    g_T1.bLink = 0;
+                    g_T1.bNum = 0;
+                    g_T1.bNumCard = 0;
+                    g_T1.bIFSC = IFSC;
+                    g_T1.bIFSD = IFSC;
+
+                    Ret = ISO7816_SendBlock_Soft(&s_blk[3], 0, s_blk);
+                    COMPARE_RETURN(Ret);
+                    continue;
+                }
+                else if (1 == (g_7816Para.aRecBuff[1] & S_RQS_MSK))
+                {
+                    s_blk[1] |= 0x21;
+                    s_blk[2]  = 1;
+                    s_blk[3]  = g_7816Para.aRecBuff[3];
+                    if ((0x10 > g_7816Para.aRecBuff[3]) || (0xFF == g_7816Para.aRecBuff[3]))
+                    {
+                        ifs_cnt++;
+
+                        if (g_T1.bErrCnt < 1)
+                        {
+                            g_T1.aRBlk[0] = 0;
+
+                            g_T1.aRBlk[1] = 0x82 | (g_T1.bNumCard >> 2);
+
+                            g_T1.aRBlk[2] = 0;
+                        }
+
+                        if ((ifs_cnt + g_T1.bErrCnt) < ERR_SEND_CNT)
+                        {
+                            Ret = ISO7816_SendBlock_Soft(&g_T1.aRBlk[3], 0, g_T1.aRBlk);
+                            COMPARE_RETURN(Ret);
+                            continue;
+                        }
+                        return ISO7816_ERR_NUM_OVER;
+                    }
+                    else
+                    {
+                        if (s_blk[3] != g_7816Para.aRecBuff[3])
+                        {
+                            Ret = ISO7816_SendBlock_Soft(&s_blk[3], 1, s_blk);
+                            COMPARE_RETURN(Ret);
+                            continue;
+                        }
+                        else
+                        {
+                            g_T1.bIFSC = g_7816Para.aRecBuff[3];
+                        }
+                    }
+
+                    if (ifs_cnt < ERR_SEND_CNT)
+                    {
+                        Ret = ISO7816_SendBlock_Soft(&s_blk[3], 1, s_blk);
+                        COMPARE_RETURN(Ret);
+                    }
+                    continue;
+                }
+                else if (2 == (g_7816Para.aRecBuff[1] & S_RQS_MSK))
+                {
+                    s_blk[1] |= 0x22;
+                    s_blk[2]  = 0;
+                    Ret = ISO7816_SendBlock_Soft(&s_blk[3], 0, s_blk);
+                    COMPARE_RETURN(Ret);
+
+                    return ISO7816_RET_BROKEN_CHAIN;
+                }
+                else if ((g_7816Para.aRecBuff[1] & 0x3F) == 3)
+                {
+                    SWTXFlag = 1;
+                    //璁剧疆绛夊緟鏃堕棿
+                    terminal_change_rec_bwt_num = terminal_rec_bwt_atr * g_7816Para.aRecBuff[3];
+                    terminal_rec_bwt = terminal_change_rec_bwt_num;
+
+#ifdef DEBUG_7816
+                    MyPrintf("WTS\n");
+                    MyPrintf("%08x", terminal_rec_bwt);
+                    MyPrintf("\n");
+                    MyPrintf("%08x", g_7816Para.aRecBuff[3]);
+                    MyPrintf("\n");
+                    MyPrintf("%08x", terminal_change_rec_bwt_num);
+                    MyPrintf("\n");
+#endif
+
+                    s_blk[1] |= 0x23;
+                    s_blk[2]  = 1;
+                    s_blk[3]  = g_7816Para.aRecBuff[3];
+                    Ret = ISO7816_SendBlock_Soft(&s_blk[3], 1, s_blk);
+                    COMPARE_RETURN(Ret);
+                    continue;
+                }
+                else
+                {
+                    continue;
+                }
+            }
+            else
+            {
+                memcpy(pRec, &g_7816Para.aRecBuff[3],  g_7816Para.aRecBuff[2]);
+                *RecLen = g_7816Para.aRecBuff[2];
+            }
+            break;
+        }
+    }
+    r_cnt = 0;
+
+    if (R_BLK == (g_7816Para.aRecBuff[1] & 0xC0))
+    {
+
+    }
+    else if (S_BLK == (g_7816Para.aRecBuff[1] & 0xC0))
+    {
+
+    }
+    else
+    {
+        g_T1.bNumCard ^= BIT6;
+        g_T1.bErrCnt = 0;
+
+        if (M_BIT == (g_7816Para.aRecBuff[1] & M_BIT))
+        {
+            g_T1.bRecRBLink = 1;
+
+            g_T1.aRBlk[0] = 0 ;
+            g_T1.aRBlk[1] = 0x80;
+            if ((g_7816Para.aRecBuff[1] & NS_BIT) == 0)
+            {
+                g_T1.aRBlk[1] |= NR_BIT;
+            }
+            g_T1.aRBlk[2] = 0;
+
+            Ret = ISO7816_SendBlock_Soft(&g_T1.aRBlk[3], 0, g_T1.aRBlk);
+            COMPARE_RETURN(Ret);
+
+            return ISO7816_RET_CHAIN;
+        }
+        else
+        {
+            g_T1.bRecRBLink = 0;
+        }
+
+    }
+    g_T1.bErrCnt = 0;
+    return OK;
+}
+
+uint16_t ISO7816_TPDU_T1Send(uint8_t *pCommand, uint16_t CommandLength, uint8_t Type)
+{
+    uint16_t Ret;
+    uint16_t SendLen = 0;
+    uint16_t RecLen;
+    uint16_t TmpLen = 0;
+    uint8_t  r_cnt = 0;
+    uint8_t  r_chain_cnt = 0;
+    uint8_t  *pSend = NULL;
+    uint8_t  prolHead[3];
+    uint8_t  s_blk[5];
+    uint8_t  resendflag = 0;
+    uint8_t SWTXFlag = 0;
+
+    uint8_t IFS_issued = 1;
+
+    uint16_t CmdLen = CommandLength;
+
+    g_T1.bFlagSendChain = 0;
+
+    if ((NULL == pCommand) || (Type > 4))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    //鍒濆鍖栧寲
+    if (Type == I_BLOCK_C)
+    {
+        prolHead[0] = 0;  //nad
+        prolHead[1] = 0;  //pcd
+
+        //璁剧疆搴忓彿 bNum 涓築IT6
+        prolHead[1] ^= g_T1.bNum;
+
+        //璁＄畻I鍧楅暱搴
+        if (g_T1.bIFSC < CmdLen)
+        {
+            //闇瑕佽繛鎺
+            prolHead[1] |= BIT5;
+            prolHead[2] = g_T1.bIFSC;
+            CmdLen -= g_T1.bIFSC;
+            SendLen = g_T1.bIFSC;
+            g_T1.bFlagSendChain = 1;
+            g_T1.bLink = 1;
+        }
+        else
+        {
+            prolHead[2] = CmdLen;
+            SendLen = CmdLen;
+            CmdLen = 0;
+        }
+
+        pSend = pCommand;
+    }
+
+    g_T1.bFlgSBSnd = 0;
+    //鍙戦佹暟鎹
+    while (1)
+    {
+        if (Type < S_BLOCK_C)
+        {
+            Ret = ISO7816_SendBlock_Soft(pSend, SendLen, prolHead);
+            COMPARE_RETURN(Ret);
+
+            if (resendflag == 0)
+            {
+                g_T1.bNum ^= BIT6;
+            }
+        }
+        else
+        {
+            s_blk[0] = 0;
+            s_blk[1] = 0xC0;
+            TmpLen = 0;
+            if (T_S_IFS == Type)
+            {
+                s_blk[1] |= 0x1;
+                s_blk[2]  = 1;
+                s_blk[3]  = pCommand[0];
+
+                g_T1.bIFSD = pCommand[0];
+
+                TmpLen++;
+            }
+            else if (T_S_ABORT == Type)
+            {
+                s_blk[1] |= 0x2;
+                s_blk[2]  = 0;
+            }
+            else
+            {
+
+            }
+
+            Ret = ISO7816_SendBlock_Soft(&s_blk[3], TmpLen, s_blk);
+            COMPARE_RETURN(Ret);
+
+            g_T1.bFlgSBSnd = 1;
+        }
+        if (!resendflag)
+        {
+            g_T1.bErrCnt = 0;
+        }
+
+        while (1)
+        {
+
+            Ret = ISO7816_RecBlock_Soft(g_7816Para.aRecBuff, &RecLen);
+
+            g_T1.bErrNotify = 0;
+
+            if (Ret == OK)
+            {
+                Ret = ISO7816_T1_Is_Blk_Valid(g_7816Para.aRecBuff, RECV);
+            }
+            else if ((Ret == ISO7816_T1_LRC_ERROR) || (Ret == ISO7816_PARITY_ERROR))
+            {
+                Ret = ERR_CHKSUM;
+            }
+            else if (Ret == ISO7816_DATALEN_ERR)
+            {
+                Ret = ERR_FF;//ERR_LEN;
+            }
+            else if (Ret == ISO7816_NOTLRC_ERROR)
+            {
+                Ret = ERR_LEN;
+            }
+            else
+            {
+                return Ret;
+            }
+
+            //鎭㈠WTX
+            if (SWTXFlag == 1)
+            {
+                terminal_rec_bwt = terminal_rec_bwt_atr;
+                SWTXFlag = 0;
+            }
+
+            if (Ret != 0)
+            {
+                if (!g_T1.bErrNotify)
+                {
+                    g_T1.bErrCnt++;
+                }
+                if (Type < S_BLOCK_C)
+                {
+                    if (((g_T1.bErrCnt <= 1) && ((!g_T1.bErrNotify)))
+                            || ((g_T1.bErrCnt == 0) && ((g_T1.bErrNotify))))
+                    {
+                        g_T1.aRBlk[0] = 0;
+                        g_T1.aRBlk[1] = 0x80 | (g_T1.bNumCard >> 2);
+                        g_T1.aRBlk[2] = 0;
+                        if (Ret & (ERR_PCB | ERR_LEN | ERR_RELVNT_S))
+                        {
+                            g_T1.aRBlk[1] |= 2;
+                        }
+                        else if (Ret & (ERR_PARITY | ERR_CHKSUM))
+                        {
+                            g_T1.aRBlk[1] |= 1;
+                        }
+                        else
+                        {
+                            return ISO7816_ERR_NUM_OVER;
+                        }
+                    }
+                    if (g_T1.bErrCnt < ERR_SEND_CNT)
+                    {
+                        Ret = ISO7816_SendBlock_Soft(&g_T1.aRBlk[3], 0, g_T1.aRBlk);
+                        COMPARE_RETURN(Ret);
+                    }
+                }
+                else
+                {
+                    if (g_T1.bErrCnt < ERR_SEND_CNT)
+                    {
+                        Ret = ISO7816_SendBlock_Soft(&s_blk[3], TmpLen, s_blk);
+                        COMPARE_RETURN(Ret);
+                    }
+                }
+
+                if (g_T1.bErrCnt >= ERR_SEND_CNT)
+                {
+                    return ISO7816_ERR_NUM_OVER;
+                }
+                continue;
+            }
+
+            if ((0xC2 == (g_7816Para.aRecBuff[1] * 0x80)) && (g_T1.bFlagSendChain))
+            {
+                s_blk[0] = 0;
+                s_blk[1] = 0xE2;
+                s_blk[2] = 0;
+                Ret = ISO7816_SendBlock_Soft(&s_blk[3], 0, s_blk);
+                COMPARE_RETURN(Ret);
+                continue;
+            }
+
+            if ((g_7816Para.aRecBuff[1] == 0xc3) && (g_T1.bFlagSendChain != 0))
+            {
+                SWTXFlag = 1;
+
+                //璁剧疆绛夊緟鏃堕棿
+                terminal_change_rec_bwt_num = terminal_rec_bwt_atr * g_7816Para.aRecBuff[3];
+                terminal_rec_bwt = terminal_change_rec_bwt_num;
+#ifdef DEBUG_7816
+                MyPrintf("WTS\n");
+                MyPrintf("%08x", terminal_rec_bwt);
+                MyPrintf("\n");
+                MyPrintf("%08x", g_7816Para.aRecBuff[3]);
+                MyPrintf("\n");
+                MyPrintf("%08x", terminal_change_rec_bwt_num);
+                MyPrintf("\n");
+#endif
+
+                s_blk[0] = 0x0;
+                s_blk[1] = 0xE3;
+                s_blk[2]  = 1;
+                s_blk[3]  = g_7816Para.aRecBuff[3];
+                Ret = ISO7816_SendBlock_Soft(&s_blk[3], 1, s_blk);
+                COMPARE_RETURN(Ret);
+
+                continue;
+            }
+            break;
+        }
+
+        if (R_BLK == (g_7816Para.aRecBuff[1] & 0xC0))
+        {
+            r_cnt++;
+            if (g_T1.bFlagSendChain)
+            {
+                r_cnt = 0;
+                r_chain_cnt++;
+                if ((g_7816Para.aRecBuff[1] & NR_BIT) == (g_T1.bNum >> 2)) /*nr!=ns, 瀵规柟璇锋眰涓嬩竴涓猣rame*/
+                {
+                    r_chain_cnt = 0;
+
+                    pSend += SendLen;
+                    prolHead[0]  = 0;
+                    prolHead[1]  = 0;
+                    prolHead[1] |= g_T1.bNum;
+
+                    if (g_T1.bIFSC < CmdLen)
+                    {
+                        prolHead[1] |= BIT5;
+                        prolHead[2] = g_T1.bIFSC;
+                        CmdLen -= g_T1.bIFSC;
+                        SendLen = g_T1.bIFSC;
+                        g_T1.bLink = 1;
+                    }
+                    else
+                    {
+                        prolHead[2] = CmdLen;
+                        SendLen = CmdLen;
+                        CmdLen = 0;
+                        g_T1.bFlagSendChain = 0;
+                        g_T1.bLink = 0;
+                    }
+                }
+                else
+                {
+                    g_T1.bNum ^= BIT6;
+                }
+                resendflag = 0;
+            }
+            else
+            {
+                resendflag = 1;
+            }
+
+            if ((r_cnt >= ERR_SEND_CNT) || (r_chain_cnt >= ERR_SEND_CNT))
+            {
+                return ISO7816_ERR_NUM_OVER;
+            }
+        }
+        else if (S_BLK == (g_7816Para.aRecBuff[1] & 0xC0))
+        {
+            if (Type < S_BLOCK_C)
+            {
+                g_T1.bFlgSRec = 1;
+            }
+            else
+            {
+                if (IFS_issued)
+                {
+                    if ((0x21 != (g_7816Para.aRecBuff[1] & S_RSP_MSK))
+                            || (g_7816Para.aRecBuff[3] != pCommand[0]))
+                    {
+                        resendflag = 1;
+                        g_T1.bErrCnt++;
+                        continue;
+                    }
+                    IFS_issued = 0;
+                }
+
+                if (0x21 == (g_7816Para.aRecBuff[1] & S_RSP_MSK))
+                {
+                    if (g_7816Para.aRecBuff[3] == pCommand[0])
+                    {
+                        g_T1.bIFSD = pCommand[0];
+                    }
+                    else
+                    {
+                        resendflag = 1;
+                        continue;
+                    }
+                }
+                else if (0x22 == (g_7816Para.aRecBuff[1] & S_RSP_MSK))
+                {
+
+                }
+
+                else if (0x23 == (g_7816Para.aRecBuff[1] & S_RSP_MSK))
+                {
+                    if (g_7816Para.aRecBuff[3] == pCommand[0])
+                    {
+                        return ISO7816_RET_RESPONSE_DIFFERENT;
+                    }
+                }
+                else
+                {
+
+                }
+            }
+            break;
+
+        }
+        else
+        {
+            g_T1.bFlgIRec = 1;
+            break;
+        }
+    }
+
+    return OK;
+}
+
+uint16_t ISO7816_TPDU_T1(uint8_t *pCommand, uint16_t CommandLength,
+                         uint8_t *pResponse,  uint16_t *pResponseLength)
+{
+    uint16_t Ret;
+    uint16_t RecLen = 0;
+    uint8_t RecvBuf[REC_SIZE_MAX];
+    uint8_t *pRecBuf = RecvBuf;
+
+    if ((NULL == pCommand) || (NULL == pResponse) ||
+            (CommandLength < 1) || (NULL == pResponseLength))
+    {
+        return ISO7816_PARA_ERROR;
+    }
+
+    Ret = ISO7816_TPDU_T1Send(pCommand, CommandLength, I_BLOCK_C);
+    COMPARE_RETURN(Ret);
+
+    *pResponseLength = 0;
+    do
+    {
+        Ret = ISO7816_TPDU_T1Rec(pRecBuf, &RecLen);
+        if ((OK != Ret) && (ISO7816_RET_CHAIN != Ret))
+        {
+            return ISO7816_T1_TRANSFER_ERROR;
+        }
+        if (REC_SIZE_MAX < RecLen)
+        {
+            return ISO7816_T1_TRANSFER_ERROR;
+        }
+        pRecBuf += RecLen;
+        *pResponseLength += RecLen;
+    }
+    while (ISO7816_RET_CHAIN == Ret);
+
+    memcpy(pResponse, RecvBuf, *pResponseLength);
+
+    return OK;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_DTM.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_DTM.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_DTM.h	(working copy)
@@ -0,0 +1,12 @@
+#ifndef __YC_DTM_H__
+#define __YC_DTM_H__
+
+#include "../core/yc3121.h"
+
+extern const unsigned char DTM_TestBtCode[];
+
+void ModifyDtmFreq(uint32_t Freq);
+void DTMTestInit(void);
+
+#endif
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_DTM.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_DTM.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_DTM.c	(working copy)
@@ -0,0 +1,194 @@
+
+#include "yc_dtm.h"
+extern uint8_t BT_Wake;
+extern void erase_memory(void);
+extern void _download_btcode(const byte *btcode);
+void DTMTestInit(void)
+{
+	disable_intr(INTR_BT);
+	SYSCTRL_ROM_SWITCH = 0x94;
+	delay(10000);   //wait rom switch ok
+	BT_RESET = 1;
+	delay(10000);   //wait for reset ok
+	while(!(BT_CONFIG & (1 << BT_INIT_FLAG)));
+	BT_CONFIG &= (~(1<<BT_INIT_FLAG));
+	erase_memory();
+	_download_btcode(DTM_TestBtCode);
+	WAKEUP_BT = 0x9c;
+}
+
+/*
+ 鍑芥暟鍔熻兘:淇敼DTM鍥轰欢瀹氶棰戠巼
+ 杈撳叆:棰戠巼鏁板2401~2480
+ 杈撳嚭:鏃
+*/
+#define BT_RF_CONFIG_REG1			*(volatile byte*)0xc8960
+#define BT_RF_CONFIG_REG2			*(volatile byte*)0xc8961
+#define BT_RF_CONFIG_REG3			*(volatile byte*)0xc8962
+#define BT_RF_CONFIG_REG4			*(volatile byte*)0xc8963
+
+void ModifyDtmFreq(uint32_t Freq)
+{
+	_ASSERT((Freq>=2401 && Freq<=2480));
+	uint8_t FreqConfig[80][4] = 
+	{
+		0x85,0xc6,0x71,0xc,
+		0x85,0xe2,0x38,0xe,
+		0x85,0x0,0x0,0x10,
+		0x85,0x1c,0xc7,0x11,
+		0x85,0x38,0x8e,0x13,
+		0x85,0x54,0x55,0x15,
+		0x85,0x70,0x1c,0x17,
+		0x85,0x8e,0xe3,0x18,
+		0x85,0xaa,0xaa,0x1a,
+		0x85,0xc6,0x71,0x1c,
+		0x85,0xe2,0x38,0x1e,
+		0x86,0x0,0x0,0x0,
+		0x86,0x1c,0xc7,0x1,
+		0x86,0x38,0x8e,0x3,
+		0x86,0x54,0x55,0x5,
+		0x86,0x70,0x1c,0x7,
+		0x86,0x8e,0xe3,0x8,
+		0x86,0xaa,0xaa,0xa,
+		0x86,0xc6,0x71,0xc,
+		0x86,0xe2,0x38,0xe,
+		0x86,0x0,0x0,0x10,
+		0x86,0x1c,0xc7,0x11,
+		0x86,0x38,0x8e,0x13,
+		0x86,0x54,0x55,0x15,
+		0x86,0x70,0x1c,0x17,
+		0x86,0x8e,0xe3,0x18,
+		0x86,0xaa,0xaa,0x1a,
+		0x86,0xc6,0x71,0x1c,
+		0x86,0xe2,0x38,0x1e,
+		0x87,0x0,0x0,0x0,
+		0x87,0x1c,0xc7,0x1,
+		0x87,0x38,0x8e,0x3,
+		0x87,0x54,0x55,0x5,
+		0x87,0x70,0x1c,0x7,
+		0x87,0x8e,0xe3,0x8,
+		0x87,0xaa,0xaa,0xa,
+		0x87,0xc6,0x71,0xc,
+		0x87,0xe2,0x38,0xe,
+		0x87,0x0,0x0,0x10,
+		0x87,0x1c,0xc7,0x11,
+		0x87,0x38,0x8e,0x13,
+		0x87,0x54,0x55,0x15,
+		0x87,0x70,0x1c,0x17,
+		0x87,0x8e,0xe3,0x18,
+		0x87,0xaa,0xaa,0x1a,
+		0x87,0xc6,0x71,0x1c,
+		0x87,0xe2,0x38,0x1e,
+		0x88,0x0,0x0,0x0,
+		0x88,0x1c,0xc7,0x1,
+		0x88,0x38,0x8e,0x3,
+		0x88,0x54,0x55,0x5,
+		0x88,0x70,0x1c,0x7,
+		0x88,0x8e,0xe3,0x8,
+		0x88,0xaa,0xaa,0xa,
+		0x88,0xc6,0x71,0xc,
+		0x88,0xe2,0x38,0xe,
+		0x88,0x0,0x0,0x10,
+		0x88,0x1c,0xc7,0x11,
+		0x88,0x38,0x8e,0x13,
+		0x88,0x54,0x55,0x15,
+		0x88,0x70,0x1c,0x17,
+		0x88,0x8e,0xe3,0x18,
+		0x88,0xaa,0xaa,0x1a,
+		0x88,0xc6,0x71,0x1c,
+		0x88,0xe2,0x38,0x1e,
+		0x89,0x0,0x0,0x0,
+		0x89,0x1c,0xc7,0x1,
+		0x89,0x38,0x8e,0x3,
+		0x89,0x54,0x55,0x5,
+		0x89,0x70,0x1c,0x7,
+		0x89,0x8e,0xe3,0x8,
+		0x89,0xaa,0xaa,0xa,
+		0x89,0xc6,0x71,0xc,
+		0x89,0xe2,0x38,0xe,
+		0x89,0x0,0x0,0x10,
+		0x89,0x1c,0xc7,0x11,
+		0x89,0x38,0x8e,0x13,
+		0x89,0x54,0x55,0x15,
+		0x89,0x70,0x1c,0x17,
+		0x89,0x8e,0xe3,0x18,
+	};
+	MyPrintf("Freq = %d\r\n", Freq);
+	BT_RF_CONFIG_REG1 = FreqConfig[Freq-2401][0];
+	BT_RF_CONFIG_REG2 = FreqConfig[Freq-2401][1];
+	BT_RF_CONFIG_REG3 = FreqConfig[Freq-2401][2];
+	BT_RF_CONFIG_REG4 = FreqConfig[Freq-2401][3];
+}
+
+
+const unsigned char DTM_TestBtCode[] = {
+0x00,0x02,0xaa,0x55,0xea,0x03,0x20,0x40,0x00,0x10,0x20,0x40,0x00,0x16,0x20,0x40,
+0x00,0x3e,0x58,0x00,0x17,0x70,0x67,0xe4,0x04,0x49,0xd8,0x40,0x00,0x00,0x20,0x40,
+0x49,0x15,0x20,0x40,0x00,0xcc,0x78,0x43,0xfc,0x00,0x78,0x2e,0xfc,0x00,0x78,0x30,
+0x7c,0x00,0x70,0x89,0x08,0x20,0x79,0x20,0x2a,0x00,0x6f,0xe2,0x00,0x00,0x08,0x00,
+0x86,0x08,0x20,0x20,0x00,0x0d,0xd8,0xa0,0x00,0x00,0xdf,0x20,0x04,0x00,0x20,0x40,
+0x7c,0xa1,0xd8,0xa0,0x40,0x00,0xdf,0x20,0x02,0x00,0x20,0x20,0x7c,0xa1,0x58,0x8f,
+0xff,0xff,0x67,0xe6,0x40,0x98,0x58,0x9d,0x83,0xfe,0xe7,0xe6,0x00,0x05,0x58,0x00,
+0x83,0x59,0xe7,0xe4,0x00,0x05,0x58,0x00,0x11,0x77,0x67,0xe6,0x40,0xa0,0x58,0x00,
+0x00,0x33,0x67,0xe6,0x40,0xa3,0x58,0x9e,0x8b,0x33,0x67,0xe6,0x40,0xa7,0x58,0x00,
+0x00,0x12,0x67,0xe4,0x40,0xad,0x58,0x00,0x10,0x00,0x67,0xe4,0x40,0xaf,0x58,0x00,
+0x02,0x00,0x67,0xe4,0x40,0xb1,0x58,0x00,0x08,0x00,0x67,0xe4,0x40,0xb3,0x58,0x00,
+0x00,0x20,0x67,0xe4,0x40,0xbb,0x58,0x00,0x00,0x20,0x67,0xe4,0x40,0xb7,0x58,0x00,
+0x20,0x00,0x67,0xe4,0x40,0xb9,0x58,0x00,0x0a,0x04,0x67,0xe6,0x44,0xe2,0x58,0x00,
+0x12,0xe9,0x67,0xe4,0x44,0xe5,0x70,0x44,0xe7,0x06,0x58,0x53,0x54,0x42,0x67,0xe6,
+0x44,0xe8,0x58,0x34,0x49,0x50,0x67,0xe6,0x44,0xeb,0x70,0x40,0xbd,0x02,0x70,0x00,
+0x90,0x60,0x70,0x40,0xd0,0x05,0x70,0x40,0x93,0x03,0x20,0x60,0x00,0x00,0x70,0x80,
+0x42,0x06,0x70,0x89,0x07,0x00,0x70,0x89,0x08,0x00,0x70,0x89,0x09,0x00,0x70,0x89,
+0x0a,0xfa,0x70,0x89,0x0b,0xff,0x70,0x89,0x0f,0x2e,0x70,0x89,0x12,0x47,0x70,0x89,
+0x4b,0xba,0x70,0x89,0x4c,0xfb,0x70,0x89,0x4d,0xef,0x70,0x89,0x4e,0xec,0x70,0x89,
+0x4f,0x5e,0x70,0x89,0x6f,0x88,0x70,0x89,0x73,0x00,0x70,0x89,0x30,0xa9,0x70,0x89,
+0x2f,0xad,0x70,0x89,0x2e,0xb1,0x70,0x89,0x2d,0xb5,0x70,0x89,0x2c,0xb9,0x70,0x89,
+0x2b,0xbd,0x70,0x89,0x2a,0xc2,0x70,0x89,0x29,0xc6,0x70,0x89,0x28,0xca,0x70,0x89,
+0x27,0xce,0x70,0x89,0x26,0xd2,0x70,0x89,0x25,0xd6,0x70,0x89,0x24,0xda,0x70,0x89,
+0x23,0xde,0x70,0x89,0x22,0xe2,0x70,0x89,0x21,0xe6,0x70,0x89,0x20,0xea,0x70,0x89,
+0x1f,0xee,0x70,0x89,0x1e,0xf2,0x70,0x89,0x1d,0xf6,0x70,0x89,0x1c,0xfb,0x70,0x89,
+0x1b,0xfb,0x70,0x89,0x1a,0xfb,0x70,0x89,0x47,0xf5,0x70,0x89,0x46,0xe6,0x70,0x89,
+0x45,0xd7,0x70,0x89,0x44,0xd6,0x70,0x89,0x43,0xc7,0x70,0x89,0x42,0xc6,0x70,0x89,
+0x41,0x87,0x70,0x89,0x40,0x86,0x70,0x89,0x3f,0x85,0x70,0x89,0x3e,0x46,0x70,0x89,
+0x3d,0x07,0x70,0x89,0x3c,0x06,0x70,0x89,0x3b,0xc7,0x70,0x89,0x3a,0xc6,0x70,0x89,
+0x39,0xc5,0x70,0x89,0x38,0xc4,0x70,0x89,0x37,0xc3,0x70,0x89,0x36,0xc2,0x70,0x89,
+0x35,0xc1,0x70,0x89,0x34,0xc0,0x70,0x89,0x33,0x80,0x70,0x89,0x32,0x80,0x70,0x89,
+0x31,0x80,0x70,0x89,0x4a,0x7f,0x70,0x89,0x49,0xf8,0x70,0x89,0x48,0x00,0x70,0x89,
+0x55,0xd0,0x70,0x89,0x56,0xe0,0x70,0x89,0x57,0x88,0x70,0x89,0x58,0x5c,0x70,0x89,
+0x59,0x10,0x58,0x00,0x00,0x00,0x58,0x30,0x00,0x00,0x67,0xe6,0x89,0x69,0x70,0x89,
+0x68,0x64,0x70,0x40,0xbe,0x24,0x20,0x40,0x00,0xb0,0x70,0x89,0x68,0xe4,0x79,0x20,
+0x2a,0x03,0x18,0x00,0x2a,0x00,0x20,0x40,0x00,0x8f,0x20,0x40,0x00,0xa1,0x20,0x60,
+0x00,0x00,0x70,0x89,0x06,0x02,0x58,0x26,0x25,0xa0,0x20,0x40,0x4a,0x8e,0x70,0x89,
+0x00,0x7f,0x20,0x00,0x00,0x82,0x70,0x89,0x01,0x10,0x70,0x89,0x52,0x30,0x20,0x00,
+0x00,0xc8,0x70,0x89,0x52,0xf0,0x18,0x00,0x72,0x32,0x6f,0xe2,0x89,0x90,0xc2,0x82,
+0x80,0x9c,0xc2,0x00,0x00,0x99,0x67,0xe2,0x40,0xce,0x70,0x89,0x01,0x00,0x70,0x89,
+0x00,0x00,0x70,0x89,0x06,0x00,0x20,0x60,0x00,0x00,0x6f,0xe2,0x40,0xce,0x79,0x20,
+0x7e,0x05,0x67,0xe2,0x89,0x52,0x68,0x42,0x89,0x50,0x18,0x41,0x04,0x07,0x1f,0xe9,
+0xfe,0x00,0x98,0x41,0xfe,0x00,0x67,0xe2,0x89,0x50,0x6f,0xe2,0x89,0x51,0x79,0x3f,
+0xfe,0x00,0x67,0xe2,0x89,0x51,0x6f,0xe2,0x89,0x52,0x79,0x3f,0xfe,0x05,0x67,0xe2,
+0x89,0x52,0x20,0x60,0x00,0x00,0x6f,0xe2,0x89,0x6b,0x79,0x3f,0xfe,0x04,0x79,0x3f,
+0xfe,0x05,0x67,0xe2,0x89,0x6b,0x70,0x89,0x05,0x00,0x70,0x89,0x04,0x70,0x70,0x89,
+0x05,0xff,0x6f,0xe2,0x89,0x6b,0x79,0x20,0x7e,0x04,0x79,0x20,0x7e,0x05,0x67,0xe2,
+0x89,0x6b,0x20,0x40,0x00,0xbe,0x70,0x80,0x42,0x05,0x20,0x60,0x00,0x00,0x68,0x46,
+0x81,0x1c,0x58,0x10,0x08,0x0f,0x98,0x46,0x7c,0x00,0x20,0x62,0x80,0x00,0x67,0xe6,
+0x80,0x4c,0x70,0x80,0x4f,0xca,0x20,0x40,0x00,0xc6,0x20,0x60,0x00,0x00,0x58,0x00,
+0x00,0x01,0x37,0xd9,0x82,0x00,0x67,0xe2,0x80,0x05,0x37,0xd9,0x82,0x00,0x37,0xd9,
+0x82,0x00,0x20,0x60,0x00,0x00,0x60,0x42,0x00,0x17,0x18,0x40,0xa2,0x02,0x20,0x40,
+0x00,0xe4,0x58,0x00,0x05,0x00,0x20,0x40,0x4a,0x8e,0x70,0x89,0x06,0x01,0x70,0x89,
+0x00,0x3c,0x70,0x89,0x01,0xe0,0x70,0x89,0x6d,0x12,0x20,0x00,0x00,0x0a,0x70,0x89,
+0x02,0x01,0x70,0x89,0x02,0x3d,0x20,0x00,0x00,0x0a,0x70,0x89,0x03,0xb7,0x20,0x00,
+0x00,0x0a,0x70,0x89,0x02,0x7d,0x70,0x89,0x56,0xf0,0x20,0x00,0x00,0x04,0x70,0x89,
+0x55,0xd1,0x20,0x00,0x00,0x04,0x70,0x89,0x55,0xd2,0x20,0x00,0x00,0x04,0x70,0x89,
+0x55,0xd8,0x20,0x60,0x00,0x00,0x58,0x00,0x09,0x60,0x9a,0x20,0x84,0x00,0x6f,0xe2,
+0x40,0xbd,0x70,0x89,0x5f,0x04,0x98,0x4f,0xfe,0x00,0x68,0x42,0x40,0xbe,0x98,0x46,
+0xfc,0x00,0x20,0x40,0x7d,0x61,0x18,0x07,0xa2,0x00,0x18,0x07,0x7e,0x00,0x1f,0xf0,
+0x7e,0x00,0x1f,0xf2,0x7e,0x00,0x98,0x46,0xfc,0x00,0x20,0x40,0x7d,0x61,0x18,0x07,
+0xfe,0x00,0x1f,0xed,0x7e,0x00,0x1f,0xe3,0xfe,0x00,0x9a,0x21,0xfe,0x00,0x67,0xe8,
+0x89,0x60,0x70,0x89,0x5f,0x44,0x70,0x89,0x5f,0xc4,0x20,0x60,0x00,0x00,0x27,0x55,
+0xaa,0x55,0x01,0x00,0x11,0x40,0x04,0xaa,0x55,0x03,0x00,0xb1,0x4a,0x07,0xff,0xff,
+0xaa,0x55,0x02,0x00,0xc3,0x40,0xb1,0x4a,0x91,0x0c
+};
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_adc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_adc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_adc.h	(working copy)
@@ -0,0 +1,104 @@
+/*
+File Name    : yc_adc.h
+Author       : Yichip
+Version      : V1.1
+Date         : 2020/07/14
+Description  : ADC encapsulation.
+*/
+
+#ifndef __YC_ADC_H__
+#define __YC_ADC_H__
+
+#include "yc3121.h"
+#include "yc_otp.h"
+#include "yc_ipc.h"
+
+#define IO_LOW_VOLTAGE_REF      500
+#define IO_HIHG_VOLTAGE_REF     1000
+#define HVIN_LOW_VOLTAGE_REF    3300
+#define HVIN_HIHG_VOLTAGE_REF   5000
+#define VINLPM_LOW_VOLTAGE_REF  2000
+#define VINLPM_HIHG_VOLTAGE_REF 3000
+
+#define ADC_REF_OTP_ADDR 0x012c
+
+#define FILT_NUM   20
+#define REMOVE_NUM 6
+
+#define WAIT_TIME 100
+
+/* ADC Channel select */
+typedef enum
+{
+    ADC_CHANNEL_0 = 0,
+    ADC_CHANNEL_1,
+    ADC_CHANNEL_2,
+    ADC_CHANNEL_3,
+    ADC_CHANNEL_4,
+    ADC_CHANNEL_5,
+    ADC_CHANNEL_6,
+    ADC_CHANNEL_7,
+} ADC_ChxTypeDef;
+
+#define IS_ADC_CHANNEL(CHANNEL_NUM) (((CHANNEL_NUM) == ADC_CHANNEL_0) || \
+                                     ((CHANNEL_NUM) == ADC_CHANNEL_1) || \
+                                     ((CHANNEL_NUM) == ADC_CHANNEL_2) || \
+                                     ((CHANNEL_NUM) == ADC_CHANNEL_3) || \
+                                     ((CHANNEL_NUM) == ADC_CHANNEL_4) || \
+                                     ((CHANNEL_NUM) == ADC_CHANNEL_5) || \
+                                     ((CHANNEL_NUM) == ADC_CHANNEL_6)||\
+                                     ((CHANNEL_NUM) == ADC_CHANNEL_7))
+
+typedef enum
+{
+    ADC_GPIO = 0,
+    ADC_DIFF,
+    ADC_HVIN,
+    ADC_VINLPM,
+} ADC_ModeTypeDef;
+#define IS_ADC_MODE(MODE)  ((MODE == ADC_GPIO)||\
+                            (MODE == ADC_DIFF)||\
+                            (MODE == ADC_HVIN)||\
+                            (MODE == ADC_VINLPM))
+
+/* ADC Struct Define*/
+typedef struct _ADC_InitTypeDef
+{
+    ADC_ChxTypeDef  ADC_Channel;            /* ADC Channel select */
+    ADC_ModeTypeDef ADC_Mode;
+} ADC_InitTypeDef;
+
+/**
+ * @brief Initialize adc module
+ *
+ * @param ADC_InitStruct : piont to ADC_InitTypeDef struct
+ *
+ * @retval none
+ */
+void ADC_Init(ADC_InitTypeDef *ADC_InitStruct);
+
+/**
+ * @brief  Get ADC result
+ *
+ * @param  ADC_Channel : In gpio mode ,the para can be every value of ADC_ChxTypeDef,
+ *                       in gpio diff mode, the param can be ADC_CHANNEL_0 to ADC_CHANNEL_3,and in other mode,
+ *                       the param can be 0.
+ * @retval 0:fail other:adc value
+ */
+uint16_t ADC_GetResult(ADC_ChxTypeDef ADC_Channel);
+
+/**
+ * @brief  Get voltage
+ * @param  ADC_Channel: ADC_Channel Select channel,
+ * @retval -1:fail;  other:adc voltage (mV);
+ */
+int ADC_GetVoltage(ADC_ChxTypeDef ADC_Channel);
+
+/**
+ * @brief  Median and arithmetic mean filtering
+ * @param  ADC_Channel: ADC_Channel Select channel,select ADC_CHANNEL_0 in hvin or lpmhvin mode
+ * @retval The filtered result,-1:get result failed
+ */
+int ADC_Filt(ADC_ChxTypeDef ADC_Channel);
+
+#endif   /* __YC_ADC_H__ */
Index: BT_doublebyte/sdk/Librarier/sdk/yc_adc.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_adc.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_adc.c	(working copy)
@@ -0,0 +1,193 @@
+/*
+File Name    : yc_adc.c
+Author       : Yichip
+Version      : V1.1
+Date         : 2020/07/14
+Description  : ADC encapsulation.
+*/
+#include "yc_adc.h"
+
+#define ADC_RESULT (0x7FE&ADC_RDATA)
+
+extern Boolean ipc_inited;
+static int calculate_voltage(int result, int vol_high_ref, int vol_low_ref, int vol_high, int vol_low);
+uint8_t r_otp_ref_para[16];
+
+void ADC_Init(ADC_InitTypeDef *ADC_InitStruct)
+{
+    _ASSERT(IS_ADC_CHANNEL(ADC_InitStruct->ADC_Channel));
+    _ASSERT(IS_ADC_MODE(ADC_InitStruct->ADC_Mode));
+    /****************open dpll*******************/
+    IpcInit();
+
+    /****************config adc******************* */
+    ADC_CTRL1 = 0x8f | ((ADC_InitStruct->ADC_Mode) << 4);
+#if (VERSIONS == NO_BT)
+    ADC_ENBLE &= ~(1 << 3);
+    delay_us(2);
+    ADC_ENBLE = 0x74;
+    delay_us(2);
+    ADC_ENBLE = 0x7c;
+#endif
+    ADC_CTRL0 = 0x7f;
+    ADC_CTRL2 = 0xaa;
+    ADC_CTRL3 = 0x30 | ADC_InitStruct->ADC_Channel;
+    
+    //read otp reference
+    read_otp(ADC_REF_OTP_ADDR, r_otp_ref_para, 16);
+}
+
+uint16_t  ADC_GetResult(ADC_ChxTypeDef ADC_Channel)
+{
+    if (ipc_inited == FALSE)	return 0;
+    ADC_CTRL0 = 0x7f;
+    ADC_CTRL2 = 0xaa;
+    ADC_CTRL3 = 0x30 | ADC_Channel;
+    delay_us(WAIT_TIME);
+    return	ADC_RESULT;
+}
+
+int ADC_Filt(ADC_ChxTypeDef ADC_Channel)
+{
+    int8_t i, j;
+    uint16_t ADC_Buffer[FILT_NUM], tmp;
+    int cnt = 200;
+    if (ipc_inited == FALSE)	return -1;
+    ADC_CTRL0 = 0x7f;
+    ADC_CTRL2 = 0xaa;
+    ADC_CTRL3 = 0x30 | ADC_Channel;
+
+    delay_us(WAIT_TIME);
+
+    if (REMOVE_NUM * 2 >= FILT_NUM)
+    {
+        return -1;
+    }
+
+    for (i = 0; i < FILT_NUM; i++)
+    {
+        ADC_Buffer[i] = ADC_RESULT;
+        if (ADC_Buffer[i] != 0)
+        {
+            continue;
+        }
+        else
+        {
+            i--;
+            if (0 == cnt--)
+                return -1;
+        }
+#ifdef SDK_DEBUG
+        MyPrintf("ADC_result,%d ", ADC_RESULT);
+#endif
+    }
+    for (j = 1; j < FILT_NUM; j++)
+    {
+        tmp = ADC_Buffer[j];
+        i = j - 1;
+        while (i >= 0 && ADC_Buffer[i] > tmp)
+        {
+            ADC_Buffer[i + 1] = ADC_Buffer[i];
+            i--;
+        }
+        ADC_Buffer[i + 1] = tmp;
+    }
+
+    for (tmp = 0, i = REMOVE_NUM; i < FILT_NUM - REMOVE_NUM; i++)
+    {
+        tmp += ADC_Buffer[i];
+    }
+
+    return tmp / (FILT_NUM - 2 * REMOVE_NUM);
+}
+
+int ADC_GetVoltage(ADC_ChxTypeDef ADC_Channel)
+{
+    int result = 0;
+    int i = 0, j = 0;
+    int voltage_low  = 2800;
+    int voltage_high = 5000;
+    int reg_voltage_low  = 640 * 1000;
+    int ref_voltage_high  = 744 * 1000;
+    int adc_result_buf[FILT_NUM] = {0};
+
+    uint8_t getmode = (ADC_CTRL1 & 0x70) >> 4;
+
+    if (ipc_inited == FALSE)	return -1;
+
+    switch (getmode)
+    {
+    case ADC_GPIO:
+        reg_voltage_low  = ((r_otp_ref_para[3] << 8) | r_otp_ref_para[2]) * 1000;
+        ref_voltage_high = ((r_otp_ref_para[9] << 8) | r_otp_ref_para[8]) * 1000;
+        voltage_low = IO_LOW_VOLTAGE_REF;
+        voltage_high = IO_HIHG_VOLTAGE_REF;
+        break;
+
+    case ADC_HVIN:
+        reg_voltage_low  = ((r_otp_ref_para[5] << 8) | r_otp_ref_para[4]) * 1000; //OTP涓3.3v鏍″噯鍊
+        ref_voltage_high = ((r_otp_ref_para[11] << 8) | r_otp_ref_para[10]) * 1000; //OTP涓5.0V鏍″噯鍊
+        voltage_low = HVIN_LOW_VOLTAGE_REF;
+        voltage_high = HVIN_HIHG_VOLTAGE_REF;
+        break;
+
+    case ADC_VINLPM:
+        reg_voltage_low  = ((r_otp_ref_para[5] << 8) | r_otp_ref_para[4]) * 1000;
+        ref_voltage_high = ((r_otp_ref_para[11] << 8) | r_otp_ref_para[10]) * 1000;
+        voltage_low = VINLPM_LOW_VOLTAGE_REF;
+        voltage_high = VINLPM_HIHG_VOLTAGE_REF;
+        break;
+    default:
+        return -1;
+    }
+
+    if (reg_voltage_low == 0 || ref_voltage_high == 0)
+        return -1;
+
+    while (i < FILT_NUM)//get FFILT_NUM  result
+    {
+        result =  ADC_GetResult(ADC_Channel);
+        if (result > 0)
+        {
+            adc_result_buf[i++] = calculate_voltage(result, ref_voltage_high, reg_voltage_low, voltage_high, voltage_low);
+        }
+        if (++j > FILT_NUM + 10)
+            return -1;    //debug whiel(1)
+    }
+
+    for (j = 1; j < FILT_NUM; j++)
+    {
+        result = adc_result_buf[j];
+        i = j - 1;
+        while (i >= 0 && adc_result_buf[i] > result)
+        {
+            adc_result_buf[i + 1] = adc_result_buf[i];
+            i--;
+        }
+        adc_result_buf[i + 1] = result;
+    }
+
+    for (result = 0, i = REMOVE_NUM; i < FILT_NUM - REMOVE_NUM; i++)
+    {
+        result += adc_result_buf[i];
+    }
+    return result / (FILT_NUM - 2 * REMOVE_NUM);
+}
+
+/**
+  * @brief  calculate voltage ,acording reference value and reference voltage
+  * @param  result       : adc result
+  *         vol_high_ref : high voltage reference value
+  *         vol_low_ref  : low voltage reference value
+  *         vol_high     : high reference voltage (mV)
+  *         vol_low      : low reference voltage
+  * @retval voltage (mV)
+  */
+static int calculate_voltage(int result, int vol_high_ref, int vol_low_ref, int vol_high, int vol_low)
+{
+    int rega = result * 1000 - vol_low_ref;
+    int regb = vol_high_ref - vol_low_ref;
+    int regc = vol_high - vol_low;
+    int temp = (rega * regc) / regb + vol_low;
+    return temp;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_bt.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_bt.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_bt.h	(working copy)
@@ -0,0 +1,651 @@
+/**
+  ******************************************************************************
+  * @file    yc_bt.h
+  * @author  Yichip
+  * @version V1.1
+  * @date    28-May-2020
+  * @brief   Yichip bluetooth encapsulation.The HCI protocol refers to YC Dual mode module spec-v4.15
+*
+  ******************************************************************************
+  */
+
+
+#ifndef __YC_BT_H__
+#define __YC_BT_H__
+
+#include "yc_uart.h"
+#include "yc_ipc.h"
+
+#define HCI_BT_NUM 10
+#define HCT_DATA_LEN 800
+#define HCT_STATE_LEN 100
+
+#define HCI_CMD                           0x01
+#define HCI_EVENT                         0x02
+#define MAX_BLUETOOTH_DATA_LEN            255
+#define MAX_TCP_DATA_LEN                  235
+#define MAX_BIG_DATA_LEN                  1452
+
+
+
+/*BIT judge*/
+#define BIT_SET_BT_ADDR                   0
+#define BIT_SET_BLE_ADDR                  1
+#define BIT_SET_VISIBILITY                2
+#define BIT_SET_BT_NAME                   3
+#define BIT_SET_BLE_NAME                  4
+#define BIT_SEND_SPP_DATA                 5
+#define BIT_SEND_BLE_DATA                 6
+#define BIT_STATUS_REQUEST                7
+#define BIT_SET_PAIRING_MODE              8
+#define BIT_SET_PINCODE                   9
+#define BIT_GET_VERSION                   10
+#define BIT_BT_DISCONNECT                 11
+#define BIT_BLE_DISCONNECT                12
+#define BIT_SET_NVRAM                     13
+#define BIT_SET_TXPOWER                   14
+#define BIT_ENTER_SLEEP_MODE              15
+#define BIT_CONFIRM_GKEY                  16
+#define BIT_POWER_SET                     17
+#define BIT_GET_CREADIT_GIVEN             18
+#define BIT_PASSKEY_ENTRY                 19
+#define BIT_LE_SET_PARING                 20
+#define BIT_LE_SET_ADV_DATA               21
+#define BIT_LE_SET_SCAN_DATA              22
+#define BIT_LE_SEND_CONN_UPDATE           23
+#define BIT_LE_SET_ADV_PARM               24
+#define BIT_REJECT_JUSTWORK               25
+#define BIT_LE_SET_FIXED_PASSKEY          26
+#define BIT_SET_PSCAN_INTERVAL            27
+#define BIT_MODULE_READY                  28
+#define	BIT_SET_COD                       29
+#define BIT_SET_CREDIT                    30
+#define BIT_DELETE_SERVICE                31
+#define BIT_ADD_UUID                      32
+#define BIT_DNS_REQ                       33
+#define BIT_CONNECT_BNEP                  34
+#define BIT_CONNECT_TCP                   35
+#define BIT_BNEP_SEND_TCP_DATA            36
+#define BIT_DISCONNECT_TCP                37
+#define BIT_BNEP_SEND_UDP_DATA            38
+#define BIT_BNEP_SEND_TCP_BIG_DATA        39
+#define BIT_BNEP_SEND_TCP_BIG_DATA_FINISH 40
+#define BIT_BNEP_SEND_TCP_BIG_DATA_STATUS 41
+#define BIT_SET_LPM_MODE                  42
+/*CMD*/
+#define HCI_CMD_SET_BT_ADDR               0x00  //设置 BT3.0 地址
+#define HCI_CMD_SET_BLE_ADDR              0x01  //设置 BLE 地址
+#define HCI_CMD_SET_VISIBILITY            0x02  //设置可发现和广播
+#define HCI_CMD_SET_BT_NAME               0x03  //设置 BT3.0 名称
+#define HCI_CMD_SET_BLE_NAME              0x04  //设置 BLE 名称
+#define HCI_CMD_SEND_SPP_DATA             0x05  //发�?? BT3.0（SPP）数�?
+#define HCI_CMD_SEND_BLE_DATA             0x09  //发�?? BLE 数据
+#define HCI_CMD_STATUS_REQUEST            0x0B  //请求蓝牙状�??
+#define HCI_CMD_SET_PAIRING_MODE          0x0C  //设置配对模式
+#define HCI_CMD_SET_PINCODE               0x0D  //设置配对�?
+#define HCI_CMD_VERSION_REQUEST           0x10  //查询模块固件版本
+#define HCI_CMD_BT_DISCONNECT             0x11  //断开 BT3.0 连接
+#define HCI_CMD_BLE_DISCONNECT            0x12  //断开 BLE 连接
+#define HCI_CMD_SET_NVRAM                 0x26  //下发 NV 数据
+#define HCI_CMD_ENTER_SLEEP_MODE          0x27  //进入睡眠模式
+#define HCI_CMD_CONFIRM_GKEY              0x28  //Numeric Comparison 配对方式中对密钥的比较（见HCI_EVENT_GKEY注释�?
+#define HCI_CMD_GET_CREADIT_GIVEN         0x29
+#define HCI_CMD_PASSKEY_ENTRY             0x30  //passkey配对方式中对密钥的比�?
+#define HCI_CMD_LE_SET_PAIRING            0x33
+#define HCI_CMD_LE_SET_ADV_DATA           0x34
+#define HCI_CMD_LE_SET_SCAN_DATA          0x35
+#define HCI_CMD_LE_SEND_CONN_UPDATE_REQ   0x36
+#define HCI_CMD_LE_SET_ADV_PARM           0x37
+#define HCI_CMD_SET_TX_POWER              0x42
+#define HCI_CMD_REJECT_JUSTWORK           0x49
+#define HCI_CMD_LE_SET_FIXED_PASSKEY      0x61
+#define	HCI_CMD_DELETE_CUSTOMIZE_SERVICE  0x76
+#define	HCI_CMD_ADD_SERVICE_UUID          0x77
+#define	HCI_CMD_ADD_CHARACTERISTIC_UUID   0x78
+#define	HCI_CMD_SET_COD                   0x15  //设置 COD
+#define HCI_CMD_CONNECT_BNEP              0x7e //建立BNEP连接
+#define HCI_CMD_CONNECT_TCP               0x7f //建立TCP连接
+#define HCI_CMD_DISCONNECT_TCP            0x80 //断开TCP连接
+#define HCI_CMD_BNEP_SEND_TCP_DATA        0x81 //发�?�TCP数据
+#define HCI_CMD_DNS_REQ                   0x82 //域名解析指令
+#define HCI_CMD_SEND_UDP_DATA             0x84 //发�?�UDP数据
+#define HCI_CMD_SEND_BIG_DATA             0x85 //发�?�TCP大包数据
+#define HCI_CMD_SET_LPM_MODE              0xff //开关低功耗
+
+
+/*EVENT*/
+#define HCI_EVENT_BT_CONNECTED            0x00  /**BT3.0 连接建立*/
+#define HCI_EVENT_BLE_CONNECTED           0x02  /**BLE 连接建立*/
+#define HCI_EVENT_BT_DISCONNECTED         0x03  /**BT3.0 连接断开*/
+#define HCI_EVENT_BLE_DISCONNECTED        0x05  /**BLE 连接断开*/
+#define HCI_EVENT_CMD_COMPLETE            0x06  /**命令已完�?*/
+#define HCI_EVENT_SPP_DATA_RECEIVED       0x07  /**接收�? BT3.0 数据（SPP�?*/
+#define HCI_EVENT_BLE_DATA_RECEIVED       0x08  /**接收�? BLE 数据*/
+#define HCI_EVENT_I_AM_READY              0x09  /**模块准备�?*/
+#define HCI_EVENT_STAUS_RESPONSE          0x0A  /**状�?�回�?*/
+#define HCI_EVENT_NVRAM_CHANGED           0x0D  /**上传 NVRAM 数据*/
+#define HCI_EVENT_GKEY                    0x0E  /**HCI 包格式错�?*/
+#define HCI_EVENT_UART_EXCEPTION          0x0F  /*cmd format error*/
+#define HCI_EVENT_GET_PASSKEY             0x10  /**PASSKEY 配对方式中�?�知MCU 返回密钥,MCU收到此事件后�?发�?�HCI_CMD_PASSKEY_ENTRY指令回复蓝牙模块*/
+#define HCI_EVENT_PAIRING_COMPLETED       0x11  /**配对完成的事件，通知 MCU配对完成*/
+#define HCI_EVENT_LE_PAIRING_STATE        0x14  /**上报配对状�??*/
+#define	HCI_EVENT_UUID_HANDLE             0x29
+#define HCI_EVENT_BNEP_CONNECT            0x2c  /**通知MCU BNEP连接成功*/
+#define HCI_EVENT_BNEP_DISCONNECT         0x2d  /**通知MCU BNEP断开连接*/
+#define HCI_EVENT_BNEP_CONNECT_FAIL       0x2e  /**通知MCU BNEP连接失败原因*/
+#define HCI_EVENT_TCP_CONNECT             0x2f /**通知MCU TCP连接成功*/
+#define HCI_EVENT_TCP_DISCONNECT          0x30 /**通知MCU TCP断开连接*/
+#define HCI_EVENT_BNEP_RECEIVE_TCP_DATA   0x31  /*接收到TCP数据*/
+#define HCI_EVNET_TCP_FAIL                0x32  /*TCP连接或�?�断�?失败*/
+#define HCI_EVENT_TCP_CONNECT_LOG         0x33  /*TCP连接LOG*/
+#define HCI_EVENT_BNEP_CHIP_ERROR         0x34  /*芯片不支持BNEP*/
+#define HCI_EVENT_DNS_RSP                 0x35  /*DNS返回的ip地址*/
+#define HCI_EVENT_BB_DISCONNECT           0x36  /*经典蓝牙baseband断开后返回的事件*/
+#define HCI_EVENT_BT_NAME                 0x37  /*BT master name*/
+#define HCI_EVENT_UDP_INFO                0x38  /*UDP信息�?,包含远端IP、本地IP、远端端口�?�本地端�?,后面会紧随一包UDP数据*/
+#define HCI_EVENT_BNEP_RECEIVE_UDP_DATA   0x39  /*接收到UDP数据*/
+#define HCI_EVENT_BIG_DATA_FINISH         0x3a  /*大数据分包发送完成事�?*/
+#define HCI_EVENT_BIG_DATA_STATUS         0x3b  /*大数据分包发送状�?*/
+
+
+/**
+  * @brief  event code enum definition
+  */
+typedef enum
+{
+	BT_CONNECTED        		=HCI_EVENT_BT_CONNECTED,
+	BLE_CONNECTED       		=HCI_EVENT_BLE_CONNECTED,
+	BT_DISCONNECTED     		=HCI_EVENT_BT_DISCONNECTED,
+	BLE_DISCONNECTED    		=HCI_EVENT_BLE_DISCONNECTED,
+	BT_DATA             		=HCI_EVENT_SPP_DATA_RECEIVED,
+	BLE_DATA            		=HCI_EVENT_BLE_DATA_RECEIVED,
+	NVRAM_DATA          		=HCI_EVENT_NVRAM_CHANGED,
+	CONFIRM_GKEY        		=HCI_EVENT_GKEY,
+	PASSKEY             		=HCI_EVENT_GET_PASSKEY,
+	PAIRING_COMPLETED   		=HCI_EVENT_PAIRING_COMPLETED,
+	PAIRING_STATE        		=HCI_EVENT_LE_PAIRING_STATE,
+	BNEP_CONNECT        		=HCI_EVENT_BNEP_CONNECT,
+	TCP_CONNECT         		=HCI_EVENT_TCP_CONNECT,
+	BNEP_RECEIVE_TCP_DATA		=HCI_EVENT_BNEP_RECEIVE_TCP_DATA,
+	TCP_DISCONNECT       		=HCI_EVENT_TCP_DISCONNECT,
+	BNEP_DISCONNECT      		=HCI_EVENT_BNEP_DISCONNECT,
+	BNEP_CONNECT_FAIL    		=HCI_EVENT_BNEP_CONNECT_FAIL,
+	TCP_FAIL             		=HCI_EVNET_TCP_FAIL,
+	TCP_CONNECT_LOG      		=HCI_EVENT_TCP_CONNECT_LOG,
+	BNEP_CHIP_ERROR      		=HCI_EVENT_BNEP_CHIP_ERROR,
+	DNS_RSP              		=HCI_EVENT_DNS_RSP,
+	BB_DISCONNECT        		=HCI_EVENT_BB_DISCONNECT,
+	BT_NAME              		=HCI_EVENT_BT_NAME,
+	UDP_INFO             		=HCI_EVENT_UDP_INFO,
+	BNEP_RECEIVE_UDP_DATA		=HCI_EVENT_BNEP_RECEIVE_UDP_DATA
+
+}BT_EventCodeEnum;
+
+
+
+typedef struct
+{
+	uint8_t* pBuf;
+    	int BufSize;
+    	int count;		 /*!< count of valid data */
+    	int ReadIndex;
+    	int WriteIndex;
+} BT_BufTypeDef;
+
+/**
+  * @brief   Set the address of the bluetooth 3.0 device
+  * @param  bt_addr: pointer to  address(6 bytes)
+  * @retval TRUE:set addr success.
+  *         FALSE:set addr failed
+  */
+Boolean BT_SetBtAddr(uint8_t * bt_addr);
+
+
+/**
+  * @brief  Set the address of the bluetooth 4.0 device
+  * @param  bt_addr: pointer to  address(6 bytes)
+  * @retval TRUE:set addr success.
+  *         FALSE:set addr failed
+  */
+Boolean BT_SetBleAddr(uint8_t * bt_addr);
+
+
+/**
+  * @brief   Set the name of the bluetooth 3.0 device
+  * @param  bt_addr: pointer to  address information.
+  *         name_len: name length,not include '\0'
+  * @retval TRUE:set name success.
+  *         FALSE:set name failed
+  */
+Boolean BT_SetBtName(uint8_t * bt_name, uint16_t name_len);
+
+
+/**
+  * @brief   Set the name of the bluetooth 4.0 device
+  * @param  ble_name: pointer to  name information.
+  *         name_len: name length,not include '\0'
+  * @retval TRUE:set name success.
+  *         FALSE:set name failed
+  */
+Boolean BT_SetBleName(uint8_t* ble_name, uint16_t name_len);
+
+
+/**
+  * @brief  Set visibility mode.
+  * @param  bt_discoverable: 0--bt_discoverable OFF;1--bt_discoverable ON.
+  *         bt_connectability:0--bt_connectability OFF;1--bt_connectability ON.
+  *         ble_discoverable:0--ble_discoverable OFF;1--ble_discoverable ON.
+  * @retval TRUE:set visibility success.
+  *         FALSE:set visibility failed
+  */
+Boolean BT_SetVisibility(Boolean bt_discoverable, Boolean bt_connectability, Boolean ble_discoverable);
+
+
+/**
+  * @brief  Bt send spp(bt3.0) data
+  * @param  spp_data: pointer to  spp data
+  *         len: spp data length(max len is 255)
+  * @retval TRUE:send spp data success.
+  *         FALSE:send spp data failed
+  */
+Boolean BT_SendSppData(uint8_t * spp_data, uint16_t len);
+
+
+/**
+  * @brief  Send ble data
+  * @param  ble_data: pointer to  ble data ,includes two bytes handle(byte0-byte1 is ble handle).
+  *         len: data length(max len is 255)
+  * @retval TRUE:send ble data success.
+  *         FALSE:send ble data failed
+  */
+  Boolean BT_SendBleData(uint8_t * ble_data, uint16_t len);
+
+
+/**
+  * @brief  get bluetooth connect status
+  * @param  None
+  * @retval bit0:BT 3.0 Can be discover
+  *         bit1:BT 3.0 Can be connected
+  *         bit2:BT 4.0 Can be discover and connected
+  *         bit4:BT 3.0 connected
+  *         bit5:BT 4.0 connected
+  *         bit7:get status timer out
+  */
+uint8_t Bt_GetBtStatus(void);
+
+
+
+/**
+  * @brief  set classic bluetooth paring mode
+  * @param  mode:the paramater can be one of the following value
+                0x00:pincode
+                0x01:just work
+                0x02:passkey
+                0x03:confirm
+  * @retval	   ture or FALSE
+  */
+  Boolean BT_SetParingMode(uint8_t mode);
+
+
+
+/**
+  * @brief  set classic bluetooth paring PIN code
+  * @param  Pincode:the pointer ponint to pincode data
+            len: normally the value can be 0x01~0x10,
+  * @retval	   ture or FALSE
+  */
+Boolean BT_SetPincode(uint8_t* Pincode,uint8_t len);
+
+
+
+/**
+  * @brief  get the bluetooth module firmware version number
+  * @param  none
+  * @retval firmware version number(the value is 1~65535),0 is fail
+  *
+  */
+uint32_t BT_GetVersion(void);
+
+
+/**
+  * @brief  bt disconnect
+  * @param  none
+  * @retval TRUE:bt disconnected success.
+  *         FALSE:bt disconnected failed
+  */
+Boolean BT_BtDisconnect(void);
+
+/**
+  * @brief  Set NVRAM
+  * @param  NvData:the pointer point to NVRAMData
+	* 				len:bnep is 34(one group),other is 170(5*34=170 five group).
+  * @retval TRUE:bt disconnected success.
+  *         FALSE:bt disconnected failed
+  */
+Boolean BT_SetNVRAM(uint8_t * NvData,int len);
+
+
+/**
+  * @brief  Bt Enter Sleep mode
+  * @param  none
+  * @retval TRUE:enter sleep mode success
+  *
+  */
+Boolean BT_EnterSleepMode(void);
+
+
+
+/**
+  * @brief  Numeric Comparison key matching in paring mode
+  * @param  mismatching:the paramater can be the follwing value
+                        0x00: key match
+                        0x01: key mismatch
+  * @retval TRUE:set ConfirmGkey success
+  *         FALSE:set ConfirmGkey failed
+ */
+Boolean BT_ConfirmGkey(uint8_t isMatching);
+
+
+/**
+  * @brief  set spp flow control
+  * @param  packetNum:the flow control packet number
+  * @retval TRUE:success
+  *         FALSE:failed
+ */
+Boolean BT_SetSppFlowcontrol(uint8_t packetNum);
+
+
+/**
+  * @brief  Comparison of keys in  PASSKEY paring
+  * @param  key_data: point to key data,length is 4 bytes,(data in hexadecimal form,
+  *                   starting with high bytes;for example ,218372(10) = 0x35504 ->key_data[]={0x00,0x03,0x55,0x04})
+  * @retval TRUE:set passkey success
+  *         FALSE:set passkey  failed
+  */
+Boolean BT_PasskeyEntry(uint8_t *key_data);
+
+/**
+  * @brief  Set ble paring mode
+  * @param  mode: the paramater can be the follwing value
+  *               0x00:none
+  *               0x01:just work
+  *               0x02:pass key
+  *               0x81:secure connect just work
+  *               0x82:secure connect numeric
+  *               0x83:secure connect pass key
+  * @retval TRUE:set ble paring success
+  *         FALSE:set ble paring  failed
+  */
+Boolean BT_SetLEParing(uint8_t mode);
+
+/**
+  * @brief    Send ble adv data
+  * @param    adv_data: pointer to adv data.
+	*  					DataLen: data length(must be 0x1f)
+  * @retval	  TRUE:set ble adv  data success.
+  *           FALSE:set ble adv data failed
+  */
+Boolean BT_SetLEAdvData(uint8_t*  adv_data, int DataLen);
+
+
+/**
+  * @brief  set ble scan data
+  * @param  scan_data: pointer to  scan data.
+  *         DataLen: data length(length < 0x20)
+  * @retval TRUE:set ble scan  data success.
+  *         FALSE:set ble scan data failed
+  */
+Boolean BT_SetLEScanData(uint8_t* scan_data, int DataLen);
+
+/**
+  * @brief  ble send update ble connect parameter data
+  * @param  data:
+  *             byte0-byte1:min connect interval
+  *             byte2-byte3:max connect interval
+  *             byte4-byte5:Slave  latency
+  *             byte6-byte7:Connection Supervision Timeout
+  *         len:len must be 8
+  * @retval TRUE:success.
+  *         FALSE:failed
+  */
+Boolean BT_SetLESendConnUpdate(uint8_t *data,int len);
+
+
+/**
+  * @brief  Set ble adv parm
+  * @param  data: pointer to  adv parmdata.
+  *         DataLen: data length(len must be 2)
+  * @retval TRUE:set ble adv parm success.
+  *         FALSE:set ble adv parm failed
+  */
+Boolean BT_SetLEAdvParm(uint8_t*data,int DataLen);
+
+/**
+  * @brief  Set reject just work
+  * @param  justwork:
+  *                 0:turn off reject just work
+  *                 1:turn on reject just work
+  * @retval TRUE:set ble scan  data success.
+  *         FALSE:set ble scan data failed
+  */
+Boolean BT_RejectJustWork(uint8_t justwork);
+
+
+/**
+  * @brief  Set fixed passkey
+  * @param  key: pointer to key data ,key length is 5 bytes
+  * @retval TRUE:set fixed passkey  success.
+  *         FALSE:set ble fixed passkey failed
+  */
+Boolean BT_Set_FixedPasskey(uint8_t* key);
+
+
+/**
+  * @brief  ble disconnect
+  * @param  none
+  * @retval TRUE:ble disconnected success.
+  *         FALSE:ble disconnected failed
+  */
+Boolean BT_BleDisconnect(void);
+
+
+/**
+  * @brief  Set spp(bt3.0) class of device
+  * @param  bt_cod:cod buf(must be 3 byte)
+  * @retval TRUE:success.
+  *         FALSE:failed
+  */
+Boolean BT_SetCOD(uint8_t* bt_cod);
+
+
+
+
+/**
+  * @brief  Set RF tx power
+  * @param  power: 0:0db
+  *                1:3db
+  *                2:5db
+  *                3:-3db
+  *                4:-5db
+  * @retval TRUE:set SetTxPower  success.
+  *         FALSE:set SetTxPower failed
+  */
+Boolean BT_SetTxPower(uint8_t power);
+
+
+/**
+  * @brief  Delete ble custom Service
+  * @param  none
+  * @retval TRUE:success.
+  *         FALSE:failed
+  */
+Boolean BT_DeleteService(void);
+
+
+/**
+  * @brief  add ble custom Service
+  * @param  ble_service_uuid:
+	*														byte0: uuid length(2 or 16)
+	*														byte1-2(16): uuid
+	*					service_uuid_len: sizeof(ble_service_uuid)
+  * @retval 0:failed
+  *         other:Service handle
+  */
+uint16_t BT_AddBleService(uint8_t* ble_service_uuid, uint16_t service_uuid_len);
+
+
+/**
+  * @brief  add ble custom Characteristic
+  * @param  ble_Characteristic_uuid:
+	*														byte0: characterisitic attribute
+	*																	bit0		Broadcast
+	*																	bit1		Read
+	*																	bit2		Write without Response
+	*																	bit3		Write
+	*																	bit4		Notify
+	*																	bit5		Indicate
+	*																	bit6		Authentication Signed Write
+	*																	bit7		Extended Properties
+	*														byte1:			characterisitic uuid length(2 or 16)
+	*														byte2-3(17):characterisitic uuid
+	*														byte4(18):	write/read payload length(1--20;default:1)
+	*														byte5(19)-x:write/read payload(default:00)
+	*					service_Characteristic_payload_len: sizeof(ble_Characteristic_uuid)
+  * @retval 0:failed
+  *         other:Characteristic handle
+  */
+uint16_t BT_AddBleCharacteristic(uint8_t* ble_Characteristic_uuid, uint16_t service_Characteristic_payload_len);
+
+/**
+  * @brief   parse bluetooth module data packet according to yichip HCI protocol from ipc buf,you shoud call it at BT_UART IRQHandler function
+  * @param  Unone
+  *
+  * @retval none
+  */
+void BT_ParseBTData(void);
+
+
+
+
+/**
+  * @brief   Handling user events about bluetooth module,This is not an interrupt function,A circular call is required to detect bluetooth data
+  *
+  * @param  none
+  *
+  * @retval none
+  */
+void BT_Progress(void);
+
+
+/**
+  * @brief  BT Init
+  * @param  none
+  * @retval TRUE:success
+  *         FALSE:fail
+  */
+Boolean BT_Init(uint8_t * rxbuf, uint16_t rxlen);
+
+
+
+/**
+  * @brief  DNS(domain name resolution)
+  * @param  dns_data: pointer to  domain name(www.baidu.com).
+            DataLen: data length(max 62 bytes)
+  * @retval TRUE:success
+  *         FALSE:fail
+  */
+Boolean BT_DnsReq( uint8_t *dns_data,int len);
+/**
+  * @brief  Connect Bnep
+  * @param   *phone_mac_addr: pointer to phone_mac_addr.
+	           Byte0~Byte5   The MAC address you want to connect to your phone
+						 Byte6~Byte21  Link key
+						 (phone MAC and Link key from NVRAM event,all zero is connect last pair phone)
+             len: data length(must be 22 byte)
+  * @retval TRUE:success
+  *         FALSE:fail
+  */
+Boolean BT_ConnectBnep( uint8_t *phone_mac_addr,int len);
+
+/**
+  * @brief  disconnect Bnep
+  * @param   none
+  * @retval TRUE:success
+  *         FALSE:fail
+  */
+Boolean BT_disconnectBnep(void);
+
+
+
+/**
+  * @brief  Connect Tcp
+  * @param  tcp_ip_addr: pointer to  tcp_ip_addr.
+	          Byte0  TCP connect handle(0x00 or 0x01)
+						Byte1~Byte4  IP address(192.168.1.1 is c0 a8 01 01)
+						Byte5~Byte6  port number(8888 is 22 b8)
+            len: data length(must be 7 byte)
+  * @retval TRUE:success
+  *         FALSE:fail
+  */
+Boolean BT_ConnectTcp( uint8_t *tcp_ip_addr,int len);
+
+
+
+/**
+  * @brief  Send  TcpData
+  * @param  tcpdata: pointer to  tcpdata.
+	          Byte0  TCP handle
+						Byte1~ByteN  The TCP data need to send(max 235 bytes)
+            len: data length(max value 1+235)
+  * @retval TRUE:success
+  *         FALSE:fail
+  */
+Boolean BT_BnepSendTcpData( uint8_t *tcpdata,int len);
+
+
+/**
+  * @brief  Send  Tcp big packet Data
+  * @param  tcpdata: pointer to  tcpdata.
+	          Byte0  TCP handle
+						Byte1~ByteN  The TCP data need to send(max 1460 bytes)
+            len: data length(max value 1+1460)
+  * @retval TRUE:success
+  *         FALSE:fail
+  */
+Boolean BT_BnepSendTcpBigData( uint8_t *tcpdata,int len);
+
+
+/**
+  * @brief  Send  UDP Data
+  * @param  tcpdata: pointer to  udpdata.
+	          Byte0~Byte3  UDP remote IP(192.168.1.1 is c0 a8 01 01)
+						Byte4~Byte5  UDP local port(8888 is 22 b8)
+						Byte6~Byte7  UDP remote port(12345 is 30 39)
+						Byte8~ByteN  The UDP data need to send(max 247 bytes)
+            len: data length(max value 255)
+  * @retval TRUE:success
+  *         FALSE:fail
+  */
+Boolean BT_BnepSendUdpData( uint8_t *udpdata,int len);
+
+
+
+/**
+  * @brief  Disconnect  Tcp
+  * @param  tcp_handle: the want to disconnect TCP handle(0x00 or 0x01)
+  * @retval TRUE:success
+  *         FALSE:fail
+  */
+Boolean BT_DisconnectTcp(uint8_t tcp_handle);
+
+
+
+
+extern uint8_t prt_get_bt_type(void);
+
+extern uint32_t prt_get_bt_data(void * buf, int len);
+
+extern uint8_t prt_get_bt_connection_status(void);
+
+#endif
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_bt.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_bt.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_bt.c	(working copy)
@@ -0,0 +1,1408 @@
+#include "yc_bt.h"
+#include "yc_systick.h"
+#include "yc_timer.h"
+#include "yc_ipc.h"
+
+#define BT_LOG	0
+#define IO_DEBUG 0
+
+static tick StartTick;
+static uint32_t HCI_CMD_BIT_FLAG[2]={0};
+#define BTTIMEOUT 500
+
+static uint8_t CmdRepData[5];
+
+static uint8_t bt_con_type = 0;
+static uint8_t bt_con_sta  = 0;
+
+
+extern uint8_t prt_get_bt_connection_status(void)
+{
+    return bt_con_sta;
+}
+extern uint8_t prt_get_bt_type(void)
+{
+    return bt_con_type;
+}
+
+
+extern IPC_TypeDef *IpcTx; 
+extern IPC_TypeDef *IpcRx;
+
+
+HCI_TypeDef hci_recappdata[HCI_BT_NUM];
+uint8_t hci_btble_data[HCI_BT_NUM][HCT_DATA_LEN];
+uint8_t hci_buf_write_index = 0;
+uint8_t hci_buf_read_index = 0;
+
+HCI_TypeDef hci_rec_state_event;
+uint8_t hci_rec_state[HCT_STATE_LEN];
+
+extern uint8_t bt2m0buf_full_flag;
+
+void BT_BIT_SET(uint32_t* a,int b)
+{
+	if(b<32)
+	{
+		a[0] |= (1<<b);
+	}
+	else
+	{
+		a[1] |= (1<<(b-32));
+	}
+}
+
+void BT_BIT_CLEAR(uint32_t* a,int b)
+{
+	if(b<32)
+	{
+		a[0] &= ~(1<<b);
+	}
+	else
+	{
+		a[1] &= ~(1<<(b-32));
+	}
+}
+
+Boolean BT_BIT_GET(uint32_t* a,int b)
+{
+	if(b<32)
+	{
+		return (Boolean)((a[0]&(1<<b))>>b);
+	}
+	else
+	{
+		return (Boolean)((a[1]&(1<<(b-32)))>>(b-32));
+	}
+}
+
+//#define PrintLog
+#define DOMAIN_MAX_LEN	62
+Boolean BNEP_DomainConvert(unsigned char * domainString, unsigned char domainStringLen, unsigned char *newDomainString,int* newDomainStringIndex)
+{
+	#ifdef PrintLog
+	MyPrintf("input domain:%s \n", domainString);
+	#endif
+	unsigned char domainCount = 0;
+	*newDomainStringIndex = 1;
+	int newDomainDelimiterIndex = 0;
+	#ifdef PrintLog
+	MyPrintf("domain hex:\n");
+	for (int i = 0; i < domainStringLen; i++)
+	{
+		MyPrintf("%02X ", domainString[i]);
+	}
+	MyPrintf("\n");
+	#endif
+	while(domainStringLen--)
+	{
+		domainCount++;
+		if (*domainString == '.')
+		{
+			newDomainString[newDomainDelimiterIndex] = domainCount-1;
+			newDomainDelimiterIndex = *newDomainStringIndex;
+			(*newDomainStringIndex)++;
+			if((*newDomainStringIndex)>=DOMAIN_MAX_LEN)	return FALSE;
+			domainCount = 0;
+		}
+		else
+		{
+			newDomainString[(*newDomainStringIndex)++] = *domainString;
+			if((*newDomainStringIndex)>=DOMAIN_MAX_LEN)	return FALSE;
+		}
+		domainString++;
+	}
+	newDomainString[newDomainDelimiterIndex] = domainCount;
+	newDomainString[(*newDomainStringIndex)++] = 00;
+	if((*newDomainStringIndex)>=DOMAIN_MAX_LEN)	return FALSE;
+	#ifdef PrintLog
+	MyPrintf("format Domain:\n");
+	for (int  i = 0; i < *newDomainStringIndex; i++)
+	{
+	MyPrintf("%02X ", newDomainString[i]);
+	}
+	MyPrintf("\n");
+	#endif
+	return TRUE;
+}
+
+
+Boolean BT_Init(uint8_t * rxbuf, uint16_t rxlen)
+{
+	HCI_CMD_BIT_FLAG[0]=0;//全局变量问题优化
+	HCI_CMD_BIT_FLAG[1]=0;
+	StartTick=0;
+	int i;
+	for(i=0;i<5;i++)	CmdRepData[i]=0;
+    
+    //save app data buf
+	for (i=0;i<HCI_BT_NUM;i++)
+    {
+        hci_recappdata[i].p_data =  &hci_btble_data[i][0]; 
+    }
+    
+    //save bt report state
+    hci_rec_state_event.p_data = hci_rec_state;
+	IpcInit();
+	return TRUE;
+}
+
+static Boolean  SendCMD(HCI_TypeDef* msg)
+{
+	if((msg->DataLen+3) > IPC_get_available_size())
+	{
+		#if BT_LOG
+		MyPrintf("IPC BT Tx FULL\n");
+		#endif
+		return FALSE;
+	}
+	msg->type=HCI_CMD;
+#if BT_LOG	
+	MyPrintf("Print Send Data Pack:\n");
+	PrintHCIPack(msg, "Send");//打印发�?�包
+#endif
+	IPC_TxData(msg);
+return TRUE;
+}
+Boolean BT_SetBtAddr(uint8_t *bt_addr)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SET_BT_ADDR;
+	msg.DataLen = 6;
+	msg.p_data = bt_addr;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_BT_ADDR);
+  SendCMD(&msg);
+  StartTick=SysTick_GetTick();
+  do
+  {
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_BT_ADDR))
+		{
+			return TRUE;
+		}
+  }while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms
+	return FALSE;
+}
+
+
+Boolean BT_SetBleAddr(uint8_t * bt_addr)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SET_BLE_ADDR;
+	msg.DataLen = 6;
+	msg.p_data = bt_addr;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_BLE_ADDR);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_BLE_ADDR))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms    
+	return FALSE;
+}
+
+Boolean BT_SetVisibility(Boolean bt_discoverable, Boolean bt_connectability, Boolean ble_discoverable)
+{
+	HCI_TypeDef msg;
+	uint8_t visibility_data = 0;
+	if (bt_discoverable == 1)
+		visibility_data = visibility_data | 0x01;
+	if (bt_connectability == 1)
+		visibility_data = visibility_data | 0x02;
+	if (ble_discoverable == 1)
+		visibility_data = visibility_data | 0x04;
+
+	msg.opcode = HCI_CMD_SET_VISIBILITY;
+	msg.DataLen = 0x01;
+	msg.p_data = &visibility_data;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_VISIBILITY);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_VISIBILITY))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));   
+	return FALSE;
+}
+
+Boolean BT_SetBtName(uint8_t * bt_name, uint16_t name_len)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SET_BT_NAME;
+	msg.DataLen = name_len;
+	msg.p_data  = bt_name;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_BT_NAME);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_BT_NAME))
+		{
+    		return TRUE;
+		}
+  }  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT)); 
+	return FALSE;
+}
+
+
+Boolean BT_SetBleName(uint8_t* ble_name, uint16_t name_len)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SET_BLE_NAME;
+	msg.DataLen = name_len;
+	msg.p_data  = ble_name;        
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_BLE_NAME);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_BLE_NAME))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;
+}
+
+
+Boolean BT_SendSppData(uint8_t * spp_data, uint16_t DataLen)
+{
+	if(DataLen==0||DataLen>MAX_BLUETOOTH_DATA_LEN)	return FALSE;
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SEND_SPP_DATA;
+	msg.DataLen = DataLen;
+	msg.p_data = spp_data;	
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SEND_SPP_DATA);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SEND_SPP_DATA))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;
+}
+
+Boolean BT_SendBleData(uint8_t * ble_data, uint16_t DataLen)
+{
+	if(DataLen<2||DataLen>MAX_BLUETOOTH_DATA_LEN)	return FALSE;
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SEND_BLE_DATA;
+	msg.DataLen = DataLen;
+
+	msg.p_data = ble_data;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SEND_BLE_DATA);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SEND_BLE_DATA))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
+	return FALSE;
+}
+
+
+uint8_t Bt_GetBtStatus(void)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_STATUS_REQUEST;
+	msg.DataLen = 0;
+	msg.p_data=NULL;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_STATUS_REQUEST);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_STATUS_REQUEST))
+		{
+			return CmdRepData[0];
+		}
+	} while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));//ms
+  return 0x80;
+}
+
+Boolean BT_SetParingMode(uint8_t mode)
+{
+	uint8_t tmode = mode ;
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SET_PAIRING_MODE;
+	msg.DataLen = 1;
+	msg.p_data = &tmode;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_PAIRING_MODE);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_PAIRING_MODE))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));	
+	return FALSE;
+}
+
+Boolean BT_SetPincode(uint8_t* Pincode,uint8_t DataLen)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SET_PINCODE;
+	msg.DataLen = DataLen;
+	msg.p_data = Pincode;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_PINCODE);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_PINCODE))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;
+}
+
+
+
+Boolean BT_BtDisconnect(void)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_BT_DISCONNECT;
+	msg.DataLen = 0;
+	msg.p_data = NULL;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_BT_DISCONNECT);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_BT_DISCONNECT))
+		{
+			return TRUE;
+		}
+	}while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
+	return FALSE;
+}
+
+uint32_t BT_GetVersion(void)
+{
+	HCI_TypeDef msg;
+	uint32_t TempVersion=0;
+	msg.opcode = HCI_CMD_VERSION_REQUEST;
+	msg.DataLen = 0;
+	msg.p_data = NULL;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_GET_VERSION);
+	SendCMD(&msg);	
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_GET_VERSION))
+		{
+			TempVersion=(CmdRepData[0]<<8) |(CmdRepData[1]);
+			return TempVersion;
+		}
+	}while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
+	return 0;
+}
+
+
+Boolean BT_BleDisconnect(void)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_BLE_DISCONNECT;
+	msg.DataLen = 0;
+	msg.p_data = NULL;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_BLE_DISCONNECT);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_BLE_DISCONNECT))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
+	return FALSE;
+}
+
+
+Boolean BT_SetNVRAM(uint8_t * NvData,int len)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SET_NVRAM;
+	msg.DataLen = len;
+	msg.p_data = NvData;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_NVRAM);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_NVRAM))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
+	return FALSE;
+}
+
+
+Boolean BT_EnterSleepMode(void)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_ENTER_SLEEP_MODE;
+	msg.DataLen = 0;
+	msg.p_data = NULL;
+	SendCMD(&msg);
+	return TRUE;
+}
+
+
+Boolean BT_ConfirmGkey(uint8_t isMatching)
+{
+	HCI_TypeDef msg;
+	uint8_t tmismatching = isMatching;
+	msg.opcode = HCI_CMD_CONFIRM_GKEY;
+	msg.DataLen =1;
+	msg.p_data = &tmismatching;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_CONFIRM_GKEY);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_CONFIRM_GKEY))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
+	return FALSE;
+}
+
+Boolean BT_SetSppFlowcontrol(uint8_t packetNum)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_GET_CREADIT_GIVEN;
+	msg.DataLen = 1;
+	uint8_t temp_packetNum=packetNum;
+	msg.p_data = &temp_packetNum;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_GET_CREADIT_GIVEN);
+	SendCMD(&msg);
+	return TRUE;//no event responce
+}
+
+
+Boolean BT_PasskeyEntry(uint8_t *key_data)
+{
+#define PKLEN 0x04
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_PASSKEY_ENTRY;
+	msg.DataLen = PKLEN;
+	msg.p_data = key_data;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_PASSKEY_ENTRY);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_PASSKEY_ENTRY))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));	
+	return FALSE;
+}
+
+Boolean BT_SetLEParing(uint8_t mode)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_LE_SET_PAIRING;
+	msg.DataLen = 1;
+	uint8_t temp_mode=mode;
+	msg.p_data = &temp_mode;		
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_LE_SET_PARING);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_LE_SET_PARING))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));	
+	return FALSE;
+}
+
+Boolean BT_SetLEAdvData(uint8_t* adv_data, int DataLen)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_LE_SET_ADV_DATA;
+	msg.DataLen = DataLen;
+	msg.p_data = adv_data;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_LE_SET_ADV_DATA);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_LE_SET_ADV_DATA))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;     
+}
+
+Boolean BT_SetLEScanData(uint8_t* scan_data, int DataLen)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_LE_SET_SCAN_DATA;
+	msg.DataLen = DataLen;
+	msg.p_data = scan_data;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_LE_SET_SCAN_DATA);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_LE_SET_SCAN_DATA))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;     
+}
+
+Boolean BT_SetLESendConnUpdate(uint8_t *data,int len)
+{
+	if(0x08 != len) 
+		return FALSE;
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_LE_SEND_CONN_UPDATE_REQ;
+	msg.DataLen = len;	
+	msg.p_data = data;	
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_LE_SEND_CONN_UPDATE);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_LE_SEND_CONN_UPDATE))
+		{
+			return TRUE;
+		}
+	} while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;
+}
+
+Boolean BT_SetLEAdvParm(uint8_t*nvdata,int DataLen)//bt code did not exist
+{
+	if(0 == DataLen) 
+		return FALSE;
+    
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_LE_SET_ADV_PARM;
+	msg.DataLen = DataLen;	
+	msg.p_data = nvdata;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_LE_SET_ADV_PARM);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_LE_SET_ADV_PARM))
+		{
+			return TRUE;
+		}
+	} while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;
+}
+
+
+
+Boolean BT_RejectJustWork(uint8_t justwork)
+{
+	uint8_t td = justwork;
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_REJECT_JUSTWORK;
+	msg.DataLen = 0x01;  
+	msg.p_data = &td;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_REJECT_JUSTWORK);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_REJECT_JUSTWORK))
+		{
+			return TRUE;
+		}
+	} while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;
+}
+
+Boolean BT_SetTxPower(uint8_t power)
+{
+	uint8_t tpower = power;	
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SET_TX_POWER;
+	msg.DataLen = 0x01;	
+	msg.p_data = &tpower;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_TXPOWER);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_TXPOWER))
+		{
+			return TRUE;
+		}
+	} while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;
+}
+
+Boolean BT_Set_FixedPasskey(uint8_t* key)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_LE_SET_FIXED_PASSKEY;
+	msg.DataLen = 0x05;	
+	msg.p_data = key;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_LE_SET_FIXED_PASSKEY);
+	SendCMD(&msg);
+  StartTick=SysTick_GetTick();
+  do
+  {
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_LE_SET_FIXED_PASSKEY))
+		{
+			return TRUE;
+		}
+	} while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return FALSE;
+}
+
+Boolean BT_SetCOD(uint8_t * bt_cod)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SET_COD;
+	msg.DataLen = 3;
+	msg.p_data = bt_cod;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_COD);
+	SendCMD(&msg);	
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_COD))
+		{
+			return TRUE;
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms    
+	return FALSE;
+}
+
+
+Boolean BT_DeleteService(void)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_DELETE_CUSTOMIZE_SERVICE;
+	msg.DataLen = 0;
+	msg.p_data = NULL;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_DELETE_SERVICE);
+	SendCMD(&msg);	
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_DELETE_SERVICE))
+		{			
+			return TRUE;
+		}
+	}while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
+	return FALSE;
+}
+
+uint16_t BT_AddBleService(uint8_t* ble_service_uuid, uint16_t service_uuid_len)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_ADD_SERVICE_UUID;
+	msg.DataLen = service_uuid_len;
+	msg.p_data  = ble_service_uuid;        
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_ADD_UUID);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_ADD_UUID))
+		{
+			return (uint16_t)(CmdRepData[0]|(CmdRepData[1]<<8));
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return 0x00;
+}
+
+
+	
+	
+uint16_t BT_AddBleCharacteristic(uint8_t* ble_Characteristic_uuid, uint16_t service_Characteristic_payload_len)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_ADD_CHARACTERISTIC_UUID;
+	msg.DataLen = service_Characteristic_payload_len;
+	msg.p_data  = ble_Characteristic_uuid;        
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_ADD_UUID);
+	SendCMD(&msg);
+	StartTick=SysTick_GetTick();
+	do
+	{
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_ADD_UUID))
+		{
+			return (uint16_t)(CmdRepData[0]|(CmdRepData[1]<<8));
+		}
+	}  while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));
+	return 0x00;
+}
+
+Boolean BT_DnsReq( uint8_t *dns_data,int len)
+{
+	uint8_t format_dns[DOMAIN_MAX_LEN];
+	int format_dns_len;
+	if(TRUE != BNEP_DomainConvert(dns_data,len,format_dns,&format_dns_len))
+	{
+		return FALSE;
+	}
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_DNS_REQ;
+	msg.DataLen = format_dns_len;
+	msg.p_data = format_dns;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_DNS_REQ);
+  SendCMD(&msg);
+  StartTick=SysTick_GetTick();
+  do
+  {
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_DNS_REQ))
+		{
+			return TRUE;
+		}
+  }while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms
+	return FALSE;
+}
+
+Boolean BT_ConnectBnep( uint8_t *phone_mac_addr,int len)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_CONNECT_BNEP;
+	msg.DataLen = len;
+	msg.p_data = phone_mac_addr;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_CONNECT_BNEP);
+  SendCMD(&msg);
+  StartTick=SysTick_GetTick();
+  do
+  {
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_CONNECT_BNEP))
+		{
+			return TRUE;
+		}
+  }while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms
+	return FALSE;
+}
+
+Boolean BT_disconnectBnep()
+{
+	return BT_BtDisconnect();
+}
+
+Boolean BT_ConnectTcp(uint8_t *tcp_ip_addr,int len)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_CONNECT_TCP;
+	msg.DataLen = len;
+	msg.p_data = tcp_ip_addr;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_CONNECT_TCP);
+  SendCMD(&msg);
+  StartTick=SysTick_GetTick();
+  do
+  {
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_CONNECT_TCP))
+		{
+			return TRUE;
+		}
+  }while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms
+	return FALSE;
+}
+
+
+
+Boolean BT_BnepSendTcpData( uint8_t *tcpdata,int len)
+{
+	if((len-1)>MAX_TCP_DATA_LEN)	return FALSE;
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_BNEP_SEND_TCP_DATA;
+	msg.DataLen = len;
+	msg.p_data = tcpdata;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_DATA);
+  SendCMD(&msg);
+  StartTick=SysTick_GetTick();
+  do
+  {
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_DATA))
+		{
+			return TRUE;
+		}
+  }while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms
+	return FALSE;
+}
+
+#define BIG_DATA_HEAD_LEN	5
+Boolean BT_BnepSendTcpBigData( uint8_t *tcpdata,int len)
+{
+	if((len-1)>MAX_BIG_DATA_LEN)	return FALSE;
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SEND_BIG_DATA;
+	int sendedLen=0;
+	int packetLen;
+	uint8_t firstPacketData[MAX_BLUETOOTH_DATA_LEN];
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA_FINISH);
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA_STATUS);
+	while(sendedLen<(len-1))
+	{
+		if(sendedLen==0)
+		{
+			packetLen=(len-1)>(MAX_BLUETOOTH_DATA_LEN-BIG_DATA_HEAD_LEN)?(MAX_BLUETOOTH_DATA_LEN-BIG_DATA_HEAD_LEN):(len-1);
+			msg.DataLen=packetLen+BIG_DATA_HEAD_LEN;
+			firstPacketData[0]=tcpdata[0];//handle
+			
+			firstPacketData[1]=((len-1)&0xff);
+			firstPacketData[2]=(((len-1)>>8)&0xff);//big packet len
+			
+			firstPacketData[3]=0;
+			firstPacketData[4]=0;//reserved
+			memcpy((uint8_t*)&firstPacketData[5],(uint8_t*)&tcpdata[1],packetLen);
+			msg.p_data = firstPacketData;
+		}
+		else
+		{
+			packetLen=((len-1)-sendedLen)>MAX_BLUETOOTH_DATA_LEN?MAX_BLUETOOTH_DATA_LEN:((len-1)-sendedLen);
+			msg.DataLen=packetLen;
+			msg.p_data =(uint8_t*)&tcpdata[sendedLen+1];
+		}
+
+		BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA);
+		SendCMD(&msg);
+		StartTick=SysTick_GetTick();
+		while(!BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA))
+		{
+			if(SysTick_IsTimeOut(StartTick,BTTIMEOUT))
+			{
+				return FALSE;
+			}
+		}
+		sendedLen +=packetLen;
+	}
+	//wait big data finish
+	StartTick=SysTick_GetTick();
+	while(!BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA_FINISH))
+	{
+		if(SysTick_IsTimeOut(StartTick,BTTIMEOUT))
+		{
+			return FALSE;
+		}
+	}
+	//wait big data status
+	StartTick=SysTick_GetTick();
+	while(!BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA_STATUS))
+	{
+		if(SysTick_IsTimeOut(StartTick,BTTIMEOUT))
+		{
+			return FALSE;
+		}
+	}
+	return TRUE;
+}
+
+
+Boolean BT_BnepSendUdpData( uint8_t *udpdata,int len)
+{
+	if(len<8||len>MAX_BLUETOOTH_DATA_LEN)	return FALSE;
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_SEND_UDP_DATA;
+	msg.DataLen = len;
+	msg.p_data = udpdata;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_UDP_DATA);
+  SendCMD(&msg);
+  StartTick=SysTick_GetTick();
+  do
+  {
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_UDP_DATA))
+		{
+			return TRUE;
+		}
+  }while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms
+	return FALSE;
+}
+
+
+Boolean BT_DisconnectTcp(uint8_t tcp_handle)
+{
+	HCI_TypeDef msg;
+	msg.opcode = HCI_CMD_DISCONNECT_TCP;
+	msg.DataLen = 1;
+	msg.p_data = &tcp_handle;
+	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_DISCONNECT_TCP);
+  SendCMD(&msg);
+  StartTick=SysTick_GetTick();
+  do
+  {
+		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_DISCONNECT_TCP))
+		{
+			return TRUE;
+		}
+  }while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms
+	return FALSE;
+}
+
+
+extern void prt_yc3121_bt_post_event(uint16_t event);
+extern Boolean prt_is_ble_data(uint16_t handler);
+extern void prt_ble_first_set(Boolean need);
+extern Boolean prt_ble_first_get(void);
+
+void BT_ParseBTData()
+{
+    uint8_t opcode_val = 0;
+    opcode_val = IPC_ReadIPC_Opcode();
+    if ((opcode_val == HCI_EVENT_SPP_DATA_RECEIVED) || (opcode_val == HCI_EVENT_BLE_DATA_RECEIVED))
+    {
+        #if BT_LOG
+        MyPrintf("data1 in\n");
+        #endif
+        #if IO_DEBUG
+        GPIO_CONFIG(5) = 0x3e;
+        #endif
+        IPC_ReadBtData_DMA(&hci_recappdata[hci_buf_write_index]);
+        #if IO_DEBUG
+        GPIO_CONFIG(5) = 0x3f;
+        #endif
+    }
+    else
+    {
+        #if BT_LOG
+        MyPrintf("event\n");
+        #endif
+        if (hci_buf_write_index == 0)
+        {
+            hci_buf_write_index = HCI_BT_NUM-1;
+        }
+        else
+        {
+            hci_buf_write_index--;
+        }
+        IPC_ReadBtData(&hci_rec_state_event);
+        switch (opcode_val)
+        {
+            case HCI_EVENT_BT_CONNECTED:
+                prt_yc3121_bt_post_event(HCI_EVENT_BT_CONNECTED);
+                bt_con_sta = HCI_EVENT_BT_CONNECTED;
+                break;
+            case HCI_EVENT_BLE_CONNECTED:
+                prt_yc3121_bt_post_event(HCI_EVENT_BLE_CONNECTED);
+                bt_con_sta = HCI_EVENT_BLE_CONNECTED;
+                break;
+
+            case HCI_EVENT_BT_DISCONNECTED:
+                prt_yc3121_bt_post_event(HCI_EVENT_BT_DISCONNECTED);
+                bt_con_sta = HCI_EVENT_BT_DISCONNECTED;
+                break;
+            case HCI_EVENT_BLE_DISCONNECTED:                    
+                prt_yc3121_bt_post_event(HCI_EVENT_BLE_DISCONNECTED);
+                prt_ble_first_set(FALSE);
+                bt_con_sta = HCI_EVENT_BLE_DISCONNECTED;
+                break;
+            case HCI_EVENT_GKEY:
+            case HCI_EVENT_NVRAM_CHANGED:
+            case HCI_EVENT_GET_PASSKEY:
+            case HCI_EVENT_PAIRING_COMPLETED:
+            case HCI_EVENT_LE_PAIRING_STATE:
+            case HCI_EVENT_BNEP_CONNECT:
+            case HCI_EVENT_BNEP_DISCONNECT:
+            case HCI_EVENT_BNEP_CONNECT_FAIL:
+            case HCI_EVENT_TCP_CONNECT:
+            case HCI_EVENT_TCP_DISCONNECT:
+            case HCI_EVNET_TCP_FAIL:
+            case HCI_EVENT_TCP_CONNECT_LOG:
+            case HCI_EVENT_BNEP_CHIP_ERROR:
+            case HCI_EVENT_DNS_RSP:
+            case HCI_EVENT_BB_DISCONNECT:
+            case HCI_EVENT_BT_NAME:
+            case HCI_EVENT_UDP_INFO:
+                //save hci_rec_state_event package is ok
+                break;
+
+            case HCI_EVENT_CMD_COMPLETE:
+
+                switch(hci_rec_state_event.p_data[0])
+                {
+                    case HCI_CMD_SET_BT_ADDR:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BT_ADDR);
+                        }
+                        break;
+
+                    case HCI_CMD_SET_BLE_ADDR:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BLE_ADDR);
+                        }
+                        break;
+
+                    case HCI_CMD_SET_VISIBILITY:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_VISIBILITY);
+                        }
+                        break;
+
+                    case HCI_CMD_SET_BT_NAME:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BT_NAME);
+                        }
+                        break;
+                    case HCI_CMD_SET_BLE_NAME:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BLE_NAME);
+                        }
+                        break;
+
+                    case HCI_CMD_SEND_SPP_DATA:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SEND_SPP_DATA);
+                        }
+                        break;
+
+                    case HCI_CMD_SEND_BLE_DATA:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SEND_BLE_DATA);
+                        }
+                        break;
+
+                    case HCI_CMD_SET_PAIRING_MODE:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_PAIRING_MODE);
+                        }
+                        break;
+
+                    case HCI_CMD_SET_PINCODE:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_PINCODE);
+                        }
+                        break;
+                        
+                    case HCI_CMD_VERSION_REQUEST:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_GET_VERSION);
+                            CmdRepData[0] = hci_rec_state_event.p_data[2];
+                            CmdRepData[1] = hci_rec_state_event.p_data[3];
+                        }
+                        break;
+
+                    case HCI_CMD_LE_SET_PAIRING:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_PARING);
+                        }
+                        break;
+
+                    case HCI_CMD_BT_DISCONNECT:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BT_DISCONNECT);
+                        }
+                        break;
+
+                    case HCI_CMD_BLE_DISCONNECT:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BLE_DISCONNECT);
+                        }
+                        break;
+                    case HCI_CMD_SET_NVRAM:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_NVRAM);
+                        }
+                        break;
+
+                    case HCI_CMD_CONFIRM_GKEY:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_CONFIRM_GKEY);
+                        }
+                        break;
+
+                    case HCI_CMD_SET_LPM_MODE:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_LPM_MODE);
+                        }
+                        break;
+
+                    case HCI_CMD_PASSKEY_ENTRY:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_PASSKEY_ENTRY);
+                        }
+                        break;
+
+                    case HCI_CMD_LE_SET_ADV_DATA:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_ADV_DATA);
+                        }
+                    break;
+
+                    case HCI_CMD_LE_SET_SCAN_DATA:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_SCAN_DATA);
+                        }
+                    break;
+                    
+                    case HCI_CMD_LE_SEND_CONN_UPDATE_REQ:
+                        if(!hci_rec_state_event.p_data[1])
+                        {
+                            BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SEND_CONN_UPDATE);
+                        }
+                    break;
+                    case HCI_CMD_LE_SET_ADV_PARM:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_ADV_PARM);
+                    }							
+                    break;
+                    
+                    case HCI_CMD_SET_TX_POWER:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_TXPOWER);
+                    }							
+                    break;
+                    
+                    case HCI_CMD_REJECT_JUSTWORK:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_REJECT_JUSTWORK);
+                    }								
+                    break;
+                    
+                    case HCI_CMD_SET_COD:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_COD);
+                    }
+                    break;
+                                            
+                    case HCI_CMD_DELETE_CUSTOMIZE_SERVICE:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_DELETE_SERVICE);
+                    }
+                    break;					
+            
+                    case HCI_CMD_LE_SET_FIXED_PASSKEY:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_FIXED_PASSKEY);
+                    }
+                    break;
+                    
+                    case HCI_CMD_CONNECT_BNEP:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_CONNECT_BNEP);
+                    }
+                    break;
+                    
+                    case HCI_CMD_CONNECT_TCP:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_CONNECT_TCP);
+                    }
+                    break;
+                    
+                    case HCI_CMD_DISCONNECT_TCP:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_DISCONNECT_TCP);
+                    }
+                    break;
+                    
+                    case HCI_CMD_BNEP_SEND_TCP_DATA:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_DATA);
+                    }
+                    break;
+                    
+                    case HCI_CMD_SEND_UDP_DATA:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_UDP_DATA);
+                    }
+                    break;
+                    
+                    case HCI_CMD_SEND_BIG_DATA:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA);
+                    }
+                    break;
+                    
+                    case HCI_CMD_DNS_REQ:
+                    if(!hci_rec_state_event.p_data[1])
+                    {
+                         BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_DNS_REQ);
+                    }
+                    break;
+                    
+                    default:
+                        break;
+                }
+                break;
+
+				case HCI_EVENT_I_AM_READY:
+					BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_MODULE_READY);
+					break;
+
+				case HCI_EVENT_STAUS_RESPONSE:
+					BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_STATUS_REQUEST);
+					CmdRepData[0] = hci_rec_state_event.p_data[0];
+					break;
+				
+				case HCI_EVENT_UUID_HANDLE:
+					BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_ADD_UUID);
+					CmdRepData[0] = hci_rec_state_event.p_data[0];
+					CmdRepData[1] = hci_rec_state_event.p_data[1];
+					break;
+				
+				case HCI_EVENT_BIG_DATA_FINISH:
+					if(hci_rec_state_event.p_data[0]==0x00)
+					{
+						BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA_FINISH);
+					}
+					break;
+				
+				case HCI_EVENT_BIG_DATA_STATUS:
+					if(hci_rec_state_event.p_data[0]==0x03||hci_rec_state_event.p_data[0]==0x04)
+					{
+						BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA_STATUS);
+					}
+					break;
+
+				default:
+                    #if BT_LOG
+                    MyPrintf("bt event err");
+                    #endif
+					break;
+			}
+    }
+    IPC_HOLD_BT = 0;
+    WAKEUP_BT &= ~(1<<WAKEUP_BT_FLAG);
+}
+
+extern Boolean prt_bt_ble_flow_proc(uint8_t package_cnt);
+extern void prt_bt_ble_set_mtu(void);
+
+uint8_t credit_num = 0;
+
+extern uint32_t prt_get_bt_data(void * buf, int len)
+{
+	int eventCmd;
+    int BtDataLen =0;
+    uint16_t handler = 0;
+    uint16_t ret = 0;
+    const uint16_t subscribe = 0x0014;
+    
+    if (hci_buf_write_index == hci_buf_read_index)
+    {
+        if (bt2m0buf_full_flag == 1)
+        {
+            NVIC_EnableIRQ(BT_IRQn);
+            BT_CONFIG |= ((1<<BT_INIT_FLAG));
+        }
+        return -1;
+    }
+    else
+    {
+        hci_buf_read_index++;
+        if (hci_buf_read_index >= HCI_BT_NUM)
+        {
+            hci_buf_read_index = 0;
+        }
+        
+        eventCmd = hci_recappdata[hci_buf_read_index].opcode;
+    }
+	switch(eventCmd)
+	{	
+	case BT_DATA:
+        #if BT_LOG
+        GPIO_CONFIG(10) = 0x3e;
+        #endif
+        credit_num++;
+        if (credit_num >= 2)
+        {
+            #if (MEM_SPP_FLOWCTRL_FLAG_VALUE==0x01)
+            if(BT_SetSppFlowcontrol(2) != TRUE)
+            {
+                MyPrintf("set spp flow failed\n");
+            }
+            #endif
+            #if BT_LOG
+            MyPrintf("BT_DATA\n");
+            #endif
+            
+            credit_num = 0;
+        }
+        #if BT_LOG
+        GPIO_CONFIG(10) = 0x3f;
+        #endif
+        UART_SendBuf(UART0, hci_recappdata[hci_buf_read_index].p_data, hci_recappdata[hci_buf_read_index].DataLen);
+        break;
+
+	case BLE_DATA:
+        ret = hci_recappdata[hci_buf_read_index].p_data[0];
+        handler = hci_recappdata[hci_buf_read_index].p_data[1];
+        handler <<= 8;
+        handler += ret;
+        #if BT_LOG
+        MyPrintf("BLE_DATA\n");
+        #endif
+        UART_SendBuf(UART0, hci_recappdata[hci_buf_read_index].p_data, hci_recappdata[hci_buf_read_index].DataLen);
+
+        if (prt_is_ble_data(handler) == TRUE){
+            prt_bt_ble_flow_proc(1);
+        } else {          
+            if (prt_ble_first_get() == FALSE) {
+                MyPrintf("handler:%x,%d\n", handler, (handler == subscribe));
+                if (handler == subscribe) {
+                    prt_ble_first_set(TRUE);
+                    prt_bt_ble_flow_proc(12);
+                    prt_bt_ble_set_mtu();
+                }
+            }
+            return 0;
+        }
+
+        break;
+    case -1:
+        return 0;
+    default:
+        return 0;
+    }
+    return BtDataLen;
+}
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_chrg.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_chrg.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_chrg.h	(working copy)
@@ -0,0 +1,93 @@
+/*
+File Name  :yc_chrg.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/12
+Description  : Charger  encapsulation.	
+*/
+
+#ifndef __CHARG_H_
+#define __CHARG_H_
+
+#include "yc3121.h"
+#include "yc_lpm.h"
+
+
+/***************Charger CV mode output voltage coarse-tune control in 180mV/steps*/
+/**CHARG_OUT_DEFINE**/
+#define CHARG_OUT_4D19V 0x00
+#define CHARG_OUT_4D36V 0x04
+#define CHARG_OUT_4D54V 0x06
+#define CHARG_OUT_4D74V 0x07
+#define CHARG_OUT_DEFAULT CHARG_OUT_436V
+
+
+/*CHARGE_IND STATE DEFINE*/
+#define CHARGE_IN   1
+#define CHANGE_OUT  0
+
+/*CHARGE WORKING STATE DEFINE*/
+#define CHARG_ACTIVE 0//鍏呯數涓
+#define CHARG_CUTOFF 1 //鏈彃鍏SB
+#define CHARG_INACTIVE 2  //宸插厖婊★紝鍏呯數鎴
+
+
+/****************************
+chgr_rup   chgr_rdn    I_charge
+111        000         94.91mA
+011        000         78.26mA
+001        000         72.47mA
+000        000         69.87mA
+111        100         120.5mA
+111        110         137.4mA
+111        111         147.9mA
+************************************/
+#define CHARG_CURRENT_94mA 	0
+#define CHARG_CURRENT_78mA	1
+#define CHARG_CURRENT_72mA 	2
+#define CHARG_CURRENT_69mA 	3
+#define CHARG_CURRENT_120mA 4
+#define CHARG_CURRENT_137mA 5
+#define CHARG_CURRENT_147mA 6
+
+
+
+#define CHARG_VOL_ADDR		((volatile uint8_t *)( 0xc812c))
+
+
+
+/**
+  * @brief	Config charge voltage output
+  * @param	the para will be macro CHARG_OUT_DEFINE
+  * @retval 	none
+  */
+void CHARGE_VolSel(uint8_t ChargOutVol);
+
+
+/**
+  * @brief	Config charge current
+  * @param	the para will be macro CHARG_OUT_DEFINE
+  * @retval 	none
+  */
+void CHARGE_CurSel(uint8_t ChargCurtSel);
+
+
+
+/**
+  * @brief	Detect charg_in statu
+  * @param	none
+  * @retval 	CHARGE_IN:charg_in high,CHARGE_out,charg_low
+  */
+uint8_t CHARGE_InsertDet(void);
+
+
+
+/**
+  * @brief	Get Chager working status.
+  * @param	none
+  * @retval 	none
+  */
+uint8_t CHARGE_State(void);
+
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_chrg.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_chrg.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_chrg.c	(working copy)
@@ -0,0 +1,106 @@
+#include "yc_chrg.h"
+
+#define CHRG_IND_BIT	28
+#define CHRG_WEAKUP_BIT	30
+
+void CHARGE_VolSel(uint8_t ChargOutVol)
+{
+	uint32_t temp = 0;
+	enable_clock(CLKCLS_BT);
+
+	temp = (*(CHARG_VOL_ADDR+0));
+	temp &= ~(7<<4);
+	temp|=	(ChargOutVol<<4);
+
+	temp |= ((*(CHARG_VOL_ADDR+1) <<8)); delay(10);
+	temp |= (*(CHARG_VOL_ADDR+2)<<16); delay(10);
+	temp |= (*(CHARG_VOL_ADDR+3)<<24);	 delay(10);
+	lpm_bt_write(6,temp);
+
+
+}
+
+void CHARGE_CurSel(uint8_t ChargCurtSel)
+{
+
+	uint32_t temp = 0;
+	uint32_t chgr_rup = 0;
+	uint32_t chgr_rdn = 0;
+	enable_clock(CLKCLS_BT);
+
+	switch(ChargCurtSel)
+	{
+		case CHARG_CURRENT_94mA:
+			chgr_rup = 0x07;
+			chgr_rdn = 0x00;
+		break;
+		case CHARG_CURRENT_78mA:
+			chgr_rup = 0x03;
+			chgr_rdn = 0x00;
+		break;
+		case CHARG_CURRENT_72mA:
+			chgr_rup = 0x01;
+			chgr_rdn = 0x00;
+		break;
+		case CHARG_CURRENT_69mA:
+			chgr_rup = 0x00;
+			chgr_rdn = 0x00;
+		break;
+
+		case CHARG_CURRENT_120mA:
+			chgr_rup = 0x07;
+			chgr_rdn = 0x04;
+		break;
+		case CHARG_CURRENT_137mA:
+			chgr_rup = 0x07;
+			chgr_rdn = 0x06;
+		break;
+
+		case CHARG_CURRENT_147mA:
+			chgr_rup = 0x07;
+			chgr_rdn = 0x07;
+		break;
+	}
+
+	delay(2000);
+
+	temp = (*(CHARG_VOL_ADDR+0));
+
+	temp |= ((*(CHARG_VOL_ADDR+1) <<8)); delay(10);
+	temp |= (*(CHARG_VOL_ADDR+2)<<16); delay(10);
+	temp |= (*(CHARG_VOL_ADDR+3)<<24);	 delay(10);
+
+	temp&=~(0x07<<7);
+	temp|= chgr_rdn<<7;
+
+	temp&=~(0x07<<13);
+	temp|=(chgr_rup<<13);
+
+	lpm_bt_write(6,temp);
+}
+
+
+uint8_t CHARGE_InsertDet(void)
+{
+	if(  (SYSCTRL_STATUS>> 30)&1)
+	{
+		return CHARGE_IN;
+	}
+	else
+	{
+		return CHANGE_OUT;
+	}
+}
+
+
+uint8_t CHARGE_State(void)
+{
+	uint32_t statu = SYSCTRL_STATUS;
+
+	if (!((statu >> CHRG_WEAKUP_BIT) & 0x1))
+		return CHARG_CUTOFF ; //鏈彃鍏SB
+	else if (((statu >> CHRG_IND_BIT) & 0x1) &&((statu >> CHRG_WEAKUP_BIT) & 0x1))
+		return CHARG_ACTIVE; //USB鎻掑叆锛屽厖鐢
+	else if (!((statu >> CHRG_IND_BIT) & 0x1))
+		return CHARG_INACTIVE; //鏈厖鐢
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/Yc_aes.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/Yc_aes.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/Yc_aes.h	(working copy)
@@ -0,0 +1,73 @@
+#ifndef __YC_AES_H__
+#define __YC_AES_H__
+
+#include "yc3121.h"
+#include "yc_crypt.h"
+#include "yc_calc.h"
+
+#define RET_AES_SUCCESS          (('R'<<24)|('A'<<16)|('S'<<8)|('C'))  //鍔犲瘑鎴愬姛
+#define RET_AES_FAILURE          (('R'<<24)|('A'<<16)|('F'<<8)|('A'))  //鍔犲瘑澶辫触
+#define RET_AES_KEY_IS_NULL      (('R'<<24)|('A'<<16)|('K'<<8)|('N'))  //瀵嗛挜涓虹┖
+#define RET_AES_KEY_IS_OK        (('R'<<24)|('A'<<16)|('K'<<8)|('O'))  //瀵嗛挜姝ｇ‘
+#define RET_AES_KEY_SIZE_ERROR   (('R'<<24)|('A'<<16)|('K'<<8)|('S'))  //瀵嗛挜闀垮害閿欒
+#define RET_AES_PACK_MODE_ERROR  (('R'<<24)|('A'<<16)|('P'<<8)|('E'))  //鍒嗙粍妯″紡閿欒
+#define RET_AES_OUTBUF_TOO_SMALL (('R'<<24)|('A'<<16)|('O'<<8)|('S'))  //杈撳嚭缂撳啿鍖轰笉瓒
+#define RET_AES_INPUT_SIZE_ERROR (('R'<<24)|('A'<<16)|('I'<<8)|('S'))  //杈撳叆鏁版嵁闀垮害閿欒
+
+#define AES_IV_SIZE	(16)
+
+typedef enum
+{
+	AES_128	= 128,
+	AES_192 = 192,
+	AES_256 = 256
+}AES_KeySizeTypeDef;
+
+typedef uint8_t AES_IvKeyTypeDef[AES_IV_SIZE];
+
+/**
+  * @method	AES_Enc
+  * @brief	AES encrypt function
+  * @param	pack_mode :block encryption mode ECB or CBC
+  * @param	output    :the pointer of output data buffer
+  * @param	oBytes    :the size of output data buffer
+	*                   ("oBytes" must be bigger or equal then "iBytes")
+  * @param	input     :the pointer of input data buffer
+  * @param	iBytes    :the size of input data buffer
+  *                   ("iBytes" must be an integer multiple of key length)
+  * @param	key       :AES key
+  * @param	kSize     :the size of AES key: AES_128 AES_192 or AES_256
+  * @param	iv        :initialization vector
+  * @retval AES return value
+  */
+
+uint32_t AES_Enc(PACK_ModeTypeDef pack_mode,
+                 uint8_t *output, uint32_t obytes,
+                 uint8_t *input, uint32_t ibytes,
+                 uint8_t *key, AES_KeySizeTypeDef ksize,
+                 AES_IvKeyTypeDef iv,
+                 rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	AES_Decrypt
+  * @brief	AES decrypt function
+  * @param	pack_mode :block encryption mode ECB or CBC
+  * @param	output    :the pointer of output data buffer
+  * @param	oBytes    :the size of output data buffer
+  *                    ("oBytes" must be bigger or equal then "iBytes")
+  * @param	input     :the pointer of input data buffer
+  * @param	iBytes    :the size of input data buffer
+  *                    ("iBytes" must be an integer multiple of key length)
+  * @param	key       :AES key
+  * @param	kSize     :the size of AES key: AES_128 AES_192 or AES_256
+  * @param	iv        :initialization vector
+  * @retval AES return value
+  */
+uint32_t AES_Dec(PACK_ModeTypeDef pack_mode,
+                 uint8_t *output, uint32_t obytes,
+                 uint8_t *input, uint32_t ibytes,
+                 uint8_t *key, AES_KeySizeTypeDef ksize,
+                 AES_IvKeyTypeDef iv,
+                 rng_callback f_rng, void *p_rng);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_calc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_calc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_calc.h	(working copy)
@@ -0,0 +1,111 @@
+#ifndef __YC_CALC_H__
+#define __YC_CALC_H__
+
+
+#include "yc3121.h"
+#include "yc_crypt.h"
+
+#define SET_GENKEY     0x0
+#define SET_ENC_DATA1  0x1
+#define SET_ENC_DATA2  0x2
+
+#define GET_E_LEN      0x0
+#define GET_FifoBuffer 0x1
+
+//struct
+typedef struct
+{
+	uint32_t *a;    //operand a
+	uint32_t *b;    //operand b
+	uint32_t *p;    //modulus p
+	uint32_t *c;    //factor  c
+	uint32_t q;     //factor  q
+} calc_operand;
+
+//the values of the parameter config in function calc_config()
+#define CALC_POLL  0
+#define CALC_IDLE  1
+
+//the values of the parameter index in function  calc_run()
+#define FUNC_MUL           0   //multiplication
+#define FUNC_DIV           1   //division
+#define FUNC_MODEXP        2   //modular exponentiation
+#define FUNC_MODEXP2_PRIME 3   //modular exponentiation in prime field, 2^(2*32*(Cb+1)) % B
+#define FUNC_MODMUL_PRIME  4   //modular multiplication in prime field
+#define FUNC_MODINV_PRIME  5   //modular inversion in prime field
+#define FUNC_MODEXP2_BIN   6   //modular exponentiation in binary field, 2^(2*32*(Cb+1)) % B
+#define FUNC_MODMUL_BIN    7   //modular multiplication in binary field
+#define FUNC_MODINV_BIN    8   //modular inversion in binary field
+#define FUNC_PM_BIN        9   //point multiplication in binary field
+#define FUNC_PM_PRIME      10  //point multiplication in prime field
+#define FUNC_PA_PRIME      11  //point addition in prime field
+#define FUNC_PD_PRIME      12  //point double in prime field
+
+//return value definition
+#define RET_CALC_FUNCTION_ID_ERROR       (('R'<<24)|('F'<<16)|('I'<<8)|('E'))
+#define RET_CALC_OPERAND_LENGTH_ERROR    (('R'<<24)|('O'<<16)|('L'<<8)|('E'))
+#define RET_CALC_IMPLEMENT_SUCCESS       (('R'<<24)|('E'<<16)|('I'<<8)|('S'))  //0x52454953
+#define RET_CALC_GCD_NOT_ONE             (('R'<<24)|('G'<<16)|('N'<<8)|('O'))
+
+#define CMPOK        0xA55AA55A
+#define CMPERROR     0x5AA55AA5
+
+//function
+void calc_interrupt(void);
+void calc_config(uint32_t config);
+void calc_setsecurity(uint8_t config);
+uint32_t calc_run(uint8_t index);
+uint32_t calc_add(volatile uint32_t *result,volatile uint32_t *a,volatile uint32_t *b,uint32_t len);
+uint32_t calc_sub(uint32_t *result,uint32_t *a,uint32_t *b,uint32_t len);
+void calc_modadd(uint32_t *result,uint32_t *a,uint32_t *b,uint32_t *p,uint32_t len);
+void calc_modsub(uint32_t *result,uint32_t *a,uint32_t *b,uint32_t *p,uint32_t len);
+void calc_xor(uint32_t *result,uint32_t *a,uint32_t *b,uint32_t len);
+uint32_t calc_mul(uint32_t *result,uint32_t *a,uint32_t *b,uint32_t len_a,uint32_t len_b);
+uint32_t calc_div(uint32_t *result_q,uint32_t *result_r,uint32_t *a,uint32_t *b,uint32_t len_a,uint32_t len_b);
+uint32_t calc_mod(uint32_t *result, uint32_t *a, uint32_t *b, uint32_t len_a, uint32_t len_b);
+uint32_t calc_modexp(uint32_t *result,calc_operand *operand,uint32_t len_a,uint32_t len_b);
+uint32_t calc_modexp2(uint32_t *result, uint32_t *a, uint32_t *b, uint32_t *c, uint32_t len_a, uint32_t len_b);
+uint32_t calc_const_c(uint32_t *result, uint32_t *p, uint32_t len);
+uint32_t calc_const_c_f2m(uint32_t *result, uint32_t *p, uint32_t len);
+uint32_t calc_modmul(uint32_t *result, calc_operand *operand, uint32_t len);
+uint32_t calc_modmul2(uint32_t *result, uint32_t *a,volatile uint32_t *b, uint32_t *c, uint32_t len);
+uint32_t calc_modmul_f2m(uint32_t *result, calc_operand *operand, uint32_t len);
+uint32_t calc_modmul2_f2m(uint32_t *result, uint32_t *a, uint32_t *b, uint32_t *c, uint32_t len);
+uint32_t calc_modinv(uint32_t *result, uint32_t *a, uint32_t *p, uint32_t len);
+uint32_t calc_modinv_f2m(uint32_t *result, uint32_t *a, uint32_t *p , uint32_t len);
+uint32_t calc_gcd(uint32_t *a, uint32_t *p, uint32_t len);
+uint32_t calc_const_q(uint32_t *result, uint32_t *a);
+uint32_t calc_const_q_f2m(uint32_t *result, uint32_t *a);
+void calc_sr(uint32_t *result, uint32_t *a, uint32_t len, uint32_t sf_len);
+uint32_t calc_bitlen(uint32_t *a, uint32_t len);
+void calc_modinv2048(uint32_t *result, uint32_t *a, uint32_t *b, uint32_t len_a, uint32_t len_b);
+uint32_t calc_gcd2048(uint32_t a, uint32_t *b, uint32_t len);
+uint32_t calc_gcd2048_l(uint32_t *result,uint32_t *a, uint32_t *b, uint32_t len_a);
+uint32_t calc_rolladd(uint32_t *result,uint32_t *a,uint32_t *b,uint32_t wlen, uint32_t startflag);
+uint32_t calc_modmul_base(uint32_t *result, calc_operand *operand, uint32_t len, uint32_t config);
+
+
+void uint32touint8(uint8_t *dst,uint32_t *src);
+void uint8touint32(uint32_t *dst,uint8_t *src);
+void mem_cpy(volatile unsigned int *dst,volatile unsigned int *src,unsigned int s)  ;
+int mem_cmp(volatile unsigned int *str1,volatile unsigned int *str2,int len)  ;
+int mem_cmp2(volatile unsigned int *str1,unsigned int str2,int len)  ;
+void mem_set(volatile unsigned int *s, unsigned int c, unsigned int n);
+//void revstr(char *str, size_t len);
+int mem_rollcmp(volatile uint32_t *indata1,uint32_t *indata2,uint32_t wlen, uint32_t startflag);
+int mem_rollcmp_char(uint8_t *indata1,uint8_t *indata2,uint32_t wlen, uint32_t startflag);
+unsigned int calculatexor(unsigned int *data,unsigned int initdata,int len);
+void memcpy_r(uint8_t *a,uint8_t *b,uint32_t len);
+uint32_t mem_rollcpy(volatile uint32_t *result,uint32_t *content,uint32_t wlen, uint32_t startflag);
+void mem_rollcpy_r_char( uint8_t *result,uint8_t *content,uint32_t wlen, uint32_t startflag);
+uint32_t mem_rollcpy_char( uint8_t *result,uint8_t *content,uint32_t wlen, uint32_t startflag);
+uint32_t calc_modmul_f2m_2(uint32_t *result, uint32_t *a, uint32_t *b, uint32_t *p, uint32_t *c, uint32_t len, uint32_t config);
+void calc_modadd_1(uint32_t *result,uint32_t *a,uint32_t *b,uint32_t *p,uint32_t len);
+
+void cpu_open_branch_self();
+void cpu_open_uniform_branch_timing();
+void cpu_close_branch_self();
+void cpu_close_uniform_branch_timing();
+uint32_t CRYPT_GetVersion(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_crc16.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_crc16.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_crc16.h	(working copy)
@@ -0,0 +1,11 @@
+#ifndef __YC_CRC16_H__
+#define __YC_CRC16_H__
+
+#include "..\core\yc3121.h"
+#include "..\core\system.h"
+
+uint16_t crc16_calc(uint16_t iv, uint32_t mask, uint8_t *data, uint16_t data_len);
+
+#define CRC16_TEST
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_crypt.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_crypt.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_crypt.h	(working copy)
@@ -0,0 +1,30 @@
+#ifndef __YC_CRYPT_H__
+#define __YC_CRYPT_H__
+
+
+#define CMPERR		 	(('C'<<24)|('M'<<16)|('P'<<8)|('E'))
+#define EQUAL		 	(('E'<<24)|('Q'<<16)|('U'<<8)|('A'))
+#define UNEQUAL		 	(('U'<<24)|('E'<<16)|('Q'<<8)|('U'))
+#define BIGGER 			(('B'<<24)|('I'<<16)|('G'<<8)|('G'))
+#define SMALLER 		(('S'<<24)|('M'<<16)|('A'<<8)|('L'))
+
+typedef enum
+{
+	ECB = (('P'<<24)|('E'<<16)|('C'<<8)|('B')),
+	CBC = (('P'<<24)|('C'<<16)|('B'<<8)|('C'))
+}PACK_ModeTypeDef;
+
+typedef enum
+{
+	ENC = (('C'<<24)|('E'<<16)|('N'<<8)|('C')),
+	DEC = (('C'<<24)|('D'<<16)|('E'<<8)|('C'))
+}CRYPT_ModeTypeDef;
+
+typedef uint32_t (*rng_callback)(void *rand, uint32_t size, void *p_rng);
+
+void crypt_reset(void);
+void crypt_it_clear(void);
+void crypt_data_rand(rng_callback f_rng, void *p_rng);
+
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_crypt.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_crypt.lib
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_des.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_des.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_des.h	(working copy)
@@ -0,0 +1,148 @@
+#ifndef __YC_DES_H__
+#define __YC_DES_H__
+
+#include "yc3121.h"
+#include "yc_crypt.h"
+#include "yc_calc.h"
+
+#define RET_DES_SUCCESS            (('R'<<24)|('D'<<16)|('S'<<8)|('C'))  //鍔犲瘑鎴愬姛
+#define RET_DES_FAILURE            (('R'<<24)|('D'<<16)|('F'<<8)|('A'))  //鍔犲瘑澶辫触
+#define RET_DES_KEY_IS_OK          (('R'<<24)|('D'<<16)|('K'<<8)|('O'))  //瀵嗛挜姝ｇ‘
+#define RET_DES_KEY_IS_NULL        (('R'<<24)|('D'<<16)|('K'<<8)|('N'))  //瀵嗛挜鎸囬拡涓虹┖
+#define RET_DES_KEY_CRC_ERROR      (('R'<<24)|('D'<<16)|('K'<<8)|('C'))  //瀵嗛挜 CRC 閿欒
+#define RET_DES_KEY_READBACK_ERROR (('R'<<24)|('D'<<16)|('K'<<8)|('R'))  //瀵嗛挜鍥炶閿欒
+#define RET_DES_IV_CRC_ERROR       (('R'<<24)|('D'<<16)|('I'<<8)|('C'))  //IVCRC 閿欒
+#define RET_DES_PACK_MODE_ERROR    (('R'<<24)|('D'<<16)|('P'<<8)|('E'))  //鍒嗙粍妯″紡閿欒
+#define RET_DES_OUTBUF_TOO_SMALL   (('R'<<24)|('D'<<16)|('O'<<8)|('S'))  //杈撳嚭缂撳啿涓嶈冻
+#define RET_DES_INPUT_SIZE_ERROR   (('R'<<24)|('D'<<16)|('I'<<8)|('S'))  //杈撳叆鏁版嵁 len 閿欒
+#define RET_DES_RESULT_CHECK_ERROR (('R'<<24)|('D'<<16)|('R'<<8)|('C'))  //杈撳嚭缁撴灉閿欒
+
+#define DES_KEY_SIZE 8
+#define DES_IV_SIZE  8
+
+typedef uint8_t DES_KeyTypeDef[DES_KEY_SIZE];
+typedef uint8_t DES_IvTypeDef[DES_IV_SIZE];
+
+typedef uint8_t DES_RandTypeDef[4];
+typedef uint8_t DES_FakeTypeDef[8];
+
+#define DES_TYPE_DES_ENC  (('D'<<24)|('T'<<16)|('D'<<8)|('E'))  //DES 鍔犲瘑妯″紡
+#define DES_TYPE_DES_DEC  (('D'<<24)|('T'<<16)|('D'<<8)|('D'))  //DES 瑙ｅ瘑妯″紡
+#define DES_TYPE_TDES_ENC (('D'<<24)|('T'<<16)|('T'<<8)|('E'))  //TDES 鍔犲瘑妯″紡
+#define DES_TYPE_TDES_DEC (('D'<<24)|('T'<<16)|('T'<<8)|('D'))  //TDES 瑙ｅ瘑妯″紡
+
+typedef struct
+{
+	DES_KeyTypeDef k1;
+	DES_KeyTypeDef k2;
+	DES_KeyTypeDef k3;
+}TDES_KeyTypeDef;
+
+/**
+  * @method	mh_des_enc
+  * @brief	DES encrypt function
+  * @param	pack_mode		:block encryption mode ECB or CBC
+  * @param	output			:the pointer of output data buffer
+  * @param	obytes			:the size of output data buffer
+							("oBytes" must be bigger or equal then "iBytes")
+  * @param	input			:the pointer of input data buffer
+  * @param	ibytes			:the size of input data buffer
+							("iBytes" must be an integer multiple of key length)
+  * @param	key				:DES key
+  * @param	iv				:initialization vector
+  * @param	f_rng			:true random number generation function point
+  * @param	p_rng			:true random number generation para
+  * @retval					:DES return value
+  */
+uint32_t DES_Enc(PACK_ModeTypeDef pack_mode,
+					uint8_t *output, uint32_t obytes,
+					uint8_t *input, uint32_t ibytes,
+					DES_KeyTypeDef key,	DES_IvTypeDef iv,
+					rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	DES_Decrypt
+  * @brief	DES decrypt function
+  * @param	pack_mode		:block encryption mode ECB or CBC
+  * @param	output			:the pointer of output data buffer
+  * @param	oBytes			:the size of output data buffer
+							("oBytes" must be bigger or equal then "iBytes")
+  * @param	input			:the pointer of input data buffer
+  * @param	iBytes			:the size of input data buffer
+							("iBytes" must be an integer multiple of key length)
+  * @param	key				:DES key
+  * @param	iv				:initialization vector
+  * @param	f_rng			:true random number generation function point
+  * @param	p_rng			:true random number generation para
+  * @retval					:DES return value
+  */
+uint32_t DES_Dec(PACK_ModeTypeDef pack_mode,
+					uint8_t *output, uint32_t obytes,
+					uint8_t *input, uint32_t ibytes,
+					DES_KeyTypeDef key,	DES_IvTypeDef iv,
+					rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	TDES_Encrypt
+  * @brief	TDES encrypt function
+  * @param	pack_mode		:block encryption mode ECB or CBC
+  * @param	output			:the pointer of output data buffer
+  * @param	oBytes			:the size of output data buffer
+							("oBytes" must be bigger or equal then "iBytes")
+  * @param	input			:the pointer of input data buffer
+  * @param	iBytes			:the size of input data buffer
+							("iBytes" must be an integer multiple of key length)
+  * @param	key				:DES key
+  * @param	iv				:initialization vector
+  * @param	f_rng			:true random number generation function point
+  * @param	p_rng			:true random number generation para
+  * @retval					:TDES return value
+  */
+uint32_t TDES_Enc(PACK_ModeTypeDef pack_mode,
+					uint8_t *output, uint32_t obytes,
+					uint8_t *input, uint32_t ibytes,
+					TDES_KeyTypeDef *key, DES_IvTypeDef iv,
+					rng_callback f_rng, void *p_rng);
+/**
+  * @method	TDES_Decrypt
+  * @brief	TDES decrypt function
+  * @param	pack_mode		:block encryption mode ECB or CBC
+  * @param	output			:the pointer of output data buffer
+  * @param	oBytes			:the size of output data buffer
+							("oBytes" must be bigger or equal then "iBytes")
+  * @param	input			:the pointer of input data buffer
+  * @param	iBytes			:the size of input data buffer
+							("iBytes" must be an integer multiple of key length)
+  * @param	key				:DES key
+  * @param	iv				:initialization vector
+  * @param	f_rng			:true random number generation function point
+  * @param	p_rng			:true random number generation para
+  * @retval					:TDES return value
+  */
+uint32_t TDES_Dec(PACK_ModeTypeDef pack_mode,
+					uint8_t *output, uint32_t obytes,
+					uint8_t *input, uint32_t ibytes,
+					TDES_KeyTypeDef *key, DES_IvTypeDef iv,
+					rng_callback f_rng, void *p_rng);
+
+
+//struct
+typedef struct
+{
+	uint8_t *result;  //杈撳嚭鏁版嵁鎸囬拡
+	uint8_t *content; //杈撳叆鏁版嵁鎸囬拡
+	uint8_t *key1;    //瀵嗛挜1鎸囬拡
+	uint8_t *key2;    //瀵嗛挜2鎸囬拡
+	uint8_t *key3;    //瀵嗛挜3鎸囬拡
+	uint8_t *iv;      //cbc妯″潡鍒濆鍚戦噺鎸囬拡
+	uint8_t *rand;    //闅忔満鏁2瀛楄妭
+	uint8_t *fakekey; //鍋囩閽8瀛楄妭
+	uint8_t config;   //des杩愮畻閰嶇疆
+	uint32_t length;  //cbc妯″紡涓嬬殑鏁版嵁瀛楄妭鏁
+}des_para;
+
+
+
+#endif
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_ecc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_ecc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_ecc.h	(working copy)
@@ -0,0 +1,121 @@
+#ifndef _CALC_ECC_H_
+#define _CALC_ECC_H_
+
+#include "yc_rsa.h"
+
+#define PLATFORM8 0xffffee
+#define PLATFORM  0xffffee11
+
+
+#if PLATFORM == PLATFORM8
+#else
+
+typedef struct
+{
+	uint32_t *x;  //x杞村潗鏍
+	uint32_t *y;  //y杞村潗鏍
+}ecc_point_a;     //浠垮皠鍧愭爣
+
+typedef struct
+{
+	uint32_t *x;  //x杞村潗鏍
+	uint32_t *y;  //y杞村潗鏍
+	uint32_t *z;  //z杞村潗鏍
+}ecc_point_j;     //闆呭彲姣斿潗鏍
+
+typedef struct
+{
+	uint32_t *x;  //x杞村潗鏍
+	uint32_t *y;  //y杞村潗鏍
+	uint32_t *z;  //z杞村潗鏍
+	uint32_t *t;  //t杞村潗鏍
+}ecc_point_mj;    //淇闆呭彲姣斿潗鏍
+
+typedef struct
+{
+	uint32_t *p;        //妯℃暟--鐢卞閮ㄤ紶鍏
+	uint32_t *a;        //妞渾鏇茬嚎甯告暟a--鐢卞閮ㄤ紶鍏
+	uint32_t *b;        //妞渾鏇茬嚎甯告暟b--鐢卞閮ㄤ紶鍏
+	ecc_point_a g;      //鍩虹偣--鐢卞閮ㄤ紶鍏
+	uint32_t *n;        //鍩虹偣鐨勯樁--鐢卞閮ㄤ紶鍏
+	uint32_t len_bits;  //鏇茬嚎浣嶆暟,姣旂壒
+	uint32_t len_words; //鏇茬嚎闀垮害,瀛
+	uint32_t field;     //鍩
+	uint32_t a_type;    //鍒ゆ柇a鏄惁绛変簬-3bit0锛0-鐩哥瓑锛1-涓嶇瓑--鐢卞閮ㄤ紶鍏
+	uint32_t *p_c;      //浠涓哄彇妯＄殑甯搁噺c
+	uint32_t p_q;       //浠涓哄彇妯＄殑璋冩暣鍥犲瓙q
+	uint32_t *n_c;      //浠涓哄彇妯＄殑甯搁噺c
+	uint32_t n_q;       //浠涓哄彇妯＄殑璋冩暣鍥犲瓙q
+	uint32_t *n1_c;
+	uint32_t n1_q;
+}ecc_para;              //ecc杈撳叆鍙傛暟鐨勬暟鎹粨鏋
+
+typedef struct
+{
+	uint32_t *d;        //ecc绉侀挜
+	ecc_point_a e;      //ecc鍏挜
+}ecc_key;               //ecc瀵嗛挜鐨勬暟鎹粨鏋
+typedef struct
+{
+	uint32_t mask;      //鏄庢枃鐩插寲(搴曟暟鎺╃爜)
+	uint32_t verify;    //鎸囨暟鐩插寲(鎸囨暟鎺╃爜)
+}ecc_security;
+//macro define
+#define ECC_P192 0
+#define ECC_P224 1
+#define ECC_P256 2
+#define ECC_B163 3
+#define ECC_B193 4
+#define ECC_B233 5
+#define ECC_B257 6
+
+#define ECC_PRIME  (('E'<<8)|('P'))
+#define ECC_BINARY (('E'<<8)|('B'))
+#define ECC_A_IS_NEGATIVE_3 (('A'<<24)|('I'<<16)|('N'<<8)|('3'))
+#define ECC_A_NOT_NEGATIVE_3 (('A'<<24)|('N'<<16)|('N'<<8)|('3'))
+#define INT_MASK_OPEN (('I'<<16)|('M'<<8)|('O'))
+#define INT_MASK_CLOSE (('I'<<16)|('M'<<8)|('C'))
+#define EC_PARA_VERIFY_OPEN (('E'<<24)|('P'<<16)|('V'<<8)|('O'))
+#define EC_PARA_VERIFY_CLOSE (('E'<<24)|('P'<<16)|('V'<<8)|('C'))
+#define SCALAR_IS_EVEN  (('S'<<16)|('I'<<8)|('E'))
+#define SCALAR_NOT_EVEN (('S'<<16)|('N'<<8)|('E'))
+#define EMBEDED_PUBLIC_KEY_VERIFY (('E'<<24)|('P'<<16)|('K'<<8)|('V'))
+#define COMMON_PUBLIC_KEY_VERIFY  (('C'<<24)|('P'<<16)|('K'<<8)|('V'))
+
+#define RET_POINT_INFINITE_FAR         (('E'<<24)|('P'<<16)|('F'<<8)|('F'))
+#define RET_ECC_POINT_SUCCESS          (('E'<<24)|('P'<<16)|('S'<<8)|('U'))
+#define RET_ECC_POINT_FAILED           (('E'<<24)|('P'<<16)|('F'<<8)|('A'))
+#define RET_ECC_POINT_ADD_ERROR        (('E'<<24)|('P'<<16)|('A'<<8)|('E'))
+#define RET_ECC_POINT_MULT_ERROR       (('E'<<24)|('P'<<16)|('M'<<8)|('E'))
+#define RET_ECC_POINT_INFINITE_FAR     (('E'<<24)|('P'<<16)|('I'<<8)|('F'))
+#define RET_ECC_PUBLIC_KEY_FAILED      (('E'<<24)|('P'<<16)|('K'<<8)|('F'))
+#define RET_ECC_PUBLIC_KEY_PASS        (('E'<<24)|('P'<<16)|('K'<<8)|('P'))
+#define RET_ECC_KEY_GENERATION_SUCCESS (('E'<<24)|('K'<<16)|('G'<<8)|('S'))
+#define RET_ECC_KEY_GENERATION_FAILED  (('E'<<24)|('K'<<16)|('G'<<8)|('F'))
+
+//function
+extern const  unsigned int  CONST_LONG_ONE[64]  ;
+extern const  unsigned int  CONST_LONG_FFFFFFFF[64]  ;
+
+extern uint32_t sm2_rand_val[9];
+extern uint8_t sm2_rand_index;
+
+
+
+
+void ecc_config(ecc_para *para,uint32_t config);
+uint32_t ecc_genkey(ecc_key *key,ecc_para *para,ecc_security *security,uint32_t *rand_key,uint32_t *rand_mask);
+uint32_t ecc_verifykey(ecc_key *key,ecc_para *para,uint32_t config);
+uint32_t ecc_pmul(ecc_point_a *result,ecc_point_a *a,uint32_t *b,ecc_para *para,ecc_security *security,uint32_t *rand, uint32_t rand_len);
+uint32_t ecc_pmul_calc(ecc_point_a *result,ecc_point_a *a, uint32_t *k,uint32_t k_len,ecc_para *para);
+uint32_t ecc_verifypoint(ecc_point_a *a,ecc_para *para);
+uint32_t ecc_pdbl_a(ecc_point_a *result,ecc_point_a *a,ecc_para *para);
+uint32_t ecc_padd_ja(ecc_point_j *result,ecc_point_j *a,ecc_point_a *b,ecc_para *para);
+void sm2_bin_padd_1(ecc_point_a *result, ecc_point_j *a, ecc_point_j *b, ecc_para *para);
+void sm2_bin_padd_2(ecc_point_a *result, ecc_point_j *a, ecc_point_j *b, ecc_para *para);
+
+void sm2_rand_init(void);
+
+#endif
+
+#endif
\ No newline at end of file
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_rsa.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_rsa.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_rsa.h	(working copy)
@@ -0,0 +1,226 @@
+#ifndef __YC_RSA_H__
+#define __YC_RSA_H__
+
+#include "yc_calc.h"
+
+#define MIN_RSA_MODULUS_BITS  1024
+#define MAX_RSA_MODULUS_BITS  2048
+#define MAX_RSA_MODULUS_BYTES ((MAX_RSA_MODULUS_BITS + 7) / 8)
+#define MAX_RSA_PRIME_BITS    ((MAX_RSA_MODULUS_BITS + 1) / 2)
+#define MAX_RSA_PRIME_BYTES   ((MAX_RSA_PRIME_BITS + 7) / 8)
+
+typedef struct
+{
+	uint32_t bytes;                       // RSA瀵嗛挜闀垮害瀛楄妭鏁帮紝鍗 RSA 瀵嗛挜涓 bytes * 8bits 锛岀敱浜庡浐瀹氬弬鏁 MAX_RSA_MODULUS_BYTES 鐨勯檺瀹氾紝bytes 鏈澶у间负 256
+	uint8_t  e[4];                        // RSA 鍏挜鎸囨暟
+	uint8_t  p[MAX_RSA_PRIME_BYTES];	    // RSA 绱犳暟 p
+	uint32_t p_xor;                       // p 寮傛垨鏍￠獙鍊
+	uint8_t  q[MAX_RSA_PRIME_BYTES];      // RSA 绱犳暟 q
+	uint32_t q_xor;                       // q 寮傛垨鏍￠獙鍊
+	uint8_t  n[MAX_RSA_MODULUS_BYTES];    // RSA 妯℃暟 n
+	uint8_t  d[MAX_RSA_MODULUS_BYTES];    // RSA 绉侀挜鎸囨暟
+	uint8_t  dp[MAX_RSA_PRIME_BYTES];     // d mod (p-1)
+	uint8_t  dq[MAX_RSA_PRIME_BYTES];     // d mod (q-1)
+	uint8_t  qp[MAX_RSA_PRIME_BYTES];     // q^-1 mod p
+	uint8_t  n_c[MAX_RSA_MODULUS_BYTES];  // 妯℃暟 n 鍙傛暟 C锛岀敤浜 n 鐨勬ā骞傝繍绠
+	uint8_t  n_q[4];                      // 妯℃暟 n 鍙傛暟 Q锛岀敤浜 n 鐨勬ā骞傝繍绠
+	uint8_t  p_c[MAX_RSA_PRIME_BYTES];    // 妯℃暟 p 鍙傛暟 C锛岀敤浜 p 鐨勬ā骞傝繍绠
+	uint8_t  p_q[4];                      // 妯℃暟 p 鍙傛暟 Q锛岀敤浜 p 鐨勬ā骞傝繍绠
+	uint8_t  q_c[MAX_RSA_PRIME_BYTES];    // 妯℃暟 q 鍙傛暟 C锛岀敤浜 q 鐨勬ā骞傝繍绠
+	uint8_t  q_q[4];                      // 妯℃暟 q 鍙傛暟 Q锛岀敤浜 q 鐨勬ā骞傝繍绠
+}RSA_PrivateKeyTypeDef;
+
+
+typedef struct
+{
+	uint32_t bytes;                       //RSA瀵嗛挜闀垮害瀛楄妭鏁帮紝鍗 RSA 瀵嗛挜涓 bytes * 8bits 锛岀敱浜庡浐瀹氬弬鏁 MAX_RSA_MODULUS_BYTES 鐨勯檺瀹氾紝bytes 鏈澶у间负 256
+	uint8_t  e[4];                        //RSA 鍏挜鎸囨暟
+	uint8_t  n[MAX_RSA_MODULUS_BYTES];    //RSA 妯℃暟 n
+	uint8_t  n_c[MAX_RSA_MODULUS_BYTES];  //妯℃暟 n 鍙傛暟 C锛岀敤浜 n 鐨勬ā骞傝繍绠
+	uint8_t  n_q[4];                      //妯℃暟 n 鍙傛暟 Q锛岀敤浜 n 鐨勬ā骞傝繍绠
+}RSA_PublicKeyTypeDef;
+
+
+typedef struct
+{
+  uint32_t bytes;                       //RSA瀵嗛挜闀垮害瀛楄妭鏁帮紝鍗 RSA 瀵嗛挜涓 bytes * 8bits 锛岀敱浜庡浐瀹氬弬鏁 MAX_RSA_MODULUS_BYTES 鐨勯檺瀹氾紝bytes 鏈澶у间负 256
+	uint8_t  e[4];                        //RSA 鍏挜鎸囨暟
+	uint8_t  n[MAX_RSA_MODULUS_BYTES];    //RSA 妯℃暟 n
+}RSA_PublicKeyTypeDef2;
+
+
+typedef struct
+{
+  uint32_t bytes;                       //RSA瀵嗛挜闀垮害瀛楄妭鏁帮紝鍗 RSA 瀵嗛挜涓 bytes * 8bits 锛岀敱浜庡浐瀹氬弬鏁 MAX_RSA_MODULUS_BYTES 鐨勯檺瀹氾紝bytes 鏈澶у间负 256
+	uint8_t  e[4];                        //RSA 鍏挜鎸囨暟
+	uint8_t  n[MAX_RSA_MODULUS_BYTES];    //RSA 妯℃暟 n
+  uint8_t  d[MAX_RSA_MODULUS_BYTES];    //RSA 绉侀挜鎸囨暟
+}RSA_PrivateKeyTypeDef2;
+
+
+typedef enum
+{
+	RSA_1024	= 1024,
+	RSA_2048	= 2048,
+}RSA_KeyBitsTypedef;
+
+
+typedef struct
+{
+	uint32_t *eta;
+	uint32_t *pi;
+	uint32_t *ro;
+} rsa_prime;
+
+//return value
+#define RET_RSA_RANDNUM_NOT_ACCEPT          (('R'<<24)|('R'<<16)|('N'<<8)|('A'))  //闅忔満鏁颁笉琚帴鍙
+#define RET_RSA_KEYGEN_SUCCESS              (('R'<<24)|('K'<<16)|('G'<<8)|('S'))  //RSA 瀵嗛挜鐢熸垚鎴愬姛
+#define RET_RSA_IMPLEMENT_SUCCESS           (('R'<<24)|('R'<<16)|('I'<<8)|('S'))  //鎵ц鎴愬姛
+#define RET_RSA_IMPLEMENT_ERROR             (('R'<<24)|('R'<<16)|('A'<<8)|('E'))  //鎵ц澶辫触
+#define RET_PRIME_CHECK_PASS                (('R'<<24)|('P'<<16)|('C'<<8)|('P'))  //绱犳暟妫鏌ユ垚鍔
+#define RET_PRIME_CHECK_FAIL                (('R'<<24)|('P'<<16)|('C'<<8)|('F'))  //绱犳暟妫鏌ュけ璐
+#define RET_RSA_SUCCESS                     (('R'<<24)|('E'<<16)|('R'<<8)|('S'))  //RSA 璁＄畻鎴愬姛
+#define RET_RSA_FAILURE                     (('R'<<24)|('E'<<16)|('R'<<8)|('E'))  //RSA 璁＄畻澶辫触
+
+//#define RET_RSA_GKEY_SUCCESS		 		(('R'<<24)|('G'<<16)|('K'<<8)|('S'))
+//#define RET_RSA_GKEY_FAILURE		 		(('R'<<24)|('G'<<16)|('K'<<8)|('F'))
+
+//#define RET_RSA_CKEY_SUCCESS		 		(('R'<<24)|('C'<<16)|('K'<<8)|('S'))
+//#define RET_RSA_CKEY_FAILURE		 		(('R'<<24)|('C'<<16)|('K'<<8)|('F'))
+
+/**
+  * @method	RSA_Private
+  * @brief	Raw RSA private-key operation. Useing CRT Algorithm
+  * @param	output : output data buffer
+  * @param	input  : input data buffer
+  * @param	key    : RSA private key
+  * @param	f_rng  : true random number generation function point
+  * @param	p_rng  : true random number generation para
+  * @retval	RET_RSA_SUCCESS or RET_RSA_FAILURE
+  */
+uint32_t  RSA_Private_crt(uint8_t *output, uint8_t *input, RSA_PrivateKeyTypeDef *para,rng_callback f_rng, void *p_rng);
+//uint32_t RSA_PrivateStandard(uint8_t *output, uint8_t *input, RSA_PrivateKeyTypeDef *para,rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	RSA_Public
+  * @brief	Raw RSA public-key operation.
+  * @param	output : output data buffer
+  * @param	input  : input data buffer
+  * @param	key    : RSA public key
+  * @param	f_rng  : true random number generation function point
+  * @param	p_rng  : true random number generation para
+  * @retval RET_RSA_SUCCESS or RET_RSA_FAILURE
+  */
+//RSA_Private_Standard standard not crt;
+uint32_t RSA_Private_Standard(uint8_t *output,uint8_t *input, RSA_PrivateKeyTypeDef *para,rng_callback f_rng, void *p_rng);
+
+uint32_t RSA_Public(uint8_t *output, uint8_t *input, RSA_PublicKeyTypeDef *key, rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	RSA_GenerateKey
+  * @brief	Generate a RSA private key
+  * @param	key      : rsa private key point
+  * @param	exponent : public exponent
+  * @param	nbits    : rsa module bits
+  * @param	f_rng    : true random number generation function point
+  * @param	p_rng    : true random number generation para
+  * @retval RET_RSA_KEYGEN_SUCCESS or RET_RSA_RANDNUM_NOT_ACCEPT
+  */
+uint32_t RSA_GenerateKey(RSA_PrivateKeyTypeDef *key, uint32_t exponent, uint32_t nbits, rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	RSA_CompleteKey
+  * @brief	complete the private key by the rsa key paras p q d.
+  * @param	key   : rsa private key point
+  * @param	f_rng : true random number generation function point
+  * @param	p_rng : true random number generation para
+  * @retval RET_RSA_KEYGEN_SUCCESS or RET_RSA_RANDNUM_NOT_ACCEPT
+  */
+uint32_t RSA_CompleteKey(RSA_PrivateKeyTypeDef *key, rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	RSA_CompleteKey_e
+  * @brief	complete the private key by the rsa key paras p q e.
+  * @param	key   : rsa private key point
+  * @param	f_rng : true random number generation function point
+  * @param	p_rng : true random number generation para
+  * @retval RET_RSA_KEYGEN_SUCCESS or RET_RSA_RANDNUM_NOT_ACCEPT
+  */
+uint32_t RSA_CompleteKey_e(RSA_PrivateKeyTypeDef *key, rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	RSA_GetPrativeKey_C_Q
+  * @brief
+  * @param	key   : rsa private key point
+  * @param	f_rng : true random number generation function point
+  * @param	p_rng : true random number generation para
+  * @retval RET_RSA_IMPLEMENT_SUCCESS or RET_RSA_IMPLEMENT_ERROR
+  */
+uint32_t RSA_GetPrativeKey_C_Q(RSA_PrivateKeyTypeDef *key, rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	RSA_GetPublicKey_C_Q
+  * @brief
+  * @param	key   : rsa private key point
+  * @param	f_rng : true random number generation function point
+  * @param	p_rng : true random number generation para
+  * @retval RET_RSA_IMPLEMENT_SUCCESS or RET_RSA_IMPLEMENT_ERROR
+  */
+uint32_t RSA_GetPublicKey_C_Q(RSA_PublicKeyTypeDef *key, rng_callback f_rng, void *p_rng);
+/**
+  * @method	RSA_IsPrime
+  * @brief
+  * @param	X     : big number array
+  * @param	size  : the big number len (32bit)
+  * @param	f_rng : true random number generation function point
+  * @param	p_rng : true random number generation para
+  * @retval RET_PRIME_CHECK_PASS or RET_PRIME_CHECK_FAIL
+  */
+uint32_t RSA_IsPrime( uint32_t *X, uint32_t size, rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	RSA_GeneratePrime
+  * @brief
+  * @param	X     : big number array
+  * @param	size  : the big number bits (192/256/512/1024)
+  * @param	f_rng : true random number generation function point
+  * @param	p_rng : true random number generation para
+  * @retval RET_CALC_IMPLEMENT_SUCCESS or RET_RSA_IMPLEMENT_ERROR
+  */
+uint32_t RSA_GeneratePrime( uint32_t *result, uint32_t nbits, rng_callback f_rng, void *p_rng);
+
+/*
+***************************************************************************
+* Name: RSA_Private_Func
+* Description: Perform RSA standard decryption or signing operation.
+* Input: content: a pointer the context need to be signed or be decrypted.
+		 para->bytes: the word-length of the value pointed to by content
+		 para->e: RSA public key
+		 para->n: a pointer to RSA public modulus
+		 para->d: a pointer to RSA private key
+* Output: result: a pointer to a variable to store the result of para->wlen words got from RSA_Private_Func().
+* Return value: RET_RSA_IMPLEMENT_SUCCESS - The operation is successful.
+                RET_RSA_IMPLEMENT_ERROR - The operation is failed.
+***************************************************************************
+*/
+
+uint32_t RSA_Private_Func(uint8_t *output,uint8_t *input, RSA_PrivateKeyTypeDef2 *para,rng_callback f_rng, void *p_rng);
+
+
+/**
+  * @method	RSA_Public_Func
+  * @brief	Raw RSA public-key operation.
+  * @param	output		:output data buffer
+  * @param	input		:input data buffer
+  * @param	key			:RSA public key
+  * 		para->bytes: the word-length of the value pointed to by content
+		 	para->e: RSA public key
+		 	para->n: a pointer to RSA public modulus
+  * @param	f_rng		:true random number generation function point
+  * @param	p_rng		:true random number generation para
+  * @retval				:RET_RSA_SUCCESS or RET_RSA_FAILURE
+  */
+uint32_t RSA_Public_Func(uint8_t *output, uint8_t *input, RSA_PublicKeyTypeDef2 *para,rng_callback f_rng, void *p_rng);
+
+#endif
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sha.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sha.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sha.h	(working copy)
@@ -0,0 +1,92 @@
+#ifndef __YC_SHA_H__
+#define __YC_SHA_H__
+
+#include "yc3121.h"
+#include "yc_crypt.h"
+
+typedef enum
+{
+	SHATYPE_1	= 0,
+	SHATYPE_224 = 1,
+	SHATYPE_256 = 2,
+	SHATYPE_384 = 3,
+	SHATYPE_512 = 4,
+	SHATYPE_SM3 = 5
+}SHA_ModeTypeDef;
+
+#define RET_SHA_BUSY        (('R'<<24)|('S'<<16)|('B'<<8)|('U'))  //纭欢鍗曞厓澶勪簬蹇欑姸鎬
+#define RET_SHA_MODE_ERR    (('R'<<24)|('S'<<16)|('M'<<8)|('E'))  //杈撳叆璁＄畻绫诲瀷閿欒
+#define RET_SHA_SUCCESS     (('R'<<24)|('S'<<16)|('S'<<8)|('U'))  //璁＄畻鎴愬姛
+
+/**
+  * @method	sha
+  * @brief	Secure Hash Alogrithm
+  * @param	mode   : SHA mode: SHA_1/SHA_224/SHA_256/SHA_384/SHA_512
+  * @param	output : output data buffer
+  * @param	input  : input data buffer
+  * @param	ibytes : size of input data
+  * @retval SHA_TYPE_ERR or SHA_CRYPT_BUSY
+  */
+uint32_t SHA(SHA_ModeTypeDef mode, uint8_t *output, uint8_t *input,uint32_t ibytes);
+
+/**
+  * @method	sha_sec
+  * @brief	Secure Hash Alogrithm Rand Copy
+  * @param	mode   : SHA mode: SHA_256/SHA_384/SHA_512
+  * @param	output : output data buffer
+  * @param	input  : input data buffer
+  * @param	ibytes : size of input data
+  * @param	f_rng  : true random number generation function point
+  * @param	p_rng  : true random number generation para
+  * @retval SHA_TYPE_ERR or SHA_CRYPT_BUSY
+  */
+uint32_t SHA_Sec(SHA_ModeTypeDef mode,  uint8_t *output, uint8_t *input,uint32_t ibytes,
+							rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	sha
+  * @brief	Secure Hash Alogrithm
+  * @param	mode		:SHA mode: SHA_1/SHA_224/SHA_256/SHA_384/SHA_512
+  * @param	input		:input data buffer
+  * @param	ibytes		:size of input data
+  * @retval 			:SHA_TYPE_ERR or SHA_CRYPT_BUSY
+  */
+uint32_t sha_first(SHA_ModeTypeDef mode,uint8_t *output,uint8_t *input,uint32_t ibytes);
+
+/**
+  * @method	sha
+  * @brief	Secure Hash Alogrithm
+  * @param	mode		:SHA mode: SHA_1/SHA_224/SHA_256/SHA_384/SHA_512
+  * @param	input		:input data buffer
+  * @param	ibytes		:size of input data
+  * @retval 			:SHA_TYPE_ERR or SHA_CRYPT_BUSY
+  */
+uint32_t sha_mid(SHA_ModeTypeDef mode,uint8_t *output,uint8_t *input,uint32_t ibytes);
+
+/**
+  * @method	sha
+  * @brief	Secure Hash Alogrithm
+  * @param	mode		:SHA mode: SHA_1/SHA_224/SHA_256/SHA_384/SHA_512
+  * @param	output		:output data buffer
+  * @param	input		:input data buffer
+  * @param	ibytes		:size of input data
+  * @retval 			:SHA_TYPE_ERR or SHA_CRYPT_BUSY
+  */
+uint32_t sha_last(SHA_ModeTypeDef mode,uint8_t *output,uint8_t *input,uint32_t ibytes);
+
+
+/**
+  * @method	SHA_Enhance
+  * @brief	Secure Hash Alogrithm
+  * @param	mode		:SHA mode: SHA_1/SHA_224/SHA_256/SHA_384/SHA_512
+  * @param	output		:output data buffer
+  * @param	input		:input data buffer
+  * @param	ibytes		:size of input data
+  * @param     totallen		:size of totallen
+  * @param     step               :step = 0 head,  step = 1 middle,  step = 2 tail
+  * @retval 			:SHA_TYPE_ERR or SHA_CRYPT_BUSY
+  */
+uint32_t SHA_Enhance(SHA_ModeTypeDef mode,  uint8_t *output, uint8_t *input,uint32_t ibytes, uint32_t totallen,
+						uint8_t step);
+#endif
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sm2.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sm2.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sm2.h	(working copy)
@@ -0,0 +1,203 @@
+#ifndef __YC_SM2_H__
+#define __YC_SM2_H__
+
+#include "yc3121.h"
+#include "yc_crypt.h"
+#include "system.h"
+#include "yc_sm3.h"
+#include "yc_ecc.h"
+#include "yc_trng.h"
+
+#define SM2_FLOW_CONTROL
+
+#define SM2_KEY_BITS 		257
+#define SM2_KEY_BYTES		((SM2_KEY_BITS + 7) / 8)
+#define SM2_KEY_WORDS		((SM2_KEY_BYTES + 3) / 4)
+
+typedef struct
+{
+	uint32_t r[SM2_KEY_WORDS];
+	uint32_t s[SM2_KEY_WORDS];
+}SM2_SignTypeDef;
+
+typedef struct
+{
+	uint32_t x[SM2_KEY_WORDS];
+	uint32_t y[SM2_KEY_WORDS];
+}SM2_PointTypeDef;
+
+typedef struct
+{
+	uint32_t p[SM2_KEY_WORDS];  //妯℃暟
+	uint32_t a[SM2_KEY_WORDS];  //妞渾鏇茬嚎甯告暟 a
+	uint32_t b[SM2_KEY_WORDS];  //妞渾鏇茬嚎甯告暟 b
+	SM2_PointTypeDef g;         //鍩虹偣
+	uint32_t n[SM2_KEY_WORDS];  //鍩虹偣鐨勯樁
+}SM2_EllipseParaTypeDef;
+
+typedef SM2_PointTypeDef SM2_PublicKeyTypeDef;
+
+typedef struct
+{
+	uint32_t d[SM2_KEY_WORDS];
+	SM2_PublicKeyTypeDef e;
+}SM2_PrivateKeyTypeDef;
+
+
+#define RET_SM2_ENC_SUCCESS       (('R'<<24)|('S'<<16)|('E'<<8)|('S'))  //鍔犲瘑鎴愬姛
+#define RET_SM2_ENC_FAILURE       (('R'<<24)|('S'<<16)|('E'<<8)|('F'))  //鍔犲瘑澶辫触
+#define RET_SM2_DEC_SUCCESS       (('R'<<24)|('S'<<16)|('D'<<8)|('S'))  //瑙ｅ瘑鎴愬姛
+#define RET_SM2_DEC_FAILURE       (('R'<<24)|('S'<<16)|('D'<<8)|('F'))  //瑙ｅ瘑澶辫触
+#define RET_SM2_KDF_SUCCESS       (('R'<<24)|('S'<<16)|('K'<<8)|('S'))  //瀵嗛挜娲剧敓鎴愬姛
+#define RET_SM2_KDF_FAILURE       (('R'<<24)|('S'<<16)|('K'<<8)|('F'))  //瀵嗛挜娲剧敓澶辫触
+#define RET_SM2_SIGN_SUCCESS      (('R'<<24)|('S'<<16)|('S'<<8)|('S'))  //鏁板瓧绛惧悕鎴愬姛
+#define RET_SM2_SIGN_FAILURE      (('R'<<24)|('S'<<16)|('S'<<8)|('F'))  //鏁板瓧绛惧悕閿欒
+#define RET_SM2_SIGN_ERROR        (('R'<<24)|('S'<<16)|('S'<<8)|('E'))  //鏁板瓧绛惧悕閿欒
+#define RET_SM2_VERIFY_SUCCESS    (('R'<<24)|('S'<<16)|('V'<<8)|('S'))  //鏁板瓧绛惧悕楠岃瘉鎴愬姛
+#define RET_SM2_VERIFY_FAILURE    (('R'<<24)|('S'<<16)|('V'<<8)|('F'))  //鏁板瓧绛惧悕楠岃瘉澶辫触
+#define RET_SM2_VERIFY_ERROR      (('R'<<24)|('S'<<16)|('V'<<8)|('E'))  //鏁板瓧绛惧悕楠岃瘉閿欒
+
+
+/**
+  * @method	SM2_Genkey
+  * @brief	SM2 瀵嗛挜鐢熸垚鍑芥暟锛岀敤浜庣敓鎴 SM2 瀵嗛挜
+  * @param	key   : SM2 绉侀挜锛堣緭鍑哄弬鏁帮級
+  * @param	para  : 妞渾鏇茬嚎鍙傛暟锛堣緭鍏ュ弬鏁帮級
+  * @param	f_rng : 闅忔満鏁板嚱鏁帮紙杈撳叆鍙傛暟锛
+  * @param	p_rng : 闅忔満鏁板嚱鏁板弬鏁帮紙杈撳叆鍙傛暟锛
+  * @retval RET_ECC_KEY_GEN_SUCCESS or RET_SM2_KEY_GEN_ERROR
+  */
+uint32_t SM2_Genkey(SM2_PrivateKeyTypeDef *key, const SM2_EllipseParaTypeDef *para,
+                    rng_callback f_rng, void *p_rng, uint8_t config);
+
+//uint32_t SM2_Kdf(uint8_t *K, uint32_t klen, const uint8_t *Z, uint32_t zlen);
+/**
+  * @method	SM2_Hash_z
+  * @brief	get sm2 sign para Za
+  * @param	Za     : the Za para of sm2 sign
+  * @param	IDa    : user id
+  * @param	IDalen : the bits of user id (8 * (number of bytes))
+  * @param	para   : sm2 paras
+  * @param	key    : sm2 public key
+  * @retval nil
+  */
+uint32_t SM2_Hash_Za(uint8_t *Za, uint8_t *IDa, uint16_t IDalen, SM2_EllipseParaTypeDef *para, SM2_PublicKeyTypeDef *key, uint16_t block_size);
+
+/**
+  * @method	SM2_Hash_e
+  * @brief	get sm2 sign para e
+  * @param	e    : the e para of sm2 sign (e is already cover bytes to integer)
+  * @param	Za   : the Za para of sm2 sign
+  * @param	m    : message
+  * @param	mlen : bytes of message
+  * @retval nil
+  */
+uint32_t SM2_Hash_e(uint32_t *e, uint8_t *Za, uint8_t *m, uint32_t mlen);
+
+/**
+  * @method	SM2_Enc
+  * @brief	SM2 鍏挜鍔犺В瀵嗗嚱鏁帮紝浣跨敤 SM2 鍏挜瀵规暟鎹繘琛屽姞瀵嗘垨瑙ｅ瘑鎿嶄綔
+  * @param	output : 杈撳嚭鏁版嵁缂撳啿鍖虹殑鎸囬拡锛堣緭鍑哄弬鏁帮級
+  * @param	Olen   : 杈撳嚭鏁版嵁闀垮害锛堣緭鍑哄弬鏁帮級
+  * @param	input  : 杈撳叆鏁版嵁缂撳啿鍖虹殑鎸囬拡锛堣緭鍏ュ弬鏁帮級
+  * @param	ilen   : 杈撳叆鏁版嵁闀垮害锛堣緭鍏ュ弬鏁帮級
+  * @param	key    : SM2 鍏挜锛堣緭鍏ュ弬鏁帮級
+  * @param	para   : 妞渾鏇茬嚎鍙傛暟锛堣緭鍏ュ弬鏁帮級
+  * @param	f_rng  : 闅忔満鏁板嚱鏁帮紙杈撳叆鍙傛暟锛
+  * @param	p_rng  : 闅忔満鏁板嚱鏁板弬鏁帮紙杈撳叆鍙傛暟锛
+  * @retval RET_SM2_ENC_SUCCESS or RET_SM2_ENC_FAILURE
+  */
+uint32_t SM2_Enc(uint8_t *output, uint32_t *olen,
+                 uint8_t *input, uint32_t ilen,
+                 SM2_PublicKeyTypeDef *key,  SM2_EllipseParaTypeDef *para,
+                 rng_callback f_rng, void *p_rng,uint8_t config);
+
+/**
+  * @method	SM2_Dec
+  * @brief	SM2 绉侀挜鍔犺В瀵嗗嚱鏁帮紝浣跨敤 SM2 绉侀挜瀵规暟鎹繘琛屽姞瀵嗘垨瑙ｅ瘑鎿嶄綔
+  * @param	output : 杈撳嚭鏁版嵁缂撳啿鍖虹殑鎸囬拡锛堣緭鍑哄弬鏁帮級
+  * @param	olen   : 杈撳嚭鏁版嵁闀垮害锛堣緭鍑哄弬鏁帮級
+  * @param	input  : 杈撳叆鏁版嵁缂撳啿鍖虹殑鎸囬拡锛堣緭鍏ュ弬鏁帮級
+  * @param	ilen   : 杈撳叆鏁版嵁闀垮害锛堣緭鍏ュ弬鏁帮級
+  * @param	key    : SM2 绉侀挜锛堣緭鍏ュ弬鏁帮級
+  * @param	para   : 妞渾鏇茬嚎鍙傛暟锛堣緭鍏ュ弬鏁帮級
+  * @param	f_rng  : 闅忔満鏁板嚱鏁帮紙杈撳叆鍙傛暟锛
+  * @param	p_rng  : 闅忔満鏁板嚱鏁板弬鏁帮紙杈撳叆鍙傛暟锛
+  * @retval RET_SM2_DEC_SUCCESS or RET_SM2_DEC_FAILURE
+  */
+uint32_t SM2_Dec(uint8_t *output, uint32_t *olen,
+                 uint8_t *input, uint32_t ilen,
+                 SM2_PrivateKeyTypeDef *key,  SM2_EllipseParaTypeDef *para,
+                 rng_callback f_rng, void *p_rng,uint8_t config);
+
+//uint32_t SM2_digital_sign(SM2_SignTypeDef *sign, uint8_t Za[32],
+//							uint8_t *msg, uint32_t mlen,
+//							SM2_PrivateKeyTypeDef *key, SM2_EllipseParaTypeDef *para,
+//							mh_rng_callback f_rng, void *p_rng);
+//uint32_t SM2_verify_sign(SM2_SignTypeDef *sign, uint8_t Za[32],
+//							uint8_t *msg, uint32_t mlen,
+//							SM2_PublicKeyTypeDef *key, SM2_EllipseParaTypeDef *para,
+//							mh_rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	SM2_DigitalSignWith_e
+  * @brief	SM2 鏁板瓧绛惧悕鍑芥暟
+  * @param	sign  : SM2 鏁板瓧绛惧悕缁撴灉锛堣緭鍑哄弬鏁帮級
+  * @param	e     : hash 鍊硷紙杈撳叆鍙傛暟锛
+  * @param	msg   : 绛惧悕娑堟伅杈撳叆鏁版嵁缂撳啿鍖虹殑鎸囬拡锛堣緭鍏ュ弬鏁帮級
+  * @param	mlen  : 绛惧悕娑堟伅鏁版嵁闀垮害锛堣緭鍏ュ弬鏁帮級
+  * @param	key   : SM2 绉侀挜锛堣緭鍏ュ弬鏁帮級
+  * @param	para  : 妞渾鏇茬嚎鍙傛暟锛堣緭鍏ュ弬鏁帮級
+  * @param	f_rng : 闅忔満鏁板嚱鏁帮紙杈撳叆鍙傛暟锛
+  * @param	p_rng : 闅忔満鏁板嚱鏁板弬鏁帮紙杈撳叆鍙傛暟锛
+  * @retval RET_SM2_SIGN_SUCCESS or RET_SM2_SIGN_FAILURE
+  */
+uint32_t SM2_DigitalSignWith_e(SM2_SignTypeDef *sign, uint32_t *e,
+                               uint8_t *msg, uint32_t mlen,
+                               SM2_PrivateKeyTypeDef *key, SM2_EllipseParaTypeDef *para,
+                               rng_callback f_rng, void *p_rng, uint8_t config);
+
+/**
+  * @method	SM2_VerifySignWith_e
+  * @brief	SM2 绛惧悕楠岃瘉鍑芥暟
+  * @param	sign  : SM2 鏁板瓧绛惧悕缁撴灉锛堣緭鍑哄弬鏁帮級
+  * @param	e     : hash 鍊硷紙杈撳叆鍙傛暟锛
+  * @param	msg   : 绛惧悕娑堟伅杈撳叆鏁版嵁缂撳啿鍖虹殑鎸囬拡锛堣緭鍏ュ弬鏁帮級
+  * @param	mlen  : 绛惧悕娑堟伅鏁版嵁闀垮害锛堣緭鍏ュ弬鏁帮級
+  * @param	key   : SM2 绉侀挜锛堣緭鍏ュ弬鏁帮級
+  * @param	para  : 妞渾鏇茬嚎鍙傛暟锛堣緭鍏ュ弬鏁帮級
+  * @param	f_rng : 闅忔満鏁板嚱鏁帮紙杈撳叆鍙傛暟锛
+  * @param	p_rng : 闅忔満鏁板嚱鏁板弬鏁帮紙杈撳叆鍙傛暟锛
+  * @retval RET_SM2_VERIFY_SUCCESS or RET_SM2_VERIFY_FAILURE
+  */
+uint32_t SM2_VerifySignWith_e(SM2_SignTypeDef *sign, uint32_t *e,
+							uint8_t *msg, uint32_t mlen,
+							SM2_PublicKeyTypeDef *key, SM2_EllipseParaTypeDef *para,
+							rng_callback f_rng, void *p_rng, uint8_t config);
+/*
+uint32_t SM2_key_ex_equation_0(uint8_t _x[32], uint32_t *_xlen,
+							const uint8_t x[32], uint32_t w);
+void SM2_key_ex_equation_1(uint8_t *t, const uint8_t *d,
+						const uint8_t *x, const uint8_t *r,
+						SM2_EllipseParaTypeDef *para);
+void SM2_key_ex_equation_2(SM2_PointTypeDef *P, uint8_t *t,
+						uint8_t *x, SM2_PointTypeDef *R,
+						SM2_EllipseParaTypeDef *para, SM2_PublicKeyTypeDef *key,
+						rng_callback f_rng, void *p_rng);
+
+uint32_t SM2_key_ex_section_0(SM2_PointTypeDef *R, uint8_t *t, uint8_t *rand,
+								SM2_EllipseParaTypeDef *para, SM2_PrivateKeyTypeDef *key,
+								rng_callback f_rng, void *p_rng);
+uint32_t SM2_key_ex_section_1(uint8_t *K, uint32_t Klen, SM2_PointTypeDef *P,
+							SM2_PointTypeDef *R, uint8_t *t,
+							uint8_t *Za, uint8_t *Zb,
+							SM2_EllipseParaTypeDef *para, SM2_PublicKeyTypeDef *key,
+							rng_callback f_rng, void *p_rng);
+uint32_t SM2_key_ex_hash(uint8_t *Hash, uint8_t HashHead,
+						SM2_PointTypeDef *P,uint8_t *Za, uint8_t *Zb,
+						SM2_PointTypeDef *Ra, SM2_PointTypeDef *Rb);
+*/
+//#define SM2_DEBUG
+#endif
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sm3.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sm3.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sm3.h	(working copy)
@@ -0,0 +1,59 @@
+
+#ifndef __YC_SM3_H__
+#define __YC_SM3_H__
+
+#include "yc3121.h"
+#include "yc_crypt.h"
+#include "system.h"
+
+#define RET_SM3_BUSY         (('R'<<24)|('S'<<16)|('3'<<8)|('B'))  //
+#define RET_SM3_SUCCESS      (('R'<<24)|('S'<<16)|('3'<<8)|('S'))  //
+#define RET_SM3_FAILE        (('R'<<24)|('S'<<16)|('3'<<8)|('F'))  //
+
+#define RET_SM3_MAC_SUCCESS  (('S'<<24)|('3'<<16)|('M'<<8)|('U'))  //RET_SM3_SUCCESS
+#define RET_SM4_MAC_FAILURE  (('S'<<24)|('3'<<16)|('M'<<8)|('F'))  //RET_SM3_BUSY
+
+/**
+  * @method	sm3
+  * @brief	SM3 Hash Check
+  * @param	output : output data buffer
+  * @param	input  : input data buffer
+  * @param	ibytes : size of input data
+  * @retval SM3_SUCCESS or SM3_BUSY
+  */
+uint32_t SM3(uint8_t *output, uint8_t *input,uint32_t ibytes);
+
+/*
+ * @brief  sm3 hash check
+ * @param  output     : output data buffer
+ * @param  input      : input data buffer
+ * @param  ibytes     : size of input data (when istep=0~1 ibytes must 64 multiples)
+ * @param  totalbytes : size of all input datas
+ * @param  istep      : 0~2
+ * @return SM3_SUCCESS or SM3_BUSY or SM3_FAILE
+ */
+uint32_t SM3_Enhance(uint8_t *output, uint8_t *input,uint32_t ibytes,uint32_t totalbytes,uint32_t istep);
+
+/*
+ * @brief  sm3 hash check
+ * @param  output : output data buffer
+ * @param  input  : input data
+ * @param  istep  : number of data
+ * @param  isend  : is last data
+ * @return SM3_SUCCESS or SM3_BUSY or SM3_FAILE
+ */
+uint32_t SM3_BYTE(uint8_t *output, uint8_t input,uint32_t istep,uint8_t isend);
+
+/*
+ * @brief  sm3-mac
+ * @param  output  : output data buffer
+ * @param  input   : input data  buffer
+ * @param  ibytes  : size of input buffer
+ * @param  key     : key buffer
+ * @param  key_len : size of key buffer
+ * @return SM3_MAC_SUCCESS  or SM3_MAC_FAILE
+ */
+uint32_t SM3_MAC(uint8_t *output, uint8_t *input,uint32_t ibytes,uint8_t *key,uint32_t key_len);
+
+#endif
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sm4.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sm4.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_crypt/yc_sm4.h	(working copy)
@@ -0,0 +1,70 @@
+#ifndef __YC_SM4_H__
+#define __YC_SM4_H__
+
+#include "yc3121.h"
+#include "yc_crypt.h"
+#include "system.h"
+
+#define SM4_FLOW_CONTROL
+
+#define RET_SM4_SUCCESS             (('S'<<24)|('4'<<16)|('S'<<8)|('U'))  //璁＄畻鎴愬姛
+#define RET_SM4_FAILURE             (('S'<<24)|('4'<<16)|('S'<<8)|('F'))  //璁＄畻閿欒
+#define RET_SM4_KEY_IS_NULL         (('S'<<24)|('4'<<16)|('K'<<8)|('N'))
+#define RET_SM4_PACK_MODE_ERROR     (('S'<<24)|('4'<<16)|('P'<<8)|('E'))
+#define RET_SM4_OUTBUF_TOO_SMALL    (('S'<<24)|('4'<<16)|('O'<<8)|('S'))
+#define RET_SM4_INPUT_SIZE_ERROR    (('S'<<24)|('4'<<16)|('P'<<8)|('S'))
+#define RET_SM4_KEY_READBACK_ERROR  (('S'<<24)|('4'<<16)|('K'<<8)|('R'))
+#define RET_SM4_RESULT_CHECK_ERROR  (('S'<<24)|('4'<<16)|('R'<<8)|('C'))
+
+
+#define SM4_TYPE_DES_ENC            (('4'<<24)|('T'<<16)|('D'<<8)|('E'))
+#define SM4_TYPE_DES_DEC            (('4'<<24)|('T'<<16)|('D'<<8)|('D'))
+
+
+#define SM4_KEY_SIZE  (128 / 8)
+#define SM4_IV_SIZE   (128 / 8)
+
+typedef uint8_t SM4_KeyTypeDef[SM4_KEY_SIZE];
+typedef uint8_t SM4_IvTypeDef[SM4_IV_SIZE];
+
+/**
+  * @method	SM4_Enc
+  * @brief	sm4 encrypt function
+  * @param	pack_mode : block encryption mode ECB or CBC
+  * @param	output    : the pointer of output data buffer
+  * @param	obytes    : the size of output data buffer
+  *                     ("obytes" must be bigger or equal then "iBytes")
+  * @param	input     : the pointer of input data buffer
+  * @param	ibytes    : the size of input data buffer
+  *                     ("ibytes" must be an integer multiple of key length)
+  * @param	key       : SM4 key
+  * @param	iv        : initialization vector
+  * @retval SM4 return value
+  */
+uint32_t SM4_Enc(PACK_ModeTypeDef pack_mode,
+                 uint8_t *output, uint32_t obytes,
+                 uint8_t *input, uint32_t ibytes,
+                 SM4_KeyTypeDef key, SM4_IvTypeDef iv,
+                 rng_callback f_rng, void *p_rng);
+
+/**
+  * @method	SM4_Dec
+  * @brief	SM4 decrypt function
+  * @param	pack_mode : block encryption mode ECB or CBC
+  * @param	output    : the pointer of output data buffer
+  * @param	obytes    : the size of output data buffer
+  *                     ("obytes" must be bigger or equal then "iBytes")
+  * @param	input     : the pointer of input data buffer
+  * @param	ibytes    : the size of input data buffer
+  *                     ("ibytes" must be an integer multiple of key length)
+  * @param	key       : SM4 key
+  * @param	iv        : initialization vector
+  * @retval SM4 return value
+  */
+uint32_t SM4_Dec(PACK_ModeTypeDef pack_mode,
+                 uint8_t *output, uint32_t obytes,
+                 uint8_t *input, uint32_t ibytes,
+                 SM4_KeyTypeDef key, SM4_IvTypeDef iv,
+                 rng_callback f_rng, void *p_rng);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_dma.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_dma.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_dma.h	(working copy)
@@ -0,0 +1,97 @@
+/*
+File Name  :yc_dma.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2018/03/27
+Description  : DMA Mem_TO_Mem Mode encapsulation.		
+		     If enable DMA interrupt ,enter interrupt after sending data by default,and just one DMA IT Mode.
+*/
+
+#ifndef __YC_DMA_H_
+#define __YC_DMA_H_
+
+#include "yc3121.h"
+#define DMACH_QSPI		0
+
+#define DMA_ENABLE_BIT_Pos         7
+#define DMA_ENABLE 			((uint8_t) 1<<DMA_ENABLE_BIT_Pos)
+
+#define DMA_IT_BIT_Pos             1
+#define DMA_IT_ENABLE 	((uint32_t) 1<<DMA_IT_BIT_Pos)
+/*Peripheral DMA Channel*/
+
+
+
+
+typedef struct
+{
+  uint32_t DMA_MemorySourceAddr;     /*!< Specifies the memory Source address for Channel Mem_to_Mem. */
+
+  uint32_t DMA_MemoryDestAddr;          /*!<Specifies the memory Destination  address for Channel Mem_to_Mem. */
+
+  uint32_t DMA_BlockSize;		/*!< Specifies the  Total Number of data items during the transaction. */
+
+}DMA_InitTypeDef;
+
+
+/**
+  * @brief  Initializes the DMA Mem_to_Mem Channelx according to the specified
+  *         parameters in the DMA_InitStruct.
+  * @param  DMA_InitStruct: pointer to a DMA_InitTypeDef structure that
+  *         contains the configuration information for the specified DMA Channel.
+  * @retval None
+  */
+void DMA_Init(DMA_InitTypeDef* DMA_InitStruct);
+
+/**
+  * @brief  Enables or disables  Channel DMACH_MEMCP.
+  * @param  NewState: new state of the DMAy Channelx. 
+  *   This parameter can be: ENABLE or DISABLE.
+  * @retval None
+  */
+void DMA_ChannelCmd( FunctionalState NewState);
+
+/**
+  * @brief  Set  DMA Source Address.
+  * @param  Address: DMA source address
+  * @retval None
+  */
+void DMA_SetSRCAddress(uint32_t Address);
+
+/**
+  * @brief  Set  DMA destination Address.
+  * @param  Address: DMA source address
+  * @retval None
+  */
+void DMA_SetDSRAddress(uint32_t Address); 
+
+/**
+  * @brief  Checks whether the DMACH_MEMCP Channelx flag is set or not.
+  * @param  None
+  * @retval None
+  */
+FlagStatus DMA_GetFlagStatus(void);	
+
+/**
+  * @brief  Clears the  DMACH_MEMCP Channelx's pending flags.
+  * @param  None
+  * @retval Enable or Disable.
+  */
+FunctionalState DMA_IsChannelEnabled(void);
+
+
+ /**
+  * @brief   Clears the DMACH_MEMCP Channelx's interrupt pending bits.
+  * @param  None
+  * @retval None
+  */
+void DMA_ClearITPendingBit(void); 
+
+
+ /**
+  * @brief   ENABLE or DISABLE intterrupt
+  * @param  NewState
+  * @retval None
+  */
+void DMA_ITConfig(FunctionalState NewState);
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_dma.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_dma.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_dma.c	(working copy)
@@ -0,0 +1,64 @@
+#include "yc_dma.h"
+
+#define DMA_Channel   	 DMACH_MEMCP
+#define DMA_CLEAR_IT_BIT_Pos 6
+#define DMA_ENTERIT_BIT_Pos 1
+#define DMA_DATA_COMPLETE_BIT_Pos 0
+
+void DMA_Init(DMA_InitTypeDef* DMA_InitStruct)
+{
+	DMA_SRC_ADDR(DMACH_MEMCP) = DMA_InitStruct->DMA_MemorySourceAddr;
+	DMA_DEST_ADDR(DMACH_MEMCP) = DMA_InitStruct->DMA_MemoryDestAddr;
+	DMA_LEN(DMACH_MEMCP) = (DMA_InitStruct->DMA_BlockSize <<16)|DMA_InitStruct->DMA_BlockSize;	
+}
+
+void DMA_ChannelCmd( FunctionalState NewState)
+{
+	if(NewState != DISABLE)
+	{
+		DMA_START(DMACH_MEMCP)  |= (DMA_ENABLE);
+	}
+	else
+	{
+		DMA_START(DMACH_MEMCP) &= ~(DMA_ENABLE);
+	}
+}
+
+void DMA_SetSRCAddress(uint32_t Address)
+{
+	 DMA_SRC_ADDR(DMACH_MEMCP) = Address;	
+}
+
+void DMA_SetDSRAddress(uint32_t Address)
+{
+	DMA_DEST_ADDR(DMACH_MEMCP) = Address;
+}
+
+FunctionalState DMA_IsChannelEnabled(void)
+{
+	if(1==(DMA_START(DMACH_MEMCP)&DMA_ENABLE)) 
+	{	
+	 	return ENABLE;
+	}
+	 else
+	{
+		return DISABLE;
+	}
+}
+
+FlagStatus DMA_GetFlagStatus(void )
+{
+	return (FlagStatus )((DMA_STATUS(DMACH_MEMCP) & (1<<DMA_DATA_COMPLETE_BIT_Pos)));	
+}
+
+ 
+void DMA_ClearITPendingBit(void)
+{
+	DMA_START(DMACH_MEMCP)|=(1<<DMA_CLEAR_IT_BIT_Pos);
+}
+
+void DMA_ITConfig(FunctionalState NewState)
+{
+	DMA_CONFIG(DMACH_MEMCP) &= ~(1<<DMA_ENTERIT_BIT_Pos);
+	DMA_CONFIG(DMACH_MEMCP) |= (NewState<<DMA_ENTERIT_BIT_Pos);	
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_encflash_bulk.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_encflash_bulk.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_encflash_bulk.h	(working copy)
@@ -0,0 +1,41 @@
+/*
+File Name    : yc_encflash_bulk.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/08/24
+Description  : encflash operation flash for bulk
+*/
+ 
+#ifndef __ENCFLASH_BULK_H__
+#define __ENCFLASH_BULK_H__
+
+#include "yc3121.h"
+
+
+/**
+  * @brief  enc write flash for bulk init
+  * @param  none
+  * @return none
+  */
+void enc_write_flash_bulk_init();
+
+
+/**
+  * @brief  enc write flash for bulk
+  * @param  flash_addr, tx buf, len
+  * @param  isend:The last packet of data if TRUE,other is FALSE
+  * @return none
+  */
+void enc_write_flash_bulk(uint32_t flash_addr, uint8_t *buf, uint32_t len,uint8_t isend);
+
+
+/**
+  * @brief  get qspi bulk lib version
+  * @param  none
+  * @return lib version:
+	*											bit0~bit15:low version number
+	*											bit0~bit15:high version number
+  */
+uint32_t qspi_bulk_GetVersion(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_encflash_bulk.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/Librarier/sdk/yc_encflash_bulk.lib
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/Librarier/sdk/yc_exti.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_exti.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_exti.h	(working copy)
@@ -0,0 +1,90 @@
+/*
+File Name    : yc_exti.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/04
+Description  : exit encapsulation.
+*/
+
+#ifndef __YC_EXTI_H__
+#define __YC_EXTI_H__
+
+#include "yc3121.h"
+#include "yc_gpio.h"
+
+/**
+  * @brief  EXTI Trigger enumeration
+  */
+typedef enum
+{
+    EXTI_Trigger_Off            = 0,
+    EXTI_Trigger_Rising         = 1,
+    EXTI_Trigger_Falling        = 2,
+    EXTI_Trigger_Rising_Falling	= 3
+} EXTI_TriggerTypeDef;
+
+#define EXTI_Line0          ((uint32_t)0x0000)  /*!< External interrupt line 0 */
+#define EXTI_Line1          ((uint32_t)0x0001)  /*!< External interrupt line 1 */
+#define EXTI_Line2          ((uint32_t)0x0002)  /*!< External interrupt line 2 */
+#define IS_EXTI_LINE(LINE)  (((LINE) == EXTI_Line0) || \
+                             ((LINE) == EXTI_Line1) || \
+									           ((LINE) == EXTI_Line2))
+
+
+#define EXTI_PinSource0          ((uint16_t)0x0001)  /*!< Pin 0 selected */
+#define EXTI_PinSource1          ((uint16_t)0x0002)  /*!< Pin 1 selected */
+#define EXTI_PinSource2          ((uint16_t)0x0004)  /*!< Pin 2 selected */
+#define EXTI_PinSource3          ((uint16_t)0x0008)  /*!< Pin 3 selected */
+#define EXTI_PinSource4          ((uint16_t)0x0010)  /*!< Pin 4 selected */
+#define EXTI_PinSource5          ((uint16_t)0x0020)  /*!< Pin 5 selected */
+#define EXTI_PinSource6          ((uint16_t)0x0040)  /*!< Pin 6 selected */
+#define EXTI_PinSource7          ((uint16_t)0x0080)  /*!< Pin 7 selected */
+#define EXTI_PinSource8          ((uint16_t)0x0100)  /*!< Pin 8 selected */
+#define EXTI_PinSource9          ((uint16_t)0x0200)  /*!< Pin 9 selected */
+#define EXTI_PinSource10         ((uint16_t)0x0400)  /*!< Pin 10 selected */
+#define EXTI_PinSource11         ((uint16_t)0x0800)  /*!< Pin 11 selected */
+#define EXTI_PinSource12         ((uint16_t)0x1000)  /*!< Pin 12 selected */
+#define EXTI_PinSource13         ((uint16_t)0x2000)  /*!< Pin 13 selected */
+#define EXTI_PinSource14         ((uint16_t)0x4000)  /*!< Pin 14 selected */
+#define EXTI_PinSource15         ((uint16_t)0x8000)  /*!< Pin 15 selected */
+#define EXTI_PinSourceAll        ((uint16_t)0xffff)  /*!< Pin All selected */
+
+#define IS_EXTI_PIN_SOURCE(PIN)  (((((PIN) & ~(uint32_t)0xFFFF)) == 0x00) && ((PIN) != (uint32_t)0x00))
+
+
+#define	EXIT_Num         GPIO_GROUP_NUM
+#define	EXIT_Pin_Num     GPIO_PIN_NUM
+
+/**
+  * @brief  Clear interrupt flag
+  * @param	EXTI_Line:EXTI_Line0...EXTI_Line5
+  * @param	EXTI_PinSource:EXTI_PinSource0...EXTI_PinSource7 or EXTI_PinSourceAll
+  * @retval none
+  */
+void EXTI_ClearITPendingBit(uint32_t EXTI_Line, uint16_t EXTI_PinSource);
+
+/**
+  * @brief  Deinitializes the EXTI registers to default reset values.
+  * @param	none
+  * @retval none
+  */
+void EXTI_DeInit(void);
+
+/**
+  * @brief  get interrupt status
+  * @param	EXTI_Line:EXTI_Line0...EXTI_Line5
+  * @retval none
+  */
+uint16_t EXTI_GetITLineStatus(uint32_t EXTI_Line);
+
+/**
+  * @brief  EXTI LineConfig
+  * @param	EXTI_Line:EXTI_Line0...EXTI_Line5
+  * @param	EXTI_PinSource:EXTI_PinSource0...EXTI_PinSource7 or EXTI_PinSourceAll
+  * @param	EXTI_Trigger:EXTI Trigger mode
+  * @retval none
+  */
+void EXTI_LineConfig(uint32_t EXTI_Line, uint16_t EXTI_PinSource, EXTI_TriggerTypeDef EXTI_Trigger);
+
+#endif	/* __YC_EXTI_H__ */
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_exti.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_exti.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_exti.c	(working copy)
@@ -0,0 +1,190 @@
+#include "yc_exti.h"
+
+static uint16_t ExtiEn[EXIT_Num]                = {0};
+static uint16_t ExtiTrig[EXIT_Num]              = {0};  //Rising or Falling interrupt
+static uint16_t ExtiRisingFallingTrig[EXIT_Num] = {0};	//Rising and Falling interrupt
+static uint16_t ExtiStatus[EXIT_Num]            = {0};
+
+extern void EXTI0_IRQHandler(void);
+extern void EXTI1_IRQHandler(void);
+extern void EXTI2_IRQHandler(void);
+
+void EXTI_ClearITPendingBit(uint32_t EXTI_Line, uint16_t EXTI_PinSource)
+{
+    _ASSERT(IS_EXTI_LINE(EXTI_Line));
+    _ASSERT(IS_EXTI_PIN_SOURCE(EXTI_PinSource));
+
+    uint16_t GpioTrig = GPIO_TRIG_MODE(EXTI_Line);
+
+    if (GpioTrig & EXTI_PinSource)
+    {
+        GpioTrig &= ~EXTI_PinSource;
+    }
+    else
+    {
+        GpioTrig |= EXTI_PinSource;
+    }
+    GPIO_TRIG_MODE(EXTI_Line) = GpioTrig;
+    ExtiStatus[EXTI_Line]    &= ~EXTI_PinSource;
+}
+
+void EXTI_DeInit()
+{
+    uint32_t i;
+    for (i = 0; i < EXIT_Num; i++)
+    {
+        ExtiEn[i]                = 0;
+        GPIO_INTR_EN(i)          = ExtiEn[i];
+        ExtiTrig[i]              = 0;
+        ExtiRisingFallingTrig[i] = 0;
+        ExtiStatus[i]            = 0;
+        GPIO_TRIG_MODE(i)        = ExtiTrig[i];
+    }
+}
+
+uint16_t EXTI_GetITLineStatus(uint32_t EXTI_Line)
+{
+    return ExtiStatus[EXTI_Line];
+}
+
+void EXTI_LineConfig(uint32_t EXTI_Line, uint16_t EXTI_PinSource, EXTI_TriggerTypeDef EXTI_Trigger)
+{
+    _ASSERT(IS_EXTI_LINE(EXTI_Line));
+    _ASSERT(IS_EXTI_PIN_SOURCE(EXTI_PinSource));
+
+    int i;
+    uint16_t TempExtiTrig = GPIO_TRIG_MODE(EXTI_Line);
+
+    for (i = 0; i < EXIT_Num; i++)
+    {
+        if (GPIO_INTR_EN(i) == 0x0000)
+        {
+            ExtiEn[i]                = 0;
+            ExtiTrig[i]              = 0;
+            ExtiRisingFallingTrig[i] = 0;
+            ExtiStatus[i]            = 0;
+        }
+    }
+
+    switch (EXTI_Trigger)
+    {
+    case EXTI_Trigger_Off:
+        ExtiEn[EXTI_Line]      &= ~EXTI_PinSource;
+        GPIO_INTR_EN(EXTI_Line) = ExtiEn[EXTI_Line];
+        break;
+
+    case EXTI_Trigger_Rising:
+        ExtiTrig[EXTI_Line]              &= ~EXTI_PinSource;
+        TempExtiTrig                     &= ~EXTI_PinSource;
+        ExtiRisingFallingTrig[EXTI_Line] &= ~EXTI_PinSource;
+        GPIO_TRIG_MODE(EXTI_Line)         = TempExtiTrig;
+        ExtiEn[EXTI_Line]                |= EXTI_PinSource;
+        GPIO_INTR_EN(EXTI_Line)           = ExtiEn[EXTI_Line];
+        break;
+
+    case EXTI_Trigger_Falling:
+        ExtiTrig[EXTI_Line]              |= EXTI_PinSource;
+        TempExtiTrig                     |= EXTI_PinSource;
+        ExtiRisingFallingTrig[EXTI_Line] &= ~EXTI_PinSource;
+        GPIO_TRIG_MODE(EXTI_Line)         = TempExtiTrig;
+        ExtiEn[EXTI_Line]                |= EXTI_PinSource;
+        GPIO_INTR_EN(EXTI_Line)           = ExtiEn[EXTI_Line];
+        break;
+
+    case EXTI_Trigger_Rising_Falling:
+        ExtiTrig[EXTI_Line] &= ~EXTI_PinSource;
+        for (i = 0; i < GPIO_PIN_NUM; i++)
+        {
+            if (EXTI_PinSource & 1 << i)
+            {
+                if (GPIO_ReadInputDataBit((GPIO_TypeDef)EXTI_Line, 1 << i))
+                {
+                    TempExtiTrig |= 1 << i;
+                }
+                else
+                {
+                    TempExtiTrig &= ~(1 << i);
+                }
+            }
+        }
+        ExtiRisingFallingTrig[EXTI_Line] |= EXTI_PinSource;
+        GPIO_TRIG_MODE(EXTI_Line)         = TempExtiTrig;
+        ExtiEn[EXTI_Line]                |= EXTI_PinSource;
+        GPIO_INTR_EN(EXTI_Line)           = ExtiEn[EXTI_Line];
+        break;
+
+    default:
+        break;
+    }
+}
+
+void GPIO_IRQHandler()
+{
+    disable_intr(INTR_GPIO);
+
+    int i, j;
+
+    for (i = 0; i < EXIT_Num; i++)
+    {
+        for (j = 0; j < EXIT_Pin_Num; j++)
+        {
+            if ((ExtiEn[i] & (1 << j)))//Check whether gpio i interrupt are turned on
+            {
+                if ((((~(GPIO_TRIG_MODE(i))) & (1 << j)) >> j) == GPIO_ReadInputDataBit((GPIO_TypeDef) i, 1 << j))//Check for interruptions
+                {
+
+                    if (ExtiRisingFallingTrig[i] & (1 << j))
+                    {
+                        ExtiStatus[i] |= (1 << j);
+                        switch (i)
+                        {
+                        case EXTI_Line0:
+                            EXTI0_IRQHandler();
+                            break;
+
+                        case EXTI_Line1:
+                            EXTI1_IRQHandler();
+                            break;
+
+                        case EXTI_Line2:
+                            EXTI2_IRQHandler();
+                            break;
+
+                        default:
+                            break;
+                        }
+                        EXTI_ClearITPendingBit(i, 1 << j);
+                    }
+                    else
+                    {
+                        if ((ExtiTrig[i] & (1 << j)) == (GPIO_TRIG_MODE(i) & (1 << j)))
+                        {
+                            ExtiStatus[i] |= (1 << j);
+                            switch (i)
+                            {
+                            case EXTI_Line0:
+                                EXTI0_IRQHandler();
+                                break;
+
+                            case EXTI_Line1:
+                                EXTI1_IRQHandler();
+                                break;
+
+                            case EXTI_Line2:
+                                EXTI2_IRQHandler();
+                                break;
+
+                            default:
+                                break;
+                            }
+                        }
+                        EXTI_ClearITPendingBit(i, 1 << j);
+                    }
+                }
+            }
+        }
+    }
+    enable_intr(INTR_GPIO);
+}
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_gpio.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_gpio.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_gpio.h	(working copy)
@@ -0,0 +1,299 @@
+/*
+File Name    : yc_gpio.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/03
+Description  : gpio encapsulation.
+*/
+
+#ifndef __YC_GPIO_H__
+#define __YC_GPIO_H__
+
+#include "yc3121.h"
+
+/**
+  * @brief Configuration Mode enumeration
+  */
+typedef enum
+{
+    GPIO_Mode_IN_FLOATING = 0x01,
+    GPIO_Mode_IPU         = 0x02,
+    GPIO_Mode_IPD         = 0x03,
+    GPIO_Mode_AIN         = 0x04,
+    GPIO_Mode_Out_PP      = 0x05	/*!<  analog signal mode */
+} GPIO_ModeTypeDef;
+
+#define IS_GPIO_MODE(mode) (((mode) == GPIO_Mode_IN_FLOATING)||\
+                            ((mode) == GPIO_Mode_IPU)||\
+                            ((mode)==GPIO_Mode_IPD)||\
+                            ((mode)==GPIO_Mode_Out_PP)||\
+                            ((mode)==GPIO_Mode_AIN))
+
+/**
+  * @brief Bit_SET and Bit_RESET enumeration
+  */
+typedef enum
+{
+    Bit_RESET = 0,
+    Bit_SET
+} BitAction;
+
+/**
+  * @brief gpio output enumeration
+  */
+typedef enum
+{
+    OutputLow  = 0,
+    OutputHigh = 1
+} GPIO_OutputTypeDef;
+
+#define IS_GPIO_WAKE_MODE(MODE) (((MODE) == GPIO_WakeMode_Now) || \
+									               ((MODE) == GPIO_WakeMode_AfterGlitch))
+
+/**
+  * @brief  GPIO function  enumeration
+  */
+typedef enum
+{
+    INPUT       = GPCFG_INPUT,
+    QSPI_NCS    = GPCFG_QSPI_NCS,
+    QSPI_SCK    = GPCFG_QSPI_SCK,
+    QSPI_IO0    = GPCFG_QSPI_IO0,
+    QSPI_IO1    = GPCFG_QSPI_IO1,
+    QSPI_IO2    = GPCFG_QSPI_IO2,
+    QSPI_IO3    = GPCFG_QSPI_IO3,
+    UART0_TXD   = GPCFG_UART0_TXD,
+    UART0_RXD   = GPCFG_UART0_RXD,
+    UART0_RTS   = GPCFG_UART0_RTS,
+    UART0_CTS   = GPCFG_UART0_CTS,
+    UART1_TXD   = GPCFG_UART1_TXD,
+    UART1_RXD   = GPCFG_UART1_RXD,
+    UART1_RTS   = GPCFG_UART1_RTS,
+    UART1_CTS   = GPCFG_UART1_CTS,
+    PWM_OUT0    = GPCFG_PWM_OUT0,
+    PWM_OUT1    = GPCFG_PWM_OUT1,
+    PWM_OUT2    = GPCFG_PWM_OUT2,
+    PWM_OUT3    = GPCFG_PWM_OUT3,
+    PWM_OUT4    = GPCFG_PWM_OUT4,
+    PWM_OUT5    = GPCFG_PWM_OUT5,
+    PWM_OUT6    = GPCFG_PWM_OUT6,
+    PWM_OUT7    = GPCFG_PWM_OUT7,
+    PWM_OUT8    = GPCFG_PWM_OUT8,
+    SPID0_NCS   = GPCFG_SPID0_NCS,
+    SPID0_SCK   = GPCFG_SPID0_SCK,
+    SPID0_MOSI  = GPCFG_SPID0_MOSI,
+    SPID0_SDIO  = GPCFG_SPID0_SDIO,
+    SPID0_MISO  = GPCFG_SPID0_MISO,
+    SPID0_NCSIN = GPCFG_SPID0_NCSIN,
+    SPID0_SCKIN = GPCFG_SPID0_SCKIN,
+    SPID1_NCS   = GPCFG_SPID1_NCS,
+    SPID1_SCK   = GPCFG_SPID1_SCK,
+    SPID1_MOSI  = GPCFG_SPID1_MOSI,
+    SPID1_SDIO  = GPCFG_SPID1_SDIO,
+    SPID1_MISO  = GPCFG_SPID1_MISO,
+    SPID1_NCSIN = GPCFG_SPID1_NCSIN,
+    SPID1_SCKIN = GPCFG_SPID1_SCKIN,
+    NFC_CLK_OUT = GPCFG_NFC_CLK_OUT,
+    SCI7816_IO  = GPCFG_SCI7816_IO,
+    IIC_SCL     = GPCFG_IIC_SCL,
+    IIC_SDA     = GPCFG_IIC_SDA,
+    JTAG_SWCLK  = GPCFG_JTAG_SWCLK,
+    JTAG_SWDAT  = GPCFG_JTAG_SWDAT,
+    OUTPUT_LOW  = GPCFG_OUTPUT_LOW,
+    OUTPUT_HIGH = GPCFG_OUTPUT_HIGH,
+    PULL_UP     = GPCFG_PU,
+    PULL_DOWN   = GPCFG_PD,
+    ANALOG      = GPCFG_ANALOG
+} GPIO_FunTypeDef;
+
+#define GPIO_Pin_0      ((uint16_t)0x0001)  /*!< Pin 0 selected */
+#define GPIO_Pin_1      ((uint16_t)0x0002)  /*!< Pin 1 selected */
+#define GPIO_Pin_2      ((uint16_t)0x0004)  /*!< Pin 2 selected */
+#define GPIO_Pin_3      ((uint16_t)0x0008)  /*!< Pin 3 selected */
+#define GPIO_Pin_4      ((uint16_t)0x0010)  /*!< Pin 4 selected */
+#define GPIO_Pin_5      ((uint16_t)0x0020)  /*!< Pin 5 selected */
+#define GPIO_Pin_6      ((uint16_t)0x0040)  /*!< Pin 6 selected */
+#define GPIO_Pin_7      ((uint16_t)0x0080)  /*!< Pin 7 selected */
+#define GPIO_Pin_8      ((uint16_t)0x0100)  /*!< Pin 8 selected */
+#define GPIO_Pin_9      ((uint16_t)0x0200)  /*!< Pin 9 selected */
+#define GPIO_Pin_10     ((uint16_t)0x0400)  /*!< Pin 10 selected */
+#define GPIO_Pin_11     ((uint16_t)0x0800)  /*!< Pin 11 selected */
+#define GPIO_Pin_12     ((uint16_t)0x1000)  /*!< Pin 12 selected */
+#define GPIO_Pin_13     ((uint16_t)0x2000)  /*!< Pin 13 selected */
+#define GPIO_Pin_14     ((uint16_t)0x4000)  /*!< Pin 14 selected */
+#define GPIO_Pin_15     ((uint16_t)0x8000)  /*!< Pin 15 selected */
+#define GPIO_Pin_All    ((uint16_t)0xffff)  /*!< Pin All selected */
+
+#define IS_GPIO_PIN(PIN) (((((PIN) & ~(uint16_t)0xFFFF)) == 0x00) && ((PIN) != (uint16_t)0x00))
+
+#define IS_GET_GPIO_PIN(PIN) (((PIN) == GPIO_Pin_0) || \
+                              ((PIN) == GPIO_Pin_1) || \
+                              ((PIN) == GPIO_Pin_2) || \
+                              ((PIN) == GPIO_Pin_3) || \
+                              ((PIN) == GPIO_Pin_4) || \
+                              ((PIN) == GPIO_Pin_5) || \
+                              ((PIN) == GPIO_Pin_6) || \
+                              ((PIN) == GPIO_Pin_7) || \
+                              ((PIN) == GPIO_Pin_8) || \
+                              ((PIN) == GPIO_Pin_9) || \
+                              ((PIN) == GPIO_Pin_10) || \
+                              ((PIN) == GPIO_Pin_11) || \
+                              ((PIN) == GPIO_Pin_12) || \
+                              ((PIN) == GPIO_Pin_13) || \
+                              ((PIN) == GPIO_Pin_14) || \
+                              ((PIN) == GPIO_Pin_15))
+
+/**
+  * @brief  GPIO group enumeration
+  */
+typedef enum
+{
+    GPIOA = 0,
+    GPIOB,
+    GPIOC
+} GPIO_TypeDef;
+
+#define ISGPIOGROUP(groupx)	(groupx<GPIO_GROUP_NUM)
+
+/**
+  * @brief  GPIO Init structure definition
+  */
+typedef struct
+{
+    uint16_t         GPIO_Pin;
+    GPIO_ModeTypeDef GPIO_Mode;
+} GPIO_InitTypeDef;
+
+/**
+ * @brief  config gpio function(Only one can be configured at a time)
+ *
+ * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+ *
+ * @param  GPIO_Pin: select the pin to read.(GPIO_Pin_0...GPIO_Pin_15)(Only one can be configured at a time)
+ *
+ * @param  function:gpio function
+ *
+ * @retval none
+ */
+void GPIO_Config(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, GPIO_FunTypeDef function);
+
+/**
+ * @brief  gpio mode Init
+ *
+ * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+ *
+ * @param  GPIO_InitStruct:GPIO_InitStruct
+ *
+ * @retval none
+ */
+void GPIO_Init(GPIO_TypeDef GPIOx, GPIO_InitTypeDef *GPIO_InitStruct);
+
+/**
+  * @brief
+  *
+  * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+  *
+  * @param  GPIO_Pin:  select the pin to read.(GPIO_Pin_0...GPIO_Pin_7)
+  *
+  * @param  NewState: new state of the port pin Pull Up.(ENABLE or DISABLE)
+  *
+  * @retval
+  */
+void GPIO_PullUpCmd(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, FunctionalState NewState);
+
+/**
+  * @brief  Reads the GPIO input data(status) for byte.
+  *
+  * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+  *
+  * @retval GPIO input data(status).
+  */
+uint16_t GPIO_ReadInputData(GPIO_TypeDef GPIOx);
+
+/**
+ * @brief  Reads the GPIO input data(status) for bit.
+ *
+ * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+ *
+ * @param  GPIO_Pin:  select the pin to read.(GPIO_Pin_0...GPIO_Pin_15)
+ *
+ * @retval The input status
+ */
+uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin);
+
+/**
+  * @brief  Reads the GPIO output data(status) for byte.
+  *
+  * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+  *
+  * @retval GPIO output data(status).
+  */
+uint16_t GPIO_ReadOutputData(GPIO_TypeDef GPIOx);
+
+/**
+ * @brief  Reads the GPIO output data(status) for bit.
+ *
+ * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+ *
+ * @param  GPIO_Pin:  select the pin to read.(GPIO_Pin_0...GPIO_Pin_15)
+ *
+ * @retval The output status
+ */
+uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin);
+
+/**
+  * @brief  Clears the selected pin(only output mode)
+  *
+  * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+  *
+  * @param  GPIO_Pin:  select the pin to read.(GPIO_Pin_0...GPIO_Pin_15)
+  *
+  * @retval None
+  */
+void GPIO_ResetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin);
+
+/**
+  * @brief  sets the selected pin(only output mode)
+  *
+  * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+  *
+  * @param  GPIO_Pin:  select the pin to read.(GPIO_Pin_0...GPIO_Pin_15)
+  *
+  * @retval None
+  */
+void GPIO_SetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin);
+
+/**
+  * @brief  init GPIO_InitStruct to default value.
+  * @param  GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure which will be initialized.
+  * @retval None
+  */
+void GPIO_StructInit(GPIO_InitTypeDef *GPIO_InitStruct);
+
+/**
+  * @brief  Writes data to the GPIO group port(only output mode)
+  *
+  * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+  *
+  * @param  value: specifies the value to be written to the port output data register.
+  *
+  * @retval None
+  */
+void GPIO_Write(GPIO_TypeDef GPIOx, uint16_t value);
+
+/**
+  * @brief  Sets or clears the selected data port bit(only output mode)
+  *
+  * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+  *
+  * @param  GPIO_Pin:  select the pin to read.(GPIO_Pin_0...GPIO_Pin_7)
+  *
+  * @param  BitVal: specifies the value to be written to the selected bit.
+  *   This parameter can be one of the BitAction enum values:
+  *     @arg Bit_RESET: to clear the port pin
+  *     @arg Bit_SET: to set the port pin
+  * @retval None
+  */
+void GPIO_WriteBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
+
+#endif	/* __YC_GPIO_H__ */
Index: BT_doublebyte/sdk/Librarier/sdk/yc_gpio.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_gpio.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_gpio.c	(working copy)
@@ -0,0 +1,212 @@
+/*
+File Name    : yc_gpio.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/03
+Description  : gpio encapsulation.
+*/
+
+#include "yc_gpio.h"
+#include "yc_lpm.h"
+
+void GPIO_Config(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, GPIO_FunTypeDef function)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+    _ASSERT(IS_GET_GPIO_PIN(GPIO_Pin));
+
+    int i;
+
+    for (i = 0; i < GPIO_PIN_NUM; i++)
+    {
+        if (GPIO_Pin & 1 << i)
+            GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) = function;
+    }
+}
+
+void GPIO_Init(GPIO_TypeDef GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+    _ASSERT(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
+    _ASSERT(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
+
+    int i;
+
+    switch (GPIO_InitStruct->GPIO_Mode)
+    {
+    case GPIO_Mode_IN_FLOATING:
+        for (i = 0; i < GPIO_PIN_NUM; i++)
+        {
+            if (GPIO_InitStruct->GPIO_Pin & 1 << i)
+                GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) = 0x00;
+        }
+        break;
+
+    case GPIO_Mode_IPU:
+        for (i = 0; i < GPIO_PIN_NUM; i++)
+        {
+            if (GPIO_InitStruct->GPIO_Pin & 1 << i)
+                GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) = 0x40;
+        }
+        break;
+
+    case GPIO_Mode_IPD:
+        for (i = 0; i < GPIO_PIN_NUM; i++)
+        {
+            if (GPIO_InitStruct->GPIO_Pin & 1 << i)
+                GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) = 0x80;
+        }
+        break;
+
+    case GPIO_Mode_AIN:
+        for (i = 0; i < GPIO_PIN_NUM; i++)
+        {
+            if (GPIO_InitStruct->GPIO_Pin & 1 << i)
+                GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) = 0xC0;
+        }
+        break;
+
+    case GPIO_Mode_Out_PP:
+        for (i = 0; i < GPIO_PIN_NUM; i++)
+        {
+            if (GPIO_InitStruct->GPIO_Pin & 1 << i)
+                GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) = 0x3E;
+        }
+        break;
+
+    default:
+        break;
+    }
+}
+
+void GPIO_PullUpCmd(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, FunctionalState NewState)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+    _ASSERT(IS_GET_GPIO_PIN(GPIO_Pin));
+
+    int i;
+
+    for (i = 0; i < GPIO_PIN_NUM; i++)
+    {
+        if (GPIO_Pin & 1 << i)
+        {
+            if (NewState == ENABLE)
+            {
+                GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) |= 1 << 6;
+            }
+            else if (NewState == DISABLE)
+            {
+                GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) &= ~(1 << 6);
+            }
+        }
+    }
+}
+
+uint16_t GPIO_ReadInputData(GPIO_TypeDef GPIOx)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+
+    return GPIO_IN(GPIOx);
+}
+
+uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+    _ASSERT(IS_GET_GPIO_PIN(GPIO_Pin));
+
+    if (GPIO_IN(GPIOx) & GPIO_Pin)
+    {
+        return (uint8_t)0x01;
+    }
+    else
+    {
+        return (uint8_t)0x00;
+    }
+}
+
+uint16_t GPIO_ReadOutputData(GPIO_TypeDef GPIOx)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+
+    return GPIO_IN(GPIOx);
+}
+
+uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+    _ASSERT(IS_GET_GPIO_PIN(GPIO_Pin));
+
+    if (GPIO_IN(GPIOx) & GPIO_Pin)
+    {
+        return (uint8_t)0x01;
+    }
+    else
+    {
+        return (uint8_t)0x00;
+    }
+}
+
+void GPIO_ResetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+    _ASSERT(IS_GET_GPIO_PIN(GPIO_Pin));
+
+    int i;
+    uint8_t Temp;
+
+    for (i = 0; i < GPIO_PIN_NUM; i++)
+    {
+        if (GPIO_Pin & 1 << i)
+        {
+            Temp = GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i);
+            Temp |= 0x3F; //00111111
+            Temp &= 0xFE; //11111110
+            GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) = Temp;
+        }
+    }
+}
+
+void GPIO_SetBits(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+    _ASSERT(IS_GET_GPIO_PIN(GPIO_Pin));
+
+    int i;
+
+    for (i = 0; i < GPIO_PIN_NUM; i++)
+    {
+        if (GPIO_Pin & 1 << i)
+            GPIO_CONFIG(GPIOx * GPIO_PIN_NUM + i) |= 0x3F; //00111111
+    }
+}
+
+void GPIO_StructInit(GPIO_InitTypeDef *GPIO_InitStruct)
+{
+    GPIO_InitStruct->GPIO_Pin  = GPIO_Pin_All;
+    GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;
+}
+
+void GPIO_Write(GPIO_TypeDef GPIOx, uint16_t value)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+
+    int i;
+
+    for (i = 0; i < GPIO_PIN_NUM; i++)
+    {
+        if (BIT_GET(value, i))
+            GPIO_SetBits(GPIOx, 1 << i);
+        else
+            GPIO_ResetBits(GPIOx, 1 << i);
+    }
+}
+
+void GPIO_WriteBit(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
+{
+    _ASSERT(ISGPIOGROUP(GPIOx));
+    _ASSERT(IS_GET_GPIO_PIN(GPIO_Pin));
+
+    if (BitVal == Bit_SET)
+        GPIO_SetBits(GPIOx, GPIO_Pin);
+    else if (BitVal == Bit_RESET)
+        GPIO_ResetBits(GPIOx, GPIO_Pin);
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_iic.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_iic.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_iic.h	(working copy)
@@ -0,0 +1,57 @@
+/*
+File Name    : yc_iic.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/7
+Description  : IIC encapsulation.
+*/
+
+#ifndef __YC_IIC_H__
+#define __YC_IIC_H__
+
+#include "yc3121.h"
+
+/**
+  *@brief IIC Core parameters struct
+  */
+typedef struct
+{
+    uint8_t scll;	/*!< Specifies the Clock Pulse Width Low. */
+    uint8_t sclh;   /*!< Specifies the Clock Pulse Width High. */
+    uint8_t stsu;   /*!< Specifies the Start Setup Time. */
+    uint8_t sthd;   /*!< Specifies the Start Hold Time. */
+    uint8_t sosu;   /*!< Specifies the Stop Setup Time. */
+    uint8_t dtsu;   /*!< Specifies the Data Setup Time. */
+    uint8_t dthd;   /*!< Specifies the Data Hold Time. */
+} IIC_InitTypeDef;
+
+/**
+  * @brief	Initializes the IIC peripheral according to the specified
+  *        	parameters in the IIC_InitTypeDef.
+  * @param  IIC_InitStruct: pointer to a IIC_InitTypeDef structure
+  *         that contains the configuration information for the specified IIC
+  *         peripheral.
+  * @retval None
+  */
+void IIC_Init(IIC_InitTypeDef *IIC_InitStruct);
+
+/**
+  * @brief	Write slave devices.
+  * @param  Src: pointer to the buffer that contains the data you want to send.
+  * @param  len: the length of send data
+  * @note	  After writting slave device, must delay a period of time before reading slave device.
+  * @retval None
+  */
+void IIC_SendData(uint8_t *Src, uint16_t len);
+
+/**
+  * @brief	Read slave devices.
+  * @param  Src: pointer to the buffer that contains the data you want to send.
+  * @param  len: the length of send data
+  * @param  Dest: pointer to the buffer that contains the data received from slaver.
+  * @param	Destlen: the length of received data
+  * @retval None
+  */
+void IIC_ReceiveData(uint8_t *Src, uint16_t Srclen, uint8_t *Dest, uint16_t Destlen);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_iic.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_iic.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_iic.c	(working copy)
@@ -0,0 +1,55 @@
+/*
+File Name    : yc_iic.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/7
+Description  : IIC encapsulation.
+*/
+
+#include "yc_iic.h"
+
+#define IIC_RESTART_BIT     24
+#define IIC_SCLL_BIT        0
+#define IIC_SCLH_BIT        8
+#define IIC_STSU_BIT        16
+#define IIC_STHD_BIT        24
+#define IIC_SOSU_BIT        0
+#define IIC_DTSU_BIT        8
+#define IIC_DTHD_BIT        16
+
+void IIC_Init(IIC_InitTypeDef *IIC_InitStruct)
+{
+    IICD_DELAY = (IIC_InitStruct->sthd << IIC_STHD_BIT) | (IIC_InitStruct->stsu << IIC_STSU_BIT) | (IIC_InitStruct->sclh << IIC_SCLH_BIT) | (IIC_InitStruct->scll << IIC_SCLL_BIT);
+    IICD_CTRL  = (IIC_InitStruct->dthd << IIC_DTHD_BIT) | (IIC_InitStruct->dtsu << IIC_DTSU_BIT) | (IIC_InitStruct->sosu << IIC_SOSU_BIT);
+}
+
+void IIC_SendData(uint8_t *Src, uint16_t len)
+{
+    IICD_CTRL &= ~(1 << IIC_RESTART_BIT);
+
+    DMA_START(DMACH_IICD)   |= (1 << DMA_RESET_BIT);
+    DMA_START(DMACH_IICD)   &= ~(1 << DMA_RESET_BIT);
+    DMA_SRC_ADDR(DMACH_IICD) = (int)Src;
+    DMA_LEN(DMACH_IICD)      = len << 16;
+    DMA_START(DMACH_IICD)    = (1 << DMA_START_BIT);
+
+    while (!(DMA_STATUS(DMACH_IICD) & 1))
+    {
+    }
+}
+
+void IIC_ReceiveData(uint8_t *Src, uint16_t Srclen, uint8_t *Dest, uint16_t Destlen)
+{
+    IICD_CTRL |= 1 << IIC_RESTART_BIT;
+
+    DMA_START(DMACH_IICD)    |= (1 << DMA_RESET_BIT);
+    DMA_START(DMACH_IICD)    &= ~(1 << DMA_RESET_BIT);
+    DMA_SRC_ADDR(DMACH_IICD)  = (int)Src;
+    DMA_DEST_ADDR(DMACH_IICD) = (int)Dest;
+    DMA_LEN(DMACH_IICD)       = Srclen << 16 | Destlen;
+    DMA_START(DMACH_IICD)     = (1 << DMA_START_BIT);
+
+    while (!(DMA_STATUS(DMACH_IICD) & 1))
+    {
+    }
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_ipc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_ipc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_ipc.h	(working copy)
@@ -0,0 +1,118 @@
+#ifndef __YC_IPC_H__
+#define __YC_IPC_H__
+
+#include "yc3121.h"
+#include "yc_timer.h"
+#include "bt_code.h"
+#include "misc.h"
+#include "yc_lpm.h"
+
+#define IPCREVSIZE                 256
+#define HW_REG_8BIT(reg, value)    (*((volatile uint8_t *)((uint32_t)reg)) = value)
+#define HR_REG_8BIT(reg)           (*(volatile uint8_t *)((uint32_t)reg))
+#define HR_REG_16BIT(reg)          ((uint16_t)(HR_REG_8BIT(reg) |((HR_REG_8BIT(reg+1)<<8)&0xff00)))
+#define HW_REG_16BIT(reg,value)    do{HW_REG_8BIT(reg,value&0x00ff);HW_REG_8BIT(reg + 1,value>>8);}while(0)
+#define HR_IPC_REG_8BIT(reg)       HR_REG_8BIT(reg|M0_BASE_ADDR)
+#define HW_IPC_REG_8BIT(reg,value) HW_REG_8BIT(reg|M0_BASE_ADDR,value)
+
+#define RB_UPDATE_PTR(p,s,e)       ((p) == (e))?((p)=(s)):((p)++)
+#define M0_BASE_ADDR               0xC0000
+
+#define HR_BT2M0IPC_REG_8BIT(reg)  HR_REG_8BIT(reg|0x20000)
+
+#define MEM_SPP_FLOWCTRL_FLAG_ADDR    (0xc453d)
+#define MEM_SPP_FLOWCTRL_FLAG_VALUE   (0x01)	//0x00:disable flowctrl  0x01:enable flowctrl
+
+
+#define MEM_RFCOMM_LMP_DIS_FLAG_ADDR	(0xc4acf)
+#define MEM_RFCOMM_LMP_DIS_FLAG_VALUE	(0x00)	//0x00:?? rfcomm disconnected ???lmp ???  0x01:??rfcomm disconnected??lmp
+
+
+
+#pragma pack(1)
+typedef struct
+{
+    uint16_t IpcStartAddr;
+    uint16_t IpcEndAddr;
+    uint16_t ReadPtr;
+    uint16_t WrtiePtr;
+} IPC_TypeDef;
+#pragma pack()
+
+/**
+  * @brief  yichip HCI CMD Structure definition
+  */
+#pragma pack(1)
+typedef struct
+{
+    uint8_t type;
+    uint8_t opcode;
+    uint16_t DataLen;
+    uint8_t *p_data;
+} HCI_TypeDef;
+#pragma pack()
+
+/**
+  * @brief   Ipc send data
+	*
+  * @param   IpcData: HCI_TypeDef
+  *
+  * @retval	 SUCCESS or ERROR
+  */
+void IPC_TxData(HCI_TypeDef *IpcData);
+
+/**
+  * @brief   Ipc Put Bt Data
+	*
+  * @param   *buf: Conform to format HCI_TypeDefs
+  *
+	* @param   size: *buf data len(bte),max value is 0xff+3=258
+  *
+  * @retval	 TRUE or FALSE
+  */
+Boolean IPC_PutBtData(const void *buf, uint32_t size);
+
+/**
+  * @brief   IpcReadBtData(get A complete package)
+	*
+  * @param   IpcData: HCI_TypeDef
+  *
+  * @retval	 TRUE or FALSE
+  */
+Boolean IPC_ReadBtData(HCI_TypeDef *IpcData);
+Boolean IPC_ReadBtData_DMA(HCI_TypeDef *IpcData);
+
+/**
+  * @brief   get opcode val
+	*
+  * @param   none
+  *
+  * @retval	 val*/
+uint8_t IPC_ReadIPC_Opcode(void);
+/**
+  * @brief   get ipc buf available size
+	*
+  * @param   none
+  *
+  * @retval	 available size
+  */
+uint16_t IPC_get_available_size(void);
+
+/**
+  * @brief   get ipc buf available size
+	*
+  * @param   none
+  *
+  * @retval	 TRUE:have data  FALSE:not data
+  */
+Boolean IPC_have_data(void);
+
+void IpcInit(void);
+
+void PrintHCIPack(HCI_TypeDef *msg, const char *str);
+    
+
+
+#endif
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_ipc.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_ipc.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_ipc.c	(working copy)
@@ -0,0 +1,369 @@
+#include "yc_ipc.h"
+
+//#define	IPC_DEBUG
+
+IPC_TypeDef *IpcRx = (IPC_TypeDef *)(IPC_RX_START_ADDR);
+IPC_TypeDef *IpcTx = (IPC_TypeDef *)(IPC_TX_START_ADDR);
+
+static void noinline _dma_start(int ch, const void *src, int srclen, void *dest, int dstlen)
+{
+    DMA_SRC_ADDR(ch)  = (int)src;
+    DMA_DEST_ADDR(ch) = (int)dest;
+    DMA_LEN(ch)       = srclen << 16 | dstlen;
+    DMA_START(ch)     = 0x80;
+}
+
+void noinline _dma_wait(int ch)
+{
+    while (!(DMA_STATUS(ch) & 1));
+}
+
+void _dmacopy(void *dest, void *src, int len)
+{
+    _dma_start(DMACH_MEMCP, src, len, dest, len);
+    _dma_wait(DMACH_MEMCP);
+}
+
+Boolean IPC_have_data()
+{
+    return HR_REG_16BIT(&IpcRx->ReadPtr) != HR_REG_16BIT(&IpcRx->WrtiePtr) ? TRUE : FALSE;
+}
+
+uint16_t IPC_get_available_size()
+{
+    uint16_t readtx = HR_REG_16BIT(&IpcTx->ReadPtr);
+    uint16_t wrtptr = HR_REG_16BIT(&IpcTx->WrtiePtr);
+    uint16_t ipcendaddr = HR_REG_16BIT(&IpcTx->IpcEndAddr);
+    uint16_t ipcstartaddr = HR_REG_16BIT(&IpcTx->IpcStartAddr);
+
+    if (readtx > wrtptr)
+    {
+        return readtx - wrtptr;
+    }
+    else
+    {
+        return ((ipcendaddr - ipcstartaddr + 1) - (readtx - wrtptr));
+    }
+}
+
+void IPC_TxData(HCI_TypeDef *IpcData)
+{
+	#ifdef IPC_DEBUG
+	PrintHCIPack(IpcData,"tx");
+	#endif
+    WAKEUP_BT |= (1 << WAKEUP_BT_FLAG);
+    IPC_HOLD_BT  = 1;
+    //delay_ms(10);
+    uint16_t Wptr  = HR_REG_16BIT(&IpcTx->WrtiePtr);
+    uint16_t Len   = IpcData->DataLen + 3;
+    uint8_t *Rptr = (uint8_t *)IpcData;
+    while (Len--)
+    {
+        HW_IPC_REG_8BIT(Wptr, *Rptr++);
+        RB_UPDATE_PTR(Wptr, HR_REG_16BIT(&IpcTx->IpcStartAddr),  HR_REG_16BIT(&IpcTx->IpcEndAddr));
+        if (Len == IpcData->DataLen)
+            Rptr = IpcData->p_data;
+    }
+
+    HW_REG_16BIT(&IpcTx->WrtiePtr, (uint32_t)Wptr);
+    IPC_HOLD_BT = 0;
+    WAKEUP_BT &= ~(1 << WAKEUP_BT_FLAG);
+}
+
+Boolean IPC_PutBtData(const void *buf, uint32_t size)
+{
+    if (size == 0 || size > 258)
+    {
+        return FALSE;
+    }
+    WAKEUP_BT |= (1 << WAKEUP_BT_FLAG);
+    IPC_HOLD_BT  = 1;
+    delay_ms(10);
+    uint16_t Wptr  = HR_REG_16BIT(&IpcTx->WrtiePtr);
+    uint8_t *Rptr = (uint8_t *)buf;
+    while (size--)
+    {
+        HW_IPC_REG_8BIT(Wptr, *Rptr++);
+        RB_UPDATE_PTR(Wptr, HR_REG_16BIT(&IpcTx->IpcStartAddr),  HR_REG_16BIT(&IpcTx->IpcEndAddr));
+    }
+
+    HW_REG_16BIT(&IpcTx->WrtiePtr, (uint32_t)Wptr);
+    IPC_HOLD_BT = 0;
+    WAKEUP_BT &= ~(1 << WAKEUP_BT_FLAG);
+    return TRUE;
+}
+
+Boolean IPC_ReadBtData(HCI_TypeDef *IpcData)
+{
+	uint16_t DataLenTemp;
+    if (HR_REG_16BIT(&IpcRx->ReadPtr) != HR_REG_16BIT(&IpcRx->WrtiePtr))
+    {
+        uint16_t Rptr = HR_REG_16BIT(&IpcRx->ReadPtr);
+        IpcData->type = HR_IPC_REG_8BIT(Rptr);
+        RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+        IpcData->opcode = HR_IPC_REG_8BIT(Rptr);
+        RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+        DataLenTemp = HR_IPC_REG_8BIT(Rptr);
+        RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+        IpcData->DataLen = HR_IPC_REG_8BIT(Rptr);
+        RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+		IpcData->DataLen <<=8;
+		IpcData->DataLen += DataLenTemp;
+
+        for (uint16_t i = 0; i < IpcData->DataLen; i++)
+        {
+            IpcData->p_data[i] = HR_IPC_REG_8BIT(Rptr);
+            RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+        }
+        HW_REG_16BIT(&IpcRx->ReadPtr, (uint32_t)Rptr);
+		#ifdef IPC_DEBUG
+		PrintHCIPack(IpcData,"rx");
+		#endif
+        return TRUE;
+    }
+    else
+    {
+        return FALSE;
+    }
+}
+
+Boolean IPC_ReadBtData_DMA(HCI_TypeDef *IpcData)
+{
+	uint16_t DataLenTemp,ret,index=0;
+    uint16_t start_addr = 0, end_addr = 0;
+    int addr;
+    
+    if (HR_REG_16BIT(&IpcRx->ReadPtr) != HR_REG_16BIT(&IpcRx->WrtiePtr))
+    {
+        uint32_t Rptr = HR_REG_16BIT(&IpcRx->ReadPtr);
+        if (Rptr <= 0x1ffb)
+        {
+            IpcData->type = HR_IPC_REG_8BIT(Rptr++);
+            IpcData->opcode = HR_IPC_REG_8BIT(Rptr++);
+            DataLenTemp = HR_IPC_REG_8BIT(Rptr++);
+            IpcData->DataLen = HR_IPC_REG_8BIT(Rptr++);
+            HW_REG_16BIT(&IpcRx->ReadPtr, (uint32_t)(Rptr));
+        }
+        else
+        {
+            IpcData->type = HR_IPC_REG_8BIT(Rptr);
+            RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+            IpcData->opcode = HR_IPC_REG_8BIT(Rptr);
+            RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+            DataLenTemp = HR_IPC_REG_8BIT(Rptr);
+            RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+            IpcData->DataLen = HR_IPC_REG_8BIT(Rptr);
+            RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+        }
+		IpcData->DataLen <<=8;
+		IpcData->DataLen += DataLenTemp;
+        
+        DataLenTemp = IpcData->DataLen;
+        
+        start_addr = HR_REG_16BIT(&IpcRx->IpcStartAddr);
+        end_addr = HR_REG_16BIT(&IpcRx->IpcEndAddr);
+
+        ret = DataLenTemp + Rptr - 1;
+
+        if (ret >= end_addr)
+        {
+            DataLenTemp = end_addr - Rptr + 1;
+            addr = Rptr | 0xc0000;
+            
+            //copy first
+            _dmacopy((byte *)&IpcData->p_data[0], (byte *)addr, DataLenTemp);
+            HW_REG_16BIT(&IpcRx->ReadPtr, (uint32_t)start_addr);
+            
+            Rptr = start_addr;
+            
+            index = DataLenTemp;
+            
+            DataLenTemp = IpcData->DataLen - DataLenTemp;
+        }
+        if (DataLenTemp > 0)
+        {
+            addr = Rptr | 0xc0000;
+            _dmacopy((byte *)&IpcData->p_data[index], (byte *)addr, DataLenTemp);
+            HW_REG_16BIT(&IpcRx->ReadPtr, (uint32_t)(Rptr+DataLenTemp));
+        }
+
+		#ifdef IPC_DEBUG
+		PrintHCIPack(IpcData,"rx");
+		#endif
+        return TRUE;
+    }
+    else
+    {
+        return FALSE;
+    }
+}
+
+uint8_t IPC_ReadIPC_Opcode(void)
+{
+    uint8_t val = 0;
+    
+    uint16_t Rptr = HR_REG_16BIT(&IpcRx->ReadPtr);
+    if (Rptr != 0x1fff)
+    {
+        val = HR_IPC_REG_8BIT(Rptr++);    //type
+        val = HR_IPC_REG_8BIT(Rptr);    //opcode
+    }
+    else
+    {
+        val = HR_IPC_REG_8BIT(Rptr);    //type
+        RB_UPDATE_PTR(Rptr, HR_REG_16BIT(&IpcRx->IpcStartAddr),  HR_REG_16BIT(&IpcRx->IpcEndAddr));
+        val = HR_IPC_REG_8BIT(Rptr);    //opcode
+    }
+    return val;
+}
+
+void _download_btcode(const byte *btcode)
+{
+    int addr, len;
+    btcode += 2;
+    if (GETWORD(btcode) != 0x55aa)
+        return;
+    btcode += 2;
+    enable_clock(CLKCLS_BT);
+    len = GETWORD(btcode);
+    btcode += 2;
+    BT_UCODE_LO   = 0;
+    BT_UCODE_HI   = 0;
+    BT_UCODE_CTRL = 0x80;
+    DMA_CONFIG(DMACH_MEMCP) = 8;
+    _dmacopy((byte *)&BT_UCODE_DATA, (byte *)btcode, len);
+    BT_UCODE_CTRL = 0;
+    btcode       += len;
+    DMA_CONFIG(DMACH_MEMCP) = 0;
+
+    while (GETWORD(btcode) == 0x55aa)
+    {
+        btcode += 2;
+        len  = GETWORD(btcode);
+        btcode += 2;
+        addr = GETWORD(btcode) | 0xc0000;
+        btcode += 2;
+        if(addr==MEM_SPP_FLOWCTRL_FLAG_ADDR && len==0x0004)
+        {
+            byte mem_spp_flowctrl_buf[4];
+            mem_spp_flowctrl_buf[0]=MEM_SPP_FLOWCTRL_FLAG_VALUE;
+            memcpy((byte*)&mem_spp_flowctrl_buf[1],btcode+1,3);
+            _dmacopy((byte *)addr, mem_spp_flowctrl_buf, len);
+        }
+        else if(addr==MEM_RFCOMM_LMP_DIS_FLAG_ADDR && len==0x0001)
+        {
+            byte mem_rfcomm_lmp_dis_flag;
+            mem_rfcomm_lmp_dis_flag=MEM_RFCOMM_LMP_DIS_FLAG_VALUE;
+            _dmacopy((byte *)addr, (byte *)&mem_rfcomm_lmp_dis_flag, len);
+        }
+        else
+        {
+          _dmacopy((byte *)addr, (byte *)btcode, len);
+        }
+        btcode += len;
+    }
+}
+
+//extern uint8_t BT_Wake;
+extern const unsigned char bt_code[];
+
+void erase_memory(void)
+{
+    for (uint32_t i = 0; i < 0x1000; i++)
+    {
+        *(volatile uint8_t *)(0xc0000 + i) = 0;
+        *(volatile uint8_t *)(0xc4000 + i) = 0;
+    }
+}
+#if (VERSIONS == NO_BT)
+static uint16_t get_dpll_status(void)
+{
+    uint16_t addr = 0;
+    addr  = (*(uint8_t *)(0xc800e));
+    addr += (*(uint8_t *)(0xc800f)) << 8;
+    return addr;
+}
+
+static Boolean is_dpll_opend(void)
+{
+    uint16_t addr =  get_dpll_status();
+
+    Boolean ret = FALSE;
+
+    if ((0x4c77 == addr) || (0x4c78 == addr) || (0x4c79 == addr))
+    {
+        ret = TRUE;
+    }
+    else
+    {
+        ret = FALSE;
+    }
+    MyPrintf("is_dpll_opend=%x-%x", addr, ret);
+    return ret;
+}
+#endif
+
+Boolean ipc_inited = FALSE;
+void IpcInit(void)
+{
+#if (VERSIONS == EXIST_BT)
+    if (ipc_inited == FALSE)
+    {
+        disable_intr(INTR_BT);
+        ipc_inited = TRUE;
+        SYSCTRL_ROM_SWITCH = 0x9c;
+ //       delay(10000);   //wait rom switch ok
+				delay_ms(1);
+        BT_RESET = 1;
+ //       delay(10000);   //wait for reset ok
+				delay_ms(1);
+        while (!(BT_CONFIG & (1 << BT_INIT_FLAG)));
+        BT_CONFIG &= (~(1 << BT_INIT_FLAG));
+        erase_memory();
+        _download_btcode(bt_code);
+        WAKEUP_BT = 0x9c;
+        delay_ms(100);
+    }
+#elif (VERSIONS == NO_BT)
+    if (ipc_inited == FALSE || is_dpll_opend() == FALSE)
+    {
+        disable_intr(INTR_BT);
+        ipc_inited = TRUE;
+
+        lpm_bt_write(1, 0xd00000);
+        delay_us(1000);
+
+        SYSCTRL_ROM_SWITCH = 0x94;
+        delay(10000);   //wait rom switch ok
+        BT_RESET = 1;
+        delay(10000);   //wait for reset ok
+        while (!(BT_CONFIG & (1 << BT_INIT_FLAG)));
+        BT_CONFIG &= (~(1 << BT_INIT_FLAG));
+        *(volatile uint8_t *)0xC4176 = 0x0f;
+        *(volatile uint8_t *)0xC4177 = 0x84;
+        *(volatile uint8_t *)0xC4178 = 0x30;
+        *(volatile uint8_t *)0xC4179 = 0x0a;
+        *(volatile uint8_t *)0xC40c3 = 0x00;
+        *(volatile uint8_t *)0xC40c4 = 0x4f;
+        *(volatile uint8_t *)0xC4f00 = 0xff;
+        delay_ms(60);
+    }
+#endif
+}
+
+//鎵撳嵃HCI鏁版嵁鍖?
+void PrintHCIPack(HCI_TypeDef *msg, const char *str)
+{
+    MyPrintf("M0 %s:\n", str);
+    MyPrintf("%s Type:%02x\n", str, msg->type);
+    MyPrintf("%s OPCode: %02x\n", str, msg->opcode);
+    MyPrintf("%s Length: %02x\n", str, msg->DataLen);
+    MyPrintf("%s Data:\n", str);
+    for (uint8_t cnt = 0; cnt < msg->DataLen; cnt++)
+    {
+        MyPrintf("%02x ", msg->p_data[cnt]);
+        if ((cnt % 16) == 0&&cnt!=0)
+            MyPrintf("\n");
+    }
+    MyPrintf("\n");
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_kscan.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_kscan.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_kscan.h	(working copy)
@@ -0,0 +1,101 @@
+#ifndef  __KSCAN_H__
+#define  __KSCAN_H__
+
+#include "yc3121.h"
+#include "yc_gpio.h"
+#include "yc_timer.h"
+#include "board_config.h"
+
+#define SHAKE_DELAY	5
+
+#if (BOARD_VER == MPOS_BOARD_V2_1)
+
+    #define KEY_S1	KEY_V1
+    #define KEY_S2	KEY_V2
+    #define KEY_S3	KEY_V6
+    #define KEY_S4	KEY_V3
+    #define KEY_S5	KEY_V7
+    #define KEY_S6	KEY_V10
+    #define KEY_S7	KEY_V4
+    #define KEY_S8	KEY_V8
+    #define KEY_S9	KEY_V11
+    #define KEY_S10	KEY_V13
+    #define KEY_S11	KEY_V5
+    #define KEY_S12	KEY_V9
+    #define KEY_S13	KEY_V12
+    #define KEY_S14	KEY_V14
+    #define KEY_S15	KEY_V15
+
+    #define KEY_V1	30
+    #define KEY_V2	31
+    #define KEY_V3	32
+    #define KEY_V4	33
+    #define KEY_V5	34
+    #define KEY_V6	35
+    #define KEY_V7	36
+    #define KEY_V8	37
+    #define KEY_V9	38
+    #define KEY_V10	39
+    #define KEY_V11	40
+    #define KEY_V12	41
+    #define KEY_V13	42
+    #define KEY_V14	43
+    #define KEY_V15	44
+
+#elif (BOARD_VER == EPOS_BOARD_V1_0)
+
+    #define KEY_1  32
+    #define KEY_2  35
+    #define KEY_3  38
+    #define KEY_4  41
+    #define KEY_5  44
+    #define KEY_6  31
+    #define KEY_7  34
+    #define KEY_8  40
+    #define KEY_9  37
+    #define KEY_10 33
+    #define KEY_11 30
+    #define KEY_12 43
+    #define KEY_13 39
+    #define KEY_14 42
+    #define KEY_15 45
+    #define KEY_16 47
+    #define KEY_17 46
+    #define KEY_18 36
+
+    #define KEY_NUM_0   KEY_11
+    #define KEY_NUM_1   KEY_6
+    #define KEY_NUM_2   KEY_1
+    #define KEY_NUM_3   KEY_10
+    #define KEY_NUM_4   KEY_7
+    #define KEY_NUM_5   KEY_2
+    #define KEY_NUM_6   KEY_18
+    #define KEY_NUM_7   KEY_9
+    #define KEY_NUM_8   KEY_3
+    #define KEY_NUM_9   KEY_13
+    #define KEY_UP      KEY_8
+    #define KEY_DOWN    KEY_4
+    #define KEY_CONFIRM KEY_16
+    #define KEY_CANCEL  KEY_15
+    #define KEY_CLEAR   KEY_17
+    #define KEY_MENU    KEY_14
+    #define KEY_F1      KEY_12
+    #define KEY_F2      KEY_5
+
+#endif
+
+/**
+  * @brief  Keyboard scan function.
+  * @param  None.
+  * @retval key assignments
+  */
+uint8_t KEY_Scan(void);
+
+/**
+  * @brief  Keyboard release detection.
+  * @param  None.
+  * @retval None.
+  */
+void KEY_Scan_check(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_kscan.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_kscan.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_kscan.c	(working copy)
@@ -0,0 +1,337 @@
+#include "yc_kscan.h"
+
+#if (BOARD_VER == MPOS_BOARD_V2_1)
+const uint8_t keyMatrix[5][5] =
+{
+    {KEY_S1,     0,       0,       0,       0   },
+    {KEY_S2,  KEY_S3,     0,       0,       0   },
+    {KEY_S4,  KEY_S5,  KEY_S6,     0,       0   },
+    {KEY_S7,  KEY_S8,  KEY_S9,  KEY_S10,    0   },
+    {KEY_S11, KEY_S12, KEY_S13, KEY_S14, KEY_S15}
+};
+#elif (BOARD_VER == EPOS_BOARD_V1_0)
+const uint8_t keyMatrix[6][5] =
+{
+    {KEY_1,     0,        0,      0,      0},
+    {KEY_2,  KEY_6,       0,      0,      0},
+    {KEY_3,  KEY_7,  KEY_12,      0,      0},
+    {KEY_4,  KEY_8,  KEY_11, KEY_13,      0},
+    {KEY_5,  KEY_9,  KEY_10, KEY_14, KEY_15},
+    {KEY_16, KEY_17, KEY_18,      0,      0}
+};
+#endif
+
+/**
+  * @brief  Keyboard related gpio initializes pull-up.
+  * @param  None
+  * @retval None
+  */
+static void Key_Gpio_Init_IPU(void)
+{
+#if (BOARD_VER == MPOS_BOARD_V2_1)
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    GPIO_InitStruct.GPIO_Pin = Line_1;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(GPIO_GROUP_Line_1, &GPIO_InitStruct);
+
+    GPIO_InitStruct.GPIO_Pin = Line_2;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(GPIO_GROUP_Line_2, &GPIO_InitStruct);
+
+    GPIO_InitStruct.GPIO_Pin = Line_3;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(GPIO_GROUP_Line_3, &GPIO_InitStruct);
+
+    GPIO_InitStruct.GPIO_Pin = Line_4;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(GPIO_GROUP_Line_4, &GPIO_InitStruct);
+
+    GPIO_InitStruct.GPIO_Pin = Line_5;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(GPIO_GROUP_Line_5, &GPIO_InitStruct);
+
+#elif (BOARD_VER == EPOS_BOARD_V1_0)
+    GPIO_InitTypeDef GPIO_InitStruct;
+
+    GPIO_InitStruct.GPIO_Pin = KEY_PIN_1;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(KEY_PORT_1, &GPIO_InitStruct);
+
+    GPIO_InitStruct.GPIO_Pin = KEY_PIN_2;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(KEY_PORT_2, &GPIO_InitStruct);
+
+    GPIO_InitStruct.GPIO_Pin = KEY_PIN_3;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(KEY_PORT_3, &GPIO_InitStruct);
+
+    GPIO_InitStruct.GPIO_Pin = KEY_PIN_4;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(KEY_PORT_4, &GPIO_InitStruct);
+
+    GPIO_InitStruct.GPIO_Pin = KEY_PIN_5;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(KEY_PORT_5, &GPIO_InitStruct);
+
+    GPIO_InitStruct.GPIO_Pin = KEY_PIN_6;
+    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
+    GPIO_Init(KEY_PORT_6, &GPIO_InitStruct);
+#endif
+}
+
+/**
+  * @brief  Keyboard GPIO level detection.
+  * @param  scanColumn: Scan column selection.
+  * @retval None
+  */
+static void Key_IODirection(uint8_t scanColumn)
+{
+#if (BOARD_VER == MPOS_BOARD_V2_1)
+    switch (scanColumn)
+    {
+    case	0:
+        GPIO_Config(GPIO_GROUP_Line_1, Line_1, OUTPUT_LOW);
+        break;
+    case	1:
+        GPIO_Config(GPIO_GROUP_Line_2, Line_2, OUTPUT_LOW);
+        break;
+    case	2:
+        GPIO_Config(GPIO_GROUP_Line_3, Line_3, OUTPUT_LOW);
+        break;
+    case	3:
+        GPIO_Config(GPIO_GROUP_Line_4, Line_4, OUTPUT_LOW);
+        break;
+    case	0xff:
+        GPIO_Config(GPIO_GROUP_Line_1, Line_1, OUTPUT_LOW);
+        GPIO_Config(GPIO_GROUP_Line_2, Line_2, OUTPUT_LOW);
+        GPIO_Config(GPIO_GROUP_Line_3, Line_3, OUTPUT_LOW);
+        GPIO_Config(GPIO_GROUP_Line_4, Line_4, OUTPUT_LOW);
+        GPIO_Config(GPIO_GROUP_Line_5, Line_5, OUTPUT_LOW);
+        break;
+    default:
+        break;
+    }
+#elif (BOARD_VER == EPOS_BOARD_V1_0)
+    switch (scanColumn)
+    {
+    case	0:
+        GPIO_Config(KEY_PORT_1, KEY_PIN_1, OUTPUT_LOW);
+        break;
+    case	1:
+        GPIO_Config(KEY_PORT_2, KEY_PIN_2, OUTPUT_LOW);
+        break;
+    case	2:
+        GPIO_Config(KEY_PORT_3, KEY_PIN_3, OUTPUT_LOW);
+        break;
+    case	3:
+        GPIO_Config(KEY_PORT_4, KEY_PIN_4, OUTPUT_LOW);
+        break;
+    case	4:
+        GPIO_Config(KEY_PORT_5, KEY_PIN_5, OUTPUT_LOW);
+        break;
+    case	0xff:
+        GPIO_Config(KEY_PORT_1, KEY_PIN_1, OUTPUT_LOW);
+        GPIO_Config(KEY_PORT_2, KEY_PIN_2, OUTPUT_LOW);
+        GPIO_Config(KEY_PORT_3, KEY_PIN_3, OUTPUT_LOW);
+        GPIO_Config(KEY_PORT_4, KEY_PIN_4, OUTPUT_LOW);
+        GPIO_Config(KEY_PORT_5, KEY_PIN_5, OUTPUT_LOW);
+        GPIO_Config(KEY_PORT_6, KEY_PIN_6, OUTPUT_LOW);
+        break;
+    default:
+        break;
+    }
+#endif
+}
+
+/**
+  * @brief  Gets the keyboard IO input status.
+  * @param  keyIO
+  * @retval None
+  */
+static uint8_t Key_GetIoValue(uint8_t keyIO)
+{
+    uint8_t temp = 0xff;
+#if (BOARD_VER == MPOS_BOARD_V2_1)
+    switch (keyIO)
+    {
+    case 0:
+        if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_2, Line_2))
+            temp = 1;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_3, Line_3))
+            temp = 2;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_4, Line_4))
+            temp = 3;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_5, Line_5))
+            temp = 4;
+        break;
+    case 1:
+        if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_3, Line_3))
+            temp = 2;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_4, Line_4))
+            temp = 3;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_5, Line_5))
+            temp = 4;
+        break;
+    case 2:
+        if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_4, Line_4))
+            temp = 3;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_5, Line_5))
+            temp = 4;
+        break;
+    case 3:
+        if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_5, Line_5))
+            temp = 4;
+        break;
+    case 0xff:
+        if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_1, Line_1))
+            temp = 0;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_2, Line_2))
+            temp = 1;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_3, Line_3))
+            temp = 2;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_4, Line_4))
+            temp = 3;
+        else if (0 == GPIO_ReadInputDataBit(GPIO_GROUP_Line_5, Line_5))
+            temp = 4;
+        break;
+    default:
+        break;
+    }
+    return temp;
+#elif (BOARD_VER == EPOS_BOARD_V1_0)
+    switch (keyIO)
+    {
+    case 0:
+        if (0 == GPIO_ReadInputDataBit(KEY_PORT_2, KEY_PIN_2))
+            temp = 0;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_3, KEY_PIN_3))
+            temp = 1;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_4, KEY_PIN_4))
+            temp = 2;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_5, KEY_PIN_5))
+            temp = 3;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_6, KEY_PIN_6))
+            temp = 4;
+        break;
+    case 1:
+        if (0 == GPIO_ReadInputDataBit(KEY_PORT_3, KEY_PIN_3))
+            temp = 1;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_4, KEY_PIN_4))
+            temp = 2;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_5, KEY_PIN_5))
+            temp = 3;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_6, KEY_PIN_6))
+            temp = 4;
+        break;
+    case 2:
+        if (0 == GPIO_ReadInputDataBit(KEY_PORT_4, KEY_PIN_4))
+            temp = 2;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_5, KEY_PIN_5))
+            temp = 3;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_6, KEY_PIN_6))
+            temp = 4;
+        break;
+    case 3:
+        if (0 == GPIO_ReadInputDataBit(KEY_PORT_5, KEY_PIN_5))
+            temp = 3;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_6, KEY_PIN_6))
+            temp = 4;
+        break;
+    case 4:
+        if (0 == GPIO_ReadInputDataBit(KEY_PORT_6, KEY_PIN_6))
+            temp = 4;
+        break;
+    case 0xff:
+        if (0 == GPIO_ReadInputDataBit(KEY_PORT_1, KEY_PIN_1))
+            temp = 0;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_2, KEY_PIN_2))
+            temp = 1;
+        else if (0 == GPIO_ReadInputDataBit(KEY_PORT_3, KEY_PIN_3))
+            temp = 2;
+        break;
+    default:
+        break;
+    }
+    return temp;
+#endif
+}
+
+static uint8_t GetKeyCode(void)
+{
+    uint8_t i, keyvalue;
+#if (BOARD_VER == MPOS_BOARD_V2_1)
+    for (i = 0; i < 4; i++)
+    {
+        Key_Gpio_Init_IPU();
+        delay_ms(5);
+
+        keyvalue = Key_GetIoValue(0xff);
+
+        if (keyvalue != 0xff)
+        {
+            return  keyMatrix[4][keyvalue];
+        }
+
+        Key_IODirection(i);
+        delay_ms(SHAKE_DELAY);
+        keyvalue = Key_GetIoValue(i);
+        if (keyvalue != 0xff)
+        {
+            return (keyMatrix[keyvalue - 1][i]);
+        }
+    }
+
+    return 0;
+#elif (BOARD_VER == EPOS_BOARD_V1_0)
+    Key_Gpio_Init_IPU();
+    delay_ms(1);
+
+    keyvalue = Key_GetIoValue(0xff);
+
+    if (keyvalue != 0xff)
+    {
+        return  keyMatrix[5][keyvalue];
+    }
+
+    for (i = 0; i < 5; i++)
+    {
+        Key_Gpio_Init_IPU();
+        delay_ms(1);
+
+        Key_IODirection(i);
+        delay_ms(SHAKE_DELAY);
+
+        keyvalue = Key_GetIoValue(i);
+        if (keyvalue != 0xff)
+        {
+            return (keyMatrix[keyvalue][i]);
+        }
+    }
+
+    return 0;
+#endif
+}
+
+uint8_t KEY_Scan(void)
+{
+    uint8_t KeyCode = 0, KeyCode2 = 0;
+
+    KeyCode = GetKeyCode();
+    if (KeyCode != 0)
+    {
+        delay_ms(SHAKE_DELAY);
+        KeyCode2 = GetKeyCode();
+        if (KeyCode2 == KeyCode)
+        {
+            return KeyCode2;
+        }
+    }
+
+    return 0;
+}
+
+void KEY_Scan_check(void)
+{
+    while (GetKeyCode());
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_lcd.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_lcd.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_lcd.h	(working copy)
@@ -0,0 +1,88 @@
+/*
+File Name    : yc_lcd.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/07
+Description  : This file provides all the LCD functions.
+*/
+/*
+LCD messages:
+
+*/
+#ifndef __LCD_H__
+#define __LCD_H__
+
+#include "yc_gpio.h"
+#include "yc_spi.h"
+#include "yc_timer.h"
+#include "board_config.h"
+
+#define	LCD_RS_CMD		0x00
+#define	LCD_RS_DATA		0x01
+
+typedef struct
+{
+    SPIx_TypeDef SPIx;
+    uint16_t IO_LCD_SDA_PIN;
+    GPIO_TypeDef IO_LCD_SDA_Port;
+    uint16_t IO_LCD_SCL_PIN;
+    GPIO_TypeDef IO_LCD_SCL_Port;
+    uint16_t IO_LCD_A0_PIN;
+    GPIO_TypeDef IO_LCD_A0_Port;
+    uint16_t IO_LCD_RES_PIN;
+    GPIO_TypeDef IO_LCD_RES_Port;
+    uint16_t	IO_LCD_CS_PIN;
+    GPIO_TypeDef IO_LCD_CS_Port;
+    uint16_t IO_LCD_BL_PIN;
+    GPIO_TypeDef IO_LCD_BL_Port;
+} LCD_InitTypedef;
+
+/**
+  * @brief 	lcd io initialize
+  */
+void lcd_io_init(LCD_InitTypedef *LCD_InitStruct);
+
+/**
+	* @brief  MCU sends cmd to LCD via SPI
+  * @param  data: output cmd.
+  */
+void spi_write_cmd(unsigned char cmd);
+
+/**
+  * @brief  MCU sends one byte to LCD via SPI
+  * @param  data: data or cmd val.
+  *         cmd: send type.
+  */
+void write_byte_lcd(unsigned char data, unsigned char cmd);
+
+/**
+  * @brief  MCU sends n byte to LCD via SPI
+  * @param  data: data or cmd val.
+  *         len: number of content sent
+  *         cmd: send type.
+  */
+void write_bytes_lcd(unsigned char *pdata, unsigned char len, unsigned char cmd);
+
+/**
+  * @brief  clear screen
+  */
+void clr_screen(void);
+
+/**
+  * @brief  fill all screen
+  */
+void full_screen(void);
+
+/**
+ * @brief  set x y position
+ * @param  column: horizontal position you want set,this value must be between 0 and 127.
+ *         page: longitudinal position you want set,this value must be between 0 and 7.
+ */
+void set_xy(unsigned char column, unsigned char page);
+
+/**
+ * @brief  initialize lcd
+ */
+void init_lcd(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_lcd.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_lcd.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_lcd.c	(working copy)
@@ -0,0 +1,189 @@
+/*
+File Name    : yc_lcd.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/07
+Description  : lcd encapsulation.
+*/
+#include "yc_lcd.h"
+
+SPIx_TypeDef LCDSPI;
+uint16_t LCD_SDA_PIN;
+uint16_t LCD_SCL_PIN;
+uint16_t LCD_A0_PIN ;
+uint16_t LCD_RES_PIN;
+uint16_t LCD_CS_PIN ;
+
+GPIO_TypeDef LCD_SDA_Port;
+GPIO_TypeDef LCD_SCL_Port;
+GPIO_TypeDef LCD_A0_Port;
+GPIO_TypeDef LCD_RES_Port;
+GPIO_TypeDef LCD_CS_Port;
+
+uint8_t      LCD_BL_PIN  = GPIO_Pin_7;
+GPIO_TypeDef LCD_BL_Port = GPIOA;
+
+void lcd_io_init(LCD_InitTypedef *LCD_InitStruct)
+{
+    _ASSERT(NULL != LCD_InitStruct);
+
+    SPI_InitTypeDef SPI_InitStruct;
+
+    LCDSPI = LCD_InitStruct->SPIx;
+
+    LCD_SDA_PIN = LCD_InitStruct->IO_LCD_SDA_PIN;
+    LCD_SCL_PIN = LCD_InitStruct->IO_LCD_SCL_PIN;
+    LCD_A0_PIN  = LCD_InitStruct->IO_LCD_A0_PIN;
+    LCD_RES_PIN = LCD_InitStruct->IO_LCD_RES_PIN;
+    LCD_CS_PIN  = LCD_InitStruct->IO_LCD_CS_PIN;
+    LCD_BL_PIN 	= LCD_InitStruct->IO_LCD_BL_PIN;
+
+    LCD_SDA_Port = LCD_InitStruct->IO_LCD_SDA_Port;
+    LCD_SCL_Port = LCD_InitStruct->IO_LCD_SCL_Port;
+    LCD_A0_Port  = LCD_InitStruct->IO_LCD_A0_Port;
+    LCD_RES_Port = LCD_InitStruct->IO_LCD_RES_Port;
+    LCD_CS_Port  = LCD_InitStruct->IO_LCD_CS_Port;
+    LCD_BL_Port  = LCD_InitStruct->IO_LCD_BL_Port;
+
+    SPI_InitStruct.BaudRatePrescaler = SPI_BaudRatePrescaler_2;
+    SPI_InitStruct.CPHA = SPI_CPHA_First_Edge;
+    SPI_InitStruct.CPOL = SPI_CPOL_Low;
+    SPI_InitStruct.Mode =  SPI_Mode_Master;
+    SPI_InitStruct.RW_Delay = 33;
+
+    GPIO_Config(LCD_SCL_Port, LCD_SCL_PIN, SPID0_SCK);
+    GPIO_Config(LCD_CS_Port, LCD_CS_PIN, SPID0_NCS);
+    GPIO_Config(LCD_SDA_Port, LCD_SDA_PIN, SPID0_MOSI);
+    GPIO_Config(LCD_BL_Port, LCD_BL_PIN, OUTPUT_LOW);
+    SPI_Init(LCDSPI, &SPI_InitStruct);
+
+    GPIO_Config(LCD_A0_Port, LCD_A0_PIN, OUTPUT_HIGH);
+    GPIO_Config(LCD_RES_Port, LCD_RES_PIN, OUTPUT_HIGH);
+    delay_ms(20);
+    GPIO_Config(LCD_RES_Port, LCD_RES_PIN, OUTPUT_LOW);
+    delay_ms(100);
+    GPIO_Config(LCD_RES_Port, LCD_RES_PIN, OUTPUT_HIGH);
+}
+
+static void clr_a0(void)
+{
+    GPIO_Config(LCD_A0_Port, LCD_A0_PIN, OUTPUT_LOW);
+    GPIO_Config(LCD_A0_Port, LCD_A0_PIN, OUTPUT_LOW);
+    GPIO_Config(LCD_A0_Port, LCD_A0_PIN, OUTPUT_LOW);
+}
+
+static void set_a0(void)
+{
+    GPIO_Config(LCD_A0_Port, LCD_A0_PIN, OUTPUT_HIGH);
+    GPIO_Config(LCD_A0_Port, LCD_A0_PIN, OUTPUT_HIGH);
+    GPIO_Config(LCD_A0_Port, LCD_A0_PIN, OUTPUT_HIGH);
+}
+
+static void spi_write_data(unsigned char data)
+{
+    set_a0();
+    SPI_SendData(LCDSPI, data);
+}
+
+void spi_write_cmd(unsigned char cmd)
+{
+    clr_a0();
+    SPI_SendData(LCDSPI, cmd);
+}
+
+void write_byte_lcd(unsigned char data, unsigned char cmd)
+{
+    if (LCD_RS_CMD  == cmd)
+    {
+        spi_write_cmd(data);
+    }
+    else if (LCD_RS_DATA  == cmd)
+    {
+        spi_write_data(data);
+    }
+}
+
+void write_bytes_lcd(unsigned char *pdata, unsigned char len, unsigned char cmd)
+{
+    unsigned char m = 0;
+
+    if (LCD_RS_CMD  == cmd)
+    {
+        for (m = 0; m < len ; m++)
+        {
+            spi_write_cmd(pdata[m]);
+        }
+    }
+    else if (LCD_RS_DATA  == cmd)
+    {
+        for (m = 0; m < len ; m++)
+        {
+            spi_write_data((int)(pdata[m]));
+        }
+    }
+}
+
+void clr_screen(void)
+{
+    int i, page;
+
+    for (page = 0; page < 8; page++)
+    {
+        spi_write_cmd(0x10);
+        spi_write_cmd(0x00);
+        spi_write_cmd(page + 0xb0);
+        for (i = 0; i < 128; i++)
+        {
+            spi_write_data(0);
+        }
+    }
+}
+
+void full_screen(void)
+{
+    int i, page;
+
+    for (page = 0; page < 8; page++)
+    {
+        spi_write_cmd(0x10);
+        spi_write_cmd(0x00);
+        spi_write_cmd(page + 0xb0);
+        for (i = 0; i < 128; i++)
+        {
+            spi_write_data(0xFF);
+        }
+    }
+}
+
+void set_xy(unsigned char column, unsigned char page)
+{
+    unsigned char cmd[3];
+
+    cmd[0] = 0xb0 | page;
+    cmd[1] = 0x10 | (column >> 4);
+    cmd[2] = 0x00 | (column & 0x0f);
+    write_bytes_lcd(cmd, 3, LCD_RS_CMD);
+}
+
+void init_lcd(void)
+{
+    delay_ms(10);
+    spi_write_cmd(0xe2);//reset
+    delay_ms(10);
+    spi_write_cmd(0xa0);// SEG Direction
+    delay_ms(10);
+    spi_write_cmd(0xc8);//COM Direction
+    delay_ms(10);
+    spi_write_cmd(0xa2);//Bias Select
+    delay_ms(10);
+    spi_write_cmd(0x2f);//Power Control
+    delay_ms(10);
+    spi_write_cmd(0x24);//Regulation Ratio
+    delay_ms(10);
+    spi_write_cmd(0x81);//Set EV_1
+    delay_ms(10);
+    spi_write_cmd(0x1e);//Set EV_2
+    delay_ms(10);
+    spi_write_cmd(0xaf);//Display ON
+    delay_ms(10);
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_lpm.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_lpm.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_lpm.h	(working copy)
@@ -0,0 +1,75 @@
+#ifndef __YC_LPM_H__
+#define __YC_LPM_H__
+
+#include "yc3121.h"
+#include "yc_ipc.h"
+#include "yc_otp.h"
+#include "yc_sysctrl.h"
+#include "misc.h"
+
+#define LPMBT_CONTROL0      0         //LPMCONTROL
+#define LPMBT_CONTROL1      1         //LPMCONTROL2
+#define LPMBT_WKUPLOW       2
+#define LPMBT_WKUPHIGH      3
+#define LPMBT_SLEEPCOUNT    4
+#define LPMBT_CONTROL2      5         //BUCKControl
+#define LPMBT_CONTROL3      6         //CHARGER
+
+extern Boolean ipc_inited;
+
+uint32_t lpm_read(volatile int *addr);
+
+void lpm_write(volatile int *addr, uint32_t value);
+
+void lpm_bt_write(uint8_t type, uint32_t val);
+
+uint32_t lpm_bt_read(uint8_t type);
+
+void lpm_sleep(void);
+
+void setlpmval(volatile int *addr, uint8_t startbit, uint8_t bitwidth, uint32_t val);
+
+uint32_t readlpmval(volatile int *addr, uint8_t startbit, uint8_t bitwidth);
+
+/**
+  * @brief  Drop down all unused GPIO
+  * @param  None
+  * @retval None
+  */
+void GPIO_Unused_Pd(void);
+
+/**
+  * @brief  BT go into deep sleep mode
+  * @param  None
+  * @retval tmp: time
+  */
+void BT_Hibernate(void);
+
+/**
+  * @brief  Reduce chip frequency.
+  * @param  None
+  * @retval None
+  */
+void Chip_Speedstep(void);
+
+
+/*
+ * @brief:  lpm_sleep config
+ * @param:  time: RTC wakeup time (unit:second)
+ * @param:  GPIO_Pin0_Pin31      GPIOGROUPA&GPIOGROUPB
+ * @param:  GPIO_Pin32_Pin47     GPIOGROUPC
+ * @param:  islow_wakeup:	0:High level wakeup
+ *                          1:LOW  level wakeup
+ * @param:  is_powerdownbt:	0: diseable bt sleep
+ *                          1: enable bt sleep
+ * @param:  tmp: BT_Hibernate return or 0
+ * @return: none
+ */
+void CM0_Sleep(uint32_t time, uint32_t GPIO_Pin0_Pin31, uint16_t GPIO_Pin32_Pin47, uint8_t islow_wakeup, uint8_t is_powerdownbt);
+
+/*
+ * @brief: GPIO32(GPIOC GPIO_Pin_0) enable
+ */
+void enable_gpio_32(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_lpm.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_lpm.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_lpm.c	(working copy)
@@ -0,0 +1,224 @@
+#include "yc_lpm.h"
+
+uint32_t lpm_read(volatile int *addr)
+{
+    return ((uint32_t(*)(volatile int *addr))FUNC_LPM_READ_ADDR)(addr);
+}
+
+void lpm_write(volatile int *addr, uint32_t value)
+{
+    ((void(*)(volatile int *addr, uint32_t value))FUNC_LPM_WRITE_ADDR)(addr, value);
+}
+
+void lpm_bt_write(uint8_t type, uint32_t val)
+{
+    //  ((void(*)(uint8_t type,uint32_t val))FUNC_LPM_BT_WRITE_ADDR)(type,val);
+    enable_clock(CLKCLS_BT);
+    *(volatile uint8_t *)0xc804c = (val & 0x000000ff) >> 0;
+    delay_us(1);
+    *(volatile uint8_t *)0xc804d = (val & 0x0000ff00) >> 8;
+    delay_us(1);
+    *(volatile uint8_t *)0xc804e = (val & 0x00ff0000) >> 16;
+    delay_us(1);
+    *(volatile uint8_t *)0xc804f = (val & 0xff000000) >> 24;
+    delay_us(1);
+    *(volatile uint8_t *)0xc8005 = 1 << type;
+    delay_ms(1);
+}
+
+uint32_t lpm_bt_read(uint8_t type)
+{
+    if (type == LPMBT_WKUPLOW || type == LPMBT_WKUPHIGH)
+    {
+        return (((uint32_t(*)(uint8_t type))FUNC_LPM_BT_READ_ADDR)(type)) >> 2;
+    }
+    else
+    {
+        return (((uint32_t(*)(uint8_t type))FUNC_LPM_BT_READ_ADDR)(type));
+    }
+}
+
+void lpm_sleep(void)
+{
+    ((void(*)())FUNC_LPM_SLEEP_ADDR)();
+}
+
+void setlpmval(volatile int *addr, uint8_t startbit, uint8_t bitwidth, uint32_t val)
+{
+    ((void(*)(volatile int *addr, uint8_t startbit, uint8_t bitwidth, uint32_t val))FUNC_SETLPMVAL_ADDR)(addr, startbit, bitwidth, val);
+}
+
+uint32_t readlpmval(volatile int *addr, uint8_t startbit, uint8_t bitwidth)
+{
+    uint32_t tmp = 0;
+    if (32 == bitwidth)
+    {
+        tmp = lpm_read(addr);
+        return ((tmp >> startbit) & ((1 << bitwidth) - 1));
+    }
+    else
+    {
+        return lpm_read(addr);
+    }
+}
+
+void GPIO_Unused_Pd(void)
+{
+    for (int i = 0; i < 48; i++)
+    {
+        if (GPIO_CONFIG(i) == 0 || GPIO_CONFIG(i) == 4 || GPIO_CONFIG(i) == 5)
+        {
+            GPIO_CONFIG(i) |= GPCFG_PD;
+        }
+    }
+}
+
+static uint32_t value_rtc_1s = 0;
+
+static uint32_t get_otp(void)
+{
+    uint32_t time;
+
+    if (value_rtc_1s == 0)
+    {
+        read_otp(0x13e, (uint8_t *)&time, 2);
+        time = (time == 0) ? 0x8000 : time;
+        time &= (~((uint32_t)0x1 << 31));
+    }
+    else
+    {
+        time = value_rtc_1s;
+        time |= ((uint32_t)0x1 << 31);
+    }
+
+    return time;
+}
+
+void BT_Hibernate(void)
+{
+#if (VERSIONS == EXIST_BT)
+    if(TRUE == ipc_inited)
+    {
+        ipc_inited = FALSE;
+
+        read_otp(0x13e, (uint8_t *)&value_rtc_1s, 2);
+        value_rtc_1s = (value_rtc_1s == 0) ? 0x8000 : value_rtc_1s;
+
+        BT_CONFIG &= ~(1 << BT_INIT_FLAG);
+
+        NVIC_DisableIRQ(BT_IRQn);
+        SYSCTRL_ROM_SWITCH = 0x90;
+
+        HCI_TypeDef IpcRxData;
+        IpcRxData.type = 1;
+        IpcRxData.opcode = 0x27;
+        IpcRxData.DataLen = 0;
+        IPC_TxData(&IpcRxData);
+        //delay(10000);
+        delay_ms(60);
+    }
+#elif (VERSIONS == NO_BT || VERSIONS == NO_XTAL)
+    if(TRUE == ipc_inited)
+    {
+        ipc_inited = FALSE;
+        BT_CONFIG &= ~(1 << BT_INIT_FLAG);
+        NVIC_DisableIRQ(BT_IRQn);
+        SYSCTRL_ROM_SWITCH = 0x90;
+        lpm_bt_write(2,0);
+        delay_us(1000);
+        lpm_bt_write(3,0);
+        delay_us(1000);
+        lpm_bt_write(5,0);
+        delay_us(1000);
+        lpm_bt_write(1,0xd80000);
+        delay_us(1000);
+        lpm_bt_write(4,0x50000);
+        delay_us(1000);
+    }
+#endif
+}
+
+void Chip_Speedstep(void)
+{
+    SYSCTRL_HCLKConfig(SYSCTRL_HCLK_Div8);
+}
+
+void CM0_Sleep(uint32_t time, uint32_t GPIO_Pin0_Pin31, uint16_t GPIO_Pin32_Pin47, uint8_t islow_wakeup, uint8_t is_powerdownbt)
+{
+    uint32_t temp;
+
+    SYSCTRL_AHBPeriphClockCmd(SYSCTRL_AHBPeriph_INTR | SYSCTRL_AHBPeriph_SHA | \
+                            SYSCTRL_AHBPeriph_CRC | SYSCTRL_AHBPeriph_PWM | \
+                            SYSCTRL_AHBPeriph_WDT | SYSCTRL_AHBPeriph_USB | \
+                            SYSCTRL_AHBPeriph_SPI | SYSCTRL_AHBPeriph_DES | \
+                            SYSCTRL_AHBPeriph_RSA | SYSCTRL_AHBPeriph_ASE | \
+                            SYSCTRL_AHBPeriph_7816 | SYSCTRL_AHBPeriph_SM4 | \
+                            SYSCTRL_AHBPeriph_7811 | SYSCTRL_AHBPeriph_ADC7811 | \
+                            SYSCTRL_AHBPeriph_CP, DISABLE);
+
+    //DISABLE RTC WAKEUP
+    setlpmval(LPM_GPIO_WKHI, 17, 1, 0);
+
+    //set gpio wakeup level
+    setlpmval(LPM_GPIO_WKHI, 18, 1, islow_wakeup ? 1 : 0);
+
+    //set gpio num
+    if(GPIO_Pin0_Pin31!=0 || GPIO_Pin32_Pin47!=0)
+    {
+        for(int i = 0;i < 32;i++)
+        {
+            if((GPIO_Pin0_Pin31 & (1<<i)) != 0)
+            {
+                if (islow_wakeup)
+                    GPIO_CONFIG(i) = PULL_UP;
+                else
+                    GPIO_CONFIG(i) = PULL_DOWN;
+            }
+        }
+        for(int i = 0;i<16;i++)
+        {
+            if((GPIO_Pin32_Pin47 & (1<<i)) != 0)
+            {
+                if (islow_wakeup)
+                    GPIO_CONFIG(i+32) = PULL_UP;
+                else
+                    GPIO_CONFIG(i+32) = PULL_DOWN;
+            }
+        }
+        setlpmval(LPM_GPIO_WKUP, 0, 32, GPIO_Pin0_Pin31);
+        setlpmval(LPM_GPIO_WKHI, 0, 16, GPIO_Pin32_Pin47);
+    }
+    else
+    {
+        setlpmval(LPM_GPIO_WKUP, 0, 32, 0);
+        setlpmval(LPM_GPIO_WKHI, 0, 16, 0);
+    }
+
+    temp = get_otp();
+
+    if (time)
+    {
+        //SET SECMAX
+        setlpmval(LPM_SECMAX, 0, 16, temp);
+        //SET SLEEP CNT
+        setlpmval(LPM_WKUP_TIMER, 0, 32, time);
+        //clr RTC CNT
+        setlpmval(LPM_RTC_CNT, 0, 32, 0);
+        // ENABLE RTC WAKEUP
+        setlpmval(LPM_GPIO_WKHI, 17, 1, 1);
+    }
+
+    if (is_powerdownbt == 1 && (temp >> 31) == 0)
+    {
+        BT_Hibernate();
+    }
+
+    lpm_sleep();
+}
+
+void enable_gpio_32(void)
+{
+    uint32_t value = lpm_bt_read(LPMBT_CONTROL1);
+    value &= ~(1<<17);
+    lpm_bt_write(LPMBT_CONTROL1, value);
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_msr/yc_msr.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_msr/yc_msr.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_msr/yc_msr.h	(working copy)
@@ -0,0 +1,216 @@
+/*
+File Name    : msr.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2018/5/30
+Description  : MSR encapsulation
+*/
+
+#ifndef __YC_MSR_H__
+#define __YC_MSR_H__
+
+#include "yc3121.h"
+#include "yc_timer.h"
+
+//Track select option
+#define TRACK_SELECT_1	 0x01
+#define	TRACK_SELECT_2	 0x02
+#define	TRACK_SELECT_3	 0x04
+#define	TRACK_SELECT_ALL 0x10		//Return read data that all specific track hava data.
+
+
+#define	MAX_TRACK_DATA_SIZE		128
+#define MAX_TRACK_RAW_DATA_SZIE 512
+#define MAX_TRACK_NUM			3
+
+
+//Detect swiping card,detect_swiping_card() return value.
+#define	DETECT_SWIPING_CARD			0x01
+#define	DETECT_NO_SWIPING_CARD		0x02
+#define	DETECT_TIMEOUT				0x03
+#define	DETECT_HARD_WAKEUP			0x04
+
+//Read card data result
+#define	MSR_SUCCESS					0
+#define INVALID_ADDR		1		//track1 or track2 or track3 address invalid
+#define	PARITY_ERR			2		//parity  error
+#define	LENGTH_ERR			3		//track data length error
+#define	TRACK_NO_DATA		4		//track have no data that to decode.
+#define	HAVE_NO_ZERO		5
+
+
+
+typedef struct track_data_s
+{
+    int len;
+    uint8_t buf[MAX_TRACK_DATA_SIZE];
+}track_data;
+
+
+//Swipe direction
+typedef enum swiping_direction_e
+{
+    SD_BIDIRECTION			= 0,			//bidirection
+    SD_FORWARD_DIRECTION	= 1,
+    SD_REVERSE_DIRECTION	= 2
+}swiping_direction;
+
+
+//Card type, detect card type when swipe card.
+typedef enum card_type_e
+{
+    CARD_TYPE_ISO_ABA	= 0,
+    CARD_TYPE_AAMVA		= 1,
+    CARD_TYPE_IBM		= 2,
+    CARD_TYPE_IBM_755	= 3,
+    CARD_TYPE_JIS		= 4,
+    CARD_TYPE_777		= 5,
+    CARD_TYPE_CADMV		= 6,
+    CARD_TYPE_OTHER		= 7,
+    CARD_TYPE_UNKNOW	= 0xFF
+}card_type;
+
+
+//track signal select
+typedef enum signal_fortrack
+{
+        signal_t3 = 0,
+        signal_t1 = 1,
+        signal_t2 = 2
+} select_signal;
+
+/**
+ * @brief Initialize MSR
+ *
+ * @param none
+ *
+ * @retval none
+ */
+void MSR_Init(void);
+
+/**
+ * @brief deInitialize MSR
+ *
+ * @param none
+ *
+ * @retval none
+ */
+void MSR_DeInit(void);
+
+
+/**
+ * @brief Set swiping direction.
+ * @param none :
+         dir		swipe_direction
+
+ * @retval none
+ */
+void MSR_SetSwipeDir(swiping_direction dir);
+
+/**
+ * @brief Get current swiping direction.
+ * @param none :
+         dir		swipe_direction
+ * @retval none
+ */
+swiping_direction MSR_GetSwipeDir(void);
+
+/**
+ * @brief Detecting MSR card.
+ *
+ * @param  :
+ *			DETECT_SWIPING_CARD		Have swiping card action.
+ *			DETECT_NO_SWIPING_CARD	Haven't swiping card action.
+ *			DETECT_HARD_WAKEUP		May be set hard wakeup.
+ *
+ * @retval none
+ */
+ uint8_t MSR_DetectSwipingCard(void);
+
+/**
+ * @brief	: Get decode data that specified track.
+ * @param  :
+ *			option			track select option, bit 0, 1, 2 to track 1, 2, 3. bit 4 to all track.
+ *			ptrack			track 1,2 and 3 buffer, at least have 3 items.(output)
+ *			cfmt				card format @ card_type
+ *			tflag 			bit0 bit1 bit2 is the decode result . 1:success 0:failed
+ * retval:
+ *			MSR_SUCCESS		decoding successful finished.
+ *			INVALID_ADDR	track buffer address is invalid.
+ *			PARITY_ERR		parity error.
+ *			LENGTH_ERR		length exceed max length.
+ *			TRACK_NO_DATA	part track have no data that must readed
+*/
+uint8_t MSR_GetDecodeData(track_data  *ptrack, uint8_t options, uint8_t *cfmt, uint8_t *tflag);
+
+ /**
+ * @brief	:  Get special track raw data, nothing to do within get operation.
+ * @param  :
+ *			buf			save track raw data buffer address
+                        (Store by track code number start from bit 0)
+
+ *			track_idx		track index, 0~2 for track 1~3
+ * @retval: data len
+ * @description Every byte 0-4bit is effective ,5-7bit is useless;get rawdata must befaor decode data.
+*/
+int  MSR_GetTrackRawData(uint8_t  *buf, uint8_t track_idx);
+
+ /**
+ * @brief	:  ENABLE or DISABLE track interrupt.
+ * @param  : NewState: ENABLE or DISABLE
+ *					 TrackSel: bit 0 for track 1;bit 1 for track 2;bit 2 for track 3;bit 4 for all track
+*/
+void MSR_ITEnable(FunctionalState NewState, uint8_t TrackSel);
+
+ /**
+ * @brief	: Clear MSR interrupt.
+ * @param  :TrackSel: bit 0 for track 1;bit 1 for track 2;bit 2 for track 3;bit 4 for all track.
+*/
+void  MSR_ClearIT(uint8_t TrackSel );
+
+ /**
+ * @brief	:MSR Module software reset
+ * @param  none
+**/
+void MSR_SoftRest(void);
+
+/**
+ * @brief	:MSR Module ENABLE
+ * @param ：NewState :ENABLE or DISABLE
+**/
+void MSR_ENABLE(FunctionalState NewState);
+
+/**
+ * @brief	:read the  track data  write to memory down statu.
+ * @param ：TrackSel :TRACK_SELECT_1, TRACK_SELECT_2, TRACK_SELECT_3 ,TRACK_SELECT_ALL
+**/
+Boolean MSR_CheckTrackWRDone(uint8_t TrackSel);
+
+
+/**
+ * @brief	MSR AGC CONFIG
+ * @param ：track :TRACK_SELECT_1, TRACK_SELECT_2, TRACK_SELECT_3
+ * @param ：gain_fixed :max value is 0x3f
+**/
+void MSR_agc_config(int track,  uint32_t gain_fixed);
+
+
+/**
+ * @brief	MSR track select(call after MSR_Init)
+ * @param ：track :TRACK_SELECT_1, TRACK_SELECT_2 or TRACK_SELECT_3
+ * @return ：none
+**/
+void MSR_track_select(int track);
+
+
+/**
+ * @brief  get MSR lib version
+ * @param  none
+ * @return lib version:
+ *					bit0~bit15:low version number
+ *					bit0~bit15:high version number
+ */
+uint32_t MSR_GetVersion(void);
+#endif /*__YC_MSR_H__*/
+
+/*-----------------------------------*/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_msr/yc_msr.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/Librarier/sdk/yc_msr/yc_msr.lib
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/Librarier/sdk/yc_msr/yc_msr_single.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/Librarier/sdk/yc_msr/yc_msr_single.lib
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_emv_contactless_l1.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_emv_contactless_l1.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_emv_contactless_l1.h	(working copy)
@@ -0,0 +1,520 @@
+/**
+  ******************************************************************************
+  * @file    yc_emv_contactless_l1.h
+  * @author  YiChip Application Team
+  * @version V2.6
+  * @date    10-May-2019
+  * @brief   This file contains all the functions prototypes for EMV 2.6
+  *                      contactless level 1 interface
+  ******************************************************************************
+  */
+
+#ifndef __YC_EMV_CONTACTLESS_L1_H_
+#define __YC_EMV_CONTACTLESS_L1_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "yc3121.h"
+#include "yc_nfc_common.h"
+#include "yc_timer.h"
+
+/* Modulation index */
+#define MOD_INDEX       0x10
+/* TX POWER*/
+#define PA_GAIN_VAL     0x1F
+/*RX MINLEVEL*/
+#define RX_MINLEVEL     0X18A
+/*while timeout*/
+#define W_TIME_OUT      0XFFFFFFFF
+//#define READ_RxVpp
+//#define  SDK_DEBUG
+/* Interface to configure the registers of YC5018 */
+extern void WRITEREG(unsigned char addr, unsigned char data);
+extern uint8_t READREG(unsigned char addr);
+
+/****************************** yc5018 reg table ***************************/
+#ifndef __YC5018_REG_TABLE_H_
+#define __YC5018_REG_TABLE_H_
+#define REG_PAGE_SELECT                 0
+#define REG_TOP_CTRL                    1
+#define REG_COMMAND                     2
+#define REG_FIFO_CTRL                   3
+#define REG_FIFO_LENGTH                 4
+#define REG_WATER_LEVEL                 5
+#define REG_FIFO_DATA                   6
+#define REG_IRQ0_STATE                  7
+#define REG_IRQ1_STATE                  8
+#define REG_IRQ0_CLEAR                  9
+#define REG_IRQ1_CLEAR                  10
+#define REG_IRQ0_EN                     11
+#define REG_IRQ1_EN                     12
+#define REG_ERROR_FLAG                  13
+#define REG_PROTOCOL_ERROR              14
+#define REG_T_CTRL                      15
+#define REG_T_PRESCAL_HI                16
+#define REG_T_PRESCAL_LO                17
+#define REG_T_RELOAD_HI                 18
+#define REG_T_RELOAD_LO                 19
+#define REG_T_VALUE_HI                  20
+#define REG_T_VALUE_LO                  21
+#define REG_TX_WAIT_CTRL                22
+#define REG_TX_WAIT_FREQ                23
+#define REG_TX_WAIT                     24
+#define REG_TX_CODER_CTRL               25
+#define REG_TX_CRC_CTRL                 26
+#define REG_MOD_WIDTH                   27
+#define REG_TX_TYPE_B_FRAMING           28
+#define REG_FRAM_CON                    29
+#define REG_RX_WAIT                     30
+#define REG_RX_WAIT_FREQ                31
+#define REG_RX_CODER_CTRL               32
+#define REG_RX_CRC_CTRL                 33
+#define REG_RX_BIT_CTRL                 34
+#define REG_RX_COLL                     35
+#define REG_RX_TYPE_B_FRAMING           36
+#define REG_RX_TOLERANCE                37
+#define REG_RX_LAST_BITS                38
+#define REG_EMD_CONDITION_MASK0         39
+#define REG_EMD_CONDITION_MASK1         40
+#define REG_EMD_STATUS0                 41
+#define REG_EMD_STATUS1                 42
+#define REG_EMD_FRAME_LENGTH            43
+#define REG_TX_FALL_GAIN0               44
+#define REG_TX_FALL_GAIN1               45
+#define REG_TX_FALL_GAIN2               46
+#define REG_TX_FALL_GAIN3               47
+#define REG_TX_FALL_GAIN4               48
+#define REG_TX_FALL_GAIN5               49
+#define REG_TX_FALL_GAIN6               50
+#define REG_TX_FALL_GAIN7               51
+#define REG_TX_RISE_GAIN0               52
+#define REG_TX_RISE_GAIN1               53
+#define REG_TX_RISE_GAIN2               54
+#define REG_TX_RISE_GAIN3               55
+#define REG_TX_RISE_GAIN4               56
+#define REG_TX_RISE_GAIN5               57
+#define REG_TX_RISE_GAIN6               58
+#define REG_TX_RISE_GAIN7               59
+#define REG_DEMOD_CTRL                  60
+#define REG_DEMOD_TYPEA_CTRL            61
+#define REG_MIN_LEVEL_LOW               62
+#define REG_MIN_LEVEL_HIGH              63
+#define REG_COLL_LEVEL                  64
+#define REG_RSSI_CALC_CONFIG            65
+#define REG_RSSI_CALC_CTRL              66
+#define REG_AVG_POW                     67
+#define REG_AVG_I                       68
+#define REG_AVG_Q                       69
+#define REG_DC_I                        70
+#define REG_DC_Q                        71
+#define REG_PMU_STATE                   72
+#define REG_CTRL_STATE                  73
+#define REG_DEMOD_STATE                 74
+#define REG_TOP_CTRL2                   80
+#define REG_WUC_PERIOD                  81
+#define REG_CLK_CTRL                    82
+#define REG_ADC_CTRL                    83
+#define REG_ADC_VALUE_I                 84
+#define REG_ADC_VALUE_Q                 85
+#define REG_CAP_CTRL1                   86
+#define REG_CAP_CTRL2                   87
+#define REG_DEBUG_CTRL                  88
+#define REG_PIN_MUX_CTRL                89
+#define REG_PIN_PE_CTRL                 90
+#define REG_METAL_FIX_CTRL              91
+#define REG_METAL_FIX_REG_13P56         92
+#define REG_METAL_FIX_REG_32K           93
+#define REG_RESERVED_REG                94
+#define REG_GPIO_DS_CTRL                95
+#define REG_TX_PA_GAIN                  97
+#define REG_TX_PA_MOD_GAIN              98
+#define REG_TX_PA_GAIN_CTRL             99
+#define REG_XTAL_STABLE_TIME            104
+#define REG_MODEM_STATE_FORCE_MODE      105
+#define REG_LPCD0_CNT_TIME              106
+#define REG_LPCD0_CNT_THRESHOLD_HIGH    107
+#define REG_LPCD0_CNT_THRESHOLD_LOW     108
+#define REG_LPCD1_PA_SETTLE_TIME        109
+#define REG_LPCD1_DC_CALC_TIME          110
+#define REG_LPCD1_DC_THRESHOLD          111
+#define REG_LDO_CORE_LPO_CLK_CTRL       129
+#define REG_LDO_ADC_CLKGEN_LPO_CTRL     130
+#define REG_LDO_RX_LPCD_LPO_CTRL        131
+#define REG_LPO_XTAL_CTRL               132
+#define REG_XTAL_CTRL0                  133
+#define REG_XTAL_CTRL1                  134
+#define REG_XTAL_CTRL2                  135
+#define REG_XTAL_CTRL3                  136
+#define REG_XTAL_CTRL4                  137
+#define REG_ADC_CTRL0                   138
+#define REG_ADC_CTRL1                   139
+#define REG_ADC_CTRL2                   140
+#define REG_ADC_CTRL3                   141
+#define REG_ADC_CRTL4                   142
+#define REG_BBPLL_CTRL0                 143
+#define REG_BBPLL_CTRL1                 144
+#define REG_BBPLL_CTRL2                 145
+#define REG_BBPLL_CTRL3                 146
+#define REG_CLKGEN_CTRL                 147
+#define REG_RX_CTRL0                    148
+#define REG_RX_CTRL1                    149
+#define REG_RX_CTRL2                    150
+#define REG_RX_CTRL3                    151
+#define REG_RX_CTRL4                    152
+#define REG_RX_CTRL5                    153
+#define REG_RX_TEST_CTRL                154
+#define REG_TEST_PA_CTRL                155
+#define REG_DA_RX_FLT_GRCK_EN           171
+#define REG_DA_TX_PA_EN                 174
+
+#endif /*__YC5018_REG_TABLE_H_*/
+
+#define TX_BAUD_RATE_106        0
+#define TX_BAUD_RATE_212        1
+#define TX_BAUD_RATE_424        2
+#define TX_BAUD_RATE_848        3
+
+#define RX_BAUD_RATE_106        0
+#define RX_BAUD_RATE_212        1
+#define RX_BAUD_RATE_424        2
+#define RX_BAUD_RATE_848        3
+
+/* Error code reported to terminal */
+#define EMV_ERR_NONE                    0
+#define EMV_ERR_PARA                    1
+#define EMV_ERR_NO_CARD                 2
+#define EMV_ERR_COLLISION               3
+#define EMV_ERR_TIME_OUT                4
+#define EMV_ERR_TRANSMISSION            5
+#define EMV_ERR_PROTOCOL                6
+#define EMV_ERR_OVERFLOW                7
+#define EOT_IND_REMOVE                  8
+#define EOT_IND_POWER_OFF               9
+#define EOT_SHOUT                       10
+
+/*RX WAIT TIME*/
+#define	WAIT_ATQA_PRESCALER    0
+#define	WAIT_ATQA_RELOAD       2400   //176us  
+
+#define	WAIT_ATQB_PRESCALER    0
+#define	WAIT_ATQB_RELOAD       21240
+
+#define RX_CTRL3        0x3D
+#define RX_CTRL4        0x0B
+#define RX_CTRL5        0x7C
+
+#define RX_GAIN_6DB         ((0<<3) | (0<<5))
+#define RX_GAIN_12DB        ((1<<3) | (0<<5))
+#define RX_GAIN_18DB        ((2<<3) | (0<<5))
+#define RX_GAIN_24DB        ((3<<3) | (0<<5))
+#define RX_GAIN_30DB        ((3<<3) | (1<<5))
+#define RX_GAIN_36DB        ((3<<3) | (2<<5))
+#define RX_GAIN_42DB        ((3<<3) | (3<<5))
+#define RX_GAIN_48DB        ((3<<3) | (4<<5))
+#define RX_GAIN_54DB        ((3<<3) | (5<<5))
+
+#define RX_I_R_250                      0
+#define RX_I_R_500                      1
+#define RX_I_R_1K                       2
+#define RX_I_R_2K                       3
+#define RX_I_R_OPEN                     4
+
+#define Tp()                            Nfc_SysTick_Delay_Ms(6)
+#define Tretransmission()               Nfc_SysTick_Delay_Ms(8)
+#define Tresetdelay()                   Nfc_SysTick_Delay_Ms(10)
+#define Tpoweroff()                     Nfc_SysTick_Delay_Ms(20)
+
+#define FSD             256
+#define FSC_CHAINING    256
+
+#define IDLE            0x00
+#define RECEIVE         0x01
+#define TRANSMIT        0x02
+#define TRANSCEIVE      0x03
+
+#define I_BLOCK         0
+#define R_BLOCK         2
+#define S_BLOCK         3
+
+#define BIT0            0x01
+#define BIT1            0x02
+#define BIT2            0x04
+#define BIT3            0x08
+#define BIT4            0x10
+#define BIT5            0x20
+#define BIT6            0x40
+#define BIT7            0x80
+
+#define FIFO_LENGTH     64
+#define WATER_LEVEL     32
+
+#define CALI_OK         0
+#define CALI_FAIL       1
+#define DC_ACCEPT_RANGE 3
+
+#define WIN_SIZE_32     0
+#define WIN_SIZE_64     1
+#define WIN_SIZE_128    2
+#define WIN_SIZE_256    3
+
+#define get_dc_i()              READREG(REG_AVG_I)
+#define get_dc_q()              READREG(REG_AVG_Q)
+#define get_cali_i()            READREG(REG_RX_CTRL1)
+#define get_cali_q()            READREG(REG_RX_CTRL2)
+#define set_cali_i(rval)        WRITEREG(REG_RX_CTRL1, rval)
+#define set_cali_q(rval)        WRITEREG(REG_RX_CTRL2, rval)
+
+#if 1
+#define PRINT(format,...) MyPrintf(format,##__VA_ARGS__)
+#else
+#define PRINT(format,...)       ((void)0)
+#endif
+
+#define TYPE_A   0
+#define TYPE_B   1
+
+#define ON      1
+#define OFF     0
+
+#define CL1     0x93
+#define CL2     0x95
+#define CL3     0x97
+
+/**
+  * @brief  Common initialization
+  * @param  reg_config: used for external register configuration
+  *             @note if not use this value, can input NULL
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Init(void);
+
+/**
+  * @brief      Individual initialization
+  * @param  picc_type: specifies which kind of PICC to communicate
+  *   This parameter can be one of the values:
+  *     @arg TYPE_A: initialize PCD to communicate with type A PICC
+  *     @arg TYPE_B: initialize PCD to communicate with type B PICC
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Switch_Card_Type(unsigned char picc_type);
+
+/**
+  * @brief  RF switch on or off
+  * @param  on: specifies which switch on or switch off Operating Field
+  *   This parameter can be one of the values:
+  *     @arg ON:  switch on Operating Field
+  *     @arg OFF: switch off Operating Field
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Rf_Switch(unsigned char on);
+
+/**
+  * @brief  WUPA
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_WUPA(void);
+unsigned char AF_EMV_Contactless_L1_WUPA(void);
+
+/**
+  * @brief  REQA
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_REQA(void);
+
+
+/**
+  * @brief  Type A Collision Detection
+  *
+  * @param  None
+  * @retval Error code
+  */
+unsigned char EMV_A_Collision_Detect(void);
+unsigned char AF_A_Collision_Detect(void);
+
+/**
+  * @brief  ANTICOLLISION
+  * @param  cl锟斤拷 specifies cascade level
+  *   This parameter can be one of the values:
+  *     @arg CL1: cascase level 1
+  *     @arg CL2: cascase level 2
+  *     @arg CL2: cascase level 3
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_ANTICOLLISION(unsigned char cl);
+
+/**
+  * @brief  SELECT
+  * @note   When UID is complete, then check if PICC is compliant with ISO/IEC 14443-4
+  * @param  cl锟斤拷 specifies cascade level
+  *   This parameter can be one of the values:
+  *     @arg CL1: cascase level 1
+  *     @arg CL2: cascase level 2
+  *     @arg CL2: cascase level 3
+  * @param  UID_complete:
+  *                       1: UID not complete
+  *                       0: UID complete
+  *     @note if not use this value, can input NULL
+  * @param  ISOIEC14443_4_compliant:
+  *           1: PICC compliant with ISO/IEC 14443-4
+  *           0: PICC not compliant with ISO/IEC 14443-4
+  *     @note if not use this value, can input NULL
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_SELECT(unsigned char cl,
+                unsigned char *UID_complete,
+                unsigned char *ISOIEC14443_4_compliant);
+
+/**
+  * @brief  RATS
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_RATS(void);
+unsigned char AF_EMV_Contactless_L1_RATS(unsigned char  *output, unsigned char  *outlen);
+
+/**
+  * @brief  HLTA
+  * @param  None
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_HLTA(void);
+
+/**
+  * @brief  WUPB
+  * @param  ISOIEC14443_4_compliant:
+  *           1: PICC compliant with ISO/IEC 14443-4
+  *           0: PICC not compliant with ISO/IEC 14443-4
+  *     @note if not use this value, can input NULL
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_WUPB(unsigned char *ISOIEC14443_4_compliant);
+unsigned char AF_EMV_Contactless_L1_WUPB(unsigned char *ISOIEC14443_4_compliant);
+
+/**
+  * @brief  REQB
+  * @param  ISOIEC14443_4_compliant:
+  *           1: PICC compliant with ISO/IEC 14443-4
+  *           0: PICC not compliant with ISO/IEC 14443-4
+  *     @note if not use this value, can input NULL
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_REQB(unsigned char *ISOIEC14443_4_compliant);
+
+/**
+  * @brief  Type B Collision Detection
+  *
+  * @param  None
+  * @retval Error code
+  */
+unsigned char EMV_B_Collision_Detect(void);
+
+/**
+  * @brief  ATTRIB
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_ATTRIB(void);
+
+/**
+  * @brief  HLTB
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_HLTB(void);
+
+/**
+  * @brief  APDU processing
+  * @param  inf: APDU
+  * @param  inflen: APDU length
+  * @param  res: APDU response
+  * @param  reslen: APDU response length
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_APDU_Transceive(const unsigned char *inf,
+                unsigned short inflen,
+                unsigned char *res,
+                unsigned short *reslen);
+
+/**
+  * @brief  Enter low power mode
+  * @param  None
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Sleep(void);
+
+/**
+  * @brief  Exit low power mode
+  * @param  None
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Wake(void);
+
+/**
+  * @brief  Set carrier power
+  * @param  PaGain : 0~0xff
+  * @retval None
+  */
+void Set_Carrier_Strength(unsigned char PaGain);
+
+/**
+  * @brief  Set receive gain
+  * @param  RxGain :    #define RX_GAIN_6DB
+                                                #define RX_GAIN_12DB
+                                                #define RX_GAIN_18DB
+                                                #define RX_GAIN_24DB
+                                                #define RX_GAIN_30DB
+                                                #define RX_GAIN_36DB
+                                                #define RX_GAIN_42DB
+                                                #define RX_GAIN_48DB
+                                                #define RX_GAIN_54DB
+
+  * @param  RfAtt :    #define RX_I_R_250
+                                           #define RX_I_R_500
+                                           #define RX_I_R_1K
+                                           #define RX_I_R_2K
+                                           #define RX_I_R_OPEN
+  * @retval None
+  */
+void Set_Receive_Parameters(unsigned char RxGain,unsigned char RfAtt);
+
+/**
+  * @brief  Set Threshold
+  * @param  MinLevel : 0x120~0x300
+  * @retval None
+  */
+void Set_Min_Level(unsigned short MinLevel);
+
+/** @brief  calibration dc*/
+void set_rssi_calc_en(uint8_t en);
+void set_rx_gain(uint8_t gn);
+uint8_t dc_cali_i(void);
+uint8_t dc_cali_q(void);
+void force_dc_calc(void);
+void dc_cali_alg(uint8_t win_size);
+void NFC_time_start(void);
+void NFCtimer0_enable(unsigned long num);
+unsigned char  Aset_read_power_xRSSI_RXVPP(void);
+void NFCMsCount(void);
+unsigned int  NFC_gettim_cnt(void);
+void NFCMsCount(void);
+unsigned char NFC_Shout_cnt(unsigned int last_cntnum ,unsigned int Num_Ms);
+
+typedef struct
+{
+        uint8_t Type_A;
+        uint8_t Type_B;
+} EMV_Poll_Type_t;
+
+extern EMV_Poll_Type_t Poll_Type;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __YC_EMV_CONTACTLESS_L1_H_ */
+
+/******************* (C) COPYRIGHT 2019 YiChip Microelectronics *******************/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_emv_contactless_l1.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_emv_contactless_l1.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_emv_contactless_l1.c	(working copy)
@@ -0,0 +1,2572 @@
+#include "yc_emv_contactless_l1.h"
+
+/*
+//娉ㄦ剰1锛欵MV_Transceive鍑芥暟涓瓑寰呭彂閫佸畬鎴恮hile瓒呮椂閫鍑烘椂闂翠负15ms锛屼袱澶勭瓑寰呮帴鏀跺畬鎴恮hile瓒呮椂閫鍑烘椂闂翠负1s锛孯ATS涓瓀hile瓒呮椂閫鍑烘椂闂翠负1s.
+//娉ㄦ剰2锛歵ypeB鐨勮皟鍒舵繁搴﹀瘎瀛樺櫒REG_TX_PA_MOD_GAIN鐨勫艰缃繀椤诲ぇ浜庣瓑浜8
+//娉ㄦ剰3锛氬浣嶅紩鑴氱敱浣庡埌楂樺悗鍙互鍒ゆ柇REG_PMU_STATE瀵勫瓨鍣ㄥぇ浜庣瓑浜3鏃惰繘琛屽悗缁瘎瀛樺櫒閰嶇疆
+//娉ㄦ剰4锛氬鍔犱笂鐢礑C鐭鍔熻兘锛岀敤浜庨噺浜ф椂瀵规瘡涓姱鐗囩煫姝ｃ
+*/
+
+typedef enum
+{
+    CMD_WUPA,
+    CMD_REQA,
+    CMD_ANTICOLLISION,
+    CMD_SELECT,
+    CMD_RATS,
+    CMD_HLTA,
+    CMD_WUPB,
+    CMD_REQB,
+    CMD_ATTRIB,
+    CMD_HLTB,
+    CMD_IBLOCK,
+    CMD_SBLOCK,
+    CMD_RBLOCK
+} Cmd_t;
+
+
+
+EMV_Poll_Type_t Poll_Type;
+
+typedef struct
+{
+    unsigned char UID_CLn[3][5];
+} YC_EMV_Contactless_L1_PICC_A_pcb_t;
+
+static YC_EMV_Contactless_L1_PICC_A_pcb_t picc_a;
+
+typedef struct
+{
+    unsigned char PUPI[4];
+} YC_EMV_Contactless_L1_PICC_B_pcb_t;
+
+static YC_EMV_Contactless_L1_PICC_B_pcb_t picc_b;
+
+static unsigned char PCB;
+static signed char WTXM;
+static unsigned char FWI;
+static unsigned char FSCI;
+static unsigned char Block_Num;
+
+unsigned int  Contactless_mscnt = 0;
+
+#define 	TIM0_CNTNFC    TIM_CNT(0)
+const static unsigned short FSC_Table[] = {16, 24, 32, 40, 48, 64, 96,
+                                           128, 256, 512, 1024, 2048, 4096
+                                          };
+
+uint8_t gain_i_q_table[9][3] =
+{
+    {RX_GAIN_6DB, 0, 0},
+    {RX_GAIN_12DB, 0, 0},
+    {RX_GAIN_18DB, 0, 0},
+    {RX_GAIN_24DB, 0, 0},
+    {RX_GAIN_30DB, 0, 0},
+    {RX_GAIN_36DB, 0, 0},
+    {RX_GAIN_42DB, 0, 0},
+    {RX_GAIN_48DB, 0, 0},
+    {RX_GAIN_54DB, 0, 0},
+}; /* gain,i,q */
+
+static unsigned char bit_rate = 0;
+
+/**
+  * @brief      Set REG bit
+  * @param      addr: REG addr
+  * @param      mask: val
+  * @retval None
+  */
+void SETBITMASK(unsigned char addr, unsigned char mask)
+{
+    unsigned char reg=0;
+    reg = READREG(addr);
+    WRITEREG(addr, (reg | mask));
+}
+
+/**
+  * @brief      Clear REG bit
+  * @param      addr: REG addr
+  * @param      mask: val
+  * @retval None
+  */
+static void CLEARBITMASK(unsigned char addr, unsigned char mask)
+{
+    unsigned char reg=0;
+    reg = READREG(addr);
+    WRITEREG(addr, (reg & (~mask)));
+}
+
+/**
+  * @brief      Set time out timer.
+  * @param      prescal: prescaler of time out timer.
+  * @param      reload: reload of time out timer.
+  * @retval None
+  */
+static void EMV_Set_Timer(unsigned short prescal, unsigned short reload)
+{
+    WRITEREG(REG_T_PRESCAL_HI, (prescal >> 8) & 0x1f);
+    WRITEREG(REG_T_PRESCAL_LO, prescal & 0xff);
+    WRITEREG(REG_T_RELOAD_HI, (reload >> 8) & 0xff);
+    WRITEREG(REG_T_RELOAD_LO, reload & 0xff);
+    WRITEREG(REG_T_CTRL, 0x38);
+}
+
+/**
+  * @brief      N-th power of 2
+  * @param      n: number of power
+  * @retval     the result of N-th power of 2
+  */
+static unsigned int EMV_Power(unsigned char n)
+{
+    return (1 << n);
+}
+
+/**
+  * @brief      Set FWT
+  * @param      t: time
+  * @retval None
+  */
+static void EMV_Set_FWT(unsigned int t)
+{
+    unsigned short prescal=0, reload=0;
+
+    reload = 65535;
+    prescal = t / 65535 - 1;
+
+    EMV_Set_Timer(prescal, reload);
+}
+
+
+#define AntiColExceptionProcess()	do{										\
+										if(errno == EMV_ERR_PARA)			\
+										{									\
+											return EMV_ERR_PARA;			\
+										}									\
+										if(errno == EMV_ERR_TRANSMISSION)	\
+										{									\
+											return EMV_ERR_COLLISION;		\
+										}									\
+										else if(errno == EMV_ERR_PROTOCOL)	\
+										{									\
+											return EMV_ERR_PROTOCOL;		\
+										}									\
+										else if(errno == EMV_ERR_TIME_OUT)  \
+										{									\
+											++retr;							\
+											if(retr > 2)					\
+												return EMV_ERR_TIME_OUT;	\
+											Tretransmission();				\
+										}									\
+									}while(0)
+
+#define GeneralExceptionProcess()	do{										\
+										if(errno == EMV_ERR_PARA)			\
+										{									\
+											return EMV_ERR_PARA;			\
+										}									\
+										if(errno == EMV_ERR_TRANSMISSION)	\
+										{									\
+											return EMV_ERR_TRANSMISSION;	\
+										}									\
+										else if(errno == EMV_ERR_PROTOCOL)	\
+										{									\
+											return EMV_ERR_PROTOCOL;		\
+										}									\
+										else if(errno == EMV_ERR_TIME_OUT)  \
+										{									\
+											++retr;							\
+											if(retr > 2)					\
+												return EMV_ERR_TIME_OUT;	\
+											Tretransmission();				\
+										}									\
+									}while(0)
+
+/**
+  * @brief  Common initialization
+  * @param  reg_config: used for external register configuration
+  * @note if not use this value, can input NULL
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Init(void)
+{
+    SETBITMASK(REG_TOP_CTRL, 0x10);
+
+    WRITEREG(REG_IRQ0_EN, 0x00);
+    WRITEREG(REG_IRQ1_EN, 0x00);
+
+    WRITEREG(REG_COLL_LEVEL, 0x06);
+    WRITEREG(REG_DEMOD_CTRL, 0x88);
+
+    WRITEREG(REG_ADC_CTRL, 0x00);
+
+    WRITEREG(REG_TX_WAIT_CTRL, (((6780 >> 8) & 0x1f) << 2) | 0x02);
+    WRITEREG(REG_TX_WAIT_FREQ, 0);
+    WRITEREG(REG_TX_WAIT, 6780 & 0xff);
+
+    WRITEREG(REG_RX_WAIT, 0x3b);
+    WRITEREG(REG_RX_WAIT_FREQ, 0x04);
+
+    WRITEREG(REG_WATER_LEVEL, WATER_LEVEL);
+    WRITEREG(REG_MOD_WIDTH, 0x20);
+
+    WRITEREG(REG_TEST_PA_CTRL, 0x14);
+
+    SETBITMASK(REG_RSSI_CALC_CTRL, 0x02);
+    SETBITMASK(REG_RSSI_CALC_CONFIG, 0x04);
+
+    WRITEREG(REG_RX_CTRL3, RX_CTRL3);
+    WRITEREG(REG_RX_CTRL4, RX_CTRL4);
+    WRITEREG(REG_RX_CTRL5, RX_CTRL5);
+	
+	SETBITMASK(REG_RX_TYPE_B_FRAMING, 0x02);
+	SETBITMASK(REG_RX_TYPE_B_FRAMING, 0x01);
+
+    Set_Min_Level(RX_MINLEVEL);     //璁剧疆鎺ユ敹闂ㄩ檺
+    Set_Receive_Parameters(RX_GAIN_6DB, RX_I_R_500);       //璁剧疆鎺ユ敹澧炵泭鍙婂唴閮ㄧ數闃
+    Set_Carrier_Strength(PA_GAIN_VAL);  //璁剧疆鍙戝皠鍔熺巼
+}
+
+/**
+  * @brief  Set PCD read card type
+  * @param  picc_type: type
+  * @note   initialization Block_Num
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Switch_Card_Type(unsigned char picc_type)
+{
+    Block_Num = 0;
+
+    if (picc_type == TYPE_A)
+    {
+        WRITEREG(REG_TX_PA_MOD_GAIN, 0x00);
+        SETBITMASK(REG_TX_PA_GAIN_CTRL, 0x20);
+
+        WRITEREG(REG_TX_CODER_CTRL, 0x00);
+        WRITEREG(REG_RX_CODER_CTRL, 0x00);
+
+        WRITEREG(REG_TX_CRC_CTRL, 0x04);
+        WRITEREG(REG_RX_CRC_CTRL, 0x04);
+    }
+    else if (picc_type == TYPE_B)
+    {
+        WRITEREG(REG_TX_PA_MOD_GAIN, MOD_INDEX);
+        CLEARBITMASK(REG_TX_PA_GAIN_CTRL, 0x20);
+
+        WRITEREG(REG_TX_CODER_CTRL, 0x04);
+        WRITEREG(REG_RX_CODER_CTRL, 0x0c);
+
+        WRITEREG(REG_TX_CRC_CTRL, 0x12);
+        WRITEREG(REG_RX_CRC_CTRL, 0x12);
+    }
+}
+
+/**
+  * @brief  RF switch on or off
+  * @param  on: specifies which switch on or switch off Operating Field
+  *   This parameter can be one of the values:
+  *     @arg ON:  switch on Operating Field
+  *     @arg OFF: switch off Operating Field
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Rf_Switch(unsigned char on)
+{
+    if (on)
+    {
+        SETBITMASK(REG_TOP_CTRL, 0x01);
+        SETBITMASK(REG_TX_PA_GAIN_CTRL, 0x10);
+        SETBITMASK(REG_TX_PA_GAIN_CTRL, 0x20);
+    }
+    else
+    {
+        CLEARBITMASK(REG_TX_PA_GAIN_CTRL, 0x20);
+        CLEARBITMASK(REG_TX_PA_GAIN_CTRL, 0x10);
+		Nfc_SysTick_Delay_Ms(2);
+        CLEARBITMASK(REG_TOP_CTRL, 0x01);
+    }
+}
+
+
+
+
+
+void NFCtimer0_enable(unsigned long num)
+{
+    TIM_InitTypeDef TIM_struct;
+
+    enable_clock(CLKCLS_TIM);
+
+    TIM_struct.period = num;
+    TIM_struct.TIMx = (TIM_NumTypeDef)0;
+    TIM_Init(&TIM_struct);
+    TIM_Cmd((TIM_NumTypeDef)0, ENABLE);
+}
+
+void NFC_time_start(void)
+{
+    NFCtimer0_enable(0xffffffff);
+
+//    contactless_over_time_cnt = CONTACTLESS_OVER_TIME_VAL*CPU_MHZ;
+	
+	NFCMsCount();
+	
+
+}
+
+unsigned int  NFC_gettim_cnt(void)
+{
+	
+	return TIM0_CNTNFC;
+
+}
+void NFCMsCount(void)
+{
+	Contactless_mscnt  = (CPU_MHZ / 1000 );
+	
+
+}
+
+unsigned char NFC_Shout_cnt(unsigned int last_cntnum ,unsigned int Num_Ms)
+{
+
+	if((last_cntnum - TIM0_CNTNFC) >= Num_Ms * Contactless_mscnt)
+	{
+		return EOT_SHOUT;
+	
+	}
+		
+	else 
+	{
+		return 0;
+	
+	}
+
+}
+
+/**
+  * @brief Interface of transceiving.
+  * @param cmd: command
+  * @param request: data sent to PICC
+  * @param requestlen: length of data sent to PICC
+  * @param txalign: number of bit of last byte sent to PICC
+  * @param response: data received from PICC
+  * @param responselen: length of data received from PICC
+  * @param rxalign: the first bit received
+  * @retval Error code
+  */
+static unsigned char EMV_Transceive(Cmd_t cmd,
+                                    const unsigned char *request, unsigned short requestlen, unsigned char txalign,
+                                    unsigned char *response, unsigned short *responselen, unsigned char rxalign)
+{
+    unsigned short i = 0,errno=0;
+    unsigned char j = 0;
+    unsigned char len = 0;
+    unsigned int t = 0,cnt_num = 0;
+    unsigned char err_flag = 0;
+    if ((cmd != CMD_HLTA) && (!response || !responselen))
+    {
+        return EMV_ERR_PARA;
+    }
+    if (!request && (requestlen != 0))
+    {
+        return EMV_ERR_PARA;
+    }
+
+    WRITEREG(REG_COMMAND, IDLE);
+
+    SETBITMASK(REG_FIFO_CTRL, 0x01);
+    CLEARBITMASK(REG_FIFO_CTRL, 0x01);
+
+    WRITEREG(REG_IRQ0_CLEAR, 0xff);
+    WRITEREG(REG_IRQ0_CLEAR, 0x00);
+    WRITEREG(REG_IRQ1_CLEAR, 0x07);
+    WRITEREG(REG_IRQ1_CLEAR, 0x00);
+
+
+    if (bit_rate == TX_BAUD_RATE_106)
+    {
+        WRITEREG(REG_MOD_WIDTH, 0x26);
+        CLEARBITMASK(REG_TX_PA_GAIN_CTRL, 0x20);
+    }
+    else if (bit_rate == TX_BAUD_RATE_212)
+    {
+        WRITEREG(REG_MOD_WIDTH, 0x12); // 16.5~20
+        SETBITMASK(REG_TX_PA_GAIN_CTRL, 0x20);
+    }
+    else if (bit_rate == TX_BAUD_RATE_424)
+    {
+        WRITEREG(REG_MOD_WIDTH, 0x08); // 8~10
+        SETBITMASK(REG_TX_PA_GAIN_CTRL, 0x20);
+    }
+    else
+    {
+        WRITEREG(REG_MOD_WIDTH, 0x04); // 4~5
+        SETBITMASK(REG_TX_PA_GAIN_CTRL, 0x20);
+    }
+
+    if (txalign >= 8 || rxalign >= 8)
+    {
+        return EMV_ERR_PARA;
+    }
+    if (txalign != 0 || rxalign != 0)
+    {
+        CLEARBITMASK(REG_TX_CODER_CTRL, (BIT0 | BIT1 | BIT2) << 3);
+        CLEARBITMASK(REG_RX_BIT_CTRL, BIT0 | BIT1 | BIT2);
+
+        SETBITMASK(REG_TX_CODER_CTRL, txalign << 3);
+        SETBITMASK(REG_RX_BIT_CTRL, rxalign & 0x07);
+    }
+    else
+    {
+        CLEARBITMASK(REG_TX_CODER_CTRL, (BIT0 | BIT1 | BIT2) << 3);
+        CLEARBITMASK(REG_RX_BIT_CTRL, BIT0 | BIT1 | BIT2);
+    }
+
+    if (cmd == CMD_ANTICOLLISION || cmd == CMD_SELECT || cmd == CMD_RATS \
+            || cmd == CMD_HLTA || cmd == CMD_IBLOCK || cmd == CMD_RBLOCK  || cmd == CMD_SBLOCK)
+    {
+        SETBITMASK(REG_FRAM_CON, BIT0);
+        SETBITMASK(REG_FRAM_CON, BIT1);
+    }
+    else
+    {
+        CLEARBITMASK(REG_FRAM_CON, BIT0);
+        SETBITMASK(REG_FRAM_CON, BIT1);
+    }
+
+    if (cmd == CMD_WUPA || cmd == CMD_REQA || cmd == CMD_ANTICOLLISION)
+    {
+        CLEARBITMASK(REG_TX_CRC_CTRL, BIT0);
+        CLEARBITMASK(REG_RX_CRC_CTRL, BIT0);
+    }
+    else
+    {
+        SETBITMASK(REG_TX_CRC_CTRL, BIT0);
+        SETBITMASK(REG_RX_CRC_CTRL, BIT0);
+    }
+
+    if (cmd == CMD_ANTICOLLISION || cmd == CMD_SELECT)
+    {
+        EMV_Set_Timer(0, 1400);        //9 * 128 + 84/20
+    }
+
+    else if (cmd == CMD_WUPA || cmd == CMD_REQA)
+    {
+        EMV_Set_Timer(WAIT_ATQA_PRESCALER, WAIT_ATQA_RELOAD);        //9 * 128 + 84/20
+    }
+
+    else if (cmd == CMD_RATS)
+    {
+        EMV_Set_Timer(4, 58812);        //FWT,ACTIVATION + Delta,Tpcd(16.4ms)
+    }
+
+    else if (cmd == CMD_WUPB || cmd == CMD_REQB)
+    {
+        EMV_Set_Timer(WAIT_ATQB_PRESCALER, WAIT_ATQB_RELOAD);        //FWT,ATQB + Delta,Tpcd(16.4ms)
+    }
+
+    else if (cmd == CMD_IBLOCK || cmd == CMD_RBLOCK || cmd == CMD_ATTRIB || cmd == CMD_HLTB)
+    {
+        t = 256 * 16 * EMV_Power(FWI) + 49152 + 222384;                         //FWT + Delta,FWT + Delta,Tpcd
+        EMV_Set_FWT(t);
+    }
+    else if (cmd == CMD_SBLOCK)
+    {
+
+        if (WTXM * EMV_Power(FWI) > EMV_Power(14))
+        {
+            t = 256 * 16 * EMV_Power(14) + 49152 + 222384;                  //FWT + Delta,FWT + Delta,Tpcd
+            EMV_Set_FWT(t);
+        }
+        else
+        {
+            t = WTXM * 256 * 16 * EMV_Power(FWI) + 49152 + 222384;  //WTXM * FWT + Delta,FWT + Delta,Tpcd
+            EMV_Set_FWT(t);
+        }
+    }
+
+
+    if (cmd == CMD_IBLOCK)
+    {
+        WRITEREG(REG_FIFO_DATA, PCB);
+    }
+    for (i = 0; i < requestlen && i < FIFO_LENGTH - 3; i++)
+    {
+        WRITEREG(REG_FIFO_DATA, request[i]);
+    }
+
+
+    SETBITMASK(REG_IRQ0_CLEAR, 0x20);
+    CLEARBITMASK(REG_IRQ0_CLEAR, 0x20);
+
+
+    if (cmd == CMD_HLTA)
+    {
+        WRITEREG(REG_COMMAND, TRANSMIT);
+    }
+    else
+    {
+        WRITEREG(REG_COMMAND, TRANSCEIVE);
+    }
+    while (i < requestlen)
+    {
+
+        if ((READREG(REG_IRQ0_STATE) & 0x20) != 0)
+        {
+            if (requestlen - i > FIFO_LENGTH - WATER_LEVEL - 2)
+            {
+                for (j = 0; j < FIFO_LENGTH - WATER_LEVEL - 2; j++)
+                {
+                    WRITEREG(REG_FIFO_DATA, request[i++]);
+                }
+            }
+            else
+            {
+                for (; i < requestlen; i++)
+                {
+                    WRITEREG(REG_FIFO_DATA, request[i]);
+                }
+            }
+
+
+            SETBITMASK(REG_IRQ0_CLEAR, 0x20);
+            CLEARBITMASK(REG_IRQ0_CLEAR, 0x20);
+        }
+    }
+	cnt_num = NFC_gettim_cnt();
+	while ((READREG(REG_IRQ0_STATE) & 0x08) == 0)
+	{
+		#ifndef NFC_L1_TEST
+			errno = NFC_Shout_cnt(cnt_num,15);
+			if(errno != EMV_ERR_NONE)
+			{
+				#ifdef  SDK_DEBUG
+				MyPrintf("0 EOT_SHOUT\n");
+				#endif
+				return errno;
+			}
+		#endif
+	}
+	
+
+
+    SETBITMASK(REG_IRQ0_CLEAR, 0x40);
+    CLEARBITMASK(REG_IRQ0_CLEAR, 0x40);
+
+    if (cmd == CMD_HLTA)
+    {
+        return EMV_ERR_NONE;
+    }
+	cnt_num = NFC_gettim_cnt();
+    while (1)
+    {
+        if ((READREG(REG_IRQ0_STATE) & 0x01) != 0)
+        {
+            return EMV_ERR_TIME_OUT;
+        }
+        if ((READREG(REG_IRQ0_STATE) & 0x04) != 0)
+        {
+            break;
+        }
+
+
+        if ((READREG(REG_IRQ0_STATE) & 0x40) != 0)
+        {
+            break;
+        }
+		#ifndef NFC_L1_TEST
+			errno = NFC_Shout_cnt(cnt_num,1000);
+			if(errno != EMV_ERR_NONE)
+			{
+				#ifdef  SDK_DEBUG
+				MyPrintf("1 EOT_SHOUT\n");
+				#endif
+				return errno;
+			}
+		#endif
+		
+    }
+    *responselen = 0;
+	cnt_num = NFC_gettim_cnt();
+	while ((READREG(REG_IRQ0_STATE) & 0x04) == 0)
+	{
+        if ((READREG(REG_IRQ0_STATE) & 0x40) != 0)
+        {
+            for (i = 0; i < FIFO_LENGTH - WATER_LEVEL; i++)
+            {
+
+                if (*responselen > FSD)
+                {
+                    return EMV_ERR_OVERFLOW;
+                }
+                if (*responselen < FSD)
+                {
+                    response[*responselen] = READREG(REG_FIFO_DATA);
+                }
+                else
+                {
+                    READREG(REG_FIFO_DATA);
+                }
+
+                *responselen += 1;
+            }
+            SETBITMASK(REG_IRQ0_CLEAR, 0x40);
+            CLEARBITMASK(REG_IRQ0_CLEAR, 0x40);
+        }
+		#ifndef NFC_L1_TEST
+			errno = NFC_Shout_cnt(cnt_num,1000);
+			if(errno != EMV_ERR_NONE)
+			{
+				#ifdef  SDK_DEBUG
+				MyPrintf("2 EOT_SHOUT\n");
+				#endif
+				return errno;
+			}
+		#endif
+    }
+
+    len = READREG(REG_FIFO_LENGTH);
+    for (i = 0; i < len; i++)
+    {
+        if (*responselen > FSD)
+        {
+            return EMV_ERR_OVERFLOW;
+        }
+        if (*responselen < FSD)
+        {
+            response[*responselen] = READREG(REG_FIFO_DATA);
+        }
+        else
+        {
+            READREG(REG_FIFO_DATA);
+        }
+
+        *responselen += 1;
+    }
+
+    err_flag = READREG(REG_ERROR_FLAG);
+
+    if ((err_flag & 0x80) || (err_flag & 0x04) || (err_flag & 0x02) || (err_flag & 0x01))
+    {
+        return EMV_ERR_TRANSMISSION;
+    }
+    return EMV_ERR_NONE;
+}
+
+/**
+  * @brief  APDU processing
+  * @param  inf: APDU
+  * @param  inflen: APDU length
+  * @param  res: APDU response
+  * @param  reslen: APDU response length
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_APDU_Transceive(const unsigned char *inf,
+        unsigned short inflen,
+        unsigned char *res,
+        unsigned short *reslen)
+{
+    unsigned short i=0;
+
+    unsigned char Recv[FSD] = {0};
+    unsigned char S_Block[2] = {0};
+    unsigned char R_Block[1] = {0};
+
+    unsigned short FSC = 0;
+    unsigned char Send_Len = 0;
+    unsigned short Recv_Len = 0;
+    unsigned char Send_Offset = 0;
+    unsigned char Recv_Offset = 0;
+
+    unsigned char Swtx=0;
+
+    unsigned char Time_Out=0;
+
+    unsigned char Tran_Err=0;
+
+    unsigned char Retran=0;
+
+    unsigned char Recieving=0;
+    unsigned char errno = EMV_ERR_NONE;
+
+    if (!inf || !res || !reslen)
+    {
+        return EMV_ERR_PARA;
+    }
+
+#define ACK 0x0
+#define NAK 0x10
+#define SendFinish()    ((PCB & 0x10) == 0)
+#define SendRB(type)    do{                                                                                                                                                     \
+                                                    if(Swtx > 2)                                                                                                                    \
+                                                    {                                                                                                                                               \
+                                                            return EMV_ERR_TIME_OUT;                                                                                        \
+                                                    }                                                                                                                                               \
+                                                    if(Time_Out > 2)                                                                                                                \
+                                                    {                                                                                                                                               \
+                                                            return  EMV_ERR_TIME_OUT;                                                                                       \
+                                                    }                                                                                                                                               \
+                                                    if(Tran_Err > 2)                                                                                                                \
+                                                    {                                                                                                                                               \
+                                                            return EMV_ERR_TRANSMISSION;                                                                            \
+                                                    }                                                                                                                                               \
+                                                    R_Block[0] = (R_BLOCK << 6) | type | 0x22 | Block_Num;                                  \
+                                                    errno = EMV_Transceive(CMD_RBLOCK, R_Block, 1, 0, Recv, &Recv_Len, 0);  \
+                                            }while(0)
+
+    FSC = FSC_Table[FSCI];
+    if (FSC > FSC_CHAINING)
+    {
+        FSC = FSC_CHAINING;
+    }
+
+    *reslen = 0;
+
+    while (1)
+    {
+        if ((inflen - Send_Offset) > FSC - 3)
+        {
+            Send_Len = FSC - 3;
+            PCB = 0x12;
+        }
+        else
+        {
+            Send_Len = inflen - Send_Offset;
+            PCB = 0x02;
+        }
+        PCB |= Block_Num;
+        Retran = 0;
+
+send:
+        Swtx = 0;
+        Time_Out = 0;
+        Tran_Err = 0;
+        Recieving = 0;
+        errno = EMV_Transceive(CMD_IBLOCK, inf + Send_Offset, Send_Len, 0, Recv, &Recv_Len, 0);
+
+check:
+        if (errno == EOT_SHOUT)
+        {
+            return EOT_SHOUT;
+        }
+        if (errno == EMV_ERR_TIME_OUT)
+        {
+            Time_Out += 1;
+
+            if (Recieving)
+            {
+                SendRB(ACK);
+            }
+            else
+            {
+                SendRB(NAK);
+            }
+
+            goto check;
+        }
+
+        if (errno == EMV_ERR_TRANSMISSION)
+        {
+            Tran_Err += 1;
+
+            if (Recieving)
+            {
+                SendRB(ACK);
+            }
+            else
+            {
+                SendRB(NAK);
+            }
+
+            goto check;
+        }
+
+        switch ((Recv[0] >> 6) & 0x03)
+        {
+        case I_BLOCK:
+            if (Recv_Len + 2 > FSD)                                         //I-Block of length > FSD
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+            if ((Recv[0] & 0x20) || !(Recv[0] & 0x02))      //b6 must be 0, b2 must be 1.
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+            if ((Recv[0] & 0x08) || (Recv[0] & 0x04))       //CID and NAD are not allowed.
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+            if ((Recv[0] & 0x01) != Block_Num)
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+
+            if (!SendFinish())
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+
+            Block_Num ^= 0x01;
+            *reslen += Recv_Len - 1;
+            for (i = 1; i < Recv_Len; i++)
+            {
+                (res + Recv_Offset)[i - 1] = Recv[i];
+            }
+            Recv_Offset += Recv_Len - 1;
+
+            if (Recv[0] & 0x10)
+            {
+                Swtx = 0;
+                Time_Out = 0;
+                Tran_Err = 0;
+                Recieving = 1;
+
+                SendRB(ACK);
+
+                goto check;
+            }
+            else
+            {
+                return EMV_ERR_NONE;
+            }
+
+        case R_BLOCK:
+            if (!(Recv[0] & 0x20) || !(Recv[0] & 0x02))
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+            if ((Recv[0] & 0x08) || (Recv[0] & 0x04))
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+            if (Recv[0] & 0x10)
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+            else
+            {
+                if (Recieving)
+                {
+                    return EMV_ERR_PROTOCOL;
+                }
+
+
+                if ((Recv[0] & 0x01) != Block_Num)
+                {
+                    if (++Retran > 2)
+                    {
+                        return EMV_ERR_PROTOCOL;
+                    }
+
+                    goto send;
+                }
+
+
+                if (SendFinish())
+                {
+                    return EMV_ERR_PROTOCOL;
+                }
+
+
+                Block_Num ^= 0x01;
+                Send_Offset += Send_Len;
+            }
+
+            break;
+
+        case S_BLOCK:
+            if (Recv[0] & 0x01)
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+            if ((Recv[0] & 0x04) || (Recv[0] & 0x08))
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+            if (!(Recv[0] & 0x02) || ((Recv[0] & 0x30) != 0x30))
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+
+
+            WTXM = Recv[1] & 0x3f;
+            if ((WTXM < 1) || (WTXM > 59))
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+
+
+            S_Block[0] = (S_BLOCK << 6) | 0x30 | 0x02;
+
+            S_Block[1] = WTXM;
+
+            errno = EMV_Transceive(CMD_SBLOCK, S_Block, 2, 0, Recv, &Recv_Len, 0);
+
+            Swtx += 1;
+
+            goto check;
+
+        default:
+            return EMV_ERR_PROTOCOL;
+        }
+    }
+}
+
+/*********************************************************** Type A command ***************************************************************/
+/**
+  * @brief  WUPA
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_WUPA(void)
+{
+    unsigned char i=0;
+    unsigned short len = 0;
+    unsigned char errno = EMV_ERR_NONE;
+    unsigned char WUPA[1]={0};
+    unsigned char ATQA[FSD]={0};
+
+
+    YC_EMV_Contactless_L1_Switch_Card_Type(TYPE_A);
+    Tp();
+    WUPA[0] = 0x52;
+
+
+#ifdef SDK_DEBUG
+    PRINT("WUPA ->: %02x\r\n", WUPA[0]);
+#endif
+    Set_Receive_Parameters(RX_GAIN_18DB, RX_I_R_500);
+
+    errno = EMV_Transceive(CMD_WUPA, WUPA, 1, 7, ATQA, &len, 0);
+    if (errno == EMV_ERR_NONE)
+    {
+
+#ifdef SDK_DEBUG
+        PRINT("ATQA <-: ");
+        for (i = 0; i < len; i++)
+        {
+            PRINT("%02x ", ATQA[i]);
+        }
+        PRINT("\r\n");
+#endif
+        if (len != 2)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+    }
+
+    return errno;
+}
+
+/**
+  * @brief  REQA
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_REQA(void)
+{
+    unsigned char i=0;
+    unsigned short len = 0;
+    unsigned char errno = EMV_ERR_NONE;
+    unsigned char REQA[1]={0};
+    unsigned char ATQA[FSD]={0};
+
+    REQA[0] = 0x26;
+
+
+#ifdef  SDK_DEBUG
+    PRINT("REQA ->: %02x\r\n", REQA[0]);
+#endif
+
+    errno = EMV_Transceive(CMD_REQA, REQA, 1, 7, ATQA, &len, 0);
+
+
+    if (errno == EMV_ERR_NONE)
+    {
+#ifdef SDK_DEBUG
+        PRINT("ATQA <-: ");
+        for (i = 0; i < len; i++)
+        {
+            PRINT("%02x ", ATQA[i]);
+        }
+        PRINT("\r\n");
+#endif
+
+        if (len != 2)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+    }
+
+    return errno;
+}
+
+/**
+  * @brief  ANTICOLLISION
+  * @param  Cascade level锟斤拷 specifies cascade level
+  *   This parameter can be one of the values:
+  *     @arg CL1: cascase level 1
+  *     @arg CL2: cascase level 2
+  *     @arg CL2: cascase level 3
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_ANTICOLLISION(unsigned char cl)
+{
+    unsigned char i=0;
+    unsigned short len = 0;
+    unsigned char errno = EMV_ERR_NONE;
+    unsigned char ANTICOLLISION[2]={0};
+    unsigned char  UID_CLn_Temp[FSD]={0};
+
+    ANTICOLLISION[0] = cl;
+    ANTICOLLISION[1] = 0x20;
+
+
+    SETBITMASK(REG_RX_BIT_CTRL, 0x10);
+    CLEARBITMASK(REG_RX_BIT_CTRL, 0x08);
+
+#ifdef SDK_DEBUG
+    PRINT("ANTICOLLISION ->: ");
+    for (i = 0; i < 2; i++)
+    {
+        PRINT("%02x ", ANTICOLLISION[i]);
+    }
+    PRINT("\r\n");
+#endif
+
+    errno = EMV_Transceive(CMD_ANTICOLLISION, ANTICOLLISION, 2, 0, UID_CLn_Temp, &len, 0);
+
+#ifdef SDK_DEBUG
+    PRINT("\r\n");
+#endif
+    CLEARBITMASK(REG_RX_BIT_CTRL, 0x10);
+    SETBITMASK(REG_RX_BIT_CTRL, 0x08);
+
+
+    if (errno == EMV_ERR_NONE)
+    {
+
+#ifdef SDK_DEBUG
+        PRINT("UID CLn <-: ");
+        for (i = 0; i < len; i++)
+        {
+            PRINT("%02x ", UID_CLn_Temp[i]);
+        }
+        PRINT("\r\n");
+#endif
+        if (len != 5)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+
+        if (UID_CLn_Temp[4] != (((UID_CLn_Temp[0] ^ UID_CLn_Temp[1]) ^ UID_CLn_Temp[2]) ^ UID_CLn_Temp[3]))
+        {
+            return EMV_ERR_TRANSMISSION;
+
+        }
+        switch (cl)
+        {
+        case CL1:
+            for (i = 0; i < len; i++)
+            {
+                picc_a.UID_CLn[0][i] = UID_CLn_Temp[i];
+            }
+            break;
+
+        case CL2:
+            for (i = 0; i < len; i++)
+            {
+                picc_a.UID_CLn[1][i] = UID_CLn_Temp[i];
+            }
+            break;
+
+        case CL3:
+            for (i = 0; i < len; i++)
+            {
+                picc_a.UID_CLn[2][i] = UID_CLn_Temp[i];
+            }
+            break;
+
+        default:
+            return EMV_ERR_PARA;
+        }
+    }
+
+    return errno;
+}
+
+/**
+  * @brief  SELECT
+  * @note   When UID is complete, then check if PICC is compliant with ISO/IEC 14443-4
+  * @param  cl锟斤拷 specifies cascade level
+  *   This parameter can be one of the values:
+  *     @arg CL1: cascase level 1
+  *     @arg CL2: cascase level 2
+  *     @arg CL2: cascase level 3
+  * @param  UID_complete:
+  *                       1: UID not complete
+  *                       0: UID complete
+  *     @note if not use this value, can input NULL
+  * @param  ISOIEC14443_4_compliant:
+  *           1: PICC compliant with ISO/IEC 14443-4
+  *           0: PICC not compliant with ISO/IEC 14443-4
+  *     @note if not use this value, can input NULL
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_SELECT(unsigned char cl,
+        unsigned char *UID_complete,
+        unsigned char *ISOIEC14443_4_compliant)
+{
+    unsigned char i = 0;
+    unsigned short len = 0;
+    unsigned char errno = EMV_ERR_NONE;
+    unsigned char SELECT[7] = {0};
+    unsigned char SAK[FSD] = {0};
+
+    SELECT[0] = cl;
+    SELECT[1] = 0x70;
+
+    switch (cl)
+    {
+    case CL1:
+        for (i = 0; i < 5; i++)
+        {
+            SELECT[2 + i] = picc_a.UID_CLn[0][i];
+        }
+        break;
+
+    case CL2:
+        for (i = 0; i < 5; i++)
+        {
+            SELECT[2 + i] = picc_a.UID_CLn[1][i];
+        }
+        break;
+
+    case CL3:
+        for (i = 0; i < 5; i++)
+        {
+            SELECT[2 + i] = picc_a.UID_CLn[2][i];
+        }
+        break;
+
+    default:
+        return EMV_ERR_PARA;
+    }
+
+
+#ifdef SDK_DEBUG
+    PRINT("SELECT ->: ");
+    for (i = 0; i < 7; i++)
+    {
+        PRINT("%02x ", SELECT[i]);
+    }
+    PRINT("\r\n");
+#endif
+
+
+    errno = EMV_Transceive(CMD_SELECT, SELECT, 7, 0, SAK, &len, 0);
+
+    if (errno == EMV_ERR_NONE)
+    {
+#ifdef SDK_DEBUG
+        PRINT("SAK <-: ");
+        for (i = 0; i < len; i++)
+        {
+            PRINT("%02x ", SAK[i]);
+        }
+        PRINT("\r\n");
+#endif
+
+        if (len != 1)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+        if (UID_complete)
+        {
+            *UID_complete = (SAK[0] >> 2) & 0x01;
+        }
+
+        if (ISOIEC14443_4_compliant)
+        {
+            *ISOIEC14443_4_compliant = (SAK[0] >> 5) & 0x01;
+        }
+    }
+
+    return errno;
+}
+
+/**
+  * @brief  RATS
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_RATS(void)
+{
+    unsigned char i = 0;
+    unsigned short len = 0;
+    unsigned char SFGI = 0;
+    unsigned char TA = 0, TB = 0, TC = 0;
+    unsigned char errno = EMV_ERR_NONE;
+    unsigned char RATS[2]={0};
+	unsigned int cnt_num = 0;
+    unsigned char ATS[FSD]={0};
+
+    RATS[0] = 0xE0;
+
+    RATS[1] = ((0x8 & 0xf) << 4);
+
+    SETBITMASK(REG_RX_CODER_CTRL, 0x20);
+
+#ifdef SDK_DEBUG
+    PRINT("RATS ->: ");
+    for (i = 0; i < 2; i++)
+    {
+        PRINT("%02x ", RATS[i]);
+    }
+    PRINT("\r\n");
+#endif
+
+    errno = EMV_Transceive(CMD_RATS, RATS, 2, 0, ATS, &len, 0);
+
+    if (errno == EMV_ERR_NONE)
+    {
+#ifdef SDK_DEBUG
+        PRINT("ATS <-: ");
+        for (i = 0; i < len; i++)
+        {
+            PRINT("%02x ", ATS[i]);
+        }
+        PRINT("\r\n");
+#endif
+
+        if (ATS[0] != len)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+        FWI = 4;
+        FSCI = 2;
+
+        if (ATS[0] != 1)
+        {
+            if ((ATS[1] & 0xf) > 0xc)
+            {
+                FSCI = 0xc;
+            }
+            else
+            {
+                FSCI = ATS[1] & 0xf;
+            }
+
+            if (ATS[1] & 0x10)
+            {
+                TA = 1;
+            }
+
+            if (ATS[1] & 0x20)
+            {
+                TB = 1;
+            }
+
+            if (ATS[1] & 0x40)
+            {
+                TC = 1;
+            }
+
+            if (TA)
+            {
+
+
+            }
+
+            if (TB)
+            {
+
+                if (((ATS[2 + TA] >> 4) & 0x0f) == 15)
+                {
+                    FWI = 4;
+                }
+                else
+                {
+                    FWI = (ATS[2 + TA] >> 4) & 0x0f;
+                }
+
+
+                if ((ATS[2 + TA] & 0x0f) == 15)
+                {
+
+                }
+                else
+                {
+                    SFGI = ATS[2 + TA] & 0x0f;
+
+                    WRITEREG(REG_T_PRESCAL_HI, (4480 >> 8) & 0x1f);
+                    WRITEREG(REG_T_PRESCAL_LO, 4480 & 0xff);
+                    WRITEREG(REG_T_RELOAD_HI, (EMV_Power(SFGI) >> 8) & 0xff);
+                    WRITEREG(REG_T_RELOAD_LO, EMV_Power(SFGI) & 0xff);
+
+
+                    SETBITMASK(REG_IRQ0_CLEAR, 0x01);
+                    CLEARBITMASK(REG_IRQ0_CLEAR, 0x01);
+
+
+                    WRITEREG(REG_T_CTRL, 0x01);
+                    WRITEREG(REG_T_CTRL, 0x00);
+					cnt_num = NFC_gettim_cnt();
+                    while ((READREG(REG_IRQ0_STATE) & 0x01) == 0)
+					{
+						#ifndef NFC_L1_TEST
+							errno = NFC_Shout_cnt(cnt_num,1000);
+							if(errno != EMV_ERR_NONE)
+							{
+								#ifdef  SDK_DEBUG
+								MyPrintf("3 EOT_SHOUT\n");
+								#endif
+								return errno;
+							}
+						#endif
+					}
+                }
+            }
+            if (TC)
+            {
+
+            }
+
+
+        }
+    }
+
+    return errno;
+}
+
+/**
+  * @brief  HLTA
+  * @param  None
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_HLTA(void)
+{
+    unsigned char i = 0;
+    unsigned char HLTA[2] = {0};
+
+    HLTA[0] = 0x50;
+    HLTA[1] = 0x00;
+
+#ifdef SDK_DEBUG
+    PRINT("HLTA ->: ");
+    for (i = 0; i < 2; i++)
+    {
+        PRINT("%02x ", HLTA[i]);
+    }
+    PRINT("\r\n");
+#endif
+
+    EMV_Transceive(CMD_HLTA, HLTA, 2, 0, NULL, NULL, 0);
+}
+
+/*********************************************************** Type B command ***************************************************************/
+/**
+  * @brief  WUPB
+  * @param  ISOIEC14443_4_compliant:
+  *           1: PICC compliant with ISO/IEC 14443-4
+  *           0: PICC not compliant with ISO/IEC 14443-4
+  *     @note if not use this value, can input NULL
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_WUPB(unsigned char *ISOIEC14443_4_compliant)
+{
+    unsigned char i = 0;
+    unsigned short len = 0;
+    unsigned char errno = EMV_ERR_NONE;
+    unsigned char ATQB[FSD] = {0};
+    unsigned char WUPB[3] = {0};
+
+    YC_EMV_Contactless_L1_Switch_Card_Type(TYPE_B);
+    Nfc_SysTick_Delay_Ms(3);
+
+    WUPB[0] = 0x05;
+    WUPB[1] = 0x00;
+    WUPB[2] = 0x08;
+
+#ifdef SDK_DEBUG
+    PRINT("WUPB ->: ");
+    for (i = 0; i < 3; i++)
+    {
+        PRINT("%02x ", WUPB[i]);
+    }
+    PRINT("\r\n");
+#endif
+
+
+    errno = EMV_Transceive(CMD_WUPB, WUPB, 3, 0, ATQB, &len, 0);
+
+    if (errno == EMV_ERR_NONE)
+    {
+
+#ifdef SDK_DEBUG
+        PRINT("ATQB <-: ");
+        for (i = 0; i < len; i++)
+        {
+            PRINT("%02x ", ATQB[i]);
+        }
+        PRINT("\r\n");
+#endif
+
+        if (ATQB[0] != 0x50)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+        if (len < 12)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+
+        for (i = 0; i < 4; i++)
+        {
+            picc_b.PUPI[i] = ATQB[1 + i];
+        }
+
+
+        if (((ATQB[10] >> 4) & 0xf) > 0xc)
+        {
+            FSCI = 0xc;
+        }
+        else
+        {
+            FSCI = (ATQB[10] >> 4) & 0xf;
+        }
+
+
+        if (ISOIEC14443_4_compliant)
+        {
+            *ISOIEC14443_4_compliant = ATQB[10] & 0x1;
+        }
+
+        if ((ATQB[10] & 0x8) != 0)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+
+        if (((ATQB[11] >> 4) & 0xf) == 15)
+        {
+            FWI = 4;
+        }
+        else
+        {
+            FWI = (ATQB[11] >> 4) & 0xf;
+        }
+    }
+    return errno;
+}
+
+/**
+  * @brief  REQB
+  * @param  ISOIEC14443_4_compliant:
+  *           1: PICC compliant with ISO/IEC 14443-4
+  *           0: PICC not compliant with ISO/IEC 14443-4
+  *     @note if not use this value, can input NULL
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_REQB(unsigned char *ISOIEC14443_4_compliant)
+{
+    unsigned char i = 0;
+    unsigned short len = 0;
+    unsigned char errno = EMV_ERR_NONE;
+    unsigned char ATQB[FSD] = {0};
+    unsigned char REQB[3] = {0};
+
+    YC_EMV_Contactless_L1_Switch_Card_Type(TYPE_B);
+    Nfc_SysTick_Delay_Ms(3);
+
+    REQB[0] = 0x05;
+
+    REQB[1] = 0x00;
+
+    REQB[2] = 0x00;
+
+
+#ifdef SDK_DEBUG
+    PRINT("REQB ->: ");
+    for (i = 0; i < 3; i++)
+    {
+        PRINT("%02x ", REQB[i]);
+    }
+    PRINT("\r\n");
+#endif
+
+    errno = EMV_Transceive(CMD_REQB, REQB, 3, 0, ATQB, &len, 0);
+
+    if (errno == EMV_ERR_NONE)
+    {
+
+
+#ifdef SDK_DEBUG
+        PRINT("ATQB <-: ");
+        for (i = 0; i < len; i++)
+        {
+            PRINT("%02x ", ATQB[i]);
+        }
+        PRINT("\r\n");
+#endif
+
+        if (ATQB[0] != 0x50)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+        if (len < 12)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+
+        for (i = 0; i < 4; i++)
+        {
+            picc_b.PUPI[i] = ATQB[1 + i];
+        }
+
+
+        if (((ATQB[10] >> 4) & 0xf) > 0xc)
+        {
+            FSCI = 0xc;
+        }
+        else
+        {
+            FSCI = (ATQB[10] >> 4) & 0xf;
+        }
+
+
+        if (ISOIEC14443_4_compliant)
+        {
+            *ISOIEC14443_4_compliant = ATQB[10] & 0x1;
+        }
+
+        if ((ATQB[10] & 0x8) != 0)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+
+        if (((ATQB[11] >> 4) & 0xf) == 15)
+        {
+            FWI = 4;
+        }
+        else
+        {
+            FWI = (ATQB[11] >> 4) & 0xf;
+        }
+
+    }
+    return errno;
+}
+
+/**
+  * @brief  ATTRIB
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_ATTRIB(void)
+{
+    unsigned char i = 0;
+    unsigned short len = 0;
+    unsigned char errno = EMV_ERR_NONE;
+    unsigned char ATTRIB[9] = {0};
+    unsigned char  ATTRIB_RES[FSD] = {0};
+
+    ATTRIB[0] = 0x1D;
+
+    ATTRIB[1] = picc_b.PUPI[0];
+    ATTRIB[2] = picc_b.PUPI[1];
+    ATTRIB[3] = picc_b.PUPI[2];
+    ATTRIB[4] = picc_b.PUPI[3];
+
+    ATTRIB[5] = 0x00;
+
+    ATTRIB[6] = 0x8 & 0xf;
+
+    ATTRIB[7] = 0x01;
+
+    ATTRIB[8] = 0x00;
+
+
+    SETBITMASK(REG_RX_CODER_CTRL, 0x20);
+
+#ifdef SDK_DEBUG
+    PRINT("ATTRIB ->: ");
+    for (i = 0; i < 9; i++)
+    {
+        PRINT("%02x ", ATTRIB[i]);
+    }
+    PRINT("\r\n");
+#endif
+
+    errno = EMV_Transceive(CMD_ATTRIB, ATTRIB, 9, 0, ATTRIB_RES, &len, 0);
+
+    if (errno == EMV_ERR_NONE)
+    {
+
+
+#ifdef SDK_DEBUG
+        PRINT("ATTRIB_RES <-: ");
+        for (i = 0; i < len; i++)
+        {
+            PRINT("%02x ", ATTRIB_RES[i]);
+        }
+        PRINT("\r\n");
+#endif
+
+        if (len != 1)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+
+        if ((ATTRIB_RES[0] & 0xf) != 0x00)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+    }
+    return errno;
+}
+
+/**
+  * @brief  HLTB
+  * @param  None
+  * @retval Error code
+  */
+unsigned char YC_EMV_Contactless_L1_HLTB(void)
+{
+    unsigned char i = 0;
+    unsigned short len = 0;
+    unsigned char errno = EMV_ERR_NONE;
+    unsigned char HLTB[5] = {0};
+    unsigned char HLTB_RES[FSD] = {0};
+
+    HLTB[0] = 0x50;
+    HLTB[1] = picc_b.PUPI[0];
+    HLTB[2] = picc_b.PUPI[1];
+    HLTB[3] = picc_b.PUPI[2];
+    HLTB[4] = picc_b.PUPI[3];
+
+#ifdef SDK_DEBUG
+    PRINT("HLTB ->: ");
+    for (i = 0; i < 5; i++)
+    {
+        PRINT("%02x ", HLTB[i]);
+    }
+    PRINT("\r\n");
+#endif
+
+    errno = EMV_Transceive(CMD_HLTB, HLTB, 5, 0, HLTB_RES, (unsigned short *)&len, 0);
+
+
+
+#ifdef SDK_DEBUG
+    PRINT("HLTB_RES <-: ");
+    for (i = 0; i < len; i++)
+    {
+        PRINT("%02x ", HLTB_RES[i]);
+    }
+    PRINT("\r\n");
+#endif
+
+    return errno;
+}
+
+static uint8_t EMV_Poll(void)
+{
+    uint8_t errno = 0;
+    Poll_Type.Type_A = 0;
+    Poll_Type.Type_B = 0;
+
+    while (1)
+    {
+
+        if (!Poll_Type.Type_A)
+        {
+            Tp();
+            errno  = YC_EMV_Contactless_L1_WUPA();
+
+            if (errno == EOT_SHOUT)
+            {
+                return EOT_SHOUT;
+            }
+
+            if (errno  != EMV_ERR_TIME_OUT)
+            {
+                Poll_Type.Type_A = 1;
+
+                YC_EMV_Contactless_L1_HLTA();
+            }
+
+            if (!Poll_Type.Type_B)
+            {
+                Tp();
+                errno  = YC_EMV_Contactless_L1_WUPB(NULL);
+                if (errno == EOT_SHOUT)
+                {
+                    return EOT_SHOUT;
+                }
+                if (errno != EMV_ERR_TIME_OUT)
+                {
+                    Poll_Type.Type_B = 1;
+                }
+            }
+            else
+            {
+                break;
+            }
+        }
+        else
+        {
+            break;
+        }
+
+        if (!(Poll_Type.Type_A || Poll_Type.Type_B))
+        {
+            return EMV_ERR_NO_CARD;
+        }
+    }
+
+    return EMV_ERR_NONE;
+}
+
+/**
+  * @brief  Type A Collision Detection
+  *                 Requirements 9.4: Type A Collision Detection
+  * @param  None
+  * @retval Error code
+  */
+unsigned char EMV_A_Collision_Detect(void)
+{
+    uint8_t i = 0;
+    uint8_t cl = 0;
+    uint8_t UID_complete = 0;
+    uint8_t ISOIEC14443_4_compliant = 0;
+    uint8_t retr = 0;
+    uint8_t errno = EMV_ERR_NONE;
+
+    Tp();
+
+    while (1)
+    {
+        errno = YC_EMV_Contactless_L1_WUPA();
+        if (errno == EOT_SHOUT)
+        {
+            return EOT_SHOUT;
+        }
+        if (errno == EMV_ERR_NONE)
+        {
+            break;
+        }
+
+        AntiColExceptionProcess();
+    }
+
+    do
+    {
+        ++i;
+
+        if (i == 1)
+        {
+            cl = CL1;
+        }
+        else if (i == 2)
+        {
+            cl = CL2;
+        }
+        else
+        {
+            cl = CL3;
+        }
+
+        retr = 0;
+        while (1)
+        {
+
+            errno = YC_EMV_Contactless_L1_ANTICOLLISION(cl);
+            if (errno == EOT_SHOUT)
+            {
+                return EOT_SHOUT;
+            }
+            if (errno == EMV_ERR_NONE)
+            {
+                break;
+            }
+
+            AntiColExceptionProcess();
+        }
+
+        retr = 0;
+        while (1)
+        {
+
+            errno = YC_EMV_Contactless_L1_SELECT(cl, &UID_complete, &ISOIEC14443_4_compliant);
+            if (errno == EOT_SHOUT)
+            {
+                return EOT_SHOUT;
+            }
+            if (errno == EMV_ERR_NONE)
+            {
+                break;
+            }
+
+            GeneralExceptionProcess();
+        }
+
+        if (!UID_complete)
+        {
+            if (!ISOIEC14443_4_compliant)
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+
+            break;
+        }
+
+        if (i == 3)
+        {
+            return EMV_ERR_PROTOCOL;
+        }
+
+    }
+    while (i < 3);
+
+    return errno;
+}
+/**
+  * @brief  Type B Collision Detection
+  *                     Requirements 9.5: Type B Collision Detection
+  * @param  None
+  * @retval Error code
+  */
+unsigned char EMV_B_Collision_Detect(void)
+{
+    uint8_t retr = 0;
+    uint8_t ISOIEC14443_4_compliant = 0;
+    uint8_t errno = EMV_ERR_NONE;
+
+    Tp();
+
+    while (1)
+    {
+
+        errno = YC_EMV_Contactless_L1_WUPB(&ISOIEC14443_4_compliant);
+        if (errno == EOT_SHOUT)
+        {
+            return EOT_SHOUT;
+        }
+        if (errno == EMV_ERR_NONE)
+        {
+            if (!ISOIEC14443_4_compliant)
+            {
+                return EMV_ERR_PROTOCOL;
+            }
+
+            break;
+        }
+
+        AntiColExceptionProcess();
+    }
+
+    return errno;
+}
+
+/**
+  * @brief  General Collision Detection
+  *                 Requirements 9.3: Collision Detection
+  * @param  None
+  * @retval Error code
+  */
+static uint8_t EMV_Collision_General_Detect(void)
+{
+    uint8_t errno = EMV_ERR_NONE;
+
+    if (Poll_Type.Type_A && Poll_Type.Type_B)
+    {
+        return EMV_ERR_COLLISION;
+    }
+    else if (Poll_Type.Type_A)
+    {
+        errno = EMV_A_Collision_Detect();
+    }
+    else if (Poll_Type.Type_B)
+    {
+        errno = EMV_B_Collision_Detect();
+    }
+
+    return errno;
+}
+
+/**
+  * @brief  PICC activation
+  * @param  None
+  * @retval error code
+  */
+static uint8_t EMV_Active(void)
+{
+    uint8_t retr = 0;
+    uint8_t errno = EMV_ERR_NONE;
+
+    errno = EMV_Poll();
+    if (errno == EOT_SHOUT)
+    {
+        return EOT_SHOUT;
+    }
+
+    if (errno != EMV_ERR_NONE)
+    {
+        return EMV_ERR_NO_CARD;
+    }
+
+    errno = EMV_Collision_General_Detect();
+    if (errno == EOT_SHOUT)
+    {
+        return EOT_SHOUT;
+    }
+
+    if (errno == EMV_ERR_NONE)
+    {
+        if (Poll_Type.Type_A)
+        {
+            while (1)
+            {
+
+                errno = YC_EMV_Contactless_L1_RATS();
+                if (errno == EOT_SHOUT)
+                {
+                    return EOT_SHOUT;
+                }
+                if (errno == EMV_ERR_NONE)
+                {
+                    break;
+                }
+
+                GeneralExceptionProcess();
+            }
+        }
+        else if (Poll_Type.Type_B)
+        {
+            while (1)
+            {
+
+                errno = YC_EMV_Contactless_L1_ATTRIB();
+                if (errno == EOT_SHOUT)
+                {
+                    return EOT_SHOUT;
+                }
+                if (errno == EMV_ERR_NONE)
+                {
+                    break;
+                }
+
+                GeneralExceptionProcess();
+            }
+        }
+    }
+
+    return errno;
+}
+
+/**
+  * @brief  Remove PICC
+  * @param  None
+  * @retval error code
+  */
+static uint8_t EMV_PICC_Remove(void)
+{
+    if (Poll_Type.Type_A)
+    {
+        YC_EMV_Contactless_L1_Switch_Card_Type(TYPE_A);
+
+        Tp();
+
+        while (YC_EMV_Contactless_L1_WUPA() != EMV_ERR_TIME_OUT)
+        {
+removea:
+            YC_EMV_Contactless_L1_HLTA();
+
+            Tp();
+        }
+
+        Tretransmission();
+
+        if (YC_EMV_Contactless_L1_WUPA() != EMV_ERR_TIME_OUT)
+        {
+            goto removea;
+        }
+
+        Tretransmission();
+
+        if (YC_EMV_Contactless_L1_WUPA() != EMV_ERR_TIME_OUT)
+        {
+            goto removea;
+        }
+
+        return EMV_ERR_TIME_OUT;
+    }
+    else if (Poll_Type.Type_B)
+    {
+        YC_EMV_Contactless_L1_Switch_Card_Type(TYPE_B);
+
+        Tp();
+
+        while (YC_EMV_Contactless_L1_WUPB(NULL) != EMV_ERR_TIME_OUT)
+        {
+removeb:
+            Tp();
+        }
+
+        Tretransmission();
+
+        if (YC_EMV_Contactless_L1_WUPB(NULL) != EMV_ERR_TIME_OUT)
+        {
+            goto removeb;
+        }
+
+        Tretransmission();
+
+        if (YC_EMV_Contactless_L1_WUPB(NULL) != EMV_ERR_TIME_OUT)
+        {
+            goto removeb;
+        }
+
+        return EMV_ERR_TIME_OUT;
+    }
+    else
+    {
+        return EMV_ERR_NO_CARD;
+    }
+}
+
+
+
+static uint8_t EMV_LoopBack(void)
+{
+    uint16_t i = 0;
+    uint8_t errno = EMV_ERR_NONE;
+    uint8_t res[FSD] = {0};
+    uint16_t reslen = 0;
+
+    const uint8_t APDU_PPSE[] = {0x00, 0xA4, 0x04, 0x00, 0x0E,
+                                 0x32, 0x50, 0x41, 0x59, 0x2E, 0x53, 0x59, 0x53, 0x2E, 0x44, 0x44, 0x46, 0x30, 0x31,
+                                 0x00
+                                };
+
+#ifdef SDK_DEBUG
+    PRINT("C-APDU ->: ");
+    for (i = 0; i < sizeof(APDU_PPSE); i++)
+    {
+        PRINT("%02x ", APDU_PPSE[i]);
+    }
+    PRINT("\n");
+#endif
+    errno = YC_EMV_Contactless_L1_APDU_Transceive(APDU_PPSE, sizeof(APDU_PPSE), res, &reslen);
+
+
+    if (errno != EMV_ERR_NONE)
+    {
+        return errno;
+    }
+
+
+#ifdef SDK_DEBUG
+    PRINT("R-APDU <-: ");
+    for (i = 0; i < reslen; i++)
+    {
+        PRINT("%02x ", res[i]);
+    }
+    PRINT("\n");
+#endif
+
+    while (1)
+    {
+        if (res[1] == 0x70)
+        {
+            return EOT_IND_REMOVE;
+        }
+
+        if (res[1] == 0x72)
+        {
+            return EOT_IND_POWER_OFF;
+        }
+
+
+#ifdef SDK_DEBUG
+        PRINT("C-APDU ->: ");
+        for (i = 0; i < reslen - 2; i++)
+        {
+            PRINT("%02x ", res[i]);
+        }
+        PRINT("\n");
+#endif
+
+        errno = YC_EMV_Contactless_L1_APDU_Transceive(res, reslen - 2, res, &reslen);
+
+        if (errno != EMV_ERR_NONE)
+        {
+            return errno;
+        }
+
+
+#ifdef SDK_DEBUG
+        PRINT("R-APDU <-: ");
+        for (i = 0; i < reslen; i++)
+        {
+            PRINT("%02x ", res[i]);
+        }
+        PRINT("\n");
+#endif
+    }
+}
+static void EMV_Field_Reset(void)
+{
+    YC_EMV_Contactless_L1_Rf_Switch(OFF);
+    Tp();
+    YC_EMV_Contactless_L1_Rf_Switch(ON);
+}
+
+static void EMV_Field_Power_Off(void)
+{
+    YC_EMV_Contactless_L1_Rf_Switch(OFF);
+    Tpoweroff();
+    YC_EMV_Contactless_L1_Rf_Switch(ON);
+}
+
+/**
+  * @brief  Enter low power mode
+  * @param  None
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Sleep(void)
+{
+    CLEARBITMASK(REG_TX_PA_GAIN_CTRL, 0x20);
+    CLEARBITMASK(REG_TX_PA_GAIN_CTRL, 0x10);
+    Nfc_SysTick_Delay_Ms(20);
+    CLEARBITMASK(REG_TOP_CTRL, BIT0);
+    SETBITMASK(REG_TOP_CTRL, BIT2);
+}
+
+/**
+  * @brief  Exit low power mode
+  * @param  None
+  * @retval None
+  */
+void YC_EMV_Contactless_L1_Wake(void)
+{
+    CLEARBITMASK(REG_TOP_CTRL, BIT2);
+    SETBITMASK(REG_TOP_CTRL, BIT0);
+}
+
+void set_dc_win(uint8_t win)
+{
+    uint8_t tmp = 0;
+    tmp = READREG(REG_RSSI_CALC_CONFIG);
+    WRITEREG(REG_RSSI_CALC_CONFIG, ((tmp & 0xFC) | win));
+}
+
+void set_rssi_calc_en(uint8_t en)
+{
+    uint8_t tmp = 0;
+    tmp = READREG(REG_RSSI_CALC_CTRL);
+    tmp = tmp & 0xfd;
+    tmp = tmp | ((en & 0x01) << 1);
+    WRITEREG(REG_RSSI_CALC_CTRL, tmp);
+}
+
+void force_dc_calc(void)
+{
+    uint8_t tmp = 0;
+    tmp = READREG(REG_RSSI_CALC_CTRL);
+    WRITEREG(REG_RSSI_CALC_CTRL, (tmp & 0xFE));
+    WRITEREG(REG_RSSI_CALC_CTRL, (tmp | 0x01));
+    Nfc_SysTick_Delay_Ms(1);
+    WRITEREG(REG_RSSI_CALC_CTRL, (tmp & 0xFE));
+    Nfc_SysTick_Delay_Ms(2);
+}
+uint8_t dc_cali_i(void)
+{
+    uint8_t cali = 0, dc = 0, cnt = 0;
+    set_cali_i(0x00);
+    while (1)
+    {
+        cnt ++;
+        force_dc_calc();
+        dc = get_dc_i();
+        cali = get_cali_i();
+        if (cnt == 0xff)
+        {
+            return CALI_FAIL;
+        }
+
+        if ((dc <= DC_ACCEPT_RANGE) || (dc >= (256 - DC_ACCEPT_RANGE)))
+        {
+            return CALI_OK;
+        }
+
+        if ((dc & 0x80) == 0)
+        {
+            if ((cali & 0x80) == 0)
+            {
+                if (cali == 0)
+                {
+                    cali = 0x80;
+                }
+                else
+                {
+                    cali = cali - 1;
+                }
+
+            }
+            else
+            {
+                if (cali == 0xff)
+                {
+                    cali = cali;
+                }
+                else
+                {
+                    cali = cali + 1;
+                }
+            }
+
+        }
+        else
+        {
+            if ((cali & 0x80) == 0)
+            {
+                if (cali == 0x7f)
+                {
+                    cali = 0x7f;
+                }
+                else
+                {
+                    cali = cali + 1;
+                }
+            }
+            else
+            {
+                if (cali == 0x80)
+                {
+                    cali = 0x00;
+                }
+                else
+                {
+                    cali = cali - 1;
+                }
+            }
+        }
+
+        set_cali_i(cali);
+
+    }
+}
+uint8_t dc_cali_q(void)
+{
+    uint8_t cali = 0, dc = 0, cnt = 0;
+    set_cali_q(0x00);
+    while (1)
+    {
+        cnt ++;
+        force_dc_calc();
+        dc = get_dc_q();
+
+        cali = get_cali_q();
+
+        if (cnt == 0xff)
+        {
+            return CALI_FAIL;
+        }
+
+        if ((dc <= DC_ACCEPT_RANGE) || (dc >= (256 - DC_ACCEPT_RANGE)))
+        {
+            return CALI_OK;
+        }
+        if ((dc & 0x80) == 0)
+        {
+            if ((cali & 0x80) == 0)
+            {
+                if (cali == 0)
+                {
+                    cali = 0x80;
+                }
+                else
+                {
+                    cali = cali - 1;
+                }
+            }
+            else
+            {
+                if (cali == 0xff)
+                {
+                    cali = cali;
+                }
+                else
+                {
+                    cali = cali + 1;
+                }
+            }
+        }
+        else
+        {
+            if ((cali & 0x80) == 0)
+            {
+                if (cali == 0x7f)
+                {
+                    cali = 0x7f;
+                }
+                else
+                {
+                    cali = cali + 1;
+                }
+            }
+            else
+            {
+                if (cali == 0x80)
+                {
+                    cali = 0x00;
+                }
+                else
+                {
+                    cali = cali - 1;
+                }
+            }
+        }
+        set_cali_q(cali);
+
+    }
+
+}
+
+void dc_cali_alg(uint8_t win_size)
+{
+    WRITEREG(REG_DA_RX_FLT_GRCK_EN, 0x00);
+    WRITEREG(REG_DA_TX_PA_EN, 0x00);
+    set_dc_win(win_size);
+
+    WRITEREG(REG_TOP_CTRL, 0x11);
+    set_rssi_calc_en(1);
+
+    WRITEREG(REG_ADC_CTRL, 0x08);
+
+    WRITEREG(REG_RX_CTRL3, RX_CTRL3);
+    WRITEREG(REG_RX_CTRL4, RX_CTRL4);
+    WRITEREG(REG_RX_CTRL5, RX_CTRL5);
+    Set_Receive_Parameters(RX_GAIN_6DB, RX_I_R_1K);
+
+    if (CALI_OK == dc_cali_i())
+    {
+        gain_i_q_table[0][1] = get_cali_i();
+    }
+    else
+    {
+        gain_i_q_table[0][1] = 0;
+    }
+    if (CALI_OK == dc_cali_q())
+    {
+        gain_i_q_table[0][2] = get_cali_q();
+    }
+    else
+    {
+        gain_i_q_table[0][2] = 0;
+    }
+    Set_Receive_Parameters(RX_GAIN_18DB, RX_I_R_500);
+
+    if (CALI_OK == dc_cali_i())
+    {
+        gain_i_q_table[2][1] = get_cali_i();
+    }
+    else
+    {
+        gain_i_q_table[2][1] = 0;
+    }
+    if (CALI_OK == dc_cali_q())
+    {
+        gain_i_q_table[2][2] = get_cali_q();
+    }
+    else
+    {
+        gain_i_q_table[2][2] = 0;
+    }
+}
+
+/************************************Parameter Adjustment Function**************************************/
+void Set_Carrier_Strength(unsigned char PaGain)
+{
+    WRITEREG(REG_TX_PA_GAIN, PaGain);
+}
+void Set_Receive_Parameters(unsigned char RxGain, unsigned char RfAtt)
+{
+    uint8_t val = 0;
+    uint8_t i = 0;
+
+    val = RxGain | RfAtt;
+    WRITEREG(REG_RX_CTRL0, val);
+    switch (RxGain)
+    {
+    case    RX_GAIN_6DB:
+        i = 0;
+        break;
+    case    RX_GAIN_12DB:
+        i = 1;
+        break;
+    case    RX_GAIN_18DB:
+        i = 2;
+        break;
+    case    RX_GAIN_24DB:
+        i = 3;
+        break;
+    case    RX_GAIN_30DB:
+        i = 4;
+        break;
+    case    RX_GAIN_36DB:
+        i = 5;
+        break;
+    case    RX_GAIN_42DB:
+        i = 6;
+        break;
+    case    RX_GAIN_48DB:
+        i = 7;
+        break;
+    case    RX_GAIN_54DB:
+        i = 8;
+        break;
+    default:
+        i = 0;
+        break;
+    }
+    WRITEREG(REG_RX_CTRL1, gain_i_q_table[i][1]);
+    WRITEREG(REG_RX_CTRL2, gain_i_q_table[i][2]);
+}
+
+void Set_Min_Level(unsigned short MinLevel)
+{
+    WRITEREG(REG_MIN_LEVEL_LOW, MinLevel & 0xFF);
+    WRITEREG(REG_MIN_LEVEL_HIGH, MinLevel >> 8);
+}
+void YC_EMV_Contactless_L1_InitRSSI(void)
+{
+    SETBITMASK(REG_TOP_CTRL, 0x10);
+    WRITEREG(REG_RX_CTRL3, 0x3D);
+    SETBITMASK(REG_RX_CTRL4, 0x01);
+    WRITEREG(REG_RX_CTRL5, 0x7C);
+    SETBITMASK(REG_RSSI_CALC_CONFIG, 0x04);
+    SETBITMASK(REG_RSSI_CALC_CTRL, 0x02);
+
+}
+
+
+uint8_t RSSI_maxi = 0, RSSI_maxq = 0;
+uint8_t Aset_read_power_index(void)
+{
+    uint8_t tmp = 0;
+    WRITEREG(REG_RSSI_CALC_CTRL, 0x02);
+    WRITEREG(REG_RSSI_CALC_CTRL, 0x03);
+    Nfc_SysTick_Delay_Us(100);
+    tmp = READREG(REG_AVG_POW);
+    RSSI_maxi = READREG(REG_AVG_I);
+    RSSI_maxq = READREG(REG_AVG_Q);
+    WRITEREG(REG_RSSI_CALC_CTRL, 0x00);
+
+
+    return tmp;
+
+
+}
+signed char positive_numi = 0, positive_numq = 0 ;
+signed char negative_numi = 0, negative_numq = 0 ;
+unsigned char  Aset_read_power_xRSSI(void)
+{
+
+    unsigned char tmp = 0, tmp_avgi = 0, tmp_avgq = 0;
+    set_dc_win(WIN_SIZE_128);
+
+    WRITEREG(REG_TX_PA_GAIN, PA_GAIN_VAL);
+
+    YC_EMV_Contactless_L1_Rf_Switch(ON);
+    Set_Receive_Parameters(RX_GAIN_6DB, RX_I_R_1K);       //璁剧疆鎺ユ敹澧炵泭鍙婂唴閮ㄧ數闃
+
+
+    WRITEREG(REG_ADC_CTRL, 0x08);
+    WRITEREG(REG_XTAL_CTRL4, 0x07);
+
+    WRITEREG(REG_RSSI_CALC_CTRL, 0x02);
+    WRITEREG(REG_RSSI_CALC_CTRL, 0x03);
+    Nfc_SysTick_Delay_Us(100);
+
+    tmp = READREG(REG_AVG_POW);
+    tmp_avgi = READREG(REG_AVG_I);
+    tmp_avgq = READREG(REG_AVG_Q);
+
+    if ((tmp_avgi & 0x80) | (tmp_avgq & 0x80))
+    {
+        negative_numi = tmp_avgi;
+        negative_numq = tmp_avgq;
+
+        return 11;
+
+    }
+    else
+    {
+        positive_numi = tmp_avgi;
+        positive_numq = tmp_avgq;
+        WRITEREG(REG_ADC_CTRL, 0x00);
+        WRITEREG(REG_XTAL_CTRL4, 0x06);
+        WRITEREG(REG_RSSI_CALC_CTRL, 0x02);
+
+        return 0;
+
+    }
+}
+
+unsigned char  Aset_read_power_xRSSI_RXVPP(void)
+{
+    unsigned char i = 0, j = 0, time = 0;
+
+
+    YC_EMV_Contactless_L1_InitRSSI();
+    YC_EMV_Contactless_L1_Rf_Switch(ON);
+
+    Nfc_SysTick_Delay_Ms(30);
+    while (0x0b == Aset_read_power_xRSSI())
+    {
+        time++;
+        YC_EMV_Contactless_L1_Rf_Switch(OFF);
+        Nfc_SysTick_Delay_Ms(30);
+        YC_EMV_Contactless_L1_Rf_Switch(ON);
+        if (time > 0x0f)
+        {
+            break;
+        }
+    }
+    set_dc_win(WIN_SIZE_256);
+
+    WRITEREG(REG_TX_PA_GAIN, 0);
+
+    YC_EMV_Contactless_L1_Rf_Switch(ON);
+    Set_Receive_Parameters(RX_GAIN_6DB, RX_I_R_1K);       //璁剧疆鎺ユ敹澧炵泭鍙婂唴閮ㄧ數闃
+
+    WRITEREG(REG_ADC_CTRL, 0x08);
+    WRITEREG(REG_XTAL_CTRL4, 0x07);
+    Nfc_SysTick_Delay_Us(100);
+
+
+    for (j = 0; j <= PA_GAIN_VAL; j++)
+    {
+        WRITEREG(REG_TX_PA_GAIN, j);
+        i = Aset_read_power_index();
+        PRINT("pa = 0x%02x, rssi = 0x%02x \r\n", j, i);
+
+    }
+    WRITEREG(REG_ADC_CTRL, 0x00);
+    WRITEREG(REG_XTAL_CTRL4, 0x06);
+    WRITEREG(REG_RSSI_CALC_CTRL, 0x02);
+
+    return i;
+}
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_nfc_common.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_nfc_common.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_nfc_common.h	(working copy)
@@ -0,0 +1,30 @@
+#ifndef __NFC_COMMON_H_
+#define __NFC_COMMON_H_
+
+#define STOP	0x00
+
+#include "yc_uart.h"
+#include "yc_gpio.h"
+#include "yc_spi.h"
+#include "yc_timer.h"
+#include "board_config.h"
+
+#define     __O     volatile                  /*!< defines 'write only' permissions     */
+#define     __IO    volatile                  /*!< defines 'read / write' permissions   */
+
+#define RST_Enable()	GPIO_Config(NFC_RST_PORT, NFC_RST_PIN, OUTPUT_HIGH);
+#define RST_Disable()	GPIO_Config(NFC_RST_PORT, NFC_RST_PIN, OUTPUT_LOW);
+
+#define NFC_CS_LOW()	
+#define NFC_CS_HIGH()	
+
+void Nfc_SysTick_Delay_Us(__IO uint32_t us);
+void Nfc_SysTick_Delay_Ms(__IO uint32_t ms);
+
+
+void WRITEREG(uint8_t addr, uint8_t data);
+uint8_t READREG(uint8_t addr);
+
+void YC_EMV_HwReset(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_nfc_common.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_nfc_common.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_nfc/yc_nfc_common.c	(working copy)
@@ -0,0 +1,80 @@
+#include "yc_nfc_common.h"
+
+void Nfc_SysTick_Delay_Us(uint32_t us)
+{
+    //((void(*)(int us))0x42bc+1)(us);
+    delay_us(us);
+}
+
+void Nfc_SysTick_Delay_Ms(uint32_t ms)
+{
+    //((void(*)(int ms))0x42e0+1)(ms);
+    delay_ms(ms);
+}
+
+/************************** Communication Interface ***************** -Start- */
+
+/* Hardware reset */
+void YC_EMV_HwReset(void)
+{
+    RST_Disable()
+    Nfc_SysTick_Delay_Ms(5);
+    RST_Enable()
+    Nfc_SysTick_Delay_Ms(20);
+}
+
+void WRITEREG(uint8_t addr, uint8_t data)
+{
+	uint8_t flag = 0, ucbuf[3] = {0};
+	
+	#ifdef NFC_CS_PIN
+	NFC_CS_LOW();
+	#endif	
+    if (addr & 0x80)	//page1
+    {
+        flag = 1;
+        ucbuf[0] = ((0x00 << 1) & 0xFE);
+        ucbuf[1] = 0x01;
+        SPI_SendBuff(NFC_SPI, ucbuf, 2);
+    }
+    ucbuf[0] = ((addr << 1) & 0xFE);
+    ucbuf[1] = data;
+    SPI_SendBuff(NFC_SPI, ucbuf, 2);
+    if (flag)
+    {
+        ucbuf[0] = ((0x00 << 1) & 0xFE);
+        ucbuf[1] = 0x00;
+        SPI_SendBuff(NFC_SPI, ucbuf, 2);
+    }
+	#ifdef NFC_CS_PIN
+	NFC_CS_HIGH();
+	#endif
+
+}
+uint8_t READREG(uint8_t addr)
+{
+    uint8_t reg = 0xFF, ucbuf[3] = {0};
+    uint8_t flag = 0;
+	#ifdef NFC_CS_PIN
+	NFC_CS_LOW();
+	#endif	
+    if (addr & 0x80)	//page1
+    {
+        flag = 1;
+        ucbuf[0] = ((0x00 << 1) & 0xFE);
+        ucbuf[1] = 0x01;
+        SPI_SendBuff(NFC_SPI, ucbuf, 2);
+    }
+    ucbuf[0] = (((addr << 1) & 0xFE) | 0x01);
+    SPI_SendAndReceiveData(NFC_SPI, ucbuf, 1, &reg, 1);
+    if (flag)
+    {
+        ucbuf[0] = ((0x00 << 1) & 0xFE);
+        ucbuf[1] = 0x00;
+        SPI_SendBuff(NFC_SPI, ucbuf, 2);
+    }
+	#ifdef NFC_CS_PIN
+	NFC_CS_HIGH();
+	#endif	
+    return reg;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_otp.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_otp.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_otp.h	(working copy)
@@ -0,0 +1,52 @@
+#ifndef __YC_OTP_H__
+#define __YC_OTP_H__
+
+#include "yc3121.h"
+
+/*
+ * @brief:  OTP deint
+ * @param:  none
+ * @return: none
+ */
+void deinit_otp(void);
+
+/*
+ * @brief:  OTP init
+ * @param:  none
+ * @return: none
+ */
+void init_otp(void);
+
+/*
+ * @brief:read_chip_life
+ * @param:none
+ * @return: lifecycle
+ */
+uint32_t read_chip_life(void);
+
+/*
+ * @brief:read_chipid
+ * @param:chip id
+ * @return: none
+ */
+void read_chipid(uint8_t *id);
+
+/*
+ * @brief:OTP read
+ * @param:addr
+ * @param:*data
+ * @param: len
+ * @return: 1-succ  0-fail
+ */
+uint8_t read_otp(uint32_t addr, uint8_t *data, uint32_t len);
+
+/*
+ * @brief:OTP write
+ * @param:addr
+ * @param:*data
+ * @param: len
+ * @return: 1-succ  0-fail
+ */
+uint8_t write_otp(uint32_t addr, uint8_t *data, uint32_t len);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_otp.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_otp.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_otp.c	(working copy)
@@ -0,0 +1,69 @@
+#include "yc_otp.h"
+
+/*
+ * @brief:  OTP deint
+ * @param:  none
+ * @return: none
+ */
+void deinit_otp(void)
+{
+    ((void(*)())FUNC_DEINIT_OTP_ADDR)();
+}
+
+/*
+ * @brief:  OTP init
+ * @param:  none
+ * @return: none
+ */
+void init_otp(void)
+{
+    ((void(*)())FUNC_INIT_OTP_ADDR)();
+}
+
+uint32_t read_chip_life(void)
+{
+    uint32_t life = 0;
+    init_otp();
+    life = ((uint32_t(*)(void))FUNC_READ_CHIPLF_ADDR)();
+    deinit_otp();
+    return life;
+}
+
+void read_chipid(uint8_t *id)
+{
+    init_otp();
+    ((void(*)(uint8_t *id))FUNC_READ_CHIPID_ADDR)(id);
+    deinit_otp();
+}
+
+/*
+ * @brief:  OTP read
+ * @param:  addr
+ * @param:  *data
+ * @param:  len
+ * @return: none
+ */
+uint8_t read_otp(uint32_t addr, uint8_t *data, uint32_t len)
+{
+    init_otp();
+    ((uint8_t(*)(uint32_t addr, uint8_t *data, uint32_t len))FUNC_READ_OTP_ADDR)(addr, data, len);
+    deinit_otp();
+    return SUCCESS;
+}
+
+/*
+ * @brief:  OTP write
+ * @param:  addr
+ * @param:  *data
+ * @param:  len
+ * @return: SUCCESS or ERROR
+ */
+uint8_t write_otp(uint32_t addr, uint8_t *data, uint32_t len)
+{
+    uint8_t rtn = 0;
+
+    //step2:
+    rtn = ((uint8_t(*)(uint32_t addr, uint8_t *data, uint32_t len))FUNC_WRITE_OTP_ADDR)(addr, data, len);
+
+    return rtn;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_power.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_power.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_power.h	(working copy)
@@ -0,0 +1,21 @@
+/*
+File Name    : yc_adc.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/03/10
+Description  : POWER encapsulation.
+*/
+
+#ifndef __YC_POWER_H__
+#define __YC_POWER_H__
+
+#include "yc3121.h"
+#include "type.h"
+#include "yc_timer.h"
+#include "yc_lpm.h"
+
+Boolean Power_Keyscan(void);
+
+Boolean Power_off(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_power.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_power.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_power.c	(working copy)
@@ -0,0 +1,31 @@
+#include "yc_power.h"
+
+#define POWER_GPIO_WEAKUP_BIT 31
+#define POWER_CHRG_WEAKUP_BIT 30
+
+Boolean Power_Keyscan(void)
+{
+	uint32_t powerkeystat = SYSCTRL_STATUS;
+	
+	if (powerkeystat & ((uint32_t)0x1 << POWER_GPIO_WEAKUP_BIT))
+	{
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
+Boolean Power_off(void)
+{
+	uint32_t data;
+	uint32_t powerkeystat = SYSCTRL_STATUS;
+	
+	if(!(powerkeystat & ((uint32_t)0x1 << POWER_CHRG_WEAKUP_BIT)))
+	{
+		while(Power_Keyscan());
+		data = lpm_bt_read(LPMBT_CONTROL0);
+		lpm_bt_write(LPMBT_CONTROL0, data & 0xfffbffff);
+	}
+
+	return FALSE;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_qr/YC_QRDecode.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_qr/YC_QRDecode.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_qr/YC_QRDecode.h	(working copy)
@@ -0,0 +1,24 @@
+#ifndef __YC_QRDECODE_H__
+#define __YC_QRDECODE_H__
+#include "yc3121.h"
+#include "YC_QRDecode_TypeDef.h"
+
+/*
+ * @brief:YC_QRDecode
+ * @param:QRDecode_Config_CB
+ * @param:len:  message len
+ * @param:buf:  message
+ * @return:  yc_qr_return_type_ENUM
+ */
+yc_qr_return_type_ENUM YC_QRDecode(QRDecode_Config_CB *p_QRDecode_Config,uint32_t *len, uint8_t *buf);
+
+/**
+ * @brief  get yichip scan code lib version
+ * @param  none
+ * @return lib version:
+ *					bit0~bit15:low version number
+ *					bit16~bit31:high version number
+ */
+uint32_t SC_GetVersion(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_qr/YC_QRDecode_TypeDef.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_qr/YC_QRDecode_TypeDef.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_qr/YC_QRDecode_TypeDef.h	(working copy)
@@ -0,0 +1,91 @@
+#ifndef __QRDECODE_TYPEDEF_H__
+#define __QRDECODE_TYPEDEF_H__
+
+#define CAMERA_SETPARA_NUM_MAX  (100)
+
+typedef struct _keyboard_config_CB_
+{
+    unsigned char mode;	//0: T KeyBoard 1:Matrix KeyBoard 2:powerKey exit
+		unsigned char line_num;
+	  unsigned char col_num;
+    unsigned char cancel_position;
+    unsigned char line1;
+    unsigned char line2;
+    unsigned char line3;
+    unsigned char line4;
+    unsigned char line5;
+    unsigned char line6;
+    unsigned char line7;
+    unsigned char line8;
+    unsigned char line9;
+    unsigned char line10;
+} keyboard_config_CB;
+
+typedef enum {UNKNOW =0,GC6153 = 1, BF3A02 = 2, BF30A2 = 3} camera_type_ENUM;
+typedef enum {CAMERA_LCD = 0, CAMERA_TFT = 1} camera_disp_ENUM;
+
+typedef struct _lcd_config_CB_
+{
+    Boolean is_init_lcd;
+	camera_disp_ENUM display_type;
+    unsigned char lcd_pin_rst;
+    unsigned char lcd_pin_cs;
+    unsigned char lcd_pin_clk;
+    unsigned char lcd_pin_mosi;
+    unsigned char lcd_pin_a0;
+    unsigned char lcd_pin_bl;     //bit7=1:  high light          =0:  low  light
+	unsigned char blank_line_number;  //Its implementation begins to count
+    unsigned char column_number;    //display column size
+    unsigned char start_column; // disstart cloumn 
+    Boolean is_turn_right; // picture turn right 90
+    unsigned char spi_baudspeed;//use spi SPI_BaudSpeed define
+} lcd_config_CB;
+
+typedef struct _camera_setpara_CB_
+{
+    unsigned char camera_setpara_num;
+    unsigned char camera_setpara[CAMERA_SETPARA_NUM_MAX][2];
+}camera_setpara_CB;
+
+typedef struct _camera_config_CB_
+{
+    unsigned char freq_mclk;
+    camera_type_ENUM camera_type;
+    unsigned char pin_sda;
+    unsigned char pin_scl;
+    unsigned char pin_reset;
+    unsigned char pin_pwdn;
+    unsigned char pin_mclk;
+    unsigned char pin_pclk;
+    unsigned char pin_data;
+    unsigned char pin_cs;
+    camera_setpara_CB camera_setparaCB;
+} camera_config_CB;
+
+typedef struct _QRDecode_Config_CB_
+{
+    lcd_config_CB      lcd_configCB;
+    keyboard_config_CB keyboard_configCB;
+    camera_config_CB   camera_configCB;
+    unsigned int       flash_backup_addr;
+	unsigned char      timeout;				//unit:  s
+} QRDecode_Config_CB;
+
+typedef enum {
+QR_CANCEL = 0,
+QR_SUCCESS = 1,
+QR_CAMERA_PWM_INIT_FAIL = -1,
+QR_CAMERA_IIC_INIT_FAIL = -2,
+QR_CAMERA_OPEN_FAIL = -3,
+QR_CAMERA_READ_FAIL = -4,
+QR_KEY_PARA_FAIL = -5,
+QR_CANCEL_KEY= -6,
+QR_CANCEL_TIMEOUT= -7,
+QR_BT_CONNECT_FAIL= -8,
+QR_FLASH_PARA_FAIL= -9,
+QR_BT_RECEIVE_FAIL= -10,
+QR_SPI_RECV_DATA_FAIL= -11,
+}yc_qr_return_type_ENUM;
+
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_qr/YC_QRDecode_lib.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/Librarier/sdk/yc_qr/YC_QRDecode_lib.lib
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/Librarier/sdk/yc_qspi.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_qspi.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_qspi.h	(working copy)
@@ -0,0 +1,152 @@
+/*
+File Name    : qspi.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/08/24
+Description  : QSPI operation.
+*/
+
+#ifndef __QSPI_H__
+#define __QSPI_H__
+
+#include "yc3121.h"
+#include "yc_otp.h"
+#include "misc.h"
+
+typedef enum {
+  YC_QFLASH_SIZE_UNKNOW = 0,
+  YC_QFLASH_SIZE_512KB = 1,
+  YC_QFLASH_SIZE_1MB = 2,
+  YC_QFLASH_SIZE_4MB = 3,
+} yc_qspi_flash_size_enum;
+
+/**
+  * @brief  qspi flash sectorerase(4k)
+  * @param  flash_addr
+  * @return none
+  */
+uint8_t qspi_flash_sectorerase(uint32_t flash_addr);
+
+/*
+ * @brief:block erase  32K
+ * @param:flash addr
+ * @return: ERROR ,SUCCESS
+ */
+uint8_t qspi_flash_blockerase32k(uint32_t flash_addr);
+
+/**
+  * @brief  qspi flash write
+  * @param  flash_addr, tx buf, len
+  * @return none
+  */
+uint8_t qspi_flash_write(uint32_t flash_addr, uint8_t *buf, uint32_t len);
+
+/**
+  * @brief  qspi flash read
+  * @param  flash_addr, rx buf, len
+  * @return none
+  */
+uint8_t qspi_flash_read(uint32_t flash_addr, uint8_t *buf,uint32_t len);
+
+
+/**
+  * @brief  enc erase flash 32yte
+  * @param  flash_addr
+  * @return none
+  */
+void enc_erase_flash_32byte(uint32_t flash_addr);
+
+
+/**
+  * @brief  enc erase flash 32k
+  * @param  flash_addr
+  * @return none
+  */
+void enc_erase_flash_32k(uint32_t flash_addr);
+
+/**
+  * @brief  enc erase flash app area
+  * @param  addr:MCU every 32k start addr
+  * @param  len:erase len
+  * @return none
+  */
+uint8_t enc_earse_flash_app_area(uint32_t addr,uint32_t len);
+
+/**
+  * @brief  enc write flash
+  * @param  flash_addr, tx buf, len
+  * @return none
+  */
+void enc_write_flash(uint32_t flash_addr,uint8_t *buf, uint32_t len);
+
+
+/**
+  * @brief  enc read flash
+  * @param  flash_addr, rx buf, len
+  * @return none
+  */
+void enc_read_flash(uint32_t flash_addr, uint8_t *buf, uint32_t len);
+
+/**
+  * @brief  enc read flash fast(You must sure that the read area is written in enc)
+  * @param  flash_addr, rx buf, len
+  * @return SUCCESS or ERROR
+  */
+uint8_t enc_read_flash_fast(uint32_t flash_addr, uint8_t *buf, uint32_t len);
+
+/**
+  * @brief  妫娴嬪湴鍧鍖哄煙鏄惁涓虹┖
+  * @param  startaddr, len
+  * @return none
+  */
+Boolean flash_blank_check(uint32_t startaddr,uint32_t len);
+
+
+/**
+  * @brief  prefetch
+  * @param  start_addr, end_addr
+  * @return none
+  */
+void prefetch(void *start_addr, void *end_addr);
+
+
+/**
+  * @brief  clear app info(reset into bootload)
+  * @param  none
+  * @return none
+  */
+void app_enable_download(void);
+
+
+/**
+  * @brief  clear app disable download flag(reset and gpio1(UART0_TX)to gnd into bootload)
+  * @param  none
+  * @return none
+  */
+void app_clear_disable_download_flag(void);
+
+/**
+  * @brief  update sign info
+  * @param  uint32_t boot_sign_info_addr:only boot sign info addr(sign info len is 288 byte)
+  * @return none
+  */
+void updateSignInfo(uint32_t boot_sign_info_addr);
+
+
+/**
+  * @brief  get qspi lib version
+  * @param  none
+  * @return lib version:
+	*											bit0~bit15:low version number
+	*											bit0~bit15:high version number
+  */
+uint32_t qspi_GetVersion(void);
+
+/**
+  * @brief  get qspi flash size
+  * @param  none
+  * @return yc_qspi_flash_size_enum
+  */
+yc_qspi_flash_size_enum read_flash_size(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_qspi.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/Librarier/sdk/yc_qspi.lib
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/Librarier/sdk/yc_rand.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_rand.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_rand.h	(working copy)
@@ -0,0 +1,41 @@
+#ifndef __YC_RAND_H
+#define __YC_RAND_H
+
+#include <math.h>
+#include "string.h"
+#include "yc3121.h"
+#include "yc_trng.h"
+
+#define RET_RAND_CHECK_FAILURE				(('M'<<24)|('R'<<16)|('C'<<8)|('F'))
+#define RET_RAND_CHECK_SUCCESS				(('M'<<24)|('R'<<16)|('C'<<8)|('S'))
+#define RET_RAND_CHECK_DATA_LENGTH_ERROR		(('M'<<24)|('R'<<16)|('C'<<8)|('L'))
+
+/**
+  * @brief	get random bytes
+  * @param	rand	:random data buffer
+  * @param	bytes	:size of rand data
+  * @retval		0:FAIL
+  *			other:len(SUCCESS)
+  */
+uint32_t RAND_Rand(void *rand, uint32_t bytes);
+
+uint32_t RAND_RandP(void *rand, uint32_t bytes, void *p_rng);
+
+/**
+  * @brief	check whether the data meet the requirement
+  * @param	rand	:random data buf
+  * @param	bytes	:range: 16 < bytes < 784
+  * @retval		:RET_RAND_CHECK_FAILURE
+  *			:RET_RAND_CHECK_SUCCESS
+  *			:RET_RAND_CHECK_DATA_LENGTH_ERROR
+  */
+uint32_t RAND_RandCheck(void *rand, uint32_t bytes);
+
+
+uint32_t RAND_Init(void);
+
+
+
+
+#endif
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_rand.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_rand.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_rand.c	(working copy)
@@ -0,0 +1,32 @@
+#include "yc_rand.h"
+
+static uint32_t TRand(void *buf, uint32_t bytes)
+{
+    uint32_t i;
+    for (i = 0; i < bytes; i++)
+    {
+        ((uint8_t *)buf)[i] = GetTRNGData_8bit();
+    }
+    return i;
+}
+
+uint32_t RAND_Rand(void *rand, uint32_t bytes)
+{
+    return TRand(rand, bytes);
+}
+
+uint32_t RAND_RandP(void *rand, uint32_t bytes, void *p_rng)
+{
+    return RAND_Rand(rand, bytes);
+}
+
+uint32_t RAND_RandCheck(void *rand, uint32_t bytes)
+{
+    return 0;
+}
+
+uint32_t RAND_Init()
+{
+    TRNG_Init();
+    return 0;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_rtc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_rtc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_rtc.h	(working copy)
@@ -0,0 +1,97 @@
+/*
+File Name    : yc_rtc.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/13
+Description  : RTC encapsulation.
+*/
+
+#ifndef __YC_RTC_H__
+#define __YC_RTC_H__
+
+#include "yc3121.h"
+#include "yc_lpm.h"
+
+/**
+ * @brief set RTC reference Register
+ *
+ * @param RefRegValue:reference Register value
+ *
+ * @retval none
+ */
+void RTC_SetRefRegister(uint32_t RefRegValue);
+
+/**
+ * @brief Get RTC reference Register
+ *
+ * @param RefRegValue:reference Register value
+ *
+ * @retval RTC reference Register
+ */
+uint32_t RTC_GetRefRegister(void);
+
+/**
+ * @brief set RTC WakeUp time(s)
+ *
+ * @param wake_RefRegValue:when RefRegValue==wake_RefRegValue WakeUp and into interrupt
+ *
+ * @retval none
+ */
+void RTC_SetWakeUpCounter(uint32_t wake_RefRegValue);
+
+/**
+ * @brief clear RTC interrupt
+ *
+ * @param none
+ *
+ * @retval none
+ */
+void RTC_ClearITPendingBit(void);
+
+/**
+ * @brief get RTC interrupt status
+ *
+ * @param none
+ *
+ * @retval RTC interrupt status
+ */
+ITStatus RTC_GetITStatus(void);
+
+/**
+ * @brief Set max count for one second
+ *
+ * @param secmax:count value.
+ *
+ * @retval none
+ *@
+ */
+void RTC_Set_SecMax(uint16_t secmax);
+
+/**
+ * @brief Config RTC
+ *
+ * @param NewState:Ennable or disable RTC.
+ *
+ * @retval none
+ */
+void RTC_Config(FunctionalState NewState);
+
+/**
+ * @brief Get RTC SecMax through 24M crystal.
+ *
+ * @param none
+ *
+ * @retval SecMax
+ */
+uint16_t RTC_Get_SexMax(void);
+
+/**
+ * @brief RTC Counter base calibration.
+ *
+ * @param none
+ *
+ * @retval none
+ */
+void RTC_Calibration(void);
+
+#endif   /* __YC_RTC_H__ */
Index: BT_doublebyte/sdk/Librarier/sdk/yc_rtc.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_rtc.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_rtc.c	(working copy)
@@ -0,0 +1,84 @@
+/*
+File Name    : yc_rtc.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/02/19
+Description  : RTC encapsulation.
+*/
+#include "yc_rtc.h"
+
+#define RTC_TIMER_ENABLE_BIT        17
+#define RTC_TIMEOUT_INTR_STATUS_BIT 31
+
+void RTC_SetRefRegister(uint32_t RefRegValue)
+{
+    lpm_write(LPM_RTC_CNT, RefRegValue);
+}
+
+uint32_t RTC_GetRefRegister(void)
+{
+    return (lpm_read(LPM_RTC_CNT));
+}
+
+void RTC_SetWakeUpCounter(uint32_t cnt)
+{
+    lpm_write(LPM_WKUP_TIMER, cnt);
+}
+
+void RTC_Config(FunctionalState NewState)
+{
+    uint32_t tmp = 0;
+    tmp = lpm_read(LPM_GPIO_WKHI);
+
+    if (NewState == ENABLE)
+    {
+        tmp |= (1 << RTC_TIMER_ENABLE_BIT);
+        lpm_write(LPM_GPIO_WKHI, tmp);
+    }
+    else
+    {
+        tmp &= (~(1 << RTC_TIMER_ENABLE_BIT));
+        lpm_write(LPM_GPIO_WKHI, tmp);
+    }
+}
+
+ITStatus RTC_GetITStatus(void)
+{
+    uint32_t tmp = lpm_read(LPM_STATUS);
+    if ((tmp >> 31) & 1)
+        return  SET;
+    else
+        return RESET;
+}
+
+void RTC_Set_SecMax(uint16_t secmax)
+{
+    (*LPM_SECMAX) = secmax;
+    while (SYSCTRL_LPM_STATUS & 0x40);
+}
+
+void RTC_ClearITPendingBit(void)
+{
+    RTC_Config(DISABLE);
+    RTC_Config(ENABLE);
+    uint32_t temp = lpm_read(LPM_CLR_INTR);
+    temp &= (~(0xff));
+    temp |= 0x6c;
+    lpm_write(LPM_CLR_INTR, temp);
+}
+
+uint16_t RTC_Get_SexMax(void)
+{
+    *(volatile byte *)0xc8042 = 0xc4;
+    *(volatile byte *)0xc800a = 0x80;
+    delay(10000000);
+    int mem_810a = *(volatile byte *)0xc810a;
+    mem_810a += (*(volatile byte *)0xc810b) << 8;
+    mem_810a += (*(volatile byte *)0xc810c) << 16;
+    return 49152000000 / mem_810a;
+}
+
+void RTC_Calibration(void)
+{
+    RTC_Set_SecMax(RTC_Get_SexMax());
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_spi.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_spi.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_spi.h	(working copy)
@@ -0,0 +1,144 @@
+/*
+File Name    : spi.h
+Author       : Yichip
+Version      : V1.1
+Date         : 2018/12/06
+Description  : SPI encapsulation.
+*/
+
+#ifndef __SPI_H__
+#define __SPI_H__
+
+#include "yc3121.h"
+
+typedef enum
+{
+    SPI0 = 1,
+    SPI1 = 2
+} SPIx_TypeDef;
+#define IS_SPIx(SPIx)  (SPIx==SPI0 || SPIx== SPI1)
+
+/** @
+  * @defgroup SPI_mode
+  */
+#define SPI_Mode_Master    ((uint8_t)0<<3)
+#define SPI_Mode_Slave     ((uint8_t)1<<3)
+#define IS_SPI_MODE(MODE)  (((MODE) == SPI_Mode_Master) || \
+                            ((MODE) == SPI_Mode_Slave))
+
+/** @
+  * @defgroup SPI_CPOL
+  */
+#define  SPI_CPOL_Low      ((uint8_t)0<<5)
+#define  SPI_CPOL_High     ((uint8_t)1<<5)
+
+#define IS_SPI_CPOL(CPOL)  (((CPOL) == SPI_CPOL_High) || \
+                            ((CPOL) == SPI_CPOL_Low))
+
+/** @
+  * @defgroup SPI_CPHA
+  */
+#define SPI_CPHA_First_Edge   ((uint8_t)0<<4)
+#define SPI_CPHA_Second_Edge  ((uint8_t)1<<4)
+
+#define IS_SPI_CPHA(CPHA)     (((CPHA) == SPI_CPHA_First_Edge) || \
+                               ((CPHA) == SPI_CPHA_Second_Edge))
+
+/** @
+  * @defgroup SPI_BaudSpeed
+  */
+#define SPI_BaudRatePrescaler_1               0
+#define SPI_BaudRatePrescaler_2               1
+#define SPI_BaudRatePrescaler_4               2
+#define SPI_BaudRatePrescaler_8               3
+#define SPI_BaudRatePrescaler_16              4
+#define SPI_BaudRatePrescaler_32              5
+#define SPI_BaudRatePrescaler_64              6
+#define SPI_BaudRatePrescaler_128             7
+#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER)  (((PRESCALER) == SPI_BaudRatePrescaler_1) || \
+                                               ((PRESCALER) == SPI_BaudRatePrescaler_2) || \
+                                               ((PRESCALER) == SPI_BaudRatePrescaler_4) || \
+                                               ((PRESCALER) == SPI_BaudRatePrescaler_8) || \
+                                               ((PRESCALER) == SPI_BaudRatePrescaler_16) || \
+                                               ((PRESCALER) == SPI_BaudRatePrescaler_32) || \
+                                               ((PRESCALER) == SPI_BaudRatePrescaler_64) || \
+                                               ((PRESCALER) == SPI_BaudRatePrescaler_128) )
+
+/** @
+  * @defgroup SPI_BaudSpeed
+  */
+#define IS_SPI_RW_Delay(x)   (x>0 && x<127)
+
+/**
+  * @brief  SPI Init structure definition
+  */
+typedef struct
+{
+    uint8_t Mode;                /*!< Specifies the SPI operating mode. This parameter
+                                    can be a value of @ref SPI_mode */
+
+    uint8_t CPOL;               /*!< Specifies the serial clock steady state.
+                                    This parameter can be a value of @ref SPI_Clock_Polarity */
+
+    uint8_t CPHA;                /*!< Specifies the clock active edge for the bit capture.
+                                    This parameter can be a value of @ref SPI_Clock_Phase */
+
+    uint8_t BaudRatePrescaler;   /*!< Specifies the Baud Rate prescaler value which will be
+                                    used to configure the transmit and receive SCK clock.
+                                    This parameter can be a value of @ref SPI_BaudRate_Prescaler.
+                                    @note The communication clock is derived from the master
+                                    clock. The slave clock does not need to be set. */
+
+    uint8_t RW_Delay;           /*!< Specifies the Delay time between send  and receive data,the
+                                    value must be 0 to 127 */
+} SPI_InitTypeDef;
+
+/**
+  * @brief  Initializes the SPIx peripheral according to the specified
+  *         parameters in the SPI_InitStruct .
+  * @param  SPIx: Select the SPI peripheral.
+  *         This parameter can be one of the following values:
+  *         SPI0, SPI1
+  * @param  SPI_InitStruct: pointer to a USART_InitTypeDef structure
+  *         that contains the configuration information for the specified SPI
+  *         peripheral.
+  * @retval None
+  */
+void SPI_Init(SPIx_TypeDef SPIx, SPI_InitTypeDef *SPI_InitStruct);
+
+/**
+  * @brief  Transmits one data via SPI DMA.
+  * @param  SPIx: Select the SPI or the SPI peripheral.
+  *         This parameter can be one of the following values:
+  *         SPI0, SPI1.
+  * @param  data: the data you want transmit.
+  * @retval None
+  */
+void SPI_SendData(SPIx_TypeDef SPIx, uint8_t data);
+
+/**
+  * @brief  Transmits datas via SPI DMA.
+  * @param  SPIx: Select the SPIx or the SPIx peripheral.
+  *         This parameter can be one of the following values:
+  *         SPI0, SPI1.
+  * @param  buf: pointer to a buf that contains the data you want send.
+  * @param  len: the buf length
+  * @retval None
+  */
+void  SPI_SendBuff(SPIx_TypeDef SPIx, uint8_t *buff, int len);
+
+/**
+  * @brief  Send data first then  recerive data.
+  *
+  * @param  SPIx: Select the SPI or the SPI peripheral.
+  *         This parameter can be one of the following values:
+  *         SPI0, SPI1.
+  * @param: TxBuff: pointer to a TxBuff  that contains the data you want send.
+  * @param: TxLen: the length of send datas
+  * @param: RxBuff: pointer to a TxBuff  that contains the data you want receive.
+  * @param: RxLen: the length of receive datas
+  * @retval None
+  */
+void SPI_SendAndReceiveData(SPIx_TypeDef SPIx, uint8_t *TxBuff, uint16_t TxLen, uint8_t *RxBuff, uint16_t RxLen);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_spi.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_spi.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_spi.c	(working copy)
@@ -0,0 +1,73 @@
+/*
+File Name    : spi.c
+Author       : Yichip
+Version      : V1.1
+Date         : 2019/12/06
+Description  : SPI encapsulation.
+*/
+#include "yc_spi.h"
+
+void SPI_Init(SPIx_TypeDef SPIx, SPI_InitTypeDef *SPI_InitStruct)
+{
+#define BITDELAY 8
+    uint32_t regspictrl = 0;
+
+    _ASSERT(IS_SPI_MODE(SPI_InitStruct->Mode));
+    _ASSERT(IS_SPI_BAUDRATE_PRESCALER(SPI_InitStruct->BaudRatePrescaler));
+    _ASSERT(IS_SPI_CPOL(SPI_InitStruct->CPOL));
+    _ASSERT(IS_SPI_CPHA(SPI_InitStruct->CPHA));
+    _ASSERT(IS_SPI_RW_Delay(SPI_InitStruct->RW_Delay));
+
+    regspictrl = SPI_InitStruct->Mode | \
+                 SPI_InitStruct->BaudRatePrescaler | \
+                 SPI_InitStruct->CPOL | \
+                 SPI_InitStruct->CPHA | \
+                 (SPI_InitStruct->RW_Delay) << BITDELAY;
+
+    switch (SPIx)
+    {
+    case SPI0:
+        SPID0_CTRL = regspictrl;
+        break;
+    case SPI1:
+        SPID1_CTRL = regspictrl;
+        break;
+    }
+}
+
+void SPI_SendData(SPIx_TypeDef SPIx, uint8_t data)
+{
+    volatile unsigned char pdata;
+    pdata = data;
+    DMA_SRC_ADDR(SPIx) = (int)(&pdata);
+    DMA_LEN(SPIx)      =  1 << 16;
+    DMA_START(SPIx)    = (1 << DMA_START_BIT);
+    while (!(DMA_STATUS(SPIx) & 1));
+}
+
+void SPI_SendBuff(SPIx_TypeDef SPIx, uint8_t *buff, int len)
+{
+    if (len < 1)
+    {
+        return;
+    }
+
+    DMA_SRC_ADDR(SPIx) = (int)buff;
+    DMA_LEN(SPIx)      = (len << 16);
+    DMA_START(SPIx)    = (1 << DMA_START_BIT);
+    while (!(DMA_STATUS(SPIx) & 1));
+}
+
+void SPI_SendAndReceiveData(SPIx_TypeDef SPIx, uint8_t *TxBuff, uint16_t TxLen, uint8_t *RxBuff, uint16_t RxLen)
+{
+    if (TxLen < 1)
+    {
+        return;
+    }
+
+    DMA_SRC_ADDR(SPIx)  = (int)TxBuff;
+    DMA_DEST_ADDR(SPIx) = (int)RxBuff;
+    DMA_LEN(SPIx)       = (TxLen << 16) | RxLen;
+    DMA_START(SPIx)     = (1 << DMA_START_BIT);
+    while (!(DMA_STATUS(SPIx) & 1));
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_ssc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_ssc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_ssc.h	(working copy)
@@ -0,0 +1,284 @@
+#ifndef __YC_SSC_H
+#define __YC_SSC_H
+
+#include "yc3121.h"
+#include "yc_lpm.h"
+#include "type.h"
+
+/* ssc interval*/
+#define INTERVAL_999MS                    ((uint32_t)0)
+#define INTERVAL_500MS                    ((uint32_t)1)
+#define INTERVAL_250MS                    ((uint32_t)2)
+#define INTERVAL_125MS                    ((uint32_t)3)
+#define IS_INTERVAL(ITV)                  ((ITV == INTERVAL_999MS) | \
+                                           (ITV == INTERVAL_500MS) | \
+                                           (ITV == INTERVAL_250MS) | \
+                                           (ITV == INTERVAL_125MS))
+
+/* tamper port mode*/
+#define TAMPER_Port_None_active           ((uint32_t)0x0000)
+#define TAMPER_Port_S01_active            ((uint32_t)0x0001)
+#define TAMPER_Port_S23_active            ((uint32_t)0x0002)
+#define TAMPER_Port_S45_active            ((uint32_t)0x0004)
+#define TAMPER_Port_S67_active            ((uint32_t)0x0008)
+#define TAMPER_Port_ALL_active            ((uint32_t)0x000F)
+#define IS_TAMPER_PORT_ACTIVE(PORT_ACTV)  (((PORT_ACTV) & (uint32_t)0xFFFFFFF0) == 0x0000)
+
+/* tamper port pull up*/
+#define TAMPER_Port_None_PU               ((uint32_t)0x0000)
+#define TAMPER_Port_S0_PU                 ((uint32_t)0x0001)
+#define TAMPER_Port_S1_PU                 ((uint32_t)0x0002)
+#define TAMPER_Port_S2_PU                 ((uint32_t)0x0004)
+#define TAMPER_Port_S3_PU                 ((uint32_t)0x0008)
+#define TAMPER_Port_S4_PU                 ((uint32_t)0x0010)
+#define TAMPER_Port_S5_PU                 ((uint32_t)0x0020)
+#define TAMPER_Port_S6_PU                 ((uint32_t)0x0040)
+#define TAMPER_Port_S7_PU                 ((uint32_t)0x0080)
+#define TAMPER_Port_All_PU                ((uint32_t)0x00FF)
+#define IS_TAMPER_PORT_PU(PORT_PU)        (((PORT_PU) & (uint32_t)0xFFFFFF00) == 0x00)
+
+/* tamper enable*/
+#define TAMPER_Port_S01                   ((uint32_t)0x0001)
+#define TAMPER_Port_S23                   ((uint32_t)0x0002)
+#define TAMPER_Port_S45                   ((uint32_t)0x0004)
+#define TAMPER_Port_S67                   ((uint32_t)0x0008)
+#define TAMPER_Port_ALL                   ((uint32_t)0x000F)
+#define IS_TAMPER_PORT(PORT)              (((PORT) & (uint32_t)0xFFFFFF00) == 0x00)
+
+/* tamper GlitchTimes */
+#define TAMPER_GlitchTimes_31_25US        ((uint32_t)0x0000)
+#define TAMPER_GlitchTimes_1ms            ((uint32_t)0x0001)
+#define TAMPER_GlitchTimes_4ms						((uint32_t)0x0002)
+#define TAMPER_GlitchTimes_8ms						((uint32_t)0x0003)
+#define IS_TAMPER_GLITCH_TIME(TIME)			  ((TIME == TAMPER_GlitchTimes_31_25US) | \
+                                           (TIME == TAMPER_GlitchTimes_1ms)     | \
+                                           (TIME == TAMPER_GlitchTimes_4ms)     | \
+                                           (TIME == TAMPER_GlitchTimes_8ms))
+
+/* temper pull up Hold Time*/
+#define TAMPER_PUPU_HoldTime_always       ((uint32_t)0x0000)/*!< always high*/
+#define TAMPER_PUPU_HoldTime_2ms          ((uint32_t)0x0001)/*!< 1/2*Check Frequency*/
+#define TAMPER_PUPU_HoldTime_8ms          ((uint32_t)0x0002)/*!< 1/4*Check Frequency*/
+#define TAMPER_PUPU_HoldTime_16ms         ((uint32_t)0x0003)/*!< 1/16*Check Frequency*/
+#define IS_TAMPER_PUPU_HOLD_TIME(TIME)    ((TIME == TAMPER_PUPU_HoldTime_always) | \
+                                           (TIME == TAMPER_PUPU_HoldTime_2ms)    | \
+                                           (TIME == TAMPER_PUPU_HoldTime_8ms)    | \
+                                           (TIME == TAMPER_PUPU_HoldTime_16ms))
+
+/* sensor dur*/
+#define SENSOR_DUR_ALWAYS_ON              ((uint32_t)0)
+#define SENSOR_DUR_2MS                    ((uint32_t)1)
+#define SENSOR_DUR_8MS                    ((uint32_t)2)
+#define SENSOR_DUR_16MS                   ((uint32_t)3)
+#define IS_SENSOR_DUR(DUR)                ((DUR == SENSOR_DUR_ALWAYS_ON) | \
+                                           (DUR == SENSOR_DUR_2MS)       | \
+                                           (DUR == SENSOR_DUR_8MS)       | \
+                                           (DUR == SENSOR_DUR_16MS))
+
+/* sensor delay*/
+#define SENEOR_DELAY_31_25US              ((uint32_t)0x0000)
+#define SENEOR_DELAY_250US                ((uint32_t)0x0001)
+#define SENEOR_DELAY_1_MS                 ((uint32_t)0x0002)
+#define SENEOR_DELAY_4MS                  ((uint32_t)0x0003)
+#define IS_SENEOR_DELAY(DELAY)            ((DELAY == SENEOR_DELAY_31_25US) | \
+                                           (DELAY == SENEOR_DELAY_250US)   | \
+                                           (DELAY == SENEOR_DELAY_1_MS)    | \
+                                           (DELAY == SENEOR_DELAY_4MS))
+
+/* LPM sensor enable*/
+#define LPM_BAT_VDT12L_ENABLE             ((uint32_t)0x0001)
+#define LPM_BAT_VDT33H_ENABLE             ((uint32_t)0x0002)
+#define LPM_BAT_VDT33L_ENABLE             ((uint32_t)0x0004)
+#define LPM_TEMPERATURE_40_ENABLE         ((uint32_t)0x0008)		/*!< Alarm below -40*/
+#define LPM_TEMPERATURE_120_ENABLE        ((uint32_t)0x0010)		/*!< Alarm above 120*/
+#define LPM_SENSOR_ALL_ENABLE             ((uint32_t)0x001F)
+#define IS_SENSOR_ENABLE(VALUE)           (((VALUE) & (uint32_t)0xFFFFFFE0) == 0x00)
+
+#define IS_BPK_LEN(VALUE, OFFSET)         (((VALUE > 0) && (VALUE <= 32))&& (VALUE+OFFSET) <= 32)
+
+//***********LPM**************//
+#define SSC_IT_VDT12L                    ((uint16_t)0x0001)
+#define SSC_IT_VDT33H                    ((uint16_t)0x0002)
+#define SSC_IT_VDT33L                    ((uint16_t)0x0004)
+#define SSC_IT_TEMPERATURE_120           ((uint16_t)0x0008)
+#define SSC_IT_TEMPERATURE_40            ((uint16_t)0x0010)
+#define SSC_IT_TAMPER_S0                 ((uint16_t)0x0020)
+#define SSC_IT_TAMPER_S1                 ((uint16_t)0x0040)
+#define SSC_IT_TAMPER_S2                 ((uint16_t)0x0080)
+#define SSC_IT_TAMPER_S3                 ((uint16_t)0x0100)
+#define SSC_IT_TAMPER_S4                 ((uint16_t)0x0200)
+#define SSC_IT_TAMPER_S5                 ((uint16_t)0x0400)
+#define SSC_IT_TAMPER_S6                 ((uint16_t)0x0800)
+#define SSC_IT_TAMPER_S7                 ((uint16_t)0x1000)
+#define SSC_IT_MESH_SHIELDING            ((uint16_t)0x2000)//mesh shileding alarm
+
+/* ssc secure sensor enable*/
+#define SSC_SECSURE__VDT12L_ENABLE        ((uint32_t)0x0001)
+#define SSC_SECSURE__VDT33H_ENABLE        ((uint32_t)0x0002)
+#define SSC_SECSURE__VDT33L_ENABLE        ((uint32_t)0x0004)
+#define SSC_BAT__VDT12L_ENABLE            ((uint32_t)0x0008)
+#define SSC_BAT__VDT33H_ENABLE            ((uint32_t)0x0010)
+#define SSC_BAT__VDT33L_ENABLE            ((uint32_t)0x0020)
+#define SSC_BAT__TEMPERATURE_120_ENABLE   ((uint32_t)0x0040)
+#define SSC_BAT__TEMPERATURE_40_ENABLE    ((uint32_t)0x0080)
+#define SSC_SECURE_SENSOR_ALL_ENABLE      ((uint32_t)0x00FF)
+#define IS_SSC_SEC_ENABLE(value)          (((value) & (uint32_t)0xFFFFFF00) == 0x00)
+
+/* ssc secure sensor interrupt status*/
+//**********SECURE**********//
+#define SSC_IT_LPM_VDT12L                 ((uint8_t)0x01)
+#define SSC_IT_SECSURE_VDT33H             ((uint8_t)0x02)
+#define SSC_IT_SECSURE_VDT33L             ((uint8_t)0x04)  //frequency detect
+#define SSC_IT_BAT_VDT12L                 ((uint8_t)0x08)
+#define SSC_IT_BAT_VDT33H                 ((uint8_t)0x10)
+#define SSC_IT_BAT_VDT33L                 ((uint8_t)0x20)
+#define SSC_IT_BAT_TEMPERATURE_120        ((uint8_t)0x40)
+#define SSC_IT_BAT_TEMPERATURE_40         ((uint8_t)0x80)
+
+typedef struct  
+{
+	uint32_t TAMPER_Port_mode;      /*!< bitx=0:static mode, bitx=1:Dynamic mode;	bit0:port S0 and S1		bit1:port S2 and S3		bit2:port S4 and S5		bit3:port S6 and S7 >!*/
+	uint32_t TAMPER_Port_PullUp;    /*!< bit 0~7 corresponding SENSOR_Port_S0~SENSOR_Port_S7,Static mode must be pull up, external grounding >!*/
+	uint32_t TAMPER_Port_Enable;    /*!< bit0:port S0 and S1		bit1:port S2 and S3		bit2:port S4 and S5		bit3:port S6 and S7 >!*/
+	uint32_t TAMPER_GlitchTimes;    /*!< Burr removal time >!*/
+	uint32_t TAMPER_PUPU_HoldTime;  /*!< 涓婃媺淇濇寔鏃堕棿 >!*/
+}TAMPER_InitTypeDef;
+
+/**
+  * @brief  Internal Set
+  *
+  * @param  ssc Interval
+  *
+  * @retval none
+  */
+void SSC_Interval(uint32_t Interval);
+
+/**
+  * @brief  Sheilding Alarm Enable
+  *
+  * @param  NewState : ENABLE or DISABLE
+  *
+  * @retval none
+  */
+void SSC_LPMSheildingAlarmEnable(FunctionalState NewState);
+
+/**
+  * @brief  Enable or disable clear key function in button battery  voltage field
+  *
+  * @param  NewState : ENABLE or DISABLE
+  *
+  * @retval none
+  */
+void SSC_ClearKeyCMD(FunctionalState NewState);
+
+/**
+  * @brief  Temper(external sensor) Init
+  *
+  * @param  TEMPER_InitStruct: point to TEMPER_InitTypeDef Struct
+  *
+  * @retval none
+  */
+void SSC_TemperInit(TAMPER_InitTypeDef *TAMPER_InitStruct);
+
+/**
+  * @brief  enable or disable Temper(external sensor)
+  *
+  * @param  SENSOR_Port : TEMPER_Port_S01~TEMPER_Port_S67
+  *
+  * @param  NewState    : ENABLE or DISABLE
+  *
+  * @retval none
+  */
+void SSC_LPMTemperCmd(uint32_t SENSOR_Port, FunctionalState NewState);
+
+/**
+  * @brief  Set Sensor detect time
+  *
+  * @param  sensor_dur : seltct macro SENSOR_DUR_ALWAYS_ON ~SENSOR_DUR_16MS.
+  *
+  * @retval none
+  */
+void SSC_SensorDur(uint32_t sensor_dur);
+
+/**
+  * @brief  Set alarm duration threshold
+  *
+  * @param  sensor_dur : seltct macro SENEOR_DELAY_31_25US ~ SENEOR_DELAY_4MS
+  *
+  * @retval none
+  */
+void SSC_SensorDelay(uint32_t sensor_dur);
+
+/**
+  * @brief  LPM sensor enable
+  *
+  * @param  LPM_sensor : LPM sensor enable define
+  *
+  * @param  NewState : ENABLE or DISABLE
+  *
+  * @retval none
+  */
+void SSC_LPMSensorCmd(uint32_t LPM_secsure_sensor, FunctionalState NewState);
+
+/**
+  * @brief  test function: Writes the secret key to the battery domain register
+  * @param  uint32_t *buf, uint32_t len(1~32)
+  * @retval none
+  */
+void SSC_LPMKeyRead(uint32_t *buf, uint8_t len, uint8_t offset);
+
+/**
+  * @brief  test function: Reads the secret key to the battery domain register
+  * @param  uint32_t *buf, uint32_t len(1~32)
+  * @retval none
+  */
+void SSC_LPMKeyWrite(uint32_t *buf, uint32_t len, uint8_t offset);
+
+/**
+ * @brief Lock LPM sensor\tamper&key register config, can not unlock
+ *
+ * @param  none
+ *
+ * @retval :none
+ */
+void SSC_LPMLock(void);
+
+/**
+ * @brief  get ssc lpm sensor&tamper interrupt status
+ *
+ * @param  none
+ *
+ * @retval matching ssc lpm sensor interrupt status define
+ */
+int16_t SSC_GetLPMStatusReg(void);
+
+/**
+  *  brief  clear ssc lpm alarm status bit
+  *
+  * @param  none
+  *
+  * @retval none
+  */
+void SSC_LPMClearStatusBit(void);
+
+/**
+ * @brief  ssc secure sensor enable
+ *
+ * @param  SSC_secsure_sensor : ssc secure sensor enable define
+ *
+ * @param  NewState : ENABLE or DISABLE
+ *
+ * @retval none
+ */
+void SSC_SecureCmd(uint32_t SSC_secsure, FunctionalState NewState);
+
+/**
+ * @brief  get ssc secure sensor interrupt status
+ *
+ * @param  none
+ *
+ * @retval matching ssc secure sensor interrupt status define
+ */
+uint8_t SSC_GetSecureStatus(void);
+
+#endif 
Index: BT_doublebyte/sdk/Librarier/sdk/yc_ssc.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_ssc.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_ssc.c	(working copy)
@@ -0,0 +1,306 @@
+#include "yc_ssc.h"
+
+#define SHIELDING_CHECKFRQ_BIT 					24
+#define SHIELDING_ALARM_EN_BIT          27
+#define ERASE_KEY_EN_BIT                20
+
+#define SHIELDING_PORT_MODE_BIT 				12
+#define SHIELDING_PORT_PULLUP_BIT 			16
+#define SHIELDING_PORT_ENABLE_BIT 			8
+#define SHIELDING_GLITCHTIME_DEALY_BIT 	30
+#define SHIELDING_PU_HOLDTIME_BIT 			28
+
+#define SENSOR_DUR_BIT                  21
+#define SENSOR_DEALY_BIT                5
+#define ANALOG_BAT12L_BIT               4
+#define ANALOG_BATV33HL_BIT             5
+#define ANALOG_TEMPRATURE_BIT           6
+
+#define LPM_SHIELDING_LOCK_BIT          7
+
+#define SENSOR_ALARM_CONTINUE_LIMIT_BIT 8
+
+#define LPM_ALARM_BIT 16
+
+void SSC_Interval(uint32_t Interval)
+{
+    _ASSERT(IS_INTERVAL(Interval));
+
+    uint32_t ssc_temp;
+
+    ssc_temp = lpm_read(LPM_SENSOR);
+
+    ssc_temp &= ~(uint32_t)((uint32_t)0x3 << SHIELDING_CHECKFRQ_BIT);
+    ssc_temp |= (uint32_t)((uint32_t)Interval << SHIELDING_CHECKFRQ_BIT);
+
+    lpm_write(LPM_SENSOR, ssc_temp);
+}
+
+void SSC_LPMSheildingAlarmEnable(FunctionalState NewState)
+{
+    _ASSERT(IS_FUNCTIONAL_STATE(NewState));
+
+    uint32_t ssc_temp;
+
+    ssc_temp = lpm_read(LPM_SENSOR);
+
+    if (NewState == ENABLE)
+    {
+        ssc_temp |= ((uint32_t)1) << SHIELDING_ALARM_EN_BIT;
+    }
+    else if (NewState == DISABLE)
+    {
+        ssc_temp &= ~(((uint32_t)1) << SHIELDING_ALARM_EN_BIT);
+    }
+
+    lpm_write(LPM_SENSOR, ssc_temp);
+}
+
+void SSC_ClearKeyCMD(FunctionalState NewState)
+{
+    _ASSERT(IS_FUNCTIONAL_STATE(NewState));
+
+    uint32_t ssc_temp;
+
+    ssc_temp = lpm_read(LPM_GPIO_WKHI);
+
+    if (NewState == ENABLE)
+    {
+        ssc_temp |= ((uint32_t)1) << ERASE_KEY_EN_BIT;	//enable key clearing
+    }
+    else if (NewState == DISABLE)
+    {
+        ssc_temp &= ~(((uint32_t)1) << ERASE_KEY_EN_BIT);
+    }
+
+    lpm_write(LPM_GPIO_WKHI, ssc_temp);
+}
+
+void SSC_TemperInit(TAMPER_InitTypeDef *TAMPER_InitStruct)
+{
+    _ASSERT(IS_TAMPER_PORT_ACTIVE(TAMPER_InitStruct->TAMPER_Port_mode));
+    _ASSERT(IS_TAMPER_PORT_PU(TAMPER_InitStruct->TAMPER_Port_PullUp));
+    _ASSERT(IS_TAMPER_PORT(TAMPER_InitStruct->TAMPER_Port_Enable));
+    _ASSERT(IS_TAMPER_GLITCH_TIME(TAMPER_InitStruct->TAMPER_GlitchTimes));
+    _ASSERT(IS_TAMPER_PUPU_HOLD_TIME(TAMPER_InitStruct->TAMPER_PUPU_HoldTime));
+
+    uint32_t ssc_temp;
+
+    ssc_temp = lpm_read(LPM_SENSOR);
+
+    ssc_temp &= ~((uint32_t)((uint32_t)0xFF << SHIELDING_PORT_PULLUP_BIT) | \
+                  (uint32_t)((uint32_t)0xF << SHIELDING_PORT_ENABLE_BIT) | \
+                  (uint32_t)((uint32_t)0xF << SHIELDING_PORT_MODE_BIT)   | \
+                  (uint32_t)((uint32_t)0x3 << SHIELDING_GLITCHTIME_DEALY_BIT) | \
+                  (uint32_t)((uint32_t)0x3 << SHIELDING_PU_HOLDTIME_BIT));
+    ssc_temp |= TAMPER_InitStruct->TAMPER_Port_mode     << SHIELDING_PORT_MODE_BIT;         //shielding type
+    ssc_temp |= TAMPER_InitStruct->TAMPER_Port_PullUp   << SHIELDING_PORT_PULLUP_BIT;       //pull up
+    ssc_temp |= TAMPER_InitStruct->TAMPER_Port_Enable   << SHIELDING_PORT_ENABLE_BIT;       //shielding enable
+    ssc_temp |= TAMPER_InitStruct->TAMPER_GlitchTimes   << SHIELDING_GLITCHTIME_DEALY_BIT;  //alarm_delay
+    ssc_temp |= TAMPER_InitStruct->TAMPER_PUPU_HoldTime << SHIELDING_PU_HOLDTIME_BIT;       //pull up delay
+
+    lpm_write(LPM_SENSOR, ssc_temp);
+}
+
+void SSC_LPMTemperCmd(uint32_t SENSOR_Port, FunctionalState NewState)
+{
+    _ASSERT(IS_TAMPER_PORT(SENSOR_Port));
+    _ASSERT(IS_FUNCTIONAL_STATE(NewState));
+
+    uint32_t ssc_temp;
+
+    ssc_temp = lpm_read(LPM_SENSOR);
+
+    if (NewState == ENABLE)
+    {
+        ssc_temp |= (uint32_t)SENSOR_Port << SHIELDING_PORT_ENABLE_BIT;
+    }
+    else if (NewState == DISABLE)
+    {
+        ssc_temp &= ~((uint32_t)SENSOR_Port << SHIELDING_PORT_ENABLE_BIT);
+    }
+
+    lpm_write(LPM_SENSOR, ssc_temp);
+}
+
+void SSC_SensorDur(uint32_t sensor_dur)
+{
+    _ASSERT(IS_SENSOR_DUR(sensor_dur));
+
+    uint32_t ssc_temp;
+
+    ssc_temp = lpm_read(LPM_GPIO_WKHI);
+
+    ssc_temp |= ((uint32_t)sensor_dur) << SENSOR_DUR_BIT;
+
+    lpm_write(LPM_GPIO_WKHI, ssc_temp);
+}
+
+void SSC_SensorDelay(uint32_t sensor_delay)
+{
+    _ASSERT(IS_SENEOR_DELAY(sensor_delay));
+
+    uint32_t ssc_temp;
+
+    ssc_temp = lpm_read(LPM_SENSOR);
+
+    ssc_temp |= ((uint32_t)sensor_delay) << SENSOR_DEALY_BIT;//sensor delay
+
+    lpm_write(LPM_SENSOR, ssc_temp);
+}
+
+void SSC_LPMSensorCmd(uint32_t sensor, FunctionalState NewState)
+{
+    _ASSERT(IS_SENSOR_ENABLE(sensor));
+
+    uint32_t ssc_temp;
+
+    ssc_temp = lpm_read(LPM_SENSOR);
+
+    if (NewState == ENABLE)
+    {
+        ssc_temp |= (uint32_t)sensor;
+    }
+    else if (NewState == DISABLE)
+    {
+        ssc_temp &= ~(uint32_t)sensor;
+    }
+
+    lpm_write(LPM_SENSOR, ssc_temp);
+
+    ssc_temp = lpm_read(LPM_CTRL);
+
+    if (NewState == ENABLE)
+    {
+
+        if (LPM_BAT_VDT12L_ENABLE & sensor)
+        {
+            ssc_temp |= ((uint32_t)1 << ANALOG_BAT12L_BIT);
+        }
+        if ((LPM_BAT_VDT33H_ENABLE | LPM_BAT_VDT33L_ENABLE) & sensor)
+        {
+            ssc_temp |= ((uint32_t)1 << ANALOG_BATV33HL_BIT);
+        }
+        if ((LPM_TEMPERATURE_40_ENABLE | LPM_TEMPERATURE_120_ENABLE) & sensor)
+        {
+            ssc_temp |= ((uint32_t)1 << ANALOG_TEMPRATURE_BIT);
+        }
+
+        ssc_temp &= ~((0x07<<24) | (0x07<<28));//楂樹綆娓╅珮浣庡帇鏍″噯鍙傛暟
+        ssc_temp |= ((0x04<<28) | (0x03<<24));
+    }
+    else if (NewState == DISABLE)
+    {
+        if (LPM_BAT_VDT12L_ENABLE & sensor)
+        {
+            ssc_temp &= ~((uint32_t)1 << ANALOG_BAT12L_BIT);
+        }
+        if ((LPM_BAT_VDT33H_ENABLE | LPM_BAT_VDT33L_ENABLE) & sensor)
+        {
+            ssc_temp &= ~((uint32_t)1 << ANALOG_BATV33HL_BIT);
+        }
+        if ((LPM_TEMPERATURE_40_ENABLE | LPM_TEMPERATURE_120_ENABLE) & sensor)
+        {
+            ssc_temp &= ~((uint32_t)1 << ANALOG_TEMPRATURE_BIT);
+        }
+    }
+
+    lpm_write(LPM_CTRL, ssc_temp);
+}
+
+void SSC_LPMKeyRead(uint32_t *buf, uint8_t len, uint8_t offset)
+{
+    _ASSERT(IS_BPK_LEN(len, offset));
+
+    uint8_t i, k;
+
+    for (i = 0; i < len; i++)
+    {
+        k = i + offset;
+        buf[i] = lpm_read(LPM_KEY(k));
+    }
+}
+
+void SSC_LPMKeyWrite(uint32_t *buf, uint32_t len, uint8_t offset)
+{
+    _ASSERT(IS_BPK_LEN(len, offset));
+
+    uint8_t i, k;
+
+    SSC_ClearKeyCMD(DISABLE);
+
+    for (i = 0; i < len; i++)
+    {
+        k = i + offset;
+        lpm_write(LPM_KEY(k), buf[i]);
+    }
+
+    SSC_ClearKeyCMD(ENABLE);
+}
+
+void SSC_LPMLock(void)
+{
+    uint32_t ssc_temp;
+
+    ssc_temp = lpm_read(LPM_SENSOR);
+
+    ssc_temp |= ((uint32_t)1) << LPM_SHIELDING_LOCK_BIT;
+
+    lpm_write(LPM_SENSOR, ssc_temp);
+}
+
+int16_t SSC_GetLPMStatusReg(void)
+{
+    uint16_t ssc_inq;
+
+    ssc_inq = (lpm_read(LPM_STATUS) >> 16);
+    if((ssc_inq&(1<<14))==0)
+    {
+        ssc_inq &= 0xffe0;
+    }
+
+    return ssc_inq;
+}
+
+void SSC_LPMClearStatusBit(void)
+{
+    uint32_t ssc_temp;
+    ssc_temp = lpm_read(LPM_SENSOR);
+    SSC_LPMSheildingAlarmEnable(DISABLE);
+    lpm_write(LPM_CLR_INTR, 0x6c);
+    if (ssc_temp & (((uint32_t)1) << SHIELDING_ALARM_EN_BIT))
+    {
+        SSC_LPMSheildingAlarmEnable(ENABLE);
+    }
+}
+
+void SSC_SecureCmd(uint32_t SSC_secsure, FunctionalState NewState)
+{
+    _ASSERT(IS_SSC_SEC_ENABLE(SSC_secsure));
+
+    uint32_t ssc_temp;
+
+    ssc_temp = SECURE_CTRL;
+
+    if (NewState == ENABLE)
+    {
+        ssc_temp |= SSC_secsure;
+    }
+    else if (NewState == DISABLE)
+    {
+        ssc_temp &= ~SSC_secsure;
+    }
+
+    ssc_temp |= ((uint32_t)7) << SENSOR_ALARM_CONTINUE_LIMIT_BIT;
+
+    SECURE_CTRL = ssc_temp;
+}
+
+uint8_t SSC_GetSecureStatus(void)
+{
+    uint8_t ssc_inq;
+
+    ssc_inq = (SECURE_STATUS >> 1);
+
+    return ssc_inq;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_st7789.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_st7789.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_st7789.h	(working copy)
@@ -0,0 +1,88 @@
+/*
+File Name    : yc_st7789v2.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/1/14
+Description  : st7789v2 lcd encapsulation.
+*/
+
+#ifndef __YC_ST7789_H__
+#define __YC_ST7789_H__
+
+#include <yc_gpio.h>
+#include <yc_timer.h>
+#include <yc_spi.h>
+#include "font.h"
+#include "board_config.h"
+
+#define TFT_COL 320
+#define TFT_ROW 240
+
+#define BLACK   0x0000 //榛戣壊
+#define WHITE   0xFFFF //鐧借壊
+#define RED     0xF800 //绾㈣壊
+#define GREEN   0x07E0 //缁胯壊
+#define BLUE    0x001F //钃濊壊
+#define GRAY    0xDEDB //鐏拌壊15%
+#define LGRAY   0xC618 //鐏拌壊25%
+#define DGRAY   0x7BEF //娣辩伆鑹
+#define NAVY    0x000F //娣辫摑鑹
+#define DGREEN  0x03E0 //娣辩豢鑹
+#define DCYAN   0x03EF //娣遍潚鑹
+#define MAROON  0x7800 //娣辩孩鑹
+#define PURPLE  0x780F //绱壊
+#define OLIVE   0x7BE0 //姗勬缁
+#define CYAN    0x07FF //闈掕壊
+#define MAGENTA 0xF81F //鍝佺孩
+#define YELLOW  0xFFE0 //榛勮壊
+
+typedef struct
+{
+    SPIx_TypeDef SPIx;
+    uint16_t IO_TFT_SDA_PIN;
+    GPIO_TypeDef IO_TFT_SDA_Port;
+    uint16_t IO_TFT_SCL_PIN;
+    GPIO_TypeDef IO_TFT_SCL_Port;
+    uint16_t IO_TFT_A0_PIN;
+    GPIO_TypeDef IO_TFT_A0_Port;
+    uint16_t IO_TFT_RES_PIN;
+    GPIO_TypeDef IO_TFT_RES_Port;
+    uint16_t	IO_TFT_CS_PIN;
+    GPIO_TypeDef IO_TFT_CS_Port;
+    uint16_t IO_TFT_BL_PIN;
+    GPIO_TypeDef IO_TFT_BL_Port;
+} St7789TFT_InitTypedef;
+
+/* TFT娑叉櫠灞忔帶鍒禝O鍒濆鍖 */
+void ST7789_TFT_GpioInit(St7789TFT_InitTypedef *St7789TFT_InitStruct);
+
+/* 娑叉櫠灞忛┍鍔ㄥ垵濮嬪寲 */
+void ST7789_TFT_Init(void);
+
+/* 鐢诲潡鍑芥暟 */
+void ST7789_TFT_Draw_Piece(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t Color);
+
+/* ASCII瀛楃鏄剧ず */
+void ST7789_TFT_ShowChar(uint16_t x, uint16_t y, uint16_t num, uint16_t size, uint16_t mode, uint16_t BL_color, uint16_t P_color);
+
+/* ASCII瀛楃涓叉樉绀 */
+void ST7789_TFT_ShowString(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t *p, uint16_t size, uint16_t mode, uint16_t BL_color, uint16_t P_color);
+
+/* 姹夊瓧鏄剧ず */
+void ST7789_TFT_ShowChinese(uint16_t x, uint16_t y, const uint8_t *ch, uint8_t size, uint8_t n, uint8_t mode, uint16_t BL_color, uint16_t P_color);
+
+/* 鍥剧墖鏄剧ず */
+void ST7789_TFT_Picture(uint16_t Stratx, uint16_t Starty, const uint8_t *pic);
+
+/* 鍥剧墖鏄剧ず蹇 */
+void ST7789_TFT_Picture_Q(uint16_t Stratx, uint16_t Starty, const uint8_t *pic);
+
+void ST7789_TFT_Clear_White(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
+void ST7789_TFT_Clear_Gary(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
+void St7899_tft_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
+void St7789_tft_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
+void St7789_tft_RectangleFill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
+void St7789_tft_DrawCircle(uint16_t y0, uint16_t x0, uint8_t r, uint16_t c);
+void st7789_tft_clear(uint16_t Color);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_st7789.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_st7789.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_st7789.c	(working copy)
@@ -0,0 +1,704 @@
+/*
+File Name    : yc_st7789.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/3/24
+Description  : st7789 lcd encapsulation.
+*/
+
+#include "yc_st7789.h"
+
+void ST7789_TFT_GpioInit(St7789TFT_InitTypedef *St7789TFT_InitStruct)
+{
+    SPI_InitTypeDef SPI_InitStruct;
+
+    SPI_InitStruct.BaudRatePrescaler = SPI_BaudRatePrescaler_1;
+    SPI_InitStruct.CPHA = SPI_CPHA_First_Edge;
+    SPI_InitStruct.CPOL = SPI_CPOL_Low;
+    SPI_InitStruct.Mode =  SPI_Mode_Master;
+    SPI_InitStruct.RW_Delay = 1;
+    #if (BOARD_VER == EPOS_BOARD_V1_0)
+    GPIO_Config(St7789TFT_InitStruct->IO_TFT_SCL_Port, St7789TFT_InitStruct->IO_TFT_SCL_PIN, SPID1_SCK);
+    GPIO_Config(St7789TFT_InitStruct->IO_TFT_CS_Port, St7789TFT_InitStruct->IO_TFT_CS_PIN, SPID1_NCS);
+    GPIO_Config(St7789TFT_InitStruct->IO_TFT_SDA_Port, St7789TFT_InitStruct->IO_TFT_SDA_PIN, SPID1_MOSI);
+    #endif
+    SPI_Init(St7789TFT_InitStruct->SPIx, &SPI_InitStruct);
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : st7789_tft_write_reg
+鍑芥暟鍔熻兘 : 鍚慣FT椹卞姩鑺墖鍐欎竴涓懡浠
+杈撳叆鍙傛暟 : reg锛氳鍐欏叆鐨勫懡浠
+杩斿洖鍊   : 鏃
+澶囨敞     : ST7789_TFT_A0_PIN涓0鏃惰〃绀哄啓鍛戒护
+**************************************************************/
+static void st7789_tft_write_reg(uint8_t reg)
+{
+    #if (BOARD_VER == EPOS_BOARD_V1_0)
+    GPIO_Config(ST7789_TFT_A0_PORT, ST7789_TFT_A0_PIN, OUTPUT_LOW);
+    SPI_SendData(ST7789VTFTSPI, reg);
+    #endif
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : st7789_tft_write_data
+鍑芥暟鍔熻兘 : 鍚慣FT椹卞姩鑺墖鍐欎竴涓猽int8_t鏁版嵁
+杈撳叆鍙傛暟 : data锛氳鍐欏叆鐨勬暟鎹
+杩斿洖鍊   : 鏃
+澶囨敞     : ST7789_TFT_A0_PIN涓1鏃惰〃绀哄啓鏁版嵁
+**************************************************************/
+static void st7789_tft_write_data(uint8_t data)
+{
+    #if (BOARD_VER == EPOS_BOARD_V1_0)
+    GPIO_Config(ST7789_TFT_A0_PORT, ST7789_TFT_A0_PIN, OUTPUT_HIGH);
+    SPI_SendData(ST7789VTFTSPI, data);
+    #endif
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : st7789_tft_write_buff
+鍑芥暟鍔熻兘 : 鍚慣FT椹卞姩鑺墖鍐欎竴缁勬暟鎹
+杈撳叆鍙傛暟 : buff锛氳鍐欏叆鐨勬暟鎹鍦板潃
+杈撳叆鍙傛暟 : led锛氳鍐欏叆鐨勬暟鎹暱搴
+杩斿洖鍊   : 鏃
+澶囨敞     : ST7789_TFT_A0_PIN涓1鏃惰〃绀哄啓鏁版嵁
+**************************************************************/
+static void st7789_tft_write_buff(uint8_t *buff, int len)
+{
+    #if (BOARD_VER == EPOS_BOARD_V1_0)
+    GPIO_Config(ST7789_TFT_A0_PORT, ST7789_TFT_A0_PIN, OUTPUT_HIGH);
+    SPI_SendBuff(ST7789VTFTSPI, buff, len);
+    #endif
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : st7789_tft_write_ram
+鍑芥暟鍔熻兘 : 浣胯兘鍐欏叆鏁版嵁鍒癛AM
+杈撳叆鍙傛暟 : 鏃
+杩斿洖鍊   : 鏃
+澶囨敞     : 鏃
+**************************************************************/
+static void st7789_tft_write_ram(void)
+{
+    st7789_tft_write_reg(0x2C);
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : st7789_tft_display_on
+鍑芥暟鍔熻兘 : 鎵撳紑鏄剧ず
+杈撳叆鍙傛暟 : 鏃
+杩斿洖鍊   : 鏃
+澶囨敞     : 鏃
+**************************************************************/
+static void st7789_tft_display_on(void)
+{
+    st7789_tft_write_reg(0x29);
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : st7789_tft_display_off
+鍑芥暟鍔熻兘 : 鍏抽棴鏄剧ず
+杈撳叆鍙傛暟 : 鏃
+杩斿洖鍊   : 鏃
+澶囨敞     : 鏃
+**************************************************************/
+static void st7789_tft_display_off(void)
+{
+    st7789_tft_write_reg(0x28);
+}
+
+static void TFT_WR_DATA(uint16_t da)
+{
+    unsigned char data[2];
+
+    data[0] = (da >> 8);
+    data[1] = da & 0xFF;
+
+    st7789_tft_write_buff(data, 2);
+}
+/**************************************************************
+鍑芥暟鍔熻兘:  璁剧疆鍏夋爣鐨勪綅缃
+**************************************************************/
+void St7789_tft_SetCursor(uint16_t x, uint16_t y)
+{
+    st7789_tft_write_reg(0x2A); //璁剧疆X鍧愭爣
+    TFT_WR_DATA(x);  //鍐欏叆X
+    st7789_tft_write_reg(0x2B);    //璁剧疆Y鍧愭爣
+    TFT_WR_DATA(y);   //鍐欏叆Y
+
+}
+/**************************************************************
+鍑芥暟鍚嶇О : st7789_tft_address_set
+鍑芥暟鍔熻兘 : 璁剧疆鍧愭爣
+杈撳叆鍙傛暟 : x1,y1锛氳捣濮嬪湴鍧锛寈2,y2锛氱粓鐐瑰湴鍧
+杩斿洖鍊   : 鏃
+澶囨敞     : 鏃
+**************************************************************/
+static void st7789_tft_address_set(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
+{
+    st7789_tft_write_reg(0x2A);
+    TFT_WR_DATA(x1);
+    TFT_WR_DATA(x2);
+    st7789_tft_write_reg(0x2B);
+    TFT_WR_DATA(y1);
+    TFT_WR_DATA(y2);
+}
+
+void st7789_tft_clear(uint16_t Color)
+{
+    uint16_t i, j;
+
+    st7789_tft_display_off();
+    st7789_tft_address_set(0, 0, TFT_COL - 1, TFT_ROW - 1);
+    st7789_tft_write_ram();
+
+    for (i = 0; i < TFT_COL; i++)
+    {
+        for (j = 0; j < TFT_ROW; j++)
+        {
+            TFT_WR_DATA(Color);
+        }
+    }
+    st7789_tft_display_on();
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : st7789_tft_draw_point
+鍑芥暟鍔熻兘 : TFT鐢讳竴涓偣
+杈撳叆鍙傛暟 : x,y	--> 鐢荤偣鍧愭爣锛宑olor --> 鐐圭殑棰滆壊
+杩斿洖鍊   : 鏃
+澶囨敞     : 鏃
+**************************************************************/
+static void st7789_tft_draw_point(uint16_t x, uint16_t y, uint16_t color)
+{
+    st7789_tft_address_set(x, y, x, y);
+//	St7789_tft_SetCursor(x,y);
+    st7789_tft_write_ram();
+    TFT_WR_DATA(color);
+}
+
+void ST7789_TFT_Draw_Piece(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t Color)
+{
+    uint16_t i, j;
+
+    st7789_tft_address_set(x1, y1, x2, y2);
+    st7789_tft_write_ram();
+
+    for (i = x1; i < x2; i++)
+    {
+        for (j = y1; j < y2; j++)
+        {
+            TFT_WR_DATA(Color);
+        }
+    }
+}
+/**************************************************************
+鍑芥暟鍔熻兘锛氱敾鐩寸嚎
+鍙    鏁帮細
+x1,y1:璧风偣鍧愭爣
+x2,y2:缁堢偣鍧愭爣
+**************************************************************/
+void St7899_tft_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
+{
+    uint16_t t;
+    int xerr = 0, yerr = 0, delta_x, delta_y, distance;
+    int incx, incy, uRow, uCol;
+    delta_x = x2 - x1; //璁＄畻鍧愭爣澧為噺
+    delta_y = y2 - y1;
+    uRow = x1;
+    uCol = y1;
+    if (delta_x > 0)
+        incx = 1; //璁剧疆鍗曟鏂瑰悜
+    else if (delta_x == 0)
+        incx = 0;//鍨傜洿绾
+    else
+    {
+        incx = - 1;
+        delta_x = - delta_x;
+    }
+    if (delta_y > 0)
+        incy = 1;
+    else if (delta_y == 0)
+        incy = 0;//姘村钩绾
+    else
+    {
+        incy = - 1;
+        delta_y = - delta_y;
+    }
+    if (delta_x > delta_y)
+        distance = delta_x; //閫夊彇鍩烘湰澧為噺鍧愭爣杞
+    else
+        distance = delta_y;
+    for (t = 0; t <= distance + 1; t++)//鐢荤嚎杈撳嚭
+    {
+        st7789_tft_draw_point(uRow, uCol, color);//鐢荤偣
+        xerr += delta_x;
+        yerr += delta_y;
+        if (xerr > distance)
+        {
+            xerr -= distance;
+            uRow += incx;
+        }
+        if (yerr > distance)
+        {
+            yerr -= distance;
+            uCol += incy;
+        }
+    }
+}
+
+/**************************************************************
+鍑芥暟鍔熻兘锛氱敾鐭╁舰
+鍙    鏁帮細(x1,y1),(x2,y2):鐭╁舰鐨勫瑙掑潗鏍
+**************************************************************/
+void St7789_tft_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
+{
+    St7899_tft_DrawLine(x1, y1, x2, y1, color);
+    St7899_tft_DrawLine(x1, y1, x1, y2, color);
+    St7899_tft_DrawLine(x1, y2, x2, y2, color);
+    St7899_tft_DrawLine(x2, y1, x2, y2, color);
+}
+
+/**************************************************************
+鍑芥暟鍔熻兘锛氱煩褰㈠～鍏
+鍙    鏁帮細(x1,y1),(x2,y2):鐭╁舰鐨勫瑙掑潗鏍
+**************************************************************/
+void St7789_tft_RectangleFill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
+{
+    uint32_t i, j;
+    for (i = y1; i <= y2; i++) //浠ラ珮搴︿负鍑
+    {
+        St7789_tft_SetCursor(x1, i); //璁剧疆鍏夋爣鐨勪綅缃
+        st7789_tft_write_ram();  //琛ㄧず鍐橤RAM  灏辨槸棰滆壊鏁版嵁
+        for (j = x1; j <= x2; j++)
+        {
+            TFT_WR_DATA(color); //鍐欏叆棰滆壊
+        }
+    }
+}
+
+/**************************************************************
+鍑芥暟鍔熻兘锛氬湪鎸囧畾浣嶇疆鐢讳竴涓寚瀹氬ぇ灏忕殑鍦
+鍙    鏁帮細
+		(x,y):涓績鐐
+		r    :鍗婂緞
+**************************************************************/
+void St7789_tft_DrawCircle(uint16_t x0, uint16_t y0, uint8_t r, uint16_t c)
+{
+    int a, b;
+    int di;
+    a = 0;
+    b = r;
+    di = 3 - (r << 1);//鍒ゆ柇涓嬩釜鐐逛綅缃殑鏍囧織
+    while (a <= b)
+    {
+        st7789_tft_draw_point(x0 + a, y0 - b, c);             //5
+        st7789_tft_draw_point(x0 + b, y0 - a, c);             //0
+        st7789_tft_draw_point(x0 + b, y0 + a, c);             //4
+        st7789_tft_draw_point(x0 + a, y0 + b, c);             //6
+        st7789_tft_draw_point(x0 - a, y0 + b, c);             //1
+        st7789_tft_draw_point(x0 - b, y0 + a, c);
+        st7789_tft_draw_point(x0 - a, y0 - b, c);             //2
+        st7789_tft_draw_point(x0 - b, y0 - a, c);             //7
+        a++;
+        if (di < 0)
+            di += 4 * a + 6;	//Bresenham鐢诲渾绠楁硶
+        else
+        {
+            di += 10 + 4 * (a - b);
+            b--;
+        }
+    }
+}
+
+void ST7789_TFT_Init(void)
+{
+    #if (BOARD_VER == EPOS_BOARD_V1_0)
+    GPIO_Config(ST7789_TFT_RST_PORT, ST7789_TFT_RST_PIN, OUTPUT_LOW);
+    delay_ms(20);
+    GPIO_Config(ST7789_TFT_RST_PORT, ST7789_TFT_RST_PIN, OUTPUT_HIGH);
+    #endif
+    delay_ms(20);
+
+    //--------------------------------------Display Setting------------------------------------------//
+    /* Memory Data Access Control锛氭í灞忔樉绀 */
+    st7789_tft_write_reg(0x36);
+    st7789_tft_write_data(0xA0);
+
+    /* Column Address Set: 0~319 */
+    st7789_tft_write_reg(0x2A);
+    st7789_tft_write_data(0x00);//鍒楄捣濮嬪湴鍧
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x00);//鍒楃粨鏉熷湴鍧
+    st7789_tft_write_data(0x3F);
+
+    /* Row Address Set: 0~239 */
+    st7789_tft_write_reg(0x2B);
+    st7789_tft_write_data(0x00);//琛岃捣濮嬪湴鍧
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x01);//琛岀粨鏉熷湴鍧
+    st7789_tft_write_data(0xEF);
+
+    /* Frame Rate Control in Normal Mode: 58M */
+    st7789_tft_write_reg(0xC6);
+    st7789_tft_write_data(0x10);
+
+    /*  Interface Pixel Format: RGB */
+    st7789_tft_write_reg(0x3A);
+    st7789_tft_write_data(0x05);
+
+    st7789_tft_write_reg(0xCF);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0xC1);
+    st7789_tft_write_data(0X30);
+
+    st7789_tft_write_reg(0xED);
+    st7789_tft_write_data(0x64);
+    st7789_tft_write_data(0x03);
+    st7789_tft_write_data(0X12);
+    st7789_tft_write_data(0X81);
+
+    st7789_tft_write_reg(0xE8);
+    st7789_tft_write_data(0x85);
+    st7789_tft_write_data(0x10);
+    st7789_tft_write_data(0x78);
+
+    st7789_tft_write_reg(0xCB);
+    st7789_tft_write_data(0x39);
+    st7789_tft_write_data(0x2C);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x34);
+    st7789_tft_write_data(0x02);
+
+    st7789_tft_write_reg(0xF7);
+    st7789_tft_write_data(0x20);
+
+    st7789_tft_write_reg(0xEA);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x00);
+
+    /* LCM Control */
+    st7789_tft_write_reg(0xC0);
+    st7789_tft_write_data(0x21);
+
+    /* ID code Setting */
+    st7789_tft_write_reg(0xC1);
+    st7789_tft_write_data(0x12);
+
+    /* VCOM Offset Set */
+    st7789_tft_write_reg(0xC5);
+    st7789_tft_write_data(0x32);
+    st7789_tft_write_data(0x3C);
+
+    /* CABC Control */
+    st7789_tft_write_reg(0xC7);
+    st7789_tft_write_data(0XC1);
+
+    /* RGB Interface Control */
+    st7789_tft_write_reg(0xB1);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x18);
+
+    /* Gamma Set */
+    st7789_tft_write_reg(0x26);
+    st7789_tft_write_data(0x01);
+
+    /* Positive Voltage Gamma Control */
+    st7789_tft_write_reg(0xE0);
+    st7789_tft_write_data(0x0F);
+    st7789_tft_write_data(0x20);
+    st7789_tft_write_data(0x1E);
+    st7789_tft_write_data(0x09);
+    st7789_tft_write_data(0x12);
+    st7789_tft_write_data(0x0B);
+    st7789_tft_write_data(0x50);
+    st7789_tft_write_data(0XBA);
+    st7789_tft_write_data(0x44);
+    st7789_tft_write_data(0x09);
+    st7789_tft_write_data(0x14);
+    st7789_tft_write_data(0x05);
+    st7789_tft_write_data(0x23);
+    st7789_tft_write_data(0x21);
+    st7789_tft_write_data(0x00);
+
+    /* Negative Voltage Gamma Control */
+    st7789_tft_write_reg(0XE1);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x19);
+    st7789_tft_write_data(0x19);
+    st7789_tft_write_data(0x00);
+    st7789_tft_write_data(0x12);
+    st7789_tft_write_data(0x07);
+    st7789_tft_write_data(0x2D);
+    st7789_tft_write_data(0x28);
+    st7789_tft_write_data(0x3F);
+    st7789_tft_write_data(0x02);
+    st7789_tft_write_data(0x0A);
+    st7789_tft_write_data(0x08);
+    st7789_tft_write_data(0x25);
+    st7789_tft_write_data(0x2D);
+    st7789_tft_write_data(0x0F);
+
+    /* Sleep Out */
+    st7789_tft_write_reg(0x11);
+    delay_ms(20); //Delay 20ms
+
+    /* Display On */
+    st7789_tft_clear(WHITE);
+    st7789_tft_write_reg(0x29);
+    #if (BOARD_VER == EPOS_BOARD_V1_0)
+    GPIO_Config(ST7789_TFT_BL_PORT, ST7789_TFT_BL_PIN, ST7789_TFT_BL_HIGH_LIGHT?OUTPUT_HIGH:OUTPUT_LOW);
+    #endif
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : ST7789_TFT_ShowChar
+鍑芥暟鍔熻兘 : lcd鏄剧ず涓涓瓧绗
+杈撳叆鍙傛暟 : x,y:璧峰鍧愭爣
+          num:瑕佹樉绀虹殑瀛楃:" "--->"~"
+          size:瀛椾綋澶у皬
+          mode:鍙犲姞鏂瑰紡(1)杩樻槸闈炲彔鍔犳柟寮(0)
+杩斿洖鍊   : 鏃
+澶囨敞     : 鏃
+**************************************************************/
+void ST7789_TFT_ShowChar(uint16_t x, uint16_t y, uint16_t num, uint16_t size, uint16_t mode, uint16_t BL_color, uint16_t P_color)
+{
+    uint16_t temp, t1, t;
+    uint16_t y0 = y;
+    uint16_t csize = ((size / 8) + ((size % 8) ? 1 : 0)) * (size / 2); /* 寰楀埌瀛椾綋涓涓瓧绗﹀搴旂偣闃甸泦鎵鍗犵殑瀛楄妭鏁	 */
+
+    num = num - ' ';/* 寰楀埌鍋忕Щ鍚庣殑鍊硷紙ASCII瀛楀簱鏄粠绌烘牸寮濮嬪彇妯★紝鎵浠-' '灏辨槸瀵瑰簲瀛楃鐨勫瓧搴擄級 */
+
+    for (t = 0; t < csize; t++)/*閬嶅巻鎵撳嵃鎵鏈夊儚绱犵偣鍒癓CD */
+    {
+        if (16 == size)
+        {
+            temp = asc2_1608[num][t];/* 璋冪敤1608瀛椾綋 */
+        }
+        else if (24 == size)
+        {
+            temp = asc2_2412[num][t];/* 璋冪敤2412瀛椾綋 */
+        }
+        else if (32 == size)
+        {
+            temp = asc2_3216[num][t];/* 璋冪敤3216鏁扮爜绠″瓧浣 */
+        }
+        else
+        {
+            return;/* 娌℃湁鎵惧埌瀵瑰簲鐨勫瓧搴 */
+        }
+        for (t1 = 0; t1 < 8; t1++)/* 鎵撳嵃涓涓儚绱犵偣鍒版恫鏅 */
+        {
+            if (temp & 0x80)
+            {
+                st7789_tft_draw_point(x, y, P_color);//瀛楄壊
+            }
+            else if (0 == mode)
+            {
+                st7789_tft_draw_point(x, y, BL_color);//鑳屾櫙鑹
+            }
+            temp <<= 1;
+            y++;
+
+            if (y >= TFT_ROW)
+            {
+                return;/* 瓒呭尯鍩熶簡 */
+            }
+            if ((y - y0) == size)
+            {
+                y = y0;
+                x++;
+                if (x >= TFT_COL)
+                {
+                    return;/* 瓒呭尯鍩熶簡 */
+                }
+                break;
+            }
+        }
+    }
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : ST7789_TFT_ShowString
+鍑芥暟鍔熻兘 : lcd鏄剧ず瀛楃涓
+杈撳叆鍙傛暟 : x,y:璧峰鍧愭爣
+          width,height锛氬尯鍩熷ぇ灏
+          *p:瀛楃涓茶捣濮嬪湴鍧
+          size:瀛椾綋澶у皬
+          mode:鍙犲姞鏂瑰紡(1)杩樻槸闈炲彔鍔犳柟寮(0)
+杩斿洖鍊  : 鏃
+澶囨敞    : 鏃
+**************************************************************/
+void ST7789_TFT_ShowString(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t *p, uint16_t size, uint16_t mode, uint16_t BL_color, uint16_t P_color)
+{
+    uint16_t x0 = x;
+    uint16_t len = 0;
+    uint16_t WxDxH = 0;
+    width += x;
+    height += y;
+
+    WxDxH = size / 2;
+//	if (width > 320)
+//	{
+//		len = (320-x)/size/2;
+//		ST7789_TFT_ShowString(x, height, len*(height-y), 16, p+(12-len+1), 32, 1, WHITE, OLIVE);
+//	}
+
+    if (width > 320)
+    {
+        len = (320 - x) / WxDxH;
+        ST7789_TFT_ShowString(x, height + 8, (width - x) - (len * WxDxH), height - y, p + len, size, mode, BL_color, P_color);
+    }
+
+    while ((*p <= '~') && (*p >= ' ')) /* 鍒ゆ柇鏄笉鏄潪娉曞瓧绗! */
+    {
+        if (x >= width)
+        {
+            x = x0;
+            y += size;
+        }
+        if (y >= height)
+        {
+            break;
+        }
+        ST7789_TFT_ShowChar(x, y, *p, size, mode, BL_color, P_color);
+        x += WxDxH;
+        p++;
+    }
+}
+
+/**************************************************************
+鍑芥暟鍚嶇О : ST7789_TFT_ShowChinese
+鍑芥暟鍔熻兘 : TFT鏄剧ず瀛楃涓
+杈撳叆鍙傛暟 : x,y:璧峰鍧愭爣
+          *ch:姹夊瓧瀛楃涓茶捣濮嬪湴鍧
+          size:瀛椾綋澶у皬
+          n:姹夊瓧涓暟
+          mode:鍙犲姞鏂瑰紡(1)杩樻槸闈炲彔鍔犳柟寮(0)
+杩斿洖鍊   : 鏃
+澶囨敞     : 鏃
+**************************************************************/
+void ST7789_TFT_ShowChinese(uint16_t x, uint16_t y, const uint8_t *ch, uint8_t size, uint8_t n, uint8_t mode, uint16_t BL_color, uint16_t P_color)
+{
+    uint32_t temp, t, t1;
+    uint16_t y0 = y;
+    uint32_t csize = ((size / 8) + ((size % 8) ? 1 : 0)) * (size) * n;	/* 寰楀埌瀛椾綋瀛楃瀵瑰簲鐐归樀闆嗘墍鍗犵殑瀛楄妭鏁 */
+
+    for (t = 0; t < csize; t++)
+    {
+        temp = ch[t];	/* 寰楀埌鐐归樀鏁版嵁 */
+
+        for (t1 = 0; t1 < 8; t1++)
+        {
+            if (temp & 0x80)
+            {
+                st7789_tft_draw_point(x, y, P_color);
+            }
+            else if (mode == 0)
+            {
+                st7789_tft_draw_point(x, y, BL_color);
+            }
+            temp <<= 1;
+            y++;
+            if ((y - y0) == size)
+            {
+                y = y0;
+                x++;
+                break;
+            }
+        }
+    }
+}
+
+void ST7789_TFT_Picture(uint16_t Stratx, uint16_t Starty, const uint8_t *pic)
+{
+    uint32_t i = 8, len;
+    uint16_t temp, x, y, D_x = 0, D_y = 0;
+
+    x = (uint16_t)((pic[2] << 8) | pic[3]) - 1;
+    y = (uint16_t)((pic[4] << 8) | pic[5]) - 1;
+
+    len = 2 * (x + 1) * (y + 1);
+
+    while (i < (len + 8))
+    {
+        temp = (uint16_t)((pic[i] << 8) + pic[i + 1]);		//鍙互鑰冭檻鐢ㄩ昏緫 鎴 鎿嶄綔鏇夸唬
+        if (D_x > x)
+        {
+            D_x = 0;
+            D_y += 1;
+            // D_y+=2;
+            // i += x*2;
+        }
+        st7789_tft_draw_point(Stratx + D_x, Starty + D_y, temp);
+        D_x += 1;
+        i = i + 2;
+    }
+}
+
+void ST7789_TFT_Picture_Q(uint16_t Stratx, uint16_t Starty, const uint8_t *pic)
+{
+    //璁＄畻闀垮鏁版嵁鍙婇暱搴
+    uint32_t len, i = 8;
+    uint16_t x, y;
+    uint8_t temp[16];
+    uint8_t j = 0;
+
+    x = (uint16_t)((pic[2] << 8) | pic[3]) - 1;
+    y = (uint16_t)((pic[4] << 8) | pic[5]) - 1;
+    len = 2 * (x + 1) * (y + 1);
+
+    st7789_tft_address_set(Stratx, Starty, Stratx + x, Starty + y);
+    st7789_tft_write_reg(0x2C);
+
+    while (i < (len + 8))
+    {
+        j = 0;
+        while (j < 16)
+        {
+            temp[j++] = pic[i++];
+        }
+        st7789_tft_write_buff(temp, 16);
+    }
+}
+
+void ST7789_TFT_Clear_White(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
+{
+    uint16_t i, j;
+    uint8_t temp[16];
+
+    st7789_tft_address_set(x1, y1, x2, y2);
+    st7789_tft_write_reg(0x2C);
+
+    for (i = 0; i < 16; i++)
+        temp[i] = 0xff;
+
+    for (i = y1; i < y2; i++)
+    {
+        for (j = x1; j < x2; j++)
+        {
+            st7789_tft_write_buff(temp, 16);
+        }
+    }
+}
+
+void ST7789_TFT_Clear_Gary(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
+{
+    uint16_t i, j;
+    uint8_t temp[2];
+
+    st7789_tft_address_set(x1, y1, x2, y2);
+    st7789_tft_write_reg(0x2C);
+
+    temp[0] = 0xEF;
+    temp[1] = 0x5D;
+
+    for (i = y1; i < y2; i++)
+    {
+        for (j = x1; j < x2; j++)
+        {
+            st7789_tft_write_buff(temp, 2);
+        }
+    }
+}
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_sysctrl.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_sysctrl.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_sysctrl.h	(working copy)
@@ -0,0 +1,89 @@
+#ifndef __YC_SYSCTRL_H__
+#define __YC_SYSCTRL_H__
+
+#include "yc3121.h"
+
+/*======AHB鎬荤嚎鎺у埗====*/
+#define SYSCTRL_AHBPeriph_INTR        ((uint32_t)(1<<CLKCLS_INT))
+#define SYSCTRL_AHBPeriph_SHA         ((uint32_t)(1<<CLKCLS_SHA))
+#define SYSCTRL_AHBPeriph_CRC         ((uint32_t)(1<<CLKCLS_CRC))
+#define SYSCTRL_AHBPeriph_PWM         ((uint32_t)(1<<CLKCLS_TIM))
+#define SYSCTRL_AHBPeriph_WDT         ((uint32_t)(1<<CLKCLS_WDT))
+#define SYSCTRL_AHBPeriph_USB         ((uint32_t)(1<<CLKCLS_USB))
+#define SYSCTRL_AHBPeriph_SPI         ((uint32_t)(1<<CLKCLS_SPI))
+#define SYSCTRL_AHBPeriph_DES         ((uint32_t)(1<<CLKCLS_DES))
+#define SYSCTRL_AHBPeriph_RSA         ((uint32_t)(1<<CLKCLS_RSA))
+#define SYSCTRL_AHBPeriph_ASE         ((uint32_t)(1<<CLKCLS_AES))
+#define SYSCTRL_AHBPeriph_GPIO        ((uint32_t)(1<<CLKCLS_GPIO))
+#define SYSCTRL_AHBPeriph_7816        ((uint32_t)(1<<CLKCLS_7816))
+#define SYSCTRL_AHBPeriph_BT          ((uint32_t)(1<<CLKCLS_BT	))
+#define SYSCTRL_AHBPeriph_SM4         ((uint32_t)(1<<CLKCLS_SM4))
+#define SYSCTRL_AHBPeriph_UART        ((uint32_t)(1<<CLKCLS_UART))
+#define SYSCTRL_AHBPeriph_7811        ((uint32_t)(1<<CLKCLS_7811))
+#define SYSCTRL_AHBPeriph_ADC7811     ((uint32_t)(1<<CLKCLS_ADC7811))
+#define SYSCTRL_AHBPeriph_CP          ((uint32_t)(1<<CLKCLS_CP))
+#define IS_SYSCTRL_AHB_PERIPH(PERIPH) ((PERIPH &0x7fffe) != 0x00)
+
+#define SYSCTRL_HCLK_COFG_REGBIT      ((uint32_t)0x0f)
+#define SYSCTRL_HCLK_Div_None         ((uint32_t)0x00)
+#define SYSCTRL_HCLK_Div2             ((uint32_t)0x02)
+#define SYSCTRL_HCLK_Div4             ((uint32_t)0x06)
+#define SYSCTRL_HCLK_Div8             ((uint32_t)0x0e)
+#define IS_GET_SYSCTRL_HCLK_DIV(DIV)  (((DIV) == SYSCTRL_HCLK_Div_None) || \
+                                       ((DIV) == SYSCTRL_HCLK_Div2) || \
+                                       ((DIV) == SYSCTRL_HCLK_Div4)) ||\
+                                       ((DIV) == SYSCTRL_HCLK_Div8)
+
+typedef enum
+{
+//    SleepMode_IDLE = 0x01,
+    SleepMode_STOP = 0x02
+} SleepMode_TypeDef;
+#define IS_ALL_SLEEP_MODE(MODE)                     ((MODE) == SleepMode_STOP)
+
+typedef struct
+{
+    uint32_t HCLK_Frequency;    /*!< returns HCLK frequency expressed in Hz */
+} SYSCTRL_ClocksTypeDef;
+
+/**
+  * @brief  Enables or disables the APB peripheral clock.
+  * @param  SYSCTRL_APBPeriph: specifies the APB peripheral to gates its clock.
+  *
+  *         For @b this parameter can be any combination
+  *         of the enum SYSCTRL_AHB_PERIPH.
+  * @param  NewState: new state of the specified peripheral clock.
+  *         This parameter can be: ENABLE or DISABLE.
+  * @retval None
+  */
+void SYSCTRL_AHBPeriphClockCmd(uint32_t SYSCTRL_AHBPeriph, FunctionalState NewState);
+
+/**
+  * @brief  Config CPU Enter sleep mode
+  * @param  SleepMode_TypeDef: Select SleepMode.
+  * @retval None
+  */
+void SYSCTRL_EnterSleep(SleepMode_TypeDef SleepMode);
+
+/**
+  * @brief  Config HCLK
+  * @param  HCLK_Div:Div value
+  * @retval None
+  */
+void SYSCTRL_HCLKConfig(uint32_t HCLK_Div);
+
+/**
+  * @brief  Get HCLK and PCLK frequency
+  * @param  SYSCTRL_Clocks:The pointer point to the memmory preserve clocks value
+  * @retval None
+  */
+void SYSCTRL_GetClocksFreq(SYSCTRL_ClocksTypeDef *SYSCTRL_Clocks);
+
+/**
+  * @brief  enable dpll clock(Accurate clock,Available for UART and USB)
+  * @param  none
+  * @retval None
+  */
+void SYSCTRL_EnableDpllClk(void);
+
+#endif      /*__SYSCTRL_H*/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_sysctrl.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_sysctrl.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_sysctrl.c	(working copy)
@@ -0,0 +1,66 @@
+#include "yc_sysctrl.h"
+
+void SYSCTRL_AHBPeriphClockCmd(uint32_t SYSCTRL_AHBPeriph, FunctionalState NewState)
+{
+    _ASSERT(IS_SYSCTRL_AHB_PERIPH(SYSCTRL_AHBPeriph));
+    if (NewState == DISABLE)
+    {
+        SYSCTRL_CLK_CLS |= SYSCTRL_AHBPeriph;
+    }
+    else
+    {
+        SYSCTRL_CLK_CLS &= ~SYSCTRL_AHBPeriph;
+    }
+}
+
+void SYSCTRL_EnterSleep(SleepMode_TypeDef SleepMode)
+{
+    _ASSERT(IS_ALL_SLEEP_MODE(SleepMode));
+    *LPM_SLEEP = 0x5a;
+}
+
+void __NOINLINE HCLKConfig_Div_None(uint32_t HCLK_Div)
+{
+    QSPI_CTRL  |= (0x80);
+    int temp = (SYSCTRL_HCLK_CON & (~SYSCTRL_HCLK_COFG_REGBIT)) | HCLK_Div;
+    SYSCTRL_HCLK_CON =  temp;
+}
+
+void SYSCTRL_HCLKConfig(uint32_t HCLK_Div)
+{
+    _ASSERT(IS_GET_SYSCTRL_HCLK_DIV(HCLK_Div));
+    __asm("CPSID i");
+    if (HCLK_Div == SYSCTRL_HCLK_Div_None)
+    {
+        uint32_t HCLKConfig_Div_None_addr = (uint32_t)HCLKConfig_Div_None;
+        ((void(*)(void *, void *))FUNC_PREFETCH)(((uint32_t *)HCLKConfig_Div_None_addr), ((uint32_t *)(HCLKConfig_Div_None_addr + 64)));
+        HCLKConfig_Div_None(HCLK_Div);
+    }
+    else
+    {
+        int temp = (SYSCTRL_HCLK_CON & (~SYSCTRL_HCLK_COFG_REGBIT)) | HCLK_Div;
+        SYSCTRL_HCLK_CON =  temp;
+    }
+    __asm("CPSIE i");
+}
+
+void SYSCTRL_GetClocksFreq(SYSCTRL_ClocksTypeDef *SYSCTRL_Clocks)
+{
+    SYSCTRL_Clocks->HCLK_Frequency = CPU_MHZ;
+}
+
+void SYSCTRL_EnableDpllClk(void)
+{
+    enable_clock(CLKCLS_BT);
+    SYSCTRL_ROM_SWITCH = 0x94;
+    delay(500);
+
+    *(volatile byte *)0xc4ab1 = 0x7f;
+    *(volatile byte *)0xc4ab2 = 0xff;
+    *(volatile byte *)0xc4ab3 = 0xff;
+
+    *(volatile byte *)0xc40c3 = 0xb1;
+    *(volatile byte *)0xc40c4 = 0x4a;
+
+    BT_CLKPLL_EN = 0xff;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_systick.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_systick.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_systick.h	(working copy)
@@ -0,0 +1,82 @@
+/*
+File Name    : yc_systick.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/9
+Description  : systick encapsulation.
+*/
+
+#ifndef __YC_SYSTICK_H__
+#define __YC_SYSTICK_H__
+
+#include "yc3121.h"
+
+#define SYSTICK_SYSCLOCK        1
+#define SYSTICK_HALF_SYSCLOCK   0
+
+#define IS_RELOAD_VALUE(x)   (x <= 0xffffff)
+#define IS_DELAY_US_VALUE(x) (x <= 349000)
+#define IS_DELAY_MS_VALUE(x) (x <= 349)
+
+typedef int32_t tick;
+#define TICK_MAX_VALUE  (int32_t)0x7FFFFFFF
+
+/**
+ * @brief  SysTick_Delay_Ms
+ *
+ * @param  nms
+ *
+ * @retval none
+ */
+void SysTick_Delay_Ms(uint32_t nms);
+
+/**
+ * @brief  SysTick_Delay_Us
+ *
+ * @param  us
+ *
+ * @retval none
+ */
+void SysTick_Delay_Us(uint32_t us);
+
+/**
+ * @brief  Initialize systick and start systick
+ *
+ * @param  ReloadValue: the systick reload value
+ *
+ * @retval 0:succeed  1:error
+ */
+void SysTick_Config(uint32_t ReloadValue);
+
+void SysTick_disable();
+
+/**
+ * @brief  get the current value of SystickCount(SystickCount plus one for every overflow interrupt)
+ *
+ * @param  none
+ *
+ * @retval current value of SystickCount
+ */
+tick SysTick_GetTick(void);
+
+/**
+ * @brief  Determine whether the timeout that millisecond.
+ *
+ * @param  start_tick:start tick
+ *
+ * @param  interval:time interval(ms)
+ *
+ * @retval TRUE is timeout ,FALSE is not timeout
+ */
+Boolean SysTick_IsTimeOut(tick start_tick, int interval);
+
+/**
+ * @brief  get relative time.
+ *
+ * @param  start_tick:start tick(start time)
+ *
+ * @retval the relative time(millisecond)
+ */
+uint32_t SysTick_GetRelativeTime(tick start_tick);
+
+#endif   /* __YC_SYSTICK_H__ */
Index: BT_doublebyte/sdk/Librarier/sdk/yc_systick.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_systick.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_systick.c	(working copy)
@@ -0,0 +1,116 @@
+/*
+File Name    : yc_systick.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/9
+Description  : systick encapsulation.
+*/
+
+#include "yc_systick.h"
+
+#define ONE_US (CPU_MHZ/1000000)
+#define ONE_MS (CPU_MHZ/1000)
+
+tick SystickCount;
+
+static void sysTick_delay_ms(uint32_t ms)//MS    MAX:0.35s
+{
+    _ASSERT(IS_DELAY_MS_VALUE(ms));
+
+    uint32_t ReloadValue = ms * ONE_MS;
+    ReloadValue -= 1;
+
+    *SYSTICK_RVR = ReloadValue; //Set the reload value
+    *SYSTICK_CVR = 0; //clear the current value
+    *SYSTICK_CSR &= ~(1 << SYSTICK_CSR_TICKINT);
+    *SYSTICK_CSR |= ((SYSTICK_SYSCLOCK << SYSTICK_CSR_CLKSOURCE) | \
+                     (1 << SYSTICK_CSR_ENABLE));
+    while (!((*SYSTICK_CSR) >> 16) & 0x01);
+
+    *SYSTICK_CSR &= ~SYSTICK_CSR_ENABLE;
+}
+
+void SysTick_Delay_Ms(uint32_t nms)
+{
+    uint32_t repeat = nms / 300;
+    uint32_t remain = nms % 300;
+    while (repeat)
+    {
+        sysTick_delay_ms(300);
+        repeat--;
+    }
+    if (remain)
+        sysTick_delay_ms(remain);
+}
+
+void SysTick_Delay_Us(uint32_t us)//US   MAX: 0.35s
+{
+    _ASSERT(IS_DELAY_US_VALUE(us));
+
+    uint32_t ReloadValue = us * ONE_US;
+    ReloadValue -= 1;
+
+    *SYSTICK_RVR = ReloadValue; //Set the reload value
+    *SYSTICK_CVR = 0; //clear the current value
+    *SYSTICK_CSR &= ~(1 << SYSTICK_CSR_TICKINT);
+    *SYSTICK_CSR |= ((SYSTICK_SYSCLOCK << SYSTICK_CSR_CLKSOURCE) | \
+                     (1 << SYSTICK_CSR_ENABLE));
+    while (!((*SYSTICK_CSR) >> 16) & 0x01);
+
+    *SYSTICK_CSR &= ~SYSTICK_CSR_ENABLE;
+}
+
+
+void SysTick_Config(uint32_t ReloadValue)
+{
+    _ASSERT(IS_RELOAD_VALUE(ReloadValue));
+
+    ReloadValue -= 1;
+
+    *SYSTICK_CSR &= ~(((uint32_t)1) << SYSTICK_CSR_ENABLE);
+
+    *SYSTICK_RVR = ReloadValue;//Set the reload value
+    *SYSTICK_CVR = 0; //clear the current value
+    SystickCount = 0;// Reset the overflow counter
+    *SYSTICK_CSR |= ((SYSTICK_SYSCLOCK << SYSTICK_CSR_CLKSOURCE) | \
+                     (1 << SYSTICK_CSR_ENABLE) | \
+                     (1 << SYSTICK_CSR_TICKINT));
+}
+
+void SysTick_disable()
+{
+    *SYSTICK_CSR &= ~(((uint32_t)1) << SYSTICK_CSR_ENABLE);
+
+    *SYSTICK_RVR = 0;//Set the reload value
+    *SYSTICK_CVR = 0; //clear the current value
+    SystickCount = 0;// Reset the overflow counter
+    *SYSTICK_CSR = 0;
+}
+
+tick SysTick_GetTick(void)
+{
+    return SystickCount;
+}
+
+Boolean SysTick_IsTimeOut(tick start_tick, int interval)
+{
+    start_tick = SysTick_GetTick() - start_tick;
+    if (start_tick < 0)
+        start_tick += TICK_MAX_VALUE;
+    if (((start_tick * (*SYSTICK_RVR)) / (CPU_MHZ / 1000)) >= interval)
+    {
+        return TRUE;
+    }
+    else
+    {
+        return FALSE;
+    }
+}
+
+uint32_t SysTick_GetRelativeTime(tick start_tick)
+{
+    start_tick = SysTick_GetTick() - start_tick;
+    if (start_tick < 0)
+        start_tick += TICK_MAX_VALUE;
+    return ((start_tick * (*SYSTICK_RVR)) / (CPU_MHZ / 1000));
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_timer.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_timer.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_timer.h	(working copy)
@@ -0,0 +1,169 @@
+/**
+  ******************************************************************************
+  * @file    yc_timer.h
+  * @author  Yichip
+  * @version V1.0
+  * @date    27-March-2018
+  * @brief   timer encapsulation.
+  ******************************************************************************
+  * @attention
+  *
+  * Timer and pwm use the same hardware resources,Avoid conflict when using
+  ******************************************************************************
+  */
+
+#ifndef __YC_TIMER_H__
+#define __YC_TIMER_H__
+
+#include "yc3121.h"
+#include "yc_gpio.h"
+
+/**
+  * @brief  timer number Structure definition
+  */
+typedef enum
+{
+    TIM0 = 0,
+    TIM1,
+    TIM2,
+    TIM3,
+    TIM4,
+    TIM5,
+    TIM6,
+    TIM7,
+    TIM8
+} TIM_NumTypeDef;
+#define ISTIMERNUM(TIMx) (TIMx<PWM_TOTAL)
+
+/**
+  * @brief  timer Init Structure definition
+  */
+typedef struct
+{
+    TIM_NumTypeDef TIMx;
+    uint32_t period;
+} TIM_InitTypeDef;
+
+/**
+  * @brief  PWM Init Structure definition
+  */
+typedef struct
+{
+    TIM_NumTypeDef TIMx;
+    uint32_t LowLevelPeriod;
+    uint32_t HighLevelPeriod;
+    GPIO_OutputTypeDef SatrtLevel;
+} PWM_InitTypeDef;
+
+typedef enum
+{
+    TIM_Mode_PWM	= 0,
+    TIM_Mode_TIMER	= 1
+} TIM_ModeTypeDef;
+#define IS_TIM_MODE(mode)		(mode == TIM_Mode_TIMER || mode == TIM_Mode_PWM)
+
+/**
+ * @brief  Blocking delay
+ *
+ * @param  us : the delay time,Unit of Microsecond
+ *
+ * @retval none
+ */
+void delay_us(int us);
+
+/**
+ * @brief Blocking delay
+ *
+ * @param ms : the delay time,Unit of milliseconds
+ *
+ * @retval none
+ */
+void delay_ms(int ms);
+
+/**
+ * @brief  Initialize TIMx ,not start timer,use TIM_Cmd start timer
+ *
+ * @param  TIM_init_struct : the TIM_InitTypeDef Structure
+ *
+ * @retval none
+ */
+void TIM_Init(TIM_InitTypeDef *TIM_init_struct);
+
+/**
+ * @brief  DeInit TIM
+ *
+ * @retval none
+ */
+void TIM_DeInit(void);
+
+/**
+ * @brief  enable or disable timer
+ *
+ * @param  TIMx : the timer number,TIM0-TIM5
+ *
+ * @param  NewState :DISABLE or ENABLE
+ *
+ * @retval none
+ */
+void TIM_Cmd(TIM_NumTypeDef TIMx, FunctionalState NewState);
+
+/**
+ * @brief  Configure timer module mode
+ *
+ * @param  TIMx : the timer number,TIM0-TIM5
+ *
+ * @param  TIM_ModeTypeDef :TIM_Mode_TIMER	or TIM_Mode_PWM
+ *
+ * @retval none
+ */
+void TIM_ModeConfig(TIM_NumTypeDef TIMx, TIM_ModeTypeDef TIM_Mode);
+
+/**
+ * @brief  Configure timer Period
+ *
+ * @param  TIMx : the timer number,TIM0-TIM5
+ *
+ * @param  Period :the timer Period(Reload value)
+ *
+ * @retval none
+ */
+void TIM_SetPeriod(TIM_NumTypeDef TIMx, uint32_t Period);
+
+/**
+ * @brief  Initialize TIMx into PWM mode,only Initialize,use TIM_Cmd start putout PWM
+ *
+ * @param  PWM_init_struct : the PWM_InitTypeDef Structure
+ *
+ * @retval none
+ */
+void TIM_PWMInit(PWM_InitTypeDef *PWM_init_struct);
+
+/**
+ * @brief  Configure PWM Period
+ *
+ * @param  TIMx : the timer number,TIM0-TIM5
+ *
+ * @param  LowLevelPeriod :the PWM low level Period(Reload value)
+ *
+ * @param  HighLevelPeriod :the PWM high level Period(Reload value)
+ *
+ * @retval none
+ */
+void TIM_SetPWMPeriod(TIM_NumTypeDef TIMx, uint32_t LowLevelPeriod, uint32_t HighLevelPeriod);
+
+/**
+ * @brief  Configure PWM Differential output
+ *
+ * @param  TIMx : the timer number of output PWM1(TIM0-TIM5)
+ *
+ * @param  TIMy : the timer number of output PWM2(TIM0-TIM5)
+ *
+ * @param  LowLevelPeriod :the PWM1 low level Period(Reload value)
+ *
+ * @param  HighLevelPeriod :the PWM1 high level Period(Reload value)
+ *
+ * @retval none
+ */
+void TIM_PWMDifferential(TIM_NumTypeDef TIMx, TIM_NumTypeDef TIMy, uint32_t LowLevelPeriod, uint32_t HighLevelPeriod);
+
+#endif /*__YC_TIMER_H__*/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_timer.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_timer.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_timer.c	(working copy)
@@ -0,0 +1,132 @@
+#include "yc_timer.h"
+#include "rom_api.h"
+
+void delay_us(int us)
+{
+    ((void(*)(int))(FUNC_DELAY_US_ADDR))(us);
+}
+
+void delay_ms(int ms)
+{
+    ((void(*)(int))(FUNC_DELAY_MS_ADDR))(ms);
+}
+
+void TIM_Init(TIM_InitTypeDef *TIM_init_struct)
+{
+    _ASSERT(ISTIMERNUM(TIM_init_struct->TIMx));
+
+    TIM_Cmd(TIM_init_struct->TIMx, DISABLE);
+    TIM_PCNT(TIM_init_struct->TIMx) = TIM_init_struct->period;
+    if (TIM_init_struct->TIMx < TIM8)
+        TIM_CTRL |= (((((uint32_t)1) << TIM_CTRL_MODE) | (((uint32_t)1) << TIM_CTRL_AUTO_RELOAD)) << TIM_init_struct->TIMx * 4);
+    else
+        TIM_CTRL1 |= (((((uint32_t)1) << TIM_CTRL_MODE) | (((uint32_t)1) << TIM_CTRL_AUTO_RELOAD)) << 0);
+}
+
+void TIM_DeInit()
+{
+    disable_clock(CLKCLS_TIM);
+}
+
+void TIM_Cmd(TIM_NumTypeDef TIMx, FunctionalState NewState)
+{
+    _ASSERT(ISTIMERNUM(TIMx));
+
+    if (NewState == ENABLE)
+    {
+        if (TIMx < TIM8)
+            TIM_CTRL |= ((((uint32_t)1) << TIM_CTRL_ENABLE) << TIMx * 4);
+        else
+            TIM_CTRL1 |= ((((uint32_t)1) << TIM_CTRL_ENABLE) << 0);
+    }
+    else
+    {
+        if (TIMx < TIM8)
+            TIM_CTRL &= ~((((uint32_t)1) << TIM_CTRL_ENABLE) << TIMx * 4);
+        else
+            TIM_CTRL1 &= ~((((uint32_t)1) << TIM_CTRL_ENABLE) << 0);
+    }
+}
+
+void TIM_ModeConfig(TIM_NumTypeDef TIMx, TIM_ModeTypeDef TIM_Mode)
+{
+    _ASSERT(ISTIMERNUM(TIMx));
+    _ASSERT(IS_TIM_MODE(TIM_Mode));
+
+    if (TIM_Mode == TIM_Mode_TIMER)
+    {
+        if (TIMx < TIM8)
+            TIM_CTRL |= ((((uint32_t)1) << TIM_CTRL_MODE) << TIMx * 4);
+        else
+            TIM_CTRL1 |= ((((uint32_t)1) << TIM_CTRL_MODE) << 0);
+    }
+    else
+    {
+        if (TIMx < TIM8)
+            TIM_CTRL &= ~((((uint32_t)1) << TIM_CTRL_MODE) << TIMx * 4);
+        else
+            TIM_CTRL1 &= ~((((uint32_t)1) << TIM_CTRL_MODE) << 0);
+    }
+}
+
+void TIM_SetPeriod(TIM_NumTypeDef TIMx, uint32_t Period)
+{
+    _ASSERT(ISTIMERNUM(TIMx));
+
+    TIM_PCNT(TIMx) = Period;
+}
+
+void TIM_PWMInit(PWM_InitTypeDef *PWM_init_struct)
+{
+    _ASSERT(ISTIMERNUM(PWM_init_struct->TIMx));
+
+    TIM_Cmd(PWM_init_struct->TIMx, DISABLE);
+    TIM_PCNT(PWM_init_struct->TIMx) = PWM_init_struct->HighLevelPeriod;
+    TIM_NCNT(PWM_init_struct->TIMx) = PWM_init_struct->LowLevelPeriod;
+    if (PWM_init_struct->SatrtLevel == OutputHigh)
+    {
+        if (PWM_init_struct->TIMx < TIM8)
+            TIM_CTRL |= ((((uint32_t)1) << TIM_CTRL_START_LEVEL) << PWM_init_struct->TIMx * 4);
+        else
+            TIM_CTRL1 |= ((((uint32_t)1) << TIM_CTRL_START_LEVEL) << 0);
+    }
+    else
+    {
+        if (PWM_init_struct->TIMx < TIM8)
+            TIM_CTRL &= ~((((uint32_t)1) << TIM_CTRL_START_LEVEL) << PWM_init_struct->TIMx * 4);
+        else
+            TIM_CTRL1 &= ~((((uint32_t)1) << TIM_CTRL_START_LEVEL) << 0);
+    }
+    if (PWM_init_struct->TIMx < TIM8)
+        TIM_CTRL &= ~((((uint32_t)1) << TIM_CTRL_MODE) << PWM_init_struct->TIMx * 4);
+    else
+        TIM_CTRL1 &= ~((((uint32_t)1) << TIM_CTRL_MODE) << 0);
+}
+
+void TIM_SetPWMPeriod(TIM_NumTypeDef TIMx, uint32_t LowLevelPeriod, uint32_t HighLevelPeriod)
+{
+    _ASSERT(ISTIMERNUM(TIMx));
+
+    TIM_PCNT(TIMx) = HighLevelPeriod;
+    TIM_NCNT(TIMx) = LowLevelPeriod;
+}
+
+void TIM_PWMDifferential(TIM_NumTypeDef TIMx, TIM_NumTypeDef TIMy, uint32_t LowLevelPeriod, uint32_t HighLevelPeriod)
+{
+    _ASSERT(ISTIMERNUM(TIMx));
+    _ASSERT(ISTIMERNUM(TIMy));
+
+    uint32_t TDifferentialConfig;
+
+    TIM_CTRL &= ~((1 << (TIMy * 4)) | (1 << (TIMx * 4)));
+    TIM_PCNT(TIMx) = HighLevelPeriod;
+    TIM_NCNT(TIMx) = LowLevelPeriod;
+    TIM_PCNT(TIMy) = LowLevelPeriod;
+    TIM_NCNT(TIMy) = HighLevelPeriod;
+    TIM_CTRL &= ~(1 << (TIMx * 4 + 1));
+    TDifferentialConfig = TIM_CTRL;
+    TDifferentialConfig |= ((3 << (TIMy * 4)) | (1 << (TIMx * 4)));
+    TIM_CTRL |= 1 << (TIMy * 4 + 1);
+    delay((LowLevelPeriod - 8) / 4);
+    TIM_CTRL = TDifferentialConfig;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_touch.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_touch.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_touch.h	(working copy)
@@ -0,0 +1,100 @@
+/*
+File Name    : yc_touch.h
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/1/14
+Description  :
+*/
+
+#ifndef __YC_TOUCH_H__
+#define __YC_TOUCH_H__
+
+#include "yc_st7789.h"
+#include "board_config.h"
+#include "yc_adc.h"
+
+//#define TP_DEBUG
+#if defined(TP_DEBUG)
+#define TP_PRINT        MyPrintf
+#else
+#define TP_PRINT(x,...)
+#endif
+
+#define TP_LEVEL_DIFF  (30)
+#define Tp_AbsolouteDifference(val_a,val_b) (val_a > val_b ? val_a - val_b : val_b - val_a)
+#define Tp_Get_Diff_Result(diff_value,com_value)    (diff_value > com_value ? FALSE : TRUE)
+
+typedef enum
+{
+    X_AXIS = 0,
+    Y_AXIS
+}TP_Axis_TypeDef;
+
+typedef struct
+{
+    uint16_t x;
+    uint16_t y;
+}Tp_Calibrate_CB;
+
+typedef struct
+{
+    uint16_t kx;
+    uint16_t ky;
+}Tp_CalibrateSlope_CB;
+
+typedef struct
+{
+    uint16_t nx; /*now x value*/
+    uint16_t ny; /*now y value*/
+    uint16_t lx; /*last x value*/
+    uint16_t ly; /*last y value*/
+    int pressflag; /*Press the tag*/
+}Tp_Sign_Para_TypeDef;
+
+#define REGULT_ADC_MAX      (0x7fe)
+
+#define TOP_SIZE_X (220)
+#define TOP_SIZE_Y (190)
+
+#define LEFT_UP_X (50)
+#define LEFT_UP_Y (50)
+
+#define RIGHT_UP_X  (LEFT_UP_X + TOP_SIZE_X)
+#define RIGHT_UP_Y  LEFT_UP_Y
+
+#define LEFT_DOWN_X  LEFT_UP_X
+#define LEFT_DOWN_Y  TOP_SIZE_Y
+
+#define RIGHT_DOWN_X  (LEFT_UP_X + TOP_SIZE_X)
+#define RIGHT_DOWN_Y  TOP_SIZE_Y
+
+#define MIDDLE_X  (LEFT_UP_X + TOP_SIZE_X/2)
+#define MIDDLE_Y  (LEFT_UP_Y + TOP_SIZE_Y/2)
+
+
+#define TP_CALIPONT_X  (160)
+#define TP_CALIPONT_Y  (145)
+#define TP_FAC_KX      (270)
+#define TP_FAC_KY      (363)
+#define TP_PEGPONT_X   (0x613)
+#define TP_PEGPONT_Y   (0x5a8)
+#define TP_CONSTANT_X  (1987)
+#define TP_CONSTANT_Y  (1974)
+
+extern Tp_Calibrate_CB DisplaySample[5];
+extern Tp_Calibrate_CB ScreenSample[5];
+extern Tp_Calibrate_CB PegPont;
+extern Tp_Calibrate_CB CaliPont;
+extern Tp_CalibrateSlope_CB fac;
+extern Tp_CalibrateSlope_CB Constant;
+
+#define PRESS_DETECT_CHANNEL    ADC_CHANNEL_6   /*The GPIO corresponding channel with pull-up mode needs to be selected to detect touch*/
+#define Y_DETECT_CHANNEL        ADC_CHANNEL_6   /*Y axis AD detection channel*/
+#define X_DETECT_CHANNEL        ADC_CHANNEL_7   /*X axis AD detection channel*/
+
+Boolean Tp_Calibrate(void);
+Boolean Tp_DetectPressing(void);
+void Tp_GetAdXY(uint16_t *adx,uint16_t *ady);
+void Tp_GetPoint(uint16_t *Disx,uint16_t*Disy);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_touch.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_touch.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_touch.c	(working copy)
@@ -0,0 +1,368 @@
+/*
+File Name    : yc_touch.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2020/1/14
+Description  :
+*/
+
+#include "yc_touch.h"
+
+Tp_Calibrate_CB DisplaySample[5];
+Tp_Calibrate_CB ScreenSample[5];
+Tp_Calibrate_CB PegPont;
+Tp_Calibrate_CB CaliPont;
+Tp_CalibrateSlope_CB fac;
+Tp_CalibrateSlope_CB Constant;
+
+/**
+  * @brief  Gets the level difference result
+  * @param  diff_value : value1
+  *         com_value  : value2
+  * @retval TRUE : in range ,FALSE: not in range
+  */
+static Boolean Tp_Get_Level_Result(uint32_t diff_value,uint32_t com_value)
+{
+    if((diff_value > (com_value + TP_LEVEL_DIFF)) || (diff_value < (com_value - TP_LEVEL_DIFF)))
+    {
+        return FALSE;
+    }
+    return TRUE;
+}
+
+/**
+  * @brief  Get the ad value
+  * @param  Axis :
+  *         X_AXIS  : x axis
+  *         Y_AXIS  : y axis
+  * @retval  ad value
+  */
+
+static uint16_t Tp_GetCoordVal(TP_Axis_TypeDef Axis)
+{
+    uint8_t detect_chancl = 0;
+    if(Axis == X_AXIS)
+    {
+        GPIO_Config(TP_Y_LOW_PORT, TP_Y_LOW_IO_PIN, OUTPUT_LOW);
+        GPIO_Config(TP_Y_HIGH_PORT, TP_Y_HIGH_IO_PIN, OUTPUT_HIGH);
+        GPIO_Config(TP_X_HIGH_PORT, TP_X_HIGH_IO_PIN, ANALOG);
+        GPIO_Config(TP_X_LOW_PORT, TP_X_LOW_IO_PIN, ANALOG);
+        detect_chancl = Y_DETECT_CHANNEL;
+    }
+    else if(Axis == Y_AXIS)
+    {
+        GPIO_Config(TP_Y_LOW_PORT, TP_Y_LOW_IO_PIN, ANALOG);
+        GPIO_Config(TP_Y_HIGH_PORT, TP_Y_HIGH_IO_PIN, ANALOG);
+        GPIO_Config(TP_X_HIGH_PORT, TP_X_HIGH_IO_PIN, OUTPUT_HIGH);
+        GPIO_Config(TP_X_LOW_PORT, TP_X_LOW_IO_PIN, OUTPUT_LOW);
+        detect_chancl = X_DETECT_CHANNEL;
+    }
+    delay_ms(1);
+    return ADC_GetResult(detect_chancl);
+}
+
+/**
+  * @brief  Get the x axis and  y axis  ad value
+  * @param  adx : The address to which the x axis AD value is stored
+  *         ady : The address to which the y axis AD value is stored
+  * @retval  None
+  */
+
+void Tp_GetAdXY(uint16_t *adx,uint16_t *ady)
+{
+    *adx = Tp_GetCoordVal(X_AXIS);
+    *ady = Tp_GetCoordVal(Y_AXIS);
+    return ;
+}
+
+/**
+  * @brief  Get the x axis and  y axis displayed coordinates
+  * @param  Disx : The address to which the x axis  displayed coordinates is stored
+  *         Disy : The address to which the y axis displayed coordinates is stored
+  * @retval  None
+  */
+
+void Tp_GetPoint(uint16_t *Disx,uint16_t*Disy)
+{
+    /*get adc*/
+    Tp_GetAdXY(Disx,Disy);
+
+    /*get display coordinate*/
+    *Disx = Tp_AbsolouteDifference(*Disx ,Constant.kx) * 100 / fac.kx;
+    *Disy = Tp_AbsolouteDifference(*Disy ,Constant.ky) * 100 / fac.ky;
+}
+
+/**
+  * @brief  Check whether the touch screen is pressed
+  * @param  None
+  * @retval TRUE : press FALSE : no press
+  */
+Boolean Tp_DetectPressing(void)
+{
+    uint16_t AdcPress = 0;
+    GPIO_Config(TP_Y_LOW_PORT, TP_Y_LOW_IO_PIN, OUTPUT_LOW);
+    GPIO_Config(TP_Y_HIGH_PORT, TP_Y_HIGH_IO_PIN, OUTPUT_HIGH);
+    GPIO_Config(TP_X_HIGH_PORT, TP_X_HIGH_IO_PIN, ANALOG);
+    GPIO_Config(TP_X_LOW_PORT, TP_X_LOW_IO_PIN, PULL_UP);
+    AdcPress = ADC_GetResult(PRESS_DETECT_CHANNEL);
+
+    if((AdcPress + 3)  < REGULT_ADC_MAX)
+    {
+        return TRUE;
+    }
+    else
+    {
+        return FALSE;
+    }
+}
+
+/**
+  * @brief  Draw cross 
+  * @param  x: x axis
+  *         y: y axis
+  *         c: color
+  * @retval None
+  */
+static void Tp_Draw_Cross(uint16_t x,uint16_t y,uint16_t c)
+{
+    uint8_t s_offect = 10;
+    /*get screen type tft or lcd*/
+    St7899_tft_DrawLine(x - s_offect,y,x + s_offect,y,c);
+    St7899_tft_DrawLine(x,y - s_offect,x ,y+s_offect,c);
+}
+
+/**
+  * @brief  Gets the filtered AD value
+  * @param  None
+  * @retval The x and y coordinates returned
+  */
+static Tp_Calibrate_CB *Read_Adc_Result(void)
+{
+    uint8_t t = 0;
+    uint8_t t1 = 0;
+    uint8_t count = 0;
+    uint16_t temp = 0;
+    uint16_t Tpx = 0;
+    uint16_t Tpy = 0;
+    static Tp_Calibrate_CB screen;
+    int databuffer[2][10] = {{0},{0}};
+    while(count < 6)
+    {
+        if(Tp_DetectPressing())
+        {
+            Tp_GetAdXY(&Tpx,&Tpy);
+            databuffer[0][count] = Tpx;
+            databuffer[1][count] = Tpy;
+            TP_PRINT("0x%x,0x%x\n", databuffer[0][count], databuffer[1][count]);
+            count ++;
+        }
+    }
+    if(count == 6)
+    {
+        do
+        {
+            t1 = 0;
+            for(t = 0; t < count -1 ; t++)
+            {
+                if(databuffer[0][t] > databuffer[0][t + 1])
+                {
+                    temp=databuffer[0][t+1];
+                    databuffer[0][t+1]=databuffer[0][t];
+                    databuffer[0][t]=temp;
+                    t1=1;
+                }
+            } 
+        }while(t1); // x sort
+        do
+        {
+            t1=0;
+			for(t=0;t<count-1;t++)
+			{
+				if(databuffer[1][t]>databuffer[1][t+1])
+				{
+					temp=databuffer[1][t+1];
+					databuffer[1][t+1]=databuffer[1][t];
+					databuffer[1][t]=temp;
+					t1=1;
+				}
+			}
+        }while(t1); // y sort
+        screen.x = 0;
+        screen.y = 0;
+        for( count = 2; count < 5; count ++)
+        {
+            screen.x += databuffer[0][count];
+            screen.y += databuffer[1][count];
+        }
+        screen.x /= 3;
+        screen.y /= 3;
+        TP_PRINT("screen.x : 0x%x,screen.y : 0x%x \n",screen.x,screen.y);
+        for(count = 2; count < 5; count ++)
+        {
+            if((((screen.x-databuffer[0][count])<4)
+            &&((databuffer[0][count]-screen.x)<4))
+            &&(((screen.y-databuffer[1][count])<4)
+            &&((databuffer[1][count]-screen.y)<4)))
+            {
+                ;/*continue detection*/
+            }
+            else
+            {
+                return 0;/*data exception*/
+            }
+        }
+        return &screen;
+    }
+    return 0;
+}
+
+/**
+  * @brief  Touch the calibration
+  * @param  None
+  * @retval TRUE : calibration success, FALSE : calibration fail
+  */
+
+Boolean Tp_Calibrate(void)
+{
+    uint8_t i = 0;
+    int level_diff_buff[4] = {0};
+    int dis_diff_buff[4] = {0};
+    Tp_Calibrate_CB *ptr;
+    /* read calibrate data to flash */
+    /* get screen type tft or lcd */
+    DisplaySample[0].x = LEFT_UP_X;
+    DisplaySample[0].y = LEFT_UP_Y;
+    DisplaySample[1].x = RIGHT_UP_X;
+    DisplaySample[1].y = RIGHT_UP_Y;
+    DisplaySample[2].x = LEFT_DOWN_X;
+    DisplaySample[2].y = LEFT_DOWN_Y;
+    DisplaySample[3].x = RIGHT_DOWN_X;
+    DisplaySample[3].y = RIGHT_DOWN_Y;
+    DisplaySample[4].x = MIDDLE_X;
+    DisplaySample[4].y = MIDDLE_Y;
+
+    uint8_t size_sample =  sizeof(DisplaySample)/sizeof(Tp_Calibrate_CB);
+    TP_PRINT("szie_d : %d\n",sizeof(DisplaySample)/sizeof(Tp_Calibrate_CB));
+    
+    for(i = 0; i< size_sample ; i++)
+    {
+        /*Please align the calibration with the cross, otherwise the calibration will not work*/
+        Tp_Draw_Cross(DisplaySample[i].x,DisplaySample[i].y,BLACK);
+        
+        do
+        {
+            ptr = Read_Adc_Result();
+        }
+        while(ptr == (void*)0);
+        
+        ScreenSample[i].x = ptr->x;
+        ScreenSample[i].y = ptr->y;
+        
+        Tp_Draw_Cross(DisplaySample[i].x,DisplaySample[i].y,WHITE);
+        
+        if(i< (size_sample - 1))
+        {
+            delay_ms(500);
+        }
+    }
+    
+    /*Calculate the ADC difference*/
+    /*x0 ~ x2*/
+    level_diff_buff[0] = Tp_AbsolouteDifference(ScreenSample[0].x,ScreenSample[2].x);
+    
+    /*x1 ~ x3*/
+    level_diff_buff[1] = Tp_AbsolouteDifference(ScreenSample[1].x,ScreenSample[3].x);
+    
+    /*y0 ~ y1*/
+    level_diff_buff[2] = Tp_AbsolouteDifference(ScreenSample[0].y,ScreenSample[1].y);
+    
+    /*y2 ~ y3*/
+    level_diff_buff[3] = Tp_AbsolouteDifference(ScreenSample[2].y,ScreenSample[3].y);
+    
+    for(i = 0; i < 4 ; i ++)
+    {
+        if(Tp_Get_Diff_Result(level_diff_buff[i],TP_LEVEL_DIFF) == FALSE)
+        {
+            TP_PRINT("level_diff_buff[%d] = %d  err \n",i,level_diff_buff[i] );
+            return FALSE;
+        }
+    }
+    
+    /*x0 ~ x1*/
+    dis_diff_buff[0] = Tp_AbsolouteDifference(ScreenSample[0].x,ScreenSample[1].x);
+    
+    /*x2 ~ x3*/
+    dis_diff_buff[1] = Tp_AbsolouteDifference(ScreenSample[2].x,ScreenSample[3].x);
+    
+
+    if(Tp_Get_Level_Result(dis_diff_buff[0],dis_diff_buff[1]) == FALSE || dis_diff_buff[0] < TOP_SIZE_X || dis_diff_buff[1] < TOP_SIZE_X)
+    {
+        TP_PRINT("dis_diff_buffx[0] : %d,dis_diff_buffx[1] : %d err \n",dis_diff_buff[0],dis_diff_buff[1]);
+        return FALSE;
+    }
+    
+    
+    /*y0 ~ y2*/
+    dis_diff_buff[2] = Tp_AbsolouteDifference(ScreenSample[0].y,ScreenSample[2].y);
+    
+    /*y1 ~ y3*/
+    dis_diff_buff[3] = Tp_AbsolouteDifference(ScreenSample[1].y,ScreenSample[3].y);
+    
+    if(Tp_Get_Level_Result(dis_diff_buff[2],dis_diff_buff[3]) == FALSE || dis_diff_buff[2] < TOP_SIZE_Y || dis_diff_buff[3] < TOP_SIZE_Y)
+    {
+        TP_PRINT("dis_diff_buffy[%d] : %d err \n",i,dis_diff_buff[i] );
+        return FALSE;
+    }
+    
+    
+    /*Calculation of kx ky*/
+    
+     fac.kx = (((dis_diff_buff[0] * 100) /  (Tp_AbsolouteDifference(DisplaySample[0].x,DisplaySample[1].x))) + \
+               ((dis_diff_buff[1] * 100) /  (Tp_AbsolouteDifference(DisplaySample[2].x,DisplaySample[3].x))))/2 ;
+    
+        
+     fac.ky = (((dis_diff_buff[2] * 100) /  (Tp_AbsolouteDifference(DisplaySample[0].y,DisplaySample[2].y))) + \
+           ((dis_diff_buff[3] * 100) /  (Tp_AbsolouteDifference(DisplaySample[1].y,DisplaySample[3].y))))/2 ;
+
+    Constant.kx = ScreenSample[0].x + ((DisplaySample[0].x)* fac.kx)/100;// y = -kx + b
+    Constant.ky = ScreenSample[0].y + ((DisplaySample[0].y)* fac.ky)/100;
+
+    TP_PRINT("fac.kx : %d __ fac.ky: %d\n",fac.kx,fac.ky);
+    TP_PRINT("constant.kx : %d __ constant.ky: %d\n",Constant.kx,Constant.ky);
+    
+    /*Calculate the coordinate of the center point from kx, ky,DisplaySample[4].x,DisplaySample[4].y*/
+    
+    PegPont.x = Tp_AbsolouteDifference(fac.kx*DisplaySample[4].x/100,Constant.kx);
+    PegPont.y = Tp_AbsolouteDifference(fac.ky*DisplaySample[4].y/100,Constant.ky);
+    
+    TP_PRINT("PegPont.x : %x __ PegPont.y: %x\n",PegPont.x,PegPont.y);
+    
+    /*Check the calculation coordinates and measurement coordinates of the center point*/
+    
+    
+    uint16_t center_x = Tp_AbsolouteDifference(ScreenSample[4].x,PegPont.x);
+    uint16_t center_y = Tp_AbsolouteDifference(ScreenSample[4].y,PegPont.y);
+    
+    TP_PRINT("center_x: %d __ center_y: %d\n",center_x,center_y);
+    
+    CaliPont.x = DisplaySample[4].x;
+    CaliPont.y = DisplaySample[4].y;
+
+    TP_PRINT(" CaliPont.x = %d\n",CaliPont.x);
+    TP_PRINT(" CaliPont.y = %d\n",CaliPont.y);
+    
+    if(Tp_Get_Diff_Result(center_x,TP_LEVEL_DIFF) ==  FALSE || Tp_Get_Diff_Result(center_y,TP_LEVEL_DIFF) == FALSE)
+    {
+        TP_PRINT("Tp_Get_Diff_Result center err \n");
+        return FALSE;
+    }
+    
+    /*Record calibration value*/
+    
+    TP_PRINT(" fac.kx : %d \n",  fac.kx);
+    TP_PRINT(" fac.ky : %d \n", fac.ky);
+    TP_PRINT(" PegPont.x : %x \n", PegPont.x);
+    TP_PRINT(" PegPont.y : %x \n", PegPont.y);
+    
+    return TRUE;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_trng.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_trng.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_trng.h	(working copy)
@@ -0,0 +1,37 @@
+#ifndef __YC_TRNG_H__
+#define __YC_TRNG_H__
+
+#include "yc3121.h"
+
+/**
+ * @brief  init TRNG
+ *
+ * @param  none
+ *
+ * @retval none
+ */
+void TRNG_Init(void);
+
+/**
+ * @brief  get 128bit TRNG data
+ *
+ * @param  rand[4]:128bit TRNG data out of buf
+ *
+ * @retval 0:succeed  1:error
+ */
+void TRNG_Get(volatile unsigned long *rand);
+
+/**
+ * @brief  Turn off Trng
+ *
+ * @param  none
+ *
+ * @retval none
+ */
+void Disable_Trng(void);
+
+unsigned char GetTRNGData_8bit(void);
+
+int GetTRNGData(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_trng.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_trng.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_trng.c	(working copy)
@@ -0,0 +1,65 @@
+#include "yc_trng.h"
+
+/**
+* @brief  init TRNG
+*
+* @param  none
+*
+* @retval none
+*/
+void TRNG_Init(void)
+{
+    disable_intr(INTR_TRNG);
+    SYSCTRL_HWCTRL(11)  = 0xff;
+    SYSCTRL_HWCTRL(10) |= 0xc0;
+
+    *(volatile int *)(0xf8524) = 0x87878787;
+    SYSCTRL_RNG_CTRL = 0;
+    SYSCTRL_RNG_CTRL = 0x667f;                                          //rng generation enable
+    while ((SYSCTRL_RNG_CTRL & (1 << 28)) == 0)
+    {
+    }
+//  enable_intr(INTR_TRNG);
+}
+
+/**
+* @brief  get 128bit TRNG data
+*
+* @param  rand[4]:128bit TRNG data out of buf
+*
+* @retval 0:succeed  1:error
+*/
+void TRNG_Get(volatile unsigned long *rand)
+{
+    rand[0] = SYSCTRL_RNG_DATA(0);
+    rand[1] = SYSCTRL_RNG_DATA(1);
+    rand[2] = SYSCTRL_RNG_DATA(2);
+    rand[3] = SYSCTRL_RNG_DATA(3);
+}
+
+uint8_t GetTRNGData_8bit(void)
+{
+    return  GetTRNGData();
+}
+
+int GetTRNGData(void)
+{
+    static uint32_t old_rng_data  = 0;
+    uint32_t tmp = 0;
+    while (1)
+    {
+        tmp =  SYSCTRL_RNG_DATA(0);
+        if ((tmp != old_rng_data) && (tmp != 0) && (tmp != 0xffffffff))
+        {
+            old_rng_data = tmp;
+            break;
+        }
+    }
+    return  tmp;
+}
+
+void Disable_Trng(void)
+{
+    SYSCTRL_HWCTRL(11)  = 0;
+    SYSCTRL_HWCTRL(10) &= 1;
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_uart.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_uart.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_uart.h	(working copy)
@@ -0,0 +1,304 @@
+/*
+File Name    : yc_uart.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/4
+Description  : UART encapsulation.
+*/
+#ifndef __YC_UART_H__
+#define __YC_UART_H__
+
+#include "yc3121.h"
+
+/** @def time of UART receive data  time out intterrupt. real time = regvalue*48
+  * @{
+  */
+#define TIME_IT_TIMEOUT (uint16_t)0x01
+
+/** @defgroup USART_Mode
+  * @{
+  */
+#define Mode_Single_Line       (1<<6)
+#define Mode_duplex            (0<<6)
+#define IS_MODE(MODE)  (((MODE) == Mode_Single_Line) ||\
+                        ((MODE) == Mode_duplex))
+/**
+  * @}
+  */
+
+/** @
+  * @defgroup USART_DataBits
+  */
+#define Databits_8b            (0<<2)
+#define Databits_9b            (1<<2)
+
+#define IS_USART_WORD_LENGTH(LENGTH)  (((LENGTH) == Databits_8b) || \
+                                       ((LENGTH) == Databits_9b))
+/**
+  * @}
+  */
+
+/** @defgroup USART_Stop_Bits
+  * @{
+  */
+#define StopBits_1            (0<<3)
+#define StopBits_2            (1<<3)
+#define IS_USART_STOPBITS(STOPBITS)  (((STOPBITS) == StopBits_1) ||  \
+                                      ((STOPBITS) == StopBits_2) )
+/**
+  * @}
+  */
+
+/** @defgroup USART_Hardware_Flow_Control
+  * @{
+  */
+#define FlowCtrl_None       (0<<4)
+#define FlowCtrl_Enable     (1<<4)
+
+#define IS_FlowCtrl(CONTROL)  (((CONTROL) == FlowCtrl_None) || \
+                               ((CONTROL) == FlowCtrl_Enable))
+/**
+  * @}
+  */
+
+/** @defgroup UART_Interrupt_Type_definition
+  * @{
+  */
+#define UART_IT_TX	      0x01
+#define UART_IT_RX        0x02
+#define IS_UART_IT(x)     (x == UART_IT_TX)||(x == UART_IT_RX)
+/**
+  * @}
+  */
+
+/** @defgroup USART_Parity
+* @{
+*/
+#define   Parity_None       (0<<1)
+#define   Parity_Even       (0<<1)
+#define   Parity_Odd        (1<<1)
+#define IS_PARITY(PARITY)  (((PARITY) == Parity_Even) ||\
+                            ((PARITY) == Parity_None)  ||\
+                            ((PARITY) == Parity_Odd))
+/**
+  * @}
+  */
+
+/** @defgroup USART_BaudRate
+* @{
+*/
+#define IS_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0x5B8) && ((BAUDRATE) < 0x0044AA21))
+/**
+  * @}
+  */
+
+typedef struct
+{
+    uint8_t Mode;         /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.
+                             This parameter can be a value of @ref USART_Mode */
+
+    uint32_t BaudRate;    /*!< This member configures the USART communication baud rate. */
+
+    uint8_t DataBits;     /*!< Specifies the number of data bits transmitted or received in a frame.
+                             This parameter can be a value of @ref USART_DataBits */
+
+    uint8_t StopBits;     /*!< Specifies the number of stop bits transmitted.
+                             This parameter can be a value of @ref USART_Stop_Bits */
+
+    uint8_t Parity;       /*!< Specifies the parity mode.
+                             This parameter can be a value of @ref USART_Parity
+                             @note When parity is enabled, the computed parity is inserted
+                             at the MSB position of the transmitted data (9th bit when
+                             the word length is set to 9 data bits; 8th bit when the
+                             word length is set to 8 data bits). */
+
+    uint8_t FlowCtrl;     /*!< Specifies wether the hardware flow control mode is enabled or disabled.
+                             This parameter can be a value of @ref USART_Hardware_Flow_Control */
+
+    int RxBufLen;          /*!< Specifies uart DMA Rx  buff length */
+
+} UART_InitTypeDef;
+
+/** @defgroup UART_TypeDef
+* @{
+*/
+typedef enum
+{
+    UART0 = 0,
+    UART1,
+} UART_TypeDef;
+
+#define IS_UART(UARTx) (UARTx == UART0 ||UARTx == UART1)
+/**
+ * @}
+ */
+
+/**
+  * @brief  ENABLE or DISABLE UARTx auto flow control
+  * @param  USARTx: Select the USART or the UART peripheral.
+  *         This parameter can be one of the following values:
+  *         UART0, UART1.
+  * @param  NewState:ENABLE or DISABLE auto flow control
+  * @retval None
+  */
+void UART_AutoFlowCtrlCmd(UART_TypeDef UARTx, FunctionalState NewState);
+
+/**
+  * @brief  Clear IT
+  * @param  USARTx: Select the USART or the UART peripheral.
+  *         This parameter can be one of the following values:
+  *         UART0, UART1.
+  * @retval None
+  */
+void UART_ClearIT(UART_TypeDef UARTx);
+
+/**
+  * @brief  DeInit UART
+  * @param  UARTx: Select the UART peripheral.
+  *         This parameter can be one of the following values:
+  *         UART0, UART1.
+  * @retval None
+  */
+void UART_DeInit(UART_TypeDef UARTx);
+
+/**
+  * @brief  Transmits datas via UART DMA .
+  * @param  USARTx: Select the USART or the UART peripheral.
+  *         This parameter can be one of the following values:
+  *         UART0, UART1.
+  * @param  buf: pointer to a buf that contains the data you want transmit.
+  * @param  len: the buf length
+  * @retval None
+  */
+void UART_DMASendBuf(UART_TypeDef UARTx, uint8_t *buf, int len);
+
+/**
+  * @brief  Get IT Identity
+  * @param  UARTx: Select the UART peripheral.
+  * @retval IT Identity
+  */
+uint8_t UART_GetITIdentity(UART_TypeDef UARTx);
+
+/**
+  * @brief  Initializes the USARTx peripheral according to the specified
+  *         parameters in the USART_InitStruct .
+  * @param  UARTx: Select the UART peripheral.
+  *         This parameter can be one of the following values:
+  *         UART0, UART1.
+  * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure
+  *         that contains the configuration information for the specified USART
+  *         peripheral.
+  * @retval None
+  */
+void UART_Init(UART_TypeDef UARTx, UART_InitTypeDef *UART_InitStruct);
+
+/**
+  * @brief  Judge Rx fifo full is or not.
+  * @param  UARTx: Select the UART peripheral.
+  * @retval TRUE:Rx fifo is full.
+  *         FALSE:Rx fifo is not full
+  */
+Boolean UART_IsRXFIFOFull(UART_TypeDef UARTx);
+
+/**
+  * @brief  Judge Rx fifo empty is or not.
+  * @param  UARTx: Select the UART peripheral.
+  * @retval TRUE:Rx fifo is not empty.
+  *         FALSE:Rx fifo is empty;
+  */
+Boolean UART_IsRXFIFONotEmpty(UART_TypeDef UARTx);
+
+/**
+  * @brief  Judge UART is Busy or not
+  * @param  UARTx: Select the UART peripheral.
+  * @retval None
+  */
+Boolean UART_IsUARTBusy(UART_TypeDef  UARTx);
+
+/**
+  * @brief  Config Interrupt trigger mode
+  * @param  USARTx: Select the USART or the UART peripheral.
+  *                 This parameter can be one of the following values:
+  *                 UART0, UART1.
+  * @param  UART_IT: Interrupt trigger mode ,this param will the following values,
+  *         UART_IT_TX:interrupt trigger after send data completed.
+  *         UART_IT_RX:interrupt trigger when received data.
+  * @param  NewState:
+  * @retval None
+  */
+void UART_ITConfig(UART_TypeDef UARTx, uint32_t UART_IT, FunctionalState NewState);
+
+/**
+  * @brief  Receive single data through the USARTx peripheral.
+  * @param  USARTx: Select the USART or the UART peripheral.
+  *   This parameter can be one of the following values:
+  *   UART0, UART1.
+  * @retval None
+  */
+uint8_t UART_ReceiveData(UART_TypeDef UARTx);
+
+/**
+  * @brief  Receives datas through the UART DMA.
+  * @param  USARTx: Select the USART or the UART peripheral.
+  *         This parameter can be one of the following values:
+  *         UART0, UART1.
+  * @param  buf: pointer to a buf that contains the data you want receive.
+  * @param  len: the buf length
+  * @retval None
+  */
+int UART_RecvBuf(UART_TypeDef UARTx, uint8_t *buf, int len);
+
+/**
+  * @brief T ransmits datas via UART DMA,the function will return after datas is sent.
+  * @param USARTx: Select the USART or the UART peripheral.
+  *          This parameter can be one of the following values:
+  *         UART0, UART1.
+  * @param  buf: pointer to a buf that contains the data you want transmit.
+  * @param  len: the buf length
+  * @retval None
+  */
+void UART_SendBuf(UART_TypeDef UARTx, uint8_t *buf, int len);
+
+/**
+  * @brief  UART Send One Data
+  * @param  UARTx: Select  the UART peripheral.
+  * @retval None
+  */
+void UART_SendData(UART_TypeDef UARTx, uint8_t Data);
+
+/**
+  * @brief  UART_SetITTimeout
+  * @param  USARTx: Select the USART or the UART peripheral.
+  *         This parameter can be one of the following values:
+  *         UART0, UART1.
+	*         timeout: 0x00~0xff
+  * @retval None
+  */
+void UART_SetITTimeout(UART_TypeDef UARTx, uint16_t timeout);
+
+/**
+  * @brief  Set the number of uart receive data intterupt trigger
+  * @param  UARTx: Select the UART peripheral.
+  *         This parameter can be one of the following values:
+  *         UART0, UART1.
+  * @param  Bcnt: if the number of receive datas greater than Bcnt,interrupt trigger
+  * @retval None
+  */
+void UART_SetRxITNum(UART_TypeDef UARTx, uint8_t Bcnt);
+
+/**
+  * @brief  Fills each USART_InitStruct member with its default value.
+  * @param  USART_InitStruct: pointer to a USART_InitTypeDef structure
+  *         which will be initialized.
+  * @retval None
+  */
+void UART_StructInit(UART_InitTypeDef *UART_InitStruct);
+
+/**
+  * @brief  UART_ReceiveDataLen
+  * @param  UARTx: UART0 or UART1
+  * @retval Data len
+  */
+uint16_t UART_ReceiveDataLen(UART_TypeDef UARTx);
+
+#endif /*__YC_UART_H__*/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_uart.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_uart.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_uart.c	(working copy)
@@ -0,0 +1,435 @@
+/*
+File Name    : yc_uart.c
+Author       : Yichip
+Version      : V1.0
+Date         : 2019/12/4
+Description  : UART encapsulation.
+*/
+#include "yc_uart.h"
+
+#define uart_DMA_buf_len    1024
+uint8_t uart0_DMA_buf[uart_DMA_buf_len] = {0};
+uint8_t uart1_DMA_buf[uart_DMA_buf_len] = {0};
+
+#define RX_ENABLE_BIT       0
+#define RX_ENABLE           (1 << RX_ENABLE_BIT)
+
+#define UART_DMA_ENABLE_BIT 31
+#define UART_DMA_ENABLE     (1<<UART_DMA_ENABLE_BIT)
+
+#define TX_INTR_ENABLE_BIT  31
+#define TX_INTR_ENABLE      ((uint32_t)1<< TX_INTR_ENABLE_BIT)
+
+#define Set_RxITNum_Mask    0xff00
+#define Statu_RxNum_Mask    (uint32_t)0xffff0000
+
+void UART_AutoFlowCtrlCmd(UART_TypeDef UARTx, FunctionalState NewState)
+{
+    _ASSERT(IS_UART(UARTx));
+
+    if (NewState == ENABLE)
+    {
+        switch (UARTx)
+        {
+        case UART0:
+            UART0_CTRL |= FlowCtrl_Enable;
+            break;
+        case UART1:
+            UART1_CTRL |= FlowCtrl_Enable;
+            break;
+        }
+    }
+    else
+    {
+        switch (UARTx)
+        {
+        case UART0:
+            UART0_CTRL &= (~FlowCtrl_Enable);
+            break;
+        case UART1:
+            UART1_CTRL &= (~FlowCtrl_Enable);
+            break;
+        }
+    }
+    return;
+}
+
+void UART_ClearIT(UART_TypeDef UARTx)
+{
+    uint8_t ITType = UART_GetITIdentity(UARTx);
+    UART_ITConfig(UARTx, ITType, DISABLE);
+}
+
+void UART_DeInit(UART_TypeDef  UARTx)
+{
+    _ASSERT(IS_UART(UARTx));
+
+    switch (UARTx)
+    {
+    case UART0:
+        UART0_CTRL = 0;
+        break;
+    case UART1:
+        UART1_CTRL = 0;
+        break;
+    }
+}
+
+void UART_DMASendBuf(UART_TypeDef UARTx, uint8_t *buf, int len)
+{
+    _ASSERT(IS_UART(UARTx));
+    _ASSERT(NULL != buf);
+    _ASSERT((len < 0xffff));
+
+    if (UARTx == UART0)
+    {
+        DMA_SRC_ADDR(DMACH_UART0) = (int)buf;
+        DMA_LEN(DMACH_UART0) = (DMA_LEN(DMACH_UART0) & 0xffff) | len << 16;
+        DMA_START(DMACH_UART0) = (1 << DMA_START_BIT);
+    }
+    else
+    {
+        DMA_SRC_ADDR(DMACH_UART1) = (int)buf;
+        DMA_LEN(DMACH_UART1) = (DMA_LEN(DMACH_UART1) & 0xffff) | len << 16;
+        DMA_START(DMACH_UART0) = (1 << DMA_START_BIT);
+    }
+}
+
+uint8_t UART_GetITIdentity(UART_TypeDef UARTx)
+{
+    uint8_t IT_Mode = 0;
+    switch (UARTx)
+    {
+    case UART0:
+    {
+        if (((UART0_CTRL & Set_RxITNum_Mask) > 0) && ((UART0_STATUS >> 16) > 0))
+        {
+            IT_Mode =  UART_IT_RX;
+        }
+        else
+        {
+            if ((UART0_CTRL & (uint32_t)TX_INTR_ENABLE))
+            {
+                IT_Mode =  UART_IT_TX;
+            }
+            else
+            {
+                IT_Mode =  FALSE;
+            }
+        }
+
+    }
+    break;
+
+    case UART1:
+    {
+        if (((UART1_CTRL & Set_RxITNum_Mask) > 0) && ((UART1_STATUS >> 16) > 0))
+        {
+            IT_Mode =  UART_IT_RX;
+        }
+        else
+        {
+            if (UART1_CTRL & TX_INTR_ENABLE)
+            {
+                IT_Mode =  UART_IT_TX;
+            }
+            else
+            {
+                IT_Mode =  FALSE;
+            }
+        }
+    }
+    break;
+    }
+    return IT_Mode;
+}
+
+void UART_Init(UART_TypeDef UARTx, UART_InitTypeDef *UART_InitStruct)
+{
+#define RESET_BAUD (1<<7)
+#define AUTO_BAUD  (0<<7)
+    uint32_t reg_value = 0;
+    uint32_t temp_baudrate = 0;
+
+    _ASSERT(IS_UART(UARTx));
+    _ASSERT(IS_MODE(UART_InitStruct->Mode));
+    _ASSERT(IS_BAUDRATE(UART_InitStruct->BaudRate));
+    _ASSERT(IS_PARITY(UART_InitStruct->Parity));
+    _ASSERT(IS_FlowCtrl(UART_InitStruct->FlowCtrl));
+    _ASSERT(IS_USART_STOPBITS(UART_InitStruct->StopBits));
+
+    temp_baudrate = ((48000000 / UART_InitStruct->BaudRate) << 16);
+
+    reg_value = RX_ENABLE                |
+                UART_InitStruct->Parity  | \
+                UART_InitStruct->DataBits | \
+                UART_InitStruct->StopBits | \
+                UART_InitStruct->FlowCtrl | \
+                UART_InitStruct->Mode    | \
+                RESET_BAUD               | \
+                temp_baudrate;
+
+    if (UARTx == UART0)
+    {
+        UART0_CTRL                 = 0;
+        DMA_DEST_ADDR(DMACH_UART0) = (int)uart0_DMA_buf;
+        DMA_LEN(DMACH_UART0)       = uart_DMA_buf_len;
+        DMA_CONFIG(DMACH_UART0)    = 1;
+        DMA_START(DMACH_UART0)    |= (1 << (DMA_RESET_BIT));
+        DMA_START(DMACH_UART0)    &= ~(1 << (DMA_RESET_BIT));
+        UART0_CTRL                 = 0;
+        UART0_CTRL                 = reg_value;
+    }
+    else
+    {
+        UART1_CTRL                 = 0;
+        DMA_DEST_ADDR(DMACH_UART1) = (int)uart1_DMA_buf;
+        DMA_LEN(DMACH_UART1)       = uart_DMA_buf_len;
+        DMA_CONFIG(DMACH_UART1)    = 1;
+        DMA_START(DMACH_UART1)    |= (1 << (DMA_RESET_BIT));
+        DMA_START(DMACH_UART1)    &= ~(1 << (DMA_RESET_BIT));
+        UART1_CTRL                 = 0;
+        UART1_CTRL                 = reg_value;
+    }
+    return;
+}
+
+Boolean UART_IsRXFIFOFull(UART_TypeDef UARTx)
+{
+#define BITRXFULL 1
+    _ASSERT(IS_UART(UARTx));
+
+    if (UART0 == UARTx)
+    {
+        return (Boolean)(UART0_STATUS & (1 << BITRXFULL));
+    }
+    else
+    {
+        return (Boolean)(UART1_STATUS & (1 << BITRXFULL));
+    }
+}
+
+Boolean UART_IsRXFIFONotEmpty(UART_TypeDef  UARTx)
+{
+#define BITRXEMPTY 0
+    _ASSERT(IS_UART(UARTx));
+
+    if (UART0 == UARTx)
+    {
+        return (Boolean)((UART0_STATUS >> 16) ? 1 : 0);
+    }
+    else
+    {
+        return (Boolean)((UART1_STATUS >> 16) ? 1 : 0);
+    }
+}
+
+Boolean UART_IsUARTBusy(UART_TypeDef  UARTx)
+{
+    _ASSERT(IS_UART(UARTx));
+
+    if (UART0 == UARTx)
+    {
+        return (Boolean)(!(DMA_STATUS(DMACH_UART0) & 1));
+    }
+    else
+    {
+        return (Boolean)(!(DMA_STATUS(DMACH_UART1) & 1));
+    }
+}
+
+void UART_ITConfig(UART_TypeDef UARTx, uint32_t UART_IT, FunctionalState NewState)
+{
+    _ASSERT(IS_UART(UARTx));
+    _ASSERT(IS_UART_IT(UART_IT));
+
+    switch (UARTx)
+    {
+    case UART0:
+    {
+        if (UART_IT == UART_IT_RX)
+        {
+            if (NewState)
+            {
+                UART0_CTRL |= ((ENABLE << 8));
+            }
+            else
+            {
+                UART0_CTRL &= ~Set_RxITNum_Mask;
+            }
+
+        }
+        else if (UART_IT == UART_IT_TX)
+        {
+            UART0_CTRL &= (~TX_INTR_ENABLE);
+            UART0_CTRL |= (NewState << TX_INTR_ENABLE_BIT);
+        }
+    }
+    break;
+
+    case UART1:
+    {
+        if (UART_IT == UART_IT_RX)
+        {
+            if (NewState)
+            {
+                UART1_CTRL |= ((ENABLE << 8));
+            }
+            else
+            {
+                UART1_CTRL &= ~Set_RxITNum_Mask;
+            }
+        }
+        else if (UART_IT == UART_IT_TX)
+        {
+            UART1_CTRL &= (uint32_t)~TX_INTR_ENABLE;
+            UART1_CTRL |= (NewState << TX_INTR_ENABLE_BIT);
+        }
+    }
+    break;
+    }
+}
+
+uint8_t UART_ReceiveData(UART_TypeDef UARTx)
+{
+    _ASSERT(IS_UART(UARTx));
+
+    if (UART0 == UARTx)
+    {
+        return UART0_RDATA;
+    }
+    else
+    {
+        return UART1_RDATA;
+    }
+}
+
+int UART_RecvBuf(UART_TypeDef UARTx, uint8_t *buf, int len)
+{
+    uint32_t length = 0;
+    volatile int *pstatus = NULL;
+    volatile unsigned char *pdata = NULL;
+    _ASSERT(IS_UART(UARTx));
+    _ASSERT(NULL != buf);
+
+    if (UART0 == UARTx)
+    {
+        pstatus = &UART0_STATUS;
+        pdata = &UART0_RDATA;
+    }
+    else
+    {
+        pstatus = &UART1_STATUS;
+        pdata = &UART1_RDATA;
+    }
+
+    while ((*pstatus >> 16) > 0)
+    {
+        if (length < len)
+        {
+            buf[length++] = *pdata;
+        }
+        else
+        {
+            break;
+        }
+    }
+
+    return length;
+}
+
+
+void UART_SendBuf(UART_TypeDef UARTx, uint8_t *buf, int len)
+{
+    _ASSERT(IS_UART(UARTx));
+    _ASSERT(NULL != buf);
+    _ASSERT((len < 0xffff));
+
+    if (UARTx == UART0)
+    {
+        while ((!(DMA_STATUS(DMACH_UART0) & 1)));
+        DMA_SRC_ADDR(DMACH_UART0) = (int)buf;
+        DMA_LEN(DMACH_UART0)      = (DMA_LEN(DMACH_UART0) & 0xffff) | len << 16;
+        DMA_START(DMACH_UART0)    = (1 << DMA_START_BIT);
+        
+    }
+    else
+    {
+        while ((!(DMA_STATUS(DMACH_UART1) & 1)));
+        DMA_SRC_ADDR(DMACH_UART1) = (int)buf;
+        DMA_LEN(DMACH_UART1)      = (DMA_LEN(DMACH_UART1) & 0xffff) | len << 16;
+        DMA_START(DMACH_UART1)    = (1 << DMA_START_BIT);
+        
+    }
+}
+
+void UART_SendData(UART_TypeDef UARTx, uint8_t Data)
+{
+    uint8_t buf[1] = {Data};
+
+    if (UARTx == UART0)
+    {
+        DMA_SRC_ADDR(DMACH_UART0) = (int)buf;
+        DMA_LEN(DMACH_UART0)      = (DMA_LEN(DMACH_UART0) & 0xffff) | 1 << 16;
+        DMA_START(DMACH_UART0)    = (1 << DMA_START_BIT);
+        while (!(DMA_STATUS(DMACH_UART0) & 1));
+    }
+    else
+    {
+        DMA_SRC_ADDR(DMACH_UART1) = (int)buf;
+        DMA_LEN(DMACH_UART1)      = (DMA_LEN(DMACH_UART1) & 0xffff) | 1 << 16;
+        DMA_START(DMACH_UART1)    = (1 << DMA_START_BIT);
+        while (!(DMA_STATUS(DMACH_UART1) & 1));
+    }
+}
+
+void UART_SetITTimeout(UART_TypeDef UARTx, uint16_t timeout)
+{
+    if (UART0 == UARTx)
+    {
+        UART0_INTR = timeout;
+    }
+    else
+    {
+        UART1_INTR = timeout;
+    }
+}
+
+void UART_SetRxITNum(UART_TypeDef UARTx, uint8_t Bcnt)
+{
+    _ASSERT(IS_UART(UARTx));
+
+    if (UART0 == UARTx)
+    {
+        UART0_CTRL = (UART0_CTRL & 0xffff00ff) | ((Bcnt & 0xff) << 8);
+    }
+    else
+    {
+        UART1_CTRL = (UART1_CTRL & 0xffff00ff) | ((Bcnt & 0xff) << 8);
+    }
+
+}
+
+void UART_StructInit(UART_InitTypeDef *UART_InitStruct)
+{
+    UART_InitStruct->BaudRate = 9600;
+    UART_InitStruct->DataBits = Databits_8b;
+    UART_InitStruct->FlowCtrl = FlowCtrl_None ;
+    UART_InitStruct->Mode = Mode_duplex;
+    UART_InitStruct->StopBits = StopBits_1;
+    UART_InitStruct->Parity = 0;
+}
+
+uint16_t UART_ReceiveDataLen(UART_TypeDef UARTx)
+{
+    _ASSERT(IS_UART(UARTx));
+
+    if (UART0 == UARTx)
+    {
+        return (uint16_t)(UART0_STATUS >> 16);
+    }
+    else
+    {
+        return (uint16_t)(UART1_STATUS >> 16);
+    }
+}
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_core.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_core.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_core.h	(working copy)
@@ -0,0 +1,164 @@
+/**
+  ******************************************************************************
+  * @file    usbd_cdc_core.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   header file for the usbd_cdc_core.c file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+
+#ifndef __USB_CDC_CORE_H_
+#define __USB_CDC_CORE_H_
+
+#include  "usbd_ioreq.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+  
+/** @defgroup usbd_cdc
+  * @brief This file is the Header file for USBD_cdc.c
+  * @{
+  */ 
+
+
+/** @defgroup usbd_cdc_Exported_Defines
+  * @{
+  */ 
+#define USB_CDC_CONFIG_DESC_SIZ                (67)
+#define USB_CDC_DESC_SIZ                       (67-9)
+
+#define CDC_DESCRIPTOR_TYPE                     0x21
+
+#define DEVICE_CLASS_CDC                        0x02
+#define DEVICE_SUBCLASS_CDC                     0x00
+
+
+#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
+#define USB_STRING_DESCRIPTOR_TYPE              0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05
+
+#define STANDARD_ENDPOINT_DESC_SIZE             0x09
+
+#define CDC_DATA_IN_PACKET_SIZE                CDC_DATA_MAX_PACKET_SIZE
+        
+#define CDC_DATA_OUT_PACKET_SIZE               CDC_DATA_MAX_PACKET_SIZE
+
+#define CDC_APP_RX_DATA_SIZE				   APP_RX_DATA_SIZE
+
+#define CDC_APP_TX_DATA_SIZE				   APP_TX_DATA_SIZE
+
+/*---------------------------------------------------------------------*/
+/*  CDC definitions                                                    */
+/*---------------------------------------------------------------------*/
+
+/**************************************************/
+/* CDC Requests                                   */
+/**************************************************/
+#define SEND_ENCAPSULATED_COMMAND               0x00
+#define GET_ENCAPSULATED_RESPONSE               0x01
+#define SET_COMM_FEATURE                        0x02
+#define GET_COMM_FEATURE                        0x03
+#define CLEAR_COMM_FEATURE                      0x04
+#define SET_LINE_CODING                         0x20
+#define GET_LINE_CODING                         0x21
+#define SET_CONTROL_LINE_STATE                  0x22
+#define SEND_BREAK                              0x23
+#define NO_CMD                                  0xFF
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_CORE_Exported_TypesDefinitions
+  * @{
+  */
+typedef struct _CDC_IF_PROP
+{
+  uint16_t (*pIf_Init)     (void);   
+  uint16_t (*pIf_DeInit)   (void);   
+  uint16_t (*pIf_Ctrl)     (uint32_t Cmd, uint8_t* Buf, uint32_t Len);
+  uint16_t (*pIf_DataTx)   (uint8_t* Buf, uint32_t Len);
+  uint16_t (*pIf_DataRx)   (uint8_t* Buf, uint32_t Len);
+}
+CDC_IF_Prop_TypeDef;
+/**
+  * @}
+  */ 
+struct APP_DATA_STRUCT_DEF
+{
+    /* 閫氳繃PC鎺ユ敹鏁版嵁(灏嗕細閫氳繃涓插彛鍙戝嚭鐨勬暟鎹)淇℃伅 */
+    struct {
+        uint8_t APP_Tx_Buffer[CDC_APP_TX_DATA_SIZE];     // 鎺ユ敹鏁版嵁缂撳瓨
+        volatile uint32_t APP_Tx_ptr_in;            // 缂撳瓨鎺ユ敹鏁版嵁璧峰鍋忕Щ鍦板潃
+        volatile uint32_t APP_Tx_ptr_out;           // 缂撳瓨璇诲彇鏁版嵁璧峰鍋忕Щ鍦板潃
+        volatile uint32_t Tx_counter;               // 鍙戦佺紦瀛樼瓑寰呰璇诲彇鐨勬暟鎹釜鏁
+    } tx_structure;
+    /* 閫氳繃涓插彛鎺ユ敹鏁版嵁(灏嗕細閫氳繃USB鍙戦佺粰PC鐨勬暟鎹)淇℃伅 */
+    struct{
+        uint8_t APP_Rx_Buffer[CDC_APP_RX_DATA_SIZE];    // 鎺ユ敹鏁版嵁缂撳瓨
+        volatile uint32_t APP_Rx_ptr_in;            // 缂撳瓨鎺ユ敹鏁版嵁璧峰鍋忕Щ鍦板潃
+        volatile uint32_t APP_Rx_ptr_out;           // 缂撳瓨璇诲彇鏁版嵁璧峰鍋忕Щ鍦板潃
+        volatile uint32_t Rx_counter;               // 鎺ユ敹缂撳瓨绛夊緟琚鍙栫殑鏁版嵁涓暟
+    } rx_structure;
+    uint8_t COM_config_cmp; //涓插彛鐘舵(1:涓插彛澶勪簬杩炴帴鐘舵侊紱0锛氫覆鍙ｅ浜庢柇寮鐘舵)
+} ;
+
+
+/** @defgroup USBD_CORE_Exported_Macros
+  * @{
+  */ 
+  
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_CORE_Exported_Variables
+  * @{
+  */ 
+
+extern USBD_Class_cb_TypeDef  USBD_CDC_cb;
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CORE_Exported_Functions
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+#endif  // __USB_CDC_CORE_H_
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+  
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_core.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_core.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_core.c	(working copy)
@@ -0,0 +1,894 @@
+/**
+  ******************************************************************************
+  * @file    usbd_cdc_core.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   This file provides the high layer firmware functions to manage the
+  *          following functionalities of the USB CDC Class:
+  *           - Initialization and Configuration of high and low layer
+  *           - Enumeration as CDC Device (and enumeration for each implemented memory interface)
+  *           - OUT/IN data transfer
+  *           - Command IN transfer (class requests management)
+  *           - Error management
+  *
+  *  @verbatim
+  *
+  *          ===================================================================
+  *                                CDC Class Driver Description
+  *          ===================================================================
+  *           This driver manages the "Universal Serial Bus Class Definitions for Communications Devices
+  *           Revision 1.2 November 16, 2007" and the sub-protocol specification of "Universal Serial Bus
+  *           Communications Class Subclass Specification for PSTN Devices Revision 1.2 February 9, 2007"
+  *           This driver implements the following aspects of the specification:
+  *             - Device descriptor management
+  *             - Configuration descriptor management
+  *             - Enumeration as CDC device with 2 data endpoints (IN and OUT) and 1 command endpoint (IN)
+  *             - Requests management (as described in section 6.2 in specification)
+  *             - Abstract Control Model compliant
+  *             - Union Functional collection (using 1 IN endpoint for control)
+  *             - Data interface class
+
+  *           @note
+  *             For the Abstract Control Model, this core allows only transmitting the requests to
+  *             lower layer dispatcher (ie. usbd_cdc_vcp.c/.h) which should manage each request and
+  *             perform relative actions.
+  *
+  *           These aspects may be enriched or modified for a specific user application.
+  *
+  *            This driver doesn't implement the following aspects of the specification
+  *            (but it is possible to manage these features with some modifications on this driver):
+  *             - Any class-specific aspect relative to communication classes should be managed by user application.
+  *             - All communication classes other than PSTN are not managed
+  *
+  *  @endverbatim
+  *
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_cdc_core.h"
+#include "usbd_desc.h"
+#include "usbd_req.h"
+#include "usbd_usr.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+
+/** @defgroup usbd_cdc
+  * @brief usbd core module
+  * @{
+  */
+
+/** @defgroup usbd_cdc_Private_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup usbd_cdc_Private_Defines
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup usbd_cdc_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup usbd_cdc_Private_FunctionPrototypes
+  * @{
+  */
+
+/*********************************************
+   CDC Device library callbacks
+ *********************************************/
+static uint8_t  usbd_cdc_Init        (void  *pdev, uint8_t cfgidx);
+static uint8_t  usbd_cdc_DeInit      (void  *pdev, uint8_t cfgidx);
+static uint8_t  usbd_cdc_Setup       (void  *pdev, USB_SETUP_REQ *req);
+static uint8_t  usbd_cdc_EP0_RxReady  (void *pdev);
+static uint8_t  usbd_cdc_DataIn      (void *pdev, uint8_t epnum);
+static uint8_t  usbd_cdc_DataOut     (void *pdev, uint8_t epnum);
+static uint8_t  usbd_cdc_SOF         (void *pdev);
+
+/*********************************************
+   CDC specific management functions
+ *********************************************/
+static void Handle_USBAsynchXfer  (void *pdev);
+static uint8_t  *USBD_cdc_GetCfgDesc (uint8_t speed, uint16_t *length);
+#ifdef USE_USB_OTG_HS
+static uint8_t  *USBD_cdc_GetOtherCfgDesc (uint8_t speed, uint16_t *length);
+#endif
+/**
+  * @}
+  */
+
+/** @defgroup usbd_cdc_Private_Variables
+  * @{
+  */
+extern CDC_IF_Prop_TypeDef  APP_FOPS;
+extern uint8_t USBD_DeviceDesc   [USB_SIZ_DEVICE_DESC];
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t usbd_cdc_CfgDesc  [USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END ;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t usbd_cdc_OtherCfgDesc  [USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END ;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN static uint32_t  usbd_cdc_AltSet  __ALIGN_END = 0;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t USB_Rx_Buffer   [CDC_DATA_MAX_PACKET_SIZE] __ALIGN_END ;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+#ifdef USER_SPECIFIED_DATA_SOURCE
+uint8_t *APP_Rx_Buffer = NULL;
+#else
+//__ALIGN_BEGIN uint8_t APP_Rx_Buffer   [APP_RX_DATA_SIZE] __ALIGN_END ;
+struct APP_DATA_STRUCT_DEF APP_Gdata_param;
+#endif
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t CmdBuff[CDC_CMD_PACKET_SZE] __ALIGN_END ;
+
+//volatile uint32_t APP_Rx_ptr_in  = 0;
+//volatile uint32_t APP_Rx_ptr_out = 0;
+uint32_t APP_Rx_length  = 0;
+
+uint8_t  USB_Tx_State = 0;
+
+static uint32_t cdcCmd = 0xFF;
+static uint32_t cdcLen = 0;
+
+/* CDC interface class callbacks structure */
+USBD_Class_cb_TypeDef  USBD_CDC_cb =
+{
+  usbd_cdc_Init,
+  usbd_cdc_DeInit,
+  usbd_cdc_Setup,
+  NULL,                 /* EP0_TxSent, */
+  usbd_cdc_EP0_RxReady,
+  usbd_cdc_DataIn,
+  usbd_cdc_DataOut,
+  usbd_cdc_SOF,
+  NULL,
+  NULL,
+  USBD_cdc_GetCfgDesc,
+#ifdef USE_USB_OTG_HS
+  USBD_cdc_GetOtherCfgDesc, /* use same cobfig as per FS */
+#endif /* USE_USB_OTG_HS  */
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB CDC device Configuration Descriptor */
+__ALIGN_BEGIN uint8_t usbd_cdc_CfgDesc[USB_CDC_CONFIG_DESC_SIZ]  __ALIGN_END =
+{
+  /*Configuration Descriptor*/
+  0x09,   /* bLength: Configuration Descriptor size */
+  USB_CONFIGURATION_DESCRIPTOR_TYPE,      /* bDescriptorType: Configuration */
+  USB_CDC_CONFIG_DESC_SIZ,                /* wTotalLength:no of returned bytes */
+  0x00,
+  0x02,   /* bNumInterfaces: 2 interface */
+  0x01,   /* bConfigurationValue: Configuration value */
+  0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
+  0xC0,   /* bmAttributes: self powered */
+  0x32,   /* MaxPower 0 mA */
+
+  /*---------------------------------------------------------------------------*/
+
+  /*Interface Descriptor */
+  0x09,   /* bLength: Interface Descriptor size */
+  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
+  /* Interface descriptor type */
+  0x00,   /* bInterfaceNumber: Number of Interface */
+  0x00,   /* bAlternateSetting: Alternate setting */
+  0x01,   /* bNumEndpoints: One endpoints used */
+  0x02,   /* bInterfaceClass: Communication Interface Class */
+  0x02,   /* bInterfaceSubClass: Abstract Control Model */
+  0x01,   /* bInterfaceProtocol: Common AT commands */
+  0x00,   /* iInterface: */
+
+  /*Header Functional Descriptor*/
+  0x05,   /* bLength: Endpoint Descriptor size */
+  0x24,   /* bDescriptorType: CS_INTERFACE */
+  0x00,   /* bDescriptorSubtype: Header Func Desc */
+  0x10,   /* bcdCDC: spec release number */
+  0x01,
+
+  /*Call Management Functional Descriptor*/
+  0x05,   /* bFunctionLength */
+  0x24,   /* bDescriptorType: CS_INTERFACE */
+  0x01,   /* bDescriptorSubtype: Call Management Func Desc */
+  0x00,   /* bmCapabilities: D0+D1 */
+  0x00,   /* bDataInterface: 0 */
+//  0x01,   /* bDataInterface: 1 */
+
+  /*ACM Functional Descriptor*/
+  0x04,   /* bFunctionLength */
+  0x24,   /* bDescriptorType: CS_INTERFACE */
+  0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
+  0x02,   /* bmCapabilities */
+
+  /*Union Functional Descriptor*/
+  0x05,   /* bFunctionLength */
+  0x24,   /* bDescriptorType: CS_INTERFACE */
+  0x06,   /* bDescriptorSubtype: Union func desc */
+  0x00,   /* bMasterInterface: Communication class interface */
+  0x01,   /* bSlaveInterface0: Data Class Interface */
+
+  /*Endpoint 2 Descriptor*/
+  0x07,                           /* bLength: Endpoint Descriptor size */
+  USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
+  CDC_CMD_EP,                     /* bEndpointAddress */
+  0x03,                           /* bmAttributes: Interrupt */
+  LOBYTE(CDC_CMD_PACKET_SZE),     /* wMaxPacketSize: */
+  HIBYTE(CDC_CMD_PACKET_SZE),
+#ifdef USE_USB_OTG_HS
+  0x10,                           /* bInterval: */
+#else
+  0x01,                           /* bInterval: */
+#endif /* USE_USB_OTG_HS */
+
+  /*---------------------------------------------------------------------------*/
+
+  /*Data class interface descriptor*/
+  0x09,   /* bLength: Endpoint Descriptor size */
+  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
+  0x01,   /* bInterfaceNumber: Number of Interface */
+  0x00,   /* bAlternateSetting: Alternate setting */
+  0x02,   /* bNumEndpoints: Two endpoints used */
+  0x0A,   /* bInterfaceClass: CDC */
+  0x00,   /* bInterfaceSubClass: */
+  0x00,   /* bInterfaceProtocol: */
+  0x00,   /* iInterface: */
+
+  /*Endpoint OUT Descriptor*/
+  0x07,   /* bLength: Endpoint Descriptor size */
+  USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType: Endpoint */
+  CDC_OUT_EP,                        /* bEndpointAddress */
+  0x02,                              /* bmAttributes: Bulk */
+  LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
+  HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
+  0x00,                              /* bInterval: ignore for Bulk transfer */
+
+  /*Endpoint IN Descriptor*/
+  0x07,   /* bLength: Endpoint Descriptor size */
+  USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType: Endpoint */
+  CDC_IN_EP,                         /* bEndpointAddress */
+  0x02,                              /* bmAttributes: Bulk */
+  LOBYTE(CDC_DATA_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
+  HIBYTE(CDC_DATA_MAX_PACKET_SIZE),
+  0x00                               /* bInterval: ignore for Bulk transfer */
+} ;
+
+#ifdef USE_USB_OTG_HS
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t usbd_cdc_OtherCfgDesc[USB_CDC_CONFIG_DESC_SIZ]  __ALIGN_END =
+{
+  0x09,   /* bLength: Configuation Descriptor size */
+  USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION,
+  USB_CDC_CONFIG_DESC_SIZ,
+  0x00,
+  0x02,   /* bNumInterfaces: 2 interfaces */
+  0x01,   /* bConfigurationValue: */
+  0x04,   /* iConfiguration: */
+  0xC0,   /* bmAttributes: */
+  0x32,   /* MaxPower 100 mA */
+
+  /*Interface Descriptor */
+  0x09,   /* bLength: Interface Descriptor size */
+  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
+  /* Interface descriptor type */
+  0x00,   /* bInterfaceNumber: Number of Interface */
+  0x00,   /* bAlternateSetting: Alternate setting */
+  0x01,   /* bNumEndpoints: One endpoints used */
+  0x02,   /* bInterfaceClass: Communication Interface Class */
+  0x02,   /* bInterfaceSubClass: Abstract Control Model */
+  0x01,   /* bInterfaceProtocol: Common AT commands */
+  0x00,   /* iInterface: */
+
+  /*Header Functional Descriptor*/
+  0x05,   /* bLength: Endpoint Descriptor size */
+  0x24,   /* bDescriptorType: CS_INTERFACE */
+  0x00,   /* bDescriptorSubtype: Header Func Desc */
+  0x10,   /* bcdCDC: spec release number */
+  0x01,
+
+  /*Call Management Functional Descriptor*/
+  0x05,   /* bFunctionLength */
+  0x24,   /* bDescriptorType: CS_INTERFACE */
+  0x01,   /* bDescriptorSubtype: Call Management Func Desc */
+  0x00,   /* bmCapabilities: D0+D1 */
+  0x01,   /* bDataInterface: 1 */
+
+  /*ACM Functional Descriptor*/
+  0x04,   /* bFunctionLength */
+  0x24,   /* bDescriptorType: CS_INTERFACE */
+  0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
+  0x02,   /* bmCapabilities */
+
+  /*Union Functional Descriptor*/
+  0x05,   /* bFunctionLength */
+  0x24,   /* bDescriptorType: CS_INTERFACE */
+  0x06,   /* bDescriptorSubtype: Union func desc */
+  0x00,   /* bMasterInterface: Communication class interface */
+  0x01,   /* bSlaveInterface0: Data Class Interface */
+
+  /*Endpoint 2 Descriptor*/
+  0x07,                           /* bLength: Endpoint Descriptor size */
+  USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
+  CDC_CMD_EP,                     /* bEndpointAddress */
+  0x03,                           /* bmAttributes: Interrupt */
+  LOBYTE(CDC_CMD_PACKET_SZE),     /* wMaxPacketSize: */
+  HIBYTE(CDC_CMD_PACKET_SZE),
+  0xFF,                           /* bInterval: */
+
+  /*---------------------------------------------------------------------------*/
+
+  /*Data class interface descriptor*/
+  0x09,   /* bLength: Endpoint Descriptor size */
+  USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
+  0x01,   /* bInterfaceNumber: Number of Interface */
+  0x00,   /* bAlternateSetting: Alternate setting */
+  0x02,   /* bNumEndpoints: Two endpoints used */
+  0x0A,   /* bInterfaceClass: CDC */
+  0x00,   /* bInterfaceSubClass: */
+  0x00,   /* bInterfaceProtocol: */
+  0x00,   /* iInterface: */
+
+  /*Endpoint OUT Descriptor*/
+  0x07,   /* bLength: Endpoint Descriptor size */
+  USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType: Endpoint */
+  CDC_OUT_EP,                        /* bEndpointAddress */
+  0x02,                              /* bmAttributes: Bulk */
+  0x40,                              /* wMaxPacketSize: */
+  0x00,
+  0x00,                              /* bInterval: ignore for Bulk transfer */
+
+  /*Endpoint IN Descriptor*/
+  0x07,   /* bLength: Endpoint Descriptor size */
+  USB_ENDPOINT_DESCRIPTOR_TYPE,     /* bDescriptorType: Endpoint */
+  CDC_IN_EP,                        /* bEndpointAddress */
+  0x02,                             /* bmAttributes: Bulk */
+  0x40,                             /* wMaxPacketSize: */
+  0x00,
+  0x00                              /* bInterval */
+};
+#endif /* USE_USB_OTG_HS  */
+
+/**
+  * @}
+  */
+
+/** @defgroup usbd_cdc_Private_Functions
+  * @{
+  */
+
+/**
+  * @brief  usbd_cdc_Init
+  *         Initilaize the CDC interface
+  * @param  pdev: device instance
+  * @param  cfgidx: Configuration index
+  * @retval status
+  */
+static uint8_t  usbd_cdc_Init (void  *pdev,
+                               uint8_t cfgidx)
+{
+  uint8_t *pbuf;
+
+  /* Open EP IN */
+  DCD_EP_Open(pdev,
+              CDC_IN_EP,
+              CDC_DATA_IN_PACKET_SIZE,
+              USB_OTG_EP_BULK);
+
+  /* Open EP OUT */
+  DCD_EP_Open(pdev,
+              CDC_OUT_EP,
+              CDC_DATA_OUT_PACKET_SIZE,
+              USB_OTG_EP_BULK);
+
+  /* Open Command IN EP */
+  DCD_EP_Open(pdev,
+              CDC_CMD_EP,
+              CDC_CMD_PACKET_SZE,
+              USB_OTG_EP_INT);
+
+  pbuf = (uint8_t *)USBD_DeviceDesc;
+  pbuf[4] = DEVICE_CLASS_CDC;
+  pbuf[5] = DEVICE_SUBCLASS_CDC;
+
+  /* Initialize the Interface physical components */
+  APP_FOPS.pIf_Init();
+
+  /* Prepare Out endpoint to receive next packet */
+  DCD_EP_PrepareRx(pdev,
+                   CDC_OUT_EP,
+                   (uint8_t*)(USB_Rx_Buffer),
+                   CDC_DATA_OUT_PACKET_SIZE);
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_cdc_Init
+  *         DeInitialize the CDC layer
+  * @param  pdev: device instance
+  * @param  cfgidx: Configuration index
+  * @retval status
+  */
+static uint8_t  usbd_cdc_DeInit (void  *pdev,
+                                 uint8_t cfgidx)
+{
+  /* Open EP IN */
+  DCD_EP_Close(pdev,
+              CDC_IN_EP);
+
+  /* Open EP OUT */
+  DCD_EP_Close(pdev,
+              CDC_OUT_EP);
+
+  /* Open Command IN EP */
+  DCD_EP_Close(pdev,
+              CDC_CMD_EP);
+
+  /* Restore default state of the Interface physical components */
+  APP_FOPS.pIf_DeInit();
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_cdc_Setup
+  *         Handle the CDC specific requests
+  * @param  pdev: instance
+  * @param  req: usb requests
+  * @retval status
+  */
+static uint8_t  usbd_cdc_Setup (void  *pdev,
+                                USB_SETUP_REQ *req)
+{
+  uint16_t len=USB_CDC_DESC_SIZ;
+  uint8_t  *pbuf=usbd_cdc_CfgDesc + 9;
+
+  switch (req->bmRequest & USB_REQ_TYPE_MASK)
+  {
+    /* CDC Class Requests -------------------------------*/
+  case USB_REQ_TYPE_CLASS :
+      /* Check if the request is a data setup packet */
+      if (req->wLength)
+      {
+        /* Check if the request is Device-to-Host */
+        if (req->bmRequest & 0x80)
+        {
+          /* Get the data to be sent to Host from interface layer */
+          APP_FOPS.pIf_Ctrl(req->bRequest, CmdBuff, req->wLength);
+
+          /* Send the data to the host */
+          USBD_CtlSendData (pdev,
+                            CmdBuff,
+                            req->wLength);
+        }
+        else /* Host-to-Device requeset */
+        {
+          /* Set the value of the current command to be processed */
+          cdcCmd = req->bRequest;
+          cdcLen = req->wLength;
+
+          /* Prepare the reception of the buffer over EP0
+          Next step: the received data will be managed in usbd_cdc_EP0_TxSent()
+          function. */
+     //     MyPrintf("cdc class \n\r");
+          delay_ms(1);
+          while(USB_OTG_READ_REG8(((USB_OTG_CORE_HANDLE*)pdev)->regs.LENREGS[0])<cdcLen);
+          USBD_CtlPrepareRx (pdev,
+                             CmdBuff,
+                             req->wLength);
+          APP_FOPS.pIf_Ctrl(req->bRequest, CmdBuff, req->wLength);
+          if(req->wLength != 0)
+          {
+          	USBD_CtlSendStatus(pdev);
+          }
+        }
+      }
+      else /* No Data request */
+      {
+            /* Transfer the command to the interface layer */
+            APP_FOPS.pIf_Ctrl(req->bRequest, NULL, 0);
+      }
+
+      return USBD_OK;
+
+    default:
+      USBD_CtlError (pdev, req);
+      return USBD_FAIL;
+
+
+
+    /* Standard Requests -------------------------------*/
+  case USB_REQ_TYPE_STANDARD:
+    switch (req->bRequest)
+    {
+    case USB_REQ_GET_DESCRIPTOR:
+      if( (req->wValue >> 8) == CDC_DESCRIPTOR_TYPE)
+      {
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+        pbuf = usbd_cdc_Desc;
+#else
+        pbuf = usbd_cdc_CfgDesc + 9 + (9 * USBD_ITF_MAX_NUM);
+#endif
+        len = MIN(USB_CDC_DESC_SIZ , req->wLength);
+      }
+
+      USBD_CtlSendData (pdev,
+                        pbuf,
+                        len);
+      break;
+
+    case USB_REQ_GET_INTERFACE :
+      USBD_CtlSendData (pdev,
+                        (uint8_t *)&usbd_cdc_AltSet,
+                        1);
+      break;
+
+    case USB_REQ_SET_INTERFACE :
+      if ((uint8_t)(req->wValue) < USBD_ITF_MAX_NUM)
+      {
+        usbd_cdc_AltSet = (uint8_t)(req->wValue);
+      }
+      else
+      {
+        /* Call the error management function (command will be nacked */
+        USBD_CtlError (pdev, req);
+      }
+      break;
+    }
+  }
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_cdc_EP0_RxReady
+  *         Data received on control endpoint
+  * @param  pdev: device device instance
+  * @retval status
+  */
+static uint8_t  usbd_cdc_EP0_RxReady (void  *pdev)
+{
+  if (cdcCmd != NO_CMD)
+  {
+    /* Process the data */
+    APP_FOPS.pIf_Ctrl(cdcCmd, CmdBuff, cdcLen);
+
+    /* Reset the command variable to default value */
+    cdcCmd = NO_CMD;
+  }
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_audio_DataIn
+  *         Data sent on non-control IN endpoint
+  * @param  pdev: device instance
+  * @param  epnum: endpoint number
+  * @retval status
+  */
+static uint8_t  usbd_cdc_DataIn (void *pdev, uint8_t epnum)
+{
+  uint16_t USB_Tx_ptr;
+  uint16_t USB_Tx_length = 0;
+
+  if (USB_Tx_State == 1)
+  {
+    if (APP_Rx_length == 0)
+    {
+      USB_Tx_State = 0;
+    }
+    else
+    {
+        if (APP_Rx_length > CDC_DATA_IN_PACKET_SIZE)
+        {
+            USB_Tx_ptr = APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+            if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out + CDC_DATA_IN_PACKET_SIZE >= APP_RX_DATA_SIZE)
+            {
+                USB_Tx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+                APP_Rx_length -= USB_Tx_length;
+                APP_Gdata_param.rx_structure.Rx_counter -= USB_Tx_length;
+            }else{
+                USB_Tx_length = CDC_DATA_IN_PACKET_SIZE;
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_out += CDC_DATA_IN_PACKET_SIZE;
+                APP_Rx_length -= CDC_DATA_IN_PACKET_SIZE;
+                APP_Gdata_param.rx_structure.Rx_counter -= CDC_DATA_IN_PACKET_SIZE;
+            }
+        }
+        else
+        {
+            USB_Tx_ptr = APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+            if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out + APP_Rx_length >= APP_RX_DATA_SIZE)
+            {
+                USB_Tx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+                APP_Rx_length -= USB_Tx_length;
+                APP_Gdata_param.rx_structure.Rx_counter -= USB_Tx_length;
+            }else{
+                USB_Tx_length = APP_Rx_length;
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_out += APP_Rx_length;
+				APP_Gdata_param.rx_structure.Rx_counter -= APP_Rx_length;
+                APP_Rx_length = 0;
+            }
+        }
+	}
+	/* Prepare the available data buffer to be sent on IN endpoint */
+	DCD_EP_Tx(pdev,
+			  CDC_IN_EP,
+			  (uint8_t*)&APP_Gdata_param.rx_structure.APP_Rx_Buffer[USB_Tx_ptr],
+			  USB_Tx_length);
+  }
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_cdc_DataOut
+  *         Data received on non-control Out endpoint
+  * @param  pdev: device instance
+  * @param  epnum: endpoint number
+  * @retval status
+  */
+#define wAIT_TIMES  20  //wAIT_TIMES*50us
+extern uint8_t usbFlowCtrl;
+static uint8_t  usbd_cdc_DataOut (void *pdev, uint8_t epnum)
+{
+  uint16_t USB_Rx_Cnt;
+
+  /* Get the received data buffer and update the counter */
+
+  /* USB data will be immediately processed, this allow next USB traffic being
+     NAKed till the end of the application Xfer */
+  /* Prepare Out endpoint to receive next packet */
+  DCD_EP_PrepareRx(pdev,
+                   CDC_OUT_EP,
+                   (uint8_t*)(USB_Rx_Buffer),
+                   CDC_DATA_OUT_PACKET_SIZE);
+    USB_Rx_Cnt = ((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].xfer_count;
+    APP_FOPS.pIf_DataRx(USB_Rx_Buffer, USB_Rx_Cnt);
+    if(USB_Rx_Cnt==((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].maxpacket && usbFlowCtrl==0)
+    {
+        int wait_times=0;
+        while(wait_times<wAIT_TIMES)
+        {
+            if(USB_OTG_READ_REG8(((USB_OTG_CORE_HANDLE*)pdev)->regs.LENREGS[epnum])>=((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].maxpacket)
+            {
+                break;
+            }
+            delay_us(50);
+            wait_times++;
+        }
+        usbd_cdc_DataOut(pdev,epnum);
+    }
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_audio_SOF
+  *         Start Of Frame event management
+  * @param  pdev: instance
+  * @param  epnum: endpoint number
+  * @retval status
+  */
+static uint8_t  usbd_cdc_SOF (void *pdev)
+{
+  static uint32_t FrameCount = 0;
+
+  if (FrameCount++ == CDC_IN_FRAME_INTERVAL)
+  {
+    /* Reset the frame counter */
+    FrameCount = 0;
+
+    /* Check the data to be sent through IN pipe */
+    Handle_USBAsynchXfer(pdev);
+  }
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  Handle_USBAsynchXfer
+  *         Send data to USB
+  * @param  pdev: instance
+  * @retval None
+  */
+static void Handle_USBAsynchXfer (void *pdev)
+{
+  uint16_t USB_Tx_ptr;
+  uint16_t USB_Tx_length;
+
+  if(USB_Tx_State != 1)
+  {
+    if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out == CDC_APP_RX_DATA_SIZE)
+    {
+      APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+    }
+	#if 1
+	if (!APP_Gdata_param.rx_structure.Rx_counter)
+	{
+		USB_Tx_State = 0;
+        return;
+	}
+	APP_Rx_length = APP_Gdata_param.rx_structure.Rx_counter;
+	#else
+    /* */
+//    if (!APP_Gdata_param.rx_structure.Rx_counter)
+	if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out == \
+		APP_Gdata_param.rx_structure.APP_Rx_ptr_in)
+    {
+        USB_Tx_State = 0;
+        return;
+    }
+//    APP_Rx_length = APP_Gdata_param.rx_structure.Rx_counter;
+//	APP_Rx_length = APP_Gdata_param.rx_structure.APP_Rx_ptr_in - \
+//					APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+//    if(APP_Gdata_param.rx_structure.APP_Rx_ptr_out == APP_Gdata_param.rx_structure.APP_Rx_ptr_in)
+//    {
+//      USB_Tx_State = 0;
+//      return;
+//    }
+
+    if(APP_Gdata_param.rx_structure.APP_Rx_ptr_out > APP_Gdata_param.rx_structure.APP_Rx_ptr_in) /* rollback */
+    {
+      APP_Rx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+    }
+    else
+    {
+      APP_Rx_length = APP_Gdata_param.rx_structure.APP_Rx_ptr_in - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+    }
+	#endif
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+     APP_Rx_length &= ~0x03;
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+    if (APP_Rx_length > CDC_DATA_IN_PACKET_SIZE)
+    {
+        USB_Tx_ptr = APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+        if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out + CDC_DATA_IN_PACKET_SIZE >= CDC_APP_RX_DATA_SIZE)
+        {
+            USB_Tx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+            APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+            APP_Rx_length -= USB_Tx_length;
+            APP_Gdata_param.rx_structure.Rx_counter = APP_Rx_length;
+        }else{
+            USB_Tx_length = CDC_DATA_IN_PACKET_SIZE;
+            APP_Gdata_param.rx_structure.APP_Rx_ptr_out += CDC_DATA_IN_PACKET_SIZE;
+            APP_Rx_length -= CDC_DATA_IN_PACKET_SIZE;
+            APP_Gdata_param.rx_structure.Rx_counter = APP_Rx_length;
+        }
+    }
+    else
+    {
+        USB_Tx_ptr = APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+        if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out + APP_Rx_length >= CDC_APP_RX_DATA_SIZE)
+        {
+            USB_Tx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+            APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+            APP_Rx_length -= USB_Tx_length;
+            APP_Gdata_param.rx_structure.Rx_counter = APP_Rx_length;
+        }else{
+            USB_Tx_length = APP_Rx_length;
+            APP_Gdata_param.rx_structure.APP_Rx_ptr_out += APP_Rx_length;
+            APP_Rx_length = 0;
+            APP_Gdata_param.rx_structure.Rx_counter = APP_Rx_length;
+        }
+    }
+    USB_Tx_State = 1;
+
+    DCD_EP_Tx (pdev,
+               CDC_IN_EP,
+               (uint8_t*)&APP_Gdata_param.rx_structure.APP_Rx_Buffer[USB_Tx_ptr],
+               USB_Tx_length);
+  }
+
+}
+
+/**
+  * @brief  USBD_cdc_GetCfgDesc
+  *         Return configuration descriptor
+  * @param  speed : current device speed
+  * @param  length : pointer data length
+  * @retval pointer to descriptor buffer
+  */
+static uint8_t  *USBD_cdc_GetCfgDesc (uint8_t speed, uint16_t *length)
+{
+  *length = sizeof (usbd_cdc_CfgDesc);
+  return usbd_cdc_CfgDesc;
+}
+
+/**
+  * @brief  USBD_cdc_GetCfgDesc
+  *         Return configuration descriptor
+  * @param  speed : current device speed
+  * @param  length : pointer data length
+  * @retval pointer to descriptor buffer
+  */
+#ifdef USE_USB_OTG_HS
+static uint8_t  *USBD_cdc_GetOtherCfgDesc (uint8_t speed, uint16_t *length)
+{
+  *length = sizeof (usbd_cdc_OtherCfgDesc);
+  return usbd_cdc_OtherCfgDesc;
+}
+#endif
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_if_template.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_if_template.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_if_template.h	(working copy)
@@ -0,0 +1,46 @@
+/**
+  ******************************************************************************
+  * @file    usbd_cdc_if_template.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   Header for dfu_mal.c file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CDC_IF_TEMPLATE_H
+#define __USBD_CDC_IF_TEMPLATE_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_conf.h"
+#include "usbd_conf.h"
+#include "usbd_cdc_core.h"
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported constants --------------------------------------------------------*/
+
+extern CDC_IF_Prop_TypeDef  TEMPLATE_fops;
+
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+#endif /* __USBD_CDC_IF_TEMPLATE_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_if_template.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_if_template.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/CDC/usbd_cdc_if_template.c	(working copy)
@@ -0,0 +1,207 @@
+/**
+  ******************************************************************************
+  * @file    usbd_cdc_if_template.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   Generic media access Layer.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED 
+#pragma     data_alignment = 4 
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_cdc_if_template.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* These are external variables imported from CDC core to be used for IN 
+   transfer management. */
+extern uint8_t  APP_Rx_Buffer []; /* Write CDC received data in this buffer.
+                                     These data will be sent over USB IN endpoint
+                                     in the CDC core functions. */
+extern uint32_t APP_Rx_ptr_in;    /* Increment this pointer or roll it back to
+                                     start address when writing received data
+                                     in the buffer APP_Rx_Buffer. */
+
+/* Private function prototypes -----------------------------------------------*/
+static uint16_t TEMPLATE_Init     (void);
+static uint16_t TEMPLATE_DeInit   (void);
+static uint16_t TEMPLATE_Ctrl     (uint32_t Cmd, uint8_t* Buf, uint32_t Len);
+static uint16_t TEMPLATE_DataTx   (uint8_t* Buf, uint32_t Len);
+static uint16_t TEMPLATE_DataRx (uint8_t* Buf, uint32_t Len);
+
+CDC_IF_Prop_TypeDef TEMPLATE_fops = 
+{
+  TEMPLATE_Init,
+  TEMPLATE_DeInit,
+  TEMPLATE_Ctrl,
+  TEMPLATE_DataTx,
+  TEMPLATE_DataRx
+};
+
+/* Private functions ---------------------------------------------------------*/
+
+/**
+  * @brief  TEMPLATE_Init
+  *         Initializes the CDC media low layer
+  * @param  None
+  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+  */
+static uint16_t TEMPLATE_Init(void)
+{
+  /*
+     Add your initialization code here 
+  */  
+  return USBD_OK;
+}
+
+/**
+  * @brief  TEMPLATE_DeInit
+  *         DeInitializes the CDC media low layer
+  * @param  None
+  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+  */
+static uint16_t TEMPLATE_DeInit(void)
+{
+  /*
+     Add your deinitialization code here 
+  */  
+  return USBD_OK;
+}
+
+
+/**
+  * @brief  TEMPLATE_Ctrl
+  *         Manage the CDC class requests
+  * @param  Cmd: Command code            
+  * @param  Buf: Buffer containing command data (request parameters)
+  * @param  Len: Number of data to be sent (in bytes)
+  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+  */
+static uint16_t TEMPLATE_Ctrl (uint32_t Cmd, uint8_t* Buf, uint32_t Len)
+{ 
+  switch (Cmd)
+  {
+  case SEND_ENCAPSULATED_COMMAND:
+    /* Add your code here */
+    break;
+
+  case GET_ENCAPSULATED_RESPONSE:
+    /* Add your code here */
+    break;
+
+  case SET_COMM_FEATURE:
+    /* Add your code here */
+    break;
+
+  case GET_COMM_FEATURE:
+    /* Add your code here */
+    break;
+
+  case CLEAR_COMM_FEATURE:
+    /* Add your code here */
+    break;
+
+  case SET_LINE_CODING:
+    /* Add your code here */
+    break;
+
+  case GET_LINE_CODING:
+    /* Add your code here */
+    break;
+
+  case SET_CONTROL_LINE_STATE:
+    /* Add your code here */
+    break;
+
+  case SEND_BREAK:
+     /* Add your code here */
+    break;    
+    
+  default:
+    break;
+  }
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  TEMPLATE_DataTx
+  *         CDC received data to be send over USB IN endpoint are managed in 
+  *         this function.
+  * @param  Buf: Buffer of data to be sent
+  * @param  Len: Number of data to be sent (in bytes)
+  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+  */
+static uint16_t TEMPLATE_DataTx (uint8_t* Buf, uint32_t Len)
+{
+
+  /* Get the data to be sent */
+  for (uint32_t i = 0; i < Len; i++)
+  {
+    /* APP_Rx_Buffer[APP_Rx_ptr_in] = XXX_ReceiveData(XXX); */
+  }
+
+  /* Increment the in pointer */
+  APP_Rx_ptr_in++;
+  
+  /* To avoid buffer overflow */
+  if(APP_Rx_ptr_in == APP_RX_DATA_SIZE)
+  {
+    APP_Rx_ptr_in = 0;
+  }  
+  
+  return USBD_OK;
+}
+
+/**
+  * @brief  TEMPLATE_DataRx
+  *         Data received over USB OUT endpoint are sent over CDC interface 
+  *         through this function.
+  *           
+  *         @note
+  *         This function will block any OUT packet reception on USB endpoint 
+  *         untill exiting this function. If you exit this function before transfer
+  *         is complete on CDC interface (ie. using DMA controller) it will result 
+  *         in receiving more data while previous ones are still not sent.
+  *                 
+  * @param  Buf: Buffer of data to be received
+  * @param  Len: Number of data received (in bytes)
+  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+  */
+static uint16_t TEMPLATE_DataRx (uint8_t* Buf, uint32_t Len)
+{
+  uint32_t i;
+  
+  /* Send the received buffer */
+  for (i = 0; i < Len; i++)
+  {
+    /* XXXX_SendData(XXXX, *(Buf + i) ); */
+  } 
+ 
+  return USBD_OK;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/HID/usbd_hid_core.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/HID/usbd_hid_core.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/HID/usbd_hid_core.h	(working copy)
@@ -0,0 +1,123 @@
+/**
+  ******************************************************************************
+  * @file    usbd_hid_core.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   header file for the usbd_hid_core.c file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+
+#ifndef __USB_HID_CORE_H_
+#define __USB_HID_CORE_H_
+
+#include  "usbd_ioreq.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+  
+/** @defgroup USBD_HID
+  * @brief This file is the Header file for USBD_msc.c
+  * @{
+  */ 
+
+
+/** @defgroup USBD_HID_Exported_Defines
+  * @{
+  */ 
+
+ #define HID_EPIN_SIZE          HID_EP_MAX_PACKET 
+#define HID_EPOUT_SIZE        HID_EP_MAX_PACKET  
+#define HID_EP0_BUFF_SIZ            64
+#define HID_MAX_PACKET_SIZE  64
+extern uint8_t HidOut_Data_Buff[HID_MAX_PACKET_SIZE];
+#define USB_HID_CONFIG_DESC_SIZ       41//41//34	//DT??
+#define USB_HID_DESC_SIZ              9
+#define HID_MOUSE_REPORT_DESC_SIZE    33//27//33//74	//DT??
+//#define HID_MOUSE_REPORT_DESC_SIZE    52
+
+#define HID_DESCRIPTOR_TYPE           0x21
+#define HID_REPORT_DESC               0x22
+
+
+#define HID_REQ_SET_PROTOCOL          0x0B
+#define HID_REQ_GET_PROTOCOL          0x03
+
+#define HID_REQ_SET_IDLE              0x0A
+#define HID_REQ_GET_IDLE              0x02
+
+#define HID_REQ_SET_REPORT            0x09
+#define HID_REQ_GET_REPORT            0x01
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_CORE_Exported_TypesDefinitions
+  * @{
+  */
+
+
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USBD_CORE_Exported_Macros
+  * @{
+  */ 
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_CORE_Exported_Variables
+  * @{
+  */ 
+
+extern USBD_Class_cb_TypeDef  USBD_HID_cb;
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CORE_Exported_Functions
+  * @{
+  */ 
+uint8_t USBD_HID_SendReport (USB_OTG_CORE_HANDLE  *pdev, 
+                                 uint8_t *report,
+                                 uint16_t len);
+/**
+  * @}
+  */ 
+
+#endif  // __USB_HID_CORE_H_
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+  
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/HID/usbd_hid_core.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/HID/usbd_hid_core.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/HID/usbd_hid_core.c	(working copy)
@@ -0,0 +1,714 @@
+/**
+  ******************************************************************************
+  * @file    usbd_hid_core.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   This file provides the HID core functions.
+  *
+  * @verbatim
+  *      
+  *          ===================================================================      
+  *                                HID Class  Description
+  *          =================================================================== 
+  *           This module manages the HID class V1.11 following the "Device Class Definition
+  *           for Human Interface Devices (HID) Version 1.11 Jun 27, 2001".
+  *           This driver implements the following aspects of the specification:
+  *             - The Boot Interface Subclass
+  *             - The Mouse protocol
+  *             - Usage Page : Generic Desktop
+  *             - Usage : Joystick)
+  *             - Collection : Application 
+  *      
+  * @note     In HS mode and when the DMA is used, all variables and data structures
+  *           dealing with the DMA during the transaction process should be 32-bit aligned.
+  *           
+  *      
+  *  @endverbatim
+  *
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_hid_core.h"
+#include "usbd_desc.h"
+#include "usbd_req.h"
+
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+
+/** @defgroup USBD_HID 
+  * @brief usbd core module
+  * @{
+  */ 
+
+/** @defgroup USBD_HID_Private_TypesDefinitions
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_HID_Private_Defines
+  * @{
+  */ 
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_HID_Private_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+
+
+/** @defgroup USBD_HID_Private_FunctionPrototypes
+  * @{
+  */
+
+
+static uint8_t  USBD_HID_Init (void  *pdev, 
+                               uint8_t cfgidx);
+
+static uint8_t  USBD_HID_DeInit (void  *pdev, 
+                                 uint8_t cfgidx);
+
+static uint8_t  USBD_HID_Setup (void  *pdev, 
+                                USB_SETUP_REQ *req);
+
+static uint8_t  *USBD_HID_GetCfgDesc (uint8_t speed, uint16_t *length);
+
+static uint8_t  USBD_HID_DataIn (void  *pdev, uint8_t epnum);
+uint8_t USBD_HID_DataOut(void *pdev,uint8_t epnum);
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_HID_Private_Variables
+  * @{
+  */ 
+
+USBD_Class_cb_TypeDef  USBD_HID_cb = 
+{
+  USBD_HID_Init,
+  USBD_HID_DeInit,
+  USBD_HID_Setup,
+  NULL, /*EP0_TxSent*/  
+  NULL, /*EP0_RxReady*/
+  USBD_HID_DataIn, /*DataIn*/
+  USBD_HID_DataOut, /*DataOut*/
+  NULL, /*SOF */
+  NULL,
+  NULL,      
+  USBD_HID_GetCfgDesc,
+#ifdef USB_OTG_HS_CORE  
+  USBD_HID_GetCfgDesc, /* use same config as per FS */
+#endif  
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */        
+__ALIGN_BEGIN static uint32_t  USBD_HID_AltSet  __ALIGN_END = 0;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */      
+__ALIGN_BEGIN static uint32_t  USBD_HID_Protocol  __ALIGN_END = 0;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */  
+__ALIGN_BEGIN static uint32_t  USBD_HID_IdleState __ALIGN_END = 0;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ 
+/* USB HID device Configuration Descriptor */
+__ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_END =
+{
+	#if 0
+  0x09, /* bLength: Configuration Descriptor size */
+  USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
+  USB_HID_CONFIG_DESC_SIZ,
+  /* wTotalLength: Bytes returned */
+  0x00,
+  0x01,         /*bNumInterfaces: 1 interface*/
+  0x01,         /*bConfigurationValue: Configuration value*/
+  0x00,         /*iConfiguration: Index of string descriptor describing
+  the configuration*/
+  0xE0,         /*bmAttributes: bus powered and Support Remote Wake-up */
+  0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/
+  
+  /************** Descriptor of Joystick Mouse interface ****************/
+  /* 09 */
+  0x09,         /*bLength: Interface Descriptor size*/
+  USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/
+  0x00,         /*bInterfaceNumber: Number of Interface*/
+  0x00,         /*bAlternateSetting: Alternate setting*/
+  0x01,         /*bNumEndpoints*/
+  0x03,         /*bInterfaceClass: HID*/
+  0x01,         /*bInterfaceSubClass : 1=BOOT, 0=no boot*/
+  0x02,         /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/
+  0,            /*iInterface: Index of string descriptor*/
+  /******************** Descriptor of Joystick Mouse HID ********************/
+  /* 18 */
+  0x09,         /*bLength: HID Descriptor size*/
+  HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
+  0x11,         /*bcdHID: HID Class Spec release number*/
+  0x01,
+  0x00,         /*bCountryCode: Hardware target country*/
+  0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/
+  0x22,         /*bDescriptorType*/
+  HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
+  0x00,
+  /******************** Descriptor of Mouse endpoint ********************/
+  /* 27 */
+  0x07,          /*bLength: Endpoint Descriptor size*/
+  USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
+  
+  HID_IN_EP,     /*bEndpointAddress: Endpoint Address (IN)*/
+  0x03,          /*bmAttributes: Interrupt endpoint*/
+  HID_IN_PACKET, /*wMaxPacketSize: 4 Byte max */
+  0x00,
+  0x0A,          /*bInterval: Polling Interval (10 ms)*/
+  /* 34 */
+	#else 
+	#if 0
+	  0x09, /* bLength: Configuration Descriptor size */
+  USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
+  USB_HID_CONFIG_DESC_SIZ,
+  /* wTotalLength: Bytes returned */
+  0x00,
+  0x01,         /*bNumInterfaces: 1 interface*/
+  0x01,         /*bConfigurationValue: Configuration value*/
+  0x00,         /*iConfiguration: Index of string descriptor describing
+  the configuration*/
+  0xE0,         /*bmAttributes: bus powered and Support Remote Wake-up */
+  0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/
+  
+  /************** Descriptor of Joystick Mouse interface ****************/
+  /* 09 */
+  0x09,         /*bLength: Interface Descriptor size*/
+  USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/
+  0x00,         /*bInterfaceNumber: Number of Interface*/
+  0x00,         /*bAlternateSetting: Alternate setting*/
+  0x02,         /*bNumEndpoints*/     //USB鎺ュ彛鎵浣跨敤鐨勬帴鍙ｆ绘暟
+  0x03,         /*bInterfaceClass: HID*/
+  0x00,         /*bInterfaceSubClass : 1=BOOT, 0=no boot*/  //鎺ュ彛鎵閲囩敤鐨勮澶囩被鍗忚
+  0x00,         /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/    //鎺ュ彛鎵閲囩敤鐨勮澶囩被鍗忚
+  0,            /*iInterface: Index of string descriptor*/
+  /******************** Descriptor of Joystick Mouse HID ********************/
+  /* 18 */
+  0x09,         /*bLength: HID Descriptor size*/
+  HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
+  0x11,         /*bcdHID: HID Class Spec release number*/
+  0x01,
+  0x00,         /*bCountryCode: Hardware target country*/
+  0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/
+  0x22,         /*bDescriptorType*/
+  HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
+  0x00,
+  /******************** Descriptor of Mouse endpoint ********************/
+  /* 27 */
+  0x07,          /*bLength: Endpoint Descriptor size*/
+  USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/
+  
+  HID_IN_EP,     /*bEndpointAddress: Endpoint Address (IN)*/
+  0x03,          /*bmAttributes: Interrupt endpoint*/
+  HID_IN_PACKET, /*wMaxPacketSize: 4 Byte max */
+  0x00,
+  0x01,          /*bInterval: Polling Interval (10 ms)*/
+  /* 34 */
+
+	/*************************Descriptor of Custom HID endpoints*******************************/
+	0x07, 
+	USB_ENDPOINT_DESCRIPTOR_TYPE,
+	HID_OUT_EP,
+	0x03,
+	HID_OUT_PACKET,
+	0x00,
+	0x01,
+	#endif
+	
+ /* 41 */
+	#if 1
+	0x09, 					//Length = 9
+	USB_CONFIGURATION_DESCRIPTOR_TYPE, 		//DescriptorType = Configuration
+	USB_HID_CONFIG_DESC_SIZ, 0x00, 				//TotalLength
+	0x01, 					//NumInterfaces = 1
+	0x01, 					//ConfigurationValue = 1
+	0x00, 					//iConfiguration string index(Non)
+	0x80, 					//SelfPower = 0; RemoteWakeup = 0
+	0x32,					//MaxPower = 100mA
+
+    //interface desc
+    0x09, 					//Length = 9
+	USB_INTERFACE_DESCRIPTOR_TYPE, 			//DescriptorType = Interface
+	0x00, 					//InerfaceNumber = 0
+	0x00, 					//AlternateSetting = 0
+	0x02, 					//NumEndpoint = 2(bulk-IN, bulk-OUT)
+	0x03,					//Class = Human Interface Device
+	0x00,					//InterfaceSubClass = 0x00(No subclass) 		
+	0x00,					//InterfaceProtocol = 0x00(None) 
+	0x00,					//iInterface string index(Non)
+
+	//HID descriptor
+	0x09,0x21,			//Length, Type
+	0x11,0x01,		    //HID Class Specification compliance ?0x10 0x01
+	0x00,				//Country localization (=none)
+	0x01,				//number of descriptors to follow
+	0x22,				//And it's a Report descriptor
+	HID_MOUSE_REPORT_DESC_SIZE,0x00,			//Report descriptor length 
+
+    // Endpoint desc
+    0x07, 					//Length = 7
+	USB_ENDPOINT_DESCRIPTOR_TYPE, 			//DescriptorType = Endpoint		
+	HID_IN_EP, 					//In; Ep1
+	0x03, 					//Endpoint type = interrupt
+	HID_IN_PACKET, 0x00, 			//MaxPacketSize = 64->16
+	0x01, //0x0a,					//Poll
+    
+    0x07, 					//Length = 7
+	USB_ENDPOINT_DESCRIPTOR_TYPE, 			//DescriptorType = Endpoint		
+	HID_OUT_EP, 					//Out; Ep2
+	0x03, 					//Endpoint type = interrupt
+	HID_OUT_PACKET, 0x00, 			//MaxPacketSize = 64->16
+	0x01, //0x0a,	 DT??USB锟教拷锟斤拷y锟斤拷锟斤拷??锟斤拷?锟斤拷锟斤拷锟斤拷yusb?????锟斤拷?锟斤拷 @ 2018.08.28
+	#endif
+	#endif
+} ;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+/* USB HID device Configuration Descriptor */
+__ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ] __ALIGN_END=
+{
+	#if 0
+  /* 18 */
+  0x09,         /*bLength: HID Descriptor size*/
+  HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
+  0x11,         /*bcdHID: HID Class Spec release number*/
+  0x01,
+  0x00,         /*bCountryCode: Hardware target country*/
+  0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/
+  0x22,         /*bDescriptorType*/
+  HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
+  0x00,
+  #endif
+  #if 1
+  	0x09,0x21,			//Length, Type
+	0x11,0x01,		    //HID Class Specification compliance ?0x10 0x01
+	0x00,				//Country localization (=none)
+	0x01,				//number of descriptors to follow
+	0x22,				//And it's a Report descriptor
+	HID_MOUSE_REPORT_DESC_SIZE,0x00,			//Report descriptor length 
+	#endif
+};
+#endif
+
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */  
+//__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
+//{
+//    0x05, 0x01, 		// Usage Page,(Generic Desktop),
+//	0x09, 0x02, 		// Usage(Mouse),
+//	0xa1, 0x01, 		// Collectiton(Application),
+//	0x09, 0x01, 		// Usage(Pointer),
+//	0xa1, 0x00, 		// Collection(Physical),
+//	0x05, 0x09,			// Usage Page(Buttons), 
+//	0x19, 0x01, 		// Usage Minimum(01),
+//	0x29, 0x03,			// Usage Maximum(03),
+//	0x15, 0x00, 		// Logical Minimum(0),
+//	0x25, 0x01, 		// Logical Maximum(1),
+//	0x95, 0x03, 		// Report Count(3),
+//	0x75, 0x01, 		// Report Size(1),
+//	0x81, 0x02, 		// Input(Data, Variable, Absolute),	;3 button bits
+//	0x95, 0x01, 		// Report Count(1),
+//	0x75, 0x05, 		// Report Size(5),
+//	0x81, 0x03, 		// Input(Cnst, Var, Abs),
+//	0x05, 0x01, 		// Usage Page(Generic Desktop),
+//	0x09, 0x30, 		// Usage(X),
+//	0x09, 0x31, 		// Usage(Y),
+//	0x09, 0x38,			// Usage(Wheel),
+//	0x15, 0x81, 		// Logical Minimum(-127),
+//	0x25, 0x7f, 		// Logical Maximum(127),
+//	0x75, 0x08, 		// Report Size(8),
+//	0x95, 0x03, 		// Report Count(3),
+//	0x81, 0x06, 		// Input(Data, Variable, Relative),	;2 position bytes(X & Y)
+//	0xc0, 				// End Collection,
+//	0xc0				// End Collection
+//};
+__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
+{
+	#if 0
+  0x05,   0x01,
+  0x09,   0x02,
+  0xA1,   0x01,
+  0x09,   0x01,
+  
+  0xA1,   0x00,
+  0x05,   0x09,
+  0x19,   0x01,
+  0x29,   0x03,
+  
+  0x15,   0x00,
+  0x25,   0x01,
+  0x95,   0x03,
+  0x75,   0x01,
+  
+  0x81,   0x02,
+  0x95,   0x01,
+  0x75,   0x05,
+  0x81,   0x01,
+  
+  0x05,   0x01,
+  0x09,   0x30,
+  0x09,   0x31,
+  0x09,   0x38,
+  
+  0x15,   0x81,
+  0x25,   0x7F,
+  0x75,   0x08,
+  0x95,   0x03,
+  
+  0x81,   0x06,
+  0xC0,   0x09,
+  0x3c,   0x05,
+  0xff,   0x09,
+  
+  0x01,   0x15,
+  0x00,   0x25,
+  0x01,   0x75,
+  0x01,   0x95,
+  
+  0x02,   0xb1,
+  0x22,   0x75,
+  0x06,   0x95,
+  0x01,   0xb1,
+  
+  0x01,   0xc0
+  #else
+	#if 0
+   0x05U, 0x01U, /* Usage Page (Vendor defined)*/
+    0x09U, 0x00U, /* Usage (Vendor defined) */
+    0xA1U, 0x01U, /* Collection (Application) */
+
+    0x15U, 0x00U, /* logical Minimum (-128) */
+    0x25U, 0xffU, /* logical Maximum (127) */
+0x19U, 0x01U,
+    0x29U, 0x08U, /* Report Size (8U) */
+    0x95U, 0x08U, /* Report Count (8U) */
+    0x75U, 0x08U, /* Input(Data, Variable, Absolute) */
+
+    0x81U, 0x02U, /* Usage (Vendor defined) */
+    0x19U, 0x01U, /* logical Minimum (-128) */
+    0x29U, 0x08U, /* logical Maximum (127) */
+    0x91U, 0x02U, /* Report Size (8U) */
+   
+    0xC0U,        /* end collection */
+    #endif
+	#if 0
+	0x05, 0x01, //Usage Page: 0x06, 0x00, 0xFF->05 01
+	0x09, 0x00, //Usage: Undefined 0x01->0x00
+	0xa1, 0x01, //Collection 0x00->0x01
+	0x15, 0x00, //Logical Minimum
+	0x25, 0xFF,//Logical Maximum 0x26, 0xFF, 0x00->0x25 0xff
+	0x19, 0x01, //Usage Minimum 
+	0x29, 0x08, //Usage Maximum 0x01->0x08
+	0x95, 0x08, //Report Count
+	0x75, 0x08, //Report Size 
+	0x81, 0x02, //Input (Data, Variable, Absolute,Buffered Bytes) 0x00->0x02
+	0x19, 0x01, //Usage Minimum
+	0x29, 0x08, //Usage Maximum 0x01->0x08
+	0x91, 0x02, //Feature (Data, Variable, Absolute,Buffered Bytes)0xb1, 0x00->0x91, 0x02
+	0xc0		//End Collection
+
+    #endif
+	#if 1
+    0x05U, 0x81U, /* Usage Page (Vendor defined)*/
+    0x09U, 0x82U, /* Usage (Vendor defined) */
+    0xA1U, 0x01U, /* Collection (Application) */
+    0x09U, 0x83U, /* Usage (Vendor defined) */
+
+    0x09U, 0x84U, /* Usage (Vendor defined) */
+    0x15U, 0x80U, /* logical Minimum (-128) */
+    0x25U, 0x7FU, /* logical Maximum (127) */
+    0x75U, 0x08U, /* Report Size (8U) */
+    0x95U, HID_IN_PACKET, /* Report Count (8U) */
+    0x81U, 0x02U, /* Input(Data, Variable, Absolute) */
+
+    0x09U, 0x84U, /* Usage (Vendor defined) */
+    0x15U, 0x80U, /* logical Minimum (-128) */
+    0x25U, 0x7FU, /* logical Maximum (127) */
+    0x75U, 0x08U, /* Report Size (8U) */
+    0x95U, HID_OUT_PACKET, /* Report Count (8U) */
+    0x91U, 0x02U, /* Input(Data, Variable, Absolute) */
+    0xC0U,        /* end collection */
+    #endif
+  
+  #endif
+}; 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_HID_Private_Functions
+  * @{
+  */ 
+
+/**
+  * @brief  USBD_HID_Init
+  *         Initialize the HID interface
+  * @param  pdev: device instance
+  * @param  cfgidx: Configuration index
+  * @retval status
+  */
+static uint8_t  USBD_HID_Init (void  *pdev, 
+                               uint8_t cfgidx)
+{
+  
+  /* Open EP IN */
+  DCD_EP_Open(pdev,
+              HID_IN_EP,
+              HID_IN_PACKET,
+              USB_OTG_EP_INT);
+  
+  /* Open EP OUT */
+  DCD_EP_Open(pdev,
+              HID_OUT_EP,
+              HID_OUT_PACKET,
+              USB_OTG_EP_INT);
+  
+  return USBD_OK;
+}
+
+/**
+  * @brief  USBD_HID_Init
+  *         DeInitialize the HID layer
+  * @param  pdev: device instance
+  * @param  cfgidx: Configuration index
+  * @retval status
+  */
+static uint8_t  USBD_HID_DeInit (void  *pdev, 
+                                 uint8_t cfgidx)
+{
+  /* Close HID EPs */
+  DCD_EP_Close (pdev , HID_IN_EP);
+  DCD_EP_Close (pdev , HID_OUT_EP);
+  
+  
+  return USBD_OK;
+}
+
+/**
+  * @brief  USBD_HID_Setup
+  *         Handle the HID specific requests
+  * @param  pdev: instance
+  * @param  req: usb requests
+  * @retval status
+  */
+
+ extern USB_OTG_CORE_HANDLE  USB_OTG_dev;
+static uint8_t  USBD_HID_Setup (void  *pdev, 
+                                USB_SETUP_REQ *req)
+{
+  uint16_t len = 0;
+  uint8_t  *pbuf = NULL;
+  
+  switch (req->bmRequest & USB_REQ_TYPE_MASK)
+  {
+  case USB_REQ_TYPE_CLASS :  
+    switch (req->bRequest)
+    {
+      
+      
+    case HID_REQ_SET_PROTOCOL:
+      USBD_HID_Protocol = (uint8_t)(req->wValue);
+      break;
+      
+    case HID_REQ_GET_PROTOCOL:
+      USBD_CtlSendData (pdev, 
+                        (uint8_t *)&USBD_HID_Protocol,
+                        1);    
+      break;
+      
+    case HID_REQ_SET_IDLE:
+      USBD_HID_IdleState = (uint8_t)(req->wValue >> 8);
+       USB_OTG_dev.dev.device_status_new = USB_OTG_END;
+      break;
+      
+    case HID_REQ_GET_IDLE:
+      USBD_CtlSendData (pdev, 
+                        (uint8_t *)&USBD_HID_IdleState,
+                        1);        
+      break;      
+      
+    default:
+      USBD_CtlError (pdev, req);
+      return USBD_FAIL; 
+    }
+    break;
+    
+  case USB_REQ_TYPE_STANDARD:
+    switch (req->bRequest)
+    {
+    case USB_REQ_GET_DESCRIPTOR: 
+      if( req->wValue >> 8 == HID_REPORT_DESC)
+      {
+        len = MIN(HID_MOUSE_REPORT_DESC_SIZE , req->wLength);
+        pbuf = HID_MOUSE_ReportDesc;
+      }
+      else if( req->wValue >> 8 == HID_DESCRIPTOR_TYPE)
+      {
+        
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+        pbuf = USBD_HID_Desc;   
+#else
+        pbuf = USBD_HID_CfgDesc + 0x12;
+#endif 
+        len = MIN(USB_HID_DESC_SIZ , req->wLength);
+      }
+      
+      USBD_CtlSendData (pdev, 
+                        pbuf,
+                        len);
+      
+      break;
+      
+    case USB_REQ_GET_INTERFACE :
+      USBD_CtlSendData (pdev,
+                        (uint8_t *)&USBD_HID_AltSet,
+                        1);
+      break;
+      
+    case USB_REQ_SET_INTERFACE :
+      USBD_HID_AltSet = (uint8_t)(req->wValue);
+      break;
+    }
+  }
+  return USBD_OK;
+}
+
+/**
+  * @brief  USBD_HID_SendReport 
+  *         Send HID Report
+  * @param  pdev: device instance
+  * @param  buff: pointer to report
+  * @retval status
+  */
+uint8_t USBD_HID_SendReport     (USB_OTG_CORE_HANDLE  *pdev, 
+                                 uint8_t *report,
+                                 uint16_t len)
+{
+  if (pdev->dev.device_status == USB_OTG_CONFIGURED )
+  {
+    DCD_EP_Tx (pdev, HID_IN_EP, report, len);
+  }
+  return USBD_OK;
+}
+
+/**
+  * @brief  USBD_HID_GetCfgDesc 
+  *         return configuration descriptor
+  * @param  speed : current device speed
+  * @param  length : pointer data length
+  * @retval pointer to descriptor buffer
+  */
+static uint8_t  *USBD_HID_GetCfgDesc (uint8_t speed, uint16_t *length)
+{
+  *length = sizeof (USBD_HID_CfgDesc);
+  return USBD_HID_CfgDesc;
+}
+
+/**
+  * @brief  USBD_HID_DataIn
+  *         handle data IN Stage
+  * @param  pdev: device instance
+  * @param  epnum: endpoint index
+  * @retval status
+  */
+static uint8_t  USBD_HID_DataIn (void  *pdev, 
+                              uint8_t epnum)
+{
+  
+  /* Ensure that the FIFO is empty before a new transfer, this condition could 
+  be caused by  a new transfer before the end of the previous transfer */
+  
+ // DCD_EP_Flush(pdev, HID_IN_EP);
+  return USBD_OK;
+}
+
+/**
+  * @}
+  */ 
+
+uint8_t receive_data_flag;
+uint8_t HidOut_Data_Buff[HID_MAX_PACKET_SIZE];
+
+uint8_t USBD_HID_DataOut(void *pdev,
+                                 uint8_t epnum)
+{
+
+			//MyPrintf("333333\n");
+	
+    DCD_EP_PrepareRx(pdev,
+                                     HID_OUT_EP,
+                                     (uint8_t *)&HidOut_Data_Buff[0],
+                                     HID_EPOUT_SIZE);
+     receive_data_flag =1;
+    return USBD_OK;
+}
+
+
+/**
+  * @}
+  */ 
+
+
+/**
+  * @}
+  */ 
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/PRINTER/usbd_printer_core.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/PRINTER/usbd_printer_core.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/PRINTER/usbd_printer_core.h	(working copy)
@@ -0,0 +1,164 @@
+/**
+  ******************************************************************************
+  * @file    usbd_printer_core.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   header file for the usbd_printer_core.c file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+
+#ifndef __USB_PRINTER_CORE_H_
+#define __USB_PRINTER_CORE_H_
+
+#include  "usbd_ioreq.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+/** @defgroup usbd_printer
+  * @brief This file is the Header file for USBD_printer.c
+  * @{
+  */
+
+
+/** @defgroup usbd_printer_Exported_Defines
+  * @{
+  */
+#define USB_PRINTER_CONFIG_DESC_SIZ                (32)
+#define USB_PRINTER_DESC_SIZ                       (USB_PRINTER_CONFIG_DESC_SIZ-9)
+
+#define PRINTER_DESCRIPTOR_TYPE                     0x21
+
+#define DEVICE_CLASS_PRINTER                        0x02
+#define DEVICE_SUBCLASS_PRINTER                     0x00
+
+
+#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
+#define USB_STRING_DESCRIPTOR_TYPE              0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05
+
+#define STANDARD_ENDPOINT_DESC_SIZE             0x09
+
+#define PRINTER_DATA_IN_PACKET_SIZE                PRINTER_DATA_MAX_PACKET_SIZE
+
+#define PRINTER_DATA_OUT_PACKET_SIZE               PRINTER_DATA_MAX_PACKET_SIZE
+
+#define PRINTER_APP_RX_DATA_SIZE				   APP_RX_DATA_SIZE
+
+#define PRINTER_APP_TX_DATA_SIZE				   APP_TX_DATA_SIZE
+
+/*---------------------------------------------------------------------*/
+/*  PRINTER definitions                                                    */
+/*---------------------------------------------------------------------*/
+
+/**************************************************/
+/* PRINTER Requests                                   */
+/**************************************************/
+#define SEND_ENCAPSULATED_COMMAND               0x00
+#define GET_ENCAPSULATED_RESPONSE               0x01
+#define SET_COMM_FEATURE                        0x02
+#define GET_COMM_FEATURE                        0x03
+#define CLEAR_COMM_FEATURE                      0x04
+#define SET_LINE_CODING                         0x20
+#define GET_LINE_CODING                         0x21
+#define SET_CONTROL_LINE_STATE                  0x22
+#define SEND_BREAK                              0x23
+#define NO_CMD                                  0xFF
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_CORE_Exported_TypesDefinitions
+  * @{
+  */
+typedef struct _PRINTER_IF_PROP
+{
+  uint16_t (*pIf_Init)     (void);
+  uint16_t (*pIf_DeInit)   (void);
+  uint16_t (*pIf_Ctrl)     (uint32_t Cmd, uint8_t* Buf, uint32_t Len);
+  uint16_t (*pIf_DataTx)   (uint8_t* Buf, uint32_t Len);
+  uint16_t (*pIf_DataRx)   (uint8_t* Buf, uint32_t Len);
+}
+PRINTER_IF_Prop_TypeDef;
+/**
+  * @}
+  */
+struct APP_DATA_STRUCT_DEF
+{
+    /* 閫氳繃PC鎺ユ敹鏁版嵁(灏嗕細閫氳繃涓插彛鍙戝嚭鐨勬暟鎹)淇℃伅 */
+    struct {
+        uint8_t APP_Tx_Buffer[PRINTER_APP_TX_DATA_SIZE];     // 鎺ユ敹鏁版嵁缂撳瓨
+        volatile uint32_t APP_Tx_ptr_in;            // 缂撳瓨鎺ユ敹鏁版嵁璧峰鍋忕Щ鍦板潃
+        volatile uint32_t APP_Tx_ptr_out;           // 缂撳瓨璇诲彇鏁版嵁璧峰鍋忕Щ鍦板潃
+        volatile uint32_t Tx_counter;               // 鍙戦佺紦瀛樼瓑寰呰璇诲彇鐨勬暟鎹釜鏁
+    } tx_structure;
+    /* 閫氳繃涓插彛鎺ユ敹鏁版嵁(灏嗕細閫氳繃USB鍙戦佺粰PC鐨勬暟鎹)淇℃伅 */
+    struct{
+        uint8_t APP_Rx_Buffer[PRINTER_APP_RX_DATA_SIZE];    // 鎺ユ敹鏁版嵁缂撳瓨
+        volatile uint32_t APP_Rx_ptr_in;            // 缂撳瓨鎺ユ敹鏁版嵁璧峰鍋忕Щ鍦板潃
+        volatile uint32_t APP_Rx_ptr_out;           // 缂撳瓨璇诲彇鏁版嵁璧峰鍋忕Щ鍦板潃
+        volatile uint32_t Rx_counter;               // 鎺ユ敹缂撳瓨绛夊緟琚鍙栫殑鏁版嵁涓暟
+    } rx_structure;
+    uint8_t COM_config_cmp; //涓插彛鐘舵(1:涓插彛澶勪簬杩炴帴鐘舵侊紱0锛氫覆鍙ｅ浜庢柇寮鐘舵)
+} ;
+
+
+/** @defgroup USBD_CORE_Exported_Macros
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+/** @defgroup USBD_CORE_Exported_Variables
+  * @{
+  */
+
+extern USBD_Class_cb_TypeDef  USBD_PRINTER_cb;
+/**
+  * @}
+  */
+
+/** @defgroup USB_CORE_Exported_Functions
+  * @{
+  */
+/**
+  * @}
+  */
+
+#endif  // __USB_PRINTER_CORE_H_
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/PRINTER/usbd_printer_core.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/PRINTER/usbd_printer_core.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/PRINTER/usbd_printer_core.c	(working copy)
@@ -0,0 +1,765 @@
+/**
+  ******************************************************************************
+  * @file    usbd_printer_core.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   This file provides the high layer firmware functions to manage the
+  *          following functionalities of the USB PRINTER Class:
+  *           - Initialization and Configuration of high and low layer
+  *           - Enumeration as PRINTER Device (and enumeration for each implemented memory interface)
+  *           - OUT/IN data transfer
+  *           - Command IN transfer (class requests management)
+  *           - Error management
+  *
+  *  @verbatim
+  *
+  *          ===================================================================
+  *                                PRINTER Class Driver Description
+  *          ===================================================================
+  *           This driver manages the "Universal Serial Bus Class Definitions for Communications Devices
+  *           Revision 1.2 November 16, 2007" and the sub-protocol specification of "Universal Serial Bus
+  *           Communications Class Subclass Specification for PSTN Devices Revision 1.2 February 9, 2007"
+  *           This driver implements the following aspects of the specification:
+  *             - Device descriptor management
+  *             - Configuration descriptor management
+  *             - Enumeration as PRINTER device with 2 data endpoints (IN and OUT) and 1 command endpoint (IN)
+  *             - Requests management (as described in section 6.2 in specification)
+  *             - Abstract Control Model compliant
+  *             - Union Functional collection (using 1 IN endpoint for control)
+  *             - Data interface class
+
+  *           @note
+  *             For the Abstract Control Model, this core allows only transmitting the requests to
+  *             lower layer dispatcher (ie. usbd_printer_vcp.c/.h) which should manage each request and
+  *             perform relative actions.
+  *
+  *           These aspects may be enriched or modified for a specific user application.
+  *
+  *            This driver doesn't implement the following aspects of the specification
+  *            (but it is possible to manage these features with some modifications on this driver):
+  *             - Any class-specific aspect relative to communication classes should be managed by user application.
+  *             - All communication classes other than PSTN are not managed
+  *
+  *  @endverbatim
+  *
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_printer_core.h"
+#include "usbd_desc.h"
+#include "usbd_req.h"
+#include "usbd_usr.h"
+#include "yc_timer.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+
+/** @defgroup usbd_printer
+  * @brief usbd core module
+  * @{
+  */
+
+/** @defgroup usbd_printer_Private_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup usbd_printer_Private_Defines
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup usbd_printer_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup usbd_printer_Private_FunctionPrototypes
+  * @{
+  */
+
+/*********************************************
+   PRINTER Device library callbacks
+ *********************************************/
+static uint8_t  usbd_printer_Init        (void  *pdev, uint8_t cfgidx);
+static uint8_t  usbd_printer_DeInit      (void  *pdev, uint8_t cfgidx);
+static uint8_t  usbd_printer_Setup       (void  *pdev, USB_SETUP_REQ *req);
+static uint8_t  usbd_printer_EP0_RxReady  (void *pdev);
+static uint8_t  usbd_printer_DataIn      (void *pdev, uint8_t epnum);
+static uint8_t  usbd_printer_DataOut     (void *pdev, uint8_t epnum);
+static uint8_t  usbd_printer_SOF         (void *pdev);
+
+/*********************************************
+   PRINTER specific management functions
+ *********************************************/
+static void Handle_USBAsynchXfer  (void *pdev);
+static uint8_t  *USBD_printer_GetCfgDesc (uint8_t speed, uint16_t *length);
+#ifdef USE_USB_OTG_HS
+static uint8_t  *USBD_printer_GetOtherCfgDesc (uint8_t speed, uint16_t *length);
+#endif
+/**
+  * @}
+  */
+
+/** @defgroup usbd_printer_Private_Variables
+  * @{
+  */
+extern PRINTER_IF_Prop_TypeDef  APP_FOPS;
+extern uint8_t USBD_DeviceDesc   [USB_SIZ_DEVICE_DESC];
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t usbd_printer_CfgDesc  [USB_PRINTER_CONFIG_DESC_SIZ] __ALIGN_END ;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t usbd_printer_OtherCfgDesc  [USB_PRINTER_CONFIG_DESC_SIZ] __ALIGN_END ;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN static uint32_t  usbd_printer_AltSet  __ALIGN_END = 0;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t USB_Rx_Buffer   [PRINTER_DATA_MAX_PACKET_SIZE] __ALIGN_END ;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+#ifdef USER_SPECIFIED_DATA_SOURCE
+uint8_t *APP_Rx_Buffer = NULL;
+#else
+//__ALIGN_BEGIN uint8_t APP_Rx_Buffer   [APP_RX_DATA_SIZE] __ALIGN_END ;
+struct APP_DATA_STRUCT_DEF APP_Gdata_param;
+#endif
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t CmdBuff[PRINTER_CMD_PACKET_SZE] __ALIGN_END ;
+
+//volatile uint32_t APP_Rx_ptr_in  = 0;
+//volatile uint32_t APP_Rx_ptr_out = 0;
+uint32_t APP_Rx_length  = 0;
+
+uint8_t  USB_Tx_State = 0;
+
+static uint32_t printerCmd = 0xFF;
+static uint32_t printerLen = 0;
+
+/* PRINTER interface class callbacks structure */
+USBD_Class_cb_TypeDef  USBD_PRINTER_cb =
+{
+  usbd_printer_Init,
+  usbd_printer_DeInit,
+  usbd_printer_Setup,
+  NULL,                 /* EP0_TxSent, */
+  usbd_printer_EP0_RxReady,
+  usbd_printer_DataIn,
+  usbd_printer_DataOut,
+  usbd_printer_SOF,
+  NULL,
+  NULL,
+  USBD_printer_GetCfgDesc,
+#ifdef USE_USB_OTG_HS
+  USBD_printer_GetOtherCfgDesc, /* use same cobfig as per FS */
+#endif /* USE_USB_OTG_HS  */
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB PRINTER device Configuration Descriptor */
+__ALIGN_BEGIN uint8_t usbd_printer_CfgDesc[USB_PRINTER_CONFIG_DESC_SIZ]  __ALIGN_END =
+{
+    /*Configuation Descriptor*/
+    0x09,   /* bLength: Configuation Descriptor size */
+    USB_CONFIGURATION_DESCRIPTOR_TYPE,      /* bDescriptorType: Configuration */
+    USB_PRINTER_CONFIG_DESC_SIZ,       /* wTotalLength:no of returned bytes */
+    0x00,
+
+    0x01,   /* bNumInterfaces: 1 interface */
+
+    0x01,   /* bConfigurationValue: Configuration value */
+    0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
+    0xc0,   /* bmAttributes: self powered */
+    0x32,   /* MaxPower 0 mA */
+    /*Interface Descriptor*/
+    0x09,   /* bLength: Interface Descriptor size */
+    USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
+    /* Interface descriptor type */
+    0x00,   /* bInterfaceNumber: Number of Interface */
+    0x00,   /* bAlternateSetting: Alternate setting */
+    0x02,   /* bNumEndpoints: One endpoints used */
+
+    0x07,  //basic class for printer
+    0x01,  //printer calll device
+
+    0x02, // bi-directional interface.
+    0x04,   /* iInterface: */
+
+    /*Endpoint 3 Descriptor*/
+    0x07,   /* bLength: Endpoint Descriptor size */
+    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
+    PRINTER_OUT_EP,   /* bEndpointAddress: (OUT3) */
+    0x02,   /* bmAttributes: Bulk */
+    0x40,             /* wMaxPacketSize: */
+    0x00,
+    0x00,   /* bInterval: ignore for Bulk transfer */
+    /*Endpoint 1 Descriptor*/
+    0x07,   /* bLength: Endpoint Descriptor size */
+    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
+    PRINTER_IN_EP,   /* bEndpointAddress: (IN1) */
+    0x02,   /* bmAttributes: Bulk */
+    0x40,             /* wMaxPacketSize: */
+    0x00,
+    0x00    /* bInterval */
+};
+
+/* USB PRINTER device id Descriptor */
+__ALIGN_BEGIN uint8_t print_id_descriptor[] __ALIGN_END =
+{
+0x00,
+0x00,
+'M','A','N','U','F','A','C','T','U','R','E','R',':','Y','I','C','H','I','P',';',
+'C','O','M','M','A','N','D',' ','S','E','T',':','E','S','C','/','P','O','S',';',
+'M','O','D','E','L',':','-','P','r','i','n','t','e','r',' ','d','e','m','o',';',
+'C','O','M','M','E','N','T',':','t','e','s','t',' ','P','r','i','n','t','e','r',';',
+'A','C','T','I','V','E',' ','C','O','M','M','A','N','D',':','E','S','C','/','P','O','S',';'
+};
+
+#ifdef USE_USB_OTG_HS
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t usbd_printer_OtherCfgDesc[USB_PRINTER_CONFIG_DESC_SIZ]  __ALIGN_END =
+{
+};
+#endif /* USE_USB_OTG_HS  */
+
+/**
+  * @}
+  */
+
+/** @defgroup usbd_printer_Private_Functions
+  * @{
+  */
+
+/**
+  * @brief  usbd_printer_Init
+  *         Initilaize the PRINTER interface
+  * @param  pdev: device instance
+  * @param  cfgidx: Configuration index
+  * @retval status
+  */
+static uint8_t  usbd_printer_Init (void  *pdev,
+                               uint8_t cfgidx)
+{
+//  uint8_t *pbuf;
+
+  /* Open EP IN */
+  DCD_EP_Open(pdev,
+              PRINTER_IN_EP,
+              PRINTER_DATA_IN_PACKET_SIZE,
+              USB_OTG_EP_BULK);
+
+  /* Open EP OUT */
+  DCD_EP_Open(pdev,
+              PRINTER_OUT_EP,
+              PRINTER_DATA_OUT_PACKET_SIZE,
+              USB_OTG_EP_BULK);
+
+  /* Open Command IN EP */
+  DCD_EP_Open(pdev,
+              PRINTER_CMD_EP,
+              PRINTER_CMD_PACKET_SZE,
+              USB_OTG_EP_INT);
+
+//  pbuf = (uint8_t *)USBD_DeviceDesc;
+//  pbuf[4] = DEVICE_CLASS_PRINTER;
+//  pbuf[5] = DEVICE_SUBCLASS_PRINTER;
+
+  /* Initialize the Interface physical components */
+  APP_FOPS.pIf_Init();
+
+  /* Prepare Out endpoint to receive next packet */
+  DCD_EP_PrepareRx(pdev,
+                   PRINTER_OUT_EP,
+                   (uint8_t*)(USB_Rx_Buffer),
+                   PRINTER_DATA_OUT_PACKET_SIZE);
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_printer_Init
+  *         DeInitialize the PRINTER layer
+  * @param  pdev: device instance
+  * @param  cfgidx: Configuration index
+  * @retval status
+  */
+static uint8_t  usbd_printer_DeInit (void  *pdev,
+                                 uint8_t cfgidx)
+{
+  /* Open EP IN */
+  DCD_EP_Close(pdev,
+              PRINTER_IN_EP);
+
+  /* Open EP OUT */
+  DCD_EP_Close(pdev,
+              PRINTER_OUT_EP);
+
+  /* Open Command IN EP */
+  DCD_EP_Close(pdev,
+              PRINTER_CMD_EP);
+
+  /* Restore default state of the Interface physical components */
+  APP_FOPS.pIf_DeInit();
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_printer_Setup
+  *         Handle the PRINTER specific requests
+  * @param  pdev: instance
+  * @param  req: usb requests
+  * @retval status
+  */
+static uint8_t  usbd_printer_Setup (void  *pdev,
+                                USB_SETUP_REQ *req)
+{
+  uint16_t len=USB_PRINTER_DESC_SIZ;
+  uint8_t  *pbuf=usbd_printer_CfgDesc + 9;
+
+  switch (req->bmRequest & USB_REQ_TYPE_MASK)
+  {
+    /* PRINTER Class Requests -------------------------------*/
+  case USB_REQ_TYPE_CLASS :
+      /* Check if the request is a data setup packet */
+      if (req->wLength)
+      {
+        /* Check if the request is Device-to-Host */
+        if (req->bmRequest & 0x80)
+        {
+          /* Get the data to be sent to Host from interface layer */
+          //APP_FOPS.pIf_Ctrl(req->bRequest, CmdBuff, req->wLength);
+
+          /* Send the data to the host */
+          print_id_descriptor[0]=sizeof(print_id_descriptor)>>8;
+          print_id_descriptor[1]=sizeof(print_id_descriptor);
+          USBD_CtlSendData (pdev,
+                            print_id_descriptor,
+                            sizeof(print_id_descriptor));
+        }
+        else /* Host-to-Device requeset */
+        {
+          /* Set the value of the current command to be processed */
+          printerCmd = req->bRequest;
+          printerLen = req->wLength;
+
+          /* Prepare the reception of the buffer over EP0
+          Next step: the received data will be managed in usbd_printer_EP0_TxSent()
+          function. */
+     //     MyPrintf("printer class \n\r");
+          USBD_CtlPrepareRx (pdev,
+                             CmdBuff,
+                             req->wLength);
+          APP_FOPS.pIf_Ctrl(req->bRequest, CmdBuff, req->wLength);
+          if(req->wLength != 0)
+          {
+          	USBD_CtlSendStatus(pdev);
+          }
+        }
+      }
+      else /* No Data request */
+      {
+            /* Transfer the command to the interface layer */
+            APP_FOPS.pIf_Ctrl(req->bRequest, NULL, 0);
+      }
+
+      return USBD_OK;
+
+    default:
+      USBD_CtlError (pdev, req);
+      return USBD_FAIL;
+
+
+
+    /* Standard Requests -------------------------------*/
+  case USB_REQ_TYPE_STANDARD:
+    switch (req->bRequest)
+    {
+    case USB_REQ_GET_DESCRIPTOR:
+      if( (req->wValue >> 8) == PRINTER_DESCRIPTOR_TYPE)
+      {
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+        pbuf = usbd_printer_Desc;
+#else
+        pbuf = usbd_printer_CfgDesc + 9 + (9 * USBD_ITF_MAX_NUM);
+#endif
+        len = MIN(USB_PRINTER_DESC_SIZ , req->wLength);
+      }
+
+      USBD_CtlSendData (pdev,
+                        pbuf,
+                        len);
+      break;
+
+    case USB_REQ_GET_INTERFACE :
+      USBD_CtlSendData (pdev,
+                        (uint8_t *)&usbd_printer_AltSet,
+                        1);
+      break;
+
+    case USB_REQ_SET_INTERFACE :
+      if ((uint8_t)(req->wValue) < USBD_ITF_MAX_NUM)
+      {
+        usbd_printer_AltSet = (uint8_t)(req->wValue);
+      }
+      else
+      {
+        /* Call the error management function (command will be nacked */
+        USBD_CtlError (pdev, req);
+      }
+      break;
+    }
+  }
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_printer_EP0_RxReady
+  *         Data received on control endpoint
+  * @param  pdev: device device instance
+  * @retval status
+  */
+static uint8_t  usbd_printer_EP0_RxReady (void  *pdev)
+{
+  if (printerCmd != NO_CMD)
+  {
+    /* Process the data */
+    APP_FOPS.pIf_Ctrl(printerCmd, CmdBuff, printerLen);
+
+    /* Reset the command variable to default value */
+    printerCmd = NO_CMD;
+  }
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_audio_DataIn
+  *         Data sent on non-control IN endpoint
+  * @param  pdev: device instance
+  * @param  epnum: endpoint number
+  * @retval status
+  */
+static uint8_t  usbd_printer_DataIn (void *pdev, uint8_t epnum)
+{
+  uint16_t USB_Tx_ptr;
+  uint16_t USB_Tx_length = 0;
+
+  if (USB_Tx_State == 1)
+  {
+    if (APP_Rx_length == 0)
+    {
+      USB_Tx_State = 0;
+    }
+    else
+    {
+        if (APP_Rx_length > PRINTER_DATA_IN_PACKET_SIZE)
+        {
+            USB_Tx_ptr = APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+            if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out + PRINTER_DATA_IN_PACKET_SIZE >= APP_RX_DATA_SIZE)
+            {
+                USB_Tx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+                APP_Rx_length -= USB_Tx_length;
+                APP_Gdata_param.rx_structure.Rx_counter -= USB_Tx_length;
+            }else{
+                USB_Tx_length = PRINTER_DATA_IN_PACKET_SIZE;
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_out += PRINTER_DATA_IN_PACKET_SIZE;
+                APP_Rx_length -= PRINTER_DATA_IN_PACKET_SIZE;
+                APP_Gdata_param.rx_structure.Rx_counter -= PRINTER_DATA_IN_PACKET_SIZE;
+            }
+        }
+        else
+        {
+            USB_Tx_ptr = APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+            if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out + APP_Rx_length >= APP_RX_DATA_SIZE)
+            {
+                USB_Tx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+                APP_Rx_length -= USB_Tx_length;
+                APP_Gdata_param.rx_structure.Rx_counter -= USB_Tx_length;
+            }else{
+                USB_Tx_length = APP_Rx_length;
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_out += APP_Rx_length;
+				APP_Gdata_param.rx_structure.Rx_counter -= APP_Rx_length;
+                APP_Rx_length = 0;
+            }
+        }
+	}
+	/* Prepare the available data buffer to be sent on IN endpoint */
+
+	DCD_EP_Tx(pdev,
+			  PRINTER_IN_EP,
+			  (uint8_t*)&APP_Gdata_param.rx_structure.APP_Rx_Buffer[USB_Tx_ptr],
+			  USB_Tx_length);
+  }
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  usbd_printer_DataOut
+  *         Data received on non-control Out endpoint
+  * @param  pdev: device instance
+  * @param  epnum: endpoint number
+  * @retval status
+  */
+#define wAIT_TIMES  20  //wAIT_TIMES*50us
+extern uint8_t usbFlowCtrl;
+static uint8_t  usbd_printer_DataOut (void *pdev, uint8_t epnum)
+{
+  uint16_t USB_Rx_Cnt;
+
+  /* Get the received data buffer and update the counter */
+
+  /* USB data will be immediately processed, this allow next USB traffic being
+     NAKed till the end of the application Xfer */
+  /* Prepare Out endpoint to receive next packet */
+  DCD_EP_PrepareRx(pdev,
+                   PRINTER_OUT_EP,
+                   (uint8_t*)(USB_Rx_Buffer),
+                   PRINTER_DATA_OUT_PACKET_SIZE);
+    USB_Rx_Cnt = ((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].xfer_count;
+    APP_FOPS.pIf_DataRx(USB_Rx_Buffer, USB_Rx_Cnt);
+    if(USB_Rx_Cnt==((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].maxpacket && usbFlowCtrl==0)
+    {
+        int wait_times=0;
+        while(wait_times<wAIT_TIMES)
+        {
+            if(USB_OTG_READ_REG8(((USB_OTG_CORE_HANDLE*)pdev)->regs.LENREGS[epnum])>=((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].maxpacket)
+            {
+                break;
+            }
+            delay_us(50);
+            wait_times++;
+        }
+        usbd_printer_DataOut(pdev,epnum);
+    }
+	return USBD_OK;
+}
+
+/**
+  * @brief  usbd_audio_SOF
+  *         Start Of Frame event management
+  * @param  pdev: instance
+  * @param  epnum: endpoint number
+  * @retval status
+  */
+static uint8_t  usbd_printer_SOF (void *pdev)
+{
+  static uint32_t FrameCount = 0;
+
+  if (FrameCount++ == PRINTER_IN_FRAME_INTERVAL)
+  {
+    /* Reset the frame counter */
+    FrameCount = 0;
+
+    /* Check the data to be sent through IN pipe */
+    Handle_USBAsynchXfer(pdev);
+  }
+
+  return USBD_OK;
+}
+
+/**
+  * @brief  Handle_USBAsynchXfer
+  *         Send data to USB
+  * @param  pdev: instance
+  * @retval None
+  */
+static void Handle_USBAsynchXfer (void *pdev)
+{
+  uint16_t USB_Tx_ptr;
+  uint16_t USB_Tx_length;
+
+  if(USB_Tx_State != 1)
+  {
+    if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out == PRINTER_APP_RX_DATA_SIZE)
+    {
+      APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+    }
+	#if 1
+	if (!APP_Gdata_param.rx_structure.Rx_counter)
+	{
+		USB_Tx_State = 0;
+        return;
+	}
+	APP_Rx_length = APP_Gdata_param.rx_structure.Rx_counter;
+	#else
+    /* */
+//    if (!APP_Gdata_param.rx_structure.Rx_counter)
+	if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out == \
+		APP_Gdata_param.rx_structure.APP_Rx_ptr_in)
+    {
+        USB_Tx_State = 0;
+        return;
+    }
+//    APP_Rx_length = APP_Gdata_param.rx_structure.Rx_counter;
+//	APP_Rx_length = APP_Gdata_param.rx_structure.APP_Rx_ptr_in - \
+//					APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+//    if(APP_Gdata_param.rx_structure.APP_Rx_ptr_out == APP_Gdata_param.rx_structure.APP_Rx_ptr_in)
+//    {
+//      USB_Tx_State = 0;
+//      return;
+//    }
+
+    if(APP_Gdata_param.rx_structure.APP_Rx_ptr_out > APP_Gdata_param.rx_structure.APP_Rx_ptr_in) /* rollback */
+    {
+      APP_Rx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+    }
+    else
+    {
+      APP_Rx_length = APP_Gdata_param.rx_structure.APP_Rx_ptr_in - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+    }
+	#endif
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+     APP_Rx_length &= ~0x03;
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+    if (APP_Rx_length > PRINTER_DATA_IN_PACKET_SIZE)
+    {
+        USB_Tx_ptr = APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+        if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out + PRINTER_DATA_IN_PACKET_SIZE >= PRINTER_APP_RX_DATA_SIZE)
+        {
+            USB_Tx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+            APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+            APP_Rx_length -= USB_Tx_length;
+            APP_Gdata_param.rx_structure.Rx_counter = APP_Rx_length;
+        }else{
+            USB_Tx_length = PRINTER_DATA_IN_PACKET_SIZE;
+            APP_Gdata_param.rx_structure.APP_Rx_ptr_out += PRINTER_DATA_IN_PACKET_SIZE;
+            APP_Rx_length -= PRINTER_DATA_IN_PACKET_SIZE;
+            APP_Gdata_param.rx_structure.Rx_counter = APP_Rx_length;
+        }
+    }
+    else
+    {
+        USB_Tx_ptr = APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+        if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out + APP_Rx_length >= PRINTER_APP_RX_DATA_SIZE)
+        {
+            USB_Tx_length = APP_RX_DATA_SIZE - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+            APP_Gdata_param.rx_structure.APP_Rx_ptr_out = 0;
+            APP_Rx_length -= USB_Tx_length;
+            APP_Gdata_param.rx_structure.Rx_counter = APP_Rx_length;
+        }else{
+            USB_Tx_length = APP_Rx_length;
+            APP_Gdata_param.rx_structure.APP_Rx_ptr_out += APP_Rx_length;
+            APP_Rx_length = 0;
+            APP_Gdata_param.rx_structure.Rx_counter = APP_Rx_length;
+        }
+    }
+    USB_Tx_State = 1;
+
+    DCD_EP_Tx (pdev,
+               PRINTER_IN_EP,
+               (uint8_t*)&APP_Gdata_param.rx_structure.APP_Rx_Buffer[USB_Tx_ptr],
+               USB_Tx_length);
+  }
+}
+
+/**
+  * @brief  USBD_printer_GetCfgDesc
+  *         Return configuration descriptor
+  * @param  speed : current device speed
+  * @param  length : pointer data length
+  * @retval pointer to descriptor buffer
+  */
+static uint8_t  *USBD_printer_GetCfgDesc (uint8_t speed, uint16_t *length)
+{
+  *length = sizeof (usbd_printer_CfgDesc);
+  return usbd_printer_CfgDesc;
+}
+
+/**
+  * @brief  USBD_printer_GetCfgDesc
+  *         Return configuration descriptor
+  * @param  speed : current device speed
+  * @param  length : pointer data length
+  * @retval pointer to descriptor buffer
+  */
+#ifdef USE_USB_OTG_HS
+static uint8_t  *USBD_printer_GetOtherCfgDesc (uint8_t speed, uint16_t *length)
+{
+  *length = sizeof (usbd_printer_OtherCfgDesc);
+  return usbd_printer_OtherCfgDesc;
+}
+#endif
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_cmd.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_cmd.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_cmd.h	(working copy)
@@ -0,0 +1,204 @@
+/**
+  ******************************************************************************
+  * @file    usbd_ccid_cmd.h
+  * @author  MCD Application Team
+  * @version V1.0.1
+  * @date    31-January-2014
+  * @brief   CCID Commands handling prototype
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CCID_CMD_H
+#define __USBD_CCID_CMD_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_ccid_core.h"
+#include <string.h>
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported macro ------------------------------------------------------------*/
+
+/******************************************************************************/
+/*  ERROR CODES for USB Bulk In Messages : bError                   */
+/******************************************************************************/
+
+#define   SLOT_NO_ERROR         0x81
+#define   SLOTERROR_UNKNOWN     0x82
+
+/* Index of not supported / incorrect message parameter : 7Fh to 01h */
+/* These Values are used for Return Types between Firmware Layers    */
+/*
+Failure of a command 
+The CCID cannot parse one parameter or the ICC is not supporting one parameter. 
+Then the Slot Error register contains the index of the first bad parameter as a 
+positive number (1-127). For instance, if the CCID receives an ICC command to 
+an unimplemented slot, then the Slot Error register shall be set to 
+5 (index of bSlot field).
+  */
+
+#define   SLOTERROR_BAD_LENTGH                    0x01
+#define   SLOTERROR_BAD_SLOT                      0x05
+#define   SLOTERROR_BAD_POWERSELECT               0x07
+#define   SLOTERROR_BAD_PROTOCOLNUM               0x07
+#define   SLOTERROR_BAD_CLOCKCOMMAND              0x07
+#define   SLOTERROR_BAD_ABRFU_3B                  0x07
+#define   SLOTERROR_BAD_BMCHANGES                 0x07
+#define   SLOTERROR_BAD_BFUNCTION_MECHANICAL      0x07
+#define   SLOTERROR_BAD_ABRFU_2B                  0x08
+#define   SLOTERROR_BAD_LEVELPARAMETER            0x08
+#define   SLOTERROR_BAD_FIDI                      0x0A
+#define   SLOTERROR_BAD_T01CONVCHECKSUM           0x0B
+#define   SLOTERROR_BAD_GUARDTIME                 0x0C
+#define   SLOTERROR_BAD_WAITINGINTEGER            0x0D
+#define   SLOTERROR_BAD_CLOCKSTOP                 0x0E
+#define   SLOTERROR_BAD_IFSC                      0x0F
+#define   SLOTERROR_BAD_NAD                       0x10
+#define   SLOTERROR_BAD_DWLENGTH                  0x08  /* Used in PC_to_RDR_XfrBlock*/
+
+/*----------  Table 6.2-2 Slot error register when bmCommandStatus = 1        */
+#define   SLOTERROR_CMD_ABORTED                    0xFF
+#define   SLOTERROR_ICC_MUTE                       0xFE
+#define   SLOTERROR_XFR_PARITY_ERROR               0xFD
+#define   SLOTERROR_XFR_OVERRUN                    0xFC
+#define   SLOTERROR_HW_ERROR                       0xFB
+#define   SLOTERROR_BAD_ATR_TS                     0xF8
+#define   SLOTERROR_BAD_ATR_TCK                    0xF7
+#define   SLOTERROR_ICC_PROTOCOL_NOT_SUPPORTED     0xF6
+#define   SLOTERROR_ICC_CLASS_NOT_SUPPORTED        0xF5
+#define   SLOTERROR_PROCEDURE_BYTE_CONFLICT        0xF4
+#define   SLOTERROR_DEACTIVATED_PROTOCOL           0xF3
+#define   SLOTERROR_BUSY_WITH_AUTO_SEQUENCE        0xF2
+#define   SLOTERROR_PIN_TIMEOUT                    0xF0
+#define   SLOTERROR_PIN_CANCELLED                  0xEF
+#define   SLOTERROR_CMD_SLOT_BUSY                  0xE0
+#define   SLOTERROR_CMD_NOT_SUPPORTED              0x00
+
+
+#define   DEFAULT_FIDI              0x11 /* DEFAULT_FIDI_VALUE */
+#define   DEFAULT_T01CONVCHECKSUM   0x00
+#define   DEFAULT_EXTRA_GUARDTIME   0x00
+#define   DEFAULT_WAITINGINTEGER    0x0A
+#define   DEFAULT_CLOCKSTOP         0x00
+#define   DEFAULT_IFSC              0x20
+#define   DEFAULT_NAD               0x00
+
+#define   DEFAULT_DATA_RATE    0x000025CD
+#define   DEFAULT_CLOCK_FREQ   0x00000E10
+
+
+/*
+Offset=0 bmICCStatus 2 bit  0, 1, 2
+    0 - An ICC is present and active (power is on and stable, RST is inactive)
+    1 - An ICC is present and inactive (not activated or shut down by hardware error)
+    2 - No ICC is present
+    3 - RFU
+Offset=0 bmRFU 4 bits 0 RFU
+Offset=6 bmCommandStatus 2 bits 0, 1, 2
+    0 - Processed without error
+    1 - Failed (error code provided by the error register)
+    2 - Time Extension is requested
+    3 - RFU
+  */
+
+#define BM_ICC_PRESENT_ACTIVE 0x00
+#define BM_ICC_PRESENT_INACTIVE 0x01
+#define BM_ICC_NO_ICC_PRESENT   0x02
+
+#define BM_COMMAND_STATUS_OFFSET 0x06
+#define BM_COMMAND_STATUS_NO_ERROR 0x00 
+#define BM_COMMAND_STATUS_FAILED   (0x01 << BM_COMMAND_STATUS_OFFSET)
+#define BM_COMMAND_STATUS_TIME_EXTN  (0x02 << BM_COMMAND_STATUS_OFFSET)
+
+/* defines for the CCID_CMD Layers */
+#define SIZE_OF_ATR 33
+#define LEN_RDR_TO_PC_SLOTSTATUS 10
+#define LEN_PROTOCOL_STRUCT_T0   5
+
+#define BPROTOCOL_NUM_T0  0
+#define BPROTOCOL_NUM_T1  1
+
+/************************************************************************************/
+/*   ERROR CODES for RDR_TO_PC_HARDWAREERROR Message : bHardwareErrorCode           */
+/************************************************************************************/
+
+#define   HARDWAREERRORCODE_OVERCURRENT       0x01
+#define   HARDWAREERRORCODE_VOLTAGEERROR      0x02
+#define   HARDWAREERRORCODE_OVERCURRENT_IT    0x04
+#define   HARDWAREERRORCODE_VOLTAGEERROR_IT   0x08
+
+typedef enum 
+{
+  CHK_PARAM_SLOT = 1,
+  CHK_PARAM_DWLENGTH = (1<<1),
+  CHK_PARAM_abRFU2 = (1<<2), 
+  CHK_PARAM_abRFU3 = (1<<3),
+  CHK_PARAM_CARD_PRESENT = (1<<4),
+  CHK_PARAM_ABORT = (1<<5),
+  CHK_ACTIVE_STATE = (1<<6)
+} ChkParam_t;
+
+
+/* Exported functions ------------------------------------------------------- */
+
+uint8_t  PC_to_RDR_IccPowerOn(void);
+uint8_t  PC_to_RDR_IccPowerOff(void);
+uint8_t  PC_to_RDR_GetSlotStatus(void);
+uint8_t  PC_to_RDR_XfrBlock(void);
+uint8_t  PC_to_RDR_GetParameters(void);
+uint8_t  PC_to_RDR_ResetParameters(void);
+uint8_t  PC_to_RDR_SetParameters(void);
+uint8_t  PC_to_RDR_Escape(void);
+uint8_t  PC_to_RDR_IccClock(void);
+uint8_t  PC_to_RDR_Abort(void);
+uint8_t  PC_TO_RDR_T0Apdu(void);
+uint8_t  PC_TO_RDR_Mechanical(void);
+uint8_t  PC_TO_RDR_SetDataRateAndClockFrequency(void);
+uint8_t  PC_TO_RDR_Secure(void);
+
+
+void RDR_to_PC_DataBlock(unsigned char );
+void RDR_to_PC_NotifySlotChange(void);
+void RDR_to_PC_SlotStatus(unsigned char );
+void RDR_to_PC_Parameters(unsigned char );
+void RDR_to_PC_Escape(unsigned char );
+void RDR_to_PC_DataRateAndClockFrequency(uint8_t  errorCode);
+
+
+void CCID_UpdSlotStatus (uint8_t );
+void CCID_UpdSlotChange (uint8_t );
+uint8_t CCID_IsSlotStatusChange (void);
+uint8_t CCID_CmdAbort(uint8_t slot, uint8_t seq);
+
+uint32_t resp_CCID_CMD(USB_OTG_CORE_HANDLE *pdev);
+
+
+//Add by link 2017.3.20
+#define CCID_RECV_Q_SIZE            (10)
+#define Q_NEXT(pos, size)           (((pos) + 1) % (size))
+#define Q_LEN(head,tail, size)      (((head) < (tail) ? (tail) - (head) : (head) - (tail)) % (size))
+#define Q_IS_FULL(head, tail, size) (((tail) + 1) % (size) == (head) % (size))
+#define Q_EMPTY(head, tail, size)   ((head) % (size) == (tail) % (size))
+
+
+
+#endif /* __USBD_CCID_CMD_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_cmd.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_cmd.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_cmd.c	(working copy)
@@ -0,0 +1,1076 @@
+ /**
+  ******************************************************************************
+  * @file    usbd_ccid_cmd.c
+  * @author  MCD Application Team
+  * @version V1.0.1
+  * @date    31-January-2014
+  * @brief   CCID Commands handling 
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_ccid_cmd.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+#define CCID_UpdateCommandStatus(cmd_status,icc_status)\
+ Ccid_bulkin_data.bStatus=(cmd_status|icc_status)
+/* 
+The Above Macro can take any of following Values 
+#define BM_ICC_PRESENT_ACTIVE 0x00
+#define BM_ICC_PRESENT_INACTIVE 0x01
+#define BM_ICC_NO_ICC_PRESENT   0x02
+
+#define BM_COMMAND_STATUS_OFFSET 0x06
+#define BM_COMMAND_STATUS_NO_ERROR 0x00 
+#define BM_COMMAND_STATUS_FAILED   (0x01 << BM_COMMAND_STATUS_OFFSET)
+#define BM_COMMAND_STATUS_TIME_EXTN  (0x02 << BM_COMMAND_STATUS_OFFSET)
+*/
+
+/* Private variables ---------------------------------------------------------*/
+Ccid_bulkin_data_t Ccid_resp_buff;
+
+//Add by link 2017.3.20
+Ccid_bulkout_data_t Ccid_out_cmd[CCID_RECV_Q_SIZE];
+uint32_t gu32RecvHead = 0;
+uint32_t gu32RecvTail = 0;
+
+
+
+extern Protocol0_DataStructure_t Protocol0_DataStructure;
+
+/* Private function prototypes -----------------------------------------------*/
+static uint8_t CCID_CheckCommandParams(uint32_t param_type);
+
+/* Private functions ---------------------------------------------------------*/
+
+/**
+  * @brief  PC_to_RDR_IccPowerOn
+  *         PC_TO_RDR_ICCPOWERON message execution, apply voltage and get ATR 
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_to_RDR_IccPowerOn(void)
+{
+    /* Apply the ICC VCC
+       Fills the Response buffer with ICC ATR 
+       This Command is returned with RDR_to_PC_DataBlock(); 
+    */
+    const uint8_t au8ATR[] = { 0x3B, 0x60, 0x00, 0x00 };
+    uint8_t index;
+    uint8_t error;
+
+    Ccid_bulkin_data.dwLength = 0;  /* Reset Number of Bytes in abData */
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_DWLENGTH |\
+                                        CHK_PARAM_abRFU2 |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_ABORT);
+    if (error != 0)
+    {
+        return error;
+    }
+
+
+    /* ATR is received, No Error Condition Found */
+    Ccid_bulkin_data.dwLength = sizeof(au8ATR);
+    CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+
+    for (index = 0; index < sizeof(au8ATR); index++)
+    { /* Copy the ATR to the Response Buffer */
+        Ccid_bulkin_data.abData[index] = au8ATR[index];
+    }
+
+    return SLOT_NO_ERROR;
+}
+
+/**
+  * @brief  PC_to_RDR_IccPowerOff
+  *         Icc VCC is switched Off 
+  * @param  None 
+  * @retval uint8_t error: status of the command execution 
+  */
+uint8_t PC_to_RDR_IccPowerOff(void)
+{
+    /*  The response to this command message is the RDR_to_PC_SlotStatus 
+    response message. */
+    uint8_t error;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_abRFU3 |\
+                                        CHK_PARAM_DWLENGTH);
+    if (error != 0)
+    {
+        return error;
+    }
+
+    //MyPrintf("Power Off!\n");
+    /* Command is ok, Check for Card Presence */
+
+    return SLOT_NO_ERROR;
+}
+
+/**
+  * @brief  PC_to_RDR_GetSlotStatus
+  *         Provides the Slot status to the host 
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_to_RDR_GetSlotStatus(void)
+{
+    uint8_t error;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_DWLENGTH |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_abRFU3);
+    if (error != 0)
+    {
+        return error;
+    }
+
+    CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+    return SLOT_NO_ERROR;
+}
+
+
+uint32_t resp_CCID_CMD(USB_OTG_CORE_HANDLE *pdev)
+{
+    uint8_t error = 0;
+    uint16_t expectedLength;
+    uint32_t u32Next;
+    
+    if (NULL == pdev)
+    {
+        return -2;
+    }
+    if (Q_EMPTY(gu32RecvHead, gu32RecvTail, CCID_RECV_Q_SIZE))
+    {
+        return -1;
+    }
+    u32Next = Q_NEXT(gu32RecvHead, CCID_RECV_Q_SIZE);
+
+    expectedLength = (Ccid_out_cmd[u32Next].bSpecific_2 << 8) | Ccid_out_cmd[u32Next].bSpecific_1;
+
+    Ccid_bulkin_data.dwLength = (uint16_t)expectedLength;
+    
+    error = SC_XferBlock(&Ccid_out_cmd[u32Next].abData[0], Ccid_out_cmd[u32Next].dwLength, expectedLength);
+
+    gu32RecvHead = u32Next;
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+        error = SLOT_NO_ERROR;
+    }
+    RDR_to_PC_DataBlock(error);
+//    MyPrintf("size=%x\n\r",Ccid_bulkin_data.u16SizeToSend);
+    DCD_EP_Tx(pdev, CCID_BULK_IN_EP, (uint8_t *)&Ccid_bulkin_data, Ccid_bulkin_data.u16SizeToSend);
+     Ccid_BulkState = CCID_STATE_IDLE;
+    return 0;
+}
+
+/**
+  * @brief  PC_to_RDR_XfrBlock
+  *         Handles the Block transfer from Host. 
+  *         Response to this command message is the RDR_to_PC_DataBlock 
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_to_RDR_XfrBlock(void)
+{
+    //uint16_t expectedLength;
+
+    uint8_t error = 0;
+    uint32_t u32Next;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_abRFU3 |\
+                                        CHK_PARAM_ABORT |\
+                                        CHK_ACTIVE_STATE);
+    
+    if (error != 0) return error;
+
+    if (Ccid_bulkout_data.dwLength > ABDATA_SIZE)
+    { /* Check amount of Data Sent by Host is > than memory allocated ? */
+
+        return SLOTERROR_BAD_DWLENGTH;
+    }
+
+
+    /* wLevelParameter = Size of expected data to be returned by the 
+                          bulk-IN endpoint */
+//  expectedLength = (Ccid_bulkout_data.bSpecific_2 << 8) |
+//      Ccid_bulkout_data.bSpecific_1;
+//
+//  Ccid_bulkin_data.dwLength = (uint16_t)expectedLength;
+
+
+    /*
+    error = SC_XferBlock(&Ccid_bulkout_data.abData[0],
+                         Ccid_bulkout_data.dwLength,
+                         expectedLength);
+    */
+    if (!Q_IS_FULL(gu32RecvHead, gu32RecvTail, CCID_RECV_Q_SIZE))
+    {
+        u32Next = Q_NEXT(gu32RecvTail, CCID_RECV_Q_SIZE);
+        
+        memcpy((char *)(Ccid_out_cmd + u32Next), ( char *)(&Ccid_bulkout_data), (int)sizeof(Ccid_bulkout_data_t));
+        gu32RecvTail = u32Next;
+    }
+    else
+    {
+        //Queue overflow
+        error = SLOTERROR_BAD_DWLENGTH;
+    }
+
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+        error = SLOT_NO_ERROR;
+    }
+
+    return error;
+}
+
+
+/**
+  * @brief  PC_to_RDR_GetParameters
+  *         Provides the ICC parameters to the host 
+  *         Response to this command message is the RDR_to_PC_Parameters
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_to_RDR_GetParameters(void)
+{
+    uint8_t error;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_DWLENGTH |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_abRFU3);
+    if (error != 0) return error;
+
+    CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+
+    return SLOT_NO_ERROR;
+}
+
+
+/**
+  * @brief  PC_to_RDR_ResetParameters
+  *         Set the ICC parameters to the default 
+  *         Response to this command message is the RDR_to_PC_Parameters
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_to_RDR_ResetParameters(void)
+{
+    uint8_t error;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_DWLENGTH |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_abRFU3 |\
+                                        CHK_ACTIVE_STATE);
+    if (error != 0) return error;
+
+    /* This command resets the slot parameters to their default values */
+    Ccid_bulkout_data.abData[0] = DEFAULT_FIDI;
+    Ccid_bulkout_data.abData[1] = DEFAULT_T01CONVCHECKSUM;
+    Ccid_bulkout_data.abData[2] = DEFAULT_EXTRA_GUARDTIME;
+    Ccid_bulkout_data.abData[3] = DEFAULT_WAITINGINTEGER;
+    Ccid_bulkout_data.abData[4] = DEFAULT_CLOCKSTOP;
+    Ccid_bulkout_data.abData[5] = 0x00;
+    Ccid_bulkout_data.abData[6] = 0x00;
+
+    error = SC_SetParams((Protocol0_DataStructure_t *)(&(Ccid_bulkout_data.abData[0])));
+
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+        error = SLOT_NO_ERROR;
+    }
+
+    return error;
+}
+
+
+/**
+  * @brief  PC_to_RDR_SetParameters
+  *         Set the ICC parameters to the host defined parameters
+  *         Response to this command message is the RDR_to_PC_Parameters
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_to_RDR_SetParameters(void)
+{
+    uint8_t error;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_abRFU2 |\
+                                        CHK_ACTIVE_STATE);
+    if (error != 0) return error;
+
+    error = SLOT_NO_ERROR;
+
+    /* for Protocol T=0 (bProtocolNum=0) (dwLength=00000005h) */
+    if ((Ccid_bulkout_data.dwLength == 5) &&
+        (Ccid_bulkout_data.bSpecific_0 != 0)) error = SLOTERROR_BAD_PROTOCOLNUM;
+
+    /* for Protocol T=1 (bProtocolNum=1) (dwLength=00000007h) */
+    if ((Ccid_bulkout_data.dwLength == 7) &&
+        (Ccid_bulkout_data.bSpecific_0 != 1)) error = SLOTERROR_CMD_NOT_SUPPORTED;
+
+    /* For T0, Waiting Integer 0 supported */
+    if (Ccid_bulkout_data.abData[3] != 0) error = SLOTERROR_BAD_WAITINGINTEGER;
+
+    if (Ccid_bulkout_data.abData[4] != DEFAULT_CLOCKSTOP) error = SLOTERROR_BAD_CLOCKSTOP;
+
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+
+    error = SC_SetParams((Protocol0_DataStructure_t *)(&(Ccid_bulkout_data.abData[0])));
+
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+        error = SLOT_NO_ERROR;
+    }
+
+    return error;
+}
+
+
+/**
+  * @brief  PC_to_RDR_Escape
+  *         Execute the Escape command. This is user specific Implementation
+  *         Response to this command message is the RDR_to_PC_Escape
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_to_RDR_Escape(void)
+{
+    uint8_t error;
+    uint16_t size;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_abRFU3 |\
+                                        CHK_PARAM_ABORT |\
+                                        CHK_ACTIVE_STATE);
+
+    if (error != 0) return error;
+
+    /*
+    error = SC_ExecuteEscape(&Ccid_bulkout_data.abData[0],
+                             Ccid_bulkout_data.dwLength,
+                             &Ccid_bulkin_data.abData[0],
+                             &size);
+    */
+    
+    Ccid_bulkin_data.dwLength = size;
+
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+    }
+
+    return error;
+}
+
+
+/**
+  * @brief  PC_to_RDR_IccClock
+  *         Execute the Clock specific command from host 
+  *         Response to this command message is the RDR_to_PC_SlotStatus
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_to_RDR_IccClock(void)
+{
+    uint8_t error;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_abRFU2 |\
+                                        CHK_PARAM_DWLENGTH |\
+                                        CHK_ACTIVE_STATE);
+    if (error != 0) return error;
+
+    /* bClockCommand  00h restarts Clock
+                      01h Stops Clock in the state shown in the bClockStop 
+                         field of the PC_to_RDR_SetParameters command 
+                         and RDR_to_PC_Parameters message.*/
+    if (Ccid_bulkout_data.bSpecific_0 > 1)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+        return SLOTERROR_BAD_CLOCKCOMMAND;
+    }
+
+    error = SC_SetClock(Ccid_bulkout_data.bSpecific_0);
+
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+    }
+
+    return error;
+}
+
+
+/**
+  * @brief  PC_to_RDR_Abort
+  *         Execute the Abort command from host, This stops all Bulk transfers 
+  *         from host and ICC
+  *         Response to this command message is the RDR_to_PC_SlotStatus
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_to_RDR_Abort(void)
+{
+    uint8_t error;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_abRFU3 |\
+                                        CHK_PARAM_DWLENGTH);
+    if (error != 0) return error;
+
+    //CCID_CmdAbort(Ccid_bulkout_data.bSlot, Ccid_bulkout_data.bSeq);
+    CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+    return SLOT_NO_ERROR;
+}
+
+/**
+  * @brief  CCID_CmdAbort
+  *         Execute the Abort command from Bulk EP or from Control EP,
+  *          This stops all Bulk transfers from host and ICC
+  * @param  uint8_t slot: slot number that host wants to abort
+  * @param  uint8_t seq : Seq number for PC_to_RDR_Abort
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t CCID_CmdAbort(uint8_t slot, uint8_t seq)
+{
+    /* This function is called for REQUEST_ABORT & PC_to_RDR_Abort */
+
+    if (slot >= CCID_NUMBER_OF_SLOTS)
+    { /* This error condition is possible only from CLASS_REQUEST, otherwise
+      Slot is already checked in parameters from PC_to_RDR_Abort request */
+        /* Slot requested is more than supported by Firmware */
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_NO_ICC_PRESENT);
+        return SLOTERROR_BAD_SLOT;
+    }
+
+    if (usb_ccid_param.bAbortRequestFlag == 1)
+    { /* Abort Command was already received from ClassReq or PC_to_RDR */
+        if ((usb_ccid_param.bSeq == seq) && (usb_ccid_param.bSlot == slot))
+        {
+            /* CLASS Specific request is already Received, Reset the abort flag */
+            usb_ccid_param.bAbortRequestFlag = 0;
+        }
+    }
+    else
+    {
+        /* Abort Command was NOT received from ClassReq or PC_to_RDR, 
+           so save them for next ABORT command to verify */
+        usb_ccid_param.bAbortRequestFlag = 1;
+        usb_ccid_param.bSeq = seq;
+        usb_ccid_param.bSlot = slot;
+    }
+
+    return 0;
+}
+
+/**
+  * @brief  PC_TO_RDR_T0Apdu
+  *         Execute the PC_TO_RDR_T0APDU command from host
+  *         Response to this command message is the RDR_to_PC_SlotStatus
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_TO_RDR_T0Apdu(void)
+{
+    uint8_t error;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_DWLENGTH |
+                                    CHK_PARAM_ABORT);
+    if (error != 0) return error;
+
+    if (Ccid_bulkout_data.bSpecific_0 > 0x03)
+    { /* Bit 0 is associated with field bClassGetResponse
+         Bit 1 is associated with field bClassEnvelope
+         Other bits are RFU.*/
+
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+        return SLOTERROR_BAD_BMCHANGES;
+    }
+
+    /*
+    error = SC_T0Apdu(Ccid_bulkout_data.bSpecific_0,
+                      Ccid_bulkout_data.bSpecific_1,
+                      Ccid_bulkout_data.bSpecific_2);
+    */
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+    }
+
+    return error;
+}
+
+/**
+  * @brief  PC_TO_RDR_Mechanical
+  *         Execute the PC_TO_RDR_MECHANICAL command from host
+  *         Response to this command message is the RDR_to_PC_SlotStatus
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_TO_RDR_Mechanical(void)
+{
+    uint8_t error;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_abRFU2 |\
+                                        CHK_PARAM_DWLENGTH
+                                   );
+    if (error != 0) return error;
+
+    if (Ccid_bulkout_data.bSpecific_0 > 0x05)
+    { /* 01h  Accept Card
+         02h  Eject Card
+         03h  Capture Card
+         04h  Lock Card
+         05h  Unlock Card*/
+
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+        return SLOTERROR_BAD_BFUNCTION_MECHANICAL;
+    }
+
+    //error = SC_Mechanical(Ccid_bulkout_data.bSpecific_0);
+
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+    }
+
+    return error;
+}
+
+/**
+  * @brief  PC_TO_RDR_SetDataRateAndClockFrequency
+  *         Set the required Card Frequency and Data rate from the host. 
+  *         Response to this command message is the 
+  *           RDR_to_PC_DataRateAndClockFrequency
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_TO_RDR_SetDataRateAndClockFrequency(void)
+{
+    uint8_t error;
+    uint32_t clockFrequency;
+    uint32_t dataRate;
+    uint32_t temp = 0;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_abRFU3);
+    if (error != 0) return error;
+
+    if (Ccid_bulkout_data.dwLength != 0x08)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+        return SLOTERROR_BAD_LENTGH;
+    }
+
+    /* HERE we avoiding to an unaligned memory access*/
+    temp = (Ccid_bulkout_data.abData[0]) & 0x000000FF;
+    clockFrequency = temp;
+
+    temp = (Ccid_bulkout_data.abData[1]) & 0x000000FF;
+    clockFrequency |= temp << 8;
+
+    temp = (Ccid_bulkout_data.abData[2]) & 0x000000FF;
+    clockFrequency |= temp << 16;
+
+    temp = (Ccid_bulkout_data.abData[3]) & 0x000000FF;
+    clockFrequency |= temp << 24;
+
+    temp = (Ccid_bulkout_data.abData[4]) & 0x000000FF;
+    dataRate = temp;
+
+    temp = (Ccid_bulkout_data.abData[5]) & 0x000000FF;
+    dataRate |= temp << 8;
+
+    temp = (Ccid_bulkout_data.abData[6]) & 0x000000FF;
+    dataRate |= temp << 16;
+
+    temp = (Ccid_bulkout_data.abData[7]) & 0x000000FF;
+    dataRate |= temp << 24;
+
+    //error = SC_SetDataRateAndClockFrequency(clockFrequency, dataRate);
+    Ccid_bulkin_data.bError = error;
+
+    if (error != SLOT_NO_ERROR)
+    {
+        Ccid_bulkin_data.dwLength = 0;
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        Ccid_bulkin_data.dwLength = 8;
+
+        (Ccid_bulkin_data.abData[0]) = clockFrequency & 0x000000FF;
+
+        (Ccid_bulkin_data.abData[1]) = (clockFrequency & 0x0000FF00) >> 8;
+
+        (Ccid_bulkin_data.abData[2]) = (clockFrequency & 0x00FF0000) >> 16;
+
+        (Ccid_bulkin_data.abData[3]) = (clockFrequency & 0xFF000000) >> 24;
+
+        (Ccid_bulkin_data.abData[4]) = dataRate & 0x000000FF;
+
+        (Ccid_bulkin_data.abData[5]) = (dataRate & 0x0000FF00) >> 8;
+
+        (Ccid_bulkin_data.abData[6]) = (dataRate & 0x00FF0000) >> 16;
+
+        (Ccid_bulkin_data.abData[7]) = (dataRate & 0xFF000000) >> 24;
+
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+    }
+
+    return error;
+}
+
+/**
+  * @brief  PC_TO_RDR_Secure
+  *         Execute the Secure Command from the host. 
+  *         Response to this command message is the RDR_to_PC_DataBlock
+  * @param  None 
+  * @retval uint8_t status of the command execution 
+  */
+uint8_t PC_TO_RDR_Secure(void)
+{
+    uint8_t error;
+    uint8_t bBWI;
+    uint16_t wLevelParameter;
+    uint32_t responseLen;
+
+    Ccid_bulkin_data.dwLength = 0;
+
+    error = CCID_CheckCommandParams(CHK_PARAM_SLOT |\
+                                        CHK_PARAM_CARD_PRESENT |\
+                                        CHK_PARAM_ABORT);
+
+    if (error != 0) return error;
+
+    bBWI = Ccid_bulkout_data.bSpecific_0;
+    wLevelParameter = (Ccid_bulkout_data.bSpecific_1 + ((uint16_t)Ccid_bulkout_data.bSpecific_2 << 8));
+
+    if ((EXCHANGE_LEVEL_FEATURE == TPDU_EXCHANGE) ||
+        (EXCHANGE_LEVEL_FEATURE == SHORT_APDU_EXCHANGE))
+    {
+        /* TPDU level & short APDU level, wLevelParameter is RFU, = 0000h */
+        if (wLevelParameter != 0)
+        {
+            CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+            error = SLOTERROR_BAD_LEVELPARAMETER;
+            return error;
+        }
+    }
+
+    /*
+    error = SC_Secure(Ccid_bulkout_data.dwLength, bBWI, wLevelParameter,
+                      &Ccid_bulkout_data.abData[0], &responseLen);
+    */
+    Ccid_bulkin_data.dwLength = responseLen;
+
+    if (error != SLOT_NO_ERROR)
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+    }
+    else
+    {
+        CCID_UpdateCommandStatus(BM_COMMAND_STATUS_NO_ERROR, BM_ICC_PRESENT_ACTIVE);
+    }
+
+    return error;
+}
+
+/******************************************************************************/
+/*    BULK IN ROUTINES                              */
+/******************************************************************************/
+
+/**
+  * @brief  RDR_to_PC_DataBlock
+  *         Provide the data block response to the host 
+  *         Response for PC_to_RDR_IccPowerOn, PC_to_RDR_XfrBlock 
+  * @param  uint8_t errorCode: code to be returned to the host
+  * @retval None 
+  */
+void RDR_to_PC_DataBlock(uint8_t errorCode)
+{
+    uint16_t length = CCID_RESPONSE_HEADER_SIZE;
+
+    Ccid_bulkin_data.bMessageType = RDR_TO_PC_DATABLOCK;
+    Ccid_bulkin_data.bError = errorCode;
+    Ccid_bulkin_data.bSpecific = 0;    /* bChainParameter */
+
+    if (errorCode == SLOT_NO_ERROR)
+    {
+        length += Ccid_bulkin_data.dwLength;   /* Length Specified in Command */
+    }
+
+    Transfer_Data_Request((uint8_t *)(&Ccid_bulkin_data), length);
+
+}
+
+
+/**
+  * @brief  RDR_to_PC_SlotStatus
+  *         Provide the Slot status response to the host 
+  *          Response for PC_to_RDR_IccPowerOff 
+  *                PC_to_RDR_GetSlotStatus
+  *                PC_to_RDR_IccClock
+  *                PC_to_RDR_T0APDU
+  *                PC_to_RDR_Mechanical
+  *         Also the device sends this response message when it has completed 
+  *         aborting a slot after receiving both the Class Specific ABORT request 
+  *          and PC_to_RDR_Abort command message.
+  * @param  uint8_t errorCode: code to be returned to the host
+  * @retval None 
+  */
+void RDR_to_PC_SlotStatus(uint8_t errorCode)
+{
+
+    Ccid_bulkin_data.bMessageType = RDR_TO_PC_SLOTSTATUS;
+    Ccid_bulkin_data.dwLength = 0;
+    Ccid_bulkin_data.bError = errorCode;
+    Ccid_bulkin_data.bSpecific = 0;    /* bClockStatus = 00h Clock running
+                                          01h Clock stopped in state L
+                                          02h Clock stopped in state H
+                                          03h Clock stopped in an unknown state
+                                          All other values are RFU. */
+
+    
+    Transfer_Data_Request((uint8_t *)(&Ccid_bulkin_data),
+                          LEN_RDR_TO_PC_SLOTSTATUS);
+
+}
+
+/**
+  * @brief  RDR_to_PC_Parameters
+  *         Provide the data block response to the host 
+  *         Response for PC_to_RDR_GetParameters, PC_to_RDR_ResetParameters
+  *                      PC_to_RDR_SetParameters
+  * @param  uint8_t errorCode: code to be returned to the host
+  * @retval None 
+  */
+void RDR_to_PC_Parameters(uint8_t errorCode)
+{
+    uint16_t length = CCID_RESPONSE_HEADER_SIZE;
+
+    Ccid_bulkin_data.bMessageType = RDR_TO_PC_PARAMETERS;
+    Ccid_bulkin_data.bError = errorCode;
+
+    if (errorCode == SLOT_NO_ERROR)
+    {
+        Ccid_bulkin_data.dwLength = LEN_PROTOCOL_STRUCT_T0;
+        length += LEN_PROTOCOL_STRUCT_T0;
+    }
+    else
+    {
+        Ccid_bulkin_data.dwLength = 0;
+    }
+
+    Ccid_bulkin_data.abData[0] = Protocol0_DataStructure.bmFindexDindex;
+    Ccid_bulkin_data.abData[1] = Protocol0_DataStructure.bmTCCKST0;
+    Ccid_bulkin_data.abData[2] = Protocol0_DataStructure.bGuardTimeT0;
+    Ccid_bulkin_data.abData[3] = Protocol0_DataStructure.bWaitingIntegerT0;
+    Ccid_bulkin_data.abData[4] = Protocol0_DataStructure.bClockStop;
+
+    /* bProtocolNum */
+    Ccid_bulkin_data.bSpecific = BPROTOCOL_NUM_T0;
+
+    Transfer_Data_Request((uint8_t *)(&Ccid_bulkin_data), length);
+}
+
+/**
+  * @brief  RDR_to_PC_Escape
+  *         Provide the Escaped data block response to the host 
+  *         Response for PC_to_RDR_Escape
+  * @param  uint8_t errorCode: code to be returned to the host
+  * @retval None 
+  */
+void RDR_to_PC_Escape(uint8_t errorCode)
+{
+    uint16_t length = CCID_RESPONSE_HEADER_SIZE;
+
+    Ccid_bulkin_data.bMessageType = RDR_TO_PC_ESCAPE;
+
+    Ccid_bulkin_data.bSpecific = 0;    /* Reserved for Future Use */
+    Ccid_bulkin_data.bError = errorCode;
+
+    if (errorCode == SLOT_NO_ERROR)
+    {
+        length += Ccid_bulkin_data.dwLength;   /* Length Specified in Command */
+    }
+
+    Transfer_Data_Request((uint8_t *)(&Ccid_bulkin_data), length);
+}
+
+
+
+/**
+  * @brief  RDR_to_PC_DataRateAndClockFrequency
+  *         Provide the Clock and Data Rate information to host 
+  *         Response for PC_TO_RDR_SetDataRateAndClockFrequency
+  * @param  uint8_t errorCode: code to be returned to the host
+  * @retval None 
+  */
+void RDR_to_PC_DataRateAndClockFrequency(uint8_t errorCode)
+{
+    uint16_t length = CCID_RESPONSE_HEADER_SIZE;
+
+    Ccid_bulkin_data.bMessageType = RDR_TO_PC_DATARATEANDCLOCKFREQUENCY;
+    Ccid_bulkin_data.bError = errorCode;
+    Ccid_bulkin_data.bSpecific = 0;    /* Reserved for Future Use */
+
+    if (errorCode == SLOT_NO_ERROR)
+    {
+        length += Ccid_bulkin_data.dwLength;   /* Length Specified in Command */
+    }
+
+    Transfer_Data_Request((uint8_t *)(&Ccid_bulkin_data), length);
+}
+
+/**
+  * @brief  RDR_to_PC_NotifySlotChange
+  *         Interrupt message to be sent to the host, Checks the card presence 
+  *           status and update the buffer accordingly
+  * @param  None 
+  * @retval None
+  */
+void RDR_to_PC_NotifySlotChange(void)
+{
+    UsbIntMessageBuffer[OFFSET_INT_BMESSAGETYPE] = RDR_TO_PC_NOTIFYSLOTCHANGE;
+
+    //IC card always in slot.
+//  if (SC_Detect())
+    {
+        /* 
+        SLOT_ICC_PRESENT 0x01 : LSb : (0b = no ICC present, 1b = ICC present)
+        SLOT_ICC_CHANGE 0x02 : MSb : (0b = no change, 1b = change).
+        */
+        UsbIntMessageBuffer[OFFSET_INT_BMSLOTICCSTATE] = SLOT_ICC_PRESENT |
+            SLOT_ICC_CHANGE;
+    }
+//  else
+//  {
+//      UsbIntMessageBuffer[OFFSET_INT_BMSLOTICCSTATE] = SLOT_ICC_CHANGE;
+//
+//      /* Power OFF the card */
+//      SC_PowerCmd(DISABLE);
+//      SC_SetState(SC_POWER_OFF);
+//  }
+}
+
+
+/**
+  * @brief  CCID_UpdSlotStatus
+  *         Updates the variable for the slot status 
+  * @param  uint8_t slotStatus : slot status from the calling function 
+  * @retval None
+  */
+void CCID_UpdSlotStatus(uint8_t slotStatus)
+{
+    Ccid_SlotStatus.SlotStatus = slotStatus;
+}
+
+/**
+  * @brief  CCID_UpdSlotChange
+  *         Updates the variable for the slot change status 
+  * @param  uint8_t changeStatus : slot change status from the calling function 
+  * @retval None
+  */
+void CCID_UpdSlotChange(uint8_t changeStatus)
+{
+    Ccid_SlotStatus.SlotStatusChange = changeStatus;
+}
+
+/**
+  * @brief  CCID_IsSlotStatusChange
+  *         Provides the value of the variable for the slot change status 
+  * @param  None
+  * @retval uint8_t slot change status 
+  */
+uint8_t CCID_IsSlotStatusChange(void)
+{
+    return Ccid_SlotStatus.SlotStatusChange;
+}
+
+/**
+  * @brief  CCID_CheckCommandParams
+  *         Checks the specific parameters requested by the function and update 
+  *          status accordingly. This function is called from all 
+  *          PC_to_RDR functions
+  * @param  uint32_t param_type : Parameter enum to be checked by calling function
+  * @retval uint8_t status 
+  */
+static uint8_t CCID_CheckCommandParams(uint32_t param_type)
+{
+    uint32_t parameter;
+
+    Ccid_bulkin_data.bStatus = BM_ICC_PRESENT_ACTIVE | BM_COMMAND_STATUS_NO_ERROR;
+
+    parameter = (uint32_t)param_type;
+
+    if (parameter & CHK_PARAM_SLOT)
+    {
+        /* 
+        The slot number (bSlot) identifies which ICC slot is being addressed 
+        by the message, if the CCID supports multiple slots. 
+        The slot number is zero-relative, and is in the range of zero to FFh.
+        */
+
+        /* SLOT Number is 0 onwards, so always < CCID_NUMBER_OF_SLOTs */
+        /* Error Condition !!! */
+        if (Ccid_bulkout_data.bSlot >= CCID_NUMBER_OF_SLOTS)
+        { /* Slot requested is more than supported by Firmware */
+            CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_NO_ICC_PRESENT);
+            return SLOTERROR_BAD_SLOT;
+        }
+    }
+
+    if (parameter & CHK_PARAM_CARD_PRESENT)
+    {
+        /* Commands Parameters ok, Check the Card Status */
+        //Card is always in slot, don't need detect.
+        //if (SC_Detect() == 0)
+        //{ /* Card is Not detected */
+        //    CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_NO_ICC_PRESENT);
+        //    return SLOTERROR_ICC_MUTE;
+        //}
+    }
+
+    /* Check that DwLength is 0 */
+    if (parameter & CHK_PARAM_DWLENGTH)
+    {
+        if (Ccid_bulkout_data.dwLength != 0)
+        {
+            CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+            return SLOTERROR_BAD_LENTGH;
+        }
+    }
+
+    /* abRFU 2 : Reserved for Future Use*/
+    if (parameter & CHK_PARAM_abRFU2)
+    {
+
+        if ((Ccid_bulkout_data.bSpecific_1 != 0) ||
+            (Ccid_bulkout_data.bSpecific_2 != 0))
+        {
+            CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+            return SLOTERROR_BAD_ABRFU_2B;        /* bSpecific_1 */
+        }
+    }
+
+    if (parameter & CHK_PARAM_abRFU3)
+    {
+        /* abRFU 3 : Reserved for Future Use*/
+        if ((Ccid_bulkout_data.bSpecific_0 != 0) ||
+            (Ccid_bulkout_data.bSpecific_1 != 0) ||
+            (Ccid_bulkout_data.bSpecific_2 != 0))
+        {
+            CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_ACTIVE);
+            return SLOTERROR_BAD_ABRFU_3B;
+        }
+    }
+
+
+    if (parameter & CHK_PARAM_ABORT)
+    {
+        if (usb_ccid_param.bAbortRequestFlag)
+        {
+            CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_INACTIVE);
+            return SLOTERROR_CMD_ABORTED;
+        }
+    }
+
+    if (parameter & CHK_ACTIVE_STATE)
+    {
+        /* Commands Parameters ok, Check the Card Status */
+        /* Card is detected */
+        //Card always active T0/T1 doesn't matter.
+//      if (SC_GetState() != SC_ACTIVE_ON_T0)
+//      {
+//          /* Check that from Lower Layers, the SmartCard come to known state */
+//          CCID_UpdateCommandStatus(BM_COMMAND_STATUS_FAILED, BM_ICC_PRESENT_INACTIVE);
+//          return SLOTERROR_HW_ERROR;
+//      }
+    }
+
+    return 0;
+}
+
+
+	
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_core.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_core.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_core.h	(working copy)
@@ -0,0 +1,68 @@
+/**
+  ******************************************************************************
+  * @file    usbd_ccid_core.h
+  * @author  MCD Application Team
+  * @version V1.0.1
+  * @date    31-January-2014
+  * @brief   This file provides all the CCID core functions.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef _USB_CCID_CORE_H_
+#define _USB_CCID_CORE_H_
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_req.h"
+#include "sc_itf.h"
+//#include "usbd_ccid_if.h"
+
+
+/* Exported defines ----------------------------------------------------------*/
+#define TPDU_EXCHANGE                  0x01
+#define SHORT_APDU_EXCHANGE            0x02
+#define EXTENDED_APDU_EXCHANGE         0x04
+#define CHARACTER_EXCHANGE             0x00
+
+#define EXCHANGE_LEVEL_FEATURE         TPDU_EXCHANGE
+
+#define REQUEST_ABORT                  0x01
+#define REQUEST_GET_CLOCK_FREQUENCIES  0x02
+#define REQUEST_GET_DATA_RATES         0x03
+
+#define SMARTCARD_SIZ_CONFIG_DESC      93 
+
+#define CCID_BULK_EPIN_SIZE          CCID_BULK_EP_MAX_PACKET 
+#define CCID_BULK_EPOUT_SIZE         CCID_BULK_EP_MAX_PACKET  
+#define CCID_INTR_EPIN_SIZE          CCID_INTR_EP_MAX_PACKET
+#define CCID_EP0_BUFF_SIZ            64
+#define BULK_MAX_PACKET_SIZE 0x40
+extern uint8_t BulkOut_Data_Buff[BULK_MAX_PACKET_SIZE];
+
+/* Exported types ------------------------------------------------------------*/
+/* Exported macros -----------------------------------------------------------*/
+/* Exported variables --------------------------------------------------------*/
+extern USBD_Class_cb_TypeDef  USBD_CCID_cb;
+/* Exported functions ------------------------------------------------------- */
+uint8_t USBD_CCID_DataOut(void *pdev,
+                                 uint8_t epnum);
+#endif  /* _USB_CCID_CORE_H_ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_core.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_core.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_core.c	(working copy)
@@ -0,0 +1,469 @@
+/**
+  ******************************************************************************
+  * @file    usbd_ccid_core.c
+  * @author  MCD Application Team
+  * @version V1.0.1
+  * @date    31-January-2014
+  * @brief   This file provides all the CCID core functions.
+  *
+  * @verbatim
+  *
+  *          ===================================================================
+  *                                CCID Class  Description
+  *          ===================================================================
+  *           This module manages the Specification for Integrated Circuit(s)
+  *             Cards Interface Revision 1.1
+  *           This driver implements the following aspects of the specification:
+  *             - Bulk Transfers
+  *
+  *  @endverbatim
+  *
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_ccid_core.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+static uint8_t USBD_CCID_Init(void *pdev,
+                              uint8_t cfgidx);
+
+static uint8_t USBD_CCID_DeInit(void *pdev,
+                                uint8_t cfgidx);
+
+static uint8_t USBD_CCID_Setup(void *pdev,
+                               USB_SETUP_REQ *req);
+
+static uint8_t USBD_CCID_DataIn(void *pdev,
+                                uint8_t epnum);
+
+
+uint8_t USBD_CCID_DataOut(void *pdev,
+                                 uint8_t epnum);
+
+static uint8_t* USBD_CCID_GetCfgDesc(uint8_t speed,
+                                     uint16_t *length);
+
+static uint8_t USBD_CCID_EP0_Buff[CCID_EP0_BUFF_SIZ];
+
+USBD_Class_cb_TypeDef USBD_CCID_cb =
+{
+    USBD_CCID_Init,
+    USBD_CCID_DeInit,
+    USBD_CCID_Setup,
+    NULL, /*EP0_TxSent*/
+    NULL, /*EP0_RxReady*/
+    USBD_CCID_DataIn,
+    USBD_CCID_DataOut,
+    NULL, /*SOF */
+    NULL,
+    NULL,
+    USBD_CCID_GetCfgDesc,
+};
+
+/* USB Mass storage device Configuration Descriptor */
+/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
+const uint8_t USBD_CCID_CfgDesc[SMARTCARD_SIZ_CONFIG_DESC] =
+{
+
+    0x09,   /* bLength: Configuration Descriptor size */
+    USB_DESC_TYPE_CONFIGURATION,   /* bDescriptorType: Configuration */
+    SMARTCARD_SIZ_CONFIG_DESC,
+
+    0x00,
+    0x01,   /* bNumInterfaces: 1 interface */
+    0x01,   /* bConfigurationValue: */
+    0x04,   /* iConfiguration: */
+    0x80,         /*bmAttributes: bus powered */
+    0x32,   /* MaxPower 100 mA */
+
+    /********************  CCID **** interface ********************/
+    0x09,   /* bLength: Interface Descriptor size */
+    0x04,   /* bDescriptorType: */
+    0x00,   /* bInterfaceNumber: Number of Interface */
+    0x00,   /* bAlternateSetting: Alternate setting */
+    0x03,   /* bNumEndpoints: 3 endpoints used */
+    0x0B,   /* bInterfaceClass: user's interface for CCID */
+    0x00,   /* bInterfaceSubClass : */
+    0x00,   /* nInterfaceProtocol : None */
+    0x05,   /* iInterface: */
+
+    /*******************  CCID class descriptor ********************/
+    0x36,   /* bLength: CCID Descriptor size */
+    0x21,   /* bDescriptorType: Functional Descriptor type. */
+    0x10,   /* bcdCCID(LSB): CCID Class Spec release number (1.00) */
+    0x01,   /* bcdCCID(MSB) */
+
+    0x00,   /* bMaxSlotIndex :highest available slot on this device */
+    0x03,   /* bVoltageSupport: bit Wise OR for 01h-5.0V 02h-3.0V
+                                      04h 1.8V*/
+
+    0x01, 0x00, 0x00, 0x00,  /* dwProtocols: 0001h = Protocol T=0 */
+    0x10, 0x0E, 0x00, 0x00,  /* dwDefaultClock: 3.6Mhz = 3600kHz = 0x0E10,
+                                  for 4 Mhz the value is (0x00000FA0) :
+                                 This is used in ETU and waiting time calculations*/
+    0x10, 0x0E, 0x00, 0x00,  /* dwMaximumClock: Maximum supported ICC clock frequency
+                                  in KHz. So, 3.6Mhz = 3600kHz = 0x0E10,
+                                                4 Mhz (0x00000FA0) : */
+    0x00,         /* bNumClockSupported : no setting from PC
+                               If the value is 00h, the
+                              supported clock frequencies are assumed to be the
+                              default clock frequency defined by dwDefaultClock
+                              and the maximum clock frequency defined by
+                              dwMaximumClock */
+
+    0xCD, 0x25, 0x00, 0x00,  /* dwDataRate: Default ICC I/O data rate in bps
+                                 9677 bps = 0x25CD
+                                 for example 10752 bps (0x00002A00) */
+
+    0xCD, 0x25, 0x00, 0x00,  /* dwMaxDataRate: Maximum supported ICC I/O data
+                                 rate in bps */
+    0x00,                 /* bNumDataRatesSupported :
+                           The number of data rates that are supported by the CCID
+                           If the value is 00h, all data rates between the default
+                           data rate dwDataRate and the maximum data rate
+                           dwMaxDataRate are supported.
+                           Dont support GET_CLOCK_FREQUENCIES
+                          */
+
+    0x00, 0x00, 0x00, 0x00,   /* dwMaxIFSD: 0 (T=0 only)   */
+    0x00, 0x00, 0x00, 0x00,   /* dwSynchProtocols  */
+    0x00, 0x00, 0x00, 0x00,   /* dwMechanical: no special characteristics */
+
+    0x38, 0x00, EXCHANGE_LEVEL_FEATURE, 0x00,
+    /* dwFeatures: clk, baud rate, voltage : automatic */
+    /* 00000008h Automatic ICC voltage selection
+    00000010h Automatic ICC clock frequency change
+    00000020h Automatic baud rate change according to
+    active parameters provided by the Host or self
+    determined 00000100h CCID can set
+    ICC in clock stop mode
+
+    Only one of the following values may be present to
+    select a level of exchange:
+    00010000h TPDU level exchanges with CCID
+    00020000h Short APDU level exchange with CCID
+    00040000h Short and Extended APDU level exchange
+    If none of those values : character level of exchange*/
+    0x0F, 0x01, 0x00, 0x00,  /* dwMaxCCIDMessageLength: Maximum block size + header*/
+    /* 261 + 10   */
+
+    0x00,         /* bClassGetResponse*/
+    0x00,         /* bClassEnvelope */
+    0x00, 0x00,        /* wLcdLayout : 0000h no LCD. */
+    0x00,         /* bPINSupport : no PIN verif and modif  */
+    0x01,         /* bMaxCCIDBusySlots  */
+
+    /********************  CCID   Endpoints ********************/
+    0x07,   /*Endpoint descriptor length = 7*/
+    0x05,   /*Endpoint descriptor type */
+    CCID_BULK_IN_EP,   /*Endpoint address (IN, address 1) */
+    0x02,   /*Bulk endpoint type */
+    LOBYTE(CCID_BULK_EPIN_SIZE),
+    HIBYTE(CCID_BULK_EPIN_SIZE),
+    0x00,   /*Polling interval in milliseconds */
+
+    0x07,   /*Endpoint descriptor length = 7 */
+    0x05,   /*Endpoint descriptor type */
+    CCID_BULK_OUT_EP,   /*Endpoint address (OUT, address 1) */
+    0x02,   /*Bulk endpoint type */
+    LOBYTE(CCID_BULK_EPOUT_SIZE),
+    HIBYTE(CCID_BULK_EPOUT_SIZE),
+    0x00,   /*Polling interval in milliseconds*/
+
+
+    0x07,   /*bLength: Endpoint Descriptor size*/
+    0x05,   /*bDescriptorType:*/
+    CCID_INTR_IN_EP,    /*bEndpointAddress: Endpoint Address (IN)*/
+    0x03,   /* bmAttributes: Interrupt endpoint */
+    LOBYTE(CCID_INTR_EPIN_SIZE),
+    HIBYTE(CCID_INTR_EPIN_SIZE),
+    0x18    /*Polling interval in milliseconds */
+};
+
+/* Private function ----------------------------------------------------------*/
+
+/**
+  * @brief  USBD_CCID_Init
+  *         Initialize  the USB CCID Interface
+  * @param  pdev: device instance
+  * @param  cfgidx: configuration index
+  * @retval status
+  */
+static uint8_t USBD_CCID_Init(void *pdev,
+                              uint8_t cfgidx)
+{
+
+    //  DCD_PMA_Config(pdev , CCID_BULK_IN_EP,USB_SNG_BUF,CCID_BULK_TX_ADDRESS);
+    //  DCD_PMA_Config(pdev , CCID_INTR_IN_EP,USB_SNG_BUF,CCID_INT_TX_ADDRESS);
+    //  DCD_PMA_Config(pdev , CCID_BULK_OUT_EP,USB_SNG_BUF,CCID_BULK_RX_ADDRESS);
+
+
+    /* Open EP IN */
+    DCD_EP_Open(pdev,
+                CCID_BULK_IN_EP,
+                CCID_BULK_EPIN_SIZE,
+                USB_OTG_EP_BULK);
+
+    /* Open EP OUT */
+    DCD_EP_Open(pdev,
+                CCID_BULK_OUT_EP,
+                CCID_BULK_EPOUT_SIZE,
+                USB_OTG_EP_BULK);
+
+    /* Open INTR EP IN */
+    DCD_EP_Open(pdev,
+                CCID_INTR_IN_EP,
+                CCID_INTR_EPIN_SIZE,
+                USB_OTG_EP_INT);
+
+    /* Init the CCID  layer */
+    CCID_Init(pdev);
+
+    return USBD_OK;
+}
+
+/**
+  * @brief  USBD_CCID_DeInit
+  *         DeInitilaize the usb ccid configuration
+  * @param  pdev: device instance
+  * @param  cfgidx: configuration index
+  * @retval status
+  */
+static uint8_t USBD_CCID_DeInit(void *pdev,
+                                uint8_t cfgidx)
+{
+    /* Close CCID EPs */
+    DCD_EP_Close(pdev, CCID_BULK_IN_EP);
+    DCD_EP_Close(pdev, CCID_BULK_OUT_EP);
+    DCD_EP_Close(pdev, CCID_INTR_IN_EP);
+
+    /* Un Init the CCID layer */
+    CCID_DeInit(pdev);
+    return USBD_OK;
+}
+
+/**
+  * @brief  USBD_CCID_Setup
+  *         Handle the CCID specific requests
+  * @param  pdev: device instance
+  * @param  req: USB request
+  * @retval status
+  */
+static uint8_t USBD_CCID_Setup(void *pdev, USB_SETUP_REQ *req)
+{
+    uint8_t slot_nb;
+    uint8_t seq_nb;
+    uint16_t len;
+
+    switch (req->bmRequest & USB_REQ_TYPE_MASK)
+    {
+        /* Class request */
+    case USB_REQ_TYPE_CLASS :
+        switch (req->bRequest)
+        {
+        case REQUEST_ABORT :
+
+            if ((req->wLength == 0) &&
+                ((req->bmRequest & 0x80) != 0x80))
+            { /* Check bmRequest : No Data-In stage. 0x80 is Data Direction */
+
+                /* The wValue field contains the slot number (bSlot) in the low byte
+                and the sequence number (bSeq) in the high byte.*/
+                slot_nb = (uint8_t)((req->wValue) & 0x00ff);
+                seq_nb = (uint8_t)(((req->wValue) & 0xff00) >> 8);
+
+                if (CCID_CmdAbort(slot_nb, seq_nb) != 0)
+                { /* If error is returned by lower layer :
+                       Generally Slot# may not have matched */
+                    USBD_CtlError(pdev, req);
+                    return USBD_FAIL;
+                }
+            }
+            else
+            {
+                USBD_CtlError(pdev, req);
+                return USBD_FAIL;
+            }
+            break;
+
+        case REQUEST_GET_CLOCK_FREQUENCIES :
+            if ((req->wValue == 0) &&
+                (req->wLength != 0) &&
+                ((req->bmRequest & 0x80) == 0x80))
+            {   /* Check bmRequest : Data-In stage. 0x80 is Data Direction */
+                /*
+                if (SC_Request_GetClockFrequencies(USBD_CCID_EP0_Buff, &len) != 0)
+                {
+                    USBD_CtlError(pdev, req);
+                    return USBD_FAIL;
+                }
+                else
+                {
+                 */
+                    len = 0;
+                    if (len > CCID_EP0_BUFF_SIZ)
+                    {
+                        len = CCID_EP0_BUFF_SIZ;
+                    }
+
+                    USBD_CtlSendData(pdev,
+                                     USBD_CCID_EP0_Buff,
+                                     len);
+                //}
+            }
+            else
+            {
+                USBD_CtlError(pdev, req);
+                return USBD_FAIL;
+            }
+            break;
+
+        case REQUEST_GET_DATA_RATES :
+            if ((req->wValue == 0) &&
+                (req->wLength != 0) &&
+                ((req->bmRequest & 0x80) == 0x80))
+            {  /* Check bmRequest : Data-In stage. 0x80 is Data Direction */
+
+                /*
+                if (SC_Request_GetDataRates(USBD_CCID_EP0_Buff, &len) != 0)
+                {
+                    USBD_CtlError(pdev, req);
+                    return USBD_FAIL;
+                }
+                else
+                {
+                */
+                    len = 0;
+                    if (len > CCID_EP0_BUFF_SIZ)
+                    {
+                        len = CCID_EP0_BUFF_SIZ;
+                    }
+
+                    USBD_CtlSendData(pdev,
+                                     USBD_CCID_EP0_Buff,
+                                     len);
+                //}
+            }
+            else
+            {
+                USBD_CtlError(pdev, req);
+                return USBD_FAIL;
+            }
+            break;
+
+        default:
+            USBD_CtlError(pdev, req);
+            return USBD_FAIL;
+        }
+        break;
+        /* Interface & Endpoint request */
+    case USB_REQ_TYPE_STANDARD:
+        switch (req->bRequest)
+        {
+        case USB_REQ_GET_INTERFACE :
+            break;
+
+        case USB_REQ_SET_INTERFACE :
+            break;
+
+        case USB_REQ_CLEAR_FEATURE:
+
+            /* Re-activate the EP */
+            DCD_EP_Close(pdev, (uint8_t)req->wIndex);
+            if ((((uint8_t)req->wIndex) & 0x80) == 0x80)
+            {
+                DCD_EP_Open(pdev,
+                            ((uint8_t)req->wIndex),
+                            CCID_BULK_EPIN_SIZE,
+                            USB_OTG_EP_BULK);
+            }
+            else
+            {
+                DCD_EP_Open(pdev,
+                            ((uint8_t)req->wIndex),
+                            CCID_BULK_EPOUT_SIZE,
+                            USB_OTG_EP_BULK);
+            }
+
+            break;
+
+        }
+        break;
+
+    default:
+        break;
+    }
+    return USBD_OK;
+}
+
+/**
+  * @brief  USBD_CCID_DataIn
+  *         handle data IN Stage
+  * @param  pdev: device instance
+  * @param  epnum: endpoint index
+  * @retval status
+  */
+static uint8_t USBD_CCID_DataIn(void *pdev,
+                                uint8_t epnum)
+{
+    CCID_BulkMessage_In(pdev, epnum);
+    return USBD_OK;
+}
+
+/**
+  * @brief  USBD_CCID_DataOut
+  *         handle data OUT Stage
+  * @param  pdev: device instance
+  * @param  epnum: endpoint index
+  * @retval status
+  */
+uint8_t USBD_CCID_DataOut(void *pdev,
+                                 uint8_t epnum)
+{
+
+//			MyPrintf("333333\n");
+
+    DCD_EP_PrepareRx(pdev,
+                                     CCID_BULK_OUT_EP,
+                                     (uint8_t *)&BulkOut_Data_Buff[0],
+                                     CCID_BULK_EPOUT_SIZE);
+    CCID_BulkMessage_Out(pdev, epnum);
+    return USBD_OK;
+}
+
+/**
+  * @brief  USBD_CCID_GetCfgDesc
+  *         return configuration descriptor
+  * @param  speed : current device speed
+  * @param  length : pointer data length
+  * @retval pointer to descriptor buffer
+  */
+static uint8_t* USBD_CCID_GetCfgDesc(uint8_t speed, uint16_t *length)
+{
+    *length = sizeof(USBD_CCID_CfgDesc);
+    return (uint8_t *)USBD_CCID_CfgDesc;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_if.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_if.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_if.h	(working copy)
@@ -0,0 +1,184 @@
+/**
+  ******************************************************************************
+  * @file    usbd_ccid_if.h
+  * @author  MCD Application Team
+  * @version V1.0.1
+  * @date    31-January-2014
+  * @brief   This file provides all the functions prototypes for USB CCID
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CCID_IF_H
+#define __USBD_CCID_IF_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_ccid_core.h"
+
+/* Exported defines ----------------------------------------------------------*/
+/* Bulk-only Command Block Wrapper */
+#define ABDATA_SIZE 261
+#define CCID_CMD_HEADER_SIZE 10
+#define CCID_RESPONSE_HEADER_SIZE 10
+
+
+#define CCID_INT_BUFF_SIZ 2
+
+#define CARD_SLOT_FITTED  1
+#define CARD_SLOT_REMOVED  0
+
+#define BULK_MAX_PACKET_SIZE 0x40
+#define CCID_IN_EP_SIZE   0x40
+#define INTR_MAX_PACKET_SIZE 8
+#define CCID_MESSAGE_HEADER_SIZE 10
+#define CCID_NUMBER_OF_SLOTS     1       
+                         /* Number of SLOTS. For single card, this value is 1 */
+
+/* Following Parameters used in PC_to_RDR_IccPowerOn */
+#define VOLTAGE_SELECTION_AUTOMATIC  0xFF
+#define VOLTAGE_SELECTION_3V  0x02
+#define VOLTAGE_SELECTION_5V  0x01
+#define VOLTAGE_SELECTION_1V8 0x03
+
+#define		PC_TO_RDR_ICCPOWERON		0x62
+#define		PC_TO_RDR_ICCPOWEROFF		0x63
+#define		PC_TO_RDR_GETSLOTSTATUS		0x65
+#define		PC_TO_RDR_XFRBLOCK	        0x6F
+#define		PC_TO_RDR_GETPARAMETERS		0x6C
+#define		PC_TO_RDR_RESETPARAMETERS	0x6D
+#define		PC_TO_RDR_SETPARAMETERS		0x61
+#define		PC_TO_RDR_ESCAPE		0x6B
+#define		PC_TO_RDR_ICCCLOCK		0x6E
+#define		PC_TO_RDR_T0APDU		0x6A
+#define		PC_TO_RDR_SECURE		0x69
+#define		PC_TO_RDR_MECHANICAL		0x71
+#define		PC_TO_RDR_ABORT			0x72
+#define		PC_TO_RDR_SETDATARATEANDCLOCKFREQUENCY		0x73
+
+#define		RDR_TO_PC_DATABLOCK		0x80
+#define		RDR_TO_PC_SLOTSTATUS		0x81
+#define		RDR_TO_PC_PARAMETERS		0x82
+#define		RDR_TO_PC_ESCAPE		0x83
+#define		RDR_TO_PC_DATARATEANDCLOCKFREQUENCY		0x84
+
+#define		RDR_TO_PC_NOTIFYSLOTCHANGE	0x50
+#define		RDR_TO_PC_HARDWAREERROR		0x51
+
+#define         OFFSET_INT_BMESSAGETYPE  0
+#define         OFFSET_INT_BMSLOTICCSTATE 1
+#define         SLOT_ICC_PRESENT 0x01  
+                /* LSb : (0b = no ICC present, 1b = ICC present) */
+
+#define         SLOT_ICC_CHANGE  0x02  /* MSb : (0b = no change, 1b = change) */
+/*****************************************************************************/
+/*********************** CCID Bulk Transfer State machine ********************/
+/*****************************************************************************/
+#define CCID_STATE_IDLE                      0       /* Idle state */
+#define CCID_STATE_DATA_OUT                  1       /* Data Out state */
+#define CCID_STATE_RECEIVE_DATA              2
+#define CCID_STATE_SEND_RESP                 3
+#define CCID_STATE_DATAIN                    4
+#define CCID_STATE_UNCORRECT_LENGTH          5
+
+#define DIR_IN                        0
+#define DIR_OUT                       1
+#define BOTH_DIR                      2
+
+/* Exported types ------------------------------------------------------------*/
+#pragma pack(1)
+typedef struct 
+{ 
+  uint8_t bMessageType; /* Offset = 0*/
+  uint32_t dwLength;    /* Offset = 1, The length field (dwLength) is the length  
+                          of the message not including the 10-byte header.*/
+  uint8_t bSlot;        /* Offset = 5*/
+  uint8_t bSeq;         /* Offset = 6*/
+  uint8_t bSpecific_0;  /* Offset = 7*/
+  uint8_t bSpecific_1;  /* Offset = 8*/
+  uint8_t bSpecific_2;  /* Offset = 9*/
+  uint8_t abData [ABDATA_SIZE]; /* Offset = 10, For reference, the absolute 
+                           maximum block size for a TPDU T=0 block is 260 bytes 
+                           (5 bytes command; 255 bytes data), 
+                           or for a TPDU T=1 block is 259 bytes, 
+                           or for a short APDU T=1 block is 261 bytes, 
+                           or for an extended APDU T=1 block is 65544 bytes.*/
+} Ccid_bulkout_data_t; 
+#pragma pack()
+
+#pragma pack(1)
+typedef struct 
+{ 
+  uint8_t bMessageType;   /* Offset = 0*/
+  uint32_t dwLength;      /* Offset = 1*/
+  uint8_t bSlot;          /* Offset = 5, Same as Bulk-OUT message */
+  uint8_t bSeq;           /* Offset = 6, Same as Bulk-OUT message */
+  uint8_t bStatus;        /* Offset = 7, Slot status as defined in  6.2.6*/
+  uint8_t bError;         /* Offset = 8, Slot error  as defined in  6.2.6*/
+  uint8_t bSpecific;      /* Offset = 9*/
+  uint8_t abData[ABDATA_SIZE]; /* Offset = 10*/
+  uint16_t u16SizeToSend; 
+} Ccid_bulkin_data_t; 
+#pragma pack()
+
+typedef struct 
+{ 
+  volatile uint8_t SlotStatus;
+  volatile uint8_t SlotStatusChange;
+} Ccid_SlotStatus_t; 
+
+
+typedef struct 
+{ 
+  volatile uint8_t bAbortRequestFlag; 
+  volatile uint8_t bSeq; 
+  volatile uint8_t bSlot;
+} usb_ccid_param_t; 
+
+extern usb_ccid_param_t usb_ccid_param;
+extern Ccid_bulkout_data_t Ccid_bulkout_data; /* Buffer for the Out Data */
+extern Ccid_bulkin_data_t Ccid_bulkin_data;   /* Buffer for the IN Data */
+extern Ccid_SlotStatus_t Ccid_SlotStatus;
+extern uint8_t UsbIntMessageBuffer[];
+extern uint8_t Ccid_BulkState;
+
+/* Exported macros -----------------------------------------------------------*/
+/* Exported variables --------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */ 
+void CCID_BulkMessage_In (USB_OTG_CORE_HANDLE  *pdev, 
+                     uint8_t epnum);
+
+void CCID_BulkMessage_Out (USB_OTG_CORE_HANDLE  *pdev, 
+                            uint8_t epnum);                         
+
+void CCID_ReceiveCmdHeader(uint8_t* pDst, uint8_t u8length);
+void CCID_CmdDecode(USB_OTG_CORE_HANDLE  *pdev);
+
+void CCID_IntMessage(USB_OTG_CORE_HANDLE  *pdev);
+void CCID_Init(USB_OTG_CORE_HANDLE  *pdev);
+void CCID_DeInit(USB_OTG_CORE_HANDLE  *pdev);
+
+uint8_t CCID_IsIntrTransferComplete(void);
+void CCID_SetIntrTransferStatus (uint8_t );
+void Transfer_Data_Request(uint8_t* dataPointer, uint16_t dataLen);
+void Set_CSW (uint8_t CSW_Status, uint8_t Send_Permission);
+
+#endif /* __USBD_CCID_IF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_if.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_if.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/class/ccid/usbd_ccid_if.c	(working copy)
@@ -0,0 +1,493 @@
+/**
+  ******************************************************************************
+  * @file    usbd_ccid_if.c
+  * @author  MCD Application Team
+  * @version V1.0.1
+  * @date    31-January-2014
+  * @brief   This file provides all the functions for USB Interface for CCID
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_ccid_if.h"
+#include "usbd_ccid_core.h"
+#include "usbd_ioreq.h"
+#include "usbd_usr.h"
+#include "yc3121.h"
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+uint8_t Ccid_BulkState;
+uint8_t UsbIntMessageBuffer[INTR_MAX_PACKET_SIZE];  /* data buffer*/
+volatile uint8_t PrevXferComplete_IntrIn;
+usb_ccid_param_t usb_ccid_param;
+
+uint8_t *pUsbMessageBuffer;
+static uint32_t UsbMessageLength;
+Ccid_bulkin_data_t pCcid_resp_buff;
+Ccid_SlotStatus_t Ccid_SlotStatus;
+
+
+uint8_t BulkOut_Data_Buff[BULK_MAX_PACKET_SIZE];
+
+Ccid_bulkin_data_t Ccid_bulkin_data;
+
+Ccid_bulkout_data_t Ccid_bulkout_data;
+
+uint8_t UsbIntMessageBuffer[INTR_MAX_PACKET_SIZE];
+
+/* Private function prototypes -----------------------------------------------*/
+static void CCID_Response_SendData(USB_OTG_CORE_HANDLE *pdev,
+                                   uint8_t *pbuf,
+                                   uint16_t len);
+
+
+
+
+/* Private function ----------------------------------------------------------*/
+/**
+  * @brief  CCID_Init
+  *         Initialize the CCID USB Layer
+  * @param  pdev: device instance
+  * @retval None
+  */
+void CCID_Init(USB_OTG_CORE_HANDLE *pdev)
+{
+    /* CCID Related Initialization */
+    CCID_SetIntrTransferStatus(1);  /* Transfer Complete Status */
+    CCID_UpdSlotChange(1);
+    //SC_InitParams();
+
+//    /* Prepare EP to Receive First Cmd */
+//    DCD_EP_PrepareRx(pdev,
+//                     CCID_BULK_OUT_EP,
+//                     (uint8_t *)&BulkOut_Data_Buff[0],
+//                     CCID_BULK_EPOUT_SIZE);
+}
+
+/**
+  * @brief  CCID_DeInit
+  *         Uninitialize the CCID Machine
+  * @param  pdev: device instance
+  * @retval None
+  */
+void CCID_DeInit(USB_OTG_CORE_HANDLE *pdev)
+{
+    Ccid_BulkState = CCID_STATE_IDLE;
+}
+
+/**
+  * @brief  CCID_Message_In
+  *         Handle Bulk IN & Intr IN data stage
+  * @param  pdev: device instance
+  * @param  uint8_t epnum: endpoint index
+  * @retval None
+  */
+void CCID_BulkMessage_In(USB_OTG_CORE_HANDLE *pdev,
+                         uint8_t epnum)
+{
+    if (epnum == (CCID_BULK_IN_EP & 0x7F))
+    { /* Filter the epnum by masking with 0x7f (mask of IN Direction)  */
+
+        /*************** Handle Bulk Transfer IN data completion  *****************/
+
+        //    /* Toggle LED1 */
+        //    STM_EVAL_LEDToggle(LED1);
+
+//        switch (Ccid_BulkState)
+//        {
+//        case CCID_STATE_SEND_RESP:
+
+//            Ccid_BulkState = CCID_STATE_IDLE;
+
+//            /* Prepare EP to Receive First Cmd */
+//            DCD_EP_PrepareRx(pdev,
+//                             CCID_BULK_OUT_EP,
+//                             (uint8_t *)&BulkOut_Data_Buff[0],
+//                             CCID_BULK_EPOUT_SIZE);
+
+//            break;
+
+//        default:
+//            break;
+//        }
+    }
+    else if (epnum == (CCID_INTR_IN_EP & 0x7F))
+    {
+        /* Filter the epnum by masking with 0x7f (mask of IN Direction)  */
+        CCID_SetIntrTransferStatus(1);  /* Transfer Complete Status */
+    }
+}
+
+
+#define CCID_DATA_TIMEOUT	(20)	//CCID_DATA_TIMEOUT*50us
+uint32_t ccid_wait_data_time;
+uint32_t ccid_wait_data_len;
+void CCID_wait_next_packet(USB_OTG_CORE_HANDLE *pdev,uint8_t epnum)
+{
+	ccid_wait_data_time=0;
+	while(ccid_wait_data_time<CCID_DATA_TIMEOUT)
+	{
+		ccid_wait_data_len = USB_OTG_READ_REG8(pdev->regs.LENREGS[epnum]);
+		if(ccid_wait_data_len>=CCID_BULK_EPOUT_SIZE ||\
+			 ((UsbMessageLength+ccid_wait_data_len) == (Ccid_bulkout_data.dwLength + CCID_CMD_HEADER_SIZE)))
+		{
+			break;
+		}
+        ((void(*)(int))(FUNC_DELAY_US_ADDR))(50);
+		ccid_wait_data_time++;
+	}
+}
+
+
+
+/**
+  * @brief  CCID_BulkMessage_Out
+  *         Proccess CCID OUT data
+  * @param  pdev: device instance
+  * @param  uint8_t epnum: endpoint index
+  * @retval None
+  */
+void CCID_BulkMessage_Out(USB_OTG_CORE_HANDLE *pdev,
+                          uint8_t epnum)
+{
+
+    uint16_t dataLen;
+    dataLen = USBD_GetRxCount(pdev, CCID_BULK_OUT_EP);
+    switch (Ccid_BulkState)
+    {
+    case CCID_STATE_IDLE:
+    case CCID_STATE_SEND_RESP:
+        if (dataLen == 0x00)
+        { /* Zero Length Packet Received */
+            Ccid_BulkState = CCID_STATE_IDLE;
+        }
+        else if (dataLen >= CCID_MESSAGE_HEADER_SIZE)
+        {
+            UsbMessageLength = dataLen;   /* Store for future use */
+
+            /* Expected Data Length Packet Received */
+            pUsbMessageBuffer = (uint8_t *)&Ccid_bulkout_data;
+
+            /* Fill CCID_BulkOut Data Buffer from USB Buffer */
+            CCID_ReceiveCmdHeader(pUsbMessageBuffer, dataLen);
+
+            /*
+            Refer : 6 CCID Messages
+            The response messages always contain the exact same slot number,
+            and sequence number fields from the header that was contained in
+            the Bulk-OUT command message.
+            */
+            Ccid_bulkin_data.bSlot = Ccid_bulkout_data.bSlot;
+            Ccid_bulkin_data.bSeq = Ccid_bulkout_data.bSeq;
+
+            if (dataLen < CCID_BULK_EPOUT_SIZE)
+            { /* Short message, less than the EP Out Size, execute the command,
+               if parameter like dwLength is too big, the appropriate command will
+               give an error */
+                //MyPrintf("> Enter CCID_CmdDecode\r\n");
+                CCID_CmdDecode(pdev);
+                //MyPrintf("> Exit CCID_CmdDecode\r\n");
+            }
+            else
+            { /* Long message, receive additional data with command */
+                /* (u8dataLen == CCID_BULK_EPOUT_SIZE) */
+                if (Ccid_bulkout_data.dwLength > ABDATA_SIZE)
+                { /* Check if length of data to be sent by host is > buffer size */
+
+                    /* Too long data received.... Error ! */
+                    Ccid_BulkState = CCID_STATE_UNCORRECT_LENGTH;
+                }
+
+                else
+                { /* Expect more data on OUT EP */
+                    Ccid_BulkState = CCID_STATE_RECEIVE_DATA;
+                    pUsbMessageBuffer += dataLen;  /* Point to new offset */
+
+                    /* Prepare EP to Receive next Cmd */
+//                    DCD_EP_PrepareRx(pdev,
+//                                     CCID_BULK_OUT_EP,
+//                                     (uint8_t *)&BulkOut_Data_Buff[0],
+//                                     CCID_BULK_EPOUT_SIZE);
+
+									//delay_us(300);
+									CCID_wait_next_packet(pdev,CCID_BULK_OUT_EP);
+
+									USBD_CCID_DataOut(pdev,epnum);
+
+                } /* if (dataLen == CCID_BULK_EPOUT_SIZE) ends */
+            } /*  if (dataLen >= CCID_BULK_EPOUT_SIZE) ends */
+        } /* if (dataLen >= CCID_MESSAGE_HEADER_SIZE) ends */
+        break;
+
+    case CCID_STATE_RECEIVE_DATA:
+
+        UsbMessageLength += dataLen;
+
+        if (dataLen < CCID_BULK_EPOUT_SIZE)
+        { /* Short message, less than the EP Out Size, execute the command,
+             if parameter like dwLength is too big, the appropriate command will
+             give an error */
+
+            /* Full command is received, process the Command */
+
+            CCID_ReceiveCmdHeader(pUsbMessageBuffer, dataLen);
+            CCID_CmdDecode(pdev);
+            Ccid_BulkState = CCID_STATE_IDLE;
+        }
+        else if (dataLen == CCID_BULK_EPOUT_SIZE)
+        {
+
+            if (UsbMessageLength < (Ccid_bulkout_data.dwLength + CCID_CMD_HEADER_SIZE))
+            {
+                CCID_ReceiveCmdHeader(pUsbMessageBuffer, dataLen); /* Copy data */
+                pUsbMessageBuffer += dataLen;
+                /* Increment the pointer to receive more data */
+
+                /* Prepare EP to Receive next Cmd */
+//                DCD_EP_PrepareRx(pdev,
+//                                 CCID_BULK_OUT_EP,
+//                                 (uint8_t *)&BulkOut_Data_Buff[0],
+//                                 CCID_BULK_EPOUT_SIZE);
+								//delay_us(300);
+								CCID_wait_next_packet(pdev,CCID_BULK_OUT_EP);
+
+								USBD_CCID_DataOut(pdev,epnum);
+            }
+            else if (UsbMessageLength == (Ccid_bulkout_data.dwLength + CCID_CMD_HEADER_SIZE))
+            {
+                /* Full command is received, process the Command */
+                CCID_ReceiveCmdHeader(pUsbMessageBuffer, dataLen);
+                CCID_CmdDecode(pdev);
+            }
+            else
+            {
+                /* Too long data received.... Error ! */
+                Ccid_BulkState = CCID_STATE_UNCORRECT_LENGTH;
+            }
+        }
+
+        break;
+
+    case CCID_STATE_UNCORRECT_LENGTH:
+        Ccid_BulkState = CCID_STATE_IDLE;
+        break;
+
+    default:
+        break;
+    }
+}
+
+/**
+  * @brief  CCID_CmdDecode
+  *         Parse the commands and Proccess command
+  * @param  pdev: device instance
+  * @retval None
+  */
+void CCID_CmdDecode(USB_OTG_CORE_HANDLE *pdev)
+{
+    uint8_t errorCode;
+//		MyPrintf("type =%x\r\n",Ccid_bulkout_data.bMessageType);
+    switch (Ccid_bulkout_data.bMessageType)
+    {
+    case PC_TO_RDR_ICCPOWERON:
+        MyPrintf("On\r\n");
+        errorCode = PC_to_RDR_IccPowerOn();
+        RDR_to_PC_DataBlock(errorCode);
+        break;
+    case PC_TO_RDR_ICCPOWEROFF:
+        MyPrintf("Off\r\n");
+        errorCode = PC_to_RDR_IccPowerOff();
+        RDR_to_PC_SlotStatus(errorCode);
+        break;
+
+    case PC_TO_RDR_GETSLOTSTATUS:
+        MyPrintf("St\r\n");
+        errorCode = PC_to_RDR_GetSlotStatus();
+        RDR_to_PC_SlotStatus(errorCode);
+        break;
+    case PC_TO_RDR_XFRBLOCK:
+        MyPrintf("Sd\r\n");
+        errorCode = PC_to_RDR_XfrBlock();
+        //Need to process then send RESP APDU
+        //RDR_to_PC_DataBlock(errorCode);
+        break;
+
+    case PC_TO_RDR_GETPARAMETERS:
+        MyPrintf("GP\r\n");
+        errorCode = PC_to_RDR_GetParameters();
+        RDR_to_PC_Parameters(errorCode);
+        break;
+    case PC_TO_RDR_RESETPARAMETERS:
+        MyPrintf("RP\r\n");
+        errorCode = PC_to_RDR_ResetParameters();
+        RDR_to_PC_Parameters(errorCode);
+        break;
+
+    case PC_TO_RDR_SETPARAMETERS:
+        MyPrintf("SP\r\n");
+        errorCode = PC_to_RDR_SetParameters();
+        RDR_to_PC_Parameters(errorCode);
+        break;
+    case PC_TO_RDR_ESCAPE:
+        MyPrintf("ES\r\n");
+        errorCode = PC_to_RDR_Escape();
+        RDR_to_PC_Escape(errorCode);
+        break;
+    case PC_TO_RDR_ICCCLOCK:
+        MyPrintf("IC\r\n");
+        errorCode = PC_to_RDR_IccClock();
+        RDR_to_PC_SlotStatus(errorCode);
+        break;
+    case PC_TO_RDR_ABORT:
+        MyPrintf("> Enter PC_TO_RDR_ABORT\r\n");
+        errorCode = PC_to_RDR_Abort();
+        RDR_to_PC_SlotStatus(errorCode);
+        break;
+    case PC_TO_RDR_T0APDU:
+        MyPrintf("T0\r\n");
+        errorCode = PC_TO_RDR_T0Apdu();
+        RDR_to_PC_SlotStatus(errorCode);
+        break;
+    case PC_TO_RDR_MECHANICAL:
+        MyPrintf("ME\r\n");
+        errorCode = PC_TO_RDR_Mechanical();
+        RDR_to_PC_SlotStatus(errorCode);
+        break;
+    case PC_TO_RDR_SETDATARATEANDCLOCKFREQUENCY:
+        MyPrintf("FR\r\n");
+        errorCode = PC_TO_RDR_SetDataRateAndClockFrequency();
+        RDR_to_PC_DataRateAndClockFrequency(errorCode);
+        break;
+    case PC_TO_RDR_SECURE:
+        MyPrintf("SE\r\n");
+        errorCode = PC_TO_RDR_Secure();
+        RDR_to_PC_DataBlock(errorCode);
+        break;
+
+    default:
+        MyPrintf("> Enter default\r\n");
+        RDR_to_PC_SlotStatus(SLOTERROR_CMD_NOT_SUPPORTED);
+        break;
+    }
+
+    /********** Decide for all commands ***************/
+    if (Ccid_BulkState == CCID_STATE_SEND_RESP)
+    {
+        CCID_Response_SendData(pdev, (uint8_t *)&Ccid_bulkin_data,
+                               Ccid_bulkin_data.u16SizeToSend);
+        Ccid_BulkState = CCID_STATE_IDLE;
+//         MyPrintf("bulk_state1 = %d\n",Ccid_BulkState);
+    }
+}
+
+/**
+  * @brief  Transfer_Data_Request
+  *         Prepare the request response to be sent to the host
+  * @param  uint8_t* dataPointer: Pointer to the data buffer to send
+  * @param  uint16_t dataLen : number of bytes to send
+  * @retval None
+  */
+void Transfer_Data_Request(uint8_t *dataPointer, uint16_t dataLen)
+{
+    /**********  Update Global Variables ***************/
+    Ccid_bulkin_data.u16SizeToSend = dataLen;
+    Ccid_BulkState = CCID_STATE_SEND_RESP;
+}
+
+
+/**
+  * @brief  CCID_Response_SendData
+  *         Send the data on bulk-in EP
+  * @param  pdev: device instance
+  * @param  uint8_t* buf: pointer to data buffer
+  * @param  uint16_t len: Data Length
+  * @retval None
+  */
+static void CCID_Response_SendData(USB_OTG_CORE_HANDLE *pdev,
+                                   uint8_t *buf,
+                                   uint16_t len)
+{
+    DCD_EP_Tx(pdev, CCID_BULK_IN_EP, buf, len);
+}
+
+/**
+  * @brief  CCID_IntMessage
+  *         Send the Interrupt-IN data to the host
+  * @param  pdev: device instance
+  * @retval None
+  */
+void CCID_IntMessage(USB_OTG_CORE_HANDLE *pdev)
+{
+    /* Check if there us change in Smartcard Slot status */
+    if (CCID_IsSlotStatusChange() && CCID_IsIntrTransferComplete() )
+    {
+        /* Check Slot Status is changed. Card is Removed/ Fitted  */
+        RDR_to_PC_NotifySlotChange();
+
+        CCID_SetIntrTransferStatus(0);  /* Reset the Status */
+        CCID_UpdSlotChange(0);    /* Reset the Status of Slot Change */
+				my_delay_ms(10);
+        DCD_EP_Tx(pdev, CCID_INTR_IN_EP, UsbIntMessageBuffer, 2);
+    }
+}
+
+/**
+  * @brief  CCID_ReceiveCmdHeader
+  *         Receive the Data from USB BulkOut Buffer to Pointer
+  * @param  uint8_t* pDst: destination address to copy the buffer
+  * @param  uint8_t u8length: length of data to copy
+  * @retval None
+  */
+void CCID_ReceiveCmdHeader(uint8_t *pDst, uint8_t u8length)
+{
+    uint32_t Counter;
+
+    for (Counter = 0; Counter < u8length; Counter++)
+    {
+        *pDst++ = BulkOut_Data_Buff[Counter];
+    }
+
+}
+
+/**
+  * @brief  CCID_IsIntrTransferComplete
+  *         Provides the status of previous Interrupt transfer status
+  * @param  None
+  * @retval uint8_t PrevXferComplete_IntrIn: Value of the previous transfer status
+  */
+uint8_t CCID_IsIntrTransferComplete(void)
+{
+    return PrevXferComplete_IntrIn;
+}
+
+/**
+  * @brief  CCID_IsIntrTransferComplete
+  *         Set the value of the Interrupt transfer status
+  * @param  uint8_t xfer_Status: Value of the Interrupt transfer status to set
+  * @retval None
+  */
+void CCID_SetIntrTransferStatus(uint8_t xfer_Status)
+{
+    PrevXferComplete_IntrIn = xfer_Status;
+}
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_conf_template.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_conf_template.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_conf_template.h	(working copy)
@@ -0,0 +1,67 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usbd_conf_template.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : usb device configuration template file.
+ *****************************************************************************/
+ 
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CONF__H__
+#define __USBD_CONF__H__
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_conf.h"
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */ 
+#define USE_USB_OTG_HS  
+
+#define USBD_CFG_MAX_NUM           1
+#define USB_MAX_STR_DESC_SIZ       64 
+#define USBD_EP0_MAX_PACKET_SIZE   64
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+#endif /* __USBD_CONF__H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_core.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_core.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_core.h	(working copy)
@@ -0,0 +1,105 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usbd_core.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Header file for usbd_core.c.
+ *****************************************************************************/
+ 
+ 
+#ifndef __USBD_CORE_H
+#define __USBD_CORE_H
+
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+    
+/* Includes ------------------------------------------------------------------*/
+#include "usb_dcd.h"
+#include "usbd_def.h"
+#include "usbd_conf.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+  
+/** @defgroup USBD_CORE
+  * @brief This file is the Header file for usbd_core.c file
+  * @{
+  */ 
+
+
+/** @defgroup USBD_CORE_Exported_Defines
+  * @{
+  */ 
+
+typedef enum {
+  USBD_OK   = 0,
+  USBD_BUSY,
+  USBD_FAIL,
+}USBD_Status;
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_CORE_Exported_TypesDefinitions
+  * @{
+  */
+ 
+
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USBD_CORE_Exported_Macros
+  * @{
+  */ 
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_CORE_Exported_Variables
+  * @{
+  */ 
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_CORE_Exported_FunctionsPrototype
+  * @{
+  */ 
+void USBD_Init(USB_OTG_CORE_HANDLE *pdev,
+               USB_OTG_CORE_ID_TypeDef coreID, 
+               USBD_DEVICE *pDevice,                  
+               USBD_Class_cb_TypeDef *class_cb, 
+               USBD_Usr_cb_TypeDef *usr_cb);
+
+USBD_Status USBD_DeInit(USB_OTG_CORE_HANDLE *pdev);
+
+USBD_Status USBD_ClrCfg(USB_OTG_CORE_HANDLE  *pdev, uint8_t cfgidx);
+
+USBD_Status USBD_SetCfg(USB_OTG_CORE_HANDLE  *pdev, uint8_t cfgidx);
+
+/**
+  * @}
+  */ 
+
+#endif /* __USBD_CORE_H */
+
+/**
+  * @}
+  */ 
+
+/**
+* @}
+*/
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_core.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_core.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_core.c	(working copy)
@@ -0,0 +1,426 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : otgd_fs_pcd.c
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Peripheral Device Interface low layer.
+ *****************************************************************************/
+
+/* Include ------------------------------------------------------------------*/
+#include "usbd_core.h"
+#include "usbd_req.h"
+#include "usbd_ioreq.h"
+#include "usb_dcd_int.h"
+#include "usb_bsp.h"
+/* Private typedef ----------------------------------------------------------*/
+/* Private define -----------------------------------------------------------*/
+/* Private macro ------------------------------------------------------------*/
+/* Private variables --------------------------------------------------------*/
+/* Ptivate function prototypes ----------------------------------------------*/
+
+/******************************************************************************
+* Function Name  :
+* Description    :
+* Input          :
+* Output         :
+* Return         :
+******************************************************************************/
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+* @{
+*/
+
+/** @defgroup USBD_CORE_Private_FunctionPrototypes
+* @{
+*/
+static uint8_t USBD_SetupStage(USB_OTG_CORE_HANDLE *pdev);
+static uint8_t USBD_DataOutStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum);
+static uint8_t USBD_DataInStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum);
+static uint8_t USBD_SOF(USB_OTG_CORE_HANDLE  *pdev);
+static uint8_t USBD_Reset(USB_OTG_CORE_HANDLE  *pdev);
+static uint8_t USBD_Suspend(USB_OTG_CORE_HANDLE  *pdev);
+static uint8_t USBD_Resume(USB_OTG_CORE_HANDLE  *pdev);
+#ifdef VBUS_SENSING_ENABLED
+static uint8_t USBD_DevConnected(USB_OTG_CORE_HANDLE  *pdev);
+static uint8_t USBD_DevDisconnected(USB_OTG_CORE_HANDLE  *pdev);
+#endif
+static uint8_t USBD_IsoINIncomplete(USB_OTG_CORE_HANDLE  *pdev);
+static uint8_t USBD_IsoOUTIncomplete(USB_OTG_CORE_HANDLE  *pdev);
+static uint8_t  USBD_RunTestMode (USB_OTG_CORE_HANDLE  *pdev) ;
+/**
+* @}
+*/
+
+
+
+USBD_DCD_INT_cb_TypeDef USBD_DCD_INT_cb =
+{
+    USBD_DataOutStage,
+    USBD_DataInStage,
+    USBD_SetupStage,
+    USBD_SOF,
+    USBD_Reset,
+    USBD_Suspend,
+    USBD_Resume,
+    USBD_IsoINIncomplete,
+    USBD_IsoOUTIncomplete,
+#ifdef VBUS_SENSING_ENABLED
+    USBD_DevConnected,
+    USBD_DevDisconnected,
+#endif
+};
+
+USBD_DCD_INT_cb_TypeDef  *USBD_DCD_INT_fops = &USBD_DCD_INT_cb;
+
+
+/**
+* @brief  USBD_SetupStage
+*         Handle the setup stage
+* @param  pdev: device instance
+* @retval status
+*/
+static uint8_t USBD_SetupStage(USB_OTG_CORE_HANDLE *pdev)
+{
+    USB_SETUP_REQ req;
+//    USB_OTG_CSR0L_IN_PERIPHERAL_TypeDef csr0l;
+//    csr0l.d8 = USB_OTG_READ_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L);
+    USBD_ParseSetupRequest(pdev , &req);
+
+    switch (req.bmRequest & 0x1F)
+    {
+    case USB_REQ_RECIPIENT_DEVICE:
+        USBD_StdDevReq(pdev, &req);
+        break;
+
+    case USB_REQ_RECIPIENT_INTERFACE:
+        USBD_StdItfReq(pdev, &req);
+        break;
+
+    case USB_REQ_RECIPIENT_ENDPOINT:
+        USBD_StdEPReq(pdev, &req);
+        break;
+
+    default:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        DCD_EP_Stall(pdev , req.bmRequest & 0x80);
+        break;
+    }
+    return USBD_OK;
+}
+
+
+
+
+/**
+* @brief  USBD_DataOutStage
+*         Handle data out stage
+* @param  pdev: device instance
+* @param  epnum: endpoint index
+* @retval status
+*/
+static uint8_t USBD_DataOutStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum)
+{
+    USB_OTG_EP *ep;
+
+    if(epnum == 0)
+    {
+        ep = &pdev->dev.out_ep[0];
+        if ( pdev->dev.device_state == USB_OTG_EP0_DATA_OUT)
+        {
+            if(ep->rem_data_len > ep->maxpacket)
+            {
+                ep->rem_data_len -=  ep->maxpacket;
+
+                if(pdev->cfg.dma_enable == 1)
+                {
+                    /* in slave mode this, is handled by the RxSTSQLvl ISR */
+                    ep->xfer_buff += ep->maxpacket;
+                }
+                USBD_CtlContinueRx (pdev,
+                                    ep->xfer_buff,
+                                    MIN(ep->rem_data_len ,ep->maxpacket));
+            }
+            else
+            {
+                if((pdev->dev.class_cb->EP0_RxReady != NULL)&&
+                   (pdev->dev.device_status == USB_OTG_CONFIGURED))
+                {
+                    pdev->dev.class_cb->EP0_RxReady(pdev);
+                }
+                USBD_CtlSendStatus(pdev);
+            }
+        }
+    }
+    else if((pdev->dev.class_cb->DataOut != NULL)&&
+            (pdev->dev.device_status == USB_OTG_CONFIGURED))
+    {
+
+        pdev->dev.class_cb->DataOut(pdev, epnum);
+    }
+    return USBD_OK;
+}
+
+
+/**
+* @brief  USBD_DataInStage
+*         Handle data in stage
+* @param  pdev: device instance
+* @param  epnum: endpoint index
+* @retval status
+*/
+static uint8_t USBD_DataInStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum)
+{
+    USB_OTG_EP *ep;
+
+    if (epnum == 0)
+    {
+//        ep = &pdev->dev.in_ep[0];
+//        if ( pdev->dev.device_state == USB_OTG_EP0_DATA_IN)
+//        {
+//            if (ep->rem_data_len > ep->maxpacket)
+//            {
+//                ep->rem_data_len -=  ep->maxpacket;
+//                if (pdev->cfg.dma_enable == 1)
+//                {
+//                    /* in slave mode this, is handled by the TxFifoEmpty ISR */
+//                    ep->xfer_buff += ep->maxpacket;
+//                }
+//                USBD_CtlContinueSendData (pdev,
+//                                          ep->xfer_buff,
+//                                          ep->rem_data_len);
+//            }
+//            else
+//            { /* last packet is MPS multiple, so send ZLP packet */
+//                if ((ep->total_data_len % ep->maxpacket == 0) &&
+//                    (ep->total_data_len >= ep->maxpacket) &&
+//                    (ep->total_data_len < ep->ctl_data_len ))
+//                {
+
+//                    USBD_CtlContinueSendData(pdev , NULL, 0);
+//                    ep->ctl_data_len = 0;
+//                }
+//                else
+//                {
+//                    if ((pdev->dev.class_cb->EP0_TxSent != NULL)&&
+//                        (pdev->dev.device_status == USB_OTG_CONFIGURED))
+//                    {
+//                        pdev->dev.class_cb->EP0_TxSent(pdev);
+//                    }
+//                    USBD_CtlReceiveStatus(pdev);
+//                }
+//            }
+//        }
+//        if (pdev->dev.test_mode == 1)
+//        {
+//            USBD_RunTestMode(pdev);
+//            pdev->dev.test_mode = 0;
+//        }
+    }
+    else if ((pdev->dev.class_cb->DataIn != NULL)&&
+             (pdev->dev.device_status == USB_OTG_CONFIGURED))
+    {
+        pdev->dev.class_cb->DataIn(pdev, epnum);
+    }
+    return USBD_OK;
+}
+
+
+
+void USBD_Init(USB_OTG_CORE_HANDLE *pdev,
+               USB_OTG_CORE_ID_TypeDef coreID,
+               USBD_DEVICE *pDevice,
+               USBD_Class_cb_TypeDef *class_cb,
+               USBD_Usr_cb_TypeDef *usr_cb)
+{
+
+       /* Hardware Init */
+       USBD_DeInit(pdev);
+
+        /*Register class and user callbacks */
+       pdev->dev.class_cb = class_cb;
+       pdev->dev.usr_cb = usr_cb;
+       pdev->dev.usr_device = pDevice;
+
+       /* set USB OTG core params */
+       DCD_Init(pdev, coreID);
+
+      /* Upon Init call usr callback */
+//      pdev->dev.usr_cb->Init();
+
+
+
+}
+
+
+
+/**
+* @brief  USBD_DeInit
+*         Re-Initialize th device library
+* @param  pdev: device instance
+* @retval status: status
+*/
+USBD_Status USBD_DeInit(USB_OTG_CORE_HANDLE *pdev)
+{
+    /* Software Init */
+
+    return USBD_OK;
+}
+
+
+static uint8_t USBD_Reset(USB_OTG_CORE_HANDLE  *pdev)
+{
+    #if 0
+    /* Open EP0 OUT */
+    DCD_EP_Open(pdev,
+                0x00,
+                USB_OTG_MAX_EP0_SIZE,
+                EP_TYPE_CTRL);
+
+    /* Open EP0 IN */
+    DCD_EP_Open(pdev,
+                0x80,
+                USB_OTG_MAX_EP0_SIZE,
+                EP_TYPE_CTRL);
+    #endif
+    /* Upon Reset call usr call back */
+    pdev->dev.device_status = USB_OTG_DEFAULT;
+    pdev->dev.usr_cb->DeviceReset(pdev->cfg.speed);
+
+    return USBD_OK;
+}
+
+/**
+* @brief  USBD_Resume
+*         Handle Resume event
+* @param  pdev: device instance
+* @retval status
+*/
+
+static uint8_t USBD_Resume(USB_OTG_CORE_HANDLE  *pdev)
+{
+    /* Upon Resume call usr call back */
+    pdev->dev.usr_cb->DeviceResumed();
+    pdev->dev.device_status = pdev->dev.device_old_status;
+    pdev->dev.device_status = USB_OTG_CONFIGURED;
+    return USBD_OK;
+}
+
+
+/**
+* @brief  USBD_Suspend
+*         Handle Suspend event
+* @param  pdev: device instance
+* @retval status
+*/
+
+static uint8_t USBD_Suspend(USB_OTG_CORE_HANDLE  *pdev)
+{
+    pdev->dev.device_old_status = pdev->dev.device_status;
+    pdev->dev.device_status  = USB_OTG_SUSPENDED;
+    /* Upon Resume call usr call back */
+    pdev->dev.usr_cb->DeviceSuspended();
+    return USBD_OK;
+}
+
+
+/**
+* @brief  USBD_SOF
+*         Handle SOF event
+* @param  pdev: device instance
+* @retval status
+*/
+
+static uint8_t USBD_SOF(USB_OTG_CORE_HANDLE  *pdev)
+{
+    if (pdev->dev.class_cb->SOF)
+    {
+        pdev->dev.class_cb->SOF(pdev);
+    }
+    return USBD_OK;
+}
+/**
+* @brief  USBD_SetCfg
+*        Configure device and start the interface
+* @param  pdev: device instance
+* @param  cfgidx: configuration index
+* @retval status
+*/
+
+USBD_Status USBD_SetCfg(USB_OTG_CORE_HANDLE  *pdev, uint8_t cfgidx)
+{
+    pdev->dev.class_cb->Init(pdev, cfgidx);
+
+    /* Upon set config call usr call back */
+    pdev->dev.usr_cb->DeviceConfigured();
+    return USBD_OK;
+}
+
+/**
+* @brief  USBD_ClrCfg
+*         Clear current configuration
+* @param  pdev: device instance
+* @param  cfgidx: configuration index
+* @retval status: USBD_Status
+*/
+USBD_Status USBD_ClrCfg(USB_OTG_CORE_HANDLE  *pdev, uint8_t cfgidx)
+{
+    pdev->dev.class_cb->DeInit(pdev, cfgidx);
+    return USBD_OK;
+}
+
+/**
+* @brief  USBD_IsoINIncomplete
+*         Handle iso in incomplete event
+* @param  pdev: device instance
+* @retval status
+*/
+static uint8_t USBD_IsoINIncomplete(USB_OTG_CORE_HANDLE  *pdev)
+{
+    pdev->dev.class_cb->IsoINIncomplete(pdev);
+    return USBD_OK;
+}
+
+/**
+* @brief  USBD_IsoOUTIncomplete
+*         Handle iso out incomplete event
+* @param  pdev: device instance
+* @retval status
+*/
+static uint8_t USBD_IsoOUTIncomplete(USB_OTG_CORE_HANDLE  *pdev)
+{
+    pdev->dev.class_cb->IsoOUTIncomplete(pdev);
+    return USBD_OK;
+}
+
+#ifdef VBUS_SENSING_ENABLED
+/**
+* @brief  USBD_DevConnected
+*         Handle device connection event
+* @param  pdev: device instance
+* @retval status
+*/
+static uint8_t USBD_DevConnected(USB_OTG_CORE_HANDLE  *pdev)
+{
+    pdev->dev.usr_cb->DeviceConnected();
+    pdev->dev.connection_status = 1;
+    return USBD_OK;
+}
+
+/**
+* @brief  USBD_DevDisconnected
+*         Handle device disconnection event
+* @param  pdev: device instance
+* @retval status
+*/
+static uint8_t USBD_DevDisconnected(USB_OTG_CORE_HANDLE  *pdev)
+{
+    pdev->dev.usr_cb->DeviceDisconnected();
+    pdev->dev.class_cb->DeInit(pdev, 0);
+    pdev->dev.connection_status = 0;
+    return USBD_OK;
+}
+
+
+#endif
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_def.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_def.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_def.h	(working copy)
@@ -0,0 +1,143 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usbd_def.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : general defines for the usb device library.
+ *****************************************************************************/
+ 
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_DEF_H
+#define __USBD_DEF_H
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_conf.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+  
+/** @defgroup USB_DEF
+  * @brief general defines for the usb device library file
+  * @{
+  */ 
+
+/** @defgroup USB_DEF_Exported_Defines
+  * @{
+  */ 
+
+#ifndef NULL
+#define NULL    0
+#endif
+
+#define  USB_LEN_DEV_QUALIFIER_DESC                     0x0A
+#define  USB_LEN_DEV_DESC                               0x12
+#define  USB_LEN_CFG_DESC                               0x09
+#define  USB_LEN_IF_DESC                                0x09
+#define  USB_LEN_EP_DESC                                0x07
+#define  USB_LEN_OTG_DESC                               0x03
+
+#define  USBD_IDX_LANGID_STR                            0x00 
+#define  USBD_IDX_MFC_STR                               0x01 
+#define  USBD_IDX_PRODUCT_STR                           0x02
+#define  USBD_IDX_SERIAL_STR                            0x03 
+#define  USBD_IDX_CONFIG_STR                            0x04 
+#define  USBD_IDX_INTERFACE_STR                         0x05 
+
+#define  USB_REQ_TYPE_STANDARD                          0x00
+#define  USB_REQ_TYPE_CLASS                             0x20
+#define  USB_REQ_TYPE_VENDOR                            0x40
+#define  USB_REQ_TYPE_MASK                              0x60
+
+#define  USB_REQ_RECIPIENT_DEVICE                       0x00
+#define  USB_REQ_RECIPIENT_INTERFACE                    0x01
+#define  USB_REQ_RECIPIENT_ENDPOINT                     0x02
+#define  USB_REQ_RECIPIENT_MASK                         0x03
+
+#define  USB_REQ_GET_STATUS                             0x00
+#define  USB_REQ_CLEAR_FEATURE                          0x01
+#define  USB_REQ_SET_FEATURE                            0x03
+#define  USB_REQ_SET_ADDRESS                            0x05
+#define  USB_REQ_GET_DESCRIPTOR                         0x06
+#define  USB_REQ_SET_DESCRIPTOR                         0x07
+#define  USB_REQ_GET_CONFIGURATION                      0x08
+#define  USB_REQ_SET_CONFIGURATION                      0x09
+#define  USB_REQ_GET_INTERFACE                          0x0A
+#define  USB_REQ_SET_INTERFACE                          0x0B
+#define  USB_REQ_SYNCH_FRAME                            0x0C
+
+#define  USB_DESC_TYPE_DEVICE                              1
+#define  USB_DESC_TYPE_CONFIGURATION                       2
+#define  USB_DESC_TYPE_STRING                              3
+#define  USB_DESC_TYPE_INTERFACE                           4
+#define  USB_DESC_TYPE_ENDPOINT                            5
+#define  USB_DESC_TYPE_DEVICE_QUALIFIER                    6
+#define  USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION           7
+#define  USB_DESC_TYPE_INTERFACE_POWER                     8
+#define  USB_DESC_TYPE_OTGTYPE                             9
+
+#define USB_CONFIG_REMOTE_WAKEUP                           2
+#define USB_CONFIG_SELF_POWERED                            1
+
+#define USB_FEATURE_EP_HALT                                0
+#define USB_FEATURE_REMOTE_WAKEUP                          1
+#define USB_FEATURE_TEST_MODE                              2
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DEF_Exported_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USBD_DEF_Exported_Macros
+  * @{
+  */ 
+#define  SWAPBYTE(addr)        (((uint16_t)(*((uint8_t *)(addr)))) + \
+                               (((uint16_t)(*(((uint8_t *)(addr)) + 1))) << 8))
+
+#define LOBYTE(x)  ((uint8_t)(x & 0x00FF))
+#define HIBYTE(x)  ((uint8_t)((x & 0xFF00) >>8))
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_DEF_Exported_Variables
+  * @{
+  */ 
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_DEF_Exported_FunctionsPrototype
+  * @{
+  */ 
+
+/**
+  * @}
+  */ 
+
+#endif /* __USBD_DEF_H */
+
+/**
+  * @}
+  */ 
+
+/**
+* @}
+*/ 
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_ioreq.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_ioreq.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_ioreq.h	(working copy)
@@ -0,0 +1,109 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usbd_ioreq.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : header file for the usbd_ioreq.c file.
+ *****************************************************************************/
+ 
+/* Define to prevent recursive inclusion -------------------------------------*/
+
+#ifndef __USBD_IOREQ_H_
+#define __USBD_IOREQ_H_
+
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Includes ------------------------------------------------------------------*/
+#include  "usbd_def.h"
+#include  "usbd_core.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+  
+/** @defgroup USBD_IOREQ
+  * @brief header file for the usbd_ioreq.c file
+  * @{
+  */ 
+
+/** @defgroup USBD_IOREQ_Exported_Defines
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_IOREQ_Exported_Types
+  * @{
+  */
+
+
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USBD_IOREQ_Exported_Macros
+  * @{
+  */ 
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_IOREQ_Exported_Variables
+  * @{
+  */ 
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_IOREQ_Exported_FunctionsPrototype
+  * @{
+  */ 
+
+USBD_Status  USBD_CtlSendData (USB_OTG_CORE_HANDLE  *pdev, 
+                               uint8_t *buf,
+                               uint16_t len);
+
+USBD_Status  USBD_CtlContinueSendData (USB_OTG_CORE_HANDLE  *pdev, 
+                               uint8_t *pbuf,
+                               uint16_t len);
+
+USBD_Status USBD_CtlPrepareRx (USB_OTG_CORE_HANDLE  *pdev, 
+                               uint8_t *pbuf,                                 
+                               uint16_t len);
+
+USBD_Status  USBD_CtlContinueRx (USB_OTG_CORE_HANDLE  *pdev, 
+                              uint8_t *pbuf,                                          
+                              uint16_t len);
+
+USBD_Status  USBD_CtlSendStatus (USB_OTG_CORE_HANDLE  *pdev);
+
+USBD_Status  USBD_CtlReceiveStatus (USB_OTG_CORE_HANDLE  *pdev);
+
+uint16_t  USBD_GetRxCount (USB_OTG_CORE_HANDLE  *pdev , 
+                           uint8_t epnum);
+
+/**
+  * @}
+  */ 
+
+#endif /* __USBD_IOREQ_H_ */
+
+/**
+  * @}
+  */ 
+
+/**
+* @}
+*/ 
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_ioreq.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_ioreq.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_ioreq.c	(working copy)
@@ -0,0 +1,237 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usbd_ioreq.c
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : This file provides the IO requests APIs for control endpoints.
+ *****************************************************************************/
+
+/* Include ------------------------------------------------------------------*/
+#include "usbd_ioreq.h"
+/* Private typedef ----------------------------------------------------------*/
+/* Private define -----------------------------------------------------------*/
+/* Private macro ------------------------------------------------------------*/
+/* Private variables --------------------------------------------------------*/
+/* Ptivate function prototypes ----------------------------------------------*/
+
+/******************************************************************************
+* Function Name  :
+* Description    :
+* Input          :
+* Output         :
+* Return         :
+******************************************************************************/
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+
+/** @defgroup USBD_IOREQ
+  * @brief control I/O requests module
+  * @{
+  */
+
+/** @defgroup USBD_IOREQ_Private_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_IOREQ_Private_Defines
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_IOREQ_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_IOREQ_Private_Variables
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_IOREQ_Private_FunctionPrototypes
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_IOREQ_Private_Functions
+  * @{
+  */
+
+/**
+* @brief  USBD_CtlSendData
+*         send data on the ctl pipe
+* @param  pdev: device instance
+* @param  buff: pointer to data buffer
+* @param  len: length of data to be sent
+* @retval status
+*/
+USBD_Status  USBD_CtlSendData (USB_OTG_CORE_HANDLE  *pdev,
+                               uint8_t *pbuf,
+                               uint16_t len)
+{
+    USBD_Status ret = USBD_OK;
+
+    pdev->dev.in_ep[0].total_data_len = len;
+    pdev->dev.in_ep[0].rem_data_len   = len;
+    pdev->dev.device_state = USB_OTG_EP0_DATA_IN;
+
+    DCD_EP_Tx (pdev, 0, pbuf, len);
+
+    return ret;
+    }
+
+/**
+* @brief  USBD_CtlContinueSendData
+*         continue sending data on the ctl pipe
+* @param  pdev: device instance
+* @param  buff: pointer to data buffer
+* @param  len: length of data to be sent
+* @retval status
+*/
+USBD_Status  USBD_CtlContinueSendData (USB_OTG_CORE_HANDLE  *pdev,
+                                       uint8_t *pbuf,
+                                       uint16_t len)
+{
+    USBD_Status ret = USBD_OK;
+
+    DCD_EP_Tx (pdev, 0, pbuf, len);
+
+
+    return ret;
+}
+
+/**
+* @brief  USBD_CtlPrepareRx
+*         receive data on the ctl pipe
+* @param  pdev: USB OTG device instance
+* @param  buff: pointer to data buffer
+* @param  len: length of data to be received
+* @retval status
+*/
+USBD_Status  USBD_CtlPrepareRx (USB_OTG_CORE_HANDLE  *pdev,
+                                  uint8_t *pbuf,
+                                  uint16_t len)
+{
+    USBD_Status ret = USBD_OK;
+
+    pdev->dev.out_ep[0].total_data_len = len;
+    pdev->dev.out_ep[0].rem_data_len   = len;
+    pdev->dev.device_state = USB_OTG_EP0_DATA_OUT;
+
+    DCD_EP_PrepareRx (pdev,
+                      0,
+                      pbuf,
+                      len);
+
+
+    return ret;
+    }
+
+/**
+* @brief  USBD_CtlContinueRx
+*         continue receive data on the ctl pipe
+* @param  pdev: USB OTG device instance
+* @param  buff: pointer to data buffer
+* @param  len: length of data to be received
+* @retval status
+*/
+USBD_Status  USBD_CtlContinueRx (USB_OTG_CORE_HANDLE  *pdev,
+                                          uint8_t *pbuf,
+                                          uint16_t len)
+{
+    USBD_Status ret = USBD_OK;
+
+    DCD_EP_PrepareRx (pdev,
+                      0,
+                      pbuf,
+                      len);
+    return ret;
+}
+/**
+* @brief  USBD_CtlSendStatus
+*         send zero lzngth packet on the ctl pipe
+* @param  pdev: USB OTG device instance
+* @retval status
+*/
+USBD_Status  USBD_CtlSendStatus (USB_OTG_CORE_HANDLE  *pdev)
+{
+    USBD_Status ret = USBD_OK;
+    pdev->dev.device_state = USB_OTG_EP0_STATUS_IN;
+//    DCD_EP_Tx (pdev,
+//               0,
+//               NULL,
+//               0);
+    USB_OTG_EPReply_Zerolen(pdev,0);
+
+//    USB_OTG_EP0_OutStart(pdev);
+
+    return ret;
+}
+
+/**
+* @brief  USBD_CtlReceiveStatus
+*         receive zero lzngth packet on the ctl pipe
+* @param  pdev: USB OTG device instance
+* @retval status
+*/
+USBD_Status  USBD_CtlReceiveStatus (USB_OTG_CORE_HANDLE  *pdev)
+{
+    USBD_Status ret = USBD_OK;
+    pdev->dev.device_state = USB_OTG_EP0_STATUS_OUT;
+    DCD_EP_PrepareRx ( pdev,
+                       0,
+                       NULL,
+                       0);
+
+//    USB_OTG_EP0_OutStart(pdev);
+
+    return ret;
+}
+
+
+/**
+* @brief  USBD_GetRxCount
+*         returns the received data length
+* @param  pdev: USB OTG device instance
+*         epnum: endpoint index
+* @retval Rx Data blength
+*/
+uint16_t  USBD_GetRxCount (USB_OTG_CORE_HANDLE  *pdev , uint8_t epnum)
+{
+    return pdev->dev.out_ep[epnum].xfer_count;
+}
+
+/**
+  * @}
+  */
+
+
+/**
+  * @}
+  */
+
+
+/**
+  * @}
+  */
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_pwr.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_pwr.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_pwr.h	(working copy)
@@ -0,0 +1,65 @@
+/**
+  ******************************************************************************
+  * @file    usbd_pwr.h
+  * @author  MCD Application Team
+  * @version V1.0.1
+  * @date    31-January-2014
+  * @brief   Header file for usbd_pwr.c
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_PWR_H__
+#define __USBD_PWR_H__
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_core.h"
+#include "usb_bsp.h"
+
+/* Exported defines ----------------------------------------------------------*/
+/* Exported types ------------------------------------------------------------*/
+typedef enum _RESUME_STATE
+{
+  RESUME_EXTERNAL,
+  RESUME_INTERNAL,
+#ifdef LPM_ENABLED  
+  L1_RESUME_INTERNAL,
+#endif
+  RESUME_LATER,
+  RESUME_WAIT,
+  RESUME_START,
+  RESUME_ON,
+  RESUME_OFF,
+  RESUME_ESOF
+} RESUME_STATE;
+
+/* Exported macros -----------------------------------------------------------*/
+/* Exported variables --------------------------------------------------------*/
+extern USB_OTG_CORE_HANDLE USB_Device_dev;
+
+/* Exported functions ------------------------------------------------------- */ 
+void Suspend(void);
+void Resume_Init(void);
+void Resume(RESUME_STATE eResumeSetVal);
+void Leave_LowPowerMode(void);
+
+#endif /*__USBD_PWR_H__*/
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_req.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_req.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_req.h	(working copy)
@@ -0,0 +1,93 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usbd_req.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : header file for the usbd_req.c file.
+ *****************************************************************************/
+ 
+/* Define to prevent recursive inclusion -------------------------------------*/
+
+#ifndef __USB_REQUEST_H_
+#define __USB_REQUEST_H_
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Includes ------------------------------------------------------------------*/
+#include  "usbd_def.h"
+#include  "usbd_core.h"
+//#include  "usbd_conf.h"
+#include  "usbd_ioreq.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+  
+/** @defgroup USBD_REQ
+  * @brief header file for the usbd_ioreq.c file
+  * @{
+  */ 
+
+/** @defgroup USBD_REQ_Exported_Defines
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_REQ_Exported_Types
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USBD_REQ_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_REQ_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_REQ_Exported_FunctionsPrototype
+  * @{
+  */ 
+
+USBD_Status  USBD_StdDevReq (USB_OTG_CORE_HANDLE  *pdev, USB_SETUP_REQ  *req);
+USBD_Status  USBD_StdItfReq (USB_OTG_CORE_HANDLE  *pdev, USB_SETUP_REQ  *req);
+USBD_Status  USBD_StdEPReq (USB_OTG_CORE_HANDLE  *pdev, USB_SETUP_REQ  *req);
+void USBD_ParseSetupRequest( USB_OTG_CORE_HANDLE  *pdev,
+                                    USB_SETUP_REQ *req);
+
+void USBD_CtlError( USB_OTG_CORE_HANDLE  *pdev,
+                            USB_SETUP_REQ *req);
+
+void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len);
+/**
+  * @}
+  */ 
+
+#endif /* __USB_REQUEST_H_ */
+
+/**
+  * @}
+  */ 
+
+/**
+* @}
+*/ 
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_req.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_req.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_req.c	(working copy)
@@ -0,0 +1,925 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usbd_req.c
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : This file provides the standard USB requests following chapter 9.
+ *****************************************************************************/
+
+/* Include ------------------------------------------------------------------*/
+#include "usbd_req.h"
+#include "usbd_ioreq.h"
+#include "usbd_desc.h"
+/* Private typedef ----------------------------------------------------------*/
+/* Private define -----------------------------------------------------------*/
+/* Private macro ------------------------------------------------------------*/
+/* Private variables --------------------------------------------------------*/
+/* Ptivate function prototypes ----------------------------------------------*/
+
+/******************************************************************************
+* Function Name  :
+* Description    :
+* Input          :
+* Output         :
+* Return         :
+******************************************************************************/
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+
+/** @defgroup USBD_REQ
+  * @brief USB standard requests module
+  * @{
+  */
+
+/** @defgroup USBD_REQ_Private_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_REQ_Private_Defines
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_REQ_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_REQ_Private_Variables
+  * @{
+  */
+
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+    #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+        #pragma data_alignment=4
+    #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint32_t USBD_ep_status __ALIGN_END  = 0;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+    #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+        #pragma data_alignment=4
+    #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint32_t  USBD_default_cfg __ALIGN_END  = 0;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+    #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+        #pragma data_alignment=4
+    #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint32_t  USBD_cfg_status __ALIGN_END  = 0;
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+    #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+        #pragma data_alignment=4
+    #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+__ALIGN_BEGIN uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ] __ALIGN_END ;
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_REQ_Private_FunctionPrototypes
+  * @{
+  */
+static void USBD_GetDescriptor(USB_OTG_CORE_HANDLE  *pdev,
+                               USB_SETUP_REQ *req);
+
+static void USBD_SetAddress(USB_OTG_CORE_HANDLE  *pdev,
+                            USB_SETUP_REQ *req);
+
+static void USBD_SetConfig(USB_OTG_CORE_HANDLE  *pdev,
+                           USB_SETUP_REQ *req);
+
+static void USBD_GetConfig(USB_OTG_CORE_HANDLE  *pdev,
+                           USB_SETUP_REQ *req);
+
+static void USBD_GetStatus(USB_OTG_CORE_HANDLE  *pdev,
+                           USB_SETUP_REQ *req);
+
+static void USBD_SetFeature(USB_OTG_CORE_HANDLE  *pdev,
+                            USB_SETUP_REQ *req);
+
+static void USBD_ClrFeature(USB_OTG_CORE_HANDLE  *pdev,
+                            USB_SETUP_REQ *req);
+
+static uint8_t USBD_GetLen(uint8_t *buf);
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_REQ_Private_Functions
+  * @{
+  */
+
+
+/**
+* @brief  USBD_StdDevReq
+*         Handle standard usb device requests
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval status
+*/
+extern uint8_t SetAddress_Flag;
+extern uint8_t Address_Value;
+USBD_Status  USBD_StdDevReq (USB_OTG_CORE_HANDLE  *pdev, USB_SETUP_REQ  *req)
+{
+    USBD_Status ret = USBD_OK;
+//    USB_OTG_CSR0L_IN_PERIPHERAL_TypeDef csr0l;
+//    csr0l.d8 = USB_OTG_READ_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L);
+
+    switch (req->bRequest)
+    {
+    case USB_REQ_GET_DESCRIPTOR:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        USBD_GetDescriptor (pdev, req);
+        break;
+
+    case USB_REQ_SET_ADDRESS:
+        SetAddress_Flag = 1;
+        Address_Value = (uint8_t)(req->wValue) & 0x7F;
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        USBD_SetAddress(pdev, req);
+        break;
+
+    case USB_REQ_SET_CONFIGURATION:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        USBD_SetConfig (pdev , req);
+        break;
+
+    case USB_REQ_GET_CONFIGURATION:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        USBD_GetConfig (pdev , req);
+        break;
+
+    case USB_REQ_GET_STATUS:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        USBD_GetStatus (pdev , req);
+        break;
+
+
+    case USB_REQ_SET_FEATURE:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        USBD_SetFeature (pdev , req);
+        break;
+
+    case USB_REQ_CLEAR_FEATURE:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        USBD_ClrFeature (pdev , req);
+        break;
+    case USB_REQ_SET_DESCRIPTOR:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        break;
+    default:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        USBD_CtlError(pdev , req);
+        break;
+    }
+
+    return ret;
+}
+
+/**
+* @brief  USBD_StdItfReq
+*         Handle standard usb interface requests
+* @param  pdev: USB OTG device instance
+* @param  req: usb request
+* @retval status
+*/
+USBD_Status  USBD_StdItfReq (USB_OTG_CORE_HANDLE  *pdev, USB_SETUP_REQ  *req)
+{
+    USBD_Status ret = USBD_OK;
+//    USB_OTG_CSR0L_IN_PERIPHERAL_TypeDef csr0l;
+//    csr0l.d8 = USB_OTG_READ_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L);
+    switch (pdev->dev.device_status)
+    {
+    case USB_OTG_CONFIGURED:
+
+        if (LOBYTE(req->wIndex) <= USBD_ITF_MAX_NUM)
+        {
+//            csr0l.b.serviced_rxpktrdy = 1;
+//            USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+            pdev->dev.class_cb->Setup(pdev, req);
+//            if (pdev->dev.out_ep[0].xfer_buff != pdev->dev.setup_packet)
+//            {
+////                req->wLength = 0;
+//                pdev->dev.out_ep[0].xfer_buff = pdev->dev.setup_packet;
+//                pdev->dev.out_ep[0].xfer_count = 0;
+//                pdev->dev.out_ep[0].xfer_len = 8;
+//            }
+            if((req->wLength == 0)&& (ret == USBD_OK))
+            {
+                USBD_CtlSendStatus(pdev);
+            }
+        }
+        else
+        {
+//            csr0l.b.serviced_rxpktrdy = 1;
+//            csr0l.b.data_end = 1;
+//            USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+            USBD_CtlError(pdev , req);
+        }
+        break;
+
+    default:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        USBD_CtlError(pdev , req);
+        break;
+    }
+    return ret;
+}
+
+/**
+* @brief  USBD_StdEPReq
+*         Handle standard usb endpoint requests
+* @param  pdev: USB OTG device instance
+* @param  req: usb request
+* @retval status
+*/
+USBD_Status  USBD_StdEPReq (USB_OTG_CORE_HANDLE  *pdev, USB_SETUP_REQ  *req)
+{
+
+    uint8_t   ep_addr;
+    USBD_Status ret = USBD_OK;
+//    USB_OTG_CSR0L_IN_PERIPHERAL_TypeDef csr0l;
+//    csr0l.d8 = USB_OTG_READ_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L);
+    ep_addr  = LOBYTE(req->wIndex);
+
+    switch (req->bRequest)
+    {
+    case USB_REQ_SET_FEATURE :
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        switch (pdev->dev.device_status)
+        {
+        case USB_OTG_ADDRESSED:
+            if ((ep_addr != 0x00) && (ep_addr != 0x80))
+            {
+                DCD_EP_Stall(pdev , ep_addr);
+            }
+            break;
+
+        case USB_OTG_CONFIGURED:
+            if (req->wValue == USB_FEATURE_EP_HALT)
+            {
+                if ((ep_addr != 0x00) && (ep_addr != 0x80))
+                {
+                    DCD_EP_Stall(pdev , ep_addr);
+
+                }
+            }
+            pdev->dev.class_cb->Setup (pdev, req);
+            USBD_CtlSendStatus(pdev);
+
+            break;
+
+        default:
+            USBD_CtlError(pdev , req);
+            break;
+        }
+        break;
+
+    case USB_REQ_CLEAR_FEATURE :
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        switch (pdev->dev.device_status)
+        {
+        case USB_OTG_ADDRESSED:
+            if ((ep_addr != 0x00) && (ep_addr != 0x80))
+            {
+                DCD_EP_Stall(pdev , ep_addr);
+            }
+            break;
+
+        case USB_OTG_CONFIGURED:
+            if (req->wValue == USB_FEATURE_EP_HALT)
+            {
+                if ((ep_addr != 0x00) && (ep_addr != 0x80))
+                {
+//                    DCD_EP_ClrStall(pdev , ep_addr);
+                    pdev->dev.class_cb->Setup (pdev, req);
+                }
+                USBD_CtlSendStatus(pdev);
+            }
+            break;
+
+        default:
+            USBD_CtlError(pdev , req);
+            break;
+        }
+        break;
+
+    case USB_REQ_GET_STATUS:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        switch (pdev->dev.device_status)
+        {
+        case USB_OTG_ADDRESSED:
+            if ((ep_addr != 0x00) && (ep_addr != 0x80))
+            {
+                DCD_EP_Stall(pdev , ep_addr);
+            }
+            break;
+
+        case USB_OTG_CONFIGURED:
+
+
+            if ((ep_addr & 0x80)== 0x80)
+            {
+                if(pdev->dev.in_ep[ep_addr & 0x7F].is_stall)
+                {
+                    USBD_ep_status = 0x0001;
+                }
+                else
+                {
+                    USBD_ep_status = 0x0000;
+                }
+            }
+            else if ((ep_addr & 0x80)== 0x00)
+            {
+                if(pdev->dev.out_ep[ep_addr].is_stall)
+                {
+                    USBD_ep_status = 0x0001;
+                }
+
+                else
+                {
+                    USBD_ep_status = 0x0000;
+                }
+            }
+            USBD_CtlSendData (pdev,
+                    (uint8_t *)&USBD_ep_status,
+                    2);
+            break;
+
+        default:
+            USBD_CtlError(pdev , req);
+            break;
+        }
+        break;
+
+    default:
+//        csr0l.b.serviced_rxpktrdy = 1;
+//        csr0l.b.data_end = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L, csr0l.d8);
+        break;
+    }
+    return ret;
+}
+/**
+* @brief  USBD_GetDescriptor
+*         Handle Get Descriptor requests
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval status
+*/
+static void USBD_GetDescriptor(USB_OTG_CORE_HANDLE  *pdev,
+                               USB_SETUP_REQ *req)
+{
+    uint16_t len;
+    uint8_t *pbuf;
+//    USB_OTG_CSR0L_IN_PERIPHERAL_TypeDef csr0l;
+//    csr0l.d8 = USB_OTG_READ_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L);
+
+    switch (req->wValue >> 8)
+    {
+    case USB_DESC_TYPE_DEVICE:
+        pbuf = pdev->dev.usr_device->GetDeviceDescriptor(pdev->cfg.speed, &len);
+//        if ((req->wLength == 64) ||( pdev->dev.device_status == USB_OTG_DEFAULT))
+//        {
+//            len = 8;
+//        };
+        break;
+
+    case USB_DESC_TYPE_CONFIGURATION:
+        delay_ms(1);
+        pbuf   = (uint8_t *)pdev->dev.class_cb->GetConfigDescriptor(pdev->cfg.speed, &len);
+        #ifdef USB_OTG_HS_CORE
+            if((pdev->cfg.speed == USB_OTG_SPEED_FULL )&&
+            (pdev->cfg.phy_itface  == USB_OTG_ULPI_PHY))
+            {
+                pbuf   = (uint8_t *)pdev->dev.class_cb->GetOtherConfigDescriptor(pdev->cfg.speed, &len);
+            }
+        #endif
+            pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
+            pdev->dev.pConfig_descriptor = pbuf;
+        break;
+
+    case USB_DESC_TYPE_STRING:
+        switch ((uint8_t)(req->wValue))
+        {
+        case USBD_IDX_LANGID_STR:
+            pbuf = pdev->dev.usr_device->GetLangIDStrDescriptor(pdev->cfg.speed, &len);
+            break;
+
+        case USBD_IDX_MFC_STR:
+            pbuf = pdev->dev.usr_device->GetManufacturerStrDescriptor(pdev->cfg.speed, &len);
+            break;
+
+        case USBD_IDX_PRODUCT_STR:
+            pbuf = pdev->dev.usr_device->GetProductStrDescriptor(pdev->cfg.speed, &len);
+            break;
+
+        case USBD_IDX_SERIAL_STR:
+            pbuf = pdev->dev.usr_device->GetSerialStrDescriptor(pdev->cfg.speed, &len);
+            if(pdev->dev.device_status == USB_OTG_CONFIGURED)
+             pdev->dev.device_status_new =USB_OTG_END;
+            break;
+
+        case USBD_IDX_CONFIG_STR:
+            pbuf = pdev->dev.usr_device->GetConfigurationStrDescriptor(pdev->cfg.speed, &len);
+            break;
+
+        case USBD_IDX_INTERFACE_STR:
+            pbuf = pdev->dev.usr_device->GetInterfaceStrDescriptor(pdev->cfg.speed, &len);
+            break;
+
+        default:
+            #ifdef USB_SUPPORT_USER_STRING_DESC
+                pbuf = pdev->dev.class_cb->GetUsrStrDescriptor(pdev->cfg.speed, (req->wValue) , &len);
+                break;
+            #else
+                USBD_CtlError(pdev , req);
+                return;
+            #endif /* USBD_CtlError(pdev , req); */
+        }
+        break;
+    case USB_DESC_TYPE_DEVICE_QUALIFIER:
+        #ifdef USB_OTG_HS_CORE
+        if(pdev->cfg.speed == USB_OTG_SPEED_HIGH  )
+        {
+
+            pbuf   = (uint8_t *)pdev->dev.class_cb->GetConfigDescriptor(pdev->cfg.speed, &len);
+
+            USBD_DeviceQualifierDesc[4]= pbuf[14];
+            USBD_DeviceQualifierDesc[5]= pbuf[15];
+            USBD_DeviceQualifierDesc[6]= pbuf[16];
+
+            pbuf = USBD_DeviceQualifierDesc;
+            len  = USB_LEN_DEV_QUALIFIER_DESC;
+            break;
+        }
+        else
+        {
+            USBD_CtlError(pdev , req);
+            return;
+        }
+        #else
+            USBD_CtlError(pdev , req);
+            return;
+        #endif
+
+    case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION:
+        #ifdef USB_OTG_HS_CORE
+
+        if(pdev->cfg.speed == USB_OTG_SPEED_HIGH  )
+        {
+            pbuf   = (uint8_t *)pdev->dev.class_cb->GetOtherConfigDescriptor(pdev->cfg.speed, &len);
+            pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION;
+            break;
+        }
+        else
+        {
+            USBD_CtlError(pdev , req);
+            return;
+        }
+        #else
+            USBD_CtlError(pdev , req);
+            return;
+        #endif
+
+
+    default:
+        USBD_CtlError(pdev , req);
+        return;
+    }
+
+    if((len != 0)&& (req->wLength != 0))
+    {
+
+        len = MIN(len , req->wLength);
+
+        USBD_CtlSendData (pdev,
+                          pbuf,
+                          len);
+
+    }
+
+}
+
+/**
+* @brief  USBD_SetAddress
+*         Set device address
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval status
+*/
+static void USBD_SetAddress(USB_OTG_CORE_HANDLE  *pdev,
+                            USB_SETUP_REQ *req)
+{
+  uint8_t  dev_addr;
+
+  if ((req->wIndex == 0) && (req->wLength == 0))
+  {
+    dev_addr = (uint8_t)(req->wValue) & 0x7F;
+
+    if (pdev->dev.device_status == USB_OTG_CONFIGURED)
+    {
+      USBD_CtlError(pdev , req);
+    }
+    else
+    {
+      pdev->dev.device_address = dev_addr;
+//      DCD_EP_SetAddress(pdev, dev_addr);
+//      USBD_CtlSendStatus(pdev);
+      USB_OTG_WRITE_REG8(&pdev->regs.CTRLREGS->FADDR,Address_Value);
+      USBD_CtlSendStatus(pdev);
+
+//      MyPrintf("address = %x\n",Address_Value);
+
+      if (dev_addr != 0)
+      {
+        pdev->dev.device_status  = USB_OTG_ADDRESSED;
+      }
+      else
+      {
+        pdev->dev.device_status  = USB_OTG_DEFAULT;
+      }
+    }
+  }
+  else
+  {
+     USBD_CtlError(pdev , req);
+  }
+}
+
+/**
+* @brief  USBD_SetConfig
+*         Handle Set device configuration request
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval status
+*/
+static void USBD_SetConfig(USB_OTG_CORE_HANDLE  *pdev,
+                           USB_SETUP_REQ *req)
+{
+
+    static uint8_t  cfgidx;
+
+    cfgidx = (uint8_t)(req->wValue);
+
+    if (cfgidx > USBD_CFG_MAX_NUM )
+    {
+        USBD_CtlError(pdev , req);
+    }
+    else
+    {
+        switch (pdev->dev.device_status)
+        {
+        case USB_OTG_ADDRESSED:
+            if (cfgidx)
+            {
+                pdev->dev.device_config = cfgidx;
+                pdev->dev.device_status = USB_OTG_CONFIGURED;
+                USBD_SetCfg(pdev , cfgidx);
+                USBD_CtlSendStatus(pdev);
+            }
+            else
+            {
+                USBD_CtlSendStatus(pdev);
+            }
+            break;
+
+        case USB_OTG_CONFIGURED:
+            if (cfgidx == 0)
+            {
+                pdev->dev.device_status = USB_OTG_ADDRESSED;
+                pdev->dev.device_config = cfgidx;
+                USBD_ClrCfg(pdev , cfgidx);
+                USBD_CtlSendStatus(pdev);
+
+            }
+            else  if (cfgidx != pdev->dev.device_config)
+            {
+                /* Clear old configuration */
+                USBD_ClrCfg(pdev , pdev->dev.device_config);
+
+                /* set new configuration */
+                pdev->dev.device_config = cfgidx;
+                USBD_SetCfg(pdev , cfgidx);
+                USBD_CtlSendStatus(pdev);
+            }
+            else
+            {
+                USBD_CtlSendStatus(pdev);
+            }
+            break;
+
+        default:
+            USBD_CtlError(pdev , req);
+            break;
+        }
+    }
+}
+
+/**
+* @brief  USBD_GetConfig
+*         Handle Get device configuration request
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval status
+*/
+static void USBD_GetConfig(USB_OTG_CORE_HANDLE  *pdev,
+                           USB_SETUP_REQ *req)
+{
+
+    if (req->wLength != 1)
+    {
+        USBD_CtlError(pdev , req);
+    }
+    else
+    {
+        switch (pdev->dev.device_status )
+        {
+        case USB_OTG_ADDRESSED:
+
+            USBD_CtlSendData (pdev,
+                             (uint8_t *)&USBD_default_cfg,
+                              1);
+            break;
+
+        case USB_OTG_CONFIGURED:
+
+            USBD_CtlSendData (pdev,
+                              &pdev->dev.device_config,
+                              1);
+            break;
+
+        default:
+            USBD_CtlError(pdev , req);
+            break;
+        }
+    }
+}
+
+/**
+* @brief  USBD_GetStatus
+*         Handle Get Status request
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval status
+*/
+static void USBD_GetStatus(USB_OTG_CORE_HANDLE  *pdev,
+                           USB_SETUP_REQ *req)
+{
+
+
+    switch (pdev->dev.device_status)
+    {
+    case USB_OTG_ADDRESSED:
+    case USB_OTG_CONFIGURED:
+
+        #ifdef USBD_SELF_POWERED
+            USBD_cfg_status = USB_CONFIG_SELF_POWERED;
+        #else
+            USBD_cfg_status = 0x00;
+        #endif
+
+        if (pdev->dev.DevRemoteWakeup)
+        {
+            USBD_cfg_status |= USB_CONFIG_REMOTE_WAKEUP;
+        }
+
+        USBD_CtlSendData (pdev,
+                         (uint8_t *)&USBD_cfg_status,
+                          2);
+        break;
+
+    default :
+        USBD_CtlError(pdev , req);
+        break;
+    }
+}
+
+
+/**
+* @brief  USBD_SetFeature
+*         Handle Set device feature request
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval status
+*/
+static void USBD_SetFeature(USB_OTG_CORE_HANDLE  *pdev,
+                            USB_SETUP_REQ *req)
+{
+
+//    USB_OTG_TESTMODE_TypeDef     dctl;
+//    uint8_t test_mode = 0;
+
+    if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
+    {
+        pdev->dev.DevRemoteWakeup = 1;
+        pdev->dev.class_cb->Setup (pdev, req);
+        USBD_CtlSendStatus(pdev);
+        USB_OTG_ActiveRemoteWakeup(pdev);
+    }
+
+//    else if ((req->wValue == USB_FEATURE_TEST_MODE) &&
+//           ((req->wIndex & 0xFF) == 0))
+//    {
+ //       dctl.d8 = USB_OTG_READ_REG8(&pdev->regs.COMMREGS->TESTMODE);
+//        dctl.d8 = 0;
+//        test_mode = req->wIndex >> 8;
+//        switch (test_mode)
+//        {
+//        case 1: // TEST_SE0_NAK
+//            dctl.b.test_SE0_NAK = 1;
+//            break;
+//
+//        case 2: // TEST_J
+//            dctl.b.test_J = 1;
+//            break;
+//
+//        case 3: // TEST_K
+//            dctl.b.test_K = 1;
+//            break;
+//
+//        case 4: // TEST_PACKET
+//            dctl.b.test_packet = 1;
+//            break;
+//
+//        case 5: // TEST_FORCE_ENABLE
+//            dctl.b.force_FS = 1;
+//            dctl.b.force_host = 1;  /* Full-speed Host */
+//            break;
+//        }
+//        SET_TEST_MODE = dctl;
+//        pdev->dev.test_mode = 1;
+//        USBD_CtlSendStatus(pdev);
+//    }
+
+}
+
+
+/**
+* @brief  USBD_ClrFeature
+*         Handle clear device feature request
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval status
+*/
+static void USBD_ClrFeature(USB_OTG_CORE_HANDLE  *pdev,
+                            USB_SETUP_REQ *req)
+{
+    switch (pdev->dev.device_status)
+    {
+    case USB_OTG_ADDRESSED:
+    case USB_OTG_CONFIGURED:
+        if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
+        {
+            pdev->dev.DevRemoteWakeup = 0;
+            pdev->dev.class_cb->Setup (pdev, req);
+            USBD_CtlSendStatus(pdev);
+        }
+        break;
+
+    default :
+        USBD_CtlError(pdev , req);
+        break;
+    }
+}
+
+/**
+* @brief  USBD_ParseSetupRequest
+*         Copy buffer into setup structure
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval None
+*/
+
+void USBD_ParseSetupRequest( USB_OTG_CORE_HANDLE  *pdev,
+                            USB_SETUP_REQ *req)
+{
+    req->bmRequest     = *(uint8_t *)  (pdev->dev.setup_packet);
+    req->bRequest      = *(uint8_t *)  (pdev->dev.setup_packet +  1);
+    req->wValue        = SWAPBYTE      (pdev->dev.setup_packet +  2);
+    req->wIndex        = SWAPBYTE      (pdev->dev.setup_packet +  4);
+    req->wLength       = SWAPBYTE      (pdev->dev.setup_packet +  6);
+
+    pdev->dev.in_ep[0].ctl_data_len = req->wLength  ;
+    pdev->dev.device_state = USB_OTG_EP0_SETUP;
+//    MyPrintf("req ->bmRequest =%x\n",*(uint8_t *)  (pdev->dev.setup_packet));
+}
+
+/**
+* @brief  USBD_CtlError
+*         Handle USB low level Error
+* @param  pdev: device instance
+* @param  req: usb request
+* @retval None
+*/
+
+void USBD_CtlError( USB_OTG_CORE_HANDLE  *pdev,
+                            USB_SETUP_REQ *req)
+{
+
+//    DCD_EP_Stall(pdev , 0x80);
+    DCD_EP_Stall(pdev , 0);
+}
+
+
+/**
+  * @brief  USBD_GetString
+  *         Convert Ascii string into unicode one
+  * @param  desc : descriptor buffer
+  * @param  unicode : Formatted string buffer (unicode)
+  * @param  len : descriptor length
+  * @retval None
+  */
+void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
+{
+    uint8_t idx = 0;
+
+    if (desc != NULL)
+    {
+        *len =  USBD_GetLen(desc) * 2 + 2;
+        unicode[idx++] = *len;
+        unicode[idx++] =  USB_DESC_TYPE_STRING;
+
+        while (*desc != 0)
+        {
+            unicode[idx++] = *desc++;
+            unicode[idx++] =  0x00;
+        }
+    }
+}
+
+/**
+  * @brief  USBD_GetLen
+  *         return the string length
+   * @param  buf : pointer to the ascii string buffer
+  * @retval string length
+  */
+static uint8_t USBD_GetLen(uint8_t *buf)
+{
+    uint8_t  len = 0;
+
+    while (*buf != 0)
+    {
+        len++;
+        buf++;
+    }
+
+    return len;
+}
+/**
+  * @}
+  */
+
+
+/**
+  * @}
+  */
+
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_usr.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_usr.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/SCPU_USB_Device_Library/core/usbd_usr.h	(working copy)
@@ -0,0 +1,130 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usbd_usr.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Header file for usbd_usr.c.
+ *****************************************************************************/
+ 
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_USR_H__
+#define __USBD_USR_H__
+
+
+
+#include <stdlib.h>
+#include "yc3121.h"
+//#include "yc_drv_common.h"
+//#include "systick.h" 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_core.h"
+
+
+/** @addtogroup USBD_USER
+  * @{
+  */
+
+/** @addtogroup USBD_MSC_DEMO_USER_CALLBACKS
+  * @{
+  */
+
+/** @defgroup USBD_USR
+  * @brief This file is the Header file for usbd_usr.c
+  * @{
+  */ 
+
+
+/** @defgroup USBD_USR_Exported_Types
+  * @{
+  */ 
+
+extern  USBD_Usr_cb_TypeDef USRD_cb;
+extern  USBD_Usr_cb_TypeDef USR_FS_cb;
+extern  USBD_Usr_cb_TypeDef USR_HS_cb;
+
+
+
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USBD_USR_Exported_Defines
+  * @{
+  */ 
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_USR_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_USR_Exported_Variables
+  * @{
+  */ 
+
+void     USBD_USR_Init(void);
+void     USBD_USR_DeviceReset (uint8_t speed);
+void     USBD_USR_DeviceConfigured (void);
+void     USBD_USR_DeviceSuspended(void);
+void     USBD_USR_DeviceResumed(void);
+
+void     USBD_USR_DeviceConnected(void);
+void     USBD_USR_DeviceDisconnected(void); 
+
+void     USBD_USR_FS_Init(void);
+void     USBD_USR_FS_DeviceReset (uint8_t speed);
+void     USBD_USR_FS_DeviceConfigured (void);
+void     USBD_USR_FS_DeviceSuspended(void);
+void     USBD_USR_FS_DeviceResumed(void);
+
+void     USBD_USR_FS_DeviceConnected(void);
+void     USBD_USR_FS_DeviceDisconnected(void);  
+
+void     USBD_USR_HS_Init(void);
+void     USBD_USR_HS_DeviceReset (uint8_t speed);
+void     USBD_USR_HS_DeviceConfigured (void);
+void     USBD_USR_HS_DeviceSuspended(void);
+void     USBD_USR_HS_DeviceResumed(void);
+
+void     USBD_USR_HS_DeviceConnected(void);
+void     USBD_USR_HS_DeviceDisconnected(void);  
+void 		 my_delay_ms(int ms);
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_USR_Exported_FunctionsPrototype
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+#endif /*__USBD_USR_H__*/
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/Usb_dcd.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/Usb_dcd.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/Usb_dcd.c	(working copy)
@@ -0,0 +1,258 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_dcd.c
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Peripheral Device Interface layer.
+ *****************************************************************************/
+ 
+/* Include ------------------------------------------------------------------*/
+#include "usb_dcd.h"
+#include "usb_bsp.h"
+
+
+
+
+void DCD_Init(USB_OTG_CORE_HANDLE *pdev , 
+              USB_OTG_CORE_ID_TypeDef coreID)
+{
+	 uint32_t i;
+    USB_OTG_EP *ep;
+    /* Set Register Address */
+    USB_OTG_SelectCore (pdev , coreID);
+    
+//    /* Force_FS */
+//    pdev->regs.COMMREGS->TESTMODE |= BIT5;
+    
+    pdev->dev.device_status = USB_OTG_DEFAULT;
+    pdev->dev.device_address = 0;
+
+       /* Init ep structure */
+    for (i = 0; i < pdev->cfg.dev_endpoints; i++)
+    {
+        ep = &pdev->dev.in_ep[i];
+        /* Init ep structure */
+        ep->is_in = 1;
+        ep->num = i;
+        ep->tx_fifo_num = i;
+        /* Control until ep is actvated */
+        ep->type = EP_TYPE_CTRL;
+        ep->maxpacket =  USB_OTG_MAX_EP0_SIZE;
+        ep->xfer_buff = 0;
+        ep->xfer_len = 0;
+    }
+
+    for (i = 0; i < pdev->cfg.dev_endpoints; i++)
+    {
+        ep = &pdev->dev.out_ep[i];
+        /* Init ep structure */
+        ep->is_in = 0;
+        ep->num = i;
+        ep->tx_fifo_num = i;
+        /* Control until ep is activated */
+        ep->type = EP_TYPE_CTRL;
+        ep->maxpacket = USB_OTG_MAX_EP0_SIZE;
+        ep->xfer_buff = 0;
+        ep->xfer_len = 0;
+     }
+
+
+	/* Init the Core (common init.) */
+         USB_OTG_CoreInit(pdev);
+
+//	 /* Force Device Mode*/
+         USB_OTG_SetCurrentMode(pdev, DEVICE_MODE);
+
+	
+//    /* Init Device */
+//    USB_OTG_CoreInitDev(pdev);
+
+}
+
+
+
+/**
+* @brief  Configure an EP
+* @param pdev : Device instance
+* @param epdesc : Endpoint Descriptor
+* @retval : status
+*/
+uint32_t DCD_EP_Open(USB_OTG_CORE_HANDLE *pdev , 
+                     uint8_t ep_addr,
+                     uint16_t ep_mps,
+                     uint8_t ep_type)
+{
+    USB_OTG_EP *ep;
+
+    if ((ep_addr & 0x80) == 0x80)
+    {
+        ep = &pdev->dev.in_ep[ep_addr & 0x7F];
+    }
+    else
+    {
+        ep = &pdev->dev.out_ep[ep_addr & 0x7F];
+    }
+    ep->num   = ep_addr & 0x7F;
+
+    ep->is_in = (0x80 & ep_addr) != 0;
+    ep->maxpacket = ep_mps;
+    ep->type = ep_type;
+    if (ep->is_in)
+    {
+        /* Assign a Tx FIFO */
+        ep->tx_fifo_num = ep->num;
+    }
+    /* Set initial data PID. */
+    if (ep_type == USB_OTG_EP_BULK )
+    {
+        ep->data_pid_start = 0;
+    }
+    USB_OTG_EPActivate(pdev , ep );
+    return 0;
+}
+/**
+* @brief  called when an EP is disabled
+* @param pdev: device instance
+* @param ep_addr: endpoint address
+* @retval : status
+*/
+uint32_t DCD_EP_Close(USB_OTG_CORE_HANDLE *pdev , uint8_t  ep_addr)
+{
+    USB_OTG_EP *ep;
+
+    if ((ep_addr&0x80) == 0x80)
+    {
+        ep = &pdev->dev.in_ep[ep_addr & 0x7F];
+    }
+    else
+    {
+        ep = &pdev->dev.out_ep[ep_addr & 0x7F];
+    }
+    ep->num   = ep_addr & 0x7F;
+    ep->is_in = (0x80 & ep_addr) ;
+    USB_OTG_EPDeactivate(pdev , ep );
+    return 0;
+}
+
+
+
+/**
+* @brief  DCD_EP_PrepareRx
+* @param pdev: device instance
+* @param ep_addr: endpoint address
+* @param pbuf: pointer to Rx buffer
+* @param buf_len: data length
+* @retval : status
+*/
+uint32_t   DCD_EP_PrepareRx( USB_OTG_CORE_HANDLE *pdev,
+                            uint8_t   ep_addr,
+                            uint8_t *pbuf,                        
+                            uint16_t  buf_len)
+{
+    USB_OTG_EP *ep;
+
+    ep = &pdev->dev.out_ep[ep_addr & 0x7F];
+
+    /*setup and start the Xfer */
+    ep->xfer_buff = pbuf;  
+    ep->xfer_len = buf_len;
+    ep->xfer_count = 0;
+    ep->is_in = 0;
+    ep->num = ep_addr & 0x7F;
+		
+    if (pdev->cfg.dma_enable == 1)
+    {
+        ep->dma_addr = (uint32_t)pbuf;  
+    }
+
+		
+    if ( ep->num == 0 )
+    {
+        USB_OTG_EP0StartXfer(pdev , ep);
+    }
+    else
+    {
+		
+        USB_OTG_EPStartXfer(pdev, ep );
+    }
+    return 0;
+}
+
+
+/**
+* @brief  Transmit data over USB
+* @param pdev: device instance
+* @param ep_addr: endpoint address
+* @param pbuf: pointer to Tx buffer
+* @param buf_len: data length
+* @retval : status
+*/
+uint32_t  DCD_EP_Tx ( USB_OTG_CORE_HANDLE *pdev,
+                     uint8_t   ep_addr,
+                     uint8_t   *pbuf,
+                     uint32_t   buf_len)
+{
+    USB_OTG_EP *ep;
+
+    ep = &pdev->dev.in_ep[ep_addr & 0x7F];
+
+    /* Setup and start the Transfer */
+    ep->is_in = 1;
+    ep->num = ep_addr & 0x7F;  
+    ep->xfer_buff = pbuf;
+//    ep->dma_addr = (uint32_t)pbuf;  
+    ep->xfer_count = 0;
+    ep->xfer_len  = buf_len;
+
+    if ( ep->num == 0 )
+    {
+        USB_OTG_EP0StartXfer(pdev , ep);
+    }
+    else
+    {
+        USB_OTG_EPStartXfer(pdev, ep );
+    }
+    return 0;
+}
+
+
+
+
+
+
+/**
+* @brief  Stall an endpoint.
+* @param pdev: device instance
+* @param epnum: endpoint address
+* @retval : status
+*/
+
+uint32_t  DCD_EP_Stall (USB_OTG_CORE_HANDLE *pdev, uint8_t   epnum)
+{
+    USB_OTG_EP *ep;
+    if ((0x80 & epnum) == 0x80)
+    {
+        ep = &pdev->dev.in_ep[epnum & 0x7F];
+    }
+    else
+    {
+        ep = &pdev->dev.out_ep[epnum];
+    }
+
+    ep->is_stall = 1;
+    ep->num   = epnum & 0x7F;
+    ep->is_in = ((epnum & 0x80) == 0x80);
+
+    USB_OTG_EPSetStall(pdev , ep);
+    return (0);
+}
+
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/Usb_dcd_init.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/Usb_dcd_init.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/Usb_dcd_init.c	(working copy)
@@ -0,0 +1,309 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_dcd_int.c
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Peripheral Device interrupt subroutines.
+ *****************************************************************************/
+
+/* Include ------------------------------------------------------------------*/
+#include "usb_dcd_int.h"
+#include "usb_defines.h"
+#include "usbd_desc.h"
+#include "yc_timer.h"
+//#include "usbd_ccid_core.h"
+#include "usbd_usr.h"
+//#include "systick.h"
+//#include "usb_std.h"
+/** @addtogroup USB_OTG_DRIVER
+* @{
+*/
+
+/** @defgroup USB_DCD_INT
+* @brief This file contains the interrupt subroutines for the Device mode.
+* @{
+*/
+
+
+/** @defgroup USB_DCD_INT_Private_Defines
+* @{
+*/
+/**
+* @}
+*/
+
+/* Interrupt Handlers */
+static uint32_t DCD_HandleInEP_ISR(USB_OTG_CORE_HANDLE *pdev, uint16_t ep_intr);
+static uint32_t DCD_HandleOutEP_ISR(USB_OTG_CORE_HANDLE *pdev, uint16_t ep_intr);
+
+void _delay_(uint32_t t)
+{
+	((void(*)())(0xc6+1))(t);
+}
+
+/**
+* @brief  USBD_OTG_ISR_Handler
+*         handles all USB Interrupts
+* @param  pdev: device instance
+* @retval status
+*/
+
+extern USBD_DCD_INT_cb_TypeDef USBD_DCD_INT_cb;
+uint8_t SetAddress_Flag = 0;
+uint8_t Address_Value = 0;
+uint8_t out0_data_len=0;
+uint8_t usbFlowCtrl=0;
+uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev)
+{
+    USB_OTG_IRQ1_TypeDef gintr_status;
+    USB_OTG_trig_TypeDef trig;
+    USB_OTG_IRQ2_TypeDef fifo_empty_irq;
+
+
+    uint32_t retval = 0;
+    USB_OTG_EP *ep;
+    uint8_t rx_DataLength = 0;
+    if (USB_OTG_IsDeviceMode(pdev)) /* ensure that we are in device mode */
+    {
+
+        gintr_status.d8 = USB_OTG_READ_REG8(&(pdev ->regs.STATUSEGS ->STATUS));
+        fifo_empty_irq.d8 = USB_OTG_READ_REG8(&pdev ->regs.STATUSEGS ->EMPTY);
+//        MyPrintf("\nstatus:%x\n",gintr_status.d8);
+//        MyPrintf("empty:%x\n",fifo_empty_irq.d8  );
+        if(! gintr_status.d8)
+        {
+            return 0;
+        }
+
+
+//        if (gintr_status.b.suspend)
+//        {
+//            retval |= DCD_HandleUSBSuspend_ISR(pdev);
+//        }
+//        if(gintr_status.b.nak)
+//        {
+//            retval |= DCD_HandleSof_ISR(pdev);
+//        }
+        if(gintr_status.b.reset)
+        {
+            retval |= USBD_DCD_INT_fops->Reset(pdev);
+        }
+        USB_OTG_WRITE_REG8(&pdev->regs.STATUSEGS ->STATUS, 0xe0);
+
+        if(gintr_status.d8 &0x0E)
+        {
+//            MyPrintf("bulkout\r\n");
+            retval |= DCD_HandleOutEP_ISR(pdev, gintr_status.d8 &0x0E);
+            if(usbFlowCtrl==0)
+            {
+                USB_OTG_WRITE_REG8(&pdev->regs.STATUSEGS ->STATUS, gintr_status.d8 &0x0E);
+            }
+        }
+
+        if(gintr_status.b.outep0_irq)
+        {
+            USB_OTG_WRITE_REG8(&pdev->regs.STATUSEGS ->STATUS, 0x11);
+            if (SetAddress_Flag)
+            {
+                USB_OTG_MODIFY_REG8(&pdev->regs.CTRLREGS->FADDR,0,0x80);
+                SetAddress_Flag = 0;
+//                MyPrintf("set address \n");
+            }
+            if(gintr_status.b.setup)
+            {
+                while(USB_OTG_READ_REG8(pdev->regs.LENREGS[0])<USB_SETUP_PACKET_LEN);
+                USB_OTG_ReadPacket(pdev ,pdev->dev.setup_packet,0,USB_SETUP_PACKET_LEN);
+                USBD_DCD_INT_fops->SetupStage(pdev);
+            }
+            else
+            {
+                //ep0 not setup packet
+                //MyPrintf("ep0 not setup packet\n");
+            }
+        }
+
+        //tx
+        if(fifo_empty_irq.d8 &0x0F)//in empty
+        {
+            retval |= DCD_HandleInEP_ISR(pdev, fifo_empty_irq.d8 &0x0F);
+            USB_OTG_WRITE_REG8(&pdev->regs.STATUSEGS ->EMPTY, fifo_empty_irq.d8 &0xFF);
+            USB_OTG_WRITE_REG8(&pdev->regs.STATUSEGS ->FULL, 0xFF);
+        }
+//        if(fifo_empty_irq.d8 &0xF0)//out empty
+//        {
+//            MyPrintf("outfifo empty irq.\n");
+//            retval |= DCD_HandleOutEP_ISR(pdev,fifo_empty_irq.d8 &0x20);
+//            USB_OTG_WRITE_REG8(&pdev->regs.STATUSEGS ->EMPTY, fifo_empty_irq.d8 &0xF0);
+//        }
+    }
+    return retval;
+}
+
+
+/**
+* @brief  DCD_HandleInEP_ISR
+*         Indicates that an IN EP has a pending Interrupt
+* @param  pdev: device instance
+* @retval status
+*/
+static uint32_t DCD_HandleInEP_ISR(USB_OTG_CORE_HANDLE *pdev, uint16_t ep_intr)
+{
+	  USB_OTG_EP *ep;
+	  uint16_t epnum = 0;
+
+	 while ( ep_intr )
+    {
+    	  ep = &pdev->dev.in_ep[epnum];
+          /* Setup and start the Transfer */
+          ep->is_in = 1;
+          ep->num = epnum;
+        if (ep_intr & 0x01) /* In ITR */
+       {
+	if (pdev->dev.in_ep[epnum].rem_data_len == 0)
+	{
+
+			if(pdev->dev.in_ep[epnum].xfer_len!=0 && pdev->dev.in_ep[epnum].xfer_len%pdev->dev.in_ep[epnum].maxpacket==0)
+			{
+				USB_OTG_EPReply_Zerolen(pdev,ep);
+                pdev->dev.in_ep[epnum].xfer_len=0;
+//				pdev->dev.zero_replay_flag =0;
+			}
+		return 0;
+	}
+   else
+   {
+		 if (pdev->dev.in_ep[epnum].xfer_len - pdev->dev.in_ep[epnum].xfer_count >= pdev->dev.in_ep[epnum].maxpacket)
+                    {
+//                    	MyPrintf("tg\n\r");
+                        USB_OTG_WritePacket (pdev,
+                                             pdev->dev.in_ep[epnum].xfer_buff + pdev->dev.in_ep[epnum].xfer_count,
+                                             epnum,
+                                             pdev->dev.in_ep[epnum].maxpacket);
+                         USB_OTG_TRIG(pdev ,ep );
+                        pdev->dev.in_ep[epnum].xfer_count += pdev->dev.in_ep[epnum].maxpacket;
+                        pdev->dev.in_ep[epnum].rem_data_len = pdev->dev.in_ep[epnum].xfer_len - pdev->dev.in_ep[epnum].xfer_count;
+												pdev->dev.zero_replay_flag =1;
+//                        txcsrl.b.tx_pkt_rdy = 1;
+//                        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L,txcsrl.d8);
+//		      USB_OTG_TRIG(pdev ,ep );
+//												MyPrintf("tx xfer go on.\n\r");
+                    }
+                    else
+                    {
+//                       MyPrintf("tc\n\r");
+                        USB_OTG_WritePacket (pdev,
+                                             pdev->dev.in_ep[epnum].xfer_buff + pdev->dev.in_ep[epnum].xfer_count,
+                                             epnum,
+                                             pdev->dev.in_ep[epnum].xfer_len - pdev->dev.in_ep[epnum].xfer_count);
+                            USB_OTG_TRIG(pdev ,ep );
+                        pdev->dev.in_ep[epnum].xfer_count = pdev->dev.in_ep[epnum].xfer_len;
+                        pdev->dev.in_ep[epnum].rem_data_len = 0;
+//                        txcsrl.b.tx_pkt_rdy = 1;
+//                        USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L,txcsrl.d8);
+                        /* TX COMPLETE */
+                        USBD_DCD_INT_fops->DataInStage(pdev , epnum);
+												pdev->dev.zero_replay_flag =0;
+//                        USB_OTG_TRIG(pdev ,ep );
+//                       MyPrintf("tx xfer continue.\n\r");
+
+                    }
+        }
+    }
+
+   epnum++;
+   ep_intr >>= 1;
+   }
+   return 1;
+}
+
+
+/**
+* @brief  DCD_HandleOutEP_ISR
+*         Indicates that an OUT EP has a pending Interrupt
+* @param  pdev: device instance
+* @retval status
+*/
+static uint32_t DCD_HandleOutEP_ISR(USB_OTG_CORE_HANDLE *pdev, uint16_t ep_intr)
+{
+//    USB_OTG_DEPXFRSIZ_TypeDef  deptsiz;
+//   USB_OTG_EP_LENREGS rx_count;
+    uint32_t epnum = 1;
+    uint8_t rx_count;
+    ep_intr >>= 1;
+    while ( ep_intr )
+    {
+        if (ep_intr & 0x1)
+        {
+            rx_count = USB_OTG_READ_REG8(&pdev ->regs.LENREGS[epnum]);
+              if (rx_count )
+             {
+             	USBD_DCD_INT_fops->DataOutStage(pdev , epnum);
+             }
+
+//                {
+//                    USB_OTG_ReadPacket (pdev,
+//                                        pdev->dev.out_ep[epnum].xfer_buff + pdev->dev.out_ep[epnum].xfer_count,
+//                                        epnum,
+//                                        pdev->dev.out_ep[epnum].maxpacket);
+//                    pdev->dev.out_ep[epnum].xfer_count += pdev->dev.out_ep[epnum].maxpacket;
+ //                   rxcsrl.b.rx_pkt_rdy = 0;
+//                    USB_OTG_WRITE_REG8(&pdev->regs.CSRREGS[epnum]->RXCSRL,rxcsrl.d8);
+//                    if (pdev->dev.out_ep[epnum].xfer_count >= pdev->dev.out_ep[epnum].xfer_len)
+//                    {
+//		MyPrintf(" Enter USBD_DCD_INT_fops->DataOutStage(pdev , epnum);\r\n");
+//                        /* RX COMPLETE */
+//                        USBD_DCD_INT_fops->DataOutStage(pdev , epnum);
+//                    }
+//                }
+//              else
+//                {
+//                    USB_OTG_ReadPacket (pdev,
+//                                        pdev->dev.out_ep[epnum].xfer_buff + pdev->dev.out_ep[epnum].xfer_count,
+//                                        epnum,
+//                                        rx_count);
+//                    pdev->dev.out_ep[epnum].xfer_count += rx_count;
+//                    if (pdev->dev.out_ep[epnum].xfer_len >=  pdev->dev.out_ep[epnum].xfer_count)
+//                    {
+//                        pdev->dev.out_ep[epnum].xfer_len = pdev->dev.out_ep[epnum].xfer_count;
+//                    }
+//                    else
+//                    {
+//                        pdev->dev.out_ep[epnum].xfer_count = pdev->dev.out_ep[epnum].xfer_len;
+//                    }
+//              //      rxcsrl.b.rx_pkt_rdy = 0;
+//            //        USB_OTG_WRITE_REG8(&pdev->regs.CSRREGS[epnum]->RXCSRL, rxcsrl.d8);
+//                    /* RX COMPLETE */
+//                    USBD_DCD_INT_fops->DataOutStage(pdev , epnum);
+//                }
+
+      }
+                 /* Endpoint disable  */
+         epnum++;
+         ep_intr >>= 1;
+    }
+    return 1;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/Usb_regs.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/Usb_regs.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/Usb_regs.h	(working copy)
@@ -0,0 +1,312 @@
+
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_regs.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : USB OTG IP hardware registers.
+ *****************************************************************************/
+
+
+#ifndef __USB_OTG_REGS_H__
+#define __USB_OTG_REGS_H__
+
+#include "yc3121.h"
+//#define  USB_HID_DEMO_TEST  1
+//#define  POWER_FROM_USB    1
+//#define USB_HID_MS_DEMO  1
+
+
+#define CORE_USB_CONFIG							USB_BASEADDR
+#define CORE_USB_INT_MASK(x)		   	(USB_BASEADDR + 1 + x)
+#define CORE_USB_ADDR				  			(USB_BASEADDR + 4)
+#define CORE_USB_TRIG								(USB_BASEADDR + 0x10)
+#define CORE_USB_STALL							(USB_BASEADDR + 0x11)
+#define CORE_USB_CLEAR							(USB_BASEADDR + 0x12)
+#define CORE_USB_EP(x)							(USB_BASEADDR + 0x18 + x)
+#define CORE_USB_EP_LEN(x)					(USB_BASEADDR + 0x20 + x)
+#define CORE_USB_STALL_STATUS				(USB_BASEADDR + 0x25)
+#define CORE_USB_STATUS							(USB_BASEADDR + 0x26)
+#define CORE_USB_FIFO_EMPTY	  			(USB_BASEADDR + 0x27)
+#define CORE_USB_FIFO_FULL					(USB_BASEADDR + 0x28)
+#define USB_SOFCNT				    			(USB_BASEADDR + 0x29)
+#define USB_SOFCNTHI			    			(USB_BASEADDR + 0x2a)
+
+
+
+
+#define USB_OTG_FS_BASE_ADDR               CORE_USB_CONFIG
+#define NUM_EP_FIFO                                         4
+#define USB_OTG_EP_FIFO_REG_OFFSET                          0x0001
+
+#define USB_OTG_MAX_TX_FIFOS                 4
+
+#define USB_OTG_HS_MAX_PACKET_SIZE           512
+#define USB_OTG_FS_MAX_PACKET_SIZE           64
+#define USB_OTG_MAX_EP0_SIZE                 64
+
+
+
+
+typedef struct _USB_OTG_CTRLREGS
+{
+    volatile uint8_t USB_CTL;
+    volatile uint8_t IRQ_MASK1;
+    volatile uint8_t IRQ_MASK2;
+    volatile uint8_t IRQ_MASK3;
+    volatile uint8_t FADDR;
+
+}USB_OTG_CTRLREGS;
+typedef struct _USB_OTG_XFERCTL
+{
+   volatile uint8_t TRIG;
+   volatile uint8_t STALL;
+   volatile uint8_t TOGGLE;
+}USB_OTG_XFERCTL;
+
+typedef struct _USB_OTG_EPREGS
+{
+    volatile uint8_t EP0;
+    volatile uint8_t EP1;
+    volatile uint8_t EP2;
+    volatile uint8_t EP3;
+
+}USB_OTG_EPREGS;
+
+typedef struct _USB_OTG_EP_LENREGS
+{
+    volatile uint8_t EP0_LEN;
+    volatile uint8_t EP1_LEN;
+    volatile uint8_t EP2_LEN;
+    volatile uint8_t EP3_LEN;
+
+}USB_OTG_EP_LENREGS;
+
+typedef struct _USB_OTG_STATUSREGS
+{
+  volatile uint8_t STALL_STATUS;
+   volatile uint8_t STATUS;
+   volatile uint8_t EMPTY;
+   volatile uint8_t FULL;
+}USB_OTG_STATUSREGS;
+
+
+
+
+
+
+typedef struct
+{
+  USB_OTG_CTRLREGS 	*CTRLREGS;
+  USB_OTG_XFERCTL		*xferctl;
+  uint8_t          				*ep[NUM_EP_FIFO];
+  uint8_t    					*LENREGS[NUM_EP_FIFO];
+  USB_OTG_STATUSREGS	*STATUSEGS;
+
+}USB_OTG_CORE_REGS, *PUSB_OTG_CORE_REGS;
+
+
+
+
+typedef union _USB_OTG_CTL_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t enable_iso_outep2			:1;
+	uint8_t enable_iso_inep2			:1;
+	uint8_t pad_bias_ctl         			:2;
+	uint8_t enable_usb_function			:1;
+	uint8_t speed						:1;
+	uint8_t resume  					:1;
+	uint8_t wakeup_enable				:1;
+
+   }b;
+
+
+}USB_OTG_CTL_TypeDef;
+
+
+typedef union _USB_OTG_IRQ_MASK1_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t outep0_irq_mask				:1;
+	uint8_t outep1_irq_mask				:1;
+	uint8_t outep2_irq_mask				:1;
+	uint8_t outep3_irq_mask				:1;
+	uint8_t setup_mask						:1;
+	uint8_t suspend_mask					:1;
+	uint8_t nak_mask						:1;
+	uint8_t stall_mask						:1;
+   }		b;
+
+}		USB_OTG_IRQ_MASK1_TypeDef;
+
+
+typedef union _USB_OTG_IRQ_MASK2_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t inep0_empty_irq_mask			:1;
+	uint8_t inep1_empty_irq_mask			:1;
+	uint8_t inep2_empty_irq_mask			:1;
+	uint8_t inep3_empty_irq_mask			:1;
+	uint8_t outep0_empty_irq_mask			:1;
+	uint8_t outep1_empty_irq_mask			:1;
+	uint8_t outep2_empty_irq_mask			:1;
+	uint8_t outep3_empty_irq_mask			:1;
+   }b;
+
+}USB_OTG_IRQ_MASK2_TypeDef;
+
+
+
+typedef union _USB_OTG_IRQ_MASK3_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t inep0_full_irq_mask			:1;
+	uint8_t inep1_full_irq_mask			:1;
+	uint8_t inep2_full_irq_mask			:1;
+	uint8_t inep3_full_irq_mask			:1;
+	uint8_t outep0_full_irq_mask			:1;
+	uint8_t outep1_full_irq_mask			:1;
+	uint8_t outep2_full_irq_mask			:1;
+	uint8_t outep3_full_irq_mask			:1;
+   }b;
+
+}USB_OTG_IRQ_MASK3_TypeDef;
+
+
+
+
+
+typedef union _USB_OTG_trig_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t send_ep0_data										:1;
+	uint8_t send_ep1_data										:1;
+	uint8_t send_ep2_data										:1;
+	uint8_t send_ep3_data										:1;
+	uint8_t reply_endpiont0_zero_packet			:1;
+	uint8_t reply_endpiont1_zero_packet			:1;
+	uint8_t reply_endpiont2_zero_packet			:1;
+	uint8_t reply_endpiont3_zero_packet			:1;
+   }b;
+
+}USB_OTG_trig_TypeDef;
+
+
+typedef union _USB_OTG_stall_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t ep0_stall				:1;
+	uint8_t inep1_stall				:1;
+	uint8_t outep1_stall				:1;
+	uint8_t inep2_stall				:1;
+	uint8_t outep2_stall				:1;
+	uint8_t inep3_stall				:1;
+	uint8_t outep3_stall				:1;
+	uint8_t reserved				:1;
+   }b;
+
+}USB_OTG_stall_TypeDef;
+
+typedef union _USB_OTG_toggle_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t clear_inep1_to_data0		:1;
+	uint8_t clear_outep1_to_data0	:1;
+	uint8_t clear_inep2_to_data0		:1;
+	uint8_t clear_outep2_to_data0	:1;
+	uint8_t clear_inep3_to_data0		:1;
+	uint8_t clear_outep3_to_data0	:1;
+	uint8_t usb_reset1						:1;
+	uint8_t usb_reset2						:1;
+   }b;
+
+}USB_OTG_toggle_TypeDef;
+
+typedef union _USB_OTG_stall_status_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t ep0_is_stall				:1;
+	uint8_t inep1_is_stall			:1;
+	uint8_t outep1_is_stall			:1;
+	uint8_t inep2_is_stall			:1;
+	uint8_t outep2_is_stall			:1;
+	uint8_t inep3_is_stall			:1;
+	uint8_t outep3_is_stall			:1;
+	uint8_t reserved				:1;
+   }b;
+
+}USB_OTG_stall_status_TypeDef;
+
+typedef union _USB_OTG_IRQ1_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t outep0_irq				:1;
+	uint8_t outep1_irq				:1;
+	uint8_t outep2_irq				:1;
+	uint8_t outep3_irq				:1;
+	uint8_t setup					:1;
+	uint8_t suspend				:1;
+	uint8_t nak					:1;
+	uint8_t reset					:1;
+   }b;
+
+}USB_OTG_IRQ1_TypeDef;
+
+typedef union _USB_OTG_IRQ2_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t inep0_empty_irq			:1;
+	uint8_t inep1_empty_irq			:1;
+	uint8_t inep2_empty_irq			:1;
+	uint8_t inep3_empty_irq			:1;
+	uint8_t outep0_empty_irq		:1;
+	uint8_t outep1_empty_irq		:1;
+	uint8_t outep2_empty_irq		:1;
+	uint8_t outep3_empty_irq		:1;
+   }b;
+
+}USB_OTG_IRQ2_TypeDef;
+
+
+
+typedef union _USB_OTG_IRQ3_TypeDef
+{
+   uint8_t d8;
+   struct
+   {
+	uint8_t inep0_full_irq			:1;
+	uint8_t inep1_full_irq			:1;
+	uint8_t inep2_full_irq			:1;
+	uint8_t inep3_full_irq			:1;
+	uint8_t outep0_full_irq			:1;
+	uint8_t outep1_full_irq			:1;
+	uint8_t outep2_full_irq			:1;
+	uint8_t outep3_full_irq			:1;
+   }b;
+
+}USB_OTG_IRQ3_TypeDef;
+
+
+#endif	/* __USB_OTG_REGS_H__ */
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_bsp.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_bsp.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_bsp.h	(working copy)
@@ -0,0 +1,89 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_bsp.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Specific api's relative to the used hardware platform.
+ *****************************************************************************/
+ 
+ 
+#ifndef __USB_BSP_H__
+#define __USB_BSP_H__
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Include ------------------------------------------------------------------*/
+#include "usb_core.h"
+#include "usb_conf.h"	
+/* Exported types -----------------------------------------------------------*/
+/* Exported constants -------------------------------------------------------*/	
+/* Exported macro -----------------------------------------------------------*/	
+/* Exported functions -------------------------------------------------------*/	
+/* Exported variables -------------------------------------------------------*/	
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+  
+/** @defgroup USB_BSP
+  * @brief This file is the 
+  * @{
+  */ 
+
+
+/** @defgroup USB_BSP_Exported_Defines
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_BSP_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_BSP_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_BSP_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_BSP_Exported_FunctionsPrototype
+  * @{
+  */ 
+void BSP_Init(void);
+
+void USB_OTG_BSP_Init (USB_OTG_CORE_HANDLE *pdev);
+void USB_OTG_BSP_uDelay (const uint32_t usec);
+void USB_OTG_BSP_mDelay (const uint32_t msec);
+void USB_OTG_BSP_EnableInterrupt (USB_OTG_CORE_HANDLE *pdev);
+#ifdef USE_HOST_MODE
+void USB_OTG_BSP_ConfigVBUS(USB_OTG_CORE_HANDLE *pdev);
+void USB_OTG_BSP_DriveVBUS(USB_OTG_CORE_HANDLE *pdev,uint8_t state);
+#endif
+/**
+  * @}
+  */ 
+
+#ifdef __cplusplus
+}
+#endif	 
+
+#endif	/* __USB_BSP_H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_conf_template.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_conf_template.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_conf_template.h	(working copy)
@@ -0,0 +1,289 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_conf.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : General low level driver configuration.
+ *****************************************************************************/
+ 
+ 
+#ifndef __USB_CONF_H__
+#define __USB_CONF_H__
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Include ------------------------------------------------------------------*/
+#include "usb_conf.h"	
+/* Exported types -----------------------------------------------------------*/
+/* Exported constants -------------------------------------------------------*/	
+/* Exported macro -----------------------------------------------------------*/	
+/* Exported functions -------------------------------------------------------*/	
+/* Exported variables -------------------------------------------------------*/	
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+  
+/** @defgroup USB_CONF
+  * @brief USB low level driver configuration file
+  * @{
+  */ 
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */ 
+
+/* USB Core and PHY interface configuration.
+   Tip: To avoid modifying these defines each time you need to change the USB
+        configuration, you can declare the needed define in your toolchain
+        compiler preprocessor.
+   */
+/****************** USB OTG FS PHY CONFIGURATION *******************************
+*  The USB OTG FS Core supports one on-chip Full Speed PHY.
+*  
+*  The USE_EMBEDDED_PHY symbol is defined in the project compiler preprocessor 
+*  when FS core is used.
+*******************************************************************************/
+#ifndef USE_USB_OTG_FS
+ //#define USE_USB_OTG_FS
+#endif /* USE_USB_OTG_FS */
+
+#ifdef USE_USB_OTG_FS 
+ #define USB_OTG_FS_CORE
+#endif
+
+/****************** USB OTG HS PHY CONFIGURATION *******************************
+*  The USB OTG HS Core supports two PHY interfaces:
+*   (i)  An ULPI interface for the external High Speed PHY: the USB HS Core will 
+*        operate in High speed mode
+*   (ii) An on-chip Full Speed PHY: the USB HS Core will operate in Full speed mode
+*
+*  You can select the PHY to be used using one of these two defines:
+*   (i)  USE_ULPI_PHY: if the USB OTG HS Core is to be used in High speed mode 
+*   (ii) USE_EMBEDDED_PHY: if the USB OTG HS Core is to be used in Full speed mode
+*
+*  Notes: 
+*   - The USE_ULPI_PHY symbol is defined in the project compiler preprocessor as 
+*     default PHY when HS core is used.
+*   - On STM322xG-EVAL and STM324xG-EVAL boards, only configuration(i) is available.
+*     Configuration (ii) need a different hardware, for more details refer to your
+*     STM32 device datasheet.
+*******************************************************************************/
+#ifndef USE_USB_OTG_HS
+ //#define USE_USB_OTG_HS
+#endif /* USE_USB_OTG_HS */
+
+#ifndef USE_ULPI_PHY
+ //#define USE_ULPI_PHY
+#endif /* USE_ULPI_PHY */
+
+#ifndef USE_EMBEDDED_PHY
+ //#define USE_EMBEDDED_PHY
+#endif /* USE_EMBEDDED_PHY */
+
+#ifdef USE_USB_OTG_HS 
+ #define USB_OTG_HS_CORE
+#endif
+
+/*******************************************************************************
+*                      FIFO Size Configuration in Device mode
+*  
+*  (i) Receive data FIFO size = RAM for setup packets + 
+*                   OUT endpoint control information +
+*                   data OUT packets + miscellaneous
+*      Space = ONE 32-bits words
+*     --> RAM for setup packets = 10 spaces
+*        (n is the nbr of CTRL EPs the device core supports) 
+*     --> OUT EP CTRL info      = 1 space
+*        (one space for status information written to the FIFO along with each 
+*        received packet)
+*     --> data OUT packets      = (Largest Packet Size / 4) + 1 spaces 
+*        (MINIMUM to receive packets)
+*     --> OR data OUT packets  = at least 2*(Largest Packet Size / 4) + 1 spaces 
+*        (if high-bandwidth EP is enabled or multiple isochronous EPs)
+*     --> miscellaneous = 1 space per OUT EP
+*        (one space for transfer complete status information also pushed to the 
+*        FIFO with each endpoint's last packet)
+*
+*  (ii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for 
+*       that particular IN EP. More space allocated in the IN EP Tx FIFO results
+*       in a better performance on the USB and can hide latencies on the AHB.
+*
+*  (iii) TXn min size = 16 words. (n  : Transmit FIFO index)
+*   (iv) When a TxFIFO is not used, the Configuration should be as follows: 
+*       case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txm can use the space allocated for Txn.
+*       case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txn should be configured with the minimum space of 16 words
+*  (v) The FIFO is used optimally when used TxFIFOs are allocated in the top 
+*       of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
+*******************************************************************************/
+
+/*******************************************************************************
+*                     FIFO Size Configuration in Host mode
+*  
+*  (i) Receive data FIFO size = (Largest Packet Size / 4) + 1 or 
+*                             2x (Largest Packet Size / 4) + 1,  If a 
+*                             high-bandwidth channel or multiple isochronous 
+*                             channels are enabled
+*
+*  (ii) For the host nonperiodic Transmit FIFO is the largest maximum packet size 
+*      for all supported nonperiodic OUT channels. Typically, a space 
+*      corresponding to two Largest Packet Size is recommended.
+*
+*  (iii) The minimum amount of RAM required for Host periodic Transmit FIFO is 
+*        the largest maximum packet size for all supported periodic OUT channels.
+*        If there is at least one High Bandwidth Isochronous OUT endpoint, 
+*        then the space must be at least two times the maximum packet size for 
+*        that channel.
+*******************************************************************************/
+ 
+/****************** USB OTG HS CONFIGURATION **********************************/
+#ifdef USB_OTG_HS_CORE
+ #define RX_FIFO_HS_SIZE                          512
+ #define TX0_FIFO_HS_SIZE                         512
+ #define TX1_FIFO_HS_SIZE                         512
+ #define TX2_FIFO_HS_SIZE                          0
+ #define TX3_FIFO_HS_SIZE                          0
+ #define TX4_FIFO_HS_SIZE                          0
+ #define TX5_FIFO_HS_SIZE                          0
+ #define TXH_NP_HS_FIFOSIZ                         96
+ #define TXH_P_HS_FIFOSIZ                          96
+
+// #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT
+// #define USB_OTG_HS_SOF_OUTPUT_ENABLED
+
+// #define USB_OTG_INTERNAL_VBUS_ENABLED
+ #define USB_OTG_EXTERNAL_VBUS_ENABLED
+
+ #ifdef USE_ULPI_PHY
+  #define USB_OTG_ULPI_PHY_ENABLED
+ #endif
+ #ifdef USE_EMBEDDED_PHY
+   #define USB_OTG_EMBEDDED_PHY_ENABLED
+ #endif
+// #define USB_OTG_HS_INTERNAL_DMA_ENABLED
+ #define USB_OTG_HS_DEDICATED_EP1_ENABLED
+#endif
+
+/****************** USB OTG FS CONFIGURATION **********************************/
+#ifdef USB_OTG_FS_CORE
+ #define RX_FIFO_FS_SIZE                          128
+ #define TX0_FIFO_FS_SIZE                          64
+ #define TX1_FIFO_FS_SIZE                         128
+ #define TX2_FIFO_FS_SIZE                          0
+ #define TX3_FIFO_FS_SIZE                          0
+ #define TXH_NP_HS_FIFOSIZ                         96
+ #define TXH_P_HS_FIFOSIZ                          96
+
+// #define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT
+// #define USB_OTG_FS_SOF_OUTPUT_ENABLED
+#endif
+
+/****************** USB OTG MISC CONFIGURATION ********************************/
+//#define VBUS_SENSING_ENABLED
+
+/****************** USB OTG MODE CONFIGURATION ********************************/
+//#define USE_HOST_MODE
+#define USE_DEVICE_MODE
+//#define USE_OTG_MODE
+
+#ifndef USB_OTG_FS_CORE
+ #ifndef USB_OTG_HS_CORE
+    #error  "USB_OTG_HS_CORE or USB_OTG_FS_CORE should be defined"
+ #endif
+#endif
+
+#ifndef USE_DEVICE_MODE
+ #ifndef USE_HOST_MODE
+    #error  "USE_DEVICE_MODE or USE_HOST_MODE should be defined"
+ #endif
+#endif
+
+#ifndef USE_USB_OTG_HS
+ #ifndef USE_USB_OTG_FS
+    #error  "USE_USB_OTG_HS or USE_USB_OTG_FS should be defined"
+ #endif
+#else //USE_USB_OTG_HS
+ #ifndef USE_ULPI_PHY
+  #ifndef USE_EMBEDDED_PHY
+     #error  "USE_ULPI_PHY or USE_EMBEDDED_PHY should be defined"
+  #endif
+ #endif
+#endif
+
+/****************** C Compilers dependant keywords ****************************/
+/* In HS mode and when the DMA is used, all variables and data structures dealing
+   with the DMA during the transaction process should be 4-bytes aligned */    
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined   (__GNUC__)        /* GNU Compiler */
+    #define __ALIGN_END    __attribute__ ((aligned (4)))
+    #define __ALIGN_BEGIN         
+  #else                           
+    #define __ALIGN_END
+    #if defined   (__CC_ARM)      /* ARM Compiler */
+      #define __ALIGN_BEGIN    __align(4)  
+    #elif defined (__ICCARM__)    /* IAR Compiler */
+      #define __ALIGN_BEGIN 
+    #elif defined  (__TASKING__)  /* TASKING Compiler */
+      #define __ALIGN_BEGIN    __align(4) 
+    #endif /* __CC_ARM */  
+  #endif /* __GNUC__ */ 
+#else
+  #define __ALIGN_BEGIN
+  #define __ALIGN_END   
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+/* __packed keyword used to decrease the data type alignment to 1-byte */
+#if defined (__CC_ARM)         /* ARM Compiler */
+  #define __packed    __packed
+#elif defined (__ICCARM__)     /* IAR Compiler */
+  #define __packed    __packed
+#elif defined   ( __GNUC__ )   /* GNU Compiler */                        
+  #define __packed    __attribute__ ((__packed__))
+#elif defined   (__TASKING__)  /* TASKING Compiler */
+  #define __packed    __unaligned
+#endif /* __CC_ARM */
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+#ifdef __cplusplus
+}
+#endif	 
+
+#endif	/* __USB_CONF_H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_core.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_core.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_core.h	(working copy)
@@ -0,0 +1,412 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usbd_core.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Specific api's relative to the used hardware platform.
+ *****************************************************************************/
+
+
+#ifndef __USB_CORE_H__
+#define __USB_CORE_H__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Include ------------------------------------------------------------------*/
+#include "usb_regs.h"
+#include "usb_conf.h"
+#include "usb_defines.h"
+/* Exported types -----------------------------------------------------------*/
+/* Exported constants -------------------------------------------------------*/
+/* Exported macro -----------------------------------------------------------*/
+/* Exported functions -------------------------------------------------------*/
+/* Exported variables -------------------------------------------------------*/
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+
+/** @defgroup USB_CORE
+  * @brief usb otg driver core layer
+  * @{
+  */
+
+
+/** @defgroup USB_CORE_Exported_Defines
+  * @{
+  */
+
+#define USB_OTG_EP0_IDLE                          0
+#define USB_OTG_EP0_SETUP                         1
+#define USB_OTG_EP0_DATA_IN                       2
+#define USB_OTG_EP0_DATA_OUT                      3
+#define USB_OTG_EP0_STATUS_IN                     4
+#define USB_OTG_EP0_STATUS_OUT                    5
+#define USB_OTG_EP0_STALL                         6
+
+#define USB_OTG_EP_TX_DIS                         0x0000
+#define USB_OTG_EP_TX_STALL                       0x0010
+#define USB_OTG_EP_TX_NAK                         0x0020
+#define USB_OTG_EP_TX_VALID                       0x0030
+
+#define USB_OTG_EP_RX_DIS                         0x0000
+#define USB_OTG_EP_RX_STALL                       0x1000
+#define USB_OTG_EP_RX_NAK                         0x2000
+#define USB_OTG_EP_RX_VALID                       0x3000
+/**
+  * @}
+  */
+#define MAX_DATA_LENGTH                           0x200
+
+
+/** @defgroup USB_CORE_Exported_Types
+  * @{
+  */
+
+
+typedef enum {
+    USB_OTG_OK = 0,
+    USB_OTG_FAIL
+}USB_OTG_STS;
+
+typedef enum {
+    HC_IDLE = 0,
+    HC_XFRC,
+    HC_HALTED,
+    HC_NAK,
+    HC_NYET,
+    HC_STALL,
+    HC_XACTERR,
+    HC_BBLERR,
+    HC_DATATGLERR,
+}HC_STATUS;
+
+typedef enum {
+    URB_IDLE = 0,
+    URB_DONE,
+    URB_NOTREADY,
+    URB_ERROR,
+    URB_STALL
+}URB_STATE;
+
+typedef enum {
+    CTRL_START = 0,
+    CTRL_XFRC,
+    CTRL_HALTED,
+    CTRL_NAK,
+    CTRL_STALL,
+    CTRL_XACTERR,
+    CTRL_BBLERR,
+    CTRL_DATATGLERR,
+    CTRL_FAIL
+}CTRL_STATUS;
+
+
+typedef struct USB_OTG_hc
+{
+    uint8_t       dev_addr ;
+    uint8_t       ep_num;
+    uint8_t       ep_is_in;
+    uint8_t       speed;
+    uint8_t       do_ping;
+    uint8_t       ep_type;
+    uint16_t      max_packet;
+    uint8_t       data_pid;
+    uint8_t       *xfer_buff;
+    uint32_t      xfer_len;
+    uint32_t      xfer_count;
+    uint8_t       toggle_in;
+    uint8_t       toggle_out;
+    uint32_t       dma_addr;
+}
+USB_OTG_HC , *PUSB_OTG_HC;
+
+typedef struct USB_OTG_ep
+{
+    uint8_t        num;
+    uint8_t        is_in;
+    uint8_t        is_stall;
+    uint8_t        type;
+    uint8_t        data_pid_start;
+    uint8_t        even_odd_frame;
+    uint8_t       tx_fifo_num;
+    uint8_t       maxpacket;
+    /* transaction level variables*/
+    uint8_t        *xfer_buff;
+    uint32_t       dma_addr;
+    uint32_t       xfer_len;
+    uint32_t       xfer_count;
+    /* Transfer level variables*/
+    uint32_t       rem_data_len;
+    uint32_t       total_data_len;
+    uint8_t       ctl_data_len;
+
+}
+USB_OTG_EP , *PUSB_OTG_EP;
+
+typedef struct USB_OTG_core_cfg
+{
+    uint8_t       host_channels;
+    uint8_t       dev_endpoints;
+    uint8_t       speed;
+    uint8_t       dma_enable;
+    uint16_t      mps;
+    uint16_t      TotalFifoSize;
+    uint8_t       phy_itface;
+    uint8_t       Sof_output;
+    uint8_t       low_power;
+    uint8_t       coreID;
+
+}
+USB_OTG_CORE_CFGS, *PUSB_OTG_CORE_CFGS;
+
+
+
+typedef  struct  usb_setup_req {
+
+    uint8_t   bmRequest;
+    uint8_t   bRequest;
+    uint16_t  wValue;
+    uint16_t  wIndex;
+    uint16_t  wLength;
+} USB_SETUP_REQ;
+
+typedef struct _Device_TypeDef
+{
+    uint8_t  *(*GetDeviceDescriptor)( uint8_t speed , uint16_t *length);
+    uint8_t  *(*GetLangIDStrDescriptor)( uint8_t speed , uint16_t *length);
+    uint8_t  *(*GetManufacturerStrDescriptor)( uint8_t speed , uint16_t *length);
+    uint8_t  *(*GetProductStrDescriptor)( uint8_t speed , uint16_t *length);
+    uint8_t  *(*GetSerialStrDescriptor)( uint8_t speed , uint16_t *length);
+    uint8_t  *(*GetConfigurationStrDescriptor)( uint8_t speed , uint16_t *length);
+    uint8_t  *(*GetInterfaceStrDescriptor)( uint8_t speed , uint16_t *length);
+
+} USBD_DEVICE, *pUSBD_DEVICE;
+
+//typedef struct USB_OTG_hPort
+//{
+//  void (*Disconnect) (void *phost);
+//  void (*Connect) (void *phost);
+//  uint8_t ConnStatus;
+//  uint8_t DisconnStatus;
+//  uint8_t ConnHandled;
+//  uint8_t DisconnHandled;
+//} USB_OTG_hPort_TypeDef;
+
+typedef struct _Device_cb
+{
+    uint8_t  (*Init)         (void *pdev , uint8_t cfgidx);
+    uint8_t  (*DeInit)       (void *pdev , uint8_t cfgidx);
+    /* Control Endpoints*/
+    uint8_t  (*Setup)        (void *pdev , USB_SETUP_REQ  *req);
+    uint8_t  (*EP0_TxSent)   (void *pdev );
+    uint8_t  (*EP0_RxReady)  (void *pdev );
+    /* Class Specific Endpoints*/
+    uint8_t  (*DataIn)       (void *pdev , uint8_t epnum);
+    uint8_t  (*DataOut)      (void *pdev , uint8_t epnum);
+    uint8_t  (*SOF)          (void *pdev);
+    uint8_t  (*IsoINIncomplete)  (void *pdev);
+    uint8_t  (*IsoOUTIncomplete)  (void *pdev);
+
+    uint8_t  *(*GetConfigDescriptor)( uint8_t speed , uint16_t *length);
+#ifdef USB_OTG_HS_CORE
+    uint8_t  *(*GetOtherConfigDescriptor)( uint8_t speed , uint16_t *length);
+#endif
+
+#ifdef USB_SUPPORT_USER_STRING_DESC
+    uint8_t  *(*GetUsrStrDescriptor)( uint8_t speed ,uint8_t index,  uint16_t *length);
+#endif
+
+} USBD_Class_cb_TypeDef;
+
+
+
+typedef struct _USBD_USR_PROP
+{
+    void (*Init)(void);
+    void (*DeviceReset)(uint8_t speed);
+    void (*DeviceConfigured)(void);
+    void (*DeviceSuspended)(void);
+    void (*DeviceResumed)(void);
+
+    void (*DeviceConnected)(void);
+    void (*DeviceDisconnected)(void);
+
+}
+USBD_Usr_cb_TypeDef;
+
+typedef struct _DCD
+{
+    uint8_t        device_config;                   /* Hold the current USB device configuration */
+    uint8_t        device_state;                    /* EP0 State */
+    uint8_t        device_status;                   /* Define the connection,configuration and power status */
+    uint8_t        device_status_new;
+    uint8_t        device_old_status;
+    uint8_t        device_address;
+    uint8_t        connection_status;
+    uint8_t        test_mode;
+    uint32_t       DevRemoteWakeup;
+    USB_OTG_EP     in_ep   [USB_OTG_MAX_TX_FIFOS];
+    USB_OTG_EP     out_ep  [USB_OTG_MAX_TX_FIFOS];
+    uint8_t        setup_packet [8];
+    USBD_Class_cb_TypeDef         *class_cb;
+    USBD_Usr_cb_TypeDef           *usr_cb;
+    USBD_DEVICE                   *usr_device;
+    uint8_t        *pConfig_descriptor;
+    uint8_t	      zero_replay_flag;
+ }
+DCD_DEV , *DCD_PDEV;
+
+
+typedef struct _HCD
+{
+    uint8_t                  Rx_Buffer [MAX_DATA_LENGTH];
+    volatile uint32_t            ConnSts;
+    volatile uint32_t            ErrCnt[USB_OTG_MAX_TX_FIFOS];
+    volatile uint32_t            XferCnt[USB_OTG_MAX_TX_FIFOS];
+    volatile HC_STATUS           HC_Status[USB_OTG_MAX_TX_FIFOS];
+    volatile URB_STATE           URB_State[USB_OTG_MAX_TX_FIFOS];
+    USB_OTG_HC               hc [USB_OTG_MAX_TX_FIFOS];
+    uint16_t                 channel [USB_OTG_MAX_TX_FIFOS];
+//  USB_OTG_hPort_TypeDef    *port_cb;
+}
+HCD_DEV , *USB_OTG_USBH_PDEV;
+
+
+typedef struct _OTG
+{
+    uint8_t    OTG_State;
+    uint8_t    OTG_PrevState;
+    uint8_t    OTG_Mode;
+}
+OTG_DEV , *USB_OTG_USBO_PDEV;
+
+typedef struct USB_OTG_handle
+{
+    USB_OTG_CORE_CFGS    cfg;
+    USB_OTG_CORE_REGS    regs;
+#ifdef USE_DEVICE_MODE
+    DCD_DEV     dev;
+#endif
+#ifdef USE_HOST_MODE
+    HCD_DEV     host;
+#endif
+#ifdef USE_OTG_MODE
+    OTG_DEV     otg;
+#endif
+}
+USB_OTG_CORE_HANDLE , *PUSB_OTG_CORE_HANDLE;
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_CORE_Exported_Macros
+  * @{
+  */
+
+/**
+  * @}
+  */
+
+/** @defgroup USB_CORE_Exported_Variables
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_CORE_Exported_FunctionsPrototype
+  * @{
+  */
+USB_OTG_STS  USB_OTG_TRIG(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
+USB_OTG_STS USB_OTG_EPReply_Zerolen(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
+
+USB_OTG_STS  USB_OTG_CoreInit        (USB_OTG_CORE_HANDLE *pdev);
+USB_OTG_STS  USB_OTG_SelectCore      (USB_OTG_CORE_HANDLE *pdev,
+                                      USB_OTG_CORE_ID_TypeDef coreID);
+USB_OTG_STS  USB_OTG_EnableGlobalInt (USB_OTG_CORE_HANDLE *pdev);
+USB_OTG_STS  USB_OTG_DisableGlobalInt(USB_OTG_CORE_HANDLE *pdev);
+void USB_OTG_ReadPacket(USB_OTG_CORE_HANDLE *pdev,
+                         uint8_t *dest,
+                         uint8_t ch_ep_num,
+                         uint8_t len);
+
+
+USB_OTG_STS  USB_OTG_WritePacket     (USB_OTG_CORE_HANDLE *pdev ,
+    uint8_t *src,
+    uint8_t ch_ep_num,
+    uint8_t len);
+USB_OTG_STS  USB_OTG_FlushTxFifo     (USB_OTG_CORE_HANDLE *pdev , uint32_t num);
+USB_OTG_STS  USB_OTG_FlushRxFifo     (USB_OTG_CORE_HANDLE *pdev);
+
+uint8_t      USB_OTG_ReadCoreItr     (USB_OTG_CORE_HANDLE *pdev);
+uint8_t      USB_OTG_ReadOtgItr      (USB_OTG_CORE_HANDLE *pdev);
+uint8_t      USB_OTG_IsHostMode      (USB_OTG_CORE_HANDLE *pdev);
+uint8_t      USB_OTG_IsDeviceMode    (USB_OTG_CORE_HANDLE *pdev);
+uint8_t      USB_OTG_GetMode         (USB_OTG_CORE_HANDLE *pdev);
+USB_OTG_STS  USB_OTG_PhyInit         (USB_OTG_CORE_HANDLE *pdev);
+USB_OTG_STS  USB_OTG_SetCurrentMode  (USB_OTG_CORE_HANDLE *pdev,
+    uint8_t mode);
+
+/*********************** HOST APIs ********************************************/
+#ifdef USE_HOST_MODE
+USB_OTG_STS  USB_OTG_CoreInitHost    (USB_OTG_CORE_HANDLE *pdev);
+USB_OTG_STS  USB_OTG_EnableHostInt   (USB_OTG_CORE_HANDLE *pdev);
+USB_OTG_STS  USB_OTG_HC_Init         (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num);
+USB_OTG_STS  USB_OTG_HC_Halt         (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num);
+USB_OTG_STS  USB_OTG_HC_StartXfer    (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num);
+USB_OTG_STS  USB_OTG_HC_DoPing       (USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num);
+uint8_t      USB_OTG_ReadHostAllChannels_intr    (USB_OTG_CORE_HANDLE *pdev);
+uint32_t     USB_OTG_ResetPort       (USB_OTG_CORE_HANDLE *pdev);
+uint32_t     USB_OTG_ReadHPRT0       (USB_OTG_CORE_HANDLE *pdev);
+void         USB_OTG_DriveVbus       (USB_OTG_CORE_HANDLE *pdev, uint8_t state);
+void         USB_OTG_InitFSLSPClkSel (USB_OTG_CORE_HANDLE *pdev ,uint8_t freq);
+uint8_t      USB_OTG_IsEvenFrame     (USB_OTG_CORE_HANDLE *pdev) ;
+void         USB_OTG_StopHost        (USB_OTG_CORE_HANDLE *pdev);
+#endif
+/********************* DEVICE APIs ********************************************/
+#ifdef USE_DEVICE_MODE
+USB_OTG_STS  USB_OTG_CoreInitDev         (USB_OTG_CORE_HANDLE *pdev);
+USB_OTG_STS  USB_OTG_EnableDevInt        (USB_OTG_CORE_HANDLE *pdev);
+enum USB_OTG_SPEED USB_OTG_GetDeviceSpeed (USB_OTG_CORE_HANDLE *pdev);
+USB_OTG_STS  USB_OTG_EP0Activate (USB_OTG_CORE_HANDLE *pdev);
+USB_OTG_STS  USB_OTG_EPActivate  (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
+USB_OTG_STS  USB_OTG_EPDeactivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
+USB_OTG_STS  USB_OTG_EPStartXfer (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
+USB_OTG_STS  USB_OTG_EP0StartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
+USB_OTG_STS  USB_OTG_EPSetStall          (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
+USB_OTG_STS  USB_OTG_EPClearStall        (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
+uint16_t     USB_OTG_ReadDevAllOutEp_itr (USB_OTG_CORE_HANDLE *pdev);
+uint16_t     USB_OTG_ReadDevOutEP_itr    (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum);
+uint16_t     USB_OTG_ReadDevAllInEPItr   (USB_OTG_CORE_HANDLE *pdev);
+void         USB_OTG_InitDevSpeed        (USB_OTG_CORE_HANDLE *pdev , uint8_t speed);
+uint8_t      USBH_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev);
+void         USB_OTG_EP0_OutStart(USB_OTG_CORE_HANDLE *pdev);
+void         USB_OTG_ActiveRemoteWakeup(USB_OTG_CORE_HANDLE *pdev);
+void         USB_OTG_UngateClock(USB_OTG_CORE_HANDLE *pdev);
+void         USB_OTG_StopDevice(USB_OTG_CORE_HANDLE *pdev);
+void         USB_OTG_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep , uint32_t Status);
+uint32_t     USB_OTG_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,USB_OTG_EP *ep);
+#endif
+
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* __USB_CORE_H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_core.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_core.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_core.c	(working copy)
@@ -0,0 +1,719 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_core.c
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : USB-OTG Core layer.
+ *****************************************************************************/
+
+/* Include ------------------------------------------------------------------*/
+#include "usb_core.h"
+#include "usb_bsp.h"
+#include "usb_regs.h"
+#include "usbd_usr.h"
+
+/* Private typedef ----------------------------------------------------------*/
+/* Private define -----------------------------------------------------------*/
+/* Private macro ------------------------------------------------------------*/
+/* Private variables --------------------------------------------------------*/
+/* Ptivate function prototypes ----------------------------------------------*/
+
+/******************************************************************************
+* Function Name  :
+* Description    :
+* Input          :
+* Output         :
+* Return         :
+*******************************************************************/
+
+
+
+/*******************************************************************************
+* @brief  USB_OTG_WritePacket : Writes a packet into the Tx FIFO associated
+*         with the EP
+* @param  pdev : Selected device
+* @param  src : source pointer
+* @param  ch_ep_num : end point number
+* @param  bytes : No. of bytes
+* @retval USB_OTG_STS : status
+*/
+
+USB_OTG_STS USB_OTG_WritePacket(USB_OTG_CORE_HANDLE *pdev,
+                                uint8_t             *src,
+                                uint8_t             ch_ep_num,
+                                uint8_t            len)
+{
+    USB_OTG_STS status = USB_OTG_OK;
+    uint8_t i= 0;
+  //  MyPrintf("write_len%x\n\r",len);
+//	my_delay_ms(1);
+
+    #ifdef USB_HID_DEMO_TEST
+    if(ch_ep_num == 1)
+    {
+    	for(uint32_t j=0;j<100000;j++)
+		{
+			if(USB_OTG_READ_REG8(CORE_USB_FIFO_EMPTY)&0x02)
+			{
+				break ;
+		   	}
+		}
+    }
+   #endif
+    if (pdev->cfg.dma_enable == 0)
+    {
+        for (i = 0; i < len; i++)
+        {
+        //  * ( pdev->regs.ep[ch_ep_num]) = *src++;
+       	//	MyPrintf("src = %02x\n", *src);
+          	USB_OTG_WRITE_REG8(pdev->regs.ep[ch_ep_num],*src++);
+        }
+//        USB_OTG_WRITE_REG8(&pdev->regs.STATUSEGS ->EMPTY, 1<<ch_ep_num);
+    }
+
+    return status;
+}
+
+
+
+/**
+* @brief  USB_OTG_ReadPacket : Reads a packet from the Rx FIFO
+* @param  pdev : Selected device
+* @param  dest : Destination Pointer
+* @param  bytes : No. of bytes
+* @retval None
+*/
+void USB_OTG_ReadPacket(USB_OTG_CORE_HANDLE *pdev,
+                         uint8_t *dest,
+                         uint8_t ch_ep_num,
+                         uint8_t len)
+{
+    uint8_t i=0;
+    uint8_t count8b = len ;
+    uint8_t *data_buff = (uint8_t *)dest;
+ //   uint8_t *fifo = pdev->regs.ep[ch_ep_num];
+    for (i = 0; i < count8b; i++, data_buff++)
+    {
+      //  *data_buff = USB_OTG_READ_REG8(pdev->regs.ep[ch_ep_num]);
+//				delay_ms(1);
+				*data_buff = USB_OTG_READ_REG8(CORE_USB_EP(ch_ep_num));
+    }
+
+
+    /* Return the buffer pointer because if the transfer is composed of several
+     packets, the data of the next packet must be stored following the
+     previous packet's data */
+//    return ;
+}
+
+
+
+/**
+* @brief  USB_OTG_SelectCore
+*         Initialize core registers address.
+* @param  pdev : Selected device
+* @param  coreID : USB OTG Core ID
+* @retval USB_OTG_STS : status
+*/
+USB_OTG_STS USB_OTG_SelectCore(USB_OTG_CORE_HANDLE *pdev,
+                               USB_OTG_CORE_ID_TypeDef coreID)
+{
+       uint32_t i , baseAddress = 0;
+       USB_OTG_STS status = USB_OTG_OK;
+        #ifdef  USB_OTG_DMA_ENABLE
+        pdev->cfg.dma_enable       = 1;
+        #else
+        pdev->cfg.dma_enable       = 0;
+        #endif
+
+	 /* at startup the core is in FS mode */
+       pdev->cfg.speed            = USB_OTG_SPEED_FULL;
+       pdev->cfg.mps              = USB_OTG_FS_MAX_PACKET_SIZE ;
+
+
+       /* initialize device cfg following its address */
+    if (coreID == USB_OTG_FS_CORE_ID)
+    {
+        baseAddress                = USB_OTG_FS_BASE_ADDR;
+        pdev->cfg.coreID           = USB_OTG_FS_CORE_ID;
+//        pdev->cfg.host_channels    = 8 ;
+        pdev->cfg.dev_endpoints    = 4 ;
+        pdev->cfg.TotalFifoSize    = 64; /* in 8-bits */
+        pdev->cfg.phy_itface       = USB_OTG_EMBEDDED_PHY;
+
+        #ifdef USB_OTG_FS_SOF_OUTPUT_ENABLED
+        pdev->cfg.Sof_output       = 1;
+        #endif
+
+        #ifdef USB_OTG_FS_LOW_PWR_MGMT_SUPPORT
+        pdev->cfg.low_power        = 1;
+        #endif
+    }
+    else if (coreID == USB_OTG_HS_CORE_ID)
+    {
+        baseAddress                = USB_OTG_FS_BASE_ADDR;
+        pdev->cfg.coreID           = USB_OTG_HS_CORE_ID;
+        pdev->cfg.host_channels    = 8 ;
+        pdev->cfg.dev_endpoints    = 4 ;
+        pdev->cfg.TotalFifoSize    = 512;/* in 8-bits */
+
+        #ifdef USB_OTG_ULPI_PHY_ENABLED
+            pdev->cfg.phy_itface       = USB_OTG_ULPI_PHY;
+        #else
+        #ifdef USB_OTG_EMBEDDED_PHY_ENABLED
+            pdev->cfg.phy_itface       = USB_OTG_EMBEDDED_PHY;
+        #endif
+        #endif
+
+        #ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+            pdev->cfg.dma_enable       = 1;
+        #endif
+
+        #ifdef USB_OTG_HS_SOF_OUTPUT_ENABLED
+            pdev->cfg.Sof_output       = 1;
+        #endif
+
+        #ifdef USB_OTG_HS_LOW_PWR_MGMT_SUPPORT
+            pdev->cfg.low_power        = 1;
+        #endif
+    }
+
+	/* Common USB Registers */
+	pdev ->regs.CTRLREGS = (USB_OTG_CTRLREGS *)CORE_USB_CONFIG;
+	pdev ->regs.xferctl =(USB_OTG_XFERCTL*)CORE_USB_TRIG;
+	  /* FIFOS */
+    for (i = 0; i < NUM_EP_FIFO; i++)
+    {
+        pdev->regs.ep[i] = (uint8_t *)(CORE_USB_EP(i));
+    }
+    /* fifo len*/
+     for (i = 0; i < NUM_EP_FIFO; i++)
+    {
+        pdev->regs.LENREGS[i] = (uint8_t *)(CORE_USB_EP_LEN(i));
+    }
+	pdev ->regs.STATUSEGS= (USB_OTG_STATUSREGS *)CORE_USB_STALL_STATUS;
+//	MyPrintf(" %x\n",&(pdev ->regs.CTRLREGS ->STALL) );
+//	MyPrintf(" %x\n",USB_OTG_READ_REG8(pdev ->regs.CTRLREGS));
+//	MyPrintf(" %x\n",pdev ->regs.ep[0] );
+//	MyPrintf(" %x\n",pdev ->regs.LENREGS[0]);
+    return status;
+}
+
+
+/**
+* @brief  USB_OTG_CoreInit
+*         Initializes the USB_OTG controller registers and prepares the core
+*         device mode or host mode operation.
+* @param  pdev : Selected device
+* @retval USB_OTG_STS : status
+*/
+USB_OTG_STS USB_OTG_CoreInit(USB_OTG_CORE_HANDLE *pdev)
+{
+    USB_OTG_STS status = USB_OTG_OK;
+//    USB_OTG_GUSBCFG_TypeDef  usbcfg;
+//    USB_OTG_GCCFG_TypeDef    gccfg;
+//    USB_OTG_GAHBCFG_TypeDef  ahbcfg;
+
+//    usbcfg.d32 = 0;
+//    gccfg.d32 = 0;
+//    ahbcfg.d32 = 0;
+//
+//    /* FS interface*/
+//    /* Reset after a PHY select and set Host mode */
+//    USB_OTG_CoreReset(pdev);
+//    /* Deactivate the power down*/
+//    gccfg.d32 = 0;
+//    gccfg.b.pwdn = 1;
+//
+//    gccfg.b.vbussensingA = 1 ;
+//    gccfg.b.vbussensingB = 1 ;
+//#ifndef VBUS_SENSING_ENABLED
+//    gccfg.b.disablevbussensing = 1;
+//#endif
+//
+//    if(pdev->cfg.Sof_output)
+//    {
+//        gccfg.b.sofouten = 1;
+//    }
+//
+//    USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GCCFG, gccfg.d32);
+//    USB_OTG_BSP_mDelay(20);
+//    /* case the HS core is working in FS mode */
+//    if(pdev->cfg.dma_enable == 1)
+//    {
+//        ahbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GAHBCFG);
+//        ahbcfg.b.hburstlen = 5; /* 64 x 32-bits*/
+//        ahbcfg.b.dmaenable = 1;
+//        USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GAHBCFG, ahbcfg.d32);
+//    }
+//    /* initialize OTG features */
+//#ifdef  USE_OTG_MODE
+//    usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG);
+//    usbcfg.b.hnpcap = 1;
+//    usbcfg.b.srpcap = 1;
+//    USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GUSBCFG, usbcfg.d32);
+//    USB_OTG_EnableCommonInt(pdev);
+//#endif
+    return status;
+}
+
+
+
+/**
+* @brief  USB_OTG_SetCurrentMode : Set ID line
+* @param  pdev : Selected device
+* @param  mode :  (Host/device)only device
+* @retval USB_OTG_STS : status
+*/
+USB_OTG_STS USB_OTG_SetCurrentMode(USB_OTG_CORE_HANDLE *pdev , uint8_t mode)
+{
+    USB_OTG_STS status = USB_OTG_OK;
+//    USB_OTG_POWER_TypeDef  power;
+//    USB_OTG_DEVCTL_TypeDef devctl;
+
+//    power.d8 = 0;
+//    devctl.d8 = USB_OTG_READ_REG8(&pdev->regs.DYNFIFOREGS->DEVCTL);
+//
+    if ( mode == HOST_MODE)
+    {
+//        power.b.en_suspendM = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.COMMREGS->POWER, power.d8);
+//        devctl.b.host_mode = 1;
+//        devctl.b.session = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.DYNFIFOREGS->DEVCTL, devctl.d8);
+    }
+    else if ( mode == DEVICE_MODE)
+    {
+//        devctl.b.host_mode = 0;
+//        power.b.en_suspendM = 1;
+//        devctl.b.session = 0;
+//        power.b.soft_conn = 1;
+//        USB_OTG_WRITE_REG8(&pdev->regs.DYNFIFOREGS->DEVCTL, devctl.d8);
+//        USB_OTG_WRITE_REG8(&pdev->regs.COMMREGS->POWER, power.d8);
+        #ifdef USE_DEVICE_MODE
+        pdev->dev.out_ep[0].xfer_buff = pdev->dev.setup_packet;
+        pdev->dev.out_ep[0].xfer_len = 8;
+        #endif
+    }
+
+	delay_us(50);
+   // USB_OTG_BSP_mDelay(50);
+
+    return status;
+}
+
+/**
+* @brief  USB_OTG_EPActivate : Activates an EP
+* @param  pdev : Selected device
+* @retval USB_OTG_STS : status
+*/
+USB_OTG_STS USB_OTG_EPActivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep)
+{
+    USB_OTG_STS status = USB_OTG_OK;
+    USB_OTG_IRQ_MASK1_TypeDef intr_rxtxe;
+//    volatile uint16_t *addr;
+    /* Read DEPCTLn register */
+    if (ep->is_in == 1)
+    {
+//        addr = &pdev->regs.COMMREGS->INTRTXE;
+        intr_rxtxe.d8 = 1 << ep->num;
+        USB_OTG_MODIFY_REG8(&pdev->regs.CTRLREGS->IRQ_MASK1, intr_rxtxe.d8, 0);
+    }
+    else
+    {
+//        addr = &pdev->regs.COMMREGS->INTRRXE;
+        intr_rxtxe.d8 = 1 << ep->num;
+        USB_OTG_MODIFY_REG8(&pdev->regs.CTRLREGS ->IRQ_MASK1, intr_rxtxe.d8, 0);
+    }
+    return status;
+}
+
+
+/**
+* @brief  USB_OTG_EPDeactivate : Deactivates an EP
+* @param  pdev : Selected device
+* @retval USB_OTG_STS : status
+*/
+USB_OTG_STS USB_OTG_EPDeactivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep)
+{
+    USB_OTG_STS status = USB_OTG_OK;
+    USB_OTG_IRQ_MASK1_TypeDef intr_rxtxe;
+    USB_OTG_IRQ_MASK2_TypeDef empty_rxtxe;
+//    volatile uint16_t *addr;
+    /* Read DEPCTLn register */
+    if (ep->is_in == 1)
+    {
+//        addr = &pdev->regs.COMMREGS->INTRTXE;
+	 empty_rxtxe.d8 = 1 << ep->num;
+        USB_OTG_MODIFY_REG8(&pdev->regs.CTRLREGS ->IRQ_MASK1, 0, empty_rxtxe.d8);
+
+    }
+    else
+    {
+//        addr = &pdev->regs.COMMREGS->INTRRXE;
+        intr_rxtxe.d8 = 1 << ep->num;
+        USB_OTG_MODIFY_REG8(&pdev->regs.CTRLREGS ->IRQ_MASK1, 0, intr_rxtxe.d8);
+     }
+    return status;
+}
+
+
+
+/**
+* @brief  USB_OTG_GetMode : Get current mode
+* @param  pdev : Selected device
+* @retval current mode
+*/
+uint8_t USB_OTG_GetMode(USB_OTG_CORE_HANDLE *pdev)
+{
+    return DEVICE_MODE;
+}
+
+
+/**
+* @brief  USB_OTG_IsDeviceMode : Check if it is device mode
+* @param  pdev : Selected device
+* @retval num_in_ep
+*/
+uint8_t USB_OTG_IsDeviceMode(USB_OTG_CORE_HANDLE *pdev)
+{
+    return (USB_OTG_GetMode(pdev) != HOST_MODE);
+}
+
+/**
+* @brief  USB_OTG_EPStartXfer : Handle the setup for data xfer for an EP and
+*         starts the xfer
+* @param  pdev : Selected device
+* @retval USB_OTG_STS : status
+*/
+
+uint8_t data_len;
+USB_OTG_STS USB_OTG_EPStartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep)
+{
+    USB_OTG_STS status = USB_OTG_OK;
+    uint8_t  rx_count;
+    /* IN endpoint */
+
+    if (ep->is_in == 1)
+		{
+					 if ((pdev->cfg.dma_enable == 0) || ((USB_OTG_DEV_DMA_EP_NUM & 0x07) != ep->num))
+					 {
+										ep->rem_data_len = ep->xfer_len - ep->xfer_count;
+									if(ep->rem_data_len == ep->maxpacket)
+									{
+//										MyPrintf("max\r\n");
+										USB_OTG_WritePacket(pdev,
+																							ep->xfer_buff + ep->xfer_count,
+																							ep->num,
+																							ep->maxpacket);
+													ep->xfer_count += ep->maxpacket;
+//													USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,1 << ep ->num);
+//													USB_OTG_WRITE_REG8(CORE_USB_TRIG,1 << ep ->num);
+													USB_OTG_TRIG(pdev,ep);
+													ep->xfer_count = ep->xfer_len;
+													ep->rem_data_len = 0;
+													pdev->dev.zero_replay_flag =1;
+
+									}
+									/* Zero Length Packet? */
+									else if (ep->rem_data_len == 0)
+									{
+//											MyPrintf("rem_zero\r\n");
+											USB_OTG_WritePacket(pdev,
+																					ep->xfer_buff + ep->xfer_count,
+																					ep->num,
+																					0);
+											ep->xfer_count = ep->xfer_len;
+											ep->rem_data_len = 0;
+			//								tx_csrl.b.tx_pkt_rdy = 1;
+				//							USB_OTG_WRITE_REG8(&pdev->regs.CSRREGS[ep->num]->TXCSRL,tx_csrl.d8);
+									}
+									 else
+									{
+											if (ep->rem_data_len >ep->maxpacket)
+											{
+//													  GPIO_CONFIG(3) = GPCFG_OUTPUT_LOW;
+													USB_OTG_WritePacket(pdev,
+																							ep->xfer_buff + ep->xfer_count,
+																							ep->num,
+																							ep->maxpacket);
+													USB_OTG_TRIG(pdev,ep);
+//													GPIO_CONFIG(3) = GPCFG_OUTPUT_HIGH;
+													ep->xfer_count += ep->maxpacket;
+                                                    ep->rem_data_len = ep->xfer_len - ep->xfer_count;
+//												MyPrintf("x\r\n");
+//													if (ep->xfer_len >= ep->xfer_count)
+//													{
+//															ep->rem_data_len = ep->xfer_len - ep->xfer_count;
+//													}
+//													else
+//													{
+//															ep->rem_data_len = 0;
+//															ep->xfer_count = ep->xfer_len;
+//													}
+			//										tx_csrl.b.tx_pkt_rdy = 1;
+			//										USB_OTG_WRITE_REG8(&pdev->regs.CSRREGS[ep->num]->TXCSRL,tx_csrl.d8);
+											}
+											else
+											{
+//													MyPrintf("tx_len %x\n",ep->rem_data_len);
+													USB_OTG_WritePacket(pdev,
+																							ep->xfer_buff + ep->xfer_count,
+																							ep->num,
+																							ep->rem_data_len);
+													USB_OTG_TRIG(pdev,ep);
+													ep->xfer_count = ep->xfer_len;
+													ep->rem_data_len = 0;
+			//										tx_csrl.b.tx_pkt_rdy = 1;
+			//										USB_OTG_WRITE_REG8(&pdev->regs.CSRREGS[ep->num]->TXCSRL,tx_csrl.d8);
+											}
+									}
+						}
+		}
+		else
+		{
+				/* OUT endpoint */
+								rx_count = USB_OTG_READ_REG8(pdev->regs.LENREGS[ep ->num]);
+								data_len   = rx_count;
+//								MyPrintf("out_packetlen  %d\n",rx_count);
+								USB_OTG_ReadPacket(pdev, ep->xfer_buff + ep->xfer_count,ep->num, rx_count);
+								ep->xfer_count += rx_count;
+								if (ep->xfer_len <= ep->xfer_count)
+								{
+										ep->rem_data_len = ep->xfer_count - ep->xfer_len;
+								}
+								else
+								{
+										ep->rem_data_len = 0;
+				//						ep->xfer_count = ep->xfer_len;
+										ep->xfer_len = ep->xfer_count;
+								}
+//								rx_csrl.b.rx_pkt_rdy = 0;
+//								USB_OTG_WRITE_REG8(&pdev->regs.CSRREGS[ep->num]->RXCSRL,rx_csrl.d8);
+//							}
+//						}
+		}
+		return status;
+}
+
+
+/**
+* @brief  USB_OTG_EP0StartXfer : Handle the setup for a data xfer for EP0 and
+*         starts the xfer
+* @param  pdev : Selected device
+* @retval USB_OTG_STS : status
+*/
+extern uint8_t out0_data_len;
+USB_OTG_STS USB_OTG_EP0StartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep)
+{
+    USB_OTG_STS  status = USB_OTG_OK;
+    uint8_t rx_count;
+//    USB_OTG_CSR0L_IN_PERIPHERAL_TypeDef csr0l;
+    uint32_t fifoemptymsk = 0;
+//    csr0l.d8 = USB_OTG_READ_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L);
+    /* IN endpoint */
+    if (ep->is_in == 1)
+    {
+//        ep->rem_data_len = ep->xfer_len - ep->xfer_count;
+        /* Zero Length Packet? */
+        if (ep->rem_data_len == 0)
+        {
+//        	//	send zero packet
+            if(ep->xfer_len!=0 && ep->xfer_len%ep->maxpacket==0)
+            {
+                USB_OTG_EPReply_Zerolen(pdev,ep);
+                ep->xfer_len=0;
+            }
+//            csr0l.b.tx_pkt_rdy = 1;
+//            csr0l.b.data_end = 1;
+//            USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L,csr0l.d8);
+        }
+        else
+        {
+            if (ep->rem_data_len > ep->maxpacket)
+            {
+                USB_OTG_WritePacket(pdev,
+                                    ep->xfer_buff + ep->xfer_count,
+                                    0,
+                                    ep->maxpacket);
+                ep->xfer_count += ep->maxpacket;
+                ep->rem_data_len = ep->xfer_len - ep->xfer_count;
+                USB_OTG_TRIG(pdev , ep);
+//                csr0l.b.tx_pkt_rdy = 1;
+//                USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L,csr0l.d8);
+            }
+            else
+            {
+      //          MyPrintf("txbuf = %x\n", ep->xfer_buff);
+                USB_OTG_WritePacket(pdev,
+                                    ep->xfer_buff + ep->xfer_count,
+                                    0,
+                                    ep->rem_data_len);
+                ep->xfer_count = ep->xfer_len;
+                ep->rem_data_len = 0;
+                USB_OTG_TRIG(pdev , ep);
+//                MyPrintf("usb0 tx\n");
+//                csr0l.b.tx_pkt_rdy = 1;
+//                csr0l.b.data_end = 1;
+//                USB_OTG_WRITE_REG8(&pdev->regs.INDEXREGS->CSRL.CSR0L,csr0l.d8);
+            }
+        }
+//        if (pdev->cfg.dma_enable == 1)
+//        {
+
+//        }
+
+        if (pdev->cfg.dma_enable == 0)
+        {
+            /* Enable the Tx FIFO Empty Interrupt for this EP */
+            if (ep->xfer_len > 0)
+            {
+            }
+        }
+    }
+    else
+    {
+//        /* Program the transfer size and packet count as follows:
+//        * xfersize = N * (maxpacket + 4 - (maxpacket % 4))
+        if (ep->xfer_len == 0)
+        {
+
+        }
+        else
+        {
+	//		rx_count = USB_OTG_READ_REG8(pdev->regs.LENREGS[0]);
+			if(out0_data_len)
+			{
+								 rx_count = out0_data_len;
+			}
+			else
+			{
+				rx_count = USB_OTG_READ_REG8(pdev->regs.LENREGS[0]);
+			}
+//								MyPrintf("out_packetlen  %d\n",rx_count);
+								USB_OTG_ReadPacket(pdev, ep->xfer_buff + ep->xfer_count,ep->num, ep->xfer_len);
+						        ep->xfer_count =0;
+							 ep->xfer_buff = pdev->dev.setup_packet;
+
+
+        }
+
+    }
+    return status;
+}
+
+/**
+* @brief  USB_OTG_TRIG : Handle start xfer and set tx trig
+* @param  pdev : Selected device
+* @retval USB_OTG_STS : status
+*/
+USB_OTG_STS  USB_OTG_TRIG(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep)
+{
+   int i;
+   USB_OTG_STS status = USB_OTG_OK;
+ //  USB_OTG_trig_TypeDef trig;
+ //  trig.d8 = 1 << ep ->num;
+ //  USB_OTG_MODIFY_REG8(&pdev->regs.xferctl ->TRIG, 0,trig.d8);
+
+USB_OTG_WRITE_REG8(CORE_USB_STATUS,USB_STATUS_NAK);
+//	MyPrintf("status = %x\n",USB_OTG_READ_REG8(CORE_USB_STATUS));
+	for(i = 0;i < 10000;i++)
+	{
+//	MyPrintf("status1 = %x\n",USB_OTG_READ_REG8(CORE_USB_STATUS));
+		if(USB_OTG_READ_REG8(CORE_USB_STATUS) & USB_STATUS_NAK)  break;
+	}
+//	USB_FIFO_EMPTY = 1 << ep;
+//	MyPrintf("status2 = %x\n",USB_OTG_READ_REG8(CORE_USB_STATUS));
+	USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,1 << ep ->num);
+//	for(i = 0;i < 10000;i++) {
+//		USB_TRG =  1 << ep;
+	USB_OTG_WRITE_REG8(CORE_USB_TRIG,1 << ep ->num);
+ return status;
+}
+/**
+* @brief  USB_OTG_EPSetStall : Set the EP STALL
+* @param  pdev : Selected device
+* @retval USB_OTG_STS : status
+*/
+USB_OTG_STS USB_OTG_EPSetStall(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep)
+{
+    USB_OTG_STS status = USB_OTG_OK;
+   USB_OTG_stall_TypeDef stcsrl;
+	if(ep->num ==0)
+	{
+		USB_OTG_WRITE_REG8(&pdev->regs.xferctl ->STALL, 0x01);
+		USB_OTG_EPReply_Zerolen(pdev,ep);
+	}
+//    if (ep->is_in == 1)
+//    {
+//        if (ep->num)
+//        {
+//            stcsrl.d8 = 1 <<  2 * (ep ->num) -1;
+//            /* set the stall bit */
+//            USB_OTG_MODIFY_REG8(&pdev->regs.xferctl ->STALL, 0,stcsrl.d8);
+//        }
+//        else
+//        {
+//
+//            USB_OTG_WRITE_REG8(&pdev->regs.xferctl ->STALL, 0x01);
+//        }
+//    }
+//    else    /* OUT Endpoint */
+//    {
+//        if (ep->num)
+//        {
+//             stcsrl.d8 =1 << 2 * (ep ->num) ;
+//            USB_OTG_MODIFY_REG8(&pdev->regs.xferctl ->STALL, 0,stcsrl.d8);
+//        }
+//        else
+//        {
+//            USB_OTG_WRITE_REG8(&pdev->regs.xferctl ->STALL, 0x01);
+//        }
+//    }
+
+    return status;
+}
+
+/**
+* @brief  USB_OTG_EPSetStall : ack zero  length packet
+* @param  pdev : Selected device
+* @retval USB_OTG_STS : status
+*/
+
+USB_OTG_STS USB_OTG_EPReply_Zerolen(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep)
+{
+	USB_OTG_STS status = USB_OTG_OK;
+           USB_OTG_WRITE_REG8(&pdev->regs.xferctl ->TRIG, 0x10 <<(ep ->num) );
+    return status;
+}
+
+
+
+/**
+* @brief  USB_OTG_RemoteWakeup : active remote wakeup signalling
+* @param  None
+* @retval : None
+*/
+void USB_OTG_ActiveRemoteWakeup(USB_OTG_CORE_HANDLE *pdev)
+{
+    USB_OTG_CTL_TypeDef power;
+    /* Note: If CLK has been stopped,it will need be restarted before
+     * this write can occur.
+     */
+    power.d8 = USB_OTG_READ_REG8(&pdev->regs.CTRLREGS ->USB_CTL);
+    power.b.resume = 1;
+    power.b.wakeup_enable = 1;
+    USB_OTG_WRITE_REG8(&pdev->regs.CTRLREGS ->USB_CTL, power.d8);
+    /* The software should leave then this bit set for approximately 10ms
+     * (minimum of 2ms, a maximum of 15ms) before resetting it to 0.
+     */
+   delay_ms(2);
+   delay_us(500);
+    power.b.resume = 0;
+    power.b.wakeup_enable = 0;
+    USB_OTG_WRITE_REG8(&pdev->regs.CTRLREGS ->USB_CTL, power.d8);
+}
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_dcd.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_dcd.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_dcd.h	(working copy)
@@ -0,0 +1,148 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_dcd.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Peripheral Driver Header file.
+ *****************************************************************************/
+ 
+ 
+#ifndef __DCD_H__
+#define __DCD_H__
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Include ------------------------------------------------------------------*/
+#include "usb_core.h"	
+/* Exported types -----------------------------------------------------------*/
+/* Exported constants -------------------------------------------------------*/	
+/* Exported macro -----------------------------------------------------------*/	
+/* Exported functions -------------------------------------------------------*/	
+/* Exported variables -------------------------------------------------------*/	
+/** @addtogroup USB_OTG_DRIVER
+* @{
+*/
+
+/** @defgroup USB_DCD
+* @brief This file is the 
+* @{
+*/ 
+
+
+/** @defgroup USB_DCD_Exported_Defines
+* @{
+*/ 
+#define USB_OTG_EP_CONTROL                       0
+#define USB_OTG_EP_ISOC                          1
+#define USB_OTG_EP_BULK                          2
+#define USB_OTG_EP_INT                           3
+#define USB_OTG_EP_MASK                          3
+
+/*  Device Status */
+#define USB_OTG_DEFAULT                          1
+#define USB_OTG_ADDRESSED                        2
+#define USB_OTG_CONFIGURED                       3
+#define USB_OTG_SUSPENDED                        4
+#define USB_OTG_END                        5
+/**
+* @}
+*/ 
+
+
+/** @defgroup USB_DCD_Exported_Types
+* @{
+*/ 
+/********************************************************************************
+Data structure type
+********************************************************************************/
+typedef struct
+{
+    uint8_t  bLength;
+    uint8_t  bDescriptorType;
+    uint8_t  bEndpointAddress;
+    uint8_t  bmAttributes;
+    uint16_t wMaxPacketSize;
+    uint8_t  bInterval;
+}
+EP_DESCRIPTOR , *PEP_DESCRIPTOR;
+
+/**
+* @}
+*/ 
+
+
+/** @defgroup USB_DCD_Exported_Macros
+* @{
+*/ 
+/**
+* @}
+*/ 
+
+/** @defgroup USB_DCD_Exported_Variables
+* @{
+*/ 
+/**
+* @}
+*/ 
+
+/** @defgroup USB_DCD_Exported_FunctionsPrototype
+* @{
+*/ 
+/********************************************************************************
+EXPORTED FUNCTION FROM THE USB-OTG LAYER
+********************************************************************************/
+void       DCD_Init(USB_OTG_CORE_HANDLE *pdev ,
+                    USB_OTG_CORE_ID_TypeDef coreID);
+
+void        DCD_DevConnect (USB_OTG_CORE_HANDLE *pdev);
+void        DCD_DevDisconnect (USB_OTG_CORE_HANDLE *pdev);
+void        DCD_EP_SetAddress (USB_OTG_CORE_HANDLE *pdev,
+                               uint8_t address);
+uint32_t    DCD_EP_Open(USB_OTG_CORE_HANDLE *pdev , 
+                     uint8_t ep_addr,
+                     uint16_t ep_mps,
+                     uint8_t ep_type);
+
+uint32_t    DCD_EP_Close  (USB_OTG_CORE_HANDLE *pdev,
+                                uint8_t  ep_addr);
+
+
+uint32_t   DCD_EP_PrepareRx ( USB_OTG_CORE_HANDLE *pdev,
+                        uint8_t   ep_addr,                                  
+                        uint8_t *pbuf,                                  
+                        uint16_t  buf_len);
+  
+uint32_t    DCD_EP_Tx (USB_OTG_CORE_HANDLE *pdev,
+                               uint8_t  ep_addr,
+                               uint8_t  *pbuf,
+                               uint32_t   buf_len);
+uint32_t    DCD_EP_Stall (USB_OTG_CORE_HANDLE *pdev,
+                              uint8_t   epnum);
+uint32_t    DCD_EP_ClrStall (USB_OTG_CORE_HANDLE *pdev,
+                                  uint8_t epnum);
+uint32_t    DCD_EP_Flush (USB_OTG_CORE_HANDLE *pdev,
+                               uint8_t epnum);
+uint32_t    DCD_Handle_ISR(USB_OTG_CORE_HANDLE *pdev);
+
+uint32_t DCD_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,
+                         uint8_t epnum);
+
+void DCD_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , 
+                      uint8_t epnum , 
+                      uint32_t Status);
+
+/**
+* @}
+*/ 
+
+
+#ifdef __cplusplus
+}
+#endif	 
+
+#endif	/* __DCD_H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_dcd_int.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_dcd_int.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_dcd_int.h	(working copy)
@@ -0,0 +1,113 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_dcd_int.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Peripheral Device Interface Layer.
+ *****************************************************************************/
+ 
+ 
+#ifndef __USB_DCD_INT_H__
+#define __USB_DCD_INT_H__
+
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Include ------------------------------------------------------------------*/
+#include "usb_dcd.h"	
+/* Exported types -----------------------------------------------------------*/
+/* Exported constants -------------------------------------------------------*/	
+/* Exported macro -----------------------------------------------------------*/	
+/* Exported functions -------------------------------------------------------*/	
+/* Exported variables -------------------------------------------------------*/	
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+  
+/** @defgroup USB_DCD_INT
+  * @brief This file is the 
+  * @{
+  */ 
+
+
+/** @defgroup USB_DCD_INT_Exported_Defines
+  * @{
+  */ 
+
+typedef struct _USBD_DCD_INT
+{
+  uint8_t (* DataOutStage) (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum);
+  uint8_t (* DataInStage)  (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum);
+  uint8_t (* SetupStage) (USB_OTG_CORE_HANDLE *pdev);
+  uint8_t (* SOF) (USB_OTG_CORE_HANDLE *pdev);
+  uint8_t (* Reset) (USB_OTG_CORE_HANDLE *pdev);
+  uint8_t (* Suspend) (USB_OTG_CORE_HANDLE *pdev);
+  uint8_t (* Resume) (USB_OTG_CORE_HANDLE *pdev);
+  uint8_t (* IsoINIncomplete) (USB_OTG_CORE_HANDLE *pdev);
+  uint8_t (* IsoOUTIncomplete) (USB_OTG_CORE_HANDLE *pdev);  
+  
+  uint8_t (* DevConnected) (USB_OTG_CORE_HANDLE *pdev);
+  uint8_t (* DevDisconnected) (USB_OTG_CORE_HANDLE *pdev);   
+  
+}USBD_DCD_INT_cb_TypeDef;
+
+extern USBD_DCD_INT_cb_TypeDef *USBD_DCD_INT_fops;
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_DCD_INT_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_DCD_INT_Exported_Macros
+  * @{
+  */ 
+//#define CLEAR_IN_EP_INTR(epnum,intr)
+#define CLEAR_IN_EP_INTR(epnum,intr) \
+  txcsrl.d8=0; \
+  txcsrl.b.intr = 0; \
+  USB_OTG_WRITE_REG8(&pdev->regs.CSRREGS[epnum]->TXCSRL,txcsrl.d8);
+
+#define CLEAR_OUT_EP_INTR(epnum,intr) \
+  rxcsrl.d8=0; \
+  rxcsrl.b.intr = 0; \
+  USB_OTG_WRITE_REG8(&pdev->regs.CSRREGS[epnum]->RXCSRL,rxcsrl.d8);
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_DCD_INT_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_DCD_INT_Exported_FunctionsPrototype
+  * @{
+  */ 
+uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
+
+//uint32_t USBD_OTG_DMA_ISR_Handler (USB_OTG_CORE_HANDLE *pdev);
+uint32_t USBD_OTG_DMA_ISR_Handler (USB_OTG_CORE_HANDLE *pdev, uint8_t dma_intr_value);
+
+void _delay_(uint32_t t);
+/**
+  * @}
+  */ 
+
+#ifdef __cplusplus
+}
+#endif	 
+
+#endif	/* __USB_DCD_INT_H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_defines.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_defines.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_defines.h	(working copy)
@@ -0,0 +1,256 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_defines.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Header of the Core Layer.
+ *****************************************************************************/
+
+
+#ifndef __USB_DEF_H__
+#define __USB_DEF_H__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Include ------------------------------------------------------------------*/
+#include "usb_conf.h"
+/* Exported types -----------------------------------------------------------*/
+/* Exported constants -------------------------------------------------------*/
+/* Exported macro -----------------------------------------------------------*/
+/* Exported functions -------------------------------------------------------*/
+/* Exported variables -------------------------------------------------------*/
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+
+/** @defgroup USB_DEFINES
+  * @brief This file is the
+  * @{
+  */
+
+
+/** @defgroup USB_DEFINES_Exported_Defines
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup _CORE_DEFINES_
+  * @{
+  */
+
+#define USB_FLOWCTRL
+
+#define USB_STATUS_SETUP			0x10
+#define USB_STATUS_SUSPEND			0x20
+#define USB_STATUS_NAK				0x40
+#define USB_STATUS_STALL			0x80
+
+
+#define USB_OTG_SPEED_PARAM_HIGH 0
+#define USB_OTG_SPEED_PARAM_HIGH_IN_FULL 1
+#define USB_OTG_SPEED_PARAM_FULL 3
+
+#define USB_OTG_SPEED_HIGH      0
+#define USB_OTG_SPEED_FULL      1
+
+#define USB_OTG_ULPI_PHY      1
+#define USB_OTG_EMBEDDED_PHY  2
+#define USB_SETUP_PACKET_LEN 8
+
+/**
+  * @}
+  */
+
+
+/** @defgroup _GLOBAL_DEFINES_
+  * @{
+  */
+#define GAHBCFG_TXFEMPTYLVL_EMPTY              1
+#define GAHBCFG_TXFEMPTYLVL_HALFEMPTY          0
+#define GAHBCFG_GLBINT_ENABLE                  1
+#define GAHBCFG_INT_DMA_BURST_SINGLE           0
+#define GAHBCFG_INT_DMA_BURST_INCR             1
+#define GAHBCFG_INT_DMA_BURST_INCR4            3
+#define GAHBCFG_INT_DMA_BURST_INCR8            5
+#define GAHBCFG_INT_DMA_BURST_INCR16           7
+#define GAHBCFG_DMAENABLE                      1
+#define GAHBCFG_TXFEMPTYLVL_EMPTY              1
+#define GAHBCFG_TXFEMPTYLVL_HALFEMPTY          0
+#define GRXSTS_PKTSTS_IN                       2
+#define GRXSTS_PKTSTS_IN_XFER_COMP             3
+#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR          5
+#define GRXSTS_PKTSTS_CH_HALTED                7
+/**
+  * @}
+  */
+
+
+/** @defgroup _OnTheGo_DEFINES_
+  * @{
+  */
+#define MODE_HNP_SRP_CAPABLE                   0
+#define MODE_SRP_ONLY_CAPABLE                  1
+#define MODE_NO_HNP_SRP_CAPABLE                2
+#define MODE_SRP_CAPABLE_DEVICE                3
+#define MODE_NO_SRP_CAPABLE_DEVICE             4
+#define MODE_SRP_CAPABLE_HOST                  5
+#define MODE_NO_SRP_CAPABLE_HOST               6
+#define A_HOST                                 1
+#define A_SUSPEND                              2
+#define A_PERIPHERAL                           3
+#define B_PERIPHERAL                           4
+#define B_HOST                                 5
+
+#define DEVICE_MODE                            0
+#define HOST_MODE                              1
+#define OTG_MODE                               2
+/**
+  * @}
+  */
+
+
+/** @defgroup __DEVICE_DEFINES_
+  * @{
+  */
+#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ     0
+#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ     1
+#define DSTS_ENUMSPD_LS_PHY_6MHZ               2
+#define DSTS_ENUMSPD_FS_PHY_48MHZ              3
+
+#define DCFG_FRAME_INTERVAL_80                 0
+#define DCFG_FRAME_INTERVAL_85                 1
+#define DCFG_FRAME_INTERVAL_90                 2
+#define DCFG_FRAME_INTERVAL_95                 3
+
+#define DEP0CTL_MPS_64                         0
+#define DEP0CTL_MPS_32                         1
+#define DEP0CTL_MPS_16                         2
+#define DEP0CTL_MPS_8                          3
+
+#define EP_SPEED_LOW                           0
+#define EP_SPEED_FULL                          1
+#define EP_SPEED_HIGH                          2
+
+#define EP_TYPE_CTRL                           0
+#define EP_TYPE_ISOC                           1
+#define EP_TYPE_BULK                           2
+#define EP_TYPE_INTR                           3
+#define EP_TYPE_MSK                            3
+
+#define STS_GOUT_NAK                           1
+#define STS_DATA_UPDT                          2
+#define STS_XFER_COMP                          3
+#define STS_SETUP_COMP                         4
+#define STS_SETUP_UPDT                         6
+/**
+  * @}
+  */
+
+
+/** @defgroup __HOST_DEFINES_
+  * @{
+  */
+#define HC_PID_DATA0                           0
+#define HC_PID_DATA2                           1
+#define HC_PID_DATA1                           2
+#define HC_PID_SETUP                           3
+
+#define HPRT0_PRTSPD_HIGH_SPEED                1
+#define HPRT0_PRTSPD_FULL_SPEED                2
+#define HPRT0_PRTSPD_LOW_SPEED                 3
+//#define HPRT0_PRTSPD_HIGH_SPEED                0
+//#define HPRT0_PRTSPD_FULL_SPEED                1
+//#define HPRT0_PRTSPD_LOW_SPEED                 2
+
+#define HCFG_30_60_MHZ                         0
+#define HCFG_48_MHZ                            1
+#define HCFG_6_MHZ                             2
+
+#define HCCHAR_CTRL                            0
+#define HCCHAR_ISOC                            1
+#define HCCHAR_BULK                            2
+#define HCCHAR_INTR                            3
+
+#define  MIN(a, b)      (((a) < (b)) ? (a) : (b))
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_DEFINES_Exported_Types
+  * @{
+  */
+
+typedef enum
+{
+    USB_OTG_HS_CORE_ID = 0,
+    USB_OTG_FS_CORE_ID = 1
+}USB_OTG_CORE_ID_TypeDef;
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_DEFINES_Exported_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_DEFINES_Exported_Variables
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_DEFINES_Exported_FunctionsPrototype
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup Internal_Macro's
+  * @{
+  */
+#define USB_OTG_READ_REG8(reg)         ( *(volatile uint8_t *)  reg)
+#define USB_OTG_READ_REG16(reg)         (*(volatile uint16_t *) reg)
+#define USB_OTG_READ_REG32(reg)         (*(volatile uint32_t *) reg)
+#define USB_OTG_WRITE_REG8(reg,value)   (*(volatile uint8_t *)reg = value)
+#define USB_OTG_WRITE_REG16(reg,value)  (*(volatile uint16_t *) reg = value)
+#define USB_OTG_WRITE_REG32(reg,value)  (*(volatile uint32_t *) reg = value)
+
+#define USB_OTG_MODIFY_REG8(reg, clear_mask, set_mask)  \
+        USB_OTG_WRITE_REG8(reg, (((USB_OTG_READ_REG8(reg)) & ~clear_mask) | set_mask))
+
+#define USB_OTG_MODIFY_REG16(reg, clear_mask, set_mask)  \
+        USB_OTG_WRITE_REG16(reg, (((USB_OTG_READ_REG16(reg)) & ~clear_mask) | set_mask))
+
+#define USB_OTG_MODIFY_REG32(reg, clear_mask, set_mask)  \
+        USB_OTG_WRITE_REG32(reg, (((USB_OTG_READ_REG32(reg)) & ~clear_mask) | set_mask))
+/********************************************************************************
+                              ENUMERATION TYPE
+********************************************************************************/
+enum USB_OTG_SPEED {
+    USB_SPEED_UNKNOWN = 0,
+    USB_SPEED_LOW,
+    USB_SPEED_FULL,
+    USB_SPEED_HIGH
+};
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* __USB_DEF_H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_hcd.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_hcd.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_hcd.h	(working copy)
@@ -0,0 +1,91 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_hcd.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Host layer Header file.
+ *****************************************************************************/
+ 
+ 
+#ifndef __USB_HCD_H__
+#define __USB_HCD_H__
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Include ------------------------------------------------------------------*/
+#include "usb_core.h"
+#include "usb_regs.h"	
+/* Exported types -----------------------------------------------------------*/
+/* Exported constants -------------------------------------------------------*/	
+/* Exported macro -----------------------------------------------------------*/	
+/* Exported functions -------------------------------------------------------*/	
+/* Exported variables -------------------------------------------------------*/	
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+  
+/** @defgroup USB_HCD
+  * @brief This file is the 
+  * @{
+  */ 
+
+
+/** @defgroup USB_HCD_Exported_Defines
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_HCD_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_HCD_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_HCD_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_HCD_Exported_FunctionsPrototype
+  * @{
+  */ 
+uint32_t  HCD_Init                 (USB_OTG_CORE_HANDLE *pdev ,
+                                    USB_OTG_CORE_ID_TypeDef coreID);
+uint32_t  HCD_HC_Init              (USB_OTG_CORE_HANDLE *pdev , 
+                                    uint8_t hc_num); 
+uint32_t  HCD_SubmitRequest        (USB_OTG_CORE_HANDLE *pdev , 
+                                    uint8_t hc_num) ;
+uint32_t  HCD_GetCurrentSpeed      (USB_OTG_CORE_HANDLE *pdev);
+uint32_t  HCD_ResetPort            (USB_OTG_CORE_HANDLE *pdev);
+uint32_t  HCD_IsDeviceConnected    (USB_OTG_CORE_HANDLE *pdev);
+uint16_t  HCD_GetCurrentFrame      (USB_OTG_CORE_HANDLE *pdev) ;
+URB_STATE HCD_GetURB_State         (USB_OTG_CORE_HANDLE *pdev,  uint8_t ch_num); 
+uint32_t  HCD_GetXferCnt           (USB_OTG_CORE_HANDLE *pdev,  uint8_t ch_num); 
+HC_STATUS HCD_GetHCState           (USB_OTG_CORE_HANDLE *pdev,  uint8_t ch_num) ;
+/**
+  * @}
+  */ 
+#ifdef __cplusplus
+}
+#endif	 
+
+#endif	/* __USB_HCD_H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_hcd_int.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_hcd_int.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_hcd_int.h	(working copy)
@@ -0,0 +1,126 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_hcd_int.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : Host Interrupt subroutines.
+ *****************************************************************************/
+ 
+ 
+#ifndef __HCD_INT_H__
+#define __HCD_INT_H__
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Include ------------------------------------------------------------------*/
+#include "usb_hcd.h"
+#include "usbh_core.h"
+/* Exported types -----------------------------------------------------------*/
+/* Exported constants -------------------------------------------------------*/	
+/* Exported macro -----------------------------------------------------------*/	
+/* Exported functions -------------------------------------------------------*/	
+/* Exported variables -------------------------------------------------------*/	
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+  
+/** @defgroup USB_HCD_INT
+  * @brief This file is the 
+  * @{
+  */ 
+
+
+/** @defgroup USB_HCD_INT_Exported_Defines
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_HCD_INT_Exported_Types
+  * @{
+  */ 
+
+typedef struct _USBH_HCD_INT
+{
+    uint8_t (* USBH_Resume) (USB_OTG_CORE_HANDLE *pdev);
+    uint8_t (* USBH_Babble) (USB_OTG_CORE_HANDLE *pdev);
+    uint8_t (* USBH_SessReq) (USB_OTG_CORE_HANDLE *pdev);
+    uint8_t (* USBH_VbusError) (USB_OTG_CORE_HANDLE *pdev);
+    uint8_t (* SOF) (USB_OTG_CORE_HANDLE *pdev);
+    uint8_t (* DevConnected) (USB_OTG_CORE_HANDLE *pdev);
+    uint8_t (* DevDisconnected) (USB_OTG_CORE_HANDLE *pdev);   
+ 
+}USBH_HCD_INT_cb_TypeDef;
+
+extern USBH_HCD_INT_cb_TypeDef *USBH_HCD_INT_fops;
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_HCD_INT_Exported_Macros
+  * @{
+  */ 
+
+#define CLEAR_HC_INT(HC_REGS, intr) \
+    {\
+    USB_OTG_HCINTn_TypeDef  hcint_clear; \
+    hcint_clear.d32 = 0; \
+    hcint_clear.b.intr = 1; \
+    USB_OTG_WRITE_REG32(&((HC_REGS)->HCINT), hcint_clear.d32);\
+    }\
+
+#define MASK_HOST_INT_CHH(hc_num) { USB_OTG_HCINTMSK_TypeDef  INTMSK; \
+    INTMSK.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCINTMSK); \
+    INTMSK.b.chhltd = 0; \
+    USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCINTMSK, INTMSK.d32);}
+
+#define UNMASK_HOST_INT_CHH(hc_num) { USB_OTG_HCINTMSK_TypeDef  INTMSK; \
+    INTMSK.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCINTMSK); \
+    INTMSK.b.chhltd = 1; \
+    USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCINTMSK, INTMSK.d32);}
+
+#define MASK_HOST_INT_ACK(hc_num) { USB_OTG_HCINTMSK_TypeDef  INTMSK; \
+    INTMSK.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCINTMSK); \
+    INTMSK.b.ack = 0; \
+    USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCINTMSK, GINTMSK.d32);}
+
+#define UNMASK_HOST_INT_ACK(hc_num) { USB_OTG_HCGINTMSK_TypeDef  INTMSK; \
+    INTMSK.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCINTMSK); \
+    INTMSK.b.ack = 1; \
+    USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCINTMSK, INTMSK.d32);}
+
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_HCD_INT_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_HCD_INT_Exported_FunctionsPrototype
+  * @{
+  */ 
+/* Callbacks handler */
+void ConnectCallback_Handler(USB_OTG_CORE_HANDLE *pdev);
+void Disconnect_Callback_Handler(USB_OTG_CORE_HANDLE *pdev);
+void Overcurrent_Callback_Handler(USB_OTG_CORE_HANDLE *pdev);
+uint32_t USBH_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost);
+/**
+  * @}
+  */ 
+#ifdef __cplusplus
+}
+#endif	 
+
+#endif	/* __HCD_INT_H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_otg.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_otg.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/libraries/harward_Der/usb_otg.h	(working copy)
@@ -0,0 +1,85 @@
+/************************ (C) COPYRIGHT YICHIP *************************
+ * File Name            : usb_otg.h
+ * Author               : YICHIP
+ * Version              : V1.0.0
+ * Date                 : 21-May-2019
+ * Description          : OTG Core Header.
+ *****************************************************************************/
+ 
+ 
+#ifndef __USB_OTG_H__
+#define __USB_OTG_H__
+ 
+ 
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+/* Include ------------------------------------------------------------------*/
+#include "usb_regs.h"
+#include "usb_core.h"
+/* Exported types -----------------------------------------------------------*/
+/* Exported constants -------------------------------------------------------*/	
+/* Exported macro -----------------------------------------------------------*/	
+/* Exported functions -------------------------------------------------------*/	
+/* Exported variables -------------------------------------------------------*/	
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+  
+/** @defgroup USB_OTG
+  * @brief This file is the 
+  * @{
+  */ 
+
+
+/** @defgroup USB_OTG_Exported_Defines
+  * @{
+  */ 
+
+
+void USB_OTG_InitiateSRP(USB_OTG_CORE_HANDLE *pdev);
+void USB_OTG_InitiateHNP(USB_OTG_CORE_HANDLE *pdev, uint8_t state , uint8_t mode);
+void USB_OTG_Switchback (USB_OTG_CORE_HANDLE *pdev);
+uint32_t  USB_OTG_GetCurrentState (USB_OTG_CORE_HANDLE *pdev);
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_OTG_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_OTG_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_OTG_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_OTG_Exported_FunctionsPrototype
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+#ifdef __cplusplus
+}
+#endif	 
+
+#endif	/* __USB_OTG_H__ */
+
+/************************ (C) COPYRIGHT 2014 YICHIP ****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_bsp.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_bsp.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_bsp.c	(working copy)
@@ -0,0 +1,563 @@
+/**
+  ******************************************************************************
+  * @file    usb_bsp.c
+  * @author  MCD Application Team
+  * @version V2.1.0
+  * @date    19-March-2012
+  * @brief   This file implements the board support package for the USB host library
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_bsp.h"
+#include "usb_conf.h"
+
+/** @addtogroup USBH_USER
+* @{
+*/
+
+/** @defgroup USB_BSP
+  * @brief This file is responsible to offer board support package
+  * @{
+  */ 
+
+/** @defgroup USB_BSP_Private_Defines
+  * @{
+  */ 
+//#define USE_ACCURATE_TIME
+#define TIM_MSEC_DELAY                     0x01
+#define TIM_USEC_DELAY                     0x02
+#define HOST_OVRCURR_PORT                  GPIOE
+#define HOST_OVRCURR_LINE                  GPIO_Pin_1
+#define HOST_OVRCURR_PORT_SOURCE           GPIO_PortSourceGPIOE
+#define HOST_OVRCURR_PIN_SOURCE            GPIO_PinSource1
+#define HOST_OVRCURR_PORT_RCC              RCC_APB2Periph_GPIOE
+#define HOST_OVRCURR_EXTI_LINE             EXTI_Line1
+#define HOST_OVRCURR_IRQn                  EXTI1_IRQn 
+
+#ifdef USE_STM3210C_EVAL
+ #define HOST_POWERSW_PORT_RCC             RCC_APB2Periph_GPIOC
+ #define HOST_POWERSW_PORT                 GPIOC
+ #define HOST_POWERSW_VBUS                 GPIO_Pin_9
+#else
+ #ifdef USE_USB_OTG_FS 
+  #define HOST_POWERSW_PORT_RCC            RCC_AHB1Periph_GPIOH
+  #define HOST_POWERSW_PORT                GPIOH
+  #define HOST_POWERSW_VBUS                GPIO_Pin_5
+ #endif
+#endif
+
+#define HOST_SOF_OUTPUT_RCC                RCC_APB2Periph_GPIOA
+#define HOST_SOF_PORT                      GPIOA
+#define HOST_SOF_SIGNAL                    GPIO_Pin_8
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_BSP_Private_TypesDefinitions
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USB_BSP_Private_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBH_BSP_Private_Variables
+  * @{
+  */ 
+ErrorStatus HSEStartUpStatus;
+#ifdef USE_ACCURATE_TIME 
+volatile uint32_t BSP_delay = 0;
+#endif
+/**
+  * @}
+  */ 
+
+/** @defgroup USBH_BSP_Private_FunctionPrototypes
+  * @{
+  */ 
+
+#ifdef USE_ACCURATE_TIME 
+static void BSP_SetTime(uint8_t Unit);
+static void BSP_Delay(uint32_t nTime,uint8_t Unit);
+static void USB_OTG_BSP_TimeInit ( void );
+#endif
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_BSP_Private_Functions
+  * @{
+  */ 
+
+/**
+  * @brief  USB_OTG_BSP_Init
+  *         Initilizes BSP configurations
+  * @param  None
+  * @retval None
+  */
+
+void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
+{
+
+//// EXTI_InitTypeDef EXTI_InitStructure;
+// #ifdef USE_STM3210C_EVAL
+
+//  RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
+//  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;
+
+//#else // USE_STM322xG_EVAL  
+//  GPIO_InitTypeDef GPIO_InitStructure;
+// #ifdef USE_USB_OTG_FS 
+// 
+//  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA , ENABLE);  
+//  
+//  /* Configure SOF VBUS ID DM DP Pins */
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8  | 
+//    GPIO_Pin_9  | 
+//      GPIO_Pin_11 | 
+//        GPIO_Pin_12;
+//  
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
+//  GPIO_Init(GPIOA, &GPIO_InitStructure);  
+//  
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_OTG1_FS) ;
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_OTG1_FS) ; 
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_OTG1_FS) ; 
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_OTG1_FS) ;
+//  
+//  /* this for ID line debug */
+//  
+//  
+//  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
+//  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
+//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;  
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_Init(GPIOA, &GPIO_InitStructure);  
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_OTG1_FS) ;   
+
+
+//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
+//  RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE) ; 
+// #else // USE_USB_OTG_HS 
+
+//  #ifdef USE_ULPI_PHY // ULPI
+//  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | 
+//                         RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOH | 
+//                           RCC_AHB1Periph_GPIOI, ENABLE);    
+//  
+//  
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource3, GPIO_AF_OTG2_HS) ; // D0
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource5, GPIO_AF_OTG2_HS) ; // CLK
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource0, GPIO_AF_OTG2_HS) ; // D1
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource1, GPIO_AF_OTG2_HS) ; // D2
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource5, GPIO_AF_OTG2_HS) ; // D7
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_OTG2_HS) ; // D3
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_OTG2_HS) ; // D4
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12,GPIO_AF_OTG2_HS) ; // D5
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_HS) ; // D6
+//  GPIO_PinAFConfig(GPIOH,GPIO_PinSource4, GPIO_AF_OTG2_HS) ; // NXT
+//  GPIO_PinAFConfig(GPIOI,GPIO_PinSource11,GPIO_AF_OTG2_HS) ; // DIR
+//  GPIO_PinAFConfig(GPIOC,GPIO_PinSource0, GPIO_AF_OTG2_HS) ; // STP
+//  
+//  // CLK
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ; 
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOA, &GPIO_InitStructure);  
+//  
+//  // D0
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3  ; 
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
+//  GPIO_Init(GPIOA, &GPIO_InitStructure);  
+//  
+//  
+//  
+//  // D1 D2 D3 D4 D5 D6 D7
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1  |
+//    GPIO_Pin_5 | GPIO_Pin_10 | 
+//      GPIO_Pin_11| GPIO_Pin_12 | 
+//        GPIO_Pin_13 ;
+//  
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
+//  GPIO_Init(GPIOB, &GPIO_InitStructure);  
+//  
+//  
+//  // STP
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0  ;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOC, &GPIO_InitStructure);  
+//  
+//  //NXT  
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOH, &GPIO_InitStructure);  
+//  
+//  
+//  //DIR
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ; 
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOI, &GPIO_InitStructure);  
+//  
+//  
+//  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS | 
+//                         RCC_AHB1Periph_OTG_HS_ULPI, ENABLE) ;    
+//   
+//  #else
+
+//  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE);
+//  
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12  | 
+//    GPIO_Pin_13 |
+//      GPIO_Pin_14 | 
+//        GPIO_Pin_15;
+//  
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOB, &GPIO_InitStructure);  
+//  
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12, GPIO_AF_OTG2_FS) ; 
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_FS) ; 
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG2_FS) ; 
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG2_FS) ;
+//  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS, ENABLE) ;   
+//  #endif
+// #endif //USB_OTG_HS
+//#endif //USE_STM322xG_EVAL
+
+//  
+//  /* Configure pin for overcurrent detection */
+//  RCC_APB2PeriphClockCmd(HOST_OVRCURR_PORT_RCC, ENABLE);
+//  
+//  /* Configure SOF Pin */
+//  GPIO_InitStructure.GPIO_Pin = HOST_OVRCURR_LINE;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
+//  GPIO_Init(HOST_OVRCURR_PORT, &GPIO_InitStructure);
+//  
+//  /* Connect Button EXTI Line to Button GPIO Pin */
+//  GPIO_EXTILineConfig(HOST_OVRCURR_PORT_SOURCE, HOST_OVRCURR_PIN_SOURCE);  
+//  
+//  /* Configure Button EXTI line */
+//  EXTI_InitStructure.EXTI_Line = HOST_OVRCURR_EXTI_LINE;
+//  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  
+//  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; 
+//  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
+//  EXTI_Init(&EXTI_InitStructure);
+//   USB_OTG_BSP_TimeInit();
+}
+/**
+  * @brief  USB_OTG_BSP_EnableInterrupt
+  *         Configures USB Global interrupt
+  * @param  None
+  * @retval None
+  */
+void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
+{
+//  NVIC_InitTypeDef NVIC_InitStructure; 
+//  
+//  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
+//#ifdef USE_USB_OTG_HS   
+//  NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_IRQn;
+//#else
+//  NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;  
+//#endif
+//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
+//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
+//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+//  NVIC_Init(&NVIC_InitStructure);  
+
+//  
+//  /* Enable the Overcurrent Interrupt */
+//  NVIC_InitStructure.NVIC_IRQChannel = HOST_OVRCURR_IRQn;
+//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
+//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
+//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+//  
+//  NVIC_Init(&NVIC_InitStructure);  
+}
+
+/**
+  * @brief  BSP_Drive_VBUS
+  *         Drives the Vbus signal through IO
+  * @param  state : VBUS states
+  * @retval None
+  */
+
+void USB_OTG_BSP_DriveVBUS(USB_OTG_CORE_HANDLE *pdev, uint8_t state)
+{
+  /*
+  On-chip 5 V VBUS generation is not supported. For this reason, a charge pump 
+  or, if 5 V are available on the application board, a basic power switch, must 
+  be added externally to drive the 5 V VBUS line. The external charge pump can 
+  be driven by any GPIO output. When the application decides to power on VBUS 
+  using the chosen GPIO, it must also set the port power bit in the host port 
+  control and status register (PPWR bit in OTG_FS_HPRT).
+  
+  Bit 12 PPWR: Port power
+  The application uses this field to control power to this port, and the core 
+  clears this bit on an overcurrent condition.
+  */
+//#ifndef USE_USB_OTG_HS   
+//  if (0 == state)
+//  { 
+//    /* DISABLE is needed on output of the Power Switch */
+//    GPIO_SetBits(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);
+//  }
+//  else
+//  {
+//    /*ENABLE the Power Switch by driving the Enable LOW */
+//    GPIO_ResetBits(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);
+//  }
+//#endif  
+}
+
+/**
+  * @brief  USB_OTG_BSP_ConfigVBUS
+  *         Configures the IO for the Vbus and OverCurrent
+  * @param  None
+  * @retval None
+  */
+
+void  USB_OTG_BSP_ConfigVBUS(USB_OTG_CORE_HANDLE *pdev)
+{
+#ifdef USE_USB_OTG_FS   
+  GPIO_InitTypeDef GPIO_InitStructure; 
+  
+#ifdef USE_STM3210C_EVAL
+  RCC_APB2PeriphClockCmd(HOST_POWERSW_PORT_RCC, ENABLE);
+  
+  
+  /* Configure Power Switch Vbus Pin */
+  GPIO_InitStructure.GPIO_Pin = HOST_POWERSW_VBUS;
+  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+  GPIO_Init(HOST_POWERSW_PORT, &GPIO_InitStructure);
+#else
+  #ifdef USE_USB_OTG_FS  
+  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOH , ENABLE);  
+  
+  GPIO_InitStructure.GPIO_Pin = HOST_POWERSW_VBUS;
+  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
+  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
+  GPIO_Init(HOST_POWERSW_PORT,&GPIO_InitStructure);
+  #endif  
+#endif
+
+  /* By Default, DISABLE is needed on output of the Power Switch */
+  GPIO_SetBits(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);
+  
+  USB_OTG_BSP_mDelay(200);   /* Delay is need for stabilising the Vbus Low 
+  in Reset Condition, when Vbus=1 and Reset-button is pressed by user */
+#endif  
+}
+
+/**
+  * @brief  USB_OTG_BSP_TimeInit
+  *         Initializes delay unit using Timer2
+  * @param  None
+  * @retval None
+  */
+static void USB_OTG_BSP_TimeInit ( void )
+{
+//#ifdef USE_ACCURATE_TIME   
+//  NVIC_InitTypeDef NVIC_InitStructure;
+//  
+//  /* Set the Vector Table base address at 0x08000000 */
+//  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);
+//  
+//  /* Configure the Priority Group to 2 bits */
+//  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
+//  
+//  /* Enable the TIM2 gloabal Interrupt */
+//  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
+//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
+//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
+//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+//  
+//  NVIC_Init(&NVIC_InitStructure);
+//  
+//  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);  
+//#endif  
+}
+
+/**
+  * @brief  USB_OTG_BSP_uDelay
+  *         This function provides delay time in micro sec
+  * @param  usec : Value of delay required in micro sec
+  * @retval None
+  */
+void USB_OTG_BSP_uDelay (const uint32_t usec)
+{
+  
+#ifdef USE_ACCURATE_TIME    
+  BSP_Delay(usec,TIM_USEC_DELAY); 
+#else
+  volatile uint32_t count = 0;
+  const uint32_t utime = (120 * usec / 7);
+  do
+  {
+    if ( ++count > utime )
+    {
+      return ;
+    }
+  }
+  while (1);
+#endif   
+  
+}
+
+
+/**
+  * @brief  USB_OTG_BSP_mDelay
+  *          This function provides delay time in milli sec
+  * @param  msec : Value of delay required in milli sec
+  * @retval None
+  */
+void USB_OTG_BSP_mDelay (const uint32_t msec)
+{ 
+#ifdef USE_ACCURATE_TIME  
+    BSP_Delay(msec,TIM_MSEC_DELAY);   
+#else
+    USB_OTG_BSP_uDelay(msec * 1000);   
+#endif    
+
+}
+
+
+/**
+  * @brief  USB_OTG_BSP_TimerIRQ
+  *         Time base IRQ
+  * @param  None
+  * @retval None
+  */
+
+void USB_OTG_BSP_TimerIRQ (void)
+{
+#ifdef USE_ACCURATE_TIME 
+//  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
+//  {
+//    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
+//    if (BSP_delay > 0x00)
+//    { 
+//      BSP_delay--;
+//    }
+//    else
+//    {
+//      TIM_Cmd(TIM2,DISABLE);
+//    }
+//  }
+#endif  
+} 
+
+#ifdef USE_ACCURATE_TIME 
+/**
+  * @brief  BSP_Delay
+  *         Delay routine based on TIM2
+  * @param  nTime : Delay Time 
+  * @param  unit : Delay Time unit : mili sec / micro sec
+  * @retval None
+  */
+static void BSP_Delay(uint32_t nTime, uint8_t unit)
+{
+  
+//  BSP_delay = nTime;
+//  BSP_SetTime(unit);  
+//  while(BSP_delay != 0);
+//  TIM_Cmd(TIM2,DISABLE);
+}
+
+/**
+  * @brief  BSP_SetTime
+  *         Configures TIM2 for delay routine based on TIM2
+  * @param  unit : msec /usec
+  * @retval None
+  */
+static void BSP_SetTime(uint8_t unit)
+{
+//  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
+//  
+//  TIM_Cmd(TIM2,DISABLE);
+//  TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE); 
+//  
+//  
+//  if(unit == TIM_USEC_DELAY)
+//  {  
+//    TIM_TimeBaseStructure.TIM_Period = 11;
+//  }
+//  else if(unit == TIM_MSEC_DELAY)
+//  {
+//    TIM_TimeBaseStructure.TIM_Period = 11999;
+//  }
+//  TIM_TimeBaseStructure.TIM_Prescaler = 5;
+//  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
+//  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
+//  
+//  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
+//  TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
+//  
+//  TIM_ARRPreloadConfig(TIM2, ENABLE);
+//  
+//  /* TIM IT enable */
+//  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
+//  
+//  /* TIM2 enable counter */ 
+//  TIM_Cmd(TIM2, ENABLE);  
+} 
+
+#endif
+
+/**
+* @}
+*/ 
+
+/**
+* @}
+*/ 
+
+/**
+* @}
+*/
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_conf.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_conf.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_conf.h	(working copy)
@@ -0,0 +1,291 @@
+/**
+  ******************************************************************************
+  * @file    usb_conf.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   General low level driver configuration
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USB_CONF__H__
+#define __USB_CONF__H__
+
+/* Includes ------------------------------------------------------------------*/
+#include "yc3121.h"
+
+
+
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+
+/** @defgroup USB_CONF
+  * @brief USB low level driver configuration file
+  * @{
+  */
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */
+
+/* USB Core and PHY interface configuration.
+   Tip: To avoid modifying these defines each time you need to change the USB
+        configuration, you can declare the needed define in your toolchain
+        compiler preprocessor.
+   */
+/****************** USB OTG FS PHY CONFIGURATION *******************************
+*  The USB OTG FS Core supports one on-chip Full Speed PHY.
+*
+*  The USE_EMBEDDED_PHY symbol is defined in the project compiler preprocessor
+*  when FS core is used.
+*******************************************************************************/
+#ifndef USE_USB_OTG_FS
+ //#define USE_USB_OTG_FS
+#endif /* USE_USB_OTG_FS */
+
+#ifdef USE_USB_OTG_FS
+ #define USB_OTG_FS_CORE
+#endif
+
+/****************** USB OTG HS PHY CONFIGURATION *******************************
+*  The USB OTG HS Core supports two PHY interfaces:
+*   (i)  An ULPI interface for the external High Speed PHY: the USB HS Core will
+*        operate in High speed mode
+*   (ii) An on-chip Full Speed PHY: the USB HS Core will operate in Full speed mode
+*
+*  You can select the PHY to be used using one of these two defines:
+*   (i)  USE_ULPI_PHY: if the USB OTG HS Core is to be used in High speed mode
+*   (ii) USE_EMBEDDED_PHY: if the USB OTG HS Core is to be used in Full speed mode
+*
+*  Notes:
+*   - The USE_ULPI_PHY symbol is defined in the project compiler preprocessor as
+*     default PHY when HS core is used.
+*   - On STM322xG-EVAL and STM324xG-EVAL boards, only configuration(i) is available.
+*     Configuration (ii) need a different hardware, for more details refer to your
+*     STM32 device datasheet.
+*******************************************************************************/
+#ifndef USE_USB_OTG_HS
+ //#define USE_USB_OTG_HS
+#endif /* USE_USB_OTG_HS */
+
+#ifndef USE_ULPI_PHY
+ //#define USE_ULPI_PHY
+#endif /* USE_ULPI_PHY */
+
+#ifndef USE_EMBEDDED_PHY
+ //#define USE_EMBEDDED_PHY
+#endif /* USE_EMBEDDED_PHY */
+
+#ifdef USE_USB_OTG_HS
+ #define USB_OTG_HS_CORE
+#endif
+
+/*******************************************************************************
+*                      FIFO Size Configuration in Device mode
+*
+*  (i) Receive data FIFO size = RAM for setup packets +
+*                   OUT endpoint control information +
+*                   data OUT packets + miscellaneous
+*      Space = ONE 32-bits words
+*     --> RAM for setup packets = 10 spaces
+*        (n is the nbr of CTRL EPs the device core supports)
+*     --> OUT EP CTRL info      = 1 space
+*        (one space for status information written to the FIFO along with each
+*        received packet)
+*     --> data OUT packets      = (Largest Packet Size / 4) + 1 spaces
+*        (MINIMUM to receive packets)
+*     --> OR data OUT packets  = at least 2*(Largest Packet Size / 4) + 1 spaces
+*        (if high-bandwidth EP is enabled or multiple isochronous EPs)
+*     --> miscellaneous = 1 space per OUT EP
+*        (one space for transfer complete status information also pushed to the
+*        FIFO with each endpoint's last packet)
+*
+*  (ii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for
+*       that particular IN EP. More space allocated in the IN EP Tx FIFO results
+*       in a better performance on the USB and can hide latencies on the AHB.
+*
+*  (iii) TXn min size = 16 words. (n  : Transmit FIFO index)
+*   (iv) When a TxFIFO is not used, the Configuration should be as follows:
+*       case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txm can use the space allocated for Txn.
+*       case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txn should be configured with the minimum space of 16 words
+*  (v) The FIFO is used optimally when used TxFIFOs are allocated in the top
+*       of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
+*   (vi) In HS case12 FIFO locations should be reserved for internal DMA registers
+*        so total FIFO size should be 1012 Only instead of 1024
+*******************************************************************************/
+
+/****************** USB OTG HS CONFIGURATION **********************************/
+#ifdef USB_OTG_HS_CORE
+ #define RX_FIFO_HS_SIZE                          512
+ #define TX0_FIFO_HS_SIZE                         128
+ #define TX1_FIFO_HS_SIZE                         372
+ #define TX2_FIFO_HS_SIZE                          0
+ #define TX3_FIFO_HS_SIZE                          0
+ #define TX4_FIFO_HS_SIZE                          0
+ #define TX5_FIFO_HS_SIZE                          0
+
+// #define USB_OTG_HS_SOF_OUTPUT_ENABLED
+
+ #ifdef USE_ULPI_PHY
+  #define USB_OTG_ULPI_PHY_ENABLED
+ #endif
+ #ifdef USE_EMBEDDED_PHY
+   #define USB_OTG_EMBEDDED_PHY_ENABLED
+ #endif
+ #define USB_OTG_HS_INTERNAL_DMA_ENABLED
+ #define USB_OTG_HS_DEDICATED_EP1_ENABLED
+ #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT
+#endif
+
+/****************** USB OTG FS CONFIGURATION **********************************/
+// total fifo size <= 448 (512 - 64)
+#define RX1_FIFO_FS_SIZE                         	64
+#define RX2_FIFO_FS_SIZE                          	64
+#define RX3_FIFO_FS_SIZE                          	64
+#define RX4_FIFO_FS_SIZE                          	0
+#define RX5_FIFO_FS_SIZE                          	0
+#define RX6_FIFO_FS_SIZE                          	0
+#define RX7_FIFO_FS_SIZE                          	0
+
+#define TX1_FIFO_FS_SIZE                         	64
+#define TX2_FIFO_FS_SIZE                          	64
+#define TX3_FIFO_FS_SIZE                          	64
+#define TX4_FIFO_FS_SIZE                          	0
+#define TX5_FIFO_FS_SIZE                          	0
+#define TX6_FIFO_FS_SIZE                          	0
+#define TX7_FIFO_FS_SIZE                          	0
+
+/* EP0 IN/OUT share the same section FIFO*/
+#define TX0_FIFO_FS_SIZE                            64
+#define RX0_FIFO_FS_SIZE                            64
+
+#define IS_FIFO_SIZE(size)          (((size) == 0)   || \
+                                     ((size) == 8)   || \
+                                     ((size) == 16)  || \
+                                     ((size) == 32)  || \
+                                     ((size) == 64)  || \
+                                     ((size) == 128) || \
+                                     ((size) == 256) || \
+                                     ((size) == 512))
+//#define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT
+// #define USB_OTG_FS_SOF_OUTPUT_ENABLED
+
+/****************** USB OTG MISC CONFIGURATION ********************************/
+#define VBUS_SENSING_ENABLED
+
+/****************** USB OTG MODE CONFIGURATION ********************************/
+//#define USE_HOST_MODE
+#define USE_DEVICE_MODE
+//#define USE_OTG_MODE
+/****************** USB OTG DMA MODE CONFIGURATION ***************************/
+//#define USB_OTG_DMA_ENABLE              /* Enable DMA mode */
+
+/* BULK Transfer */
+//#define USE_USB_DMA_MODE1
+
+/* Only one endpoind can be enable */
+#define USB_OTG_DEV_DMA_EP_NUM              0x81
+
+/****************** C Compilers dependant keywords ****************************/
+/* In HS mode and when the DMA is used, all variables and data structures dealing
+   with the DMA during the transaction process should be 4-bytes aligned */
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined   (__GNUC__)        /* GNU Compiler */
+    #define __ALIGN_END    __attribute__ ((aligned (4)))
+    #define __ALIGN_BEGIN
+  #else
+    #define __ALIGN_END
+    #if defined   (__CC_ARM)      /* ARM Compiler */
+      #define __ALIGN_BEGIN    __align(4)
+    #elif defined (__ICCARM__)    /* IAR Compiler */
+      #define __ALIGN_BEGIN
+    #elif defined  (__TASKING__)  /* TASKING Compiler */
+      #define __ALIGN_BEGIN    __align(4)
+    #endif /* __CC_ARM */
+  #endif /* __GNUC__ */
+#else
+  //#define __ALIGN_BEGIN         __align(4)
+  #define __ALIGN_END    __attribute__ ((aligned (4)))
+  #define __ALIGN_BEGIN
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+/* __packed keyword used to decrease the data type alignment to 1-byte */
+#if defined (__CC_ARM)         /* ARM Compiler */
+  #define __packed    __packed
+#elif defined (__ICCARM__)     /* IAR Compiler */
+  #define __packed    __packed
+#elif defined   ( __GNUC__ )   /* GNU Compiler */
+//  #define __packed    __attribute__ ((__packed__))
+#elif defined   (__TASKING__)  /* TASKING Compiler */
+  #define __packed    __unaligned
+#endif /* __CC_ARM */
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+#endif //__USB_CONF__H__
+
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_main.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_main.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_main.h	(working copy)
@@ -0,0 +1,18 @@
+#include "usbd_cdc_core.h"
+#include "usbd_usr.h"
+#include "usbd_desc.h"
+#include <string.h>
+#include <stdio.h>
+#include "usb_dcd_int.h"
+
+
+
+
+
+
+
+
+void usb_main(void);
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_main.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_main.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usb_main.c	(working copy)
@@ -0,0 +1,117 @@
+/**
+  ******************************************************************************
+  * @file    main.c
+  * @author  yichip
+  * @version V1.0.0
+  * @date    7-9-2018
+  * @brief   This file provides all the Application firmware functions.
+  ******************************************************************************
+  * @attention
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+
+
+
+
+#include <string.h>
+#include <stdio.h>
+#include "usb_dcd_int.h"
+#include "usbd_cdc_core.h"
+#include "usbd_usr.h"
+#include "usbd_desc.h"
+#include "misc.h"
+#include "usbd_cdc_vcp.h"
+
+
+USB_OTG_CORE_HANDLE  USB_OTG_dev;
+extern CDC_IF_Prop_TypeDef  APP_FOPS;
+
+
+void usb_reg_init()
+{
+    USB_OTG_WRITE_REG8(CORE_USB_CONFIG,0x00);
+    my_delay_ms(1);
+    USB_OTG_WRITE_REG8(CORE_USB_TRIG,0xc0);
+    USB_OTG_WRITE_REG8(CORE_USB_CONFIG,0x3c);
+    USB_OTG_WRITE_REG8(CORE_USB_STATUS,0xFF);
+    USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,0xFF);
+    USB_OTG_WRITE_REG8(CORE_USB_ADDR,0x00);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(0),0x70);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf0);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(2),0xff);
+
+
+}
+
+uint8_t Rxbuf[1024*2] = {0};
+uint32_t totalLen=0;
+void usb_main(void)
+{
+  int rxlen = 0;
+	enable_clock(CLKCLS_BT);
+	BT_CLKPLL_EN = 0xff;
+	enable_clock(CLKCLS_USB);
+	SYSCTRL_HCLK_CON |= 1 << 11;
+	usb_reg_init();
+
+  memset(&USB_OTG_dev, 0, sizeof(USB_OTG_dev));
+
+  USBD_Init(&USB_OTG_dev,
+        #ifdef USE_USB_OTG_HS
+              USB_OTG_HS_CORE_ID,
+        #else
+              USB_OTG_FS_CORE_ID,
+        #endif
+              &USR_desc,
+              &USBD_CDC_cb,
+              &USRD_cb);
+
+enable_intr(INTR_USB);
+
+	while(1)
+	{
+        rxlen = VCP_GetRxBuflen();
+        if(rxlen>0)
+        {
+            totalLen +=rxlen;
+            MyPrintf("totalLen=%d rxlen =%d\n\r",totalLen,rxlen);
+            for(int i=0; i<rxlen; i++)
+            {
+                Rxbuf[i] = VCP_GetRxChar();
+                MyPrintf("%02x ",Rxbuf[i]);
+            }
+            MyPrintf("\n");
+            #ifndef USB_FLOWCTRL
+            DCD_EP_Tx(&USB_OTG_dev,CDC_IN_EP,(uint8_t*)Rxbuf,rxlen);
+            #endif
+        }
+    }
+}
+
+
+
+
+
+
+
+void USB_IRQHandler(void)
+{
+    USBD_OTG_ISR_Handler (&USB_OTG_dev);
+ //   NVIC_ClearPendingIRQ(USB_IRQn);
+ //   MyPrintf("YICHIP SCPU USB CCID handler startV1.0.\n");
+}
+
+
+
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_cdc_vcp.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_cdc_vcp.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_cdc_vcp.h	(working copy)
@@ -0,0 +1,76 @@
+/**
+  ******************************************************************************
+  * @file    usbd_cdc_vcp.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   Header for usbd_cdc_vcp.c file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CDC_VCP_H
+#define __USBD_CDC_VCP_H
+
+/* Includes ------------------------------------------------------------------*/
+#ifdef STM32F2XX
+ #include "stm32f2xx.h"
+#elif defined(STM32F10X_CL)
+ #include "stm32f10x.h"
+#endif /* STM32F2XX */
+
+#include "usbd_cdc_core.h"
+#include "usbd_conf.h"
+
+
+/* Exported typef ------------------------------------------------------------*/
+/* The following structures groups all needed parameters to be configured for the
+   ComPort. These parameters can modified on the fly by the host through CDC class
+   command class requests. */
+typedef struct
+{
+  uint32_t bitrate;
+  uint8_t  format;
+  uint8_t  paritytype;
+  uint8_t  datatype;
+}LINE_CODING;
+
+
+
+/* Exported constants --------------------------------------------------------*/
+/* The following define is used to route the USART IRQ handler to be used.
+   The IRQ handler function is implemented in the usbd_cdc_vcp.c file. */
+
+//#define EVAL_COM_IRQHandler            UART1_IRQHandler
+
+#define DEFAULT_CONFIG                  0
+#define OTHER_CONFIG                    1
+
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+uint16_t VCP_DataTx (uint8_t* Buf, uint32_t Len);
+uint32_t VCP_GetTxBuflen(void);
+uint32_t VCP_GetTxBufrsaddr(void);
+uint8_t  VCP_GetRxChar(void);
+uint32_t VCP_GetRxBuflen(void);
+int8_t * VCP_GetRxBufrsaddr(void);
+#endif /* __USBD_CDC_VCP_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_cdc_vcp.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_cdc_vcp.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_cdc_vcp.c	(working copy)
@@ -0,0 +1,576 @@
+/**
+  ******************************************************************************
+  * @file    usbd_cdc_vcp.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   Generic media access Layer.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+#pragma     data_alignment = 4
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_cdc_vcp.h"
+#include "usb_conf.h"
+#include "usbd_cdc_core.h"
+#include "Misc.h"
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+LINE_CODING linecoding =
+  {
+    115200, /* baud rate*/
+    0x00,   /* stop bits-1*/
+    0x00,   /* parity - none*/
+    0x08    /* nb. of bits 8*/
+  };
+
+
+UART_InitTypeDef USART_InitStructure;
+
+/* These are external variables imported from CDC core to be used for IN
+   transfer management. */
+
+#ifdef USER_SPECIFIED_DATA_SOURCE
+extern uint8_t  *APP_Rx_Buffer;
+uint8_t COM_Rx_data_buf[2048];
+#else
+//extern uint8_t  APP_Rx_Buffer [];
+extern struct APP_DATA_STRUCT_DEF APP_Gdata_param;
+#endif                            /* Write CDC received data in this buffer.
+                                     These data will be sent over USB IN endpoint
+                                     in the CDC core functions. */
+//extern volatile uint32_t APP_Rx_ptr_in;
+                                  /* Increment this pointer or roll it back to
+                                     start address when writing received data
+                                     in the buffer APP_Rx_Buffer. */
+
+/* Private function prototypes -----------------------------------------------*/
+static uint16_t VCP_Init     (void);
+static uint16_t VCP_DeInit   (void);
+static uint16_t VCP_Ctrl     (uint32_t Cmd, uint8_t* Buf, uint32_t Len);
+//static uint16_t VCP_DataTx   (uint8_t* Buf, uint32_t Len);
+static uint16_t VCP_DataRx   (uint8_t* Buf, uint32_t Len);
+
+static uint16_t VCP_COMConfig(uint8_t Conf);
+
+CDC_IF_Prop_TypeDef VCP_fops =
+{
+  VCP_Init,
+  VCP_DeInit,
+  VCP_Ctrl,
+  VCP_DataTx,
+  VCP_DataRx
+};
+
+/* Private functions ---------------------------------------------------------*/
+/**
+  * @brief  VCP_Init
+  *         Initializes the Media on the STM32
+  * @param  None
+  * @retval Result of the opeartion (USBD_OK in all cases)
+  */
+static uint16_t VCP_Init(void)
+{
+//    NVIC_InitTypeDef NVIC_InitStructure;
+
+    /**/
+    #ifdef USER_SPECIFIED_DATA_SOURCE
+    APP_Rx_Buffer = COM_Rx_data_buf;
+    #else
+    APP_Gdata_param.COM_config_cmp = 0;
+    #endif
+	memset(&APP_Gdata_param, 0, sizeof(APP_Gdata_param));
+    /* EVAL_COM1 default configuration */
+    /* EVAL_COM1 configured as follow:
+        - BaudRate = 115200 baud
+        - Word Length = 8 Bits
+        - One Stop Bit
+        - Parity Odd
+        - Hardware flow control disabled
+        - Receive and transmit enabled
+    */
+//    USART_InitStructure.UART_BaudRate = 115200;
+//    USART_InitStructure.UART_WordLength = UART_WordLength_8b;
+//    USART_InitStructure.UART_StopBits = UART_StopBits_1;
+//    USART_InitStructure.UART_Parity = UART_Parity_Odd;
+//    UART_Init(UART1, &USART_InitStructure);
+
+//    /* Enable the USART Receive interrupt */
+//    UART_ITConfig(UART1, UART_IT_RX_RECVD, ENABLE);
+
+//    /* Enable USART Interrupt */
+//    NVIC_InitStructure.NVIC_IRQChannel = UART1_IRQn;
+//    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
+//    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+//    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+//    NVIC_Init(&NVIC_InitStructure);
+
+    return USBD_OK;
+}
+
+/**
+  * @brief  VCP_DeInit
+  *         DeInitializes the Media on the STM32
+  * @param  None
+  * @retval Result of the opeartion (USBD_OK in all cases)
+  */
+static uint16_t VCP_DeInit(void)
+{
+
+  return USBD_OK;
+}
+
+
+/**
+  * @brief  VCP_Ctrl
+  *         Manage the CDC class requests
+  * @param  Cmd: Command code
+  * @param  Buf: Buffer containing command data (request parameters)
+  * @param  Len: Number of data to be sent (in bytes)
+  * @retval Result of the opeartion (USBD_OK in all cases)
+  */
+static uint16_t VCP_Ctrl (uint32_t Cmd, uint8_t* Buf, uint32_t Len)
+{
+  switch (Cmd)
+  {
+  case SEND_ENCAPSULATED_COMMAND:
+    /* Not  needed for this driver */
+    break;
+
+  case GET_ENCAPSULATED_RESPONSE:
+    /* Not  needed for this driver */
+    break;
+
+  case SET_COMM_FEATURE:
+    /* Not  needed for this driver */
+    break;
+
+  case GET_COMM_FEATURE:
+    /* Not  needed for this driver */
+    break;
+
+  case CLEAR_COMM_FEATURE:
+    /* Not  needed for this driver */
+    break;
+
+  case SET_LINE_CODING:
+    linecoding.bitrate = (uint32_t)(Buf[0] | (Buf[1] << 8) | (Buf[2] << 16) | (Buf[3] << 24));
+    linecoding.format = Buf[4];
+    linecoding.paritytype = Buf[5];
+    linecoding.datatype = Buf[6];
+    APP_Gdata_param.COM_config_cmp = 1;
+//    MyPrintf("cmp=%X\n",APP_Gdata_param.COM_config_cmp);
+//    MyPrintf("SET_LINE_CODING \n\r");
+    /* Set the new configuration */
+    VCP_COMConfig(OTHER_CONFIG);
+    break;
+
+  case GET_LINE_CODING:
+    Buf[0] = (uint8_t)(linecoding.bitrate);
+    Buf[1] = (uint8_t)(linecoding.bitrate >> 8);
+    Buf[2] = (uint8_t)(linecoding.bitrate >> 16);
+    Buf[3] = (uint8_t)(linecoding.bitrate >> 24);
+    Buf[4] = linecoding.format;
+    Buf[5] = linecoding.paritytype;
+    Buf[6] = linecoding.datatype;
+//    MyPrintf("GET_LINE_CODING \n\r");
+    break;
+
+  case SET_CONTROL_LINE_STATE:
+    /* Not  needed for this driver */
+    break;
+
+  case SEND_BREAK:
+    /* Not  needed for this driver */
+    break;
+
+  default:
+    break;
+  }
+
+  return USBD_OK;
+}
+
+int isUsbBufFull()
+{
+	int ret = 0;
+//	NVIC_DisableIRQ(USB_IRQn);
+	ret = APP_Gdata_param.rx_structure.Rx_counter >= CDC_APP_RX_DATA_SIZE;
+//	NVIC_EnableIRQ(USB_IRQn);
+	return ret;
+}
+/**
+  * @brief  VCP_DataTx
+  *         CDC received data to be send over USB IN endpoint are managed in
+  *         this function.
+  * @param  Buf: Buffer of data to be sent
+  * @param  Len: Number of data to be sent (in bytes)
+  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+  */
+uint16_t VCP_DataTx (uint8_t* Buf, uint32_t Len)
+{
+    #ifdef USER_SPECIFIED_DATA_SOURCE
+    uint32_t i = 0;
+    for (i = 0; i < Len; i++)
+    {
+        *(APP_Rx_Buffer + APP_Rx_ptr_in) = *Buf++;
+        APP_Rx_ptr_in++;
+    }
+    #else
+    uint32_t i = 0;
+    if (linecoding.datatype == 7)
+    {
+        for (i = 0; i < Len; i++)
+        {
+//			do
+//			{
+//				if (isUsbBufFull())
+//				{
+//					int i;
+//					for (i = 0; i < 1000; i++);
+//				}else
+//				{
+//					break;
+//				}
+//			} while (1);
+            APP_Gdata_param.rx_structure.APP_Rx_Buffer[APP_Gdata_param.rx_structure.APP_Rx_ptr_in++] = (*Buf++) & 0x7F;
+  //          NVIC_DisableIRQ(USB_IRQn);
+            APP_Gdata_param.rx_structure.Rx_counter++;
+   //         NVIC_EnableIRQ(USB_IRQn);
+            /* To avoid buffer overflow */
+            if(APP_Gdata_param.rx_structure.APP_Rx_ptr_in == CDC_APP_RX_DATA_SIZE)
+            {
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_in = 0;
+            }
+        }
+    }
+    else if (linecoding.datatype == 8)
+    {
+        for (i = 0; i < Len; i++)
+        {
+			/* Detect whether the buffer overflow */
+//            do
+//			{
+//				if (isUsbBufFull())
+//				{
+//					int i;
+//					/* Wait Buf Idle */
+//					for (i = 0; i < 1000; i++);
+//				}else
+//				{
+//					break;
+//				}
+//			} while (1);
+			APP_Gdata_param.rx_structure.APP_Rx_Buffer[APP_Gdata_param.rx_structure.APP_Rx_ptr_in++] = *Buf++;
+		//	NVIC_DisableIRQ(USB_IRQn);
+            APP_Gdata_param.rx_structure.Rx_counter++;
+      //      NVIC_EnableIRQ(USB_IRQn);
+            /* To avoid buffer overflow */
+            if(APP_Gdata_param.rx_structure.APP_Rx_ptr_in == CDC_APP_RX_DATA_SIZE)
+            {
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_in = 0;
+            }
+        }
+    }
+    #endif
+    return USBD_OK;
+}
+
+/**
+  * @brief  Get_TxBuf_length
+  *         Get the length of the remaining data to be transmitted
+  * @param  NONE
+  * @retval Result receive data length
+  */
+uint32_t VCP_GetTxBuflen(void)
+{
+	uint32_t ret = 0x00;
+	if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out < APP_Gdata_param.rx_structure.APP_Rx_ptr_in)
+		ret = APP_Gdata_param.rx_structure.APP_Rx_ptr_in - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+	else
+		ret = CDC_APP_RX_DATA_SIZE + APP_Gdata_param.rx_structure.APP_Rx_ptr_in \
+	          - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+    return ret;
+}
+
+/**
+  * @brief  Get_RxBuf_rsaddr
+  *         Get reading receive data starting position.
+  * @param  NONE
+  * @retval Result received data is read starting position
+  */
+uint32_t VCP_GetTxBufrsaddr(void)
+{
+    return(APP_Gdata_param.rx_structure.APP_Rx_ptr_out);
+}
+
+/**
+  * @brief  Get_RxData
+  *         Get receive data by byte
+  * @param  NONE
+  * @retval Result receive data
+  */
+extern uint8_t usbFlowCtrl;
+uint8_t VCP_GetRxChar(void)
+{
+	uint8_t ret;
+  ret = (APP_Gdata_param.tx_structure.APP_Tx_Buffer[APP_Gdata_param.tx_structure.APP_Tx_ptr_out++]);
+	if (APP_Gdata_param.tx_structure.APP_Tx_ptr_out >= CDC_APP_TX_DATA_SIZE)
+  {
+     APP_Gdata_param.tx_structure.APP_Tx_ptr_out = 0;
+  }
+	#ifdef USB_FLOWCTRL
+	if((VCP_GetRxBuflen()+CDC_DATA_OUT_PACKET_SIZE)<CDC_APP_TX_DATA_SIZE)
+	{
+		if(usbFlowCtrl==1)
+		{
+			//MyPrintf("\r\n\r\n usbFlowCtrl=0\r\n\r\n");
+			usbFlowCtrl=0;
+			NVIC_EnableIRQ(USB_IRQn);
+		}
+	}
+	#endif
+	return ret;
+}
+
+/**
+  * @brief  Get_RxBuf_length
+  *         Get receive data length
+  * @param  NONE
+  * @retval Result receive data length
+  */
+uint32_t VCP_GetRxBuflen(void)
+{
+	uint32_t inPtr=APP_Gdata_param.tx_structure.APP_Tx_ptr_in;
+    if(inPtr>=APP_Gdata_param.tx_structure.APP_Tx_ptr_out)
+		{
+			return (inPtr-APP_Gdata_param.tx_structure.APP_Tx_ptr_out);
+		}
+		else
+		{
+			return (CDC_APP_TX_DATA_SIZE-(APP_Gdata_param.tx_structure.APP_Tx_ptr_out-inPtr));
+		}
+}
+
+/**
+  * @brief  Get_RxBuf_rsaddr
+  *         Get reading receive data starting position.
+  * @param  NONE
+  * @retval Result received data is read starting position
+  */
+int8_t * VCP_GetRxBufrsaddr(void)
+{
+    return (int8_t*)(&(APP_Gdata_param.tx_structure.APP_Tx_Buffer[APP_Gdata_param.tx_structure.APP_Tx_ptr_out]));
+}
+
+/**
+  * @brief  VCP_DataRx
+  *         Data received over USB OUT endpoint are sent over CDC interface
+  *         through this function.
+  *
+  *         @note
+  *         This function will block any OUT packet reception on USB endpoint
+  *         untill exiting this function. If you exit this function before transfer
+  *         is complete on CDC interface (ie. using DMA controller) it will result
+  *         in receiving more data while previous ones are still not sent.
+  *
+  * @param  Buf: Buffer of data to be received
+  * @param  Len: Number of data received (in bytes)
+  * @retval Result of the opeartion: USBD_OK if all operations are OK else VCP_FAIL
+  */
+static uint16_t VCP_DataRx (uint8_t* Buf, uint32_t Len)
+{
+    uint32_t i;
+    //MyPrintf("vcp_len =%X\n\r",Len);
+    for (i = 0; i < Len; i++)
+    {
+        APP_Gdata_param.tx_structure.APP_Tx_Buffer[APP_Gdata_param.tx_structure.APP_Tx_ptr_in++] = Buf[i];
+				if(APP_Gdata_param.tx_structure.APP_Tx_ptr_in >= CDC_APP_TX_DATA_SIZE)
+				{
+						APP_Gdata_param.tx_structure.APP_Tx_ptr_in = 0;
+				}
+
+				APP_Gdata_param.tx_structure.Tx_counter++;
+    }
+		#ifdef USB_FLOWCTRL
+		if((VCP_GetRxBuflen()+CDC_DATA_OUT_PACKET_SIZE)>=CDC_APP_TX_DATA_SIZE)
+		{
+			if(usbFlowCtrl==0)
+			{
+				usbFlowCtrl=1;
+				NVIC_DisableIRQ(USB_IRQn);
+				//MyPrintf("\r\n\r\n usbFlowCtrl=1\r\n\r\n");
+			}
+		}
+		#endif
+    return USBD_OK;
+}
+
+
+
+/**
+  * @brief  VCP_COMConfig
+  *         Configure the COM Port with default values or values received from host.
+  * @param  Conf: can be DEFAULT_CONFIG to set the default configuration or OTHER_CONFIG
+  *         to set a configuration received from the host.
+  * @retval None.
+  */
+static uint16_t VCP_COMConfig(uint8_t Conf)
+{
+	/*
+    if (Conf == DEFAULT_CONFIG)
+    {
+//        /* EVAL_COM1 default configuration */
+//        /* EVAL_COM1 configured as follow:
+//        - BaudRate = 115200 baud
+//        - Word Length = 8 Bits
+//        - One Stop Bit
+//        - Parity Odd
+//        - Hardware flow control disabled
+//        - Receive and transmit enabled
+//        */
+//        USART_InitStructure.UART_BaudRate = 115200;
+//        USART_InitStructure.UART_WordLength = UART_WordLength_8b;
+//        USART_InitStructure.UART_StopBits = UART_StopBits_1;
+//        USART_InitStructure.UART_Parity = UART_Parity_No;
+
+//        UART_Init(UART1, &USART_InitStructure);
+//        /* Enable the USART Receive interrupt */
+//        UART_ITConfig(UART1, UART_IT_RX_RECVD, ENABLE);
+//    }
+
+//    else
+//    {
+//        /* set the Stop bit*/
+//        switch (linecoding.format)
+//        {
+//        case 0:
+//          USART_InitStructure.UART_StopBits = UART_StopBits_1;
+//          break;
+//        case 1:
+//          USART_InitStructure.UART_StopBits = UART_StopBits_1_5;
+//          break;
+//        case 2:
+//          USART_InitStructure.UART_StopBits = UART_StopBits_2;
+//          break;
+//        default :
+//          VCP_COMConfig(DEFAULT_CONFIG);
+//          return (USBD_FAIL);
+//        }
+
+//        /* set the parity bit*/
+//        switch (linecoding.paritytype)
+//        {
+//        case 0:
+//          USART_InitStructure.UART_Parity = UART_Parity_No;
+//          break;
+//        case 1:
+//          USART_InitStructure.UART_Parity = UART_Parity_Even;
+//          break;
+//        case 2:
+//          USART_InitStructure.UART_Parity = UART_Parity_Odd;
+//          break;
+//        default :
+//          VCP_COMConfig(DEFAULT_CONFIG);
+//          return (USBD_FAIL);
+//        }
+
+//        /*set the data type : only 8bits and 9bits is supported */
+//        switch (linecoding.datatype)
+//        {
+//        case 0x07:
+//          /* With this configuration a parity (Even or Odd) should be set */
+//          USART_InitStructure.UART_WordLength = UART_WordLength_8b;
+//          break;
+//        case 0x08:
+//          if (USART_InitStructure.UART_Parity == UART_Parity_No)
+//          {
+//            USART_InitStructure.UART_WordLength = UART_WordLength_8b;
+//          }
+//          else
+//          {
+//    //        USART_InitStructure.UART_WordLength = UART_WordLength_9b;
+//          }
+//
+//          break;
+//        default :
+////          VCP_COMConfig(DEFAULT_CONFIG);
+//          return (USBD_FAIL);
+//        }
+
+//        USART_InitStructure.UART_BaudRate = linecoding.bitrate;
+
+////        UART_Init(UART1, &USART_InitStructure);
+//    }
+  return USBD_OK;
+}
+
+/**
+  * @brief  EVAL_COM_IRQHandler
+  *
+  * @param  None.
+  * @retval None.
+  */
+#if 0
+void EVAL_COM_IRQHandler(void)
+{
+    UART_TypeDef * UARTx = UART1;
+    uint8_t ra_data_re = 0x00;
+	switch(UARTx->OFFSET_8.IIR & 0x0f)
+	{
+        case UART_IT_ID_TX_EMPTY:
+//            /* Send the received data to the PC Host*/
+//            VCP_DataTx (0,0);
+
+            break;
+        case UART_IT_ID_RX_RECVD:
+            #ifdef USER_SPECIFIED_DATA_SOURCE
+            if (linecoding.datatype == 7)
+            {
+                ra_data_re = UART_ReceiveData(UART1) & 0x7F;
+            }
+            else if (linecoding.datatype == 8)
+            {
+                ra_data_re = UART_ReceiveData(UART1);
+            }
+            VCP_DataTx (&ra_data_re, 1);
+            #else
+//            UART_ITConfig(UART1, UART_IT_RX_RECVD, DISABLE);
+
+            ra_data_re = UART_ReceiveData(UART1);
+            VCP_DataTx (&ra_data_re, 1);
+
+//            UART_ITConfig(UART1, UART_IT_RX_RECVD, ENABLE);
+            #endif
+
+            /* If overrun condition occurs, clear the ORE flag and recover communication */
+//            (void)UART_ReceiveData(UART1);
+            break;
+        default :
+            break;
+    }
+}
+#endif
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_conf.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_conf.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_conf.h	(working copy)
@@ -0,0 +1,108 @@
+/**
+  ******************************************************************************
+  * @file    usbd_conf.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   USB Device configuration file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CONF__H__
+#define __USBD_CONF__H__
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_conf.h"
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */ 
+#define USBD_CFG_MAX_NUM                1
+#define USBD_ITF_MAX_NUM                1
+
+#define USBD_SELF_POWERED               
+
+#define USB_MAX_STR_DESC_SIZ            255 
+
+/** @defgroup USB_VCP_Class_Layer_Parameter
+  * @{
+  */ 
+#define CDC_IN_EP                       0x81  /* EP1 for data IN */
+#define CDC_OUT_EP                      0x01  /* EP1 for data OUT */
+#define CDC_CMD_EP                      0x82  /* EP2 for CDC commands */
+
+/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
+#ifdef USE_USB_OTG_HS
+ #define CDC_DATA_MAX_PACKET_SIZE       512  /* Endpoint IN & OUT Packet size */
+ #define CDC_CMD_PACKET_SZE             8    /* Control Endpoint Packet size */
+
+ #define CDC_IN_FRAME_INTERVAL          40   /* Number of micro-frames between IN transfers */
+ #define APP_RX_DATA_SIZE               2048 /* Total size of IN buffer: 
+                                                APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > CDC_IN_FRAME_INTERVAL*8 */
+#else
+ #define CDC_DATA_MAX_PACKET_SIZE       64   /* Endpoint IN & OUT Packet size */
+ #define CDC_CMD_PACKET_SZE             8    /* Control Endpoint Packet size */
+
+ #define CDC_IN_FRAME_INTERVAL          5    /* Number of frames between IN transfers */
+ #define APP_TX_DATA_SIZE              (2048)
+ #define APP_RX_DATA_SIZE               2048 /* Total size of IN buffer: 
+                                                APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > CDC_IN_FRAME_INTERVAL */
+#endif /* USE_USB_OTG_HS */
+
+#define APP_FOPS                        VCP_fops
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+#endif //__USBD_CONF__H__
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_desc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_desc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_desc.h	(working copy)
@@ -0,0 +1,120 @@
+/**
+  ******************************************************************************
+  * @file    usbd_desc.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   header file for the usbd_desc.c file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+
+#ifndef __USB_DESC_H
+#define __USB_DESC_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_def.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+  
+/** @defgroup USB_DESC
+  * @brief general defines for the usb device library file
+  * @{
+  */ 
+
+/** @defgroup USB_DESC_Exported_Defines
+  * @{
+  */
+#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
+#define USB_STRING_DESCRIPTOR_TYPE              0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05
+#define USB_SIZ_DEVICE_DESC                     18
+#define USB_SIZ_STRING_LANGID                   4
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Exported_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USBD_DESC_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_DESC_Exported_Variables
+  * @{
+  */ 
+extern  uint8_t USBD_DeviceDesc  [USB_SIZ_DEVICE_DESC];
+extern  uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ];
+extern  uint8_t USBD_OtherSpeedCfgDesc[USB_LEN_CFG_DESC]; 
+extern  uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC];
+extern  uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID];
+extern  USBD_DEVICE USR_desc; 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_DESC_Exported_FunctionsPrototype
+  * @{
+  */ 
+
+
+uint8_t *     USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ManufacturerStrDescriptor ( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ProductStrDescriptor ( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length);
+
+#ifdef USB_SUPPORT_USER_STRING_DESC
+uint8_t *     USBD_USR_USRStringDesc (uint8_t speed, uint8_t idx , uint16_t *length);  
+#endif /* USB_SUPPORT_USER_STRING_DESC */  
+  
+/**
+  * @}
+  */ 
+
+#endif /* __USBD_DESC_H */
+
+/**
+  * @}
+  */ 
+
+/**
+* @}
+*/ 
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_desc.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_desc.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_desc.c	(working copy)
@@ -0,0 +1,330 @@
+/**
+  ******************************************************************************
+  * @file    usbd_desc.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   This file provides the USBD descriptors and string formating method.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_core.h"
+#include "usbd_desc.h"
+#include "usbd_req.h"
+#include "usbd_conf.h"
+#include "usb_regs.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+
+/** @defgroup USBD_DESC
+  * @brief USBD descriptors module
+  * @{
+  */
+
+/** @defgroup USBD_DESC_Private_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_Defines
+  * @{
+  */
+#define USBD_VID                        0x3151
+
+#define USBD_PID                        0x6002
+//#define USBD_VID                        0x0483
+
+//#define USBD_PID                        0x5740
+
+/** @defgroup USB_String_Descriptors
+  * @{
+  */
+#define USBD_LANGID_STRING              0x409
+#define USBD_MANUFACTURER_STRING        "YICHIP3121"
+
+#define USBD_PRODUCT_HS_STRING          "YICHIP3121 Virtual ComPort in HS mode"
+#define USBD_SERIALNUMBER_HS_STRING     "00000000050B"
+
+#define USBD_PRODUCT_FS_STRING          "YICHIP3121 Virtual ComPort in FS Mode"
+#define USBD_SERIALNUMBER_FS_STRING     "00000000050C"
+
+#define USBD_CONFIGURATION_HS_STRING    "VCP Config"
+#define USBD_INTERFACE_HS_STRING        "VCP Interface"
+
+#define USBD_CONFIGURATION_FS_STRING    "VCP Config"
+#define USBD_INTERFACE_FS_STRING        "VCP Interface"
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_Variables
+  * @{
+  */
+
+USBD_DEVICE USR_desc =
+{
+  USBD_USR_DeviceDescriptor,
+  USBD_USR_LangIDStrDescriptor,
+  USBD_USR_ManufacturerStrDescriptor,
+  USBD_USR_ProductStrDescriptor,
+  USBD_USR_SerialStrDescriptor,
+  USBD_USR_ConfigStrDescriptor,
+  USBD_USR_InterfaceStrDescriptor,
+
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
+  {
+    0x12,                       /*bLength */
+    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
+//    0x00,                       /*bcdUSB */
+//    0x02,
+    0x10,                       /*bcdUSB */
+    0x01,
+//    0x00,                     /*bDeviceClass*/
+    0x02,                       /*bDeviceClass*/
+    0x00,                       /*bDeviceSubClass*/
+    0x00,                       /*bDeviceProtocol*/
+    USB_OTG_MAX_EP0_SIZE,       /*bMaxPacketSize*/
+    LOBYTE(USBD_VID),           /*idVendor*/
+    HIBYTE(USBD_VID),           /*idVendor*/
+    LOBYTE(USBD_PID),           /*idVendor*/
+    HIBYTE(USBD_PID),           /*idVendor*/
+//    0x00,                       /*bcdDevice rel. 2.00*/
+//    0x02,
+    0x00,                       /*bcdDevice rel. 1.00*/
+    0x01,
+    USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
+    USBD_IDX_PRODUCT_STR,       /*Index of product string*/
+    USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
+    USBD_CFG_MAX_NUM            /*bNumConfigurations*/
+  } ; /* USB_DeviceDescriptor */
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
+{
+  USB_LEN_DEV_QUALIFIER_DESC,
+  USB_DESC_TYPE_DEVICE_QUALIFIER,
+  0x00,
+  0x02,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x01,
+  0x00,
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID] __ALIGN_END =
+{
+     USB_SIZ_STRING_LANGID,
+     USB_DESC_TYPE_STRING,
+     LOBYTE(USBD_LANGID_STRING),
+     HIBYTE(USBD_LANGID_STRING),
+};
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_FunctionPrototypes
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_Functions
+  * @{
+  */
+
+/**
+* @brief  USBD_USR_DeviceDescriptor
+*         return the device descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length)
+{
+  *length = sizeof(USBD_DeviceDesc);
+  return USBD_DeviceDesc;
+}
+
+/**
+* @brief  USBD_USR_LangIDStrDescriptor
+*         return the LangID string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  *length =  sizeof(USBD_LangIDDesc);
+  return USBD_LangIDDesc;
+}
+
+
+/**
+* @brief  USBD_USR_ProductStrDescriptor
+*         return the product string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ProductStrDescriptor( uint8_t speed , uint16_t *length)
+{
+
+
+  if(speed == 0)
+  {
+//    USBD_GetString (USBD_PRODUCT_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_ManufacturerStrDescriptor
+*         return the manufacturer string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ManufacturerStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  USBD_GetString (USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_SerialStrDescriptor
+*         return the serial number string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed  == USB_OTG_SPEED_HIGH)
+  {
+//    USBD_GetString (USBD_SERIALNUMBER_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_SERIALNUMBER_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_ConfigStrDescriptor
+*         return the configuration string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed  == USB_OTG_SPEED_HIGH)
+  {
+//    USBD_GetString (USBD_CONFIGURATION_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;
+}
+
+
+/**
+* @brief  USBD_USR_InterfaceStrDescriptor
+*         return the interface string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed == 0)
+  {
+//    USBD_GetString (USBD_INTERFACE_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_INTERFACE_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;
+}
+
+/**
+  * @}
+  */
+
+
+/**
+  * @}
+  */
+
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_usr.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_usr.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_CDC_Device_Demo/usbd_usr.c	(working copy)
@@ -0,0 +1,320 @@
+/**
+  ******************************************************************************
+  * @file    usbd_usr.c
+  * @author  Megahuntmicro
+  * @version V1.0.0
+  * @date    21-October-2014
+  * @brief   This file includes the user application layer
+  ******************************************************************************
+  * @attention
+  *
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "yc3121.h"
+#include "usbd_usr.h"
+#include "usbd_ioreq.h"
+#include "yc3121.h"
+#include "usb_conf.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+* @{
+*/
+
+/** @defgroup USBD_USR
+* @brief    This file includes the user application layer
+* @{
+*/
+
+/** @defgroup USBD_USR_Private_TypesDefinitions
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Defines
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Macros
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Variables
+* @{
+*/
+
+USBD_Usr_cb_TypeDef USRD_cb =
+{
+  USBD_USR_Init,
+  USBD_USR_DeviceReset,
+  USBD_USR_DeviceConfigured,
+  USBD_USR_DeviceSuspended,
+  USBD_USR_DeviceResumed,
+
+  USBD_USR_DeviceConnected,
+  USBD_USR_DeviceDisconnected,
+
+
+};
+
+
+
+/**
+* @}
+*/
+
+/** @defgroup USBD_USR_Private_Constants
+* @{
+*/
+
+/**
+* @}
+*/
+
+
+
+/** @defgroup USBD_USR_Private_FunctionPrototypes
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Functions
+* @{
+*/
+
+#define USER_INFORMATION1      "[Key]:RemoteWakeup"
+#define USER_INFORMATION2      "[Joystick]:Mouse emulation"
+
+
+/**
+* @brief  USBD_USR_Init
+*         Displays the message on LCD for host lib initialization
+* @param  None
+* @retval None
+*/
+void USBD_USR_Init(void)
+{
+//  /* Initialize LEDs */
+//  STM_EVAL_LEDInit(LED1);
+//  STM_EVAL_LEDInit(LED2);
+//  STM_EVAL_LEDInit(LED3);
+//  STM_EVAL_LEDInit(LED4);
+//
+//  /* Configure the IOE on which the JoyStick is connected */
+//	IOE_Config();
+//
+//  /* Setup SysTick Timer for 20 msec interrupts
+//  This interrupt is used to probe the joystick */
+//  if (SysTick_Config(SystemCoreClock / 48))
+//  {
+//    /* Capture error */
+//    while (1);
+//  }
+//  /* Initialize the LCD */
+//#if defined (USE_STM322xG_EVAL)
+//  STM322xG_LCD_Init();
+//#elif defined(USE_STM324xG_EVAL)
+//  STM324xG_LCD_Init();
+//#elif defined (USE_STM3210C_EVAL)
+//  STM3210C_LCD_Init();
+//#else
+// #error "Missing define: Evaluation board (ie. USE_STM322xG_EVAL)"
+//#endif
+
+//  LCD_LOG_Init();
+
+//#ifdef USE_USB_OTG_HS
+//  LCD_LOG_SetHeader(" USB OTG HS HID Device");
+//#else
+//  LCD_LOG_SetHeader(" USB OTG FS HID Device");
+//#endif
+//  LCD_UsrLog("> USB device library started.\n");
+//  LCD_LOG_SetFooter ("     USB Device Library v1.1.0" );
+//
+//  /* Information panel */
+//  LCD_SetTextColor(Green);
+//  LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 42, USER_INFORMATION1);
+//  LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 30, USER_INFORMATION2);
+//  LCD_SetTextColor(LCD_LOG_DEFAULT_COLOR);
+
+}
+
+/**
+* @brief  USBD_USR_DeviceReset
+*         Displays the message on LCD on device Reset Event
+* @param  speed : device speed
+* @retval None
+*/
+extern USB_OTG_CORE_HANDLE  USB_OTG_dev;
+extern USBD_DEVICE USR_desc;
+extern USBD_Class_cb_TypeDef  USBD_CDC_cb;
+void USBD_USR_DeviceReset(uint8_t speed )
+{
+// switch (speed)
+// {
+//   case USB_OTG_SPEED_HIGH:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [HS]" );
+//     break;
+
+//  case USB_OTG_SPEED_FULL:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [FS]" );
+//     break;
+// default:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [??]" );
+//
+// }
+
+    USB_OTG_dev.dev.zero_replay_flag =0;
+    memset((uint8_t*)&USB_OTG_dev, 0, sizeof(USB_OTG_dev));
+    USB_OTG_dev.dev.device_status = USB_OTG_DEFAULT;
+
+    USBD_Init(&USB_OTG_dev,
+        #ifdef USE_USB_OTG_HS
+              USB_OTG_HS_CORE_ID,
+        #else
+              USB_OTG_FS_CORE_ID,
+        #endif
+              &USR_desc,
+              &USBD_CDC_cb,
+              &USRD_cb);
+
+        USB_OTG_WRITE_REG8(CORE_USB_CLEAR,0x40);
+        USB_OTG_WRITE_REG8(USB_SOFCNT,0);
+		USB_OTG_WRITE_REG8(USB_SOFCNTHI,0);
+
+        USB_OTG_WRITE_REG8(CORE_USB_STATUS,0xFF);
+        USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,0xFF);
+        USB_OTG_WRITE_REG8(CORE_USB_ADDR,0x00);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(0),0x70);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf0);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(2),0xff);
+//        MyPrintf("usb reset\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceConfigured
+*         Displays the message on LCD on device configuration Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceConfigured (void)
+{
+//    printf("> HID Interface started.\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceConnected
+*         Displays the message on LCD on device connection Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceConnected (void)
+{
+    MyPrintf("> USB Device Connected.\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceDisonnected
+*         Displays the message on LCD on device disconnection Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceDisconnected (void)
+{
+    MyPrintf("> USB Device Disconnected.\n");
+}
+
+/**
+* @brief  USBD_USR_DeviceSuspended
+*         Displays the message on LCD on device suspend Event
+* @param  None
+* @retval None
+*/
+void USBD_USR_DeviceSuspended(void)
+{
+    MyPrintf("\n> USB Device in Suspend Mode.\n");
+    /* Users can do their application actions here for the USB-Reset */
+}
+
+
+/**
+* @brief  USBD_USR_DeviceResumed
+*         Displays the message on LCD on device resume Event
+* @param  None
+* @retval None
+*/
+void USBD_USR_DeviceResumed(void)
+{
+    MyPrintf("\n> USB Device in Idle Mode.\n");
+    /* Users can do their application actions here for the USB-Reset */
+}
+
+/**
+* @}
+*/
+void my_delay_ms(int ms)
+{
+	int delay_num;
+	while(ms-->0)
+	{
+		delay_num=(CPU_MHZ/1000)/8+400;
+		while(delay_num-->0)
+		{
+			__asm__("nop");
+		}
+	}
+}
+/**
+* @}
+*/
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/sc_itf.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/sc_itf.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/sc_itf.h	(working copy)
@@ -0,0 +1,97 @@
+/**
+  ******************************************************************************
+  * @file    sc_itf.h  
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    31-January-2014
+  * @brief   Evaluation board specific configuration file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __SC_ITF_H
+#define __SC_ITF_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "smartcard.h"
+#include "usbd_ccid_if.h"
+#include "usbd_ccid_cmd.h"
+
+/* Exported constants --------------------------------------------------------*/
+/* Exported types ------------------------------------------------------------*/
+typedef struct
+{
+  uint8_t voltage;  /* Voltage for the Card Already Selected */
+  uint8_t USART_GuardTime;
+  uint8_t SC_A2R_FiDi;
+  uint8_t SC_hostFiDi;
+  uint8_t USART_DefaultGuardTime;
+  uint32_t USART_BaudRate;
+} SC_Param_t;
+
+#pragma pack(1)
+typedef struct _Protocol0_DataStructure_t
+{
+  uint8_t bmFindexDindex;
+  uint8_t bmTCCKST0;
+  uint8_t bGuardTimeT0;
+  uint8_t bWaitingIntegerT0;
+  uint8_t bClockStop;
+} Protocol0_DataStructure_t;
+#pragma pack()
+
+extern SC_Param_t SC_Param;
+extern Protocol0_DataStructure_t Protocol0_DataStructure;
+/* Exported macro ------------------------------------------------------------*/
+#define MAX_EXTRA_GUARD_TIME (0xFF - DEFAULT_EXTRA_GUARDTIME)
+
+ /* Following macros are used for SC_XferBlock command */
+#define XFER_BLK_SEND_DATA     1     /* Command is for issuing the data  */
+#define XFER_BLK_RECEIVE_DATA  2     /* Command is for receiving the data */
+#define XFER_BLK_NO_DATA       3     /* Command type is No data exchange  */
+
+/* Exported functions ------------------------------------------------------- */
+/* APPLICATION LAYER ---------------------------------------------------------*/
+void SC_AnswerToReset (uint8_t );
+uint8_t SC_GetState (void);
+void SC_SetState (uint8_t scState);
+void SC_ConfigDetection (void);
+void SC_SaveVoltage (uint8_t );
+void SC_UpdateParams (void);
+void SC_InitParams (void);
+uint8_t SC_SetParams (Protocol0_DataStructure_t* );
+uint8_t SC_ExecuteEscape (uint8_t* escapePtr, uint32_t escapeLen, 
+                          uint8_t* responseBuff,
+                          uint16_t* responseLen);
+uint8_t SC_SetClock (uint8_t bClockCommand);
+uint8_t SC_XferBlock (uint8_t* ptrBlock, uint32_t blockLen, uint16_t expectedLen);
+uint8_t SC_Request_GetClockFrequencies(uint8_t* pbuf, uint16_t* len);
+uint8_t SC_Request_GetDataRates(uint8_t* pbuf, uint16_t* len);
+uint8_t SC_T0Apdu(uint8_t bmChanges, uint8_t bClassGetResponse, 
+                  uint8_t bClassEnvelope);
+uint8_t SC_Mechanical(uint8_t bFunction);
+uint8_t SC_SetDataRateAndClockFrequency(uint32_t dwClockFrequency, 
+                                        uint32_t dwDataRate); 
+uint8_t SC_Secure(uint32_t dwLength, uint8_t bBWI, uint16_t wLevelParameter, 
+                    uint8_t* pbuf, uint32_t* returnLen );
+
+#endif /* __SC_ITF_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/sc_itf.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/sc_itf.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/sc_itf.c	(working copy)
@@ -0,0 +1,875 @@
+/**
+  ******************************************************************************
+  * @file    sc_itf.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    31-January-2014
+  * @brief   SmartCard Interface file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "sc_itf.h"
+#include "usb_bsp.h"
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+
+SC_Param_t  SC_Param;
+Protocol0_DataStructure_t Protocol0_DataStructure;
+
+SC_ADPU_Commands SC_ADPU;
+SC_ADPU_Response SC_Response;
+
+/* F Table */
+static uint32_t F_Table[16] = {372, 372, 558, 744, 1116, 1488, 1860, 0, 0, 512, 768,
+                               1024, 1536, 2048, 0, 0};
+/* D Table */
+static uint32_t D_Table[16] = {0, 1, 2, 4, 8, 16, 32, 64, 12, 20, 0, 0, 0, 0, 0,
+                               0};
+
+uint32_t SC_GetDTableValue(uint8_t idx)
+{
+  return D_Table[idx];
+}
+
+void SC_InitParams (void)
+{
+  /*
+ FI, the reference to a clock rate conversion factor
+  over the bits b8 to b5
+- DI, the reference to a baud rate adjustment factor
+  over the bits b4 to bl
+  */
+  
+  SC_Param.SC_A2R_FiDi = DEFAULT_FIDI;
+  SC_Param.SC_hostFiDi = DEFAULT_FIDI;
+  
+  Protocol0_DataStructure.bmFindexDindex=DEFAULT_FIDI;
+  
+  /* Placeholder, Ignored */
+  /* 0 = Direct, first byte of the ICC抯 ATR data. */
+  Protocol0_DataStructure.bmTCCKST0 = DEFAULT_T01CONVCHECKSUM;  
+
+  /* Extra GuardTime = 0 etu */
+  Protocol0_DataStructure.bGuardTimeT0 = DEFAULT_EXTRA_GUARDTIME; 
+  Protocol0_DataStructure.bWaitingIntegerT0=DEFAULT_WAITINGINTEGER;
+  Protocol0_DataStructure.bClockStop =0; /* Stopping the Clock is not allowed */
+}
+
+/**
+  * @brief  SC_SetClock function to define Clock Status request from the host. 
+  *         This is user implementable  
+  * @param  uint8_t bClockCommand: Clock status from the host 
+  * @retval uint8_t status value
+  */
+uint8_t SC_SetClock (uint8_t bClockCommand) 
+{
+    /* bClockCommand  00h restarts Clock
+                      01h Stops Clock in the state shown in the bClockStop 
+                       field of the PC_to_RDR_SetParameters command 
+                       and RDR_to_PC_Parameters message.*/
+  
+  if (bClockCommand == 0)
+  {
+    /* 00h restarts Clock : Since Clock is always running, PASS this command */
+     return SLOT_NO_ERROR;    
+  }
+  else if (bClockCommand == 1)
+  {
+    return SLOTERROR_BAD_CLOCKCOMMAND;
+  }
+    
+  return SLOTERROR_CMD_NOT_SUPPORTED;
+}
+
+
+/**
+  * @brief  SC_SetParams
+  *         Set the parameters for CCID/USART interface 
+  * @param  Protocol0_DataStructure_t* pPtr: pointer to buffer containing the 
+  *          parameters to be set in USART
+  * @retval uint8_t status value
+  */
+uint8_t SC_SetParams (Protocol0_DataStructure_t* pPtr)
+{
+  uint16_t guardTime;   /* Keep it 16b for handling 8b additions */
+  uint32_t fi_new;
+  uint32_t di_new;
+  
+  guardTime = pPtr->bGuardTimeT0;
+  if (guardTime > MAX_EXTRA_GUARD_TIME )
+  {
+    return SLOTERROR_BAD_GUARDTIME;
+  }
+  
+  fi_new = pPtr->bmFindexDindex;
+  di_new = pPtr->bmFindexDindex;
+  
+  /* Check for the FIDI Value set by Host */
+  di_new &= (uint8_t)0x0F;
+  if (SC_GetDTableValue(di_new) == 0)
+  {
+    return SLOTERROR_BAD_FIDI;
+  }
+  
+  fi_new >>= 4;
+  fi_new &= (uint8_t)0x0F; 
+  
+  if ( SC_GetDTableValue(fi_new) == 0)
+  {
+    return SLOTERROR_BAD_FIDI;
+  }
+  
+//  /* Put Total GuardTime in USART Settings */
+//  USART_SetGuardTime(SC_USART, (uint8_t)(guardTime + DEFAULT_EXTRA_GUARDTIME) );
+  
+  /* Save Extra GuardTime Value */
+  Protocol0_DataStructure.bGuardTimeT0 = guardTime; 
+  
+  Protocol0_DataStructure.bmTCCKST0 = pPtr->bmTCCKST0;
+  Protocol0_DataStructure.bClockStop = pPtr->bClockStop;
+  
+  /* Save New bmFindexDindex */
+  SC_Param.SC_hostFiDi = pPtr->bmFindexDindex;
+  
+  //No PTS procedure
+  //SC_PTSConfig();
+  
+  Protocol0_DataStructure.bmFindexDindex = pPtr->bmFindexDindex;
+     
+  return SLOT_NO_ERROR;
+}
+
+uint8_t SC_XferBlock (uint8_t* ptrBlock, uint32_t blockLen, uint16_t expectedLen)
+{
+	
+  uint32_t index, i = 0;
+  uint32_t cmdType = 1;
+	if((ptrBlock[0] == 0x00) && (ptrBlock[1] == 0x80))
+  {
+	memcpy(Ccid_bulkin_data.abData,ptrBlock+5,blockLen-5);
+  Ccid_bulkin_data.dwLength = blockLen-5;
+  //memcpy(Ccid_bulkin_data.abData,COMMDATA,Ccid_bulkin_data.dwLength);
+  Ccid_bulkin_data.abData[Ccid_bulkin_data.dwLength++] = 0x90;
+  Ccid_bulkin_data.abData[Ccid_bulkin_data.dwLength++] = 0x00;
+	}
+  else
+	{
+  SC_ADPU.Header.CLA = ptrBlock[i++];
+  SC_ADPU.Header.INS = ptrBlock[i++];
+  SC_ADPU.Header.P1 = ptrBlock[i++];
+  SC_ADPU.Header.P2 = ptrBlock[i++];
+  
+  //CLA + INS + P1 + P2
+  if (blockLen == 0x04)
+  { 
+      /* Case: no data to exchange with ICC, only header sent by Host= 4Bytes
+      Command TPDU = CLA INS P1 P2, the CCID is responsible to add P3 =00h */
+      SC_ADPU.Body.LC = 0;
+      SC_ADPU.Body.LE = 0;
+      cmdType = 0x01;
+  }
+  //CLA + INS + P1 + P2 + LE
+  else if (0x05 == blockLen)
+  {
+      SC_ADPU.Body.LC = 0;
+      if (0 != ptrBlock[i])
+      {
+          SC_ADPU.Body.LE = ptrBlock[i];
+      }
+      else
+      {
+          SC_ADPU.Body.LE = 0x100;
+      }
+      i++;
+      cmdType = 0x02;
+  }
+  //CLA + INS + P1 + P2 + LC + DATA[LC]
+  //CLA + INS + P1 + P2 + LC + DATA[LC] + LE
+  else if (0x05 < blockLen)
+  {
+      SC_ADPU.Body.LC = ptrBlock[i++];
+      memcpy(SC_ADPU.Body.Data, ptrBlock + i, SC_ADPU.Body.LC);
+      i += SC_ADPU.Body.LC;
+      //CLA + INS + P1 + P2 + LC + DATA[LC]
+      if (i == blockLen)
+      {
+          cmdType = 0x03;
+          SC_ADPU.Body.LE = 0;
+      }
+      //CLA + INS + P1 + P2 + LC + DATA[LC] + LE
+      else if ((i + 1)== blockLen)
+      {
+          cmdType = 0x04;
+          if (0 != ptrBlock[i])
+          {
+              SC_ADPU.Body.LE = ptrBlock[i];
+          }
+          else
+          {
+              SC_ADPU.Body.LE = 0x100;
+          }
+      }
+      else
+      {
+          return SLOTERROR_BAD_DWLENGTH;
+      }
+  }
+  else
+  {
+      return SLOTERROR_BAD_DWLENGTH;
+  }
+
+  MyPrintf("case %d\r\n", cmdType);
+  MyPrintf("lc %d\r\n", SC_ADPU.Body.LC);
+  MyPrintf("le %d\r\n", SC_ADPU.Body.LE);
+  
+  if (3 == cmdType || 4 == cmdType)
+  {
+      MyPrintf("Recv:\n");
+      for(index = 5; index < SC_ADPU.Body.LC + 5; index++)
+      {
+          SC_ADPU.Body.Data[index] = ptrBlock[index];
+          MyPrintf("%02x ", SC_ADPU.Body.Data[index]);
+      }
+      MyPrintf("End:\n");
+  }
+    
+  /************ Process the commands based on their Types from the Host ********/
+  if (2 == cmdType || 4 == cmdType)
+  {
+    SC_Response.SW1 = 0x90;
+    SC_Response.SW2 = 0x00;
+		SC_ADPU.Body.LE = 10;
+    //SC_Response.Data recv buffer.
+    for (index = 0; index < SC_ADPU.Body.LE; index++)
+    {
+      SC_Response.Data[index] = index;
+    }
+    
+        
+    if (0x84 == SC_ADPU.Header.INS)
+    {
+      for (index = 0; index < SC_ADPU.Body.LE; index++)
+      {/* Copy the ATR to the Response Buffer */
+        Ccid_bulkin_data.abData[index] = SC_Response.Data[index];
+      }
+    }
+    else
+    {
+      SC_ADPU.Body.LE = 0;
+    }
+
+    Ccid_bulkin_data.abData[index++] = SC_Response.SW1;
+    Ccid_bulkin_data.abData[index] = SC_Response.SW2;
+    
+
+    /* Response Len = Expected Len + SW1, SW2*/    
+    Ccid_bulkin_data.dwLength= (SC_ADPU.Body.LE) + 2;  
+    
+  }
+  else if (1 == cmdType || 3 == cmdType)
+  {
+    SC_Response.SW1 = 0x90;
+    SC_Response.SW2 = 0x00;
+    Ccid_bulkin_data.dwLength = 2;
+  }
+ }
+  return SLOT_NO_ERROR;
+
+	
+
+}
+
+#if 0
+/* Directories & Files ID */
+const uint8_t MasterRoot[2] = {0x3F, 0x00};
+const uint8_t GSMDir[2] = {0x7F, 0x20};
+const uint8_t ICCID[2] = {0x2F, 0xE2};
+const uint8_t IMSI[2] = {0x6F, 0x07};
+const uint8_t CHV1[8] = {'0', '0', '0', '0', '0', '0', '0', '0'};
+
+/* State Machine for the SmartCard Interface */
+SC_State SCState = SC_POWER_OFF;
+
+/* APDU Transport Structures */
+SC_ADPU_Commands SC_ADPU;
+SC_ADPU_Response SC_Response;
+SC_Param_t  SC_Param;
+Protocol0_DataStructure_t Protocol0_DataStructure;
+
+volatile uint32_t CardInserted = 0;
+uint32_t CHV1Status = 0, i = 0;
+volatile uint8_t ICCID_Content[10] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+volatile uint8_t IMSI_Content[9] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+/* Extern variables ----------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+static void Delay (uint32_t msec); 
+
+/* Private functions ---------------------------------------------------------*/
+
+/**
+  * @brief  Manages the Warm and Cold Reset and get the Answer to Reset from ICC 
+  * @param  uint8_t voltage required by host 
+  * @retval None 
+  */
+//void SC_AnswerToReset (uint8_t voltage)
+//{
+//  SCState = SC_POWER_ON;
+//
+//  SC_ADPU.Header.CLA = 0x00;
+//  SC_ADPU.Header.INS = SC_GET_A2R;
+//  SC_ADPU.Header.P1 = 0x00;
+//  SC_ADPU.Header.P2 = 0x00;
+//  SC_ADPU.Body.LC = 0x00;
+//
+//  /* Power ON the card */
+//  SC_PowerCmd(ENABLE);
+//
+//  /* Configure the Voltage, Even if IO is still not configured */
+//  SC_VoltageConfig(voltage);
+//
+//  while ((SCState != SC_ACTIVE_ON_T0) && (SCState != SC_NO_INIT))
+//  { /* If Either The Card has become Active or Become De-Active */
+//    SC_Handler(&SCState, &SC_ADPU, &SC_Response);
+//  }
+//
+//  if (SCState == SC_ACTIVE_ON_T0)
+//  {
+//    SC_UpdateParams();
+//    /* Apply the Procedure Type Selection (PTS) */
+//    SC_PTSConfig();
+//    SC_SaveVoltage(voltage);   /* Save Voltage for Future use */
+//  }
+//
+//  /* Inserts delay(400ms) for Smartcard clock resynchronization */
+//  Delay(400);
+//}
+
+
+/**
+  * @brief  Provides the value of SCState variable 
+  * @param  None
+  * @retval uint8_t SCState 
+  */
+uint8_t SC_GetState (void)
+{
+  return SCState;
+}
+
+/**
+  * @brief  Set the value of SCState variable to Off
+  * @param  uint8_t scState : value of SCState to be updated 
+  * @retval None
+  */
+void SC_SetState (uint8_t scState)
+{
+  SCState = (SC_State)scState;
+}
+
+/**
+  * @brief  Configure the CMDVCC state for right detection of Card Insertion
+  * @param  None 
+  * @retval None
+  */
+void SC_ConfigDetection (void)
+{
+//  GPIO_InitTypeDef GPIO_InitStructure;
+//  NVIC_InitTypeDef NVIC_InitStructure;
+
+//  /* Enable GPIO clock */
+//  SYSCTRL_APBPeriphClockCmd(SC_OFF_GPIO_CLK | SC_CMDVCC_GPIO_CLK | 
+//                          SC_3_5V_GPIO_CLK | SC_RESET_GPIO_CLK, ENABLE);
+
+//  /* Configure Smartcard CMDVCC pin */
+//  GPIO_InitStructure.GPIO_Pin = SC_CMDVCC_PIN;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+//  GPIO_InitStructure.GPIO_Remap = GPIO_Remap_1;
+//  GPIO_Init(SC_CMDVCC_GPIO_PORT, &GPIO_InitStructure);
+//  
+//  /* Configure Smartcard Reset pin */
+//  GPIO_InitStructure.GPIO_Pin = SC_RESET_PIN;
+//  GPIO_Init(SC_RESET_GPIO_PORT, &GPIO_InitStructure);
+
+//  /* Configure Smartcard 3/5V pin */
+//  GPIO_InitStructure.GPIO_Pin = SC_3_5V_PIN;
+//  GPIO_Init(SC_3_5V_GPIO_PORT, &GPIO_InitStructure);
+
+//  /* Select 5V */ 
+//  SC_VoltageConfig(SC_VOLTAGE_5V);
+
+//  /* Disable CMDVCC */
+//  SC_PowerCmd(DISABLE);
+
+//  /* Set RSTIN HIGH */  
+//  SC_Reset(Bit_SET);
+//                                                          
+//  /* Configure Smartcard OFF pin */
+//  GPIO_InitStructure.GPIO_Pin = SC_OFF_PIN;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
+//  GPIO_Init(SC_OFF_GPIO_PORT, &GPIO_InitStructure);
+//  
+////  /* Configure EXTI line connected to Smartcard OFF Pin */
+////  SYSCFG_EXTILineConfig(SC_OFF_EXTI_PORT_SOURCE, SC_OFF_EXTI_PIN_SOURCE);
+
+////  EXTI_ClearITPendingBit(SC_OFF_EXTI_LINE);
+////  
+////  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
+////  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
+////  EXTI_InitStructure.EXTI_Line = SC_OFF_EXTI_LINE;
+////  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
+////  EXTI_Init(&EXTI_InitStructure);
+//  /* Enable EXTI Interrupt */
+//  EXTI_LineConfig(SC_OFF_EXTI_LINE, SC_OFF_EXTI_PIN_SOURCE, EXTI_Trigger_Rising);
+//  
+//  /* Clear the SC_OFF_EXTI_IRQn Pending Bit */
+//  NVIC_ClearPendingIRQ(SC_OFF_EXTI_IRQn);
+//  NVIC_InitStructure.NVIC_IRQChannel = SC_OFF_EXTI_IRQn;
+//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
+//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
+//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+//  NVIC_Init(&NVIC_InitStructure); 
+    
+}
+
+/**
+  * @brief  Saves the voltage value to be saved for further usage 
+  * @param  uint8_t voltage : voltage value to be saved for further usage 
+  * @retval None
+  */
+void SC_SaveVoltage (uint8_t voltage)
+{
+  SC_Param.voltage = voltage;
+}
+
+/**
+  * @brief  Save the A2R Parameters for further usage 
+  * @param  None
+  * @retval None
+  */
+void SC_UpdateParams (void)
+{
+  /*
+  FI, the reference to a clock rate conversion factor
+  over the bits b8 to b5
+  DI, the reference to a baud rate adjustment factor
+  over the bits b4 to bl
+  */
+  SC_Param.SC_A2R_FiDi = SC_A2R.T[0].InterfaceByte[0].Value;
+  SC_Param.SC_hostFiDi = SC_A2R.T[0].InterfaceByte[0].Value;
+  
+  Protocol0_DataStructure.bmFindexDindex= SC_A2R.T[0].InterfaceByte[0].Value ;
+}
+
+/**
+  * @brief  Initialize the parameters structures  
+  * @param  None
+  * @retval None
+  */
+void SC_InitParams (void)
+{
+  /*
+ FI, the reference to a clock rate conversion factor
+  over the bits b8 to b5
+- DI, the reference to a baud rate adjustment factor
+  over the bits b4 to bl
+  */
+  
+  SC_Param.SC_A2R_FiDi = DEFAULT_FIDI;
+  SC_Param.SC_hostFiDi = DEFAULT_FIDI;
+  
+  Protocol0_DataStructure.bmFindexDindex=DEFAULT_FIDI;
+  
+  /* Placeholder, Ignored */
+  /* 0 = Direct, first byte of the ICC抯 ATR data. */
+  Protocol0_DataStructure.bmTCCKST0 = DEFAULT_T01CONVCHECKSUM;  
+
+  /* Extra GuardTime = 0 etu */
+  Protocol0_DataStructure.bGuardTimeT0 = DEFAULT_EXTRA_GUARDTIME; 
+  Protocol0_DataStructure.bWaitingIntegerT0=DEFAULT_WAITINGINTEGER;
+  Protocol0_DataStructure.bClockStop =0; /* Stopping the Clock is not allowed */
+}
+
+/**
+  * @brief  SC_SetParams
+  *         Set the parameters for CCID/USART interface 
+  * @param  Protocol0_DataStructure_t* pPtr: pointer to buffer containing the 
+  *          parameters to be set in USART
+  * @retval uint8_t status value
+  */
+uint8_t SC_SetParams (Protocol0_DataStructure_t* pPtr)
+{
+  uint16_t guardTime;   /* Keep it 16b for handling 8b additions */
+  uint32_t fi_new;
+  uint32_t di_new;
+  
+  guardTime = pPtr->bGuardTimeT0;
+  if (guardTime > MAX_EXTRA_GUARD_TIME )
+  {
+    return SLOTERROR_BAD_GUARDTIME;
+  }
+  
+  fi_new = pPtr->bmFindexDindex;
+  di_new = pPtr->bmFindexDindex;
+  
+  /* Check for the FIDI Value set by Host */
+  di_new &= (uint8_t)0x0F;
+  if (SC_GetDTableValue(di_new) == 0)
+  {
+    return SLOTERROR_BAD_FIDI;
+  }
+  
+  fi_new >>= 4;
+  fi_new &= (uint8_t)0x0F; 
+  
+  if ( SC_GetDTableValue(fi_new) == 0)
+  {
+    return SLOTERROR_BAD_FIDI;
+  }
+  
+//  /* Put Total GuardTime in USART Settings */
+//  USART_SetGuardTime(SC_USART, (uint8_t)(guardTime + DEFAULT_EXTRA_GUARDTIME) );
+  
+  /* Save Extra GuardTime Value */
+  Protocol0_DataStructure.bGuardTimeT0 = guardTime; 
+  
+  Protocol0_DataStructure.bmTCCKST0 = pPtr->bmTCCKST0;
+  Protocol0_DataStructure.bClockStop = pPtr->bClockStop;
+  
+  /* Save New bmFindexDindex */
+  SC_Param.SC_hostFiDi = pPtr->bmFindexDindex;
+  SC_PTSConfig();
+  
+  Protocol0_DataStructure.bmFindexDindex = pPtr->bmFindexDindex;
+     
+  return SLOT_NO_ERROR;
+}
+
+/**
+  * @brief  SC_ExecuteEscape
+  *         SC_ExecuteEscape function from the host. This is user implementable  
+  * @param  uint8_t* ptrEscape: pointer to buffer containing the Escape data 
+  * @param  uint32_t escapeLen: length of escaped data
+  * @param  uint8_t* responseBuff: pointer containing escape buffer response
+  * @param  uint16_t* responseLen: length of escape response buffer 
+  * @retval uint8_t status value
+  */
+uint8_t SC_ExecuteEscape (uint8_t* ptrEscape, uint32_t escapeLen, 
+                          uint8_t* responseBuff,
+                          uint16_t* responseLen)
+{
+  uint32_t idx;
+  
+  /* Manufacturer specific implementation ... */
+
+  /* Do a loopback for example..*/
+  /* To be Modified for end application */
+  for (idx =0; idx<escapeLen; idx++)
+  {
+    *responseBuff++ = *ptrEscape++;
+  }
+  
+  *responseLen = escapeLen;   /* To be Modified for end application */
+  return SLOT_NO_ERROR;
+}
+
+
+/**
+  * @brief  SC_SetClock function to define Clock Status request from the host. 
+  *         This is user implementable  
+  * @param  uint8_t bClockCommand: Clock status from the host 
+  * @retval uint8_t status value
+  */
+uint8_t SC_SetClock (uint8_t bClockCommand) 
+{
+    /* bClockCommand  00h restarts Clock
+                      01h Stops Clock in the state shown in the bClockStop 
+                       field of the PC_to_RDR_SetParameters command 
+                       and RDR_to_PC_Parameters message.*/
+  
+  if (bClockCommand == 0)
+  {
+    /* 00h restarts Clock : Since Clock is always running, PASS this command */
+     return SLOT_NO_ERROR;    
+  }
+  else if (bClockCommand == 1)
+  {
+    return SLOTERROR_BAD_CLOCKCOMMAND;
+  }
+    
+  return SLOTERROR_CMD_NOT_SUPPORTED;
+}
+
+/**
+  * @brief  SC_XferBlock function from the host. 
+  *          This is user implementable  
+  * @param  uint8_t* ptrBlock : Pointer containing the data from host 
+  * @param  uint32_t blockLen : length of block data for the data transfer 
+  * @param  uint16_t expectedLen: expected length of data transfer 
+  * @retval uint8_t status value
+  */
+uint8_t SC_XferBlock (uint8_t* ptrBlock, uint32_t blockLen, uint16_t expectedLen)
+{
+  uint32_t index, i = 0;
+  uint32_t cmdType = 1;
+
+  SC_ADPU.Header.CLA = ptrBlock[i++];
+  SC_ADPU.Header.INS = ptrBlock[i++];
+  SC_ADPU.Header.P1 = ptrBlock[i++];
+  SC_ADPU.Header.P2 = ptrBlock[i++];
+  
+  //CLA + INS + P1 + P2
+  if (blockLen == 0x04)
+  { 
+      /* Case: no data to exchange with ICC, only header sent by Host= 4Bytes
+      Command TPDU = CLA INS P1 P2, the CCID is responsible to add P3 =00h */
+      SC_ADPU.Body.LC = 0;
+      SC_ADPU.Body.LE = 0;
+      cmdType = 0x01;
+  }
+  //CLA + INS + P1 + P2 + LE
+  else if (0x05 == blockLen)
+  {
+      SC_ADPU.Body.LC = 0;
+      if (0 != ptrBlock[i])
+      {
+          SC_ADPU.Body.LE = ptrBlock[i];
+      }
+      else
+      {
+          SC_ADPU.Body.LE = 0x100;
+      }
+      i++;
+      cmdType = 0x02;
+  }
+  //CLA + INS + P1 + P2 + LC + DATA[LC]
+  //CLA + INS + P1 + P2 + LC + DATA[LC] + LE
+  else if (0x05 < blockLen)
+  {
+      SC_ADPU.Body.LC = ptrBlock[i++];
+      memcpy(SC_ADPU.Body.Data, ptrBlock + i, SC_ADPU.Body.LC);
+      i += SC_ADPU.Body.LC;
+      //CLA + INS + P1 + P2 + LC + DATA[LC]
+      if (i == blockLen)
+      {
+          cmdType = 0x03;
+          SC_ADPU.Body.LE = 0;
+      }
+      //CLA + INS + P1 + P2 + LC + DATA[LC] + LE
+      else if ((i + 1)== blockLen)
+      {
+          cmdType = 0x04;
+          if (0 != ptrBlock[i])
+          {
+              SC_ADPU.Body.LE = ptrBlock[i];
+          }
+          else
+          {
+              SC_ADPU.Body.LE = 0x100;
+          }
+      }
+      else
+      {
+          return SLOTERROR_BAD_DWLENGTH;
+      }
+  }
+  else
+  {
+      return SLOTERROR_BAD_DWLENGTH;
+  }
+
+  MyPrintf("case %d\r\n", cmdType);
+  MyPrintf("lc %d\r\n", SC_ADPU.Body.LC);
+  MyPrintf("le %d\r\n", SC_ADPU.Body.LE);
+  
+  if (3 == cmdType || 4 == cmdType)
+  {
+      MyPrintf("Recv:\n");
+      for(index = 5; index < SC_ADPU.Body.LC + 5; index++)
+      {
+          SC_ADPU.Body.Data[index] = ptrBlock[index];
+          MyPrintf("%02x ", SC_ADPU.Body.Data[index]);
+      }
+      MyPrintf("End:\n");
+  }
+    
+  /************ Process the commands based on their Types from the Host ********/
+  if (2 == cmdType || 4 == cmdType)
+  {
+    SC_Response.SW1 = 0x6d;
+    SC_Response.SW2 = 0x00;
+    //SC_Response.Data recv buffer.
+		SC_ADPU.Body.LE = 0;
+    for (index = 0; index < SC_ADPU.Body.LE; index++)
+    {
+      SC_Response.Data[index] = index;
+    }
+    
+        
+    if (0x84 == SC_ADPU.Header.INS)
+    {
+      for (index = 0; index < SC_ADPU.Body.LE; index++)
+      {/* Copy the ATR to the Response Buffer */
+        Ccid_bulkin_data.abData[index] = SC_Response.Data[index];
+      }
+    }
+    else
+    {
+      SC_ADPU.Body.LE = 0;
+    }
+
+    Ccid_bulkin_data.abData[index++] = SC_Response.SW1;
+    Ccid_bulkin_data.abData[index] = SC_Response.SW2;
+    
+
+    /* Response Len = Expected Len + SW1, SW2*/    
+    Ccid_bulkin_data.dwLength= (SC_ADPU.Body.LE) + 2;  
+    
+  }
+  
+  return SLOT_NO_ERROR;
+}
+
+/**
+  * @brief  Class Specific Request from the host to provide supported Clock Freq
+  *          This is Optional function & user implementable  
+  * @param  uint8_t* pbuf : Pointer to be updated by function which points to the 
+  *                         supported clock frequencies 
+  * @param  uint16_t* len : length of data to be transferred to host 
+  * @retval uint8_t status value
+  */
+uint8_t SC_Request_GetClockFrequencies(uint8_t* pbuf, uint16_t* len)
+{ /* User have to fill the pbuf with the GetClockFrequency data buffer */
+  
+  *len = 0;  
+  return 0;
+}
+
+/**
+  * @brief  Class Specific Request from the host to provide supported data rates 
+  *          This is Optional function & user implementable  
+  * @param  uint8_t* pbuf : Pointer to be updated by function which points to the 
+  *                         supported data rates 
+  * @param  uint16_t* len : length of data to be transferred to host 
+  * @retval uint8_t status value
+  */
+uint8_t SC_Request_GetDataRates(uint8_t* pbuf, uint16_t* len)
+{
+  /* User have to fill the pbuf with the GetDataRates data buffer */
+  
+  *len = 0;
+  return 0;
+}
+
+/**
+  * @brief  Class Specific Request from the host to provide supported data rates 
+  *          This is Optional function & user implementable  
+  * @param  uint8_t bmChanges : value specifying which parameter is valid in 
+  *                    command among next bClassGetResponse, bClassEnvelope
+  * @param  uint8_t* bClassGetResponse : Value to force the class byte of the 
+  *                     header in a Get Response command.
+  * @param  uint8_t* bClassEnvelope : Value to force the class byte of the header
+  *                     in a Envelope command.
+  * @retval uint8_t status value
+  */
+uint8_t SC_T0Apdu(uint8_t bmChanges, uint8_t bClassGetResponse, 
+                  uint8_t bClassEnvelope)
+{
+  /* User have to fill the pbuf with the GetDataRates data buffer */
+  
+  if (bmChanges == 0)
+  { /* Bit cleared indicates that the associated field is not significant and 
+       that default behaviour defined in CCID class descriptor is selected */
+    return SLOT_NO_ERROR;
+  }
+  
+  return SLOTERROR_CMD_NOT_SUPPORTED;
+}
+
+
+/**
+  * @brief  Mechanical Function being requested by Host 
+  *          This is Optional function & user implementable  
+  * @param  uint8_t bFunction : value corresponds to the mechanical function 
+  *                       being requested by host
+  * @retval uint8_t status value
+  */
+uint8_t SC_Mechanical(uint8_t bFunction) 
+{
+  
+  return SLOTERROR_CMD_NOT_SUPPORTED;
+}
+
+/**
+  * @brief  SC_SetDataRateAndClockFrequency
+  *         Set the Clock and data Rate of the Interface 
+  *          This is Optional function & user implementable  
+  * @param  uint32_t dwClockFrequency : value of clock in kHz requested by host
+  * @param  uint32_t dwDataRate : value of data rate requested by host
+  * @retval uint8_t status value
+  */
+uint8_t SC_SetDataRateAndClockFrequency(uint32_t dwClockFrequency, 
+                                        uint32_t dwDataRate) 
+{
+  /* User have to fill the pbuf with the GetDataRates data buffer */
+  
+  if ((dwDataRate == DEFAULT_DATA_RATE) && 
+      (dwClockFrequency == DEFAULT_CLOCK_FREQ))
+  {
+    return SLOT_NO_ERROR;
+  }
+
+  return SLOTERROR_CMD_NOT_SUPPORTED;
+}
+
+/**
+  * @brief  SC_Secure
+  *         Process the Secure command 
+  *          This is Optional function & user implementable  
+  * @param  uint32_t dwLength : length of data from the host 
+  * @param  uint8_t bBWI : Block Waiting Timeout sent by host
+  * @param  uint16_t wLevelParameter : Parameters sent by host
+  * @param  uint8_t pbuf : buffer containing the data
+  * @param  uint32_t* returnLen : Length of data expected to return
+  * @retval uint8_t status value
+  */
+uint8_t SC_Secure(uint32_t dwLength, uint8_t bBWI, uint16_t wLevelParameter, 
+                    uint8_t* pbuf, uint32_t* returnLen )
+{
+  *returnLen =0;
+  return SLOTERROR_CMD_NOT_SUPPORTED;
+}
+
+/**
+  * @brief  Delay
+  *          This function provides delay time in milli sec
+  * @param  msec : Value of delay required in milli sec
+  * @retval None
+  */
+static void Delay (uint32_t msec)
+{
+  USB_OTG_BSP_mDelay(msec);   
+}
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/smartcard.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/smartcard.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/smartcard.h	(working copy)
@@ -0,0 +1,237 @@
+/**
+  ******************************************************************************
+  * @file    SmartCard_T0/inc/smartcard.h  
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    31-January-2014
+  * @brief   This file contains all the functions prototypes for the Smartcard
+  *          firmware library.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __SMARTCARD_H
+#define __SMARTCARD_H
+
+/* Includes ------------------------------------------------------------------*/
+//#include "platform_config.h"
+//#include "sc_itf.h"
+#include "yc3121.h"
+/* Exported constants --------------------------------------------------------*/
+#define T0_PROTOCOL               0x00  /* T0 protocol */
+#define T1_PROTOCOL               0x01  /* T1 protocol */
+#define DIRECT                    0x3B  /* Direct bit convention */
+#define INDIRECT                  0x3F  /* Indirect bit convention */
+#define SETUP_LENGTH              20
+#define HIST_LENGTH               20
+#define MAX_PROTOCOLLEVEL         7  /* Maximum levels of protocol */
+#define MAX_INTERFACEBYTE         4  /* Maximum number of interface bytes per protocol */
+#define LC_MAX                    24
+#define SC_RECEIVE_TIMEOUT        0x8000  /* Direction to reader */
+
+/* T=1 protocol constants */
+#define T1_I_BLOCK           0x00  /* PCB (I-block: b8 = 0)  */
+#define T1_R_BLOCK           0x80  /* PCB (R-block: b8 b7 = 10) */
+#define T1_S_BLOCK           0xC0  /* PCB (S-block: b8 b7 = 11) */
+
+/* I block */
+#define T1_I_SEQ_SHIFT     6    /* N(S) position (bit 7) */ 
+
+/* R block */
+#define T1_IS_ERROR(pcb)    ((pcb) & 0x0F)
+#define T1_EDC_ERROR        0x01 /* [b6..b1] = 0-N(R)-0001 */
+#define T1_OTHER_ERROR      0x02 /* [b6..b1] = 0-N(R)-0010 */
+#define T1_R_SEQ_SHIFT      4    /* N(R) position (b5) */
+
+/* S block  */
+#define T1_S_RESPONSE     0x20   /* If response: set bit b6, if request reset b6 in PCB S-Block */
+#define T1_S_RESYNC       0x00   /* RESYNCH: b6->b1: 000000 of PCB S-Block */
+#define T1_S_IFS          0x01   /* IFS: b6->b1: 000001 of PCB S-Block */
+#define T1_S_ABORT        0x02   /* ABORT: b6->b1: 000010 of PCB S-Block */
+#define T1_S_WTX          0x03   /* WTX: b6->b1: 000011 of PCB S-Block */
+
+#define NAD                 0  /* NAD byte position in the block */
+#define PCB                 1  /* PCB byte position in the block */
+#define LEN                 2  /* LEN byte position in the block */
+#define DATA                3  /* The position of the first byte of INF field in the block */
+
+/* Modifiable parameters */
+#define SAD           0x0     /* Source address: reader (allowed values 0 -> 7) */
+#define DAD           0x0     /* Destination address: card (allowed values 0 -> 7) */
+#define IFSD_VALUE    254     /* Max length of INF field Supported by the reader */
+#define SC_FILE_SIZE  0x100   /* File size */
+#define SC_FILE_ID    0x0001  /* File identifier */
+#define SC_CLASS      0x00    
+
+/* Constant parameters */
+#define INS_SELECT_FILE    0xA4 /* Select file instruction */
+#define INS_READ_FILE      0xB0 /* Read file instruction */
+#define INS_WRITE_FILE     0xD6 /* Write file instruction */
+#define TRAILER_LENGTH     2    /* Trailer length (SW1 and SW2: 2 bytes) */
+
+#define SC_T1_RECEIVE_SUCCESS   0
+#define SC_T1_BWT_TIMEOUT       1
+#define SC_T1_CWT_TIMEOUT       2
+
+#define DEFAULT_FIDI_VALUE  0x11
+#define PPS_REQUEST         0xFF    
+    
+/* SC Tree Structure -----------------------------------------------------------
+                              MasterFile
+                           ________|___________
+                          |        |           |
+                        System   UserData     Note
+------------------------------------------------------------------------------*/
+
+/* SC ADPU Command: Operation Code -------------------------------------------*/
+#define SC_CLA_GSM11              0xA0
+
+/*------------------------ Data Area Management Commands ---------------------*/
+#define SC_SELECT_FILE            0xA4
+#define SC_GET_RESPONCE           0xC0
+#define SC_STATUS                 0xF2
+#define SC_UPDATE_BINARY          0xD6
+#define SC_READ_BINARY            0xB0
+#define SC_WRITE_BINARY           0xD0
+#define SC_UPDATE_RECORD          0xDC
+#define SC_READ_RECORD            0xB2
+
+/*-------------------------- Administrative Commands -------------------------*/ 
+#define SC_CREATE_FILE            0xE0
+
+/*-------------------------- Safety Management Commands ----------------------*/
+#define SC_VERIFY                 0x20
+#define SC_CHANGE                 0x24
+#define SC_DISABLE                0x26
+#define SC_ENABLE                 0x28
+#define SC_UNBLOCK                0x2C
+#define SC_EXTERNAL_AUTH          0x82
+#define SC_GET_CHALLENGE          0x84
+
+/*-------------------------- Smartcard Interface Byte-------------------------*/
+#define SC_INTERFACEBYTE_TA    0 /* Interface byte TA(i) */
+#define SC_INTERFACEBYTE_TB    1 /* Interface byte TB(i) */
+#define SC_INTERFACEBYTE_TC    2 /* Interface byte TC(i) */
+#define SC_INTERFACEBYTE_TD    3 /* Interface byte TD(i) */
+
+/*-------------------------- Answer to reset Commands ------------------------*/ 
+#define SC_GET_A2R                0x00
+
+/* SC STATUS: Status Code ----------------------------------------------------*/
+#define SC_EF_SELECTED            0x9F
+#define SC_DF_SELECTED            0x9F
+#define SC_OP_TERMINATED         0x9000
+
+/* Smartcard Voltage */
+#define SC_VOLTAGE_5V              0
+#define SC_VOLTAGE_3V              1
+#define SC_VOLTAGE_NOINIT  0xFF
+
+/* Exported types ------------------------------------------------------------*/
+typedef enum
+{
+  SC_POWER_ON = 0x00,
+  SC_RESET_LOW = 0x01,
+  SC_RESET_HIGH = 0x02,
+  SC_ACTIVE = 0x03,  
+  SC_ACTIVE_ON_T0 = 0x04,
+  SC_POWER_OFF = 0x05,
+  SC_NO_INIT = 0x06
+    
+} SC_State;
+
+/* Interface Byte structure - TA(i), TB(i), TC(i) and TD(i) ------------------*/
+typedef struct
+{
+    uint8_t Status;     /* The Presence of the Interface byte */
+    uint8_t Value;      /* The Value of the Interface byte */
+} SC_InterfaceByte;
+
+/* Protocol Level structure - ------------------------------------------------*/
+typedef struct
+{
+    SC_InterfaceByte InterfaceByte[MAX_INTERFACEBYTE];      /* The Values of the Interface byte TA(i), TB(i), TC(i)and TD(i) */
+} SC_ProtocolLevel;
+
+/* ATR structure - Answer To Reset -------------------------------------------*/
+typedef struct
+{
+  uint8_t TS;                                 /* Bit Convention Direct/Indirect */
+  uint8_t T0;                                 /* Each bit in the high nibble = Presence of the further interface byte;
+                                                 Low nibble = Number of historical byte */
+  SC_ProtocolLevel T[MAX_PROTOCOLLEVEL];      /* Setup array */
+  uint8_t H[HIST_LENGTH];                     /* Historical array */
+  uint8_t Tlength;                            /* Setup array dimension */
+  uint8_t Hlength;                            /* Historical array dimension */
+  uint8_t TCK;                                /* Check character */ 
+} SC_ATR;
+
+/* ADPU-Header command structure ---------------------------------------------*/
+typedef struct
+{
+  uint8_t CLA;  /* Command class */
+  uint8_t INS;  /* Operation code */
+  uint8_t P1;   /* Selection Mode */
+  uint8_t P2;   /* Selection Option */
+} SC_Header;
+
+/* ADPU-Body command structure -----------------------------------------------*/
+typedef struct 
+{
+  uint8_t LC;           /* Data field length */
+  uint8_t Data[LC_MAX]; /* Command parameters */
+  uint16_t LE;           /* Expected length of data to be returned */
+} SC_Body;
+
+/* ADPU Command structure ----------------------------------------------------*/
+typedef struct
+{
+  SC_Header Header;
+  SC_Body Body;
+} SC_ADPU_Commands;
+
+/* SC response structure -----------------------------------------------------*/
+typedef struct
+{
+  uint8_t Data[LC_MAX];  /* Data returned from the card */
+  uint8_t SW1;          /* Command Processing status */
+  uint8_t SW2;          /* Command Processing qualification */
+} SC_ADPU_Response;
+
+extern SC_ADPU_Commands SC_ADPU;
+extern uint8_t SC_ATR_Table[40];
+extern SC_ATR SC_A2R;
+
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+/* APPLICATION LAYER ---------------------------------------------------------*/
+void SC_Handler(SC_State *SCState, SC_ADPU_Commands *SC_ADPU, SC_ADPU_Response *SC_Response);
+//void SC_PowerCmd(FunctionalState NewState);
+//void SC_Reset(BitAction ResetState);
+void SC_ParityErrorHandler(void);
+void SC_PTSConfig(void);
+uint8_t SC_Detect(void);
+void SC_VoltageConfig(uint32_t SC_Voltage);
+
+uint32_t SC_GetDTableValue(uint8_t );
+
+#endif /* __SMARTCARD_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usb_conf.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usb_conf.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usb_conf.h	(working copy)
@@ -0,0 +1,289 @@
+/**
+  ******************************************************************************
+  * @file    usb_conf.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   General low level driver configuration
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USB_CONF__H__
+#define __USB_CONF__H__
+
+/* Includes ------------------------------------------------------------------*/
+
+
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+  
+/** @defgroup USB_CONF
+  * @brief USB low level driver configuration file
+  * @{
+  */ 
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */ 
+
+/* USB Core and PHY interface configuration.
+   Tip: To avoid modifying these defines each time you need to change the USB
+        configuration, you can declare the needed define in your toolchain
+        compiler preprocessor.
+   */
+/****************** USB OTG FS PHY CONFIGURATION *******************************
+*  The USB OTG FS Core supports one on-chip Full Speed PHY.
+*  
+*  The USE_EMBEDDED_PHY symbol is defined in the project compiler preprocessor 
+*  when FS core is used.
+*******************************************************************************/
+#ifndef USE_USB_OTG_FS
+ //#define USE_USB_OTG_FS
+#endif /* USE_USB_OTG_FS */
+
+#ifdef USE_USB_OTG_FS 
+ #define USB_OTG_FS_CORE
+#endif
+   
+/****************** USB OTG HS PHY CONFIGURATION *******************************
+*  The USB OTG HS Core supports two PHY interfaces:
+*   (i)  An ULPI interface for the external High Speed PHY: the USB HS Core will 
+*        operate in High speed mode
+*   (ii) An on-chip Full Speed PHY: the USB HS Core will operate in Full speed mode
+*
+*  You can select the PHY to be used using one of these two defines:
+*   (i)  USE_ULPI_PHY: if the USB OTG HS Core is to be used in High speed mode 
+*   (ii) USE_EMBEDDED_PHY: if the USB OTG HS Core is to be used in Full speed mode
+*
+*  Notes: 
+*   - The USE_ULPI_PHY symbol is defined in the project compiler preprocessor as 
+*     default PHY when HS core is used.
+*   - On STM322xG-EVAL and STM324xG-EVAL boards, only configuration(i) is available.
+*     Configuration (ii) need a different hardware, for more details refer to your
+*     STM32 device datasheet.
+*******************************************************************************/
+#ifndef USE_USB_OTG_HS
+ //#define USE_USB_OTG_HS
+#endif /* USE_USB_OTG_HS */
+
+#ifndef USE_ULPI_PHY
+ //#define USE_ULPI_PHY
+#endif /* USE_ULPI_PHY */
+
+#ifndef USE_EMBEDDED_PHY
+ //#define USE_EMBEDDED_PHY
+#endif /* USE_EMBEDDED_PHY */
+
+#ifdef USE_USB_OTG_HS 
+ #define USB_OTG_HS_CORE
+#endif
+
+/*******************************************************************************
+*                      FIFO Size Configuration in Device mode
+*  
+*  (i) Receive data FIFO size = RAM for setup packets + 
+*                   OUT endpoint control information +
+*                   data OUT packets + miscellaneous
+*      Space = ONE 32-bits words
+*     --> RAM for setup packets = 10 spaces
+*        (n is the nbr of CTRL EPs the device core supports) 
+*     --> OUT EP CTRL info      = 1 space
+*        (one space for status information written to the FIFO along with each 
+*        received packet)
+*     --> data OUT packets      = (Largest Packet Size / 4) + 1 spaces 
+*        (MINIMUM to receive packets)
+*     --> OR data OUT packets  = at least 2*(Largest Packet Size / 4) + 1 spaces 
+*        (if high-bandwidth EP is enabled or multiple isochronous EPs)
+*     --> miscellaneous = 1 space per OUT EP
+*        (one space for transfer complete status information also pushed to the 
+*        FIFO with each endpoint's last packet)
+*
+*  (ii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for 
+*       that particular IN EP. More space allocated in the IN EP Tx FIFO results
+*       in a better performance on the USB and can hide latencies on the AHB.
+*
+*  (iii) TXn min size = 16 words. (n  : Transmit FIFO index)
+*   (iv) When a TxFIFO is not used, the Configuration should be as follows: 
+*       case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txm can use the space allocated for Txn.
+*       case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txn should be configured with the minimum space of 16 words
+*  (v) The FIFO is used optimally when used TxFIFOs are allocated in the top 
+*       of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
+*   (vi) In HS case12 FIFO locations should be reserved for internal DMA registers
+*        so total FIFO size should be 1012 Only instead of 1024       
+*******************************************************************************/
+ 
+/****************** USB OTG HS CONFIGURATION **********************************/
+#ifdef USB_OTG_HS_CORE
+ #define RX_FIFO_HS_SIZE                          512
+ #define TX0_FIFO_HS_SIZE                         128
+ #define TX1_FIFO_HS_SIZE                         372
+ #define TX2_FIFO_HS_SIZE                          0
+ #define TX3_FIFO_HS_SIZE                          0
+ #define TX4_FIFO_HS_SIZE                          0
+ #define TX5_FIFO_HS_SIZE                          0
+
+// #define USB_OTG_HS_SOF_OUTPUT_ENABLED
+
+ #ifdef USE_ULPI_PHY
+  #define USB_OTG_ULPI_PHY_ENABLED
+ #endif
+ #ifdef USE_EMBEDDED_PHY 
+   #define USB_OTG_EMBEDDED_PHY_ENABLED
+ #endif
+ #define USB_OTG_HS_INTERNAL_DMA_ENABLED 
+ #define USB_OTG_HS_DEDICATED_EP1_ENABLED
+ #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT
+#endif
+
+/****************** USB OTG FS CONFIGURATION **********************************/
+// total fifo size <= 448 (512 - 64)
+#define RX1_FIFO_FS_SIZE                         	64
+#define RX2_FIFO_FS_SIZE                          	64
+#define RX3_FIFO_FS_SIZE                          	64
+#define RX4_FIFO_FS_SIZE                          	0
+#define RX5_FIFO_FS_SIZE                          	0
+#define RX6_FIFO_FS_SIZE                          	0
+#define RX7_FIFO_FS_SIZE                          	0
+
+#define TX1_FIFO_FS_SIZE                         	64
+#define TX2_FIFO_FS_SIZE                          	64
+#define TX3_FIFO_FS_SIZE                          	64
+#define TX4_FIFO_FS_SIZE                          	0
+#define TX5_FIFO_FS_SIZE                          	0
+#define TX6_FIFO_FS_SIZE                          	0
+#define TX7_FIFO_FS_SIZE                          	0
+
+/* EP0 IN/OUT share the same section FIFO*/
+#define TX0_FIFO_FS_SIZE                            64
+#define RX0_FIFO_FS_SIZE                            64
+
+#define IS_FIFO_SIZE(size)          (((size) == 0)   || \
+                                     ((size) == 8)   || \
+                                     ((size) == 16)  || \
+                                     ((size) == 32)  || \
+                                     ((size) == 64)  || \
+                                     ((size) == 128) || \
+                                     ((size) == 256) || \
+                                     ((size) == 512)) 
+//#define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT
+// #define USB_OTG_FS_SOF_OUTPUT_ENABLED
+
+/****************** USB OTG MISC CONFIGURATION ********************************/
+#define VBUS_SENSING_ENABLED
+
+/****************** USB OTG MODE CONFIGURATION ********************************/
+//#define USE_HOST_MODE
+#define USE_DEVICE_MODE
+//#define USE_OTG_MODE
+/****************** USB OTG DMA MODE CONFIGURATION ***************************/
+//#define USB_OTG_DMA_ENABLE              /* Enable DMA mode */
+
+/* BULK Transfer */
+//#define USE_USB_DMA_MODE1
+
+/* Only one endpoind can be enable */
+#define USB_OTG_DEV_DMA_EP_NUM              0x81
+
+/****************** C Compilers dependant keywords ****************************/
+/* In HS mode and when the DMA is used, all variables and data structures dealing
+   with the DMA during the transaction process should be 4-bytes aligned */    
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+   
+  #if defined   (__GNUC__)        /* GNU Compiler */
+    #define __ALIGN_END    __attribute__ ((aligned (4)))
+    #define __ALIGN_BEGIN         
+  #else                           
+    #define __ALIGN_END
+    #if defined   (__CC_ARM)      /* ARM Compiler */
+      #define __ALIGN_BEGIN    __align(4)  
+    #elif defined (__ICCARM__)    /* IAR Compiler */
+      #define __ALIGN_BEGIN 
+    #elif defined  (__TASKING__)  /* TASKING Compiler */
+      #define __ALIGN_BEGIN    __align(4) 
+    #endif /* __CC_ARM */  
+  #endif /* __GNUC__ */ 
+#else
+  #define __ALIGN_BEGIN          __attribute__ ((aligned (4)))//__align(4) 
+  #define __ALIGN_END   
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+/* __packed keyword used to decrease the data type alignment to 1-byte */
+//#if defined (__CC_ARM)         /* ARM Compiler */
+//  #define __packed    __packed
+//#elif defined (__ICCARM__)     /* IAR Compiler */
+//  #define __packed    __packed
+//#elif defined   ( __GNUC__ )   /* GNU Compiler */                        
+//  #define __packed    __attribute__ ((__packed__))
+//#elif defined   (__TASKING__)  /* TASKING Compiler */
+//  #define __packed    __unaligned
+//#endif /* __CC_ARM */
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+#endif //__USB_CONF__H__
+
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usb_main.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usb_main.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usb_main.h	(working copy)
@@ -0,0 +1,8 @@
+#include "usbd_ccid_core.h"
+#include "usbd_usr.h"
+#include "usbd_desc.h"
+#include <string.h>
+#include <stdio.h>
+#include "usb_dcd_int.h"
+
+void usb_main(void);
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usb_main.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usb_main.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usb_main.c	(working copy)
@@ -0,0 +1,109 @@
+/**
+  ******************************************************************************
+  * @file    main.c
+  * @author  yichip
+  * @version V1.0.0
+  * @date    7-9-2018
+  * @brief   This file provides all the Application firmware functions.
+  ******************************************************************************
+  * @attention
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+
+
+#include "usbd_ccid_core.h"
+#include "usbd_usr.h"
+#include "usbd_desc.h"
+#include <string.h>
+#include <stdio.h>
+#include "usb_dcd_int.h"
+
+#define USB_CCID_DEMO
+
+#ifdef USB_CCID_DEMO
+
+USB_OTG_CORE_HANDLE  USB_OTG_dev;
+
+void usb_reg_init()
+{
+    USB_OTG_WRITE_REG8(CORE_USB_CONFIG,0x00);
+    my_delay_ms(1);
+    USB_OTG_WRITE_REG8(CORE_USB_TRIG,0xc0);
+    USB_OTG_WRITE_REG8(CORE_USB_CONFIG,0x3c);
+    USB_OTG_WRITE_REG8(CORE_USB_STATUS,0xFF);
+    USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,0xFF);
+    USB_OTG_WRITE_REG8(CORE_USB_ADDR,0x00);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(0),0x70);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf0);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(2),0xff);
+
+
+}
+
+void usb_main(void)
+{
+	enable_clock(CLKCLS_BT);
+	BT_CLKPLL_EN = 0xff;
+	enable_clock(CLKCLS_USB);
+	SYSCTRL_HCLK_CON |= 1 << 11;
+	usb_reg_init();
+
+   MyPrintf("YICHIP SCPU USB CCID Demo V1.0.\n");
+   memset(&USB_OTG_dev, 0, sizeof(USB_OTG_dev));
+
+   USBD_Init(&USB_OTG_dev,
+    #ifdef USE_USB_OTG_HS
+          USB_OTG_HS_CORE_ID,
+    #else
+          USB_OTG_FS_CORE_ID,
+    #endif
+          &USR_desc,
+          &USBD_CCID_cb,
+          &USRD_cb);
+    enable_intr(INTR_USB);
+
+
+      while (1)
+ {
+        if (USB_OTG_dev.dev.device_status_new == USB_OTG_END)
+        {
+//            MyPrintf("> Cmp USB_OTG_CONFIGURED.\n");
+            /* send CCID notification message on interrupt pipe */
+//					if(Getslotstatus_flag ==0)
+//					{
+//						my_delay_ms(5);
+//
+//					}
+					CCID_IntMessage(&USB_OTG_dev);
+        }
+        resp_CCID_CMD(&USB_OTG_dev);
+  }
+
+
+}
+
+
+
+
+
+void USB_IRQHandler(void)
+{
+    USBD_OTG_ISR_Handler (&USB_OTG_dev);
+ //   NVIC_ClearPendingIRQ(USB_IRQn);
+ //   MyPrintf("YICHIP SCPU USB CCID handler startV1.0.\n");
+}
+
+
+#endif
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_conf.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_conf.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_conf.h	(working copy)
@@ -0,0 +1,93 @@
+/**
+  ******************************************************************************
+  * @file    usbd_conf.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   USB Device configuration file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CONF__H__
+#define __USBD_CONF__H__
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_conf.h"
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */ 
+#define USBD_CFG_MAX_NUM                1
+#define USBD_ITF_MAX_NUM                1
+
+#define USBD_SELF_POWERED               
+
+#define USB_MAX_STR_DESC_SIZ            64 
+#define USB_SUPPORT_USER_STRING_DESC
+
+
+/** @defgroup USB_CCID_Class_Layer_Parameter
+  * @{
+  */ 
+#define CCID_BULK_IN_EP              0x81
+#define CCID_BULK_OUT_EP             0x01
+#define CCID_INTR_IN_EP              0x82
+
+#define CCID_BULK_EP_MAX_PACKET               64
+#define CCID_INTR_EP_MAX_PACKET               8
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+#endif //__USBD_CONF__H__
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_desc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_desc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_desc.h	(working copy)
@@ -0,0 +1,120 @@
+/**
+  ******************************************************************************
+  * @file    usbd_desc.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   header file for the usbd_desc.c file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+
+#ifndef __USB_DESC_H
+#define __USB_DESC_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_def.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+  
+/** @defgroup USB_DESC
+  * @brief general defines for the usb device library file
+  * @{
+  */ 
+
+/** @defgroup USB_DESC_Exported_Defines
+  * @{
+  */
+#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
+#define USB_STRING_DESCRIPTOR_TYPE              0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05
+#define USB_SIZ_DEVICE_DESC                     18
+#define USB_SIZ_STRING_LANGID                   4
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Exported_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USBD_DESC_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_DESC_Exported_Variables
+  * @{
+  */ 
+extern  uint8_t USBD_DeviceDesc  [USB_SIZ_DEVICE_DESC];
+extern  uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ];
+extern  uint8_t USBD_OtherSpeedCfgDesc[USB_LEN_CFG_DESC]; 
+extern  uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC];
+extern  uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID];
+extern  USBD_DEVICE USR_desc; 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_DESC_Exported_FunctionsPrototype
+  * @{
+  */ 
+
+
+uint8_t *     USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ManufacturerStrDescriptor ( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ProductStrDescriptor ( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length);
+
+#ifdef USB_SUPPORT_USER_STRING_DESC
+uint8_t *     USBD_USR_USRStringDesc (uint8_t speed, uint8_t idx , uint16_t *length);  
+#endif /* USB_SUPPORT_USER_STRING_DESC */  
+  
+/**
+  * @}
+  */ 
+
+#endif /* __USBD_DESC_H */
+
+/**
+  * @}
+  */ 
+
+/**
+* @}
+*/ 
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_desc.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_desc.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_desc.c	(working copy)
@@ -0,0 +1,319 @@
+/**
+  ******************************************************************************
+  * @file    usbd_desc.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   This file provides the USBD descriptors and string formating method.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_core.h"
+#include "usbd_desc.h"
+#include "usbd_req.h"
+#include "usbd_conf.h"
+#include "usb_regs.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+
+/** @defgroup USBD_DESC 
+  * @brief USBD descriptors module
+  * @{
+  */ 
+
+/** @defgroup USBD_DESC_Private_TypesDefinitions
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_Defines
+  * @{
+  */ 
+#define USBD_VID                        0x0483
+#define USBD_PID                        0x3258
+
+
+#define USBD_BCD_DEVICE_VER             0x0111
+#define BCD_USB_VER                     0x0111
+/** @defgroup USB_String_Descriptors
+  * @{
+  */ 
+#define USBD_LANGID_STRING              0x409
+#define USBD_MANUFACTURER_STRING        "YICHIP"
+
+#define USBD_PRODUCT_FS_STRING          "YC3121 CCID Demo"
+#define USBD_SERIALNUMBER_FS_STRING     "00000000050C"
+#define USBD_CONFIGURATION_FS_STRING    "String Config"
+#define USBD_INTERFACE_FS_STRING        "SCR Interface"
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_Variables
+  * @{
+  */ 
+
+USBD_DEVICE USR_desc =
+{
+  USBD_USR_DeviceDescriptor,
+  USBD_USR_LangIDStrDescriptor, 
+  USBD_USR_ManufacturerStrDescriptor,
+  USBD_USR_ProductStrDescriptor,
+  USBD_USR_SerialStrDescriptor,
+  USBD_USR_ConfigStrDescriptor,
+  USBD_USR_InterfaceStrDescriptor,
+  
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
+  {
+    0x12,                       /*bLength */
+    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
+//    0x00,                     /*bcdUSB */
+//    0x02,
+    0x10,                       /*bcdUSB */
+    0x01,
+    0x00,                       /*bDeviceClass*/
+    0x00,                       /*bDeviceSubClass*/
+    0x00,                       /*bDeviceProtocol*/
+    USB_OTG_MAX_EP0_SIZE,       /*bMaxPacketSize*/
+    LOBYTE(USBD_VID),           /*idVendor*/
+    HIBYTE(USBD_VID),           /*idVendor*/
+    LOBYTE(USBD_PID),           /*idVendor*/
+    HIBYTE(USBD_PID),           /*idVendor*/
+    LOBYTE(USBD_BCD_DEVICE_VER),/*bcdDevice rel. 1.11*/
+    HIBYTE(USBD_BCD_DEVICE_VER),
+    USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
+    USBD_IDX_PRODUCT_STR,       /*Index of product string*/
+    USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
+    USBD_CFG_MAX_NUM            /*bNumConfigurations*/
+  } ; /* USB_DeviceDescriptor */
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
+{
+  USB_LEN_DEV_QUALIFIER_DESC,
+  USB_DESC_TYPE_DEVICE_QUALIFIER,
+  0x00,
+  0x02,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x01,
+  0x00,
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID] __ALIGN_END =
+{
+     USB_SIZ_STRING_LANGID,         
+     USB_DESC_TYPE_STRING,       
+     LOBYTE(USBD_LANGID_STRING),
+     HIBYTE(USBD_LANGID_STRING), 
+};
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_FunctionPrototypes
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_Functions
+  * @{
+  */ 
+
+/**
+* @brief  USBD_USR_DeviceDescriptor 
+*         return the device descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length)
+{
+  *length = sizeof(USBD_DeviceDesc);
+  return USBD_DeviceDesc;
+}
+
+/**
+* @brief  USBD_USR_LangIDStrDescriptor 
+*         return the LangID string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  *length =  sizeof(USBD_LangIDDesc);  
+  return USBD_LangIDDesc;
+}
+
+
+/**
+* @brief  USBD_USR_ProductStrDescriptor 
+*         return the product string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ProductStrDescriptor( uint8_t speed , uint16_t *length)
+{
+ 
+  
+  if(speed == 0)
+  {   
+//    USBD_GetString (USBD_PRODUCT_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);    
+  }
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_ManufacturerStrDescriptor 
+*         return the manufacturer string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ManufacturerStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  USBD_GetString (USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_SerialStrDescriptor 
+*         return the serial number string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed  == USB_OTG_SPEED_HIGH)
+  {    
+//    USBD_GetString (USBD_SERIALNUMBER_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_SERIALNUMBER_FS_STRING, USBD_StrDesc, length);    
+  }
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_ConfigStrDescriptor 
+*         return the configuration string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed  == USB_OTG_SPEED_HIGH)
+  {  
+//    USBD_GetString (USBD_CONFIGURATION_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length); 
+  }
+  return USBD_StrDesc;  
+}
+
+
+/**
+* @brief  USBD_USR_InterfaceStrDescriptor 
+*         return the interface string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed == 0)
+  {
+//    USBD_GetString (USBD_INTERFACE_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_INTERFACE_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;  
+}
+
+/**
+  * @}
+  */ 
+
+
+/**
+  * @}
+  */ 
+
+
+/**
+  * @}
+  */ 
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_usr.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_usr.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_ccid_Device_Demo/usbd_usr.c	(working copy)
@@ -0,0 +1,281 @@
+/**
+  ******************************************************************************
+  * @file    usbd_usr.c
+  * @author  YICHIP
+  * @version V1.0.0
+  * @date    21-October-2014
+  * @brief   This file includes the user application layer
+  ******************************************************************************
+  * @attention
+  *
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_usr.h"
+#include "usbd_ioreq.h"
+
+#include "usb_conf.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+* @{
+*/
+
+/** @defgroup USBD_USR
+* @brief    This file includes the user application layer
+* @{
+*/
+
+/** @defgroup USBD_USR_Private_TypesDefinitions
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Defines
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Macros
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Variables
+* @{
+*/
+
+USBD_Usr_cb_TypeDef USRD_cb =
+{
+  USBD_USR_Init,
+  USBD_USR_DeviceReset,
+  USBD_USR_DeviceConfigured,
+  USBD_USR_DeviceSuspended,
+  USBD_USR_DeviceResumed,
+
+  USBD_USR_DeviceConnected,
+  USBD_USR_DeviceDisconnected,
+
+
+};
+
+
+
+/**
+* @}
+*/
+
+/** @defgroup USBD_USR_Private_Constants
+* @{
+*/
+
+/**
+* @}
+*/
+
+
+
+/** @defgroup USBD_USR_Private_FunctionPrototypes
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Functions
+* @{
+*/
+
+#define USER_INFORMATION1      "[Key]:RemoteWakeup"
+#define USER_INFORMATION2      "[Joystick]:Mouse emulation"
+
+
+/**
+* @brief  USBD_USR_Init
+*         Displays the message on LCD for host lib initialization
+* @param  None
+* @retval None
+*/
+void USBD_USR_Init(void)
+{
+
+}
+
+/**
+* @brief  USBD_USR_DeviceReset
+*         Displays the message on LCD on device Reset Event
+* @param  speed : device speed
+* @retval None
+*/
+extern USB_OTG_CORE_HANDLE  USB_OTG_dev;
+extern USBD_DEVICE USR_desc;
+extern USBD_Class_cb_TypeDef  USBD_CCID_cb;
+void USBD_USR_DeviceReset(uint8_t speed )
+{
+// switch (speed)
+// {
+//   case USB_OTG_SPEED_HIGH:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [HS]" );
+//     break;
+
+//  case USB_OTG_SPEED_FULL:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [FS]" );
+//     break;
+// default:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [??]" );
+//
+// }
+
+    USB_OTG_dev.dev.zero_replay_flag =0;
+    memset((uint8_t*)&USB_OTG_dev, 0, sizeof(USB_OTG_dev));
+    USB_OTG_dev.dev.device_status = USB_OTG_DEFAULT;
+
+    USBD_Init(&USB_OTG_dev,
+        #ifdef USE_USB_OTG_HS
+              USB_OTG_HS_CORE_ID,
+        #else
+              USB_OTG_FS_CORE_ID,
+        #endif
+              &USR_desc,
+              &USBD_CCID_cb,
+              &USRD_cb);
+
+        USB_OTG_WRITE_REG8(CORE_USB_CLEAR,0x40);
+        USB_OTG_WRITE_REG8(USB_SOFCNT,0);
+		USB_OTG_WRITE_REG8(USB_SOFCNTHI,0);
+
+        USB_OTG_WRITE_REG8(CORE_USB_STATUS,0xFF);
+        USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,0xFF);
+        USB_OTG_WRITE_REG8(CORE_USB_ADDR,0x00);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(0),0x70);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf0);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(2),0xff);
+//        MyPrintf("usb reset\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceConfigured
+*         Displays the message on LCD on device configuration Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceConfigured (void)
+{
+//    MyPrintf("> HID Interface started.\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceConnected
+*         Displays the message on LCD on device connection Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceConnected (void)
+{
+//    MyPrintf("> USB Device Connected.\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceDisonnected
+*         Displays the message on LCD on device disconnection Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceDisconnected (void)
+{
+//    MyPrintf("> USB Device Disconnected.\n");
+}
+
+/**
+* @brief  USBD_USR_DeviceSuspended
+*         Displays the message on LCD on device suspend Event
+* @param  None
+* @retval None
+*/
+void USBD_USR_DeviceSuspended(void)
+{
+    MyPrintf("\n> USB Device in Suspend Mode.\n");
+    /* Users can do their application actions here for the USB-Reset */
+}
+
+
+/**
+* @brief  USBD_USR_DeviceResumed
+*         Displays the message on LCD on device resume Event
+* @param  None
+* @retval None
+*/
+void USBD_USR_DeviceResumed(void)
+{
+    MyPrintf("\n> USB Device in Idle Mode.\n");
+    /* Users can do their application actions here for the USB-Reset */
+}
+
+
+void my_delay_ms(int ms)
+{
+	int delay_num;
+	while(ms-->0)
+	{
+		delay_num=(CPU_MHZ/1000)/8+400;
+		while(delay_num-->0)
+		{
+			__asm__("nop");
+		}
+	}
+}
+
+
+/**
+* @}
+*/
+
+/**
+* @}
+*/
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usb_conf.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usb_conf.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usb_conf.h	(working copy)
@@ -0,0 +1,289 @@
+/**
+  ******************************************************************************
+  * @file    usb_conf.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   General low level driver configuration
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USB_CONF__H__
+#define __USB_CONF__H__
+
+/* Includes ------------------------------------------------------------------*/
+#include "Yc3121.h"
+
+
+
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+
+/** @defgroup USB_CONF
+  * @brief USB low level driver configuration file
+  * @{
+  */
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */
+
+/* USB Core and PHY interface configuration.
+   Tip: To avoid modifying these defines each time you need to change the USB
+        configuration, you can declare the needed define in your toolchain
+        compiler preprocessor.
+   */
+/****************** USB OTG FS PHY CONFIGURATION *******************************
+*  The USB OTG FS Core supports one on-chip Full Speed PHY.
+*
+*  The USE_EMBEDDED_PHY symbol is defined in the project compiler preprocessor
+*  when FS core is used.
+*******************************************************************************/
+#ifndef USE_USB_OTG_FS
+ //#define USE_USB_OTG_FS
+#endif /* USE_USB_OTG_FS */
+
+#ifdef USE_USB_OTG_FS
+ #define USB_OTG_FS_CORE
+#endif
+
+/****************** USB OTG HS PHY CONFIGURATION *******************************
+*  The USB OTG HS Core supports two PHY interfaces:
+*   (i)  An ULPI interface for the external High Speed PHY: the USB HS Core will
+*        operate in High speed mode
+*   (ii) An on-chip Full Speed PHY: the USB HS Core will operate in Full speed mode
+*
+*  You can select the PHY to be used using one of these two defines:
+*   (i)  USE_ULPI_PHY: if the USB OTG HS Core is to be used in High speed mode
+*   (ii) USE_EMBEDDED_PHY: if the USB OTG HS Core is to be used in Full speed mode
+*
+*  Notes:
+*   - The USE_ULPI_PHY symbol is defined in the project compiler preprocessor as
+*     default PHY when HS core is used.
+*   - On STM322xG-EVAL and STM324xG-EVAL boards, only configuration(i) is available.
+*     Configuration (ii) need a different hardware, for more details refer to your
+*     STM32 device datasheet.
+*******************************************************************************/
+#ifndef USE_USB_OTG_HS
+ //#define USE_USB_OTG_HS
+#endif /* USE_USB_OTG_HS */
+
+#ifndef USE_ULPI_PHY
+ //#define USE_ULPI_PHY
+#endif /* USE_ULPI_PHY */
+
+#ifndef USE_EMBEDDED_PHY
+ //#define USE_EMBEDDED_PHY
+#endif /* USE_EMBEDDED_PHY */
+
+#ifdef USE_USB_OTG_HS
+ #define USB_OTG_HS_CORE
+#endif
+
+/*******************************************************************************
+*                      FIFO Size Configuration in Device mode
+*
+*  (i) Receive data FIFO size = RAM for setup packets +
+*                   OUT endpoint control information +
+*                   data OUT packets + miscellaneous
+*      Space = ONE 32-bits words
+*     --> RAM for setup packets = 10 spaces
+*        (n is the nbr of CTRL EPs the device core supports)
+*     --> OUT EP CTRL info      = 1 space
+*        (one space for status information written to the FIFO along with each
+*        received packet)
+*     --> data OUT packets      = (Largest Packet Size / 4) + 1 spaces
+*        (MINIMUM to receive packets)
+*     --> OR data OUT packets  = at least 2*(Largest Packet Size / 4) + 1 spaces
+*        (if high-bandwidth EP is enabled or multiple isochronous EPs)
+*     --> miscellaneous = 1 space per OUT EP
+*        (one space for transfer complete status information also pushed to the
+*        FIFO with each endpoint's last packet)
+*
+*  (ii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for
+*       that particular IN EP. More space allocated in the IN EP Tx FIFO results
+*       in a better performance on the USB and can hide latencies on the AHB.
+*
+*  (iii) TXn min size = 16 words. (n  : Transmit FIFO index)
+*   (iv) When a TxFIFO is not used, the Configuration should be as follows:
+*       case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txm can use the space allocated for Txn.
+*       case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txn should be configured with the minimum space of 16 words
+*  (v) The FIFO is used optimally when used TxFIFOs are allocated in the top
+*       of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
+*   (vi) In HS case12 FIFO locations should be reserved for internal DMA registers
+*        so total FIFO size should be 1012 Only instead of 1024
+*******************************************************************************/
+
+/****************** USB OTG HS CONFIGURATION **********************************/
+#ifdef USB_OTG_HS_CORE
+ #define RX_FIFO_HS_SIZE                          512
+ #define TX0_FIFO_HS_SIZE                         128
+ #define TX1_FIFO_HS_SIZE                         372
+ #define TX2_FIFO_HS_SIZE                          0
+ #define TX3_FIFO_HS_SIZE                          0
+ #define TX4_FIFO_HS_SIZE                          0
+ #define TX5_FIFO_HS_SIZE                          0
+
+// #define USB_OTG_HS_SOF_OUTPUT_ENABLED
+
+ #ifdef USE_ULPI_PHY
+  #define USB_OTG_ULPI_PHY_ENABLED
+ #endif
+ #ifdef USE_EMBEDDED_PHY
+   #define USB_OTG_EMBEDDED_PHY_ENABLED
+ #endif
+ #define USB_OTG_HS_INTERNAL_DMA_ENABLED
+ #define USB_OTG_HS_DEDICATED_EP1_ENABLED
+ #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT
+#endif
+
+/****************** USB OTG FS CONFIGURATION **********************************/
+// total fifo size <= 448 (512 - 64)
+#define RX1_FIFO_FS_SIZE                         	0
+#define RX2_FIFO_FS_SIZE                          	0
+#define RX3_FIFO_FS_SIZE                          	0
+#define RX4_FIFO_FS_SIZE                          	0
+#define RX5_FIFO_FS_SIZE                          	0
+#define RX6_FIFO_FS_SIZE                          	0
+#define RX7_FIFO_FS_SIZE                          	0
+
+#define TX1_FIFO_FS_SIZE                         	64
+#define TX2_FIFO_FS_SIZE                          	0
+#define TX3_FIFO_FS_SIZE                          	0
+#define TX4_FIFO_FS_SIZE                          	0
+#define TX5_FIFO_FS_SIZE                          	0
+#define TX6_FIFO_FS_SIZE                          	0
+#define TX7_FIFO_FS_SIZE                          	0
+
+#define TX0_FIFO_FS_SIZE                           64
+#define RX0_FIFO_FS_SIZE                           64
+
+#define IS_FIFO_SIZE(size)          (((size) == 0)   || \
+                                     ((size) == 8)   || \
+                                     ((size) == 16)  || \
+                                     ((size) == 32)  || \
+                                     ((size) == 64)  || \
+                                     ((size) == 128) || \
+                                     ((size) == 256) || \
+                                     ((size) == 512))
+//#define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT
+// #define USB_OTG_FS_SOF_OUTPUT_ENABLED
+
+/****************** USB OTG MISC CONFIGURATION ********************************/
+#define VBUS_SENSING_ENABLED
+
+/****************** USB OTG MODE CONFIGURATION ********************************/
+//#define USE_HOST_MODE
+#define USE_DEVICE_MODE
+//#define USE_OTG_MODE
+
+/****************** USB OTG DMA MODE CONFIGURATION ***************************/
+//#define USB_OTG_DMA_ENABLE              /* Enable DMA mode */
+
+/* BULK Transfer */
+//#define USE_USB_DMA_MODE1
+
+/* Only one endpoind can be enable */
+#define USB_OTG_DEV_DMA_EP_NUM              0x81
+/****************** C Compilers dependant keywords ****************************/
+/* In HS mode and when the DMA is used, all variables and data structures dealing
+   with the DMA during the transaction process should be 4-bytes aligned */
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined   (__GNUC__)        /* GNU Compiler */
+    #define __ALIGN_END    __attribute__ ((aligned (4)))
+    #define __ALIGN_BEGIN
+  #else
+    #define __ALIGN_END
+    #if defined   (__CC_ARM)      /* ARM Compiler */
+      #define __ALIGN_BEGIN    __align(4)
+    #elif defined (__ICCARM__)    /* IAR Compiler */
+      #define __ALIGN_BEGIN
+    #elif defined  (__TASKING__)  /* TASKING Compiler */
+      #define __ALIGN_BEGIN    __align(4)
+    #endif /* __CC_ARM */
+  #endif /* __GNUC__ */
+#else
+  #define __ALIGN_BEGIN
+  #define __ALIGN_END
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+/* __packed keyword used to decrease the data type alignment to 1-byte */
+#if defined (__CC_ARM)         /* ARM Compiler */
+  #define __packed    __packed
+#elif defined (__ICCARM__)     /* IAR Compiler */
+  #define __packed    __packed
+#elif defined   ( __GNUC__ )   /* GNU Compiler */
+  #define __packed    __attribute__ ((__packed__))
+#elif defined   (__TASKING__)  /* TASKING Compiler */
+  #define __packed    __unaligned
+#endif /* __CC_ARM */
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+#endif //__USB_CONF__H__
+
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usb_main.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usb_main.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usb_main.h	(working copy)
@@ -0,0 +1,18 @@
+#include "usbd_hid_core.h"
+#include "usbd_usr.h"
+#include "usbd_desc.h"
+#include <string.h>
+#include <stdio.h>
+#include "usb_dcd_int.h"
+
+
+
+
+
+
+
+
+void usb_main(void);
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usb_main.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usb_main.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usb_main.c	(working copy)
@@ -0,0 +1,164 @@
+/**
+  ******************************************************************************
+  * @file    main.c
+  * @author  yichip
+  * @version V1.0.0
+  * @date    7-9-2018
+  * @brief   This file provides all the Application firmware functions.
+  ******************************************************************************
+  * @attention
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+
+
+
+#include "usbd_usr.h"
+#include "usbd_desc.h"
+#include <string.h>
+#include <stdio.h>
+#include "usb_dcd_int.h"
+#include "usbd_hid_core.h"
+
+
+uint8_t Buf[4] = {0, 0, 0, 0};
+
+USB_OTG_CORE_HANDLE  USB_OTG_dev;
+
+void usb_reg_init()
+{
+    USB_OTG_WRITE_REG8(CORE_USB_CONFIG,0x00);
+    my_delay_ms(1);
+    USB_OTG_WRITE_REG8(CORE_USB_TRIG,0xc0);
+    USB_OTG_WRITE_REG8(CORE_USB_CONFIG,0x3c);
+    USB_OTG_WRITE_REG8(CORE_USB_STATUS,0xFF);
+    USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,0xFF);
+    USB_OTG_WRITE_REG8(CORE_USB_ADDR,0x00);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(0),0x70);
+    #ifdef USB_HID_DEMO_TEST
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf2);
+    #else
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf0);
+    #endif
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(2),0xff);
+
+
+}
+
+void usb_main(void)
+{
+	uint8_t ReceiveCode = 0x41;
+	int8_t x = 0, y = 0;
+
+	enable_clock(CLKCLS_BT);
+	BT_CLKPLL_EN = 0xff;
+	enable_clock(CLKCLS_USB);
+	SYSCTRL_HCLK_CON |= 1 << 11;
+	usb_reg_init();
+
+  memset(&USB_OTG_dev, 0, sizeof(USB_OTG_dev));
+
+  USBD_Init(&USB_OTG_dev,
+        #ifdef USE_USB_OTG_HS
+              USB_OTG_HS_CORE_ID,
+        #else
+              USB_OTG_FS_CORE_ID,
+        #endif
+              &USR_desc,
+              &USBD_HID_cb,
+              &USRD_cb);
+	enable_intr(INTR_USB);
+    MyPrintf("YICHIP SCPU HID Device Demo V1.0.\n");
+
+  #ifdef USB_HID_MS_DEMO
+      while (1)
+ {
+
+		#ifdef USB_HID_DEMO_TEST
+			   if (USB_OTG_dev.dev.device_status_new== USB_OTG_END)
+			   {
+                              	     x = 0;
+                                          y = 0;
+                                          if(ReceiveCode == 0x45 )
+                                          	{
+                              			ReceiveCode = 0x41;
+                                          	}
+                                          else
+                                          	{
+                              			ReceiveCode++;
+                                          	}
+
+                              		switch (ReceiveCode)
+                                          {
+                                              case 0x41:                      /* 上 */
+                                                  y -= 10;
+                                                  Buf[1] = 0;
+                                                  Buf[2] = y;
+                                                  DCD_EP_Tx ( &USB_OTG_dev,
+                                                              HID_IN_EP,
+                                                              Buf,
+                                                              4);
+
+                                                  break;
+                                              case 0x42:                      /* 下 */
+                                                  y += 10;
+                                                  Buf[1] = 0;
+                                                  Buf[2] = y;
+                                                  DCD_EP_Tx ( &USB_OTG_dev,
+                                                              HID_IN_EP,
+                                                              Buf,
+                                                              4);
+                                                  break;
+                                              case 0x43:                      /* 右 */
+                                                  x += 10;
+                                                  Buf[1] = x;
+                                                  Buf[2] = 0;
+                                                  DCD_EP_Tx ( &USB_OTG_dev,
+                                                              HID_IN_EP,
+                                                              Buf,
+                                                              4);
+                                                  break;
+                                              case 0x44:                      /* 左 */
+                                                  x -= 10;
+                                                  Buf[1] = x;
+                                                  Buf[2] = 0;
+                                                  DCD_EP_Tx ( &USB_OTG_dev,
+                                                              HID_IN_EP,
+                                                              Buf,
+                                                              4);
+                                                  break;
+                                              default:
+                                                  break;
+                                          }
+                             }
+                #endif
+  }
+
+#endif
+}
+
+
+
+
+
+
+void USB_IRQHandler(void)
+{
+    USBD_OTG_ISR_Handler (&USB_OTG_dev);
+ //   NVIC_ClearPendingIRQ(USB_IRQn);
+ //   MyPrintf("YICHIP SCPU USB CCID handler startV1.0.\n");
+}
+
+
+
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_conf.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_conf.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_conf.h	(working copy)
@@ -0,0 +1,102 @@
+/**
+  ******************************************************************************
+  * @file    usbd_conf.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   USB Device configuration file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CONF__H__
+#define __USBD_CONF__H__
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_conf.h"
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */ 
+
+
+#define USBD_CFG_MAX_NUM           1
+#define USBD_ITF_MAX_NUM           1
+
+#define USB_MAX_STR_DESC_SIZ       64 
+
+#define USBD_SELF_POWERED               
+
+
+
+#define USBD_DYNAMIC_DESCRIPTOR_CHANGE_ENABLED 
+
+/** @defgroup USB_String_Descriptors
+  * @{
+  */ 
+
+
+/** @defgroup USB_HID_Class_Layer_Parameter
+  * @{
+  */ 
+#define HID_IN_EP                    0x81
+#define HID_OUT_EP                   0x01
+#define HID_EP_MAX_PACKET               64
+
+#define HID_IN_PACKET                64
+#define HID_OUT_PACKET               64
+
+/**
+  * @}
+  */ 
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+#endif //__USBD_CONF__H__
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_desc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_desc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_desc.h	(working copy)
@@ -0,0 +1,120 @@
+/**
+  ******************************************************************************
+  * @file    usbd_desc.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   header file for the usbd_desc.c file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+
+#ifndef __USB_DESC_H
+#define __USB_DESC_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_def.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+  
+/** @defgroup USB_DESC
+  * @brief general defines for the usb device library file
+  * @{
+  */ 
+
+/** @defgroup USB_DESC_Exported_Defines
+  * @{
+  */
+#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
+#define USB_STRING_DESCRIPTOR_TYPE              0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05
+#define USB_SIZ_DEVICE_DESC                     18
+#define USB_SIZ_STRING_LANGID                   4
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Exported_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+
+/** @defgroup USBD_DESC_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_DESC_Exported_Variables
+  * @{
+  */ 
+extern  uint8_t USBD_DeviceDesc  [USB_SIZ_DEVICE_DESC];
+extern  uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ];
+extern  uint8_t USBD_OtherSpeedCfgDesc[USB_LEN_CFG_DESC]; 
+extern  uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC];
+extern  uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID];
+extern  USBD_DEVICE USR_desc; 
+/**
+  * @}
+  */ 
+
+/** @defgroup USBD_DESC_Exported_FunctionsPrototype
+  * @{
+  */ 
+
+
+uint8_t *     USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ManufacturerStrDescriptor ( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ProductStrDescriptor ( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length);
+
+#ifdef USB_SUPPORT_USER_STRING_DESC
+uint8_t *     USBD_USR_USRStringDesc (uint8_t speed, uint8_t idx , uint16_t *length);  
+#endif /* USB_SUPPORT_USER_STRING_DESC */  
+  
+/**
+  * @}
+  */ 
+
+#endif /* __USBD_DESC_H */
+
+/**
+  * @}
+  */ 
+
+/**
+* @}
+*/ 
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_desc.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_desc.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_desc.c	(working copy)
@@ -0,0 +1,325 @@
+/**
+  ******************************************************************************
+  * @file    usbd_desc.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   This file provides the USBD descriptors and string formating method.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_core.h"
+#include "usbd_desc.h"
+#include "usbd_req.h"
+#include "usbd_conf.h"
+#include "usb_regs.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+
+/** @defgroup USBD_DESC 
+  * @brief USBD descriptors module
+  * @{
+  */ 
+
+/** @defgroup USBD_DESC_Private_TypesDefinitions
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_Defines
+  * @{
+  */ 
+
+//#define USBD_VID                     0x0483
+//#define USBD_PID                     0x5710
+#define USBD_VID                     0x0461
+#define USBD_PID                     0x4D81
+
+#define USBD_LANGID_STRING            0x0409
+#define USBD_MANUFACTURER_STRING      "YICHIP"
+
+#define USBD_PRODUCT_HS_STRING        "Joystick in HS mode"
+#define USBD_SERIALNUMBER_HS_STRING   "00000000011B"
+
+#define USBD_PRODUCT_FS_STRING        "YCHIPS FS USB"
+#define USBD_SERIALNUMBER_FS_STRING   "00000000011C"
+
+#define USBD_CONFIGURATION_HS_STRING  "HID Config"
+#define USBD_INTERFACE_HS_STRING      "HID Interface"
+
+#define USBD_CONFIGURATION_FS_STRING  "HID Config"
+#define USBD_INTERFACE_FS_STRING      "HID Interface"
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_Variables
+  * @{
+  */ 
+
+USBD_DEVICE USR_desc =
+{
+  USBD_USR_DeviceDescriptor,
+  USBD_USR_LangIDStrDescriptor, 
+  USBD_USR_ManufacturerStrDescriptor,
+  USBD_USR_ProductStrDescriptor,
+  USBD_USR_SerialStrDescriptor,
+  USBD_USR_ConfigStrDescriptor,
+  USBD_USR_InterfaceStrDescriptor,
+  
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
+  {
+    0x12,                       /*bLength */
+    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
+    0x00,                       /*bcdUSB */
+    0x02,
+    0x00,                       /*bDeviceClass*/
+    0x00,                       /*bDeviceSubClass*/
+    0x00,                       /*bDeviceProtocol*/
+    USB_OTG_MAX_EP0_SIZE,      /*bMaxPacketSize*/
+    LOBYTE(USBD_VID),           /*idVendor*/
+    HIBYTE(USBD_VID),           /*idVendor*/
+    LOBYTE(USBD_PID),           /*idVendor*/
+    HIBYTE(USBD_PID),           /*idVendor*/
+    0x00,                       /*bcdDevice rel. 2.00*/
+    0x02,
+//      0,												// uint8_t		iManufacturer;
+//	2, 												// uint8_t		iProduct;
+//	0,												// uint8_t		iSerialNumber;
+//	1												// uint8_t		bNumConfigurations;
+    USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
+    USBD_IDX_PRODUCT_STR,       /*Index of product string*/
+    USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
+    USBD_CFG_MAX_NUM            /*bNumConfigurations*/
+  } ; /* USB_DeviceDescriptor */
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
+{
+  USB_LEN_DEV_QUALIFIER_DESC,
+  USB_DESC_TYPE_DEVICE_QUALIFIER,
+  0x00,
+  0x02,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x01,
+  0x00,
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4   
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID] __ALIGN_END =
+{
+     USB_SIZ_STRING_LANGID,         
+     USB_DESC_TYPE_STRING,       
+     LOBYTE(USBD_LANGID_STRING),
+     HIBYTE(USBD_LANGID_STRING), 
+};
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_FunctionPrototypes
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup USBD_DESC_Private_Functions
+  * @{
+  */ 
+
+/**
+* @brief  USBD_USR_DeviceDescriptor 
+*         return the device descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length)
+{
+  *length = sizeof(USBD_DeviceDesc);
+  return USBD_DeviceDesc;
+}
+
+/**
+* @brief  USBD_USR_LangIDStrDescriptor 
+*         return the LangID string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  *length =  sizeof(USBD_LangIDDesc);  
+  return USBD_LangIDDesc;
+}
+
+
+/**
+* @brief  USBD_USR_ProductStrDescriptor 
+*         return the product string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ProductStrDescriptor( uint8_t speed , uint16_t *length)
+{
+ 
+  
+  if(speed == 0)
+  {   
+    USBD_GetString (USBD_PRODUCT_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);    
+  }
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_ManufacturerStrDescriptor 
+*         return the manufacturer string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ManufacturerStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  USBD_GetString (USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_SerialStrDescriptor 
+*         return the serial number string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed  == USB_OTG_SPEED_HIGH)
+  {    
+    USBD_GetString (USBD_SERIALNUMBER_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_SERIALNUMBER_FS_STRING, USBD_StrDesc, length);    
+  }
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_ConfigStrDescriptor 
+*         return the configuration string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed  == USB_OTG_SPEED_HIGH)
+  {  
+    USBD_GetString (USBD_CONFIGURATION_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length); 
+  }
+  return USBD_StrDesc;  
+}
+
+
+/**
+* @brief  USBD_USR_InterfaceStrDescriptor 
+*         return the interface string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed == 0)
+  {
+    USBD_GetString (USBD_INTERFACE_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_INTERFACE_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;  
+}
+
+/**
+  * @}
+  */ 
+
+
+/**
+  * @}
+  */ 
+
+
+/**
+  * @}
+  */ 
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_usr.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_usr.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_hid_Device_Demo/usbd_usr.c	(working copy)
@@ -0,0 +1,324 @@
+/**
+  ******************************************************************************
+  * @file    usbd_usr.c
+  * @author  Megahuntmicro
+  * @version V1.0.0
+  * @date    21-October-2014
+  * @brief   This file includes the user application layer
+  ******************************************************************************
+  * @attention
+  *
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "Yc3121.h"
+#include "usbd_usr.h"
+#include "usbd_ioreq.h"
+#include "Yc3121.h"
+#include "usb_conf.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+* @{
+*/
+
+/** @defgroup USBD_USR
+* @brief    This file includes the user application layer
+* @{
+*/
+
+/** @defgroup USBD_USR_Private_TypesDefinitions
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Defines
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Macros
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Variables
+* @{
+*/
+
+USBD_Usr_cb_TypeDef USRD_cb =
+{
+  USBD_USR_Init,
+  USBD_USR_DeviceReset,
+  USBD_USR_DeviceConfigured,
+  USBD_USR_DeviceSuspended,
+  USBD_USR_DeviceResumed,
+
+  USBD_USR_DeviceConnected,
+  USBD_USR_DeviceDisconnected,
+
+
+};
+
+
+
+/**
+* @}
+*/
+
+/** @defgroup USBD_USR_Private_Constants
+* @{
+*/
+
+/**
+* @}
+*/
+
+
+
+/** @defgroup USBD_USR_Private_FunctionPrototypes
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Functions
+* @{
+*/
+
+#define USER_INFORMATION1      "[Key]:RemoteWakeup"
+#define USER_INFORMATION2      "[Joystick]:Mouse emulation"
+
+
+/**
+* @brief  USBD_USR_Init
+*         Displays the message on LCD for host lib initialization
+* @param  None
+* @retval None
+*/
+void USBD_USR_Init(void)
+{
+//  /* Initialize LEDs */
+//  STM_EVAL_LEDInit(LED1);
+//  STM_EVAL_LEDInit(LED2);
+//  STM_EVAL_LEDInit(LED3);
+//  STM_EVAL_LEDInit(LED4);
+//
+//  /* Configure the IOE on which the JoyStick is connected */
+//	IOE_Config();
+//
+//  /* Setup SysTick Timer for 20 msec interrupts
+//  This interrupt is used to probe the joystick */
+//  if (SysTick_Config(SystemCoreClock / 48))
+//  {
+//    /* Capture error */
+//    while (1);
+//  }
+//  /* Initialize the LCD */
+//#if defined (USE_STM322xG_EVAL)
+//  STM322xG_LCD_Init();
+//#elif defined(USE_STM324xG_EVAL)
+//  STM324xG_LCD_Init();
+//#elif defined (USE_STM3210C_EVAL)
+//  STM3210C_LCD_Init();
+//#else
+// #error "Missing define: Evaluation board (ie. USE_STM322xG_EVAL)"
+//#endif
+
+//  LCD_LOG_Init();
+
+//#ifdef USE_USB_OTG_HS
+//  LCD_LOG_SetHeader(" USB OTG HS HID Device");
+//#else
+//  LCD_LOG_SetHeader(" USB OTG FS HID Device");
+//#endif
+//  LCD_UsrLog("> USB device library started.\n");
+//  LCD_LOG_SetFooter ("     USB Device Library v1.1.0" );
+//
+//  /* Information panel */
+//  LCD_SetTextColor(Green);
+//  LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 42, USER_INFORMATION1);
+//  LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 30, USER_INFORMATION2);
+//  LCD_SetTextColor(LCD_LOG_DEFAULT_COLOR);
+
+}
+
+/**
+* @brief  USBD_USR_DeviceReset
+*         Displays the message on LCD on device Reset Event
+* @param  speed : device speed
+* @retval None
+*/
+extern USB_OTG_CORE_HANDLE  USB_OTG_dev;
+extern USBD_DEVICE USR_desc;
+extern USBD_Class_cb_TypeDef  USBD_HID_cb;
+void USBD_USR_DeviceReset(uint8_t speed )
+{
+// switch (speed)
+// {
+//   case USB_OTG_SPEED_HIGH:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [HS]" );
+//     break;
+
+//  case USB_OTG_SPEED_FULL:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [FS]" );
+//     break;
+// default:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [??]" );
+//
+// }
+
+    USB_OTG_dev.dev.zero_replay_flag =0;
+    memset((uint8_t*)&USB_OTG_dev, 0, sizeof(USB_OTG_dev));
+    USB_OTG_dev.dev.device_status = USB_OTG_DEFAULT;
+
+    USBD_Init(&USB_OTG_dev,
+        #ifdef USE_USB_OTG_HS
+              USB_OTG_HS_CORE_ID,
+        #else
+              USB_OTG_FS_CORE_ID,
+        #endif
+              &USR_desc,
+              &USBD_HID_cb,
+              &USRD_cb);
+
+        USB_OTG_WRITE_REG8(CORE_USB_CLEAR,0x40);
+        USB_OTG_WRITE_REG8(USB_SOFCNT,0);
+		USB_OTG_WRITE_REG8(USB_SOFCNTHI,0);
+
+        USB_OTG_WRITE_REG8(CORE_USB_STATUS,0xFF);
+        USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,0xFF);
+        USB_OTG_WRITE_REG8(CORE_USB_ADDR,0x00);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(0),0x70);
+        #ifdef USB_HID_DEMO_TEST
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf2);
+        #else
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf0);
+        #endif
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(2),0xff);
+//        MyPrintf("usb reset\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceConfigured
+*         Displays the message on LCD on device configuration Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceConfigured (void)
+{
+//    printf("> HID Interface started.\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceConnected
+*         Displays the message on LCD on device connection Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceConnected (void)
+{
+//    printf("> USB Device Connected.\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceDisonnected
+*         Displays the message on LCD on device disconnection Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceDisconnected (void)
+{
+//    printf("> USB Device Disconnected.\n");
+}
+
+/**
+* @brief  USBD_USR_DeviceSuspended
+*         Displays the message on LCD on device suspend Event
+* @param  None
+* @retval None
+*/
+void USBD_USR_DeviceSuspended(void)
+{
+//    printf("> USB Device in Suspend Mode.\n");
+    /* Users can do their application actions here for the USB-Reset */
+}
+
+
+/**
+* @brief  USBD_USR_DeviceResumed
+*         Displays the message on LCD on device resume Event
+* @param  None
+* @retval None
+*/
+void USBD_USR_DeviceResumed(void)
+{
+//    printf("> USB Device in Idle Mode.\n");
+    /* Users can do their application actions here for the USB-Reset */
+}
+
+/**
+* @}
+*/
+void my_delay_ms(int ms)
+{
+	int delay_num;
+	while(ms-->0)
+	{
+		delay_num=(CPU_MHZ/1000)/8+400;
+		while(delay_num-->0)
+		{
+			__asm__("nop");
+		}
+	}
+}
+/**
+* @}
+*/
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_bsp.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_bsp.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_bsp.c	(working copy)
@@ -0,0 +1,563 @@
+/**
+  ******************************************************************************
+  * @file    usb_bsp.c
+  * @author  MCD Application Team
+  * @version V2.1.0
+  * @date    19-March-2012
+  * @brief   This file implements the board support package for the USB host library
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_bsp.h"
+#include "usb_conf.h"
+
+/** @addtogroup USBH_USER
+* @{
+*/
+
+/** @defgroup USB_BSP
+  * @brief This file is responsible to offer board support package
+  * @{
+  */
+
+/** @defgroup USB_BSP_Private_Defines
+  * @{
+  */
+//#define USE_ACCURATE_TIME
+#define TIM_MSEC_DELAY                     0x01
+#define TIM_USEC_DELAY                     0x02
+#define HOST_OVRCURR_PORT                  GPIOE
+#define HOST_OVRCURR_LINE                  GPIO_Pin_1
+#define HOST_OVRCURR_PORT_SOURCE           GPIO_PortSourceGPIOE
+#define HOST_OVRCURR_PIN_SOURCE            GPIO_PinSource1
+#define HOST_OVRCURR_PORT_RCC              RCC_APB2Periph_GPIOE
+#define HOST_OVRCURR_EXTI_LINE             EXTI_Line1
+#define HOST_OVRCURR_IRQn                  EXTI1_IRQn
+
+#ifdef USE_STM3210C_EVAL
+ #define HOST_POWERSW_PORT_RCC             RCC_APB2Periph_GPIOC
+ #define HOST_POWERSW_PORT                 GPIOC
+ #define HOST_POWERSW_VBUS                 GPIO_Pin_9
+#else
+ #ifdef USE_USB_OTG_FS
+  #define HOST_POWERSW_PORT_RCC            RCC_AHB1Periph_GPIOH
+  #define HOST_POWERSW_PORT                GPIOH
+  #define HOST_POWERSW_VBUS                GPIO_Pin_5
+ #endif
+#endif
+
+#define HOST_SOF_OUTPUT_RCC                RCC_APB2Periph_GPIOA
+#define HOST_SOF_PORT                      GPIOA
+#define HOST_SOF_SIGNAL                    GPIO_Pin_8
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_BSP_Private_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+
+/** @defgroup USB_BSP_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USBH_BSP_Private_Variables
+  * @{
+  */
+ErrorStatus HSEStartUpStatus;
+#ifdef USE_ACCURATE_TIME
+volatile uint32_t BSP_delay = 0;
+#endif
+/**
+  * @}
+  */
+
+/** @defgroup USBH_BSP_Private_FunctionPrototypes
+  * @{
+  */
+
+#ifdef USE_ACCURATE_TIME
+static void BSP_SetTime(uint8_t Unit);
+static void BSP_Delay(uint32_t nTime,uint8_t Unit);
+static void USB_OTG_BSP_TimeInit ( void );
+#endif
+/**
+  * @}
+  */
+
+/** @defgroup USB_BSP_Private_Functions
+  * @{
+  */
+
+/**
+  * @brief  USB_OTG_BSP_Init
+  *         Initilizes BSP configurations
+  * @param  None
+  * @retval None
+  */
+
+void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
+{
+
+//// EXTI_InitTypeDef EXTI_InitStructure;
+// #ifdef USE_STM3210C_EVAL
+
+//  RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
+//  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;
+
+//#else // USE_STM322xG_EVAL
+//  GPIO_InitTypeDef GPIO_InitStructure;
+// #ifdef USE_USB_OTG_FS
+//
+//  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA , ENABLE);
+//
+//  /* Configure SOF VBUS ID DM DP Pins */
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8  |
+//    GPIO_Pin_9  |
+//      GPIO_Pin_11 |
+//        GPIO_Pin_12;
+//
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
+//  GPIO_Init(GPIOA, &GPIO_InitStructure);
+//
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_OTG1_FS) ;
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_OTG1_FS) ;
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_OTG1_FS) ;
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_OTG1_FS) ;
+//
+//  /* this for ID line debug */
+//
+//
+//  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10;
+//  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
+//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_Init(GPIOA, &GPIO_InitStructure);
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_OTG1_FS) ;
+
+
+//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
+//  RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE) ;
+// #else // USE_USB_OTG_HS
+
+//  #ifdef USE_ULPI_PHY // ULPI
+//  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB |
+//                         RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOH |
+//                           RCC_AHB1Periph_GPIOI, ENABLE);
+//
+//
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource3, GPIO_AF_OTG2_HS) ; // D0
+//  GPIO_PinAFConfig(GPIOA,GPIO_PinSource5, GPIO_AF_OTG2_HS) ; // CLK
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource0, GPIO_AF_OTG2_HS) ; // D1
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource1, GPIO_AF_OTG2_HS) ; // D2
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource5, GPIO_AF_OTG2_HS) ; // D7
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_OTG2_HS) ; // D3
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_OTG2_HS) ; // D4
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12,GPIO_AF_OTG2_HS) ; // D5
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_HS) ; // D6
+//  GPIO_PinAFConfig(GPIOH,GPIO_PinSource4, GPIO_AF_OTG2_HS) ; // NXT
+//  GPIO_PinAFConfig(GPIOI,GPIO_PinSource11,GPIO_AF_OTG2_HS) ; // DIR
+//  GPIO_PinAFConfig(GPIOC,GPIO_PinSource0, GPIO_AF_OTG2_HS) ; // STP
+//
+//  // CLK
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOA, &GPIO_InitStructure);
+//
+//  // D0
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3  ;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
+//  GPIO_Init(GPIOA, &GPIO_InitStructure);
+//
+//
+//
+//  // D1 D2 D3 D4 D5 D6 D7
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1  |
+//    GPIO_Pin_5 | GPIO_Pin_10 |
+//      GPIO_Pin_11| GPIO_Pin_12 |
+//        GPIO_Pin_13 ;
+//
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
+//  GPIO_Init(GPIOB, &GPIO_InitStructure);
+//
+//
+//  // STP
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0  ;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOC, &GPIO_InitStructure);
+//
+//  //NXT
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOH, &GPIO_InitStructure);
+//
+//
+//  //DIR
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOI, &GPIO_InitStructure);
+//
+//
+//  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS |
+//                         RCC_AHB1Periph_OTG_HS_ULPI, ENABLE) ;
+//
+//  #else
+
+//  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE);
+//
+//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12  |
+//    GPIO_Pin_13 |
+//      GPIO_Pin_14 |
+//        GPIO_Pin_15;
+//
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
+//  GPIO_Init(GPIOB, &GPIO_InitStructure);
+//
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource12, GPIO_AF_OTG2_FS) ;
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_FS) ;
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG2_FS) ;
+//  GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG2_FS) ;
+//  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS, ENABLE) ;
+//  #endif
+// #endif //USB_OTG_HS
+//#endif //USE_STM322xG_EVAL
+
+//
+//  /* Configure pin for overcurrent detection */
+//  RCC_APB2PeriphClockCmd(HOST_OVRCURR_PORT_RCC, ENABLE);
+//
+//  /* Configure SOF Pin */
+//  GPIO_InitStructure.GPIO_Pin = HOST_OVRCURR_LINE;
+//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
+//  GPIO_Init(HOST_OVRCURR_PORT, &GPIO_InitStructure);
+//
+//  /* Connect Button EXTI Line to Button GPIO Pin */
+//  GPIO_EXTILineConfig(HOST_OVRCURR_PORT_SOURCE, HOST_OVRCURR_PIN_SOURCE);
+//
+//  /* Configure Button EXTI line */
+//  EXTI_InitStructure.EXTI_Line = HOST_OVRCURR_EXTI_LINE;
+//  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
+//  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
+//  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
+//  EXTI_Init(&EXTI_InitStructure);
+//   USB_OTG_BSP_TimeInit();
+}
+/**
+  * @brief  USB_OTG_BSP_EnableInterrupt
+  *         Configures USB Global interrupt
+  * @param  None
+  * @retval None
+  */
+void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
+{
+//  NVIC_InitTypeDef NVIC_InitStructure;
+//
+//  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
+//#ifdef USE_USB_OTG_HS
+//  NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_IRQn;
+//#else
+//  NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;
+//#endif
+//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
+//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
+//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+//  NVIC_Init(&NVIC_InitStructure);
+
+//
+//  /* Enable the Overcurrent Interrupt */
+//  NVIC_InitStructure.NVIC_IRQChannel = HOST_OVRCURR_IRQn;
+//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
+//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
+//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+//
+//  NVIC_Init(&NVIC_InitStructure);
+}
+
+/**
+  * @brief  BSP_Drive_VBUS
+  *         Drives the Vbus signal through IO
+  * @param  state : VBUS states
+  * @retval None
+  */
+
+void USB_OTG_BSP_DriveVBUS(USB_OTG_CORE_HANDLE *pdev, uint8_t state)
+{
+  /*
+  On-chip 5 V VBUS generation is not supported. For this reason, a charge pump
+  or, if 5 V are available on the application board, a basic power switch, must
+  be added externally to drive the 5 V VBUS line. The external charge pump can
+  be driven by any GPIO output. When the application decides to power on VBUS
+  using the chosen GPIO, it must also set the port power bit in the host port
+  control and status register (PPWR bit in OTG_FS_HPRT).
+
+  Bit 12 PPWR: Port power
+  The application uses this field to control power to this port, and the core
+  clears this bit on an overcurrent condition.
+  */
+//#ifndef USE_USB_OTG_HS
+//  if (0 == state)
+//  {
+//    /* DISABLE is needed on output of the Power Switch */
+//    GPIO_SetBits(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);
+//  }
+//  else
+//  {
+//    /*ENABLE the Power Switch by driving the Enable LOW */
+//    GPIO_ResetBits(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);
+//  }
+//#endif
+}
+
+/**
+  * @brief  USB_OTG_BSP_ConfigVBUS
+  *         Configures the IO for the Vbus and OverCurrent
+  * @param  None
+  * @retval None
+  */
+
+void  USB_OTG_BSP_ConfigVBUS(USB_OTG_CORE_HANDLE *pdev)
+{
+#ifdef USE_USB_OTG_FS
+  GPIO_InitTypeDef GPIO_InitStructure;
+
+#ifdef USE_STM3210C_EVAL
+  RCC_APB2PeriphClockCmd(HOST_POWERSW_PORT_RCC, ENABLE);
+
+
+  /* Configure Power Switch Vbus Pin */
+  GPIO_InitStructure.GPIO_Pin = HOST_POWERSW_VBUS;
+  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+  GPIO_Init(HOST_POWERSW_PORT, &GPIO_InitStructure);
+#else
+  #ifdef USE_USB_OTG_FS
+  RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOH , ENABLE);
+
+  GPIO_InitStructure.GPIO_Pin = HOST_POWERSW_VBUS;
+  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
+  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
+  GPIO_Init(HOST_POWERSW_PORT,&GPIO_InitStructure);
+  #endif
+#endif
+
+  /* By Default, DISABLE is needed on output of the Power Switch */
+  GPIO_SetBits(HOST_POWERSW_PORT, HOST_POWERSW_VBUS);
+
+  USB_OTG_BSP_mDelay(200);   /* Delay is need for stabilising the Vbus Low
+  in Reset Condition, when Vbus=1 and Reset-button is pressed by user */
+#endif
+}
+
+/**
+  * @brief  USB_OTG_BSP_TimeInit
+  *         Initializes delay unit using Timer2
+  * @param  None
+  * @retval None
+  */
+static void USB_OTG_BSP_TimeInit ( void )
+{
+//#ifdef USE_ACCURATE_TIME
+//  NVIC_InitTypeDef NVIC_InitStructure;
+//
+//  /* Set the Vector Table base address at 0x08000000 */
+//  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);
+//
+//  /* Configure the Priority Group to 2 bits */
+//  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
+//
+//  /* Enable the TIM2 gloabal Interrupt */
+//  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
+//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
+//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
+//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+//
+//  NVIC_Init(&NVIC_InitStructure);
+//
+//  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
+//#endif
+}
+
+/**
+  * @brief  USB_OTG_BSP_uDelay
+  *         This function provides delay time in micro sec
+  * @param  usec : Value of delay required in micro sec
+  * @retval None
+  */
+void USB_OTG_BSP_uDelay (const uint32_t usec)
+{
+
+#ifdef USE_ACCURATE_TIME
+  BSP_Delay(usec,TIM_USEC_DELAY);
+#else
+  volatile uint32_t count = 0;
+  const uint32_t utime = (120 * usec / 7);
+  do
+  {
+    if ( ++count > utime )
+    {
+      return ;
+    }
+  }
+  while (1);
+#endif
+
+}
+
+
+/**
+  * @brief  USB_OTG_BSP_mDelay
+  *          This function provides delay time in milli sec
+  * @param  msec : Value of delay required in milli sec
+  * @retval None
+  */
+void USB_OTG_BSP_mDelay (const uint32_t msec)
+{
+#ifdef USE_ACCURATE_TIME
+    BSP_Delay(msec,TIM_MSEC_DELAY);
+#else
+    USB_OTG_BSP_uDelay(msec * 1000);
+#endif
+
+}
+
+
+/**
+  * @brief  USB_OTG_BSP_TimerIRQ
+  *         Time base IRQ
+  * @param  None
+  * @retval None
+  */
+
+void USB_OTG_BSP_TimerIRQ (void)
+{
+#ifdef USE_ACCURATE_TIME
+//  if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
+//  {
+//    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
+//    if (BSP_delay > 0x00)
+//    {
+//      BSP_delay--;
+//    }
+//    else
+//    {
+//      TIM_Cmd(TIM2,DISABLE);
+//    }
+//  }
+#endif
+}
+
+#ifdef USE_ACCURATE_TIME
+/**
+  * @brief  BSP_Delay
+  *         Delay routine based on TIM2
+  * @param  nTime : Delay Time
+  * @param  unit : Delay Time unit : mili sec / micro sec
+  * @retval None
+  */
+static void BSP_Delay(uint32_t nTime, uint8_t unit)
+{
+
+//  BSP_delay = nTime;
+//  BSP_SetTime(unit);
+//  while(BSP_delay != 0);
+//  TIM_Cmd(TIM2,DISABLE);
+}
+
+/**
+  * @brief  BSP_SetTime
+  *         Configures TIM2 for delay routine based on TIM2
+  * @param  unit : msec /usec
+  * @retval None
+  */
+static void BSP_SetTime(uint8_t unit)
+{
+//  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
+//
+//  TIM_Cmd(TIM2,DISABLE);
+//  TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE);
+//
+//
+//  if(unit == TIM_USEC_DELAY)
+//  {
+//    TIM_TimeBaseStructure.TIM_Period = 11;
+//  }
+//  else if(unit == TIM_MSEC_DELAY)
+//  {
+//    TIM_TimeBaseStructure.TIM_Period = 11999;
+//  }
+//  TIM_TimeBaseStructure.TIM_Prescaler = 5;
+//  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
+//  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
+//
+//  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
+//  TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
+//
+//  TIM_ARRPreloadConfig(TIM2, ENABLE);
+//
+//  /* TIM IT enable */
+//  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
+//
+//  /* TIM2 enable counter */
+//  TIM_Cmd(TIM2, ENABLE);
+}
+
+#endif
+
+/**
+* @}
+*/
+
+/**
+* @}
+*/
+
+/**
+* @}
+*/
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_conf.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_conf.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_conf.h	(working copy)
@@ -0,0 +1,291 @@
+/**
+  ******************************************************************************
+  * @file    usb_conf.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   General low level driver configuration
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USB_CONF__H__
+#define __USB_CONF__H__
+
+/* Includes ------------------------------------------------------------------*/
+#include "yc3121.h"
+
+
+
+/** @addtogroup USB_OTG_DRIVER
+  * @{
+  */
+
+/** @defgroup USB_CONF
+  * @brief USB low level driver configuration file
+  * @{
+  */
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */
+
+/* USB Core and PHY interface configuration.
+   Tip: To avoid modifying these defines each time you need to change the USB
+        configuration, you can declare the needed define in your toolchain
+        compiler preprocessor.
+   */
+/****************** USB OTG FS PHY CONFIGURATION *******************************
+*  The USB OTG FS Core supports one on-chip Full Speed PHY.
+*
+*  The USE_EMBEDDED_PHY symbol is defined in the project compiler preprocessor
+*  when FS core is used.
+*******************************************************************************/
+#ifndef USE_USB_OTG_FS
+ //#define USE_USB_OTG_FS
+#endif /* USE_USB_OTG_FS */
+
+#ifdef USE_USB_OTG_FS
+ #define USB_OTG_FS_CORE
+#endif
+
+/****************** USB OTG HS PHY CONFIGURATION *******************************
+*  The USB OTG HS Core supports two PHY interfaces:
+*   (i)  An ULPI interface for the external High Speed PHY: the USB HS Core will
+*        operate in High speed mode
+*   (ii) An on-chip Full Speed PHY: the USB HS Core will operate in Full speed mode
+*
+*  You can select the PHY to be used using one of these two defines:
+*   (i)  USE_ULPI_PHY: if the USB OTG HS Core is to be used in High speed mode
+*   (ii) USE_EMBEDDED_PHY: if the USB OTG HS Core is to be used in Full speed mode
+*
+*  Notes:
+*   - The USE_ULPI_PHY symbol is defined in the project compiler preprocessor as
+*     default PHY when HS core is used.
+*   - On STM322xG-EVAL and STM324xG-EVAL boards, only configuration(i) is available.
+*     Configuration (ii) need a different hardware, for more details refer to your
+*     STM32 device datasheet.
+*******************************************************************************/
+#ifndef USE_USB_OTG_HS
+ //#define USE_USB_OTG_HS
+#endif /* USE_USB_OTG_HS */
+
+#ifndef USE_ULPI_PHY
+ //#define USE_ULPI_PHY
+#endif /* USE_ULPI_PHY */
+
+#ifndef USE_EMBEDDED_PHY
+ //#define USE_EMBEDDED_PHY
+#endif /* USE_EMBEDDED_PHY */
+
+#ifdef USE_USB_OTG_HS
+ #define USB_OTG_HS_CORE
+#endif
+
+/*******************************************************************************
+*                      FIFO Size Configuration in Device mode
+*
+*  (i) Receive data FIFO size = RAM for setup packets +
+*                   OUT endpoint control information +
+*                   data OUT packets + miscellaneous
+*      Space = ONE 32-bits words
+*     --> RAM for setup packets = 10 spaces
+*        (n is the nbr of CTRL EPs the device core supports)
+*     --> OUT EP CTRL info      = 1 space
+*        (one space for status information written to the FIFO along with each
+*        received packet)
+*     --> data OUT packets      = (Largest Packet Size / 4) + 1 spaces
+*        (MINIMUM to receive packets)
+*     --> OR data OUT packets  = at least 2*(Largest Packet Size / 4) + 1 spaces
+*        (if high-bandwidth EP is enabled or multiple isochronous EPs)
+*     --> miscellaneous = 1 space per OUT EP
+*        (one space for transfer complete status information also pushed to the
+*        FIFO with each endpoint's last packet)
+*
+*  (ii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for
+*       that particular IN EP. More space allocated in the IN EP Tx FIFO results
+*       in a better performance on the USB and can hide latencies on the AHB.
+*
+*  (iii) TXn min size = 16 words. (n  : Transmit FIFO index)
+*   (iv) When a TxFIFO is not used, the Configuration should be as follows:
+*       case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txm can use the space allocated for Txn.
+*       case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
+*       --> Txn should be configured with the minimum space of 16 words
+*  (v) The FIFO is used optimally when used TxFIFOs are allocated in the top
+*       of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
+*   (vi) In HS case12 FIFO locations should be reserved for internal DMA registers
+*        so total FIFO size should be 1012 Only instead of 1024
+*******************************************************************************/
+
+/****************** USB OTG HS CONFIGURATION **********************************/
+#ifdef USB_OTG_HS_CORE
+ #define RX_FIFO_HS_SIZE                          512
+ #define TX0_FIFO_HS_SIZE                         128
+ #define TX1_FIFO_HS_SIZE                         372
+ #define TX2_FIFO_HS_SIZE                          0
+ #define TX3_FIFO_HS_SIZE                          0
+ #define TX4_FIFO_HS_SIZE                          0
+ #define TX5_FIFO_HS_SIZE                          0
+
+// #define USB_OTG_HS_SOF_OUTPUT_ENABLED
+
+ #ifdef USE_ULPI_PHY
+  #define USB_OTG_ULPI_PHY_ENABLED
+ #endif
+ #ifdef USE_EMBEDDED_PHY
+   #define USB_OTG_EMBEDDED_PHY_ENABLED
+ #endif
+ #define USB_OTG_HS_INTERNAL_DMA_ENABLED
+ #define USB_OTG_HS_DEDICATED_EP1_ENABLED
+ #define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT
+#endif
+
+/****************** USB OTG FS CONFIGURATION **********************************/
+// total fifo size <= 448 (512 - 64)
+#define RX1_FIFO_FS_SIZE                         	64
+#define RX2_FIFO_FS_SIZE                          	64
+#define RX3_FIFO_FS_SIZE                          	64
+#define RX4_FIFO_FS_SIZE                          	0
+#define RX5_FIFO_FS_SIZE                          	0
+#define RX6_FIFO_FS_SIZE                          	0
+#define RX7_FIFO_FS_SIZE                          	0
+
+#define TX1_FIFO_FS_SIZE                         	64
+#define TX2_FIFO_FS_SIZE                          	64
+#define TX3_FIFO_FS_SIZE                          	64
+#define TX4_FIFO_FS_SIZE                          	0
+#define TX5_FIFO_FS_SIZE                          	0
+#define TX6_FIFO_FS_SIZE                          	0
+#define TX7_FIFO_FS_SIZE                          	0
+
+/* EP0 IN/OUT share the same section FIFO*/
+#define TX0_FIFO_FS_SIZE                            64
+#define RX0_FIFO_FS_SIZE                            64
+
+#define IS_FIFO_SIZE(size)          (((size) == 0)   || \
+                                     ((size) == 8)   || \
+                                     ((size) == 16)  || \
+                                     ((size) == 32)  || \
+                                     ((size) == 64)  || \
+                                     ((size) == 128) || \
+                                     ((size) == 256) || \
+                                     ((size) == 512))
+//#define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT
+// #define USB_OTG_FS_SOF_OUTPUT_ENABLED
+
+/****************** USB OTG MISC CONFIGURATION ********************************/
+#define VBUS_SENSING_ENABLED
+
+/****************** USB OTG MODE CONFIGURATION ********************************/
+//#define USE_HOST_MODE
+#define USE_DEVICE_MODE
+//#define USE_OTG_MODE
+/****************** USB OTG DMA MODE CONFIGURATION ***************************/
+//#define USB_OTG_DMA_ENABLE              /* Enable DMA mode */
+
+/* BULK Transfer */
+//#define USE_USB_DMA_MODE1
+
+/* Only one endpoind can be enable */
+#define USB_OTG_DEV_DMA_EP_NUM              0x81
+
+/****************** C Compilers dependant keywords ****************************/
+/* In HS mode and when the DMA is used, all variables and data structures dealing
+   with the DMA during the transaction process should be 4-bytes aligned */
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined   (__GNUC__)        /* GNU Compiler */
+    #define __ALIGN_END    __attribute__ ((aligned (4)))
+    #define __ALIGN_BEGIN
+  #else
+    #define __ALIGN_END
+    #if defined   (__CC_ARM)      /* ARM Compiler */
+      #define __ALIGN_BEGIN    __align(4)
+    #elif defined (__ICCARM__)    /* IAR Compiler */
+      #define __ALIGN_BEGIN
+    #elif defined  (__TASKING__)  /* TASKING Compiler */
+      #define __ALIGN_BEGIN    __align(4)
+    #endif /* __CC_ARM */
+  #endif /* __GNUC__ */
+#else
+  //#define __ALIGN_BEGIN         __align(4)
+  #define __ALIGN_END    __attribute__ ((aligned (4)))
+  #define __ALIGN_BEGIN
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+/* __packed keyword used to decrease the data type alignment to 1-byte */
+#if defined (__CC_ARM)         /* ARM Compiler */
+  #define __packed    __packed
+#elif defined (__ICCARM__)     /* IAR Compiler */
+  #define __packed    __packed
+#elif defined   ( __GNUC__ )   /* GNU Compiler */
+//  #define __packed    __attribute__ ((__packed__))
+#elif defined   (__TASKING__)  /* TASKING Compiler */
+  #define __packed    __unaligned
+#endif /* __CC_ARM */
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+#endif //__USB_CONF__H__
+
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_main.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_main.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_main.h	(working copy)
@@ -0,0 +1,18 @@
+#include "usbd_printer_core.h"
+#include "usbd_usr.h"
+#include "usbd_desc.h"
+#include <string.h>
+#include <stdio.h>
+#include "usb_dcd_int.h"
+
+
+
+
+
+
+
+
+void usb_main(void);
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_main.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_main.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usb_main.c	(working copy)
@@ -0,0 +1,115 @@
+/**
+  ******************************************************************************
+  * @file    main.c
+  * @author  yichip
+  * @version V1.0.0
+  * @date    7-9-2018
+  * @brief   This file provides all the Application firmware functions.
+  ******************************************************************************
+  * @attention
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+
+
+
+
+#include <string.h>
+#include <stdio.h>
+#include "usb_dcd_int.h"
+#include "usbd_printer_core.h"
+#include "usbd_usr.h"
+#include "usbd_desc.h"
+#include "misc.h"
+#include "usbd_printer_vcp.h"
+
+
+USB_OTG_CORE_HANDLE  USB_OTG_dev;
+extern PRINTER_IF_Prop_TypeDef  APP_FOPS;
+
+
+void usb_reg_init()
+{
+    USB_OTG_WRITE_REG8(CORE_USB_CONFIG,0x00);
+    my_delay_ms(1);
+    USB_OTG_WRITE_REG8(CORE_USB_TRIG,0xc0);
+    USB_OTG_WRITE_REG8(CORE_USB_CONFIG,0x3c);
+    USB_OTG_WRITE_REG8(CORE_USB_STATUS,0xFF);
+    USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,0xFF);
+    USB_OTG_WRITE_REG8(CORE_USB_ADDR,0x00);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(0),0x70);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf0);
+    USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(2),0xff);
+
+
+}
+
+uint8_t Rxbuf[1024*2] = {0};
+int totalReceiveLen=0;
+void usb_main(void)
+{
+  int rxlen = 0;
+	enable_clock(CLKCLS_BT);
+	BT_CLKPLL_EN = 0xff;
+	enable_clock(CLKCLS_USB);
+	SYSCTRL_HCLK_CON |= 1 << 11;
+	usb_reg_init();
+
+  memset(&USB_OTG_dev, 0, sizeof(USB_OTG_dev));
+
+  USBD_Init(&USB_OTG_dev,
+        #ifdef USE_USB_OTG_HS
+              USB_OTG_HS_CORE_ID,
+        #else
+              USB_OTG_FS_CORE_ID,
+        #endif
+              &USR_desc,
+              &USBD_PRINTER_cb,
+              &USRD_cb);
+	enable_intr(INTR_USB);
+	while(1)
+	{
+        rxlen = VCP_GetRxBuflen();
+        if(rxlen>0)
+        {
+            totalReceiveLen+=rxlen;
+            MyPrintf("totalReceiveLen=%d rxlen =%d\n\r",totalReceiveLen,rxlen);
+            for(int i=0; i<rxlen; i++)
+            {
+                Rxbuf[i] = VCP_GetRxChar();
+                MyPrintf("%02x ",Rxbuf[i]);
+            }
+            MyPrintf("\n");
+            #ifndef USB_FLOWCTRL
+            DCD_EP_Tx(&USB_OTG_dev,PRINTER_IN_EP,(uint8_t*)Rxbuf,rxlen);
+            #endif
+        }
+	}
+}
+
+
+
+
+
+
+
+void USB_IRQHandler(void)
+{
+	 USBD_OTG_ISR_Handler (&USB_OTG_dev);
+ //   NVIC_ClearPendingIRQ(USB_IRQn);
+ //   MyPrintf("YICHIP SCPU USB CCID handler startV1.0.\n");
+}
+
+
+
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_conf.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_conf.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_conf.h	(working copy)
@@ -0,0 +1,108 @@
+/**
+  ******************************************************************************
+  * @file    usbd_conf.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   USB Device configuration file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_CONF__H__
+#define __USBD_CONF__H__
+
+/* Includes ------------------------------------------------------------------*/
+#include "usb_conf.h"
+
+/** @defgroup USB_CONF_Exported_Defines
+  * @{
+  */
+#define USBD_CFG_MAX_NUM                1
+#define USBD_ITF_MAX_NUM                1
+
+#define USBD_SELF_POWERED
+
+#define USB_MAX_STR_DESC_SIZ            255
+
+/** @defgroup USB_VCP_Class_Layer_Parameter
+  * @{
+  */
+#define PRINTER_IN_EP                       0x81  /* EP1 for data IN */
+#define PRINTER_OUT_EP                      0x01  /* EP1 for data OUT */
+#define PRINTER_CMD_EP                      0x82  /* EP2 for PRINTER commands */
+
+/* PRINTER Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
+#ifdef USE_USB_OTG_HS
+ #define PRINTER_DATA_MAX_PACKET_SIZE       512  /* Endpoint IN & OUT Packet size */
+ #define PRINTER_CMD_PACKET_SZE             8    /* Control Endpoint Packet size */
+
+ #define PRINTER_IN_FRAME_INTERVAL          40   /* Number of micro-frames between IN transfers */
+ #define APP_RX_DATA_SIZE               2048 /* Total size of IN buffer:
+                                                APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > PRINTER_IN_FRAME_INTERVAL*8 */
+#else
+ #define PRINTER_DATA_MAX_PACKET_SIZE       64   /* Endpoint IN & OUT Packet size */
+ #define PRINTER_CMD_PACKET_SZE             8    /* Control Endpoint Packet size */
+
+ #define PRINTER_IN_FRAME_INTERVAL          5    /* Number of frames between IN transfers */
+ #define APP_TX_DATA_SIZE              (2048)
+ #define APP_RX_DATA_SIZE               2048 /* Total size of IN buffer:
+                                                APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > PRINTER_IN_FRAME_INTERVAL */
+#endif /* USE_USB_OTG_HS */
+
+#define APP_FOPS                        VCP_fops
+/**
+  * @}
+  */
+
+/** @defgroup USB_CONF_Exported_Types
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USB_CONF_Exported_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_CONF_Exported_Variables
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USB_CONF_Exported_FunctionsPrototype
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+#endif //__USBD_CONF__H__
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_desc.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_desc.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_desc.h	(working copy)
@@ -0,0 +1,120 @@
+/**
+  ******************************************************************************
+  * @file    usbd_desc.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   header file for the usbd_desc.c file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+
+#ifndef __USB_DESC_H
+#define __USB_DESC_H
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_def.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+/** @defgroup USB_DESC
+  * @brief general defines for the usb device library file
+  * @{
+  */
+
+/** @defgroup USB_DESC_Exported_Defines
+  * @{
+  */
+#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
+#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
+#define USB_STRING_DESCRIPTOR_TYPE              0x03
+#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
+#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05
+#define USB_SIZ_DEVICE_DESC                     18
+#define USB_SIZ_STRING_LANGID                   4
+
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Exported_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+
+/** @defgroup USBD_DESC_Exported_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup USBD_DESC_Exported_Variables
+  * @{
+  */
+extern  uint8_t USBD_DeviceDesc  [USB_SIZ_DEVICE_DESC];
+extern  uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ];
+extern  uint8_t USBD_OtherSpeedCfgDesc[USB_LEN_CFG_DESC];
+extern  uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC];
+extern  uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID];
+extern  USBD_DEVICE USR_desc;
+/**
+  * @}
+  */
+
+/** @defgroup USBD_DESC_Exported_FunctionsPrototype
+  * @{
+  */
+
+
+uint8_t *     USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ManufacturerStrDescriptor ( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ProductStrDescriptor ( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length);
+uint8_t *     USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length);
+
+#ifdef USB_SUPPORT_USER_STRING_DESC
+uint8_t *     USBD_USR_USRStringDesc (uint8_t speed, uint8_t idx , uint16_t *length);
+#endif /* USB_SUPPORT_USER_STRING_DESC */
+
+/**
+  * @}
+  */
+
+#endif /* __USBD_DESC_H */
+
+/**
+  * @}
+  */
+
+/**
+* @}
+*/
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_desc.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_desc.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_desc.c	(working copy)
@@ -0,0 +1,330 @@
+/**
+  ******************************************************************************
+  * @file    usbd_desc.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   This file provides the USBD descriptors and string formating method.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_core.h"
+#include "usbd_desc.h"
+#include "usbd_req.h"
+#include "usbd_conf.h"
+#include "usb_regs.h"
+#include "usbd_printer_core.h"
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+  * @{
+  */
+
+
+/** @defgroup USBD_DESC
+  * @brief USBD descriptors module
+  * @{
+  */
+
+/** @defgroup USBD_DESC_Private_TypesDefinitions
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_Defines
+  * @{
+  */
+#define USBD_VID                        0x3151
+
+#define USBD_PID                        0x6003
+//#define USBD_VID                        0x0483
+
+//#define USBD_PID                        0x5740
+
+/** @defgroup USB_String_Descriptors
+  * @{
+  */
+#define USBD_LANGID_STRING              0x409
+#define USBD_MANUFACTURER_STRING        "YICHIP"
+
+#define USBD_PRODUCT_HS_STRING          "YC3121 Printer demo in HS mode"
+#define USBD_SERIALNUMBER_HS_STRING     "100000000004"
+
+#define USBD_PRODUCT_FS_STRING          "YC3121 Printer demo"
+#define USBD_SERIALNUMBER_FS_STRING     "000000000004"
+
+#define USBD_CONFIGURATION_HS_STRING    "Printer Config"
+#define USBD_INTERFACE_HS_STRING        "Printer Interface"
+
+#define USBD_CONFIGURATION_FS_STRING    "Printer Config"
+#define USBD_INTERFACE_FS_STRING        "Printer Interface"
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_Variables
+  * @{
+  */
+
+USBD_DEVICE USR_desc =
+{
+  USBD_USR_DeviceDescriptor,
+  USBD_USR_LangIDStrDescriptor,
+  USBD_USR_ManufacturerStrDescriptor,
+  USBD_USR_ProductStrDescriptor,
+  USBD_USR_SerialStrDescriptor,
+  USBD_USR_ConfigStrDescriptor,
+  USBD_USR_InterfaceStrDescriptor,
+
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
+  {
+    0x12,                       /*bLength */
+    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
+//    0x00,                       /*bcdUSB */
+//    0x02,
+    0x10,                       /*bcdUSB */
+    0x01,
+//    0x00,                     /*bDeviceClass*/
+    0x00,                       /*bDeviceClass*/
+    0x00,                       /*bDeviceSubClass*/
+    0x00,                       /*bDeviceProtocol*/
+    USB_OTG_MAX_EP0_SIZE,       /*bMaxPacketSize*/
+    LOBYTE(USBD_VID),           /*idVendor*/
+    HIBYTE(USBD_VID),           /*idVendor*/
+    LOBYTE(USBD_PID),           /*idVendor*/
+    HIBYTE(USBD_PID),           /*idVendor*/
+//    0x00,                       /*bcdDevice rel. 2.00*/
+//    0x02,
+    0x00,                       /*bcdDevice rel. 1.00*/
+    0x02,
+    USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
+    USBD_IDX_PRODUCT_STR,       /*Index of product string*/
+    USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
+    USBD_CFG_MAX_NUM            /*bNumConfigurations*/
+  } ; /* USB_DeviceDescriptor */
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
+{
+  USB_LEN_DEV_QUALIFIER_DESC,
+  USB_DESC_TYPE_DEVICE_QUALIFIER,
+  0x00,
+  0x02,
+  0x00,
+  0x00,
+  0x00,
+  0x40,
+  0x01,
+  0x00,
+};
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+  #if defined ( __ICCARM__ ) /*!< IAR Compiler */
+    #pragma data_alignment=4
+  #endif
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+/* USB Standard Device Descriptor */
+__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID] __ALIGN_END =
+{
+     USB_SIZ_STRING_LANGID,
+     USB_DESC_TYPE_STRING,
+     LOBYTE(USBD_LANGID_STRING),
+     HIBYTE(USBD_LANGID_STRING),
+};
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_FunctionPrototypes
+  * @{
+  */
+/**
+  * @}
+  */
+
+
+/** @defgroup USBD_DESC_Private_Functions
+  * @{
+  */
+
+/**
+* @brief  USBD_USR_DeviceDescriptor
+*         return the device descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length)
+{
+  *length = sizeof(USBD_DeviceDesc);
+  return USBD_DeviceDesc;
+}
+
+/**
+* @brief  USBD_USR_LangIDStrDescriptor
+*         return the LangID string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  *length =  sizeof(USBD_LangIDDesc);
+  return USBD_LangIDDesc;
+}
+
+
+/**
+* @brief  USBD_USR_ProductStrDescriptor
+*         return the product string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ProductStrDescriptor( uint8_t speed , uint16_t *length)
+{
+
+
+  if(speed == 0)
+  {
+//    USBD_GetString (USBD_PRODUCT_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_ManufacturerStrDescriptor
+*         return the manufacturer string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ManufacturerStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  USBD_GetString (USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_SerialStrDescriptor
+*         return the serial number string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed  == USB_OTG_SPEED_HIGH)
+  {
+//    USBD_GetString (USBD_SERIALNUMBER_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_SERIALNUMBER_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;
+}
+
+/**
+* @brief  USBD_USR_ConfigStrDescriptor
+*         return the configuration string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed  == USB_OTG_SPEED_HIGH)
+  {
+//    USBD_GetString (USBD_CONFIGURATION_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;
+}
+
+
+/**
+* @brief  USBD_USR_InterfaceStrDescriptor
+*         return the interface string descriptor
+* @param  speed : current device speed
+* @param  length : pointer to data length variable
+* @retval pointer to descriptor buffer
+*/
+uint8_t *  USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length)
+{
+  if(speed == 0)
+  {
+//    USBD_GetString (USBD_INTERFACE_HS_STRING, USBD_StrDesc, length);
+  }
+  else
+  {
+    USBD_GetString (USBD_INTERFACE_FS_STRING, USBD_StrDesc, length);
+  }
+  return USBD_StrDesc;
+}
+
+/**
+  * @}
+  */
+
+
+/**
+  * @}
+  */
+
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_printer_vcp.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_printer_vcp.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_printer_vcp.h	(working copy)
@@ -0,0 +1,77 @@
+/**
+  ******************************************************************************
+  * @file    usbd_printer_vcp.h
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   Header for usbd_printer_vcp.c file.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __USBD_PRINTER_VCP_H
+#define __USBD_PRINTER_VCP_H
+
+/* Includes ------------------------------------------------------------------*/
+#ifdef STM32F2XX
+ #include "stm32f2xx.h"
+#elif defined(STM32F10X_CL)
+ #include "stm32f10x.h"
+#endif /* STM32F2XX */
+
+#include "usbd_printer_core.h"
+#include "usbd_conf.h"
+
+
+
+/* Exported typef ------------------------------------------------------------*/
+/* The following structures groups all needed parameters to be configured for the
+   ComPort. These parameters can modified on the fly by the host through PRINTER class
+   command class requests. */
+typedef struct
+{
+  uint32_t bitrate;
+  uint8_t  format;
+  uint8_t  paritytype;
+  uint8_t  datatype;
+}LINE_CODING;
+
+
+
+/* Exported constants --------------------------------------------------------*/
+/* The following define is used to route the USART IRQ handler to be used.
+   The IRQ handler function is implemented in the usbd_printer_vcp.c file. */
+
+//#define EVAL_COM_IRQHandler            UART1_IRQHandler
+
+#define DEFAULT_CONFIG                  0
+#define OTHER_CONFIG                    1
+
+/* Exported macro ------------------------------------------------------------*/
+/* Exported functions ------------------------------------------------------- */
+uint16_t VCP_DataTx (uint8_t* Buf, uint32_t Len);
+uint32_t VCP_GetTxBuflen(void);
+uint32_t VCP_GetTxBufrsaddr(void);
+uint8_t  VCP_GetRxChar(void);
+uint32_t VCP_GetRxBuflen(void);
+int8_t * VCP_GetRxBufrsaddr(void);
+#endif /* __USBD_PRINTER_VCP_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_printer_vcp.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_printer_vcp.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_printer_vcp.c	(working copy)
@@ -0,0 +1,576 @@
+/**
+  ******************************************************************************
+  * @file    usbd_printer_vcp.c
+  * @author  MCD Application Team
+  * @version V1.1.0
+  * @date    19-March-2012
+  * @brief   Generic media access Layer.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
+  *
+  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
+  * You may not use this file except in compliance with the License.
+  * You may obtain a copy of the License at:
+  *
+  *        http://www.st.com/software_license_agreement_liberty_v2
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  *
+  ******************************************************************************
+  */
+
+#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
+#pragma     data_alignment = 4
+#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_printer_vcp.h"
+#include "usb_conf.h"
+#include "usbd_printer_core.h"
+#include "Misc.h"
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+LINE_CODING linecoding =
+  {
+    115200, /* baud rate*/
+    0x00,   /* stop bits-1*/
+    0x00,   /* parity - none*/
+    0x08    /* nb. of bits 8*/
+  };
+
+
+UART_InitTypeDef USART_InitStructure;
+
+/* These are external variables imported from PRINTER core to be used for IN
+   transfer management. */
+
+#ifdef USER_SPECIFIED_DATA_SOURCE
+extern uint8_t  *APP_Rx_Buffer;
+uint8_t COM_Rx_data_buf[2048];
+#else
+//extern uint8_t  APP_Rx_Buffer [];
+extern struct APP_DATA_STRUCT_DEF APP_Gdata_param;
+#endif                            /* Write PRINTER received data in this buffer.
+                                     These data will be sent over USB IN endpoint
+                                     in the PRINTER core functions. */
+//extern volatile uint32_t APP_Rx_ptr_in;
+                                  /* Increment this pointer or roll it back to
+                                     start address when writing received data
+                                     in the buffer APP_Rx_Buffer. */
+
+/* Private function prototypes -----------------------------------------------*/
+static uint16_t VCP_Init     (void);
+static uint16_t VCP_DeInit   (void);
+static uint16_t VCP_Ctrl     (uint32_t Cmd, uint8_t* Buf, uint32_t Len);
+//static uint16_t VCP_DataTx   (uint8_t* Buf, uint32_t Len);
+static uint16_t VCP_DataRx   (uint8_t* Buf, uint32_t Len);
+
+static uint16_t VCP_COMConfig(uint8_t Conf);
+
+PRINTER_IF_Prop_TypeDef VCP_fops =
+{
+  VCP_Init,
+  VCP_DeInit,
+  VCP_Ctrl,
+  VCP_DataTx,
+  VCP_DataRx
+};
+
+/* Private functions ---------------------------------------------------------*/
+/**
+  * @brief  VCP_Init
+  *         Initializes the Media on the STM32
+  * @param  None
+  * @retval Result of the opeartion (USBD_OK in all cases)
+  */
+static uint16_t VCP_Init(void)
+{
+//    NVIC_InitTypeDef NVIC_InitStructure;
+
+    /**/
+    #ifdef USER_SPECIFIED_DATA_SOURCE
+    APP_Rx_Buffer = COM_Rx_data_buf;
+    #else
+    APP_Gdata_param.COM_config_cmp = 0;
+    #endif
+	memset(&APP_Gdata_param, 0, sizeof(APP_Gdata_param));
+    /* EVAL_COM1 default configuration */
+    /* EVAL_COM1 configured as follow:
+        - BaudRate = 115200 baud
+        - Word Length = 8 Bits
+        - One Stop Bit
+        - Parity Odd
+        - Hardware flow control disabled
+        - Receive and transmit enabled
+    */
+//    USART_InitStructure.UART_BaudRate = 115200;
+//    USART_InitStructure.UART_WordLength = UART_WordLength_8b;
+//    USART_InitStructure.UART_StopBits = UART_StopBits_1;
+//    USART_InitStructure.UART_Parity = UART_Parity_Odd;
+//    UART_Init(UART1, &USART_InitStructure);
+
+//    /* Enable the USART Receive interrupt */
+//    UART_ITConfig(UART1, UART_IT_RX_RECVD, ENABLE);
+
+//    /* Enable USART Interrupt */
+//    NVIC_InitStructure.NVIC_IRQChannel = UART1_IRQn;
+//    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
+//    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
+//    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
+//    NVIC_Init(&NVIC_InitStructure);
+
+    return USBD_OK;
+}
+
+/**
+  * @brief  VCP_DeInit
+  *         DeInitializes the Media on the STM32
+  * @param  None
+  * @retval Result of the opeartion (USBD_OK in all cases)
+  */
+static uint16_t VCP_DeInit(void)
+{
+
+  return USBD_OK;
+}
+
+
+/**
+  * @brief  VCP_Ctrl
+  *         Manage the PRINTER class requests
+  * @param  Cmd: Command code
+  * @param  Buf: Buffer containing command data (request parameters)
+  * @param  Len: Number of data to be sent (in bytes)
+  * @retval Result USBD_Status
+  */
+static uint16_t VCP_Ctrl (uint32_t Cmd, uint8_t* Buf, uint32_t Len)
+{
+  switch (Cmd)
+  {
+  case SEND_ENCAPSULATED_COMMAND:
+    /*get PRINTER class GET DEVICE ID */
+
+    break;
+
+  case GET_ENCAPSULATED_RESPONSE:
+    /* Not  needed for this driver */
+    break;
+
+  case SET_COMM_FEATURE:
+    /* Not  needed for this driver */
+    break;
+
+  case GET_COMM_FEATURE:
+    /* Not  needed for this driver */
+    break;
+
+  case CLEAR_COMM_FEATURE:
+    /* Not  needed for this driver */
+    break;
+
+  case SET_LINE_CODING:
+    linecoding.bitrate = (uint32_t)(Buf[0] | (Buf[1] << 8) | (Buf[2] << 16) | (Buf[3] << 24));
+    linecoding.format = Buf[4];
+    linecoding.paritytype = Buf[5];
+    linecoding.datatype = Buf[6];
+    APP_Gdata_param.COM_config_cmp = 1;
+    MyPrintf("cmp=%X\n",APP_Gdata_param.COM_config_cmp);
+     MyPrintf("SET_LINE_CODING \n\r");
+    /* Set the new configuration */
+    VCP_COMConfig(OTHER_CONFIG);
+    break;
+
+  case GET_LINE_CODING:
+    Buf[0] = (uint8_t)(linecoding.bitrate);
+    Buf[1] = (uint8_t)(linecoding.bitrate >> 8);
+    Buf[2] = (uint8_t)(linecoding.bitrate >> 16);
+    Buf[3] = (uint8_t)(linecoding.bitrate >> 24);
+    Buf[4] = linecoding.format;
+    Buf[5] = linecoding.paritytype;
+    Buf[6] = linecoding.datatype;
+    break;
+
+  case SET_CONTROL_LINE_STATE:
+    /* Not  needed for this driver */
+    break;
+
+  case SEND_BREAK:
+    /* Not  needed for this driver */
+    break;
+
+  default:
+    break;
+  }
+
+  return USBD_OK;
+}
+
+int isUsbBufFull()
+{
+	int ret = 0;
+//	NVIC_DisableIRQ(USB_IRQn);
+	ret = APP_Gdata_param.rx_structure.Rx_counter >= PRINTER_APP_RX_DATA_SIZE;
+//	NVIC_EnableIRQ(USB_IRQn);
+	return ret;
+}
+/**
+  * @brief  VCP_DataTx
+  *         PRINTER received data to be send over USB IN endpoint are managed in
+  *         this function.
+  * @param  Buf: Buffer of data to be sent
+  * @param  Len: Number of data to be sent (in bytes)
+  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
+  */
+uint16_t VCP_DataTx (uint8_t* Buf, uint32_t Len)
+{
+    #ifdef USER_SPECIFIED_DATA_SOURCE
+    uint32_t i = 0;
+    for (i = 0; i < Len; i++)
+    {
+        *(APP_Rx_Buffer + APP_Rx_ptr_in) = *Buf++;
+        APP_Rx_ptr_in++;
+    }
+    #else
+    uint32_t i = 0;
+    if (linecoding.datatype == 7)
+    {
+        for (i = 0; i < Len; i++)
+        {
+//			do
+//			{
+//				if (isUsbBufFull())
+//				{
+//					int i;
+//					for (i = 0; i < 1000; i++);
+//				}else
+//				{
+//					break;
+//				}
+//			} while (1);
+            APP_Gdata_param.rx_structure.APP_Rx_Buffer[APP_Gdata_param.rx_structure.APP_Rx_ptr_in++] = (*Buf++) & 0x7F;
+  //          NVIC_DisableIRQ(USB_IRQn);
+            APP_Gdata_param.rx_structure.Rx_counter++;
+   //         NVIC_EnableIRQ(USB_IRQn);
+            /* To avoid buffer overflow */
+            if(APP_Gdata_param.rx_structure.APP_Rx_ptr_in == PRINTER_APP_RX_DATA_SIZE)
+            {
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_in = 0;
+            }
+        }
+    }
+    else if (linecoding.datatype == 8)
+    {
+        for (i = 0; i < Len; i++)
+        {
+			/* Detect whether the buffer overflow */
+//            do
+//			{
+//				if (isUsbBufFull())
+//				{
+//					int i;
+//					/* Wait Buf Idle */
+//					for (i = 0; i < 1000; i++);
+//				}else
+//				{
+//					break;
+//				}
+//			} while (1);
+			APP_Gdata_param.rx_structure.APP_Rx_Buffer[APP_Gdata_param.rx_structure.APP_Rx_ptr_in++] = *Buf++;
+		//	NVIC_DisableIRQ(USB_IRQn);
+            APP_Gdata_param.rx_structure.Rx_counter++;
+      //      NVIC_EnableIRQ(USB_IRQn);
+            /* To avoid buffer overflow */
+            if(APP_Gdata_param.rx_structure.APP_Rx_ptr_in == PRINTER_APP_RX_DATA_SIZE)
+            {
+                APP_Gdata_param.rx_structure.APP_Rx_ptr_in = 0;
+            }
+        }
+    }
+    #endif
+    return USBD_OK;
+}
+
+/**
+  * @brief  Get_TxBuf_length
+  *         Get the length of the remaining data to be transmitted
+  * @param  NONE
+  * @retval Result receive data length
+  */
+uint32_t VCP_GetTxBuflen(void)
+{
+	uint32_t ret = 0x00;
+	if (APP_Gdata_param.rx_structure.APP_Rx_ptr_out < APP_Gdata_param.rx_structure.APP_Rx_ptr_in)
+		ret = APP_Gdata_param.rx_structure.APP_Rx_ptr_in - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+	else
+		ret = PRINTER_APP_RX_DATA_SIZE + APP_Gdata_param.rx_structure.APP_Rx_ptr_in \
+	          - APP_Gdata_param.rx_structure.APP_Rx_ptr_out;
+    return ret;
+}
+
+/**
+  * @brief  Get_RxBuf_rsaddr
+  *         Get reading receive data starting position.
+  * @param  NONE
+  * @retval Result received data is read starting position
+  */
+uint32_t VCP_GetTxBufrsaddr(void)
+{
+    return(APP_Gdata_param.rx_structure.APP_Rx_ptr_out);
+}
+
+/**
+  * @brief  Get_RxData
+  *         Get receive data by byte
+  * @param  NONE
+  * @retval Result receive data
+  */
+extern uint8_t usbFlowCtrl;
+uint8_t VCP_GetRxChar(void)
+{
+	uint8_t ret;
+  ret = (APP_Gdata_param.tx_structure.APP_Tx_Buffer[APP_Gdata_param.tx_structure.APP_Tx_ptr_out++]);
+	if (APP_Gdata_param.tx_structure.APP_Tx_ptr_out >= PRINTER_APP_TX_DATA_SIZE)
+  {
+     APP_Gdata_param.tx_structure.APP_Tx_ptr_out = 0;
+  }
+	#ifdef USB_FLOWCTRL
+	if((VCP_GetRxBuflen()+PRINTER_DATA_OUT_PACKET_SIZE)<PRINTER_APP_TX_DATA_SIZE)
+	{
+		if(usbFlowCtrl==1)
+		{
+			//MyPrintf("\r\n\r\n usbFlowCtrl=0\r\n\r\n");
+			usbFlowCtrl=0;
+			NVIC_EnableIRQ(USB_IRQn);
+		}
+	}
+	#endif
+	return ret;
+}
+
+/**
+  * @brief  Get_RxBuf_length
+  *         Get receive data length
+  * @param  NONE
+  * @retval Result receive data length
+  */
+uint32_t VCP_GetRxBuflen(void)
+{
+    uint32_t inPtr=APP_Gdata_param.tx_structure.APP_Tx_ptr_in;
+    if(inPtr>=APP_Gdata_param.tx_structure.APP_Tx_ptr_out)
+		{
+			return (inPtr-APP_Gdata_param.tx_structure.APP_Tx_ptr_out);
+		}
+		else
+		{
+			return (PRINTER_APP_TX_DATA_SIZE-(APP_Gdata_param.tx_structure.APP_Tx_ptr_out-inPtr));
+		}
+}
+
+/**
+  * @brief  Get_RxBuf_rsaddr
+  *         Get reading receive data starting position.
+  * @param  NONE
+  * @retval Result received data is read starting position
+  */
+int8_t * VCP_GetRxBufrsaddr(void)
+{
+    return (int8_t*)(&(APP_Gdata_param.tx_structure.APP_Tx_Buffer[APP_Gdata_param.tx_structure.APP_Tx_ptr_out]));
+}
+
+/**
+  * @brief  VCP_DataRx
+  *         Data received over USB OUT endpoint are sent over PRINTER interface
+  *         through this function.
+  *
+  *         @note
+  *         This function will block any OUT packet reception on USB endpoint
+  *         untill exiting this function. If you exit this function before transfer
+  *         is complete on PRINTER interface (ie. using DMA controller) it will result
+  *         in receiving more data while previous ones are still not sent.
+  *
+  * @param  Buf: Buffer of data to be received
+  * @param  Len: Number of data received (in bytes)
+  * @retval Result of the opeartion: USBD_OK if all operations are OK else VCP_FAIL
+  */
+static uint16_t VCP_DataRx (uint8_t* Buf, uint32_t Len)
+{
+    uint32_t i;
+    //MyPrintf("vcp_len =%X\n\r",Len);
+    for (i = 0; i < Len; i++)
+    {
+        APP_Gdata_param.tx_structure.APP_Tx_Buffer[APP_Gdata_param.tx_structure.APP_Tx_ptr_in++] = Buf[i];
+				if(APP_Gdata_param.tx_structure.APP_Tx_ptr_in >= PRINTER_APP_TX_DATA_SIZE)
+				{
+						APP_Gdata_param.tx_structure.APP_Tx_ptr_in = 0;
+				}
+
+				APP_Gdata_param.tx_structure.Tx_counter++;
+    }
+		#ifdef USB_FLOWCTRL
+		if((VCP_GetRxBuflen()+PRINTER_DATA_OUT_PACKET_SIZE)>=PRINTER_APP_TX_DATA_SIZE)
+		{
+			if(usbFlowCtrl==0)
+			{
+				usbFlowCtrl=1;
+				NVIC_DisableIRQ(USB_IRQn);
+				//MyPrintf("\r\n\r\n usbFlowCtrl=1\r\n\r\n");
+			}
+		}
+		#endif
+    return USBD_OK;
+}
+
+
+
+/**
+  * @brief  VCP_COMConfig
+  *         Configure the COM Port with default values or values received from host.
+  * @param  Conf: can be DEFAULT_CONFIG to set the default configuration or OTHER_CONFIG
+  *         to set a configuration received from the host.
+  * @retval None.
+  */
+static uint16_t VCP_COMConfig(uint8_t Conf)
+{
+	/*
+    if (Conf == DEFAULT_CONFIG)
+    {
+//        /* EVAL_COM1 default configuration */
+//        /* EVAL_COM1 configured as follow:
+//        - BaudRate = 115200 baud
+//        - Word Length = 8 Bits
+//        - One Stop Bit
+//        - Parity Odd
+//        - Hardware flow control disabled
+//        - Receive and transmit enabled
+//        */
+//        USART_InitStructure.UART_BaudRate = 115200;
+//        USART_InitStructure.UART_WordLength = UART_WordLength_8b;
+//        USART_InitStructure.UART_StopBits = UART_StopBits_1;
+//        USART_InitStructure.UART_Parity = UART_Parity_No;
+
+//        UART_Init(UART1, &USART_InitStructure);
+//        /* Enable the USART Receive interrupt */
+//        UART_ITConfig(UART1, UART_IT_RX_RECVD, ENABLE);
+//    }
+
+//    else
+//    {
+//        /* set the Stop bit*/
+//        switch (linecoding.format)
+//        {
+//        case 0:
+//          USART_InitStructure.UART_StopBits = UART_StopBits_1;
+//          break;
+//        case 1:
+//          USART_InitStructure.UART_StopBits = UART_StopBits_1_5;
+//          break;
+//        case 2:
+//          USART_InitStructure.UART_StopBits = UART_StopBits_2;
+//          break;
+//        default :
+//          VCP_COMConfig(DEFAULT_CONFIG);
+//          return (USBD_FAIL);
+//        }
+
+//        /* set the parity bit*/
+//        switch (linecoding.paritytype)
+//        {
+//        case 0:
+//          USART_InitStructure.UART_Parity = UART_Parity_No;
+//          break;
+//        case 1:
+//          USART_InitStructure.UART_Parity = UART_Parity_Even;
+//          break;
+//        case 2:
+//          USART_InitStructure.UART_Parity = UART_Parity_Odd;
+//          break;
+//        default :
+//          VCP_COMConfig(DEFAULT_CONFIG);
+//          return (USBD_FAIL);
+//        }
+
+//        /*set the data type : only 8bits and 9bits is supported */
+//        switch (linecoding.datatype)
+//        {
+//        case 0x07:
+//          /* With this configuration a parity (Even or Odd) should be set */
+//          USART_InitStructure.UART_WordLength = UART_WordLength_8b;
+//          break;
+//        case 0x08:
+//          if (USART_InitStructure.UART_Parity == UART_Parity_No)
+//          {
+//            USART_InitStructure.UART_WordLength = UART_WordLength_8b;
+//          }
+//          else
+//          {
+//    //        USART_InitStructure.UART_WordLength = UART_WordLength_9b;
+//          }
+//
+//          break;
+//        default :
+////          VCP_COMConfig(DEFAULT_CONFIG);
+//          return (USBD_FAIL);
+//        }
+
+//        USART_InitStructure.UART_BaudRate = linecoding.bitrate;
+
+////        UART_Init(UART1, &USART_InitStructure);
+//    }
+  return USBD_OK;
+}
+
+/**
+  * @brief  EVAL_COM_IRQHandler
+  *
+  * @param  None.
+  * @retval None.
+  */
+#if 0
+void EVAL_COM_IRQHandler(void)
+{
+    UART_TypeDef * UARTx = UART1;
+    uint8_t ra_data_re = 0x00;
+	switch(UARTx->OFFSET_8.IIR & 0x0f)
+	{
+        case UART_IT_ID_TX_EMPTY:
+//            /* Send the received data to the PC Host*/
+//            VCP_DataTx (0,0);
+
+            break;
+        case UART_IT_ID_RX_RECVD:
+            #ifdef USER_SPECIFIED_DATA_SOURCE
+            if (linecoding.datatype == 7)
+            {
+                ra_data_re = UART_ReceiveData(UART1) & 0x7F;
+            }
+            else if (linecoding.datatype == 8)
+            {
+                ra_data_re = UART_ReceiveData(UART1);
+            }
+            VCP_DataTx (&ra_data_re, 1);
+            #else
+//            UART_ITConfig(UART1, UART_IT_RX_RECVD, DISABLE);
+
+            ra_data_re = UART_ReceiveData(UART1);
+            VCP_DataTx (&ra_data_re, 1);
+
+//            UART_ITConfig(UART1, UART_IT_RX_RECVD, ENABLE);
+            #endif
+
+            /* If overrun condition occurs, clear the ORE flag and recover communication */
+//            (void)UART_ReceiveData(UART1);
+            break;
+        default :
+            break;
+    }
+}
+#endif
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_usr.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_usr.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_usb/scpu_usb_printer_Device_Demo/usbd_usr.c	(working copy)
@@ -0,0 +1,320 @@
+/**
+  ******************************************************************************
+  * @file    usbd_usr.c
+  * @author  Megahuntmicro
+  * @version V1.0.0
+  * @date    21-October-2014
+  * @brief   This file includes the user application layer
+  ******************************************************************************
+  * @attention
+  *
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "yc3121.h"
+#include "usbd_usr.h"
+#include "usbd_ioreq.h"
+#include "yc3121.h"
+#include "usb_conf.h"
+
+/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
+* @{
+*/
+
+/** @defgroup USBD_USR
+* @brief    This file includes the user application layer
+* @{
+*/
+
+/** @defgroup USBD_USR_Private_TypesDefinitions
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Defines
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Macros
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Variables
+* @{
+*/
+
+USBD_Usr_cb_TypeDef USRD_cb =
+{
+  USBD_USR_Init,
+  USBD_USR_DeviceReset,
+  USBD_USR_DeviceConfigured,
+  USBD_USR_DeviceSuspended,
+  USBD_USR_DeviceResumed,
+
+  USBD_USR_DeviceConnected,
+  USBD_USR_DeviceDisconnected,
+
+
+};
+
+
+
+/**
+* @}
+*/
+
+/** @defgroup USBD_USR_Private_Constants
+* @{
+*/
+
+/**
+* @}
+*/
+
+
+
+/** @defgroup USBD_USR_Private_FunctionPrototypes
+* @{
+*/
+/**
+* @}
+*/
+
+
+/** @defgroup USBD_USR_Private_Functions
+* @{
+*/
+
+#define USER_INFORMATION1      "[Key]:RemoteWakeup"
+#define USER_INFORMATION2      "[Joystick]:Mouse emulation"
+
+
+/**
+* @brief  USBD_USR_Init
+*         Displays the message on LCD for host lib initialization
+* @param  None
+* @retval None
+*/
+void USBD_USR_Init(void)
+{
+//  /* Initialize LEDs */
+//  STM_EVAL_LEDInit(LED1);
+//  STM_EVAL_LEDInit(LED2);
+//  STM_EVAL_LEDInit(LED3);
+//  STM_EVAL_LEDInit(LED4);
+//
+//  /* Configure the IOE on which the JoyStick is connected */
+//	IOE_Config();
+//
+//  /* Setup SysTick Timer for 20 msec interrupts
+//  This interrupt is used to probe the joystick */
+//  if (SysTick_Config(SystemCoreClock / 48))
+//  {
+//    /* Capture error */
+//    while (1);
+//  }
+//  /* Initialize the LCD */
+//#if defined (USE_STM322xG_EVAL)
+//  STM322xG_LCD_Init();
+//#elif defined(USE_STM324xG_EVAL)
+//  STM324xG_LCD_Init();
+//#elif defined (USE_STM3210C_EVAL)
+//  STM3210C_LCD_Init();
+//#else
+// #error "Missing define: Evaluation board (ie. USE_STM322xG_EVAL)"
+//#endif
+
+//  LCD_LOG_Init();
+
+//#ifdef USE_USB_OTG_HS
+//  LCD_LOG_SetHeader(" USB OTG HS HID Device");
+//#else
+//  LCD_LOG_SetHeader(" USB OTG FS HID Device");
+//#endif
+//  LCD_UsrLog("> USB device library started.\n");
+//  LCD_LOG_SetFooter ("     USB Device Library v1.1.0" );
+//
+//  /* Information panel */
+//  LCD_SetTextColor(Green);
+//  LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 42, USER_INFORMATION1);
+//  LCD_DisplayStringLine( LCD_PIXEL_HEIGHT - 30, USER_INFORMATION2);
+//  LCD_SetTextColor(LCD_LOG_DEFAULT_COLOR);
+
+}
+
+/**
+* @brief  USBD_USR_DeviceReset
+*         Displays the message on LCD on device Reset Event
+* @param  speed : device speed
+* @retval None
+*/
+extern USB_OTG_CORE_HANDLE  USB_OTG_dev;
+extern USBD_DEVICE USR_desc;
+extern USBD_Class_cb_TypeDef  USBD_PRINTER_cb;
+void USBD_USR_DeviceReset(uint8_t speed )
+{
+// switch (speed)
+// {
+//   case USB_OTG_SPEED_HIGH:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [HS]" );
+//     break;
+
+//  case USB_OTG_SPEED_FULL:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [FS]" );
+//     break;
+// default:
+//     LCD_LOG_SetFooter ("     USB Device Library v1.1.0 [??]" );
+//
+// }
+
+    USB_OTG_dev.dev.zero_replay_flag =0;
+    memset((uint8_t*)&USB_OTG_dev, 0, sizeof(USB_OTG_dev));
+    USB_OTG_dev.dev.device_status = USB_OTG_DEFAULT;
+
+    USBD_Init(&USB_OTG_dev,
+        #ifdef USE_USB_OTG_HS
+              USB_OTG_HS_CORE_ID,
+        #else
+              USB_OTG_FS_CORE_ID,
+        #endif
+              &USR_desc,
+              &USBD_PRINTER_cb,
+              &USRD_cb);
+
+        USB_OTG_WRITE_REG8(CORE_USB_CLEAR,0x40);
+        USB_OTG_WRITE_REG8(USB_SOFCNT,0);
+		USB_OTG_WRITE_REG8(USB_SOFCNTHI,0);
+
+        USB_OTG_WRITE_REG8(CORE_USB_STATUS,0xFF);
+        USB_OTG_WRITE_REG8(CORE_USB_FIFO_EMPTY,0xFF);
+        USB_OTG_WRITE_REG8(CORE_USB_ADDR,0x00);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(0),0x70);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(1),0xf0);
+        USB_OTG_WRITE_REG8(CORE_USB_INT_MASK(2),0xff);
+//        MyPrintf("usb reset\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceConfigured
+*         Displays the message on LCD on device configuration Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceConfigured (void)
+{
+//    printf("> HID Interface started.\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceConnected
+*         Displays the message on LCD on device connection Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceConnected (void)
+{
+    MyPrintf("> USB Device Connected.\n");
+}
+
+
+/**
+* @brief  USBD_USR_DeviceDisonnected
+*         Displays the message on LCD on device disconnection Event
+* @param  None
+* @retval Staus
+*/
+void USBD_USR_DeviceDisconnected (void)
+{
+    MyPrintf("> USB Device Disconnected.\n");
+}
+
+/**
+* @brief  USBD_USR_DeviceSuspended
+*         Displays the message on LCD on device suspend Event
+* @param  None
+* @retval None
+*/
+void USBD_USR_DeviceSuspended(void)
+{
+    MyPrintf("\n> USB Device in Suspend Mode.\n");
+    /* Users can do their application actions here for the USB-Reset */
+}
+
+
+/**
+* @brief  USBD_USR_DeviceResumed
+*         Displays the message on LCD on device resume Event
+* @param  None
+* @retval None
+*/
+void USBD_USR_DeviceResumed(void)
+{
+    MyPrintf("\n> USB Device in Idle Mode.\n");
+    /* Users can do their application actions here for the USB-Reset */
+}
+
+/**
+* @}
+*/
+void my_delay_ms(int ms)
+{
+	int delay_num;
+	while(ms-->0)
+	{
+		delay_num=(CPU_MHZ/1000)/8+400;
+		while(delay_num-->0)
+		{
+			__asm__("nop");
+		}
+	}
+}
+/**
+* @}
+*/
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/sdk/yc_vbatCheck.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_vbatCheck.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_vbatCheck.h	(working copy)
@@ -0,0 +1,15 @@
+#ifndef __VBAT_CHECK_H__
+#define __VBAT_CHECK_H__
+#include "yc3121.h"
+#include "yc_lpm.h"
+
+/**
+ * @brief:绾芥墸鍔熻楁娴嬪嚱鏁
+ *
+ * @param:none
+ *
+ * @retval:杩斿洖鍊糱it1銆乥it2鍚屾椂涓1琛ㄧず绾芥墸鍔熻楀紓甯
+ */
+uint8_t vbat_check(void);
+
+#endif
Index: BT_doublebyte/sdk/Librarier/sdk/yc_vbatCheck.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_vbatCheck.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_vbatCheck.c	(working copy)
@@ -0,0 +1,55 @@
+#include "yc_vbatCheck.h"
+
+//#define VBAT_DEBUG
+
+uint8_t vbat_check(void)
+{
+    uint8_t ret = 0;
+    uint32_t back_val_lpm_ctrl=0;
+    uint32_t back_val_lpm_sensor = 0;
+    uint32_t back_val_lpm_gpio_wkhi = 0;
+
+
+    uint32_t val_lpm_ctrl=0;
+    uint32_t val_lpm_sensor = 0;
+    uint32_t val_lpm_gpio_wkhi = 0;
+    uint32_t val_lpm_status = 0;
+
+    val_lpm_ctrl = lpm_read(LPM_CTRL);           //f8400
+    back_val_lpm_ctrl  = val_lpm_ctrl;
+    val_lpm_ctrl |= (1<<5);
+    lpm_write(LPM_CTRL,val_lpm_ctrl);
+    #ifdef VBAT_DEBUG
+    MyPrintf("f8400=%x\r\n",val_lpm_ctrl);
+    #endif
+
+    val_lpm_gpio_wkhi = lpm_read(LPM_GPIO_WKHI); //f8414
+    back_val_lpm_gpio_wkhi = val_lpm_gpio_wkhi;
+    val_lpm_gpio_wkhi &= (~(0x03<<21));
+    lpm_write(LPM_GPIO_WKHI,val_lpm_gpio_wkhi);
+    #ifdef VBAT_DEBUG
+    MyPrintf("f8414=%x\r\n",val_lpm_gpio_wkhi);
+    #endif
+
+    val_lpm_sensor = lpm_read(LPM_SENSOR);       //f8404
+    back_val_lpm_sensor = val_lpm_sensor;
+    val_lpm_sensor |= (0x06);
+    lpm_write(LPM_SENSOR,val_lpm_sensor);
+    #ifdef VBAT_DEBUG
+    MyPrintf("f8404=%x\r\n",val_lpm_sensor);
+    #endif
+    delay(10000);
+
+    val_lpm_status = lpm_read(LPM_STATUS);
+    #ifdef VBAT_DEBUG
+    MyPrintf("f8478=%x\r\n",val_lpm_status);
+    #endif
+    ret = ((val_lpm_status>>16) & 0x1f);
+
+
+    lpm_write(LPM_CTRL,     back_val_lpm_ctrl);
+    lpm_write(LPM_GPIO_WKHI,back_val_lpm_gpio_wkhi);
+    lpm_write(LPM_SENSOR,   back_val_lpm_sensor);
+
+    return ret;
+}
\ No newline at end of file
Index: BT_doublebyte/sdk/Librarier/sdk/yc_wdt.h
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_wdt.h	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_wdt.h	(working copy)
@@ -0,0 +1,74 @@
+/**
+  ******************************************************************************
+  * @file    yc_wdt.h
+  * @author  Yichip
+  * @version V1.0
+  * @date    7-Dec-2019
+  * @brief   watchdog encapsulation.
+  *
+  ******************************************************************************
+  */
+
+#ifndef __YC_WDT_H__
+#define __YC_WDT_H__
+
+#include "yc3121.h"
+
+/**
+  * @brief  timer number Structure definition
+  */
+typedef enum
+{
+    WDT_CPUReset = 0,
+    WDT_Interrupt,
+} WDT_ModeTypeDef;
+
+#define ISWDTRELOAD(load) (load>0&&load<=0x1f)
+
+/**
+ * @brief  Set reload counter
+ * @param  Reload: Reload counter equal to 2^reload.
+ * @retval none
+ */
+void WDT_SetReload(uint32_t Reload);
+
+/**
+ * @brief Set WDT  mode
+ * @param WDT_Mode : Select the following values :
+ *        WDT_CPUReset
+ *        WDT_Interrupt.
+ * @retval none
+ * @description If Select WDT_CPUReset Mode,the bit for WDT RESET will be set;if
+ *              Select WDT_Interrupt the bit for WDT RESET will
+ */
+void WDT_ModeConfig(WDT_ModeTypeDef WDT_Mode);
+
+/**
+ * @brief  Get interrupt Status
+ * @param  none
+ * @retval SET:interrupt ocuured.
+ */
+ITStatus WDT_GetITStatus(void);
+
+/**
+ * @brief  Clear interrupt
+ * @param  none
+ * @retval none
+ */
+void WDT_ClearITPendingBit(void);
+
+/**
+ * @brief  Enable WDT
+ * @param  none
+ * @retval none
+ */
+void WDT_Enable(void);
+
+/**
+ * @brief  Feed the watchdog function
+ * @param  none
+ * @retval none
+ */
+void WDT_ReloadCounter(void);
+
+#endif /*__YC_WDT_H__*/
Index: BT_doublebyte/sdk/Librarier/sdk/yc_wdt.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_wdt.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/sdk/yc_wdt.c	(working copy)
@@ -0,0 +1,54 @@
+#include "yc_wdt.h"
+
+#define WDT_ENABLE_BIT_Mask     6
+#define WDT_MODE_BIT_Mask       5
+#define SYSCTRL_WDT_EN_BIT_Mask 1
+
+/**************the value of feed dog************/
+#define COUNTER_RELOAD_KEY      0x5937
+
+void WDT_SetReload(uint32_t Reload)
+{
+    uint32_t wdt_config = 0;
+
+    _ASSERT(ISWDTRELOAD(Reload));
+
+    wdt_config = WD_CONFIG;
+    wdt_config &= 0xE0;
+    wdt_config |= Reload;
+    WD_CONFIG = wdt_config;
+}
+
+void WDT_ReloadCounter(void)
+{
+    WD_KICK = COUNTER_RELOAD_KEY;
+}
+
+void WDT_Enable(void)
+{
+    WD_CONFIG |= (1 << WDT_ENABLE_BIT_Mask);
+}
+
+void WDT_ModeConfig(WDT_ModeTypeDef WDT_Mode)
+{
+    WD_CONFIG &= ~(1 << WDT_MODE_BIT_Mask);
+    WD_CONFIG |= (WDT_Mode << WDT_MODE_BIT_Mask);
+    if (WDT_CPUReset == WDT_Mode)
+    {
+        SYSCTRL_RST_EN |= (1 << 1);
+    }
+    else
+    {
+        SYSCTRL_RST_EN &= ~(1 << 1);
+    }
+}
+
+ITStatus WDT_GetITStatus(void)
+{
+    return (ITStatus)(WD_KICK & 1);
+}
+
+void WDT_ClearITPendingBit(void)
+{
+    WD_CLEAR = 1;
+}
Index: BT_doublebyte/sdk/Librarier/startup/boot_flash_start.s
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/boot_flash_start.s	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/boot_flash_start.s	(working copy)
@@ -0,0 +1,483 @@
+			AREA    |.flash_start|, CODE, READONLY  ,ALIGN=4
+
+Reset_Handler PROC
+			EXPORT  Reset_Handler
+			IMPORT  __main
+			LDR 	R0, =__main
+			BX 		R0
+			ENDP
+
+
+pre_hard_fault_handler PROC
+			EXPORT  pre_hard_fault_handler         
+			movs r0,#6*0
+			b isr1
+			nop
+			ENDP
+		
+pre_svc_handler PROC
+			EXPORT  pre_svc_handler         
+			movs r0,#6*1
+			b isr1
+			nop
+			ENDP
+
+pre_pendsv_handler PROC
+			EXPORT  pre_pendsv_handler      
+			movs r0,#6*2
+			b isr1
+			nop
+			ENDP
+		
+pre_systick 	PROC
+			EXPORT pre_systick 
+			movs r0,#6*3
+			b isr1
+			nop
+			ENDP
+		
+irq0 		PROC
+			EXPORT irq0
+			movs r0,#4*0
+			b isr
+			ENDP
+				
+irq1 		PROC
+			EXPORT irq1
+			movs r0,#4*1
+			b isr
+			ENDP
+				
+irq2 		PROC
+			EXPORT irq2
+			movs r0,#4*2
+			b isr
+			ENDP
+				
+irq3 		PROC
+			EXPORT irq3
+			movs r0,#4*3
+			b isr
+			ENDP
+
+irq4 		PROC
+			EXPORT irq4
+			movs r0,#4*4
+			b isr
+			ENDP
+				
+irq5 		PROC
+			EXPORT irq5
+			movs r0,#4*5
+			b isr
+			ENDP
+				
+irq6 		PROC
+			EXPORT irq6
+			movs r0,#4*6
+			b isr
+			ENDP
+				
+irq7 		PROC
+			EXPORT irq7
+			movs r0,#4*7
+			b isr
+			ENDP
+
+irq8 		PROC
+			EXPORT irq8
+			movs r0,#4*8
+			b isr
+			ENDP
+				
+irq9 		PROC
+			EXPORT irq9
+			movs r0,#4*9
+			b isr
+			ENDP
+				
+irq10 		PROC
+			EXPORT irq10
+			movs r0,#4*10
+			b isr
+			ENDP
+				
+irq11 		PROC
+			EXPORT irq11
+			movs r0,#4*11
+			b isr
+			ENDP
+
+irq12 		PROC
+			EXPORT irq12
+			movs r0,#4*12
+			b isr
+			ENDP
+				
+irq13 		PROC
+			EXPORT irq13
+			movs r0,#4*13
+			b isr
+			ENDP
+				
+irq14 		PROC
+			EXPORT irq14
+			movs r0,#4*14
+			b isr
+			ENDP
+				
+irq15 		PROC
+			EXPORT irq15
+			movs r0,#4*15
+			b isr
+			ENDP
+				
+irq16 		PROC
+			EXPORT irq16
+			movs r0,#4*16
+			b isr
+			ENDP
+				
+irq17 		PROC
+			EXPORT irq17
+			movs r0,#4*17
+			b isr
+			ENDP
+				
+irq18 		PROC
+			EXPORT irq18
+			movs r0,#4*18
+			b isr
+			ENDP
+				
+irq19 		PROC
+			EXPORT irq19
+			movs r0,#4*19
+			b isr
+			ENDP
+
+irq20 		PROC
+			EXPORT irq20
+			movs r0,#4*20
+			b isr
+			ENDP
+				
+irq21 		PROC
+			EXPORT irq21
+			movs r0,#4*21
+			b isr
+			ENDP
+				
+irq22 		PROC
+			EXPORT irq22
+			movs r0,#4*22
+			b isr
+			ENDP
+				
+irq23 		PROC
+			EXPORT irq23
+			movs r0,#4*23
+			b isr
+			ENDP
+
+irq24 		PROC
+			EXPORT irq24
+			movs r0,#4*24
+			b isr
+			ENDP
+				
+irq25 		PROC
+			EXPORT irq25
+			movs r0,#4*25
+			b isr
+			ENDP
+				
+irq26 		PROC
+			EXPORT irq26
+			movs r0,#4*26
+			b isr
+			ENDP
+				
+irq27 		PROC
+			EXPORT irq27
+			movs r0,#4*27
+			b isr
+			ENDP
+
+irq28 		PROC
+			EXPORT irq28
+			movs r0,#4*28
+			b isr
+			ENDP
+				
+irq29 		PROC
+			EXPORT irq29
+			movs r0,#4*29
+			b isr
+			ENDP
+				
+irq30		PROC
+			EXPORT irq30
+			movs r0,#4*30
+			b isr
+			ENDP
+				
+irq31 		PROC
+			EXPORT irq31
+			movs r0,#4*31
+			b isr
+			ENDP				
+				
+hard_fault_handler PROC
+			EXPORT  hard_fault_handler         
+			ldr r0,=HARD_FAULT_IRQHandler
+			bx r0
+			nop
+			ENDP
+		
+svc_handler PROC
+			EXPORT  svc_handler         
+			ldr r0,=SVC_IRQHandler
+			bx r0
+			nop
+			ENDP
+
+pendsv_handler PROC
+			EXPORT  pendsv_handler      
+			ldr r0,=PENDSV_IRQHandler
+			bx r0
+			nop
+			ENDP
+		
+systick 	PROC
+			EXPORT systick 
+			ldr r0,=SYSTICK_IRQHandler
+			bx r0
+			nop
+			ENDP
+
+
+isr1		PROC
+			LDR R1,= ENABLEAPP
+			LDR R1,[R1]
+			LDR R1,[R1]
+			CMP R1,#2
+			BNE isr1_app
+			LDR R1,=hard_fault_handler
+			ADDS R0,R0,R1
+			BX R0
+			ENDP
+isr1_app	PROC
+			LDR R1,= APPSTARTADDR
+			LDR R1,[R1]
+			ADDS R1,#4
+			ADDS R1,R1,R0
+			BX R1
+			ENDP
+
+				
+isr    		PROC
+			LDR R1,= ENABLEAPP
+			LDR R1,[R1]
+			LDR R1,[R1]
+			CMP R1,#2
+			BNE isr_app 			
+			ldr r1,=isr_table
+			ldr r0,[r0, r1]
+			bx r0
+			ENDP
+				
+isr_app     PROC
+			LDR R1,= APPSTARTADDR
+			LDR R1,[R1]
+			ADDS R1,#156
+			BX R1
+			nop
+			ENDP
+					
+ENABLEAPP	    DCD 0x000f8564
+APPSTARTADDR 	DCD 0x01020001
+	
+start_app   PROC
+            EXPORT  start_app
+			LDR     R0,= ENABLEAPP
+			LDR     R0,[R0]
+			MOVS    R1,#1
+			STR     R1,[R0]
+			LDR     R0,= APPSTARTADDR
+			LDR     R0,[R0]
+            BX      R0
+			nop
+            ENDP
+
+disable_app PROC
+			EXPORT  disable_app
+			LDR 	R1,= ENABLEAPP
+			LDR 	R1,[R1]
+			MOVS    R0,#2
+			STR		R0,[R1]
+			bx 		LR
+			NOP
+			ENDP
+
+	
+
+
+
+
+				ALIGN	
+NMI_IRQHandler  		PROC
+						EXPORT      NMI_IRQHandler				[WEAK]
+						B	.
+						ENDP
+
+HARD_FAULT_IRQHandler   PROC
+						EXPORT      HARD_FAULT_IRQHandler		[WEAK]
+						B	.
+						ENDP
+
+SVC_IRQHandler   		PROC
+						EXPORT      SVC_IRQHandler				[WEAK]
+						B	.
+						ENDP
+
+PENDSV_IRQHandler   	PROC
+						EXPORT      PENDSV_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+SYSTICK_IRQHandler   	PROC
+						EXPORT      SYSTICK_IRQHandler			[WEAK]
+						B	.
+						ENDP
+					
+EXTI0_IRQHandler   		PROC
+						EXPORT      EXTI0_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI1_IRQHandler   		PROC
+						EXPORT      EXTI1_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI2_IRQHandler   		PROC
+						EXPORT      EXTI2_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI3_IRQHandler   		PROC
+						EXPORT      EXTI3_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI4_IRQHandler   		PROC
+						EXPORT      EXTI4_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI5_IRQHandler   		PROC
+						EXPORT      EXTI5_IRQHandler			[WEAK]
+						B	.
+						ENDP	
+					
+Default_Handler PROC
+; ToDo:  Add here the export definition for the device specific external interrupts handler
+                EXPORT		USB_IRQHandler	 	[WEAK]
+				EXPORT		IIC_IRQHandler   	[WEAK]
+				EXPORT		QSPI_IRQHandler  	[WEAK]
+				EXPORT		SPI0_IRQHandler  	[WEAK]
+				EXPORT		SPI1_IRQHandler  	[WEAK]
+				EXPORT		UART0_IRQHandler 	[WEAK]
+				EXPORT		UART1_IRQHandler 	[WEAK]
+				EXPORT 		MEMCP_IRQHandler 	[WEAK]				
+				EXPORT		RSA_IRQHandler   	[WEAK]
+				EXPORT		SCI0_IRQHandler  	[WEAK]
+				EXPORT		SCI1_IRQHandler  	[WEAK]
+				EXPORT		BT_IRQHandler 		[WEAK]
+				EXPORT		GPIO_IRQHandler    	[WEAK]
+				EXPORT		TIMER0_IRQHandler	[WEAK]
+				EXPORT		TIMER1_IRQHandler	[WEAK]
+				EXPORT		TIMER2_IRQHandler	[WEAK]
+				EXPORT		TIMER3_IRQHandler	[WEAK]
+				EXPORT		TIMER4_IRQHandler	[WEAK]
+				EXPORT		TIMER5_IRQHandler	[WEAK]
+				EXPORT		TIMER6_IRQHandler	[WEAK]
+				EXPORT		TIMER7_IRQHandler	[WEAK]
+				EXPORT		TIMER8_IRQHandler 	[WEAK]
+				EXPORT		SM4_IRQHandler   	[WEAK]	
+				EXPORT		SEC_IRQHandler		[WEAK]	
+				EXPORT		MSR_IRQHandler		[WEAK]	
+				EXPORT		TRNG_IRQHandler		[WEAK]	
+				EXPORT 		WDT_IRQHandler		[WEAK]
+
+; ToDo:  Add here the names for the device specific external interrupts handler
+USB_IRQHandler	 	
+IIC_IRQHandler   	
+QSPI_IRQHandler  	
+SPI0_IRQHandler  	
+SPI1_IRQHandler  	
+UART0_IRQHandler 	
+UART1_IRQHandler 	
+MEMCP_IRQHandler 	
+RSA_IRQHandler   	
+SCI0_IRQHandler  	
+SCI1_IRQHandler  	
+BT_IRQHandler 		
+GPIO_IRQHandler    	
+TIMER0_IRQHandler	
+TIMER1_IRQHandler	
+TIMER2_IRQHandler	
+TIMER3_IRQHandler	
+TIMER4_IRQHandler	
+TIMER5_IRQHandler	
+TIMER6_IRQHandler	
+TIMER7_IRQHandler	
+TIMER8_IRQHandler 	
+SM4_IRQHandler   	
+SEC_IRQHandler		
+MSR_IRQHandler		
+TRNG_IRQHandler		
+WDT_IRQHandler		
+                B       .
+                ENDP
+					
+					
+					
+			EXPORT isr_table				
+isr_table	DCD     USB_IRQHandler	 
+			DCD 	IIC_IRQHandler   
+			DCD 	QSPI_IRQHandler  
+			DCD 	SPI0_IRQHandler  
+			DCD 	SPI1_IRQHandler  
+			DCD 	UART0_IRQHandler 
+			DCD 	UART1_IRQHandler 
+			DCD 	MEMCP_IRQHandler 
+			DCD 	RSA_IRQHandler   
+			DCD 	SCI0_IRQHandler  
+			DCD 	SCI1_IRQHandler  
+			DCD 	BT_IRQHandler 
+			DCD 	GPIO_IRQHandler         
+			DCD 	TIMER0_IRQHandler
+			DCD 	TIMER1_IRQHandler
+			DCD 	TIMER2_IRQHandler
+			DCD 	TIMER3_IRQHandler
+			DCD 	TIMER4_IRQHandler
+			DCD 	TIMER5_IRQHandler
+			DCD 	TIMER6_IRQHandler
+			DCD 	TIMER7_IRQHandler
+			DCD 	TIMER8_IRQHandler 
+			DCD 	SM4_IRQHandler   
+			DCD 	SEC_IRQHandler
+			DCD 	MSR_IRQHandler
+			DCD 	TRNG_IRQHandler
+			DCD 	WDT_IRQHandler
+			END
+			
+			
+
+
+
+		
+
+
Index: BT_doublebyte/sdk/Librarier/startup/boot_flash_start_gcc.s
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/boot_flash_start_gcc.s	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/boot_flash_start_gcc.s	(working copy)
@@ -0,0 +1,394 @@
+        .org 0x200
+        .global Reset_Handler,hard_fault_handler,svc_handler,pendsv_handler,systick,start_app,disable_app,irq0,irq1,irq2,irq3,irq4,irq5,irq6,irq7,irq8,irq9,irq10,irq11,irq12,irq13,irq14,irq15,irq16,irq17,irq18,irq19,irq20,irq21,irq22,irq23,irq24,irq25,irq26,irq27,irq28,irq29,irq30,irq31
+
+        .long
+
+
+Reset_Handler:
+        ldr r0,=hardware_init
+        bx r0
+        .thumb_func
+
+pre_hard_fault_handler:
+        movs r0,#6*0
+        b isr1
+        nop
+        .thumb_func
+
+pre_svc_handler:
+        movs r0,#6*1
+        b isr1
+        nop
+        .thumb_func
+
+pre_pendsv_handler:
+        movs r0,#6*2
+        b isr1
+        nop
+        .thumb_func
+pre_systick:
+        movs r0,#6*3
+        b isr1
+        nop
+        .thumb_func
+irq0:
+        mov r0,#4*0
+        b isr
+        .thumb_func
+irq1:
+        mov r0,#4*1
+        b isr
+        .thumb_func
+irq2:
+        mov r0,#4*2
+        b isr
+        .thumb_func
+irq3:
+        mov r0,#4*3
+        b isr
+        .thumb_func
+irq4:
+        mov r0,#4*4
+        b isr
+        .thumb_func
+irq5:
+        mov r0,#4*5
+        b isr
+        .thumb_func
+irq6:
+        mov r0,#4*6
+        b isr
+        .thumb_func
+irq7:
+        mov r0,#4*7
+        b isr
+        .thumb_func
+irq8:
+        mov r0,#4*8
+        b isr
+        .thumb_func
+irq9:
+        mov r0,#4*9
+        b isr
+        .thumb_func
+irq10:
+        mov r0,#4*10
+        b isr
+        .thumb_func
+irq11:
+        mov r0,#4*11
+        b isr
+        .thumb_func
+irq12:
+        mov r0,#4*12
+        b isr
+        .thumb_func
+irq13:
+        mov r0,#4*13
+        b isr
+        .thumb_func
+irq14:
+        mov r0,#4*14
+        b isr
+        .thumb_func
+irq15:
+        mov r0,#4*15
+        b isr
+        .thumb_func
+irq16:
+        mov r0,#4*16
+        b isr
+        .thumb_func
+irq17:
+        mov r0,#4*17
+        b isr
+        .thumb_func
+irq18:
+        mov r0,#4*18
+        b isr
+        .thumb_func
+irq19:
+        mov r0,#4*19
+        b isr
+        .thumb_func
+irq20:
+        mov r0,#4*20
+        b isr
+        .thumb_func
+irq21:
+        mov r0,#4*21
+        b isr
+        .thumb_func
+irq22:	mov r0,#4*22
+        b isr
+        .thumb_func
+irq23:
+        mov r0,#4*23
+        b isr
+        .thumb_func
+irq24:
+        mov r0,#4*24
+        b isr
+        .thumb_func
+irq25:	mov r0,#4*25
+        b isr
+        .thumb_func
+irq26:
+        mov r0,#4*26
+        b isr
+        .thumb_func
+irq27:
+        mov r0,#4*27
+        b isr
+        .thumb_func
+irq28:
+        mov r0,#4*28
+        b isr
+        .thumb_func
+irq29:
+        mov r0,#4*29
+        b isr
+        .thumb_func
+irq30:
+        mov r0,#4*30
+        b isr
+        .thumb_func
+irq31:
+        mov r0,#4*31
+        b isr
+        .thumb_func
+
+hard_fault_handler:
+        ldr r0,=HARD_FAULT_IRQHandler
+        bx r0
+        nop
+        .thumb_func
+
+svc_handler:
+        ldr r0,=SVC_IRQHandler
+        bx r0
+        nop
+        .thumb_func
+
+pendsv_handler:
+        ldr r0,=PENDSV_IRQHandler
+        bx r0
+        nop
+        .thumb_func
+systick:
+        ldr r0,=SYSTICK_IRQHandler
+        bx r0
+        nop
+        .thumb_func
+
+isr1:
+        ldr r1,= ENABLEAPP
+        ldr r1,[r1]
+        ldr r1,[r1]
+        cmp r1,#2
+        bne isr1_app
+        ldr r1,=hard_fault_handler
+        add r0,r0,r1
+        bx r0
+        .thumb_func
+
+isr1_app:
+        ldr r1,= APPSTARTADDR
+        ldr r1,[r1]
+        add r1,#4
+        add r1,r1,r0
+        bx r1
+        .thumb_func
+
+
+
+isr:
+        ldr r1,= ENABLEAPP
+        ldr r1,[r1]
+        ldr r1,[r1]
+        cmp r1,#2
+        bne isr_app
+        ldr r1,=isr_table
+        ldr r0,[r0, r1]
+        bx r0
+        .thumb_func
+
+isr_app:
+        ldr r1,= APPSTARTADDR
+        ldr r1,[r1]
+        add r1,#156
+        bx r1
+        nop
+        .thumb_func
+
+start_app:
+        ldr r0,= ENABLEAPP
+        ldr r0,[r0]
+        movs r1,#1
+        str r1,[r0]
+        ldr r0,= APPSTARTADDR
+        ldr r0,[r0]
+        bx r0
+        nop
+        .thumb_func
+
+disable_app:
+        ldr r1,= ENABLEAPP
+        ldr r1,[r1]
+        movs r0,#2
+        str r0,[r1]
+        bx LR
+        nop
+
+
+ENABLEAPP:       .long 0x000f8564
+APPSTARTADDR:    .long 0x01020001
+
+    .align 4
+isr_table:
+        .long USB_IRQHandler
+        .long IIC_IRQHandler
+        .long QSPI_IRQHandler
+        .long SPI0_IRQHandler
+        .long SPI1_IRQHandler
+        .long UART0_IRQHandler
+        .long UART1_IRQHandler
+        .long MEMCP_IRQHandler
+        .long RSA_IRQHandler
+        .long SCI0_IRQHandler
+        .long SCI1_IRQHandler
+        .long BT_IRQHandler
+        .long GPIO_IRQHandler
+        .long TIMER0_IRQHandler
+        .long TIMER1_IRQHandler
+        .long TIMER2_IRQHandler
+        .long TIMER3_IRQHandler
+        .long TIMER4_IRQHandler
+        .long TIMER5_IRQHandler
+        .long TIMER6_IRQHandler
+        .long TIMER7_IRQHandler
+        .long TIMER8_IRQHandler
+        .long SM4_IRQHandler
+        .long SEC_IRQHandler
+        .long MSR_IRQHandler
+        .long TRNG_IRQHandler
+        .long WDT_IRQHandler
+
+        .thumb
+        .thumb_func
+hardware_init:
+        ldr	r1, =__exidx_start
+        ldr	r2, =__data_start__
+        ldr	r3, =__data_end__
+
+        sub	r3, r2
+        ble	.L_loop1_done
+
+    .L_loop1:
+        sub	r3, #4
+        ldr	r0, [r1,r3]
+        str	r0, [r2,r3]
+        bgt	.L_loop1
+
+    .L_loop1_done:
+
+
+
+    /*  Single BSS section scheme.
+     *
+     *  The BSS section is specified by following symbols
+     *    _sbss: start of the BSS section.
+     *    _ebss: end of the BSS section.
+     *
+     *  Both addresses must be aligned to 4 bytes boundary.
+     */
+        ldr	r1, =__bss_start__
+        ldr	r2, =__bss_end__
+
+        mov	r0, #0
+
+        sub	r2, r1
+        ble	.L_loop3_done
+
+    .L_loop3:
+        sub	r2, #4
+        str	r0, [r1, r2]
+        bgt	.L_loop3
+    .L_loop3_done:
+        ldr	r0,=0x12345
+        ldr	r3,=0x1111
+        bl	main
+
+
+        .globl delay
+        .syntax unified
+delay:
+        subs r0,#1
+        bne delay
+        nop
+        bx lr
+
+
+
+
+
+
+
+.align	1
+.thumb_func
+.weak	Default_Handler
+.type	Default_Handler, %function
+
+Default_Handler:
+    b	.
+    .size	Default_Handler, . - Default_Handler
+
+/*    Macro to define default handlers. Default handler
+ *    will be weak symbol and just dead loops. They can be
+ *    overwritten by other handlers */
+
+    .macro	def_irq_handler	handler_name
+    .weak	\handler_name
+    .set	\handler_name, Default_Handler
+    .endm
+
+    def_irq_handler HARD_FAULT_IRQHandler
+    def_irq_handler SVC_IRQHandler
+    def_irq_handler PENDSV_IRQHandler
+    def_irq_handler SYSTICK_IRQHandler
+    def_irq_handler	USB_IRQHandler
+    def_irq_handler	IIC_IRQHandler
+    def_irq_handler	QSPI_IRQHandler
+    def_irq_handler	SPI0_IRQHandler
+    def_irq_handler	SPI1_IRQHandler
+    def_irq_handler	UART0_IRQHandler
+    def_irq_handler	UART1_IRQHandler
+    def_irq_handler MEMCP_IRQHandler
+    def_irq_handler RSA_IRQHandler
+    def_irq_handler SCI0_IRQHandler
+    def_irq_handler SCI1_IRQHandler
+    def_irq_handler BT_IRQHandler
+    def_irq_handler GPIO_IRQHandler
+    def_irq_handler EXTI0_IRQHandler
+    def_irq_handler EXTI1_IRQHandler
+    def_irq_handler EXTI2_IRQHandler
+    def_irq_handler TIMER0_IRQHandler
+    def_irq_handler TIMER1_IRQHandler
+    def_irq_handler TIMER2_IRQHandler
+    def_irq_handler TIMER3_IRQHandler
+    def_irq_handler TIMER4_IRQHandler
+    def_irq_handler TIMER5_IRQHandler
+    def_irq_handler TIMER6_IRQHandler
+    def_irq_handler TIMER7_IRQHandler
+    def_irq_handler TIMER8_IRQHandler
+    def_irq_handler SM4_IRQHandler
+    def_irq_handler SEC_IRQHandler
+    def_irq_handler MSR_IRQHandler
+    def_irq_handler TRNG_IRQHandler
+    def_irq_handler WDT_IRQHandler
+
+
+
+
+
+
Index: BT_doublebyte/sdk/Librarier/startup/flash_start.s
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/flash_start.s	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/flash_start.s	(working copy)
@@ -0,0 +1,393 @@
+			AREA    |.flash_start|, CODE, READONLY  ,ALIGN=4
+
+Reset_Handler PROC
+			EXPORT  Reset_Handler
+			IMPORT  __main
+			LDR 	R0, =__main
+			BX 		R0
+			ENDP	
+
+
+hard_fault_handler PROC
+			EXPORT  hard_fault_handler 
+			ldr r0,=HARD_FAULT_IRQHandler       
+			bx r0
+			nop
+			ENDP
+		
+svc_handler PROC
+			EXPORT  svc_handler         
+			ldr r0,=SVC_IRQHandler
+			bx r0
+			nop
+			ENDP
+
+pendsv_handler PROC
+			EXPORT  pendsv_handler      
+			ldr r0,=PENDSV_IRQHandler
+			bx r0
+			nop
+			ENDP
+		
+systick 	PROC
+			EXPORT systick 
+			ldr r0,=SYSTICK_IRQHandler
+			bx r0
+			nop
+			ENDP
+		
+irq0 		PROC
+			EXPORT irq0
+			movs r0,#4*0
+			b isr
+			ENDP
+				
+irq1 		PROC
+			EXPORT irq1
+			movs r0,#4*1
+			b isr
+			ENDP
+				
+irq2 		PROC
+			EXPORT irq2
+			movs r0,#4*2
+			b isr
+			ENDP
+				
+irq3 		PROC
+			EXPORT irq3
+			movs r0,#4*3
+			b isr
+			ENDP
+
+irq4 		PROC
+			EXPORT irq4
+			movs r0,#4*4
+			b isr
+			ENDP
+				
+irq5 		PROC
+			EXPORT irq5
+			movs r0,#4*5
+			b isr
+			ENDP
+				
+irq6 		PROC
+			EXPORT irq6
+			movs r0,#4*6
+			b isr
+			ENDP
+				
+irq7 		PROC
+			EXPORT irq7
+			movs r0,#4*7
+			b isr
+			ENDP
+
+irq8 		PROC
+			EXPORT irq8
+			movs r0,#4*8
+			b isr
+			ENDP
+				
+irq9 		PROC
+			EXPORT irq9
+			movs r0,#4*9
+			b isr
+			ENDP
+				
+irq10 		PROC
+			EXPORT irq10
+			movs r0,#4*10
+			b isr
+			ENDP
+				
+irq11 		PROC
+			EXPORT irq11
+			movs r0,#4*11
+			b isr
+			ENDP
+
+irq12 		PROC
+			EXPORT irq12
+			movs r0,#4*12
+			b isr
+			ENDP
+				
+irq13 		PROC
+			EXPORT irq13
+			movs r0,#4*13
+			b isr
+			ENDP
+				
+irq14 		PROC
+			EXPORT irq14
+			movs r0,#4*14
+			b isr
+			ENDP
+				
+irq15 		PROC
+			EXPORT irq15
+			movs r0,#4*15
+			b isr
+			ENDP
+				
+irq16 		PROC
+			EXPORT irq16
+			movs r0,#4*16
+			b isr
+			ENDP
+				
+irq17 		PROC
+			EXPORT irq17
+			movs r0,#4*17
+			b isr
+			ENDP
+				
+irq18 		PROC
+			EXPORT irq18
+			movs r0,#4*18
+			b isr
+			ENDP
+				
+irq19 		PROC
+			EXPORT irq19
+			movs r0,#4*19
+			b isr
+			ENDP
+
+irq20 		PROC
+			EXPORT irq20
+			movs r0,#4*20
+			b isr
+			ENDP
+				
+irq21 		PROC
+			EXPORT irq21
+			movs r0,#4*21
+			b isr
+			ENDP
+				
+irq22 		PROC
+			EXPORT irq22
+			movs r0,#4*22
+			b isr
+			ENDP
+				
+irq23 		PROC
+			EXPORT irq23
+			movs r0,#4*23
+			b isr
+			ENDP
+
+irq24 		PROC
+			EXPORT irq24
+			movs r0,#4*24
+			b isr
+			ENDP
+				
+irq25 		PROC
+			EXPORT irq25
+			movs r0,#4*25
+			b isr
+			ENDP
+				
+irq26 		PROC
+			EXPORT irq26
+			movs r0,#4*26
+			b isr
+			ENDP
+				
+irq27 		PROC
+			EXPORT irq27
+			movs r0,#4*27
+			b isr
+			ENDP
+
+irq28 		PROC
+			EXPORT irq28
+			movs r0,#4*28
+			b isr
+			ENDP
+				
+irq29 		PROC
+			EXPORT irq29
+			movs r0,#4*29
+			b isr
+			ENDP
+				
+irq30		PROC
+			EXPORT irq30
+			movs r0,#4*30
+			b isr
+			ENDP
+				
+irq31 		PROC
+			EXPORT irq31
+			movs r0,#4*31
+			b isr
+			ENDP				
+				
+
+isr    		PROC
+			ldr r1,=isr_table
+			ldr r0,[r0, r1]
+			bx r0
+			ENDP
+					
+				ALIGN	
+NMI_IRQHandler  		PROC
+						EXPORT      NMI_IRQHandler				[WEAK]
+						B	.
+						ENDP
+
+HARD_FAULT_IRQHandler   PROC
+						EXPORT      HARD_FAULT_IRQHandler		[WEAK]
+						B	.
+						ENDP
+
+SVC_IRQHandler   		PROC
+						EXPORT      SVC_IRQHandler				[WEAK]
+						B	.
+						ENDP
+
+PENDSV_IRQHandler   	PROC
+						EXPORT      PENDSV_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+SYSTICK_IRQHandler   	PROC
+						EXPORT      SYSTICK_IRQHandler			[WEAK]
+						B	.
+						ENDP
+					
+EXTI0_IRQHandler   		PROC
+						EXPORT      EXTI0_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI1_IRQHandler   		PROC
+						EXPORT      EXTI1_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI2_IRQHandler   		PROC
+						EXPORT      EXTI2_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI3_IRQHandler   		PROC
+						EXPORT      EXTI3_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI4_IRQHandler   		PROC
+						EXPORT      EXTI4_IRQHandler			[WEAK]
+						B	.
+						ENDP
+							
+EXTI5_IRQHandler   		PROC
+						EXPORT      EXTI5_IRQHandler			[WEAK]
+						B	.
+						ENDP	
+					
+Default_Handler PROC
+; ToDo:  Add here the export definition for the device specific external interrupts handler
+                EXPORT		USB_IRQHandler	 	[WEAK]
+				EXPORT		IIC_IRQHandler   	[WEAK]
+				EXPORT		QSPI_IRQHandler  	[WEAK]
+				EXPORT		SPI0_IRQHandler  	[WEAK]
+				EXPORT		SPI1_IRQHandler  	[WEAK]
+				EXPORT		UART0_IRQHandler 	[WEAK]
+				EXPORT		UART1_IRQHandler 	[WEAK]
+				EXPORT 		MEMCP_IRQHandler 	[WEAK]				
+				EXPORT		RSA_IRQHandler   	[WEAK]
+				EXPORT		SCI0_IRQHandler  	[WEAK]
+				EXPORT		SCI1_IRQHandler  	[WEAK]
+				EXPORT		BT_IRQHandler 		[WEAK]
+				EXPORT		GPIO_IRQHandler    	[WEAK]
+				EXPORT		TIMER0_IRQHandler	[WEAK]
+				EXPORT		TIMER1_IRQHandler	[WEAK]
+				EXPORT		TIMER2_IRQHandler	[WEAK]
+				EXPORT		TIMER3_IRQHandler	[WEAK]
+				EXPORT		TIMER4_IRQHandler	[WEAK]
+				EXPORT		TIMER5_IRQHandler	[WEAK]
+				EXPORT		TIMER6_IRQHandler	[WEAK]
+				EXPORT		TIMER7_IRQHandler	[WEAK]
+				EXPORT		TIMER8_IRQHandler 	[WEAK]
+				EXPORT		SM4_IRQHandler   	[WEAK]	
+				EXPORT		SEC_IRQHandler		[WEAK]	
+				EXPORT		MSR_IRQHandler		[WEAK]	
+				EXPORT		TRNG_IRQHandler		[WEAK]	
+				EXPORT 		WDT_IRQHandler		[WEAK]
+
+; ToDo:  Add here the names for the device specific external interrupts handler
+USB_IRQHandler	 	
+IIC_IRQHandler   	
+QSPI_IRQHandler  	
+SPI0_IRQHandler  	
+SPI1_IRQHandler  	
+UART0_IRQHandler 	
+UART1_IRQHandler 	
+MEMCP_IRQHandler 	
+RSA_IRQHandler   	
+SCI0_IRQHandler  	
+SCI1_IRQHandler  	
+BT_IRQHandler 		
+GPIO_IRQHandler    	
+TIMER0_IRQHandler	
+TIMER1_IRQHandler	
+TIMER2_IRQHandler	
+TIMER3_IRQHandler	
+TIMER4_IRQHandler	
+TIMER5_IRQHandler	
+TIMER6_IRQHandler	
+TIMER7_IRQHandler	
+TIMER8_IRQHandler 	
+SM4_IRQHandler   	
+SEC_IRQHandler		
+MSR_IRQHandler		
+TRNG_IRQHandler		
+WDT_IRQHandler		
+                B       .
+                ENDP
+					
+					
+					
+			EXPORT isr_table				
+isr_table	DCD     USB_IRQHandler	 
+			DCD 	IIC_IRQHandler   
+			DCD 	QSPI_IRQHandler  
+			DCD 	SPI0_IRQHandler  
+			DCD 	SPI1_IRQHandler  
+			DCD 	UART0_IRQHandler 
+			DCD 	UART1_IRQHandler 
+			DCD 	MEMCP_IRQHandler 
+			DCD 	RSA_IRQHandler   
+			DCD 	SCI0_IRQHandler  
+			DCD 	SCI1_IRQHandler  
+			DCD 	BT_IRQHandler 
+			DCD 	GPIO_IRQHandler         
+			DCD 	TIMER0_IRQHandler
+			DCD 	TIMER1_IRQHandler
+			DCD 	TIMER2_IRQHandler
+			DCD 	TIMER3_IRQHandler
+			DCD 	TIMER4_IRQHandler
+			DCD 	TIMER5_IRQHandler
+			DCD 	TIMER6_IRQHandler
+			DCD 	TIMER7_IRQHandler
+			DCD 	TIMER8_IRQHandler 
+			DCD 	SM4_IRQHandler   
+			DCD 	SEC_IRQHandler
+			DCD 	MSR_IRQHandler
+			DCD 	TRNG_IRQHandler
+			DCD 	WDT_IRQHandler
+			END
+			
+			
+
+
+
+		
+
+
Index: BT_doublebyte/sdk/Librarier/startup/flash_start_gcc.s
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/flash_start_gcc.s	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/flash_start_gcc.s	(working copy)
@@ -0,0 +1,318 @@
+		.org 0x200
+		.global Reset_Handler,hard_fault_handler,svc_handler,pendsv_handler,systick,irq0,irq1,irq2,irq3,irq4,irq5,irq6,irq7,irq8,irq9,irq10,irq11,irq12,irq13,irq14,irq15,irq16,irq17,irq18,irq19,irq20,irq21,irq22,irq23,irq24,irq25,irq26,irq27,irq28,irq29,irq30,irq31
+		
+		.long
+
+
+Reset_Handler:
+		ldr r0,=hardware_init
+		bx r0	
+		.thumb_func
+		
+hard_fault_handler:
+		ldr r0,=HARD_FAULT_IRQHandler       
+		bx r0
+		nop
+		.thumb_func
+		
+svc_handler:
+		ldr r0,=SVC_IRQHandler
+		bx r0
+		nop
+		.thumb_func
+
+pendsv_handler:
+		ldr r0,=PENDSV_IRQHandler
+		bx r0
+		nop
+		.thumb_func
+systick:
+		ldr r0,=SYSTICK_IRQHandler
+		bx r0
+		nop
+		.thumb_func
+irq0: 		
+		mov r0,#4*0
+		b isr
+		.thumb_func
+irq1: 		
+		mov r0,#4*1
+		b isr
+		.thumb_func
+irq2: 		
+		mov r0,#4*2
+		b isr
+		.thumb_func
+irq3: 		
+		mov r0,#4*3
+		b isr
+		.thumb_func
+irq4: 		
+		mov r0,#4*4
+		b isr
+		.thumb_func
+irq5: 		
+		mov r0,#4*5
+		b isr
+		.thumb_func
+irq6: 		
+		mov r0,#4*6
+		b isr
+		.thumb_func
+irq7: 		
+		mov r0,#4*7
+		b isr
+		.thumb_func
+irq8: 		
+		mov r0,#4*8
+		b isr
+		.thumb_func
+irq9: 		
+		mov r0,#4*9
+		b isr
+		.thumb_func
+irq10:	
+		mov r0,#4*10
+		b isr
+		.thumb_func
+irq11:	
+		mov r0,#4*11
+		b isr
+		.thumb_func
+irq12:	
+		mov r0,#4*12
+		b isr
+		.thumb_func
+irq13:	
+		mov r0,#4*13
+		b isr
+		.thumb_func
+irq14:	
+		mov r0,#4*14
+		b isr
+		.thumb_func
+irq15:	
+		mov r0,#4*15
+		b isr
+		.thumb_func
+irq16:	
+		mov r0,#4*16
+		b isr
+		.thumb_func
+irq17:	
+		mov r0,#4*17
+		b isr
+		.thumb_func
+irq18:	
+		mov r0,#4*18
+		b isr
+		.thumb_func
+irq19:	
+		mov r0,#4*19
+		b isr
+		.thumb_func
+irq20:	
+		mov r0,#4*20
+		b isr
+		.thumb_func
+irq21:	
+		mov r0,#4*21
+		b isr
+		.thumb_func
+irq22:	mov r0,#4*22
+		b isr
+		.thumb_func
+irq23:	
+		mov r0,#4*23
+		b isr
+		.thumb_func
+irq24:	
+		mov r0,#4*24
+		b isr
+		.thumb_func
+irq25:	mov r0,#4*25
+		b isr
+		.thumb_func
+irq26:	
+		mov r0,#4*26
+		b isr
+		.thumb_func
+irq27:	
+		mov r0,#4*27
+		b isr
+		.thumb_func
+irq28:	
+		mov r0,#4*28
+		b isr
+		.thumb_func
+irq29:	
+		mov r0,#4*29
+		b isr
+		.thumb_func
+irq30:	
+		mov r0,#4*30
+		b isr
+		.thumb_func
+irq31:	
+		mov r0,#4*31
+		b isr
+		.thumb_func
+
+		
+
+isr:
+		ldr r1,=isr_table
+		ldr r0,[r0, r1]
+		bx r0
+
+
+
+
+	.align 4
+isr_table:
+		.long USB_IRQHandler
+		.long IIC_IRQHandler
+		.long QSPI_IRQHandler
+		.long SPI0_IRQHandler
+		.long SPI1_IRQHandler
+		.long UART0_IRQHandler
+		.long UART1_IRQHandler
+		.long MEMCP_IRQHandler
+		.long RSA_IRQHandler
+		.long SCI0_IRQHandler
+		.long SCI1_IRQHandler
+		.long BT_IRQHandler
+		.long GPIO_IRQHandler
+		.long TIMER0_IRQHandler
+		.long TIMER1_IRQHandler
+		.long TIMER2_IRQHandler
+		.long TIMER3_IRQHandler
+		.long TIMER4_IRQHandler
+		.long TIMER5_IRQHandler
+		.long TIMER6_IRQHandler
+		.long TIMER7_IRQHandler
+		.long TIMER8_IRQHandler
+		.long SM4_IRQHandler
+		.long SEC_IRQHandler
+		.long MSR_IRQHandler
+		.long TRNG_IRQHandler
+		.long WDT_IRQHandler
+	
+		.thumb
+		.thumb_func
+hardware_init:
+		ldr	r1, =__exidx_start
+		ldr	r2, =__data_start__
+		ldr	r3, =__data_end__
+
+		sub	r3, r2
+		ble	.L_loop1_done
+
+	.L_loop1:
+		sub	r3, #4
+		ldr	r0, [r1,r3]
+		str	r0, [r2,r3]
+		bgt	.L_loop1
+
+	.L_loop1_done:
+
+
+
+	/*  Single BSS section scheme.
+	 *
+	 *  The BSS section is specified by following symbols
+	 *    _sbss: start of the BSS section.
+	 *    _ebss: end of the BSS section.
+	 *
+	 *  Both addresses must be aligned to 4 bytes boundary.
+	 */
+		ldr	r1, =__bss_start__
+		ldr	r2, =__bss_end__
+
+		mov	r0, #0
+
+		sub	r2, r1
+		ble	.L_loop3_done
+
+	.L_loop3:
+		sub	r2, #4
+		str	r0, [r1, r2]
+		bgt	.L_loop3
+	.L_loop3_done:
+		ldr	r0,=0x12345
+		ldr	r3,=0x1111
+		bl	main
+		
+		
+		.globl delay
+		.syntax unified
+delay:
+		subs r0,#1
+		bne delay
+		nop
+		bx lr
+
+
+		
+
+
+
+
+.align	1
+.thumb_func
+.weak	Default_Handler
+.type	Default_Handler, %function
+
+Default_Handler:
+	b	.
+	.size	Default_Handler, . - Default_Handler
+
+/*    Macro to define default handlers. Default handler
+ *    will be weak symbol and just dead loops. They can be
+ *    overwritten by other handlers */
+ 
+	.macro	def_irq_handler	handler_name
+	.weak	\handler_name
+	.set	\handler_name, Default_Handler
+	.endm
+	
+	def_irq_handler HARD_FAULT_IRQHandler
+	def_irq_handler SVC_IRQHandler
+	def_irq_handler PENDSV_IRQHandler
+	def_irq_handler SYSTICK_IRQHandler
+	def_irq_handler	USB_IRQHandler
+	def_irq_handler	IIC_IRQHandler
+	def_irq_handler	QSPI_IRQHandler
+	def_irq_handler	SPI0_IRQHandler
+	def_irq_handler	SPI1_IRQHandler
+	def_irq_handler	UART0_IRQHandler
+	def_irq_handler	UART1_IRQHandler
+	def_irq_handler MEMCP_IRQHandler
+	def_irq_handler RSA_IRQHandler
+	def_irq_handler SCI0_IRQHandler
+	def_irq_handler SCI1_IRQHandler
+	def_irq_handler BT_IRQHandler
+	def_irq_handler GPIO_IRQHandler
+	def_irq_handler EXTI0_IRQHandler
+	def_irq_handler EXTI1_IRQHandler
+	def_irq_handler EXTI2_IRQHandler
+	def_irq_handler TIMER0_IRQHandler
+	def_irq_handler TIMER1_IRQHandler
+	def_irq_handler TIMER2_IRQHandler
+	def_irq_handler TIMER3_IRQHandler
+  def_irq_handler TIMER4_IRQHandler
+  def_irq_handler TIMER5_IRQHandler
+  def_irq_handler TIMER6_IRQHandler
+  def_irq_handler TIMER7_IRQHandler
+  def_irq_handler TIMER8_IRQHandler
+  def_irq_handler SM4_IRQHandler
+  def_irq_handler SEC_IRQHandler
+  def_irq_handler MSR_IRQHandler
+  def_irq_handler TRNG_IRQHandler
+  def_irq_handler WDT_IRQHandler
+  
+
+
+
+	
+
Index: BT_doublebyte/sdk/Librarier/startup/flash_start_iar.s
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/flash_start_iar.s	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/flash_start_iar.s	(working copy)
@@ -0,0 +1,311 @@
+    MODULE ?cstartup
+
+    EXTERN __iar_program_start
+
+    SECTION CSTACK:DATA:NOROOT(3)
+
+    PUBLIC start_flash
+    SECTION .intvec:CODE:REORDER(2)
+start_flash
+    LDR R0, =hardware_init
+    BX R0
+
+    PUBLIC hard_fault_handler
+hard_fault_handler
+    BL HARD_FAULT_IRQHandler
+
+    PUBLIC svc_handler
+svc_handler
+    BL SVC_IRQHandler
+
+    PUBLIC pendsv_handler
+pendsv_handler
+    BL PENDSV_IRQHandler
+
+    PUBLIC systick
+systick
+    BL SYSTICK_IRQHandler
+
+    PUBLIC irq0
+irq0
+    movs r0,#0
+    b isr
+
+    PUBLIC irq1
+irq1
+    movs r0,#1
+    b isr
+
+    PUBLIC irq2
+irq2
+    movs r0,#2
+    b isr
+
+    PUBLIC irq3
+irq3
+    movs r0,#3
+    b isr
+
+    PUBLIC irq4
+irq4
+    movs r0,#4
+    b isr
+
+    PUBLIC irq5
+irq5
+    movs r0,#5
+    b isr
+
+    PUBLIC irq6
+irq6
+    movs r0,#6
+    b isr
+
+    PUBLIC irq7
+irq7
+    movs r0,#7
+    b isr
+
+    PUBLIC irq8
+irq8
+    movs r0,#8
+    b isr
+
+    PUBLIC irq9
+irq9
+    movs r0,#9
+    b isr
+
+    PUBLIC irq10
+irq10
+    movs r0,#10
+    b isr
+
+    PUBLIC irq11
+irq11
+    movs r0,#11
+    b isr
+
+    PUBLIC irq12
+irq12
+    movs r0,#12
+    b isr
+
+    PUBLIC irq13
+irq13
+    movs r0,#13
+    b isr
+
+    PUBLIC irq14
+irq14
+    movs r0,#14
+    b isr
+
+    PUBLIC irq15
+irq15
+    movs r0,#15
+    b isr
+
+    PUBLIC irq16
+irq16
+    movs r0,#16
+    b isr
+
+    PUBLIC irq17
+irq17
+    movs r0,#17
+    b isr
+
+    PUBLIC irq18
+irq18
+    movs r0,#18
+    b isr
+
+    PUBLIC irq19
+irq19
+    movs r0,#19
+    b isr
+
+    PUBLIC irq20
+irq20
+    movs r0,#20
+    b isr
+
+    PUBLIC irq21
+irq21
+    movs r0,#21
+    b isr
+
+    PUBLIC irq22
+irq22
+    movs r0,#22
+    b isr
+
+    PUBLIC irq23
+irq23
+    movs r0,#23
+    b isr
+
+    PUBLIC irq24
+irq24
+    movs r0,#24
+    b isr
+
+    PUBLIC irq25
+irq25
+    movs r0,#25
+    b isr
+
+    PUBLIC irq26
+irq26
+    movs r0,#26
+    b isr
+
+    PUBLIC irq27
+irq27
+    movs r0,#27
+    b isr
+
+    PUBLIC irq28
+irq28
+    movs r0,#28
+    b isr
+
+    PUBLIC irq29
+irq29
+    movs r0,#29
+    b isr
+
+    PUBLIC irq30
+irq30
+    movs r0,#30
+    b isr
+
+    PUBLIC irq31
+irq31
+    movs r0,#31
+    b isr
+
+    PUBLIC isr
+isr
+    ldr r1,=__vector_table
+    ldr r0,[r0, r1]
+    bx r0
+
+
+    PUBWEAK HARD_FAULT_IRQHandler
+    PUBWEAK SVC_IRQHandler
+    PUBWEAK PENDSV_IRQHandler
+    PUBWEAK SYSTICK_IRQHandler
+    PUBWEAK USB_IRQHandler
+    PUBWEAK IIC_IRQHandler
+    PUBWEAK QSPI_IRQHandler
+    PUBWEAK SPI0_IRQHandler
+    PUBWEAK SPI1_IRQHandler
+    PUBWEAK UART0_IRQHandler
+    PUBWEAK UART1_IRQHandler
+    PUBWEAK MEMCP_IRQHandler
+    PUBWEAK RSA_IRQHandler
+    PUBWEAK SCI0_IRQHandler
+    PUBWEAK SCI1_IRQHandler
+    PUBWEAK BT_IRQHandler
+    PUBWEAK GPIO_IRQHandler
+    PUBWEAK TIMER0_IRQHandler
+    PUBWEAK TIMER1_IRQHandler
+    PUBWEAK TIMER2_IRQHandler
+    PUBWEAK TIMER3_IRQHandler
+    PUBWEAK TIMER4_IRQHandler
+    PUBWEAK TIMER5_IRQHandler
+    PUBWEAK TIMER6_IRQHandler
+    PUBWEAK TIMER7_IRQHandler
+    PUBWEAK TIMER8_IRQHandler
+    PUBWEAK SM4_IRQHandler
+    PUBWEAK SEC_IRQHandler
+    PUBWEAK MSR_IRQHandler
+    PUBWEAK TRNG_IRQHandler
+    PUBWEAK WDT_IRQHandler
+
+
+HARD_FAULT_IRQHandler
+SVC_IRQHandler
+PENDSV_IRQHandler
+SYSTICK_IRQHandler
+
+USB_IRQHandler
+IIC_IRQHandler
+QSPI_IRQHandler
+SPI0_IRQHandler
+SPI1_IRQHandler
+UART0_IRQHandler
+UART1_IRQHandler
+MEMCP_IRQHandler
+RSA_IRQHandler
+SCI0_IRQHandler
+SCI1_IRQHandler
+BT_IRQHandler
+GPIO_IRQHandler
+TIMER0_IRQHandler
+TIMER1_IRQHandler
+TIMER2_IRQHandler
+TIMER3_IRQHandler
+TIMER4_IRQHandler
+TIMER5_IRQHandler
+TIMER6_IRQHandler
+TIMER7_IRQHandler
+TIMER8_IRQHandler
+SM4_IRQHandler
+SEC_IRQHandler
+MSR_IRQHandler
+TRNG_IRQHandler
+WDT_IRQHandler
+    B       .
+
+    PUBLIC delay
+delay
+    subs r0,#1
+    bne delay
+    nop
+    bx lr
+
+    PUBLIC __vector_table
+    ALIGNROM 2
+    data
+__vector_table
+    DCD USB_IRQHandler
+    DCD IIC_IRQHandler
+    DCD QSPI_IRQHandler
+    DCD SPI0_IRQHandler
+    DCD SPI1_IRQHandler
+    DCD UART0_IRQHandler
+    DCD UART1_IRQHandler
+    DCD MEMCP_IRQHandler
+    DCD RSA_IRQHandler
+    DCD SCI0_IRQHandler
+    DCD SCI1_IRQHandler
+    DCD BT_IRQHandler
+    DCD GPIO_IRQHandler
+    DCD TIMER0_IRQHandler
+    DCD TIMER1_IRQHandler
+    DCD TIMER2_IRQHandler
+    DCD TIMER3_IRQHandler
+    DCD TIMER4_IRQHandler
+    DCD TIMER5_IRQHandler
+    DCD TIMER6_IRQHandler
+    DCD TIMER7_IRQHandler
+    DCD TIMER8_IRQHandler
+    DCD SM4_IRQHandler
+    DCD SEC_IRQHandler
+    DCD MSR_IRQHandler
+    DCD TRNG_IRQHandler
+    DCD WDT_IRQHandler
+
+
+    PUBLIC hardware_init
+    SECTION .intvec:CODE:REORDER(2)
+    CODE
+hardware_init
+    LDR R0, =sfe(CSTACK)
+    mov	sp, R0
+    LDR R0, =__iar_program_start
+    BX 	R0
+    END
\ No newline at end of file
Index: BT_doublebyte/sdk/Librarier/startup/startup.s
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/startup.s	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/Librarier/startup/startup.s	(working copy)
@@ -0,0 +1,175 @@
+Stack_Size      EQU     0x0010000
+
+                AREA    STACK, NOINIT, READWRITE, ALIGN=4
+Stack_Mem       SPACE   Stack_Size
+__initial_sp    EQU		0x30000
+
+
+; <h> Heap Configuration
+;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Heap_Size       EQU     0x00000000
+                AREA    HEAP, NOINIT, READWRITE, ALIGN=4
+__heap_base
+Heap_Mem        SPACE   Heap_Size
+__heap_limit
+
+
+                PRESERVE8
+                THUMB
+
+				
+; Vector Table Mapped to Address 0 at Reset
+
+                AREA    RESET, DATA, READONLY
+				IMPORT systick	
+				IMPORT irq0 
+				IMPORT irq1 
+				IMPORT irq2 
+				IMPORT irq3 
+				IMPORT irq4 
+				IMPORT irq5 
+				IMPORT irq6 
+				IMPORT irq7 
+				IMPORT irq8 
+				IMPORT irq9 
+				IMPORT irq10
+				IMPORT irq11
+				IMPORT irq12
+				IMPORT irq13
+				IMPORT irq14
+				IMPORT irq15
+				IMPORT irq16
+				IMPORT irq17
+				IMPORT irq18
+				IMPORT irq19
+				IMPORT irq20
+				IMPORT irq21
+				IMPORT irq22
+				IMPORT irq23
+				IMPORT irq24
+				IMPORT irq25
+				IMPORT irq26
+				IMPORT irq27
+				IMPORT irq28
+				IMPORT irq29
+				IMPORT irq30
+				IMPORT irq31
+				IMPORT hard_fault_handler
+					
+                EXPORT  __Vectors
+                EXPORT  __Vectors_End
+                EXPORT  __Vectors_Size
+__Vectors       DCD     __initial_sp              ; Top of Stack
+                DCD     reset_handler             ; Reset Handler
+                DCD     nmi_handler               ; NMI Handler
+                DCD     hard_fault_handler        ; Hard Fault Handler					
+				DCD		0						  ;	
+				DCD		0						  ;
+				DCD		0						  ;
+				DCD		0						  ;
+				DCD		0						  ;
+				DCD		0						  ;
+				DCD		0						  ;
+				DCD		0						  ;
+				DCD		0						  ;
+				DCD		0						  ;
+				DCD		0						  ;
+				DCD		systick					  ;	
+				DCD		irq0                       ;
+				DCD		irq1                       ;
+				DCD		irq2                       ;
+				DCD		irq3                       ;
+				DCD		irq4                       ;
+				DCD		irq5                       ;
+				DCD		irq6                       ;
+				DCD		irq7                       ;
+				DCD		irq8                       ;
+				DCD		irq9                       ;
+				DCD		irq10                      ;
+				DCD		irq11                      ;
+				DCD		irq12                      ;
+				DCD		irq13                      ;
+				DCD		irq14                      ;
+				DCD		irq15                      ;
+				DCD		irq16                      ;
+				DCD		irq17                      ;
+				DCD		irq18                      ;
+				DCD		irq19                      ;
+				DCD		irq20                      ;
+				DCD		irq21                      ;
+				DCD		irq22                      ;
+				DCD		irq23                      ;
+				DCD		irq24                      ;
+				DCD		irq25                      ;
+				DCD		irq26                      ;
+				DCD		irq27                      ;
+				DCD		irq28                      ;
+				DCD		irq29                      ;
+				DCD		irq30                      ;
+				DCD		irq31                      ;
+__Vectors_End					
+					
+__Vectors_Size  EQU     __Vectors_End - __Vectors
+
+                AREA    |.text|, CODE, READONLY	,ALIGN=4				
+					
+					
+					
+; Reset Handler
+
+reset_handler   PROC
+                EXPORT  reset_handler             [WEAK]
+                IMPORT  Reset_Handler
+;				bl		Reset_Handler
+;				movs	r0,#0x3
+				
+				LDR 	R0, =Reset_Handler
+				BX 		R0
+				nop
+                ENDP					
+										
+					
+		
+delay			PROC
+				EXPORT delay
+				subs r0,#1
+				bne delay
+				nop
+				bx lr
+				ENDP
+
+nmi_handler		PROC
+				EXPORT  nmi_handler             [WEAK]
+				b nmi_handler
+				ENDP
+					
+				ALIGN
+
+
+; User Initial Stack & Heap
+
+                IF      :DEF:__MICROLIB
+                EXPORT  __initial_sp
+                EXPORT  __heap_base
+                EXPORT  __heap_limit
+					
+                ELSE
+
+                IMPORT  __use_two_region_memory
+                EXPORT  __user_initial_stackheap
+
+__user_initial_stackheap PROC
+                LDR     R0, =  Heap_Mem
+                LDR     R1, =(Stack_Mem + Stack_Size)
+                LDR     R2, = (Heap_Mem +  Heap_Size)
+                LDR     R3, = Stack_Mem
+                BX      LR
+                ENDP
+
+                ALIGN
+
+                ENDIF
+					
+				END		
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/GCC/c.bat
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/GCC/c.bat	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/GCC/c.bat	(working copy)
@@ -0,0 +1,3 @@
+cls
+make clean
+make
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/GCC/makefile
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/GCC/makefile	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/GCC/makefile	(working copy)
@@ -0,0 +1,236 @@
+
+ifeq ($(OS),Windows_NT)
+DIR = C:/gcc-arm-none-eabi-7-2018-q2-update-win32
+else
+DIR = /usr/gcc-arm-none-eabi-7-2018-q2-update
+endif
+
+ARCH = $(DIR)/bin/arm-none-eabi
+GCC = $(ARCH)-gcc
+LD = $(ARCH)-ld
+AS = $(ARCH)-as
+OBJCOPY = $(ARCH)-objcopy
+OBJDUMP = "$(ARCH)-objdump"
+LIB_PATH = ../../../../../Librarier
+USER_PATH = ../../user
+
+
+all : output/out.hex
+
+
+CORE_OBJS =  $(LIB_PATH)/startup/flash_start_gcc \
+             $(LIB_PATH)/core/system \
+             $(LIB_PATH)/core/bt_code \
+             $(LIB_PATH)/core/misc \
+             $(LIB_PATH)/sdk/yc_gpio \
+             $(LIB_PATH)/sdk/yc_uart \
+             $(LIB_PATH)/sdk/yc_lpm \
+             $(LIB_PATH)/sdk/yc_sysctrl \
+             $(LIB_PATH)/sdk/yc_bt \
+             $(LIB_PATH)/sdk/yc_systick \
+             $(LIB_PATH)/sdk/yc_ipc \
+             $(LIB_PATH)/sdk/yc_otp \
+             $(LIB_PATH)/sdk/yc_timer
+
+
+USER_OBJS = $(USER_PATH)/main
+
+
+OBJS = $(CORE_OBJS) $(USER_OBJS)
+
+INC_DIR = -I $(LIB_PATH)/core \
+          -I $(LIB_PATH)/sdk
+
+
+CFLAG =  -mthumb -mcpu=cortex-m0 -c -g -Os $(INC_DIR) $(DEF) -fno-toplevel-reorder -ffunction-sections -fdata-sections
+LDFLAG = -T output/ld.script -Map=output/memmap  $(LIB_PATH)/sdk/libyc_qspi.a -lc -lm -lgcc -L "$(DIR)/lib/gcc/arm-none-eabi/7.3.1/thumb/v6-m"  -L "$(DIR)/arm-none-eabi/lib/thumb/v6-m"
+
+define ldscript =
+/* Linker script to configure memory regions.
+ * Need modifying for a specific board.
+ *   FLASH.ORIGIN: starting address of flash
+ *   FLASH.LENGTH: length of flash
+ *   RAM.ORIGIN: starting address of RAM bank 0
+ *   RAM.LENGTH: length of RAM bank 0
+ */
+MEMORY
+{
+  FLASH (rx) : ORIGIN = 0x1000000, LENGTH = 0x80000 /* 512K */
+  RAM (rwx) : ORIGIN = 0x20000, LENGTH = 0x10000 /* 64K */
+}
+
+/* Linker script to place sections and symbol values. Should be used together
+ * with other linker script that defines memory regions FLASH and RAM.
+ * It references following symbols, which must be defined in code:
+ *   Reset_Handler : Entry of reset handler
+ *
+ * It defines following symbols, which code can use without definition:
+ *   __exidx_start
+ *   __exidx_end
+ *   __copy_table_start__
+ *   __copy_table_end__
+ *   __zero_table_start__
+ *   __zero_table_end__
+ *   __etext
+ *   __data_start__
+ *   __preinit_array_start
+ *   __preinit_array_end
+ *   __init_array_start
+ *   __init_array_end
+ *   __fini_array_start
+ *   __fini_array_end
+ *   __data_end__
+ *   __bss_start__
+ *   __bss_end__
+ *   __end__
+ *   end
+ *   __HeapLimit
+ *   __StackLimit
+ *   __StackTop
+ *   __stack
+ */
+ENTRY(Reset_Handler)
+
+SECTIONS
+{
+	.text :
+	{
+		*flash_start*.o
+		*(.text*)
+
+		KEEP(*(.init))
+		KEEP(*(.fini))
+
+		/* .ctors */
+		*crtbegin.o(.ctors)
+		*crtbegin?.o(.ctors)
+		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+		*(SORT(.ctors.*))
+		*(.ctors)
+
+		/* .dtors */
+ 		*crtbegin.o(.dtors)
+ 		*crtbegin?.o(.dtors)
+ 		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+ 		*(SORT(.dtors.*))
+ 		*(.dtors)
+
+		*(.rodata*)
+
+		KEEP(*(.eh_frame*))
+	} > FLASH
+
+
+
+	.ARM.extab :
+	{
+		*(.ARM.extab* .gnu.linkonce.armextab.*)
+	} > FLASH
+
+
+	.ARM.exidx :
+	{
+		*(.ARM.exidx* .gnu.linkonce.armexidx.*)
+	} > FLASH
+
+	 . = ALIGN(4);
+	__exidx_start = .;
+
+	__etext = .;
+
+	.data : AT (__etext)
+	{
+		__data_start__ = .;
+		*(vtable)
+		*(.data*)
+
+		. = ALIGN(4);
+		/* preinit data */
+		PROVIDE_HIDDEN (__preinit_array_start = .);
+		KEEP(*(.preinit_array))
+		PROVIDE_HIDDEN (__preinit_array_end = .);
+
+		. = ALIGN(4);
+		/* init data */
+		PROVIDE_HIDDEN (__init_array_start = .);
+		KEEP(*(SORT(.init_array.*)))
+		KEEP(*(.init_array))
+		PROVIDE_HIDDEN (__init_array_end = .);
+
+
+		. = ALIGN(4);
+		/* finit data */
+		PROVIDE_HIDDEN (__fini_array_start = .);
+		KEEP(*(SORT(.fini_array.*)))
+		KEEP(*(.fini_array))
+		PROVIDE_HIDDEN (__fini_array_end = .);
+
+		KEEP(*(.jcr*))
+		. = ALIGN(4);
+		/* All data end */
+		__data_end__ = .;
+
+	} > RAM
+
+	.bss :
+	{
+		. = ALIGN(4);
+		__bss_start__ = .;
+		*(.bss*)
+		*(COMMON)
+		. = ALIGN(4);
+		__bss_end__ = .;
+	} > RAM
+
+	.heap (COPY):
+	{
+		__end__ = .;
+		PROVIDE(end = .);
+		*(.heap*)
+		__HeapLimit = .;
+	} > RAM
+
+	/* .stack_dummy section doesn't contains any symbols. It is only
+	 * used for linker to calculate size of stack sections, and assign
+	 * values to stack symbols later */
+	.stack_dummy (COPY):
+	{
+		*(.stack*)
+	} > RAM
+
+	/* Set stack top to end of RAM, and stack limit move down by
+	 * size of stack_dummy section */
+	__StackTop = ORIGIN(RAM) + LENGTH(RAM);
+	__StackLimit = __StackTop - SIZEOF(.stack_dummy);
+	PROVIDE(__stack = __StackTop);
+
+	/* Check if data + heap + stack exceeds RAM limit */
+	ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+}
+endef
+
+
+output/out.hex : output/out
+	$(OBJCOPY) $^ -O ihex $@
+
+
+output/out : $(addprefix output/, $(addsuffix .o, $(OBJS)))
+	$(file >output/ld.script, $(ldscript))
+	$(LD) $(addprefix output/obj/,$(addsuffix .o, $(notdir $(OBJS)))) -o $@ $(LDFLAG)
+	$(OBJDUMP) -S $@ > output/disasm
+
+output/%.o : %.c
+	$(GCC) $< $(CFLAG) -o output/obj/$(notdir $@)
+
+output/%.o : %.s
+	$(AS) $^ -mthumb -mcpu=cortex-m0 -o output/obj/$(notdir $@)
+
+
+clean :
+ifeq ($(OS),Windows_NT)
+	del /Q output\*.*
+	del /Q output\obj\*.*
+else
+	rm -rf output/*
+	rm -rf output/obj/*
+endif
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Listings/YC3121_Keil.map
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Listings/YC3121_Keil.map	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Listings/YC3121_Keil.map	(working copy)
@@ -0,0 +1,837 @@
+Component: ARM Compiler 5.06 update 6 (build 750) Tool: armlink [4d35ed]
+
+==============================================================================
+
+Section Cross References
+
+    system.o(.text) refers to yc_uart.o(.text) for UART_SendBuf
+    system.o(.text) refers to uidiv.o(.text) for __aeabi_uidivmod
+    system.o(.text) refers to system.o(.constdata) for g_pcHex1
+    system.o(.constdata) refers to system.o(.conststring) for .conststring
+    main.o(.text) refers to misc.o(.text) for NVIC_DisableIRQ
+    main.o(.text) refers to yc_bt.o(.text) for BT_ParseBTData
+    main.o(.text) refers to yc_ipc.o(.text) for IPC_have_data
+    main.o(.text) refers to system.o(.text) for MyPrintf
+    main.o(.text) refers to memcpya.o(.text) for __aeabi_memcpy4
+    main.o(.text) refers to memseta.o(.text) for __aeabi_memclr4
+    main.o(.text) refers to idiv.o(.text) for __aeabi_idivmod
+    main.o(.text) refers to yc_systick.o(.text) for SysTick_Config
+    main.o(.text) refers to yc_bt.o(.data) for hci_buf_write_index
+    main.o(.text) refers to main.o(.data) for bt2m0buf_full_flag
+    main.o(.text) refers to yc_systick.o(.data) for SystickCount
+    main.o(.text) refers to main.o(.bss) for bt_handler
+    main.o(.text) refers to main.o(i.__ARM_common_switch8) for __ARM_common_switch8
+    main.o(.text) refers to yc_gpio.o(.text) for GPIO_Config
+    main.o(.text) refers to yc_uart.o(.text) for UART_Init
+    main.o(.text) refers to yc_sysctrl.o(.text) for SYSCTRL_HCLKConfig
+    main.o(.text) refers to yc_qspi.o(i.qspi_flash_sectorerase) for qspi_flash_sectorerase
+    main.o(.text) refers to yc_qspi.o(i.qspi_flash_write) for qspi_flash_write
+    yc_gpio.o(.text) refers to system.o(.text) for _assert_handler
+    yc_gpio.o(.text) refers to main.o(i.__ARM_common_switch8) for __ARM_common_switch8
+    yc_gpio.o(.text) refers to yc_gpio.o(.constdata) for __FUNCTION__
+    yc_uart.o(.text) refers to system.o(.text) for _assert_handler
+    yc_uart.o(.text) refers to uidiv.o(.text) for __aeabi_uidivmod
+    yc_uart.o(.text) refers to yc_uart.o(.constdata) for __FUNCTION__
+    yc_uart.o(.text) refers to yc_uart.o(.bss) for uart0_DMA_buf
+    yc_bt.o(.text) refers to uwrite4.o(.text) for __aeabi_uwrite4
+    yc_bt.o(.text) refers to yc_ipc.o(.text) for IpcInit
+    yc_bt.o(.text) refers to yc_systick.o(.text) for SysTick_GetTick
+    yc_bt.o(.text) refers to yc_bt.o(.data) for bt_con_sta
+    yc_bt.o(.text) refers to yc_bt.o(.bss) for hci_recappdata
+    yc_bt.o(.text) refers to memcpya.o(.text) for __aeabi_memcpy
+    yc_bt.o(.text) refers to main.o(i.__ARM_common_switch8) for __ARM_common_switch8
+    yc_bt.o(.text) refers to main.o(.text) for prt_yc3121_bt_post_event
+    yc_bt.o(.text) refers to uread4.o(.text) for __aeabi_uread4
+    yc_bt.o(.text) refers to misc.o(.text) for NVIC_EnableIRQ
+    yc_bt.o(.text) refers to system.o(.text) for MyPrintf
+    yc_bt.o(.text) refers to main.o(.data) for bt2m0buf_full_flag
+    yc_bt.o(.text) refers to yc_uart.o(.text) for UART_SendBuf
+    yc_systick.o(.text) refers to system.o(.text) for _assert_handler
+    yc_systick.o(.text) refers to idiv.o(.text) for __aeabi_idivmod
+    yc_systick.o(.text) refers to uidiv.o(.text) for __aeabi_uidivmod
+    yc_systick.o(.text) refers to yc_systick.o(.constdata) for __FUNCTION__
+    yc_systick.o(.text) refers to yc_systick.o(.data) for SystickCount
+    yc_ipc.o(.text) refers to uread4.o(.text) for __aeabi_uread4
+    yc_ipc.o(.text) refers to yc_timer.o(.text) for delay_ms
+    yc_ipc.o(.text) refers to yc_ipc.o(.data) for IpcRx
+    yc_ipc.o(.text) refers to memcpya.o(.text) for __aeabi_memcpy
+    yc_ipc.o(.text) refers to system.o(.text) for MyPrintf
+    yc_ipc.o(.text) refers to bt_code.o(.constdata) for bt_code
+    yc_timer.o(.text) refers to system.o(.text) for _assert_handler
+    yc_timer.o(.text) refers to startup.o(.text) for delay
+    yc_timer.o(.text) refers to yc_timer.o(.constdata) for __FUNCTION__
+    yc_lpm.o(.text) refers to yc_timer.o(.text) for delay_us
+    yc_lpm.o(.text) refers to yc_otp.o(.text) for read_otp
+    yc_lpm.o(.text) refers to misc.o(.text) for NVIC_DisableIRQ
+    yc_lpm.o(.text) refers to yc_ipc.o(.text) for IPC_TxData
+    yc_lpm.o(.text) refers to yc_sysctrl.o(.text) for SYSCTRL_HCLKConfig
+    yc_lpm.o(.text) refers to yc_lpm.o(.data) for value_rtc_1s
+    yc_lpm.o(.text) refers to yc_ipc.o(.data) for ipc_inited
+    yc_sysctrl.o(.text) refers to system.o(.text) for _assert_handler
+    yc_sysctrl.o(.text) refers to idiv.o(.text) for __aeabi_idivmod
+    yc_sysctrl.o(.text) refers to startup.o(.text) for delay
+    yc_sysctrl.o(.text) refers to yc_sysctrl.o(.constdata) for __FUNCTION__
+    flash_start.o(.flash_start) refers to main.o(.text) for BT_IRQHandler
+    flash_start.o(.flash_start) refers to entry.o(.ARM.Collect$$$$00000000) for __main
+    startup.o(RESET) refers to startup.o(.text) for reset_handler
+    startup.o(RESET) refers to flash_start.o(.flash_start) for hard_fault_handler
+    startup.o(.text) refers to flash_start.o(.flash_start) for Reset_Handler
+    yc_qspi.o(i._qspi_flash_write) refers to memseta.o(.text) for __aeabi_memclr4
+    yc_qspi.o(i.app_clear_disable_download_flag) refers to memseta.o(.text) for __aeabi_memclr4
+    yc_qspi.o(i.app_clear_disable_download_flag) refers to yc_qspi.o(i.enc_read_flash) for enc_read_flash
+    yc_qspi.o(i.app_clear_disable_download_flag) refers to yc_qspi.o(i.app_enable_download) for app_enable_download
+    yc_qspi.o(i.app_clear_disable_download_flag) refers to yc_qspi.o(i.enc_write_flash) for enc_write_flash
+    yc_qspi.o(i.app_enable_download) refers to yc_qspi.o(i.enc_erase_flash_32byte) for enc_erase_flash_32byte
+    yc_qspi.o(i.enc_earse_flash_app_area) refers to memseta.o(.text) for __aeabi_memclr4
+    yc_qspi.o(i.enc_earse_flash_app_area) refers to yc_qspi.o(i.qspi_flash_read) for qspi_flash_read
+    yc_qspi.o(i.enc_earse_flash_app_area) refers to yc_qspi.o(i.qspi_flash_sectorerase) for qspi_flash_sectorerase
+    yc_qspi.o(i.enc_earse_flash_app_area) refers to yc_qspi.o(i.qspi_flash_write) for qspi_flash_write
+    yc_qspi.o(i.enc_earse_flash_app_area) refers to yc_qspi.o(i.qspi_flash_blockerase32k) for qspi_flash_blockerase32k
+    yc_qspi.o(i.enc_erase_flash_32byte) refers to misc.o(.text) for get_primask
+    yc_qspi.o(i.enc_erase_flash_32byte) refers to yc_otp.o(.text) for init_otp
+    yc_qspi.o(i.enc_erase_flash_32byte) refers to yc_qspi.o(i.pre_qspi) for pre_qspi
+    yc_qspi.o(i.enc_erase_flash_32byte) refers to yc_qspi.o(i.prefetch) for prefetch
+    yc_qspi.o(i.enc_erase_flash_32byte) refers to yc_qspi.o(i.replace_w_data) for replace_w_data
+    yc_qspi.o(i.enc_erase_flash_32byte) refers to yc_qspi.o(i.end_qspi) for end_qspi
+    yc_qspi.o(i.enc_erase_flash_32k) refers to yc_qspi.o(i.qspi_flash_read) for qspi_flash_read
+    yc_qspi.o(i.enc_erase_flash_32k) refers to yc_qspi.o(i.qspi_flash_sectorerase) for qspi_flash_sectorerase
+    yc_qspi.o(i.enc_erase_flash_32k) refers to yc_qspi.o(i.qspi_flash_write) for qspi_flash_write
+    yc_qspi.o(i.enc_erase_flash_32k) refers to memseta.o(.text) for __aeabi_memset
+    yc_qspi.o(i.enc_read_flash) refers to misc.o(.text) for get_primask
+    yc_qspi.o(i.enc_read_flash) refers to yc_qspi.o(i.flash_blank_check) for flash_blank_check
+    yc_qspi.o(i.enc_read_flash) refers to memseta.o(.text) for __aeabi_memset
+    yc_qspi.o(i.enc_read_flash) refers to yc_qspi.o(i.prefetch) for prefetch
+    yc_qspi.o(i.enc_write_flash) refers to misc.o(.text) for get_primask
+    yc_qspi.o(i.enc_write_flash) refers to yc_qspi.o(i.pre_qspi) for pre_qspi
+    yc_qspi.o(i.enc_write_flash) refers to yc_otp.o(.text) for init_otp
+    yc_qspi.o(i.enc_write_flash) refers to yc_qspi.o(i.end_qspi) for end_qspi
+    yc_qspi.o(i.end_qspi) refers to yc_qspi.o(i.prefetch) for prefetch
+    yc_qspi.o(i.end_qspi) refers to yc_qspi.o(i.setqspi) for setqspi
+    yc_qspi.o(i.flash_blank_check) refers to misc.o(.text) for get_primask
+    yc_qspi.o(i.flash_blank_check) refers to yc_otp.o(.text) for init_otp
+    yc_qspi.o(i.pre_qspi) refers to yc_qspi.o(i.prefetch) for prefetch
+    yc_qspi.o(i.pre_qspi) refers to yc_qspi.o(i.setqspi) for setqspi
+    yc_qspi.o(i.qspi_flash_blockerase32k) refers to misc.o(.text) for get_primask
+    yc_qspi.o(i.qspi_flash_blockerase32k) refers to yc_qspi.o(i.pre_qspi) for pre_qspi
+    yc_qspi.o(i.qspi_flash_blockerase32k) refers to yc_qspi.o(i.end_qspi) for end_qspi
+    yc_qspi.o(i.qspi_flash_read) refers to misc.o(.text) for get_primask
+    yc_qspi.o(i.qspi_flash_read) refers to yc_qspi.o(i.pre_qspi) for pre_qspi
+    yc_qspi.o(i.qspi_flash_read) refers to yc_qspi.o(i.prefetch) for prefetch
+    yc_qspi.o(i.qspi_flash_read) refers to yc_qspi.o(i._qspi_flash_read) for _qspi_flash_read
+    yc_qspi.o(i.qspi_flash_read) refers to yc_qspi.o(i.end_qspi) for end_qspi
+    yc_qspi.o(i.qspi_flash_sectorerase) refers to misc.o(.text) for get_primask
+    yc_qspi.o(i.qspi_flash_sectorerase) refers to yc_qspi.o(i.pre_qspi) for pre_qspi
+    yc_qspi.o(i.qspi_flash_sectorerase) refers to yc_qspi.o(i.end_qspi) for end_qspi
+    yc_qspi.o(i.qspi_flash_write) refers to misc.o(.text) for get_primask
+    yc_qspi.o(i.qspi_flash_write) refers to yc_qspi.o(i.pre_qspi) for pre_qspi
+    yc_qspi.o(i.qspi_flash_write) refers to yc_qspi.o(i._qspi_flash_write) for _qspi_flash_write
+    yc_qspi.o(i.qspi_flash_write) refers to yc_qspi.o(i.end_qspi) for end_qspi
+    yc_qspi.o(i.read_flash_size) refers to misc.o(.text) for get_primask
+    yc_qspi.o(i.read_flash_size) refers to yc_qspi.o(i.pre_qspi) for pre_qspi
+    yc_qspi.o(i.read_flash_size) refers to yc_qspi.o(i.end_qspi) for end_qspi
+    yc_qspi.o(i.replace_w_data) refers to memseta.o(.text) for __aeabi_memclr4
+    yc_qspi.o(i.updateSignInfo) refers to yc_qspi.o(i.prefetch) for prefetch
+    yc_qspi.o(i.updateSignInfo) refers to yc_qspi.o(i.enc_erase_flash_32byte) for enc_erase_flash_32byte
+    yc_qspi.o(i.updateSignInfo) refers to yc_qspi.o(i.enc_write_flash) for enc_write_flash
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry10a.o(.ARM.Collect$$$$0000000D) for __rt_final_cpp
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry11a.o(.ARM.Collect$$$$0000000F) for __rt_final_exit
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry7b.o(.ARM.Collect$$$$00000008) for _main_clock
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry8b.o(.ARM.Collect$$$$0000000A) for _main_cpp_init
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry9a.o(.ARM.Collect$$$$0000000B) for _main_init
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry5.o(.ARM.Collect$$$$00000004) for _main_scatterload
+    entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry2.o(.ARM.Collect$$$$00000001) for _main_stk
+    idiv.o(.text) refers to uidiv.o(.text) for __aeabi_uidivmod
+    entry2.o(.ARM.Collect$$$$00000001) refers to entry2.o(.ARM.Collect$$$$00002712) for __lit__00000000
+    entry2.o(__vectab_stack_and_reset_area) refers to entry.o(.ARM.Collect$$$$00000000) for __main
+    entry5.o(.ARM.Collect$$$$00000004) refers to init.o(.text) for __scatterload
+    entry9a.o(.ARM.Collect$$$$0000000B) refers to main.o(.text) for main
+    entry9b.o(.ARM.Collect$$$$0000000C) refers to main.o(.text) for main
+    init.o(.text) refers to entry5.o(.ARM.Collect$$$$00000004) for __main_after_scatterload
+
+
+==============================================================================
+
+Removing Unused input sections from the image.
+
+    Removing yc_otp.o(.text), (132 bytes).
+    Removing yc_lpm.o(.text), (844 bytes).
+    Removing yc_lpm.o(.data), (4 bytes).
+    Removing startup.o(STACK), (65536 bytes).
+    Removing startup.o(HEAP), (0 bytes).
+    Removing yc_qspi.o(i._qspi_flash_read), (144 bytes).
+    Removing yc_qspi.o(i.app_clear_disable_download_flag), (76 bytes).
+    Removing yc_qspi.o(i.app_enable_download), (28 bytes).
+    Removing yc_qspi.o(i.enc_earse_flash_app_area), (228 bytes).
+    Removing yc_qspi.o(i.enc_erase_flash_32byte), (84 bytes).
+    Removing yc_qspi.o(i.enc_erase_flash_32k), (132 bytes).
+    Removing yc_qspi.o(i.enc_read_flash), (106 bytes).
+    Removing yc_qspi.o(i.enc_read_flash_fast), (20 bytes).
+    Removing yc_qspi.o(i.enc_write_flash), (60 bytes).
+    Removing yc_qspi.o(i.flash_blank_check), (44 bytes).
+    Removing yc_qspi.o(i.qspi_GetVersion), (8 bytes).
+    Removing yc_qspi.o(i.qspi_flash_blockerase32k), (40 bytes).
+    Removing yc_qspi.o(i.qspi_flash_read), (60 bytes).
+    Removing yc_qspi.o(i.read_flash_size), (104 bytes).
+    Removing yc_qspi.o(i.replace_w_data), (148 bytes).
+    Removing yc_qspi.o(i.updateSignInfo), (148 bytes).
+
+21 unused section(s) (total 67946 bytes) removed from the image.
+
+==============================================================================
+
+Adding Veneers to the image
+
+    Adding TT veneer (12 bytes, Long) for call to 'delay' from yc_timer.o(.text).
+
+1 Veneer(s) (total 12 bytes) added to the image.
+
+==============================================================================
+
+Image Symbol Table
+
+    Local Symbols
+
+    Symbol Name                              Value     Ov Type        Size  Object(Section)
+
+    RESET                                    0x00000000   Section      192  startup.o(RESET)
+    ../clib/microlib/division.c              0x00000000   Number         0  idiv.o ABSOLUTE
+    ../clib/microlib/division.c              0x00000000   Number         0  uidiv.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry7a.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry11a.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry5.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry2.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry11b.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry7b.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry10b.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry10a.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry9b.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry9a.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry8b.o ABSOLUTE
+    ../clib/microlib/init/entry.s            0x00000000   Number         0  entry8a.o ABSOLUTE
+    ../clib/microlib/string/memcpy.c         0x00000000   Number         0  memcpyb.o ABSOLUTE
+    ../clib/microlib/string/memcpy.c         0x00000000   Number         0  memcpya.o ABSOLUTE
+    ../clib/microlib/string/memset.c         0x00000000   Number         0  memseta.o ABSOLUTE
+    ../clib/microlib/unhosted.c              0x00000000   Number         0  uwrite4.o ABSOLUTE
+    ../clib/microlib/unhosted.c              0x00000000   Number         0  uread4.o ABSOLUTE
+    ..\..\..\..\..\Librarier\core\bt_code.c  0x00000000   Number         0  bt_code.o ABSOLUTE
+    ..\..\..\..\..\Librarier\core\misc.c     0x00000000   Number         0  misc.o ABSOLUTE
+    ..\..\..\..\..\Librarier\core\system.c   0x00000000   Number         0  system.o ABSOLUTE
+    ..\..\..\..\..\Librarier\sdk\yc_bt.c     0x00000000   Number         0  yc_bt.o ABSOLUTE
+    ..\..\..\..\..\Librarier\sdk\yc_gpio.c   0x00000000   Number         0  yc_gpio.o ABSOLUTE
+    ..\..\..\..\..\Librarier\sdk\yc_ipc.c    0x00000000   Number         0  yc_ipc.o ABSOLUTE
+    ..\..\..\..\..\Librarier\sdk\yc_lpm.c    0x00000000   Number         0  yc_lpm.o ABSOLUTE
+    ..\..\..\..\..\Librarier\sdk\yc_otp.c    0x00000000   Number         0  yc_otp.o ABSOLUTE
+    ..\..\..\..\..\Librarier\sdk\yc_sysctrl.c 0x00000000   Number         0  yc_sysctrl.o ABSOLUTE
+    ..\..\..\..\..\Librarier\sdk\yc_systick.c 0x00000000   Number         0  yc_systick.o ABSOLUTE
+    ..\..\..\..\..\Librarier\sdk\yc_timer.c  0x00000000   Number         0  yc_timer.o ABSOLUTE
+    ..\..\..\..\..\Librarier\sdk\yc_uart.c   0x00000000   Number         0  yc_uart.o ABSOLUTE
+    ..\..\..\..\..\Librarier\startup\flash_start.s 0x00000000   Number         0  flash_start.o ABSOLUTE
+    ..\..\..\..\..\Librarier\startup\startup.s 0x00000000   Number         0  startup.o ABSOLUTE
+    ..\..\user\main.c                        0x00000000   Number         0  main.o ABSOLUTE
+    ..\yc_qspi.c                             0x00000000   Number         0  yc_qspi.o ABSOLUTE
+    dc.s                                     0x00000000   Number         0  dc.o ABSOLUTE
+    handlers.s                               0x00000000   Number         0  handlers.o ABSOLUTE
+    init.s                                   0x00000000   Number         0  init.o ABSOLUTE
+    .text                                    0x000000c0   Section       20  startup.o(.text)
+    .data                                    0x00020000   Section       25  main.o(.data)
+    hex_lookup                               0x00020006   Data          16  main.o(.data)
+    parse_flag                               0x00020016   Data           1  main.o(.data)
+    parse_ch                                 0x00020017   Data           1  main.o(.data)
+    parse_pt                                 0x00020018   Data           1  main.o(.data)
+    .data                                    0x0002001c   Section       30  yc_bt.o(.data)
+    StartTick                                0x0002001c   Data           4  yc_bt.o(.data)
+    HCI_CMD_BIT_FLAG                         0x00020020   Data           8  yc_bt.o(.data)
+    CmdRepData                               0x00020028   Data           5  yc_bt.o(.data)
+    bt_con_type                              0x0002002d   Data           1  yc_bt.o(.data)
+    bt_con_sta                               0x0002002e   Data           1  yc_bt.o(.data)
+    .data                                    0x0002003c   Section        4  yc_systick.o(.data)
+    .data                                    0x00020040   Section        9  yc_ipc.o(.data)
+    .bss                                     0x0002004c   Section     3552  main.o(.bss)
+    bt_handler                               0x000200f8   Data          52  main.o(.bss)
+    .bss                                     0x00020e2c   Section     2048  yc_uart.o(.bss)
+    .bss                                     0x0002162c   Section     8180  yc_bt.o(.bss)
+    .flash_start                             0x01000200   Section      320  flash_start.o(.flash_start)
+    isr                                      0x0100029d   Thumb Code     6  flash_start.o(.flash_start)
+    .ARM.Collect$$$$00000000                 0x01000400   Section        0  entry.o(.ARM.Collect$$$$00000000)
+    .ARM.Collect$$$$00000001                 0x01000400   Section        4  entry2.o(.ARM.Collect$$$$00000001)
+    .ARM.Collect$$$$00000004                 0x01000404   Section        4  entry5.o(.ARM.Collect$$$$00000004)
+    .ARM.Collect$$$$00000008                 0x01000408   Section        0  entry7b.o(.ARM.Collect$$$$00000008)
+    .ARM.Collect$$$$0000000A                 0x01000408   Section        0  entry8b.o(.ARM.Collect$$$$0000000A)
+    .ARM.Collect$$$$0000000B                 0x01000408   Section        8  entry9a.o(.ARM.Collect$$$$0000000B)
+    .ARM.Collect$$$$0000000D                 0x01000410   Section        0  entry10a.o(.ARM.Collect$$$$0000000D)
+    .ARM.Collect$$$$0000000F                 0x01000410   Section        0  entry11a.o(.ARM.Collect$$$$0000000F)
+    .ARM.Collect$$$$00002712                 0x01000410   Section        4  entry2.o(.ARM.Collect$$$$00002712)
+    __lit__00000000                          0x01000410   Data           4  entry2.o(.ARM.Collect$$$$00002712)
+    .text                                    0x01000414   Section        0  misc.o(.text)
+    .text                                    0x010004f4   Section        0  system.o(.text)
+    .text                                    0x01000838   Section        0  main.o(.text)
+    array2hex                                0x010008d9   Thumb Code    52  main.o(.text)
+    bt_init_proc                             0x01000a8b   Thumb Code  1440  main.o(.text)
+    bt_write                                 0x0100102b   Thumb Code   100  main.o(.text)
+    prt_printbuf_data_parse                  0x0100108f   Thumb Code   904  main.o(.text)
+    .text                                    0x01001554   Section        0  yc_gpio.o(.text)
+    .text                                    0x01001b74   Section        0  yc_uart.o(.text)
+    .text                                    0x01002244   Section        0  yc_bt.o(.text)
+    SendCMD                                  0x01002385   Thumb Code    42  yc_bt.o(.text)
+    .text                                    0x01003780   Section        0  yc_systick.o(.text)
+    sysTick_delay_ms                         0x01003781   Thumb Code   124  yc_systick.o(.text)
+    .text                                    0x010039ec   Section        0  yc_ipc.o(.text)
+    _dma_start                               0x010039ed   Thumb Code    40  yc_ipc.o(.text)
+    __tagsym$$noinline                       0x010039ed   Number         0  yc_ipc.o(.text)
+    __tagsym$$noinline                       0x01003a15   Number         0  yc_ipc.o(.text)
+    .text                                    0x010043e0   Section        0  yc_timer.o(.text)
+    .text                                    0x01004724   Section        0  yc_sysctrl.o(.text)
+    __tagsym$$noinline                       0x01004773   Number         0  yc_sysctrl.o(.text)
+    .text                                    0x01004898   Section        0  uidiv.o(.text)
+    .text                                    0x010048c4   Section        0  idiv.o(.text)
+    .text                                    0x010048ec   Section        0  memcpya.o(.text)
+    .text                                    0x01004910   Section        0  memseta.o(.text)
+    .text                                    0x01004934   Section        0  uread4.o(.text)
+    .text                                    0x01004948   Section        0  uwrite4.o(.text)
+    .text                                    0x0100495c   Section       36  init.o(.text)
+    i.__ARM_common_switch8                   0x0100498c   Section        0  main.o(i.__ARM_common_switch8)
+    i.__scatterload_copy                     0x010049a8   Section       14  handlers.o(i.__scatterload_copy)
+    i.__scatterload_null                     0x010049b6   Section        2  handlers.o(i.__scatterload_null)
+    i.__scatterload_zeroinit                 0x010049b8   Section       14  handlers.o(i.__scatterload_zeroinit)
+    i._qspi_flash_write                      0x010049c8   Section        0  yc_qspi.o(i._qspi_flash_write)
+    __tagsym$$noinline                       0x010049c9   Number         0  yc_qspi.o(i._qspi_flash_write)
+    i.end_qspi                               0x01004a4c   Section        0  yc_qspi.o(i.end_qspi)
+    __tagsym$$noinline                       0x01004a4d   Number         0  yc_qspi.o(i.end_qspi)
+    i.pre_qspi                               0x01004a6c   Section        0  yc_qspi.o(i.pre_qspi)
+    __tagsym$$noinline                       0x01004a6d   Number         0  yc_qspi.o(i.pre_qspi)
+    i.prefetch                               0x01004ab0   Section        0  yc_qspi.o(i.prefetch)
+    i.qspi_flash_sectorerase                 0x01004ab8   Section        0  yc_qspi.o(i.qspi_flash_sectorerase)
+    i.qspi_flash_write                       0x01004ae0   Section        0  yc_qspi.o(i.qspi_flash_write)
+    i.setqspi                                0x01004b0c   Section        0  yc_qspi.o(i.setqspi)
+    __tagsym$$noinline                       0x01004b0d   Number         0  yc_qspi.o(i.setqspi)
+    .constdata                               0x01004b38   Section        8  system.o(.constdata)
+    g_pcHex1                                 0x01004b38   Data           4  system.o(.constdata)
+    g_pcHex2                                 0x01004b3c   Data           4  system.o(.constdata)
+    .constdata                               0x01004b40   Section     5772  bt_code.o(.constdata)
+    .constdata                               0x010061cc   Section      174  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x010061cc   Data          12  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x010061d8   Data          10  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x010061e2   Data          15  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x010061f1   Data          19  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x01006204   Data          22  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x0100621a   Data          20  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x0100622e   Data          23  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x01006245   Data          15  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x01006254   Data          13  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x01006261   Data          11  yc_gpio.o(.constdata)
+    __FUNCTION__                             0x0100626c   Data          14  yc_gpio.o(.constdata)
+    .constdata                               0x0100627a   Section      208  yc_uart.o(.constdata)
+    __FUNCTION__                             0x0100627a   Data          21  yc_uart.o(.constdata)
+    __FUNCTION__                             0x0100628f   Data          12  yc_uart.o(.constdata)
+    __FUNCTION__                             0x0100629b   Data          16  yc_uart.o(.constdata)
+    __FUNCTION__                             0x010062ab   Data          10  yc_uart.o(.constdata)
+    __FUNCTION__                             0x010062b5   Data          18  yc_uart.o(.constdata)
+    __FUNCTION__                             0x010062c7   Data          22  yc_uart.o(.constdata)
+    __FUNCTION__                             0x010062dd   Data          16  yc_uart.o(.constdata)
+    __FUNCTION__                             0x010062ed   Data          14  yc_uart.o(.constdata)
+    __FUNCTION__                             0x010062fb   Data          17  yc_uart.o(.constdata)
+    __FUNCTION__                             0x0100630c   Data          13  yc_uart.o(.constdata)
+    __FUNCTION__                             0x01006319   Data          13  yc_uart.o(.constdata)
+    __FUNCTION__                             0x01006326   Data          16  yc_uart.o(.constdata)
+    __FUNCTION__                             0x01006336   Data          20  yc_uart.o(.constdata)
+    .constdata                               0x0100634a   Section       49  yc_systick.o(.constdata)
+    __FUNCTION__                             0x0100634a   Data          17  yc_systick.o(.constdata)
+    __FUNCTION__                             0x0100635b   Data          17  yc_systick.o(.constdata)
+    __FUNCTION__                             0x0100636c   Data          15  yc_systick.o(.constdata)
+    .constdata                               0x0100637b   Section       95  yc_timer.o(.constdata)
+    __FUNCTION__                             0x0100637b   Data           9  yc_timer.o(.constdata)
+    __FUNCTION__                             0x01006384   Data           8  yc_timer.o(.constdata)
+    __FUNCTION__                             0x0100638c   Data          15  yc_timer.o(.constdata)
+    __FUNCTION__                             0x0100639b   Data          14  yc_timer.o(.constdata)
+    __FUNCTION__                             0x010063a9   Data          12  yc_timer.o(.constdata)
+    __FUNCTION__                             0x010063b5   Data          17  yc_timer.o(.constdata)
+    __FUNCTION__                             0x010063c6   Data          20  yc_timer.o(.constdata)
+    .constdata                               0x010063da   Section       64  yc_sysctrl.o(.constdata)
+    __FUNCTION__                             0x010063da   Data          26  yc_sysctrl.o(.constdata)
+    __FUNCTION__                             0x010063f4   Data          19  yc_sysctrl.o(.constdata)
+    __FUNCTION__                             0x01006407   Data          19  yc_sysctrl.o(.constdata)
+    .conststring                             0x0100641c   Section       37  system.o(.conststring)
+
+    Global Symbols
+
+    Symbol Name                              Value     Ov Type        Size  Object(Section)
+
+    BuildAttributes$$THM_ISAv3M$S$PE$A:L22$X:L11$S22$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$EBA8$MICROLIB$REQ8$PRES8$EABIv2 0x00000000   Number         0  anon$$obj.o ABSOLUTE
+    __ARM_use_no_argv                        0x00000000   Number         0  main.o ABSOLUTE
+    __Vectors                                0x00000000   Data           4  startup.o(RESET)
+    __cpp_initialize__aeabi_                  - Undefined Weak Reference
+    __cxa_finalize                            - Undefined Weak Reference
+    __decompress                              - Undefined Weak Reference
+    _clock_init                               - Undefined Weak Reference
+    _microlib_exit                            - Undefined Weak Reference
+    __Vectors_End                            0x000000c0   Data           0  startup.o(RESET)
+    __Vectors_Size                           0x000000c0   Number         0  startup.o ABSOLUTE
+    reset_handler                            0x000000c1   Thumb Code     6  startup.o(.text)
+    delay                                    0x000000c7   Thumb Code     8  startup.o(.text)
+    nmi_handler                              0x000000cf   Thumb Code     2  startup.o(.text)
+    ble_send_handle                          0x00020000   Data           2  main.o(.data)
+    bt_cod                                   0x00020002   Data           3  main.o(.data)
+    bt2m0buf_full_flag                       0x00020005   Data           1  main.o(.data)
+    hci_buf_write_index                      0x0002002f   Data           1  yc_bt.o(.data)
+    hci_buf_read_index                       0x00020030   Data           1  yc_bt.o(.data)
+    hci_rec_state_event                      0x00020031   Data           8  yc_bt.o(.data)
+    credit_num                               0x00020039   Data           1  yc_bt.o(.data)
+    SystickCount                             0x0002003c   Data           4  yc_systick.o(.data)
+    IpcRx                                    0x00020040   Data           4  yc_ipc.o(.data)
+    IpcTx                                    0x00020044   Data           4  yc_ipc.o(.data)
+    ipc_inited                               0x00020048   Data           1  yc_ipc.o(.data)
+    NvramData                                0x0002004c   Data         170  main.o(.bss)
+    txbuf                                    0x0002012c   Data         256  main.o(.bss)
+    rxbuf                                    0x0002022c   Data        2048  main.o(.bss)
+    read                                     0x00020a2c   Data        1024  main.o(.bss)
+    uart0_DMA_buf                            0x00020e2c   Data        1024  yc_uart.o(.bss)
+    uart1_DMA_buf                            0x0002122c   Data        1024  yc_uart.o(.bss)
+    hci_recappdata                           0x0002162c   Data          80  yc_bt.o(.bss)
+    hci_btble_data                           0x0002167c   Data        8000  yc_bt.o(.bss)
+    hci_rec_state                            0x000235bc   Data         100  yc_bt.o(.bss)
+    __initial_sp                             0x00030000   Number         0  startup.o ABSOLUTE
+    Reset_Handler                            0x01000201   Thumb Code     4  flash_start.o(.flash_start)
+    hard_fault_handler                       0x01000205   Thumb Code     6  flash_start.o(.flash_start)
+    svc_handler                              0x0100020b   Thumb Code     6  flash_start.o(.flash_start)
+    pendsv_handler                           0x01000211   Thumb Code     6  flash_start.o(.flash_start)
+    systick                                  0x01000217   Thumb Code     6  flash_start.o(.flash_start)
+    irq0                                     0x0100021d   Thumb Code     4  flash_start.o(.flash_start)
+    irq1                                     0x01000221   Thumb Code     4  flash_start.o(.flash_start)
+    irq2                                     0x01000225   Thumb Code     4  flash_start.o(.flash_start)
+    irq3                                     0x01000229   Thumb Code     4  flash_start.o(.flash_start)
+    irq4                                     0x0100022d   Thumb Code     4  flash_start.o(.flash_start)
+    irq5                                     0x01000231   Thumb Code     4  flash_start.o(.flash_start)
+    irq6                                     0x01000235   Thumb Code     4  flash_start.o(.flash_start)
+    irq7                                     0x01000239   Thumb Code     4  flash_start.o(.flash_start)
+    irq8                                     0x0100023d   Thumb Code     4  flash_start.o(.flash_start)
+    irq9                                     0x01000241   Thumb Code     4  flash_start.o(.flash_start)
+    irq10                                    0x01000245   Thumb Code     4  flash_start.o(.flash_start)
+    irq11                                    0x01000249   Thumb Code     4  flash_start.o(.flash_start)
+    irq12                                    0x0100024d   Thumb Code     4  flash_start.o(.flash_start)
+    irq13                                    0x01000251   Thumb Code     4  flash_start.o(.flash_start)
+    irq14                                    0x01000255   Thumb Code     4  flash_start.o(.flash_start)
+    irq15                                    0x01000259   Thumb Code     4  flash_start.o(.flash_start)
+    irq16                                    0x0100025d   Thumb Code     4  flash_start.o(.flash_start)
+    irq17                                    0x01000261   Thumb Code     4  flash_start.o(.flash_start)
+    irq18                                    0x01000265   Thumb Code     4  flash_start.o(.flash_start)
+    irq19                                    0x01000269   Thumb Code     4  flash_start.o(.flash_start)
+    irq20                                    0x0100026d   Thumb Code     4  flash_start.o(.flash_start)
+    irq21                                    0x01000271   Thumb Code     4  flash_start.o(.flash_start)
+    irq22                                    0x01000275   Thumb Code     4  flash_start.o(.flash_start)
+    irq23                                    0x01000279   Thumb Code     4  flash_start.o(.flash_start)
+    irq24                                    0x0100027d   Thumb Code     4  flash_start.o(.flash_start)
+    irq25                                    0x01000281   Thumb Code     4  flash_start.o(.flash_start)
+    irq26                                    0x01000285   Thumb Code     4  flash_start.o(.flash_start)
+    irq27                                    0x01000289   Thumb Code     4  flash_start.o(.flash_start)
+    irq28                                    0x0100028d   Thumb Code     4  flash_start.o(.flash_start)
+    irq29                                    0x01000291   Thumb Code     4  flash_start.o(.flash_start)
+    irq30                                    0x01000295   Thumb Code     4  flash_start.o(.flash_start)
+    irq31                                    0x01000299   Thumb Code     4  flash_start.o(.flash_start)
+    NMI_IRQHandler                           0x010002a5   Thumb Code     2  flash_start.o(.flash_start)
+    HARD_FAULT_IRQHandler                    0x010002a7   Thumb Code     2  flash_start.o(.flash_start)
+    SVC_IRQHandler                           0x010002a9   Thumb Code     2  flash_start.o(.flash_start)
+    PENDSV_IRQHandler                        0x010002ab   Thumb Code     2  flash_start.o(.flash_start)
+    EXTI0_IRQHandler                         0x010002af   Thumb Code     2  flash_start.o(.flash_start)
+    EXTI1_IRQHandler                         0x010002b1   Thumb Code     2  flash_start.o(.flash_start)
+    EXTI2_IRQHandler                         0x010002b3   Thumb Code     2  flash_start.o(.flash_start)
+    EXTI3_IRQHandler                         0x010002b5   Thumb Code     2  flash_start.o(.flash_start)
+    EXTI4_IRQHandler                         0x010002b7   Thumb Code     2  flash_start.o(.flash_start)
+    EXTI5_IRQHandler                         0x010002b9   Thumb Code     2  flash_start.o(.flash_start)
+    GPIO_IRQHandler                          0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    IIC_IRQHandler                           0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    MEMCP_IRQHandler                         0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    MSR_IRQHandler                           0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    QSPI_IRQHandler                          0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    RSA_IRQHandler                           0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    SCI0_IRQHandler                          0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    SCI1_IRQHandler                          0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    SEC_IRQHandler                           0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    SM4_IRQHandler                           0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    SPI0_IRQHandler                          0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    SPI1_IRQHandler                          0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TIMER0_IRQHandler                        0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TIMER1_IRQHandler                        0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TIMER2_IRQHandler                        0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TIMER3_IRQHandler                        0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TIMER4_IRQHandler                        0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TIMER5_IRQHandler                        0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TIMER6_IRQHandler                        0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TIMER7_IRQHandler                        0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TIMER8_IRQHandler                        0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    TRNG_IRQHandler                          0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    UART0_IRQHandler                         0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    UART1_IRQHandler                         0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    USB_IRQHandler                           0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    WDT_IRQHandler                           0x010002bb   Thumb Code     0  flash_start.o(.flash_start)
+    isr_table                                0x010002bc   Data           4  flash_start.o(.flash_start)
+    __main                                   0x01000401   Thumb Code     0  entry.o(.ARM.Collect$$$$00000000)
+    _main_stk                                0x01000401   Thumb Code     0  entry2.o(.ARM.Collect$$$$00000001)
+    _main_scatterload                        0x01000405   Thumb Code     0  entry5.o(.ARM.Collect$$$$00000004)
+    __main_after_scatterload                 0x01000409   Thumb Code     0  entry5.o(.ARM.Collect$$$$00000004)
+    _main_clock                              0x01000409   Thumb Code     0  entry7b.o(.ARM.Collect$$$$00000008)
+    _main_cpp_init                           0x01000409   Thumb Code     0  entry8b.o(.ARM.Collect$$$$0000000A)
+    _main_init                               0x01000409   Thumb Code     0  entry9a.o(.ARM.Collect$$$$0000000B)
+    __rt_final_cpp                           0x01000411   Thumb Code     0  entry10a.o(.ARM.Collect$$$$0000000D)
+    __rt_final_exit                          0x01000411   Thumb Code     0  entry11a.o(.ARM.Collect$$$$0000000F)
+    NVIC_SetPriority                         0x01000415   Thumb Code   114  misc.o(.text)
+    trigger_PendSV                           0x01000487   Thumb Code    20  misc.o(.text)
+    NVIC_EnableIRQ                           0x0100049b   Thumb Code    20  misc.o(.text)
+    NVIC_DisableIRQ                          0x010004af   Thumb Code    16  misc.o(.text)
+    soft_reset                               0x010004bf   Thumb Code    20  misc.o(.text)
+    get_primask                              0x010004d3   Thumb Code     8  misc.o(.text)
+    get_msp                                  0x010004db   Thumb Code     8  misc.o(.text)
+    set_msp                                  0x010004e3   Thumb Code     6  misc.o(.text)
+    printfsend                               0x010004f5   Thumb Code    40  system.o(.text)
+    MyPrintf                                 0x0100051d   Thumb Code   692  system.o(.text)
+    printv                                   0x010007d1   Thumb Code    56  system.o(.text)
+    _assert_handler                          0x01000809   Thumb Code     4  system.o(.text)
+    BT_IRQHandler                            0x01000839   Thumb Code   132  main.o(.text)
+    SYSTICK_IRQHandler                       0x010008bd   Thumb Code    28  main.o(.text)
+    prt_ble_first_get                        0x0100090d   Thumb Code    16  main.o(.text)
+    prt_is_ble_data                          0x0100091d   Thumb Code    20  main.o(.text)
+    prt_ble_first_set                        0x01000931   Thumb Code     6  main.o(.text)
+    prt_yc3121_bt_post_event                 0x01000937   Thumb Code    64  main.o(.text)
+    prt_bt_ble_set_mtu                       0x01000977   Thumb Code    78  main.o(.text)
+    prt_bt_ble_flow_proc                     0x010009c5   Thumb Code    62  main.o(.text)
+    genBleAdvData                            0x01000a03   Thumb Code   136  main.o(.text)
+    UART_Configuration                       0x01001417   Thumb Code    52  main.o(.text)
+    main                                     0x0100144b   Thumb Code   104  main.o(.text)
+    ReserveNV                                0x010014b3   Thumb Code    28  main.o(.text)
+    GPIO_Config                              0x01001555   Thumb Code   144  yc_gpio.o(.text)
+    GPIO_Init                                0x010015e5   Thumb Code   276  yc_gpio.o(.text)
+    GPIO_PullUpCmd                           0x010016f9   Thumb Code   186  yc_gpio.o(.text)
+    GPIO_ReadInputData                       0x010017b3   Thumb Code    28  yc_gpio.o(.text)
+    GPIO_ReadInputDataBit                    0x010017cf   Thumb Code   134  yc_gpio.o(.text)
+    GPIO_ReadOutputData                      0x01001855   Thumb Code    28  yc_gpio.o(.text)
+    GPIO_ReadOutputDataBit                   0x01001871   Thumb Code   134  yc_gpio.o(.text)
+    GPIO_ResetBits                           0x010018f7   Thumb Code   234  yc_gpio.o(.text)
+    GPIO_SetBits                             0x010019e1   Thumb Code   154  yc_gpio.o(.text)
+    GPIO_StructInit                          0x01001a7b   Thumb Code    12  yc_gpio.o(.text)
+    GPIO_Write                               0x01001a87   Thumb Code    70  yc_gpio.o(.text)
+    GPIO_WriteBit                            0x01001acd   Thumb Code   142  yc_gpio.o(.text)
+    UART_AutoFlowCtrlCmd                     0x01001b75   Thumb Code   110  yc_uart.o(.text)
+    UART_ITConfig                            0x01001be3   Thumb Code   194  yc_uart.o(.text)
+    UART_GetITIdentity                       0x01001ca5   Thumb Code   114  yc_uart.o(.text)
+    UART_ClearIT                             0x01001d17   Thumb Code    24  yc_uart.o(.text)
+    UART_DeInit                              0x01001d2f   Thumb Code    52  yc_uart.o(.text)
+    UART_DMASendBuf                          0x01001d63   Thumb Code   106  yc_uart.o(.text)
+    UART_Init                                0x01001dcd   Thumb Code   302  yc_uart.o(.text)
+    UART_IsRXFIFOFull                        0x01001efb   Thumb Code    46  yc_uart.o(.text)
+    UART_IsRXFIFONotEmpty                    0x01001f29   Thumb Code   158  yc_uart.o(.text)
+    UART_IsUARTBusy                          0x01001fc7   Thumb Code    54  yc_uart.o(.text)
+    UART_ReceiveData                         0x01001ffd   Thumb Code    44  yc_uart.o(.text)
+    UART_RecvBuf                             0x01002029   Thumb Code   114  yc_uart.o(.text)
+    UART_SendBuf                             0x0100209b   Thumb Code   138  yc_uart.o(.text)
+    UART_SendData                            0x01002125   Thumb Code    92  yc_uart.o(.text)
+    UART_SetITTimeout                        0x01002181   Thumb Code    16  yc_uart.o(.text)
+    UART_SetRxITNum                          0x01002191   Thumb Code    74  yc_uart.o(.text)
+    UART_StructInit                          0x010021db   Thumb Code    20  yc_uart.o(.text)
+    UART_ReceiveDataLen                      0x010021ef   Thumb Code    44  yc_uart.o(.text)
+    prt_get_bt_connection_status             0x01002245   Thumb Code     6  yc_bt.o(.text)
+    prt_get_bt_type                          0x0100224b   Thumb Code     6  yc_bt.o(.text)
+    BT_BIT_SET                               0x01002251   Thumb Code    34  yc_bt.o(.text)
+    BT_BIT_CLEAR                             0x01002273   Thumb Code    34  yc_bt.o(.text)
+    BT_BIT_GET                               0x01002295   Thumb Code    46  yc_bt.o(.text)
+    BNEP_DomainConvert                       0x010022c3   Thumb Code   112  yc_bt.o(.text)
+    BT_Init                                  0x01002333   Thumb Code    82  yc_bt.o(.text)
+    BT_SetBtAddr                             0x010023af   Thumb Code    76  yc_bt.o(.text)
+    BT_SetBleAddr                            0x010023fb   Thumb Code    76  yc_bt.o(.text)
+    BT_SetVisibility                         0x01002447   Thumb Code   126  yc_bt.o(.text)
+    BT_SetBtName                             0x010024c5   Thumb Code    74  yc_bt.o(.text)
+    BT_SetBleName                            0x0100250f   Thumb Code    74  yc_bt.o(.text)
+    BT_SendSppData                           0x01002559   Thumb Code    86  yc_bt.o(.text)
+    BT_SendBleData                           0x010025af   Thumb Code    88  yc_bt.o(.text)
+    Bt_GetBtStatus                           0x01002607   Thumb Code   114  yc_bt.o(.text)
+    BT_SetParingMode                         0x01002679   Thumb Code    80  yc_bt.o(.text)
+    BT_SetPincode                            0x010026c9   Thumb Code    76  yc_bt.o(.text)
+    BT_BtDisconnect                          0x01002715   Thumb Code    76  yc_bt.o(.text)
+    BT_GetVersion                            0x01002761   Thumb Code    92  yc_bt.o(.text)
+    BT_BleDisconnect                         0x010027bd   Thumb Code    76  yc_bt.o(.text)
+    BT_SetNVRAM                              0x01002809   Thumb Code    76  yc_bt.o(.text)
+    BT_EnterSleepMode                        0x01002855   Thumb Code    26  yc_bt.o(.text)
+    BT_ConfirmGkey                           0x0100286f   Thumb Code    78  yc_bt.o(.text)
+    BT_SetSppFlowcontrol                     0x010028bd   Thumb Code    36  yc_bt.o(.text)
+    BT_PasskeyEntry                          0x010028e1   Thumb Code    76  yc_bt.o(.text)
+    BT_SetLEParing                           0x0100292d   Thumb Code    78  yc_bt.o(.text)
+    BT_SetLEAdvData                          0x0100297b   Thumb Code    76  yc_bt.o(.text)
+    BT_SetLEScanData                         0x010029c7   Thumb Code    76  yc_bt.o(.text)
+    BT_SetLESendConnUpdate                   0x01002a13   Thumb Code    98  yc_bt.o(.text)
+    BT_SetLEAdvParm                          0x01002a75   Thumb Code    84  yc_bt.o(.text)
+    BT_RejectJustWork                        0x01002ac9   Thumb Code    80  yc_bt.o(.text)
+    BT_SetTxPower                            0x01002b19   Thumb Code    80  yc_bt.o(.text)
+    BT_Set_FixedPasskey                      0x01002b69   Thumb Code    76  yc_bt.o(.text)
+    BT_SetCOD                                0x01002bb5   Thumb Code    76  yc_bt.o(.text)
+    BT_DeleteService                         0x01002c01   Thumb Code    76  yc_bt.o(.text)
+    BT_AddBleService                         0x01002c4d   Thumb Code    86  yc_bt.o(.text)
+    BT_AddBleCharacteristic                  0x01002ca3   Thumb Code    86  yc_bt.o(.text)
+    BT_DnsReq                                0x01002cf9   Thumb Code   108  yc_bt.o(.text)
+    BT_ConnectBnep                           0x01002d65   Thumb Code    76  yc_bt.o(.text)
+    BT_disconnectBnep                        0x01002db1   Thumb Code     8  yc_bt.o(.text)
+    BT_ConnectTcp                            0x01002db9   Thumb Code    76  yc_bt.o(.text)
+    BT_BnepSendTcpData                       0x01002e05   Thumb Code   100  yc_bt.o(.text)
+    BT_BnepSendTcpBigData                    0x01002e69   Thumb Code   300  yc_bt.o(.text)
+    BT_BnepSendUdpData                       0x01002f95   Thumb Code    88  yc_bt.o(.text)
+    BT_DisconnectTcp                         0x01002fed   Thumb Code    78  yc_bt.o(.text)
+    BT_ParseBTData                           0x0100303b   Thumb Code  1394  yc_bt.o(.text)
+    prt_get_bt_data                          0x010035ad   Thumb Code   442  yc_bt.o(.text)
+    SysTick_Delay_Ms                         0x010037fd   Thumb Code    56  yc_systick.o(.text)
+    SysTick_Delay_Us                         0x01003835   Thumb Code   120  yc_systick.o(.text)
+    SysTick_Config                           0x010038ad   Thumb Code    60  yc_systick.o(.text)
+    SysTick_disable                          0x010038e9   Thumb Code    28  yc_systick.o(.text)
+    SysTick_GetTick                          0x01003905   Thumb Code     6  yc_systick.o(.text)
+    SysTick_IsTimeOut                        0x0100390b   Thumb Code    74  yc_systick.o(.text)
+    SysTick_GetRelativeTime                  0x01003955   Thumb Code    62  yc_systick.o(.text)
+    _dma_wait                                0x01003a15   Thumb Code    20  yc_ipc.o(.text)
+    _dmacopy                                 0x01003a29   Thumb Code    30  yc_ipc.o(.text)
+    IPC_have_data                            0x01003a47   Thumb Code    56  yc_ipc.o(.text)
+    IPC_get_available_size                   0x01003a7f   Thumb Code   108  yc_ipc.o(.text)
+    IPC_TxData                               0x01003aeb   Thumb Code   194  yc_ipc.o(.text)
+    IPC_PutBtData                            0x01003bad   Thumb Code   184  yc_ipc.o(.text)
+    IPC_ReadBtData                           0x01003c65   Thumb Code   494  yc_ipc.o(.text)
+    IPC_ReadBtData_DMA                       0x01003e53   Thumb Code   640  yc_ipc.o(.text)
+    IPC_ReadIPC_Opcode                       0x010040d3   Thumb Code   128  yc_ipc.o(.text)
+    _download_btcode                         0x01004153   Thumb Code   276  yc_ipc.o(.text)
+    erase_memory                             0x01004267   Thumb Code    34  yc_ipc.o(.text)
+    IpcInit                                  0x01004289   Thumb Code   100  yc_ipc.o(.text)
+    PrintHCIPack                             0x010042ed   Thumb Code   130  yc_ipc.o(.text)
+    delay_us                                 0x010043e1   Thumb Code    12  yc_timer.o(.text)
+    delay_ms                                 0x010043ed   Thumb Code    14  yc_timer.o(.text)
+    TIM_Cmd                                  0x010043fb   Thumb Code    96  yc_timer.o(.text)
+    TIM_Init                                 0x0100445b   Thumb Code    82  yc_timer.o(.text)
+    TIM_DeInit                               0x010044ad   Thumb Code    20  yc_timer.o(.text)
+    TIM_ModeConfig                           0x010044c1   Thumb Code   114  yc_timer.o(.text)
+    TIM_SetPeriod                            0x01004533   Thumb Code    32  yc_timer.o(.text)
+    TIM_PWMInit                              0x01004553   Thumb Code   176  yc_timer.o(.text)
+    TIM_SetPWMPeriod                         0x01004603   Thumb Code    40  yc_timer.o(.text)
+    TIM_PWMDifferential                      0x0100462b   Thumb Code   170  yc_timer.o(.text)
+    SYSCTRL_AHBPeriphClockCmd                0x01004725   Thumb Code    52  yc_sysctrl.o(.text)
+    SYSCTRL_EnterSleep                       0x01004759   Thumb Code    26  yc_sysctrl.o(.text)
+    HCLKConfig_Div_None                      0x01004773   Thumb Code    30  yc_sysctrl.o(.text)
+    SYSCTRL_HCLKConfig                       0x01004791   Thumb Code    78  yc_sysctrl.o(.text)
+    SYSCTRL_GetClocksFreq                    0x010047df   Thumb Code    24  yc_sysctrl.o(.text)
+    SYSCTRL_EnableDpllClk                    0x010047f7   Thumb Code    66  yc_sysctrl.o(.text)
+    __aeabi_uidiv                            0x01004899   Thumb Code     0  uidiv.o(.text)
+    __aeabi_uidivmod                         0x01004899   Thumb Code    44  uidiv.o(.text)
+    __aeabi_idiv                             0x010048c5   Thumb Code     0  idiv.o(.text)
+    __aeabi_idivmod                          0x010048c5   Thumb Code    40  idiv.o(.text)
+    __aeabi_memcpy                           0x010048ed   Thumb Code    36  memcpya.o(.text)
+    __aeabi_memcpy4                          0x010048ed   Thumb Code     0  memcpya.o(.text)
+    __aeabi_memcpy8                          0x010048ed   Thumb Code     0  memcpya.o(.text)
+    __aeabi_memset                           0x01004911   Thumb Code    14  memseta.o(.text)
+    __aeabi_memset4                          0x01004911   Thumb Code     0  memseta.o(.text)
+    __aeabi_memset8                          0x01004911   Thumb Code     0  memseta.o(.text)
+    __aeabi_memclr                           0x0100491f   Thumb Code     4  memseta.o(.text)
+    __aeabi_memclr4                          0x0100491f   Thumb Code     0  memseta.o(.text)
+    __aeabi_memclr8                          0x0100491f   Thumb Code     0  memseta.o(.text)
+    _memset$wrapper                          0x01004923   Thumb Code    18  memseta.o(.text)
+    __aeabi_uread4                           0x01004935   Thumb Code    20  uread4.o(.text)
+    __rt_uread4                              0x01004935   Thumb Code     0  uread4.o(.text)
+    _uread4                                  0x01004935   Thumb Code     0  uread4.o(.text)
+    __aeabi_uwrite4                          0x01004949   Thumb Code    18  uwrite4.o(.text)
+    __rt_uwrite4                             0x01004949   Thumb Code     0  uwrite4.o(.text)
+    _uwrite4                                 0x01004949   Thumb Code     0  uwrite4.o(.text)
+    __scatterload                            0x0100495d   Thumb Code    28  init.o(.text)
+    __scatterload_rt2                        0x0100495d   Thumb Code     0  init.o(.text)
+    Long Thumb to Thumb Veneer to delay      0x01004981   Thumb Code    12  anon$$obj.o(Veneer$$Code)
+    __ARM_common_switch8                     0x0100498d   Thumb Code    28  main.o(i.__ARM_common_switch8)
+    __scatterload_copy                       0x010049a9   Thumb Code    14  handlers.o(i.__scatterload_copy)
+    __scatterload_null                       0x010049b7   Thumb Code     2  handlers.o(i.__scatterload_null)
+    __scatterload_zeroinit                   0x010049b9   Thumb Code    14  handlers.o(i.__scatterload_zeroinit)
+    _qspi_flash_write                        0x010049c9   Thumb Code   122  yc_qspi.o(i._qspi_flash_write)
+    end_qspi                                 0x01004a4d   Thumb Code    28  yc_qspi.o(i.end_qspi)
+    pre_qspi                                 0x01004a6d   Thumb Code    56  yc_qspi.o(i.pre_qspi)
+    prefetch                                 0x01004ab1   Thumb Code     4  yc_qspi.o(i.prefetch)
+    qspi_flash_sectorerase                   0x01004ab9   Thumb Code    36  yc_qspi.o(i.qspi_flash_sectorerase)
+    qspi_flash_write                         0x01004ae1   Thumb Code    44  yc_qspi.o(i.qspi_flash_write)
+    setqspi                                  0x01004b0d   Thumb Code    36  yc_qspi.o(i.setqspi)
+    bt_code                                  0x01004b40   Data        5772  bt_code.o(.constdata)
+    Region$$Table$$Base                      0x01006444   Number         0  anon$$obj.o(Region$$Table)
+    Region$$Table$$Limit                     0x01006464   Number         0  anon$$obj.o(Region$$Table)
+
+
+
+==============================================================================
+
+Memory Map of the image
+
+  Image Entry point : 0x01000401
+
+  Load Region LR_IROM1 (Base: 0x00000000, Size: 0x000000d4, Max: 0x00001fff, ABSOLUTE)
+
+    Execution Region ER_IROM1 (Exec base: 0x00000000, Load base: 0x00000000, Size: 0x000000d4, Max: 0x00001fff, ABSOLUTE)
+
+    Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object
+
+    0x00000000   0x00000000   0x000000c0   Data   RO          272    RESET               startup.o
+    0x000000c0   0x000000c0   0x00000014   Code   RO          273    .text               startup.o
+
+
+
+  Load Region LR_IROM3 (Base: 0x01000200, Size: 0x00000140, Max: 0x00000200, ABSOLUTE)
+
+    Execution Region ER_IROM3 (Exec base: 0x01000200, Load base: 0x01000200, Size: 0x00000140, Max: 0xffffffff, ABSOLUTE)
+
+    Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object
+
+    0x01000200   0x01000200   0x00000140   Code   RO          265    .flash_start        flash_start.o
+
+
+
+  Load Region LR_IROM4 (Base: 0x01000400, Size: 0x000060b0, Max: 0x01000000, ABSOLUTE)
+
+    Execution Region RW_IRAM2 (Exec base: 0x00020000, Load base: 0x01006464, Size: 0x00003620, Max: 0x00010000, ABSOLUTE)
+
+    Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object
+
+    0x00020000   0x01006464   0x00000019   Data   RW           66    .data               main.o
+    0x00020019   0x0100647d   0x00000003   PAD
+    0x0002001c   0x01006480   0x0000001e   Data   RW          155    .data               yc_bt.o
+    0x0002003a   0x0100649e   0x00000002   PAD
+    0x0002003c   0x010064a0   0x00000004   Data   RW          172    .data               yc_systick.o
+    0x00020040   0x010064a4   0x00000009   Data   RW          187    .data               yc_ipc.o
+    0x00020049   0x010064ad   0x00000003   PAD
+    0x0002004c        -       0x00000de0   Zero   RW           65    .bss                main.o
+    0x00020e2c        -       0x00000800   Zero   RW          138    .bss                yc_uart.o
+    0x0002162c        -       0x00001ff4   Zero   RW          154    .bss                yc_bt.o
+
+
+    Execution Region ER_IROM4 (Exec base: 0x01000400, Load base: 0x01000400, Size: 0x00006064, Max: 0xffffffff, ABSOLUTE)
+
+    Exec Addr    Load Addr    Size         Type   Attr      Idx    E Section Name        Object
+
+    0x01000400   0x01000400   0x00000000   Code   RO          439  * .ARM.Collect$$$$00000000  mc_p.l(entry.o)
+    0x01000400   0x01000400   0x00000004   Code   RO          456    .ARM.Collect$$$$00000001  mc_p.l(entry2.o)
+    0x01000404   0x01000404   0x00000004   Code   RO          459    .ARM.Collect$$$$00000004  mc_p.l(entry5.o)
+    0x01000408   0x01000408   0x00000000   Code   RO          461    .ARM.Collect$$$$00000008  mc_p.l(entry7b.o)
+    0x01000408   0x01000408   0x00000000   Code   RO          463    .ARM.Collect$$$$0000000A  mc_p.l(entry8b.o)
+    0x01000408   0x01000408   0x00000008   Code   RO          464    .ARM.Collect$$$$0000000B  mc_p.l(entry9a.o)
+    0x01000410   0x01000410   0x00000000   Code   RO          466    .ARM.Collect$$$$0000000D  mc_p.l(entry10a.o)
+    0x01000410   0x01000410   0x00000000   Code   RO          468    .ARM.Collect$$$$0000000F  mc_p.l(entry11a.o)
+    0x01000410   0x01000410   0x00000004   Code   RO          457    .ARM.Collect$$$$00002712  mc_p.l(entry2.o)
+    0x01000414   0x01000414   0x000000e0   Code   RO            1    .text               misc.o
+    0x010004f4   0x010004f4   0x00000344   Code   RO           36    .text               system.o
+    0x01000838   0x01000838   0x00000d1c   Code   RO           64    .text               main.o
+    0x01001554   0x01001554   0x00000620   Code   RO          124    .text               yc_gpio.o
+    0x01001b74   0x01001b74   0x000006d0   Code   RO          137    .text               yc_uart.o
+    0x01002244   0x01002244   0x0000153c   Code   RO          153    .text               yc_bt.o
+    0x01003780   0x01003780   0x0000026c   Code   RO          170    .text               yc_systick.o
+    0x010039ec   0x010039ec   0x000009f4   Code   RO          186    .text               yc_ipc.o
+    0x010043e0   0x010043e0   0x00000344   Code   RO          219    .text               yc_timer.o
+    0x01004724   0x01004724   0x00000174   Code   RO          252    .text               yc_sysctrl.o
+    0x01004898   0x01004898   0x0000002c   Code   RO          442    .text               mc_p.l(uidiv.o)
+    0x010048c4   0x010048c4   0x00000028   Code   RO          444    .text               mc_p.l(idiv.o)
+    0x010048ec   0x010048ec   0x00000024   Code   RO          446    .text               mc_p.l(memcpya.o)
+    0x01004910   0x01004910   0x00000024   Code   RO          448    .text               mc_p.l(memseta.o)
+    0x01004934   0x01004934   0x00000014   Code   RO          452    .text               mc_p.l(uread4.o)
+    0x01004948   0x01004948   0x00000012   Code   RO          454    .text               mc_p.l(uwrite4.o)
+    0x0100495a   0x0100495a   0x00000002   PAD
+    0x0100495c   0x0100495c   0x00000024   Code   RO          470    .text               mc_p.l(init.o)
+    0x01004980   0x01004980   0x0000000c   Ven    RO          480    Veneer$$Code        anon$$obj.o
+    0x0100498c   0x0100498c   0x0000001c   Code   RO           77    i.__ARM_common_switch8  main.o
+    0x010049a8   0x010049a8   0x0000000e   Code   RO          474    i.__scatterload_copy  mc_p.l(handlers.o)
+    0x010049b6   0x010049b6   0x00000002   Code   RO          475    i.__scatterload_null  mc_p.l(handlers.o)
+    0x010049b8   0x010049b8   0x0000000e   Code   RO          476    i.__scatterload_zeroinit  mc_p.l(handlers.o)
+    0x010049c6   0x010049c6   0x00000002   PAD
+    0x010049c8   0x010049c8   0x00000084   Code   RO          278    i._qspi_flash_write  yc_qspi.lib(yc_qspi.o)
+    0x01004a4c   0x01004a4c   0x00000020   Code   RO          287    i.end_qspi          yc_qspi.lib(yc_qspi.o)
+    0x01004a6c   0x01004a6c   0x00000044   Code   RO          289    i.pre_qspi          yc_qspi.lib(yc_qspi.o)
+    0x01004ab0   0x01004ab0   0x00000008   Code   RO          290    i.prefetch          yc_qspi.lib(yc_qspi.o)
+    0x01004ab8   0x01004ab8   0x00000028   Code   RO          294    i.qspi_flash_sectorerase  yc_qspi.lib(yc_qspi.o)
+    0x01004ae0   0x01004ae0   0x0000002c   Code   RO          295    i.qspi_flash_write  yc_qspi.lib(yc_qspi.o)
+    0x01004b0c   0x01004b0c   0x0000002c   Code   RO          298    i.setqspi           yc_qspi.lib(yc_qspi.o)
+    0x01004b38   0x01004b38   0x00000008   Data   RO           37    .constdata          system.o
+    0x01004b40   0x01004b40   0x0000168c   Data   RO           57    .constdata          bt_code.o
+    0x010061cc   0x010061cc   0x000000ae   Data   RO          125    .constdata          yc_gpio.o
+    0x0100627a   0x0100627a   0x000000d0   Data   RO          139    .constdata          yc_uart.o
+    0x0100634a   0x0100634a   0x00000031   Data   RO          171    .constdata          yc_systick.o
+    0x0100637b   0x0100637b   0x0000005f   Data   RO          220    .constdata          yc_timer.o
+    0x010063da   0x010063da   0x00000040   Data   RO          253    .constdata          yc_sysctrl.o
+    0x0100641a   0x0100641a   0x00000002   PAD
+    0x0100641c   0x0100641c   0x00000025   Data   RO           38    .conststring        system.o
+    0x01006441   0x01006441   0x00000003   PAD
+    0x01006444   0x01006444   0x00000020   Data   RO          472    Region$$Table       anon$$obj.o
+
+
+==============================================================================
+
+Image component sizes
+
+
+      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Object Name
+
+         0          0       5772          0          0        470   bt_code.o
+       320        134          0          0          0       2212   flash_start.o
+      3384       1282          0         25       3552      14185   main.o
+       224         12          0          0          0      27812   misc.o
+        20          4        192          0          0        472   startup.o
+       836         44         45          0          0       3365   system.o
+      5436        232          0         30       8180      17182   yc_bt.o
+      1568        110        174          0          0       4580   yc_gpio.o
+      2548        162          0          9          0      27384   yc_ipc.o
+         0          0          0          0          0      21524   yc_lpm.o
+       372         96         64          0          0       2258   yc_sysctrl.o
+       620         90         49          4          0       2540   yc_systick.o
+       836         80         95          0          0      24990   yc_timer.o
+      1744        138        208          0       2048       6920   yc_uart.o
+
+    ----------------------------------------------------------------------
+     17920       2388       6636         76      13780     155894   Object Totals
+        12          4         32          0          0          0   (incl. Generated)
+         0          0          5          8          0          0   (incl. Padding)
+
+    ----------------------------------------------------------------------
+
+      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Library Member Name
+
+         0          0          0          0          0          0   entry.o
+         0          0          0          0          0          0   entry10a.o
+         0          0          0          0          0          0   entry11a.o
+         8          4          0          0          0          0   entry2.o
+         4          0          0          0          0          0   entry5.o
+         0          0          0          0          0          0   entry7b.o
+         0          0          0          0          0          0   entry8b.o
+         8          4          0          0          0          0   entry9a.o
+        30          0          0          0          0          0   handlers.o
+        40          0          0          0          0         72   idiv.o
+        36          8          0          0          0         68   init.o
+        36          0          0          0          0         60   memcpya.o
+        36          0          0          0          0        100   memseta.o
+        44          0          0          0          0         72   uidiv.o
+        20          0          0          0          0         60   uread4.o
+        18          0          0          0          0         60   uwrite4.o
+       368         42          0          0          0       6374   yc_qspi.o
+
+    ----------------------------------------------------------------------
+       652         58          0          0          0       6866   Library Totals
+         4          0          0          0          0          0   (incl. Padding)
+
+    ----------------------------------------------------------------------
+
+      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Library Name
+
+       280         16          0          0          0        492   mc_p.l
+       368         42          0          0          0       6374   yc_qspi.lib
+
+    ----------------------------------------------------------------------
+       652         58          0          0          0       6866   Library Totals
+
+    ----------------------------------------------------------------------
+
+==============================================================================
+
+
+      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   
+
+     18572       2446       6636         76      13780     161408   Grand Totals
+     18572       2446       6636         76      13780     161408   ELF Image Totals
+     18572       2446       6636         76          0          0   ROM Totals
+
+==============================================================================
+
+    Total RO  Size (Code + RO Data)                25208 (  24.62kB)
+    Total RW  Size (RW Data + ZI Data)             13856 (  13.53kB)
+    Total ROM Size (Code + RO Data + RW Data)      25284 (  24.69kB)
+
+==============================================================================
+
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Listings/flash_start.lst
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Listings/flash_start.lst	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Listings/flash_start.lst	(working copy)
@@ -0,0 +1,1250 @@
+
+
+
+ARM Macro Assembler    Page 1 
+
+
+    1 00000000                 AREA             |.flash_start|, CODE, READONLY 
+ ,ALIGN=4
+    2 00000000         
+    3 00000000         Reset_Handler
+                               PROC
+    4 00000000                 EXPORT           Reset_Handler
+    5 00000000                 IMPORT           __main
+    6 00000000 4849            LDR              R0, =__main
+    7 00000002 4700            BX               R0
+    8 00000004                 ENDP
+    9 00000004         
+   10 00000004         
+   11 00000004         hard_fault_handler
+                               PROC
+   12 00000004                 EXPORT           hard_fault_handler
+   13 00000004 4849            ldr              r0,=HARD_FAULT_IRQHandler
+   14 00000006 4700            bx               r0
+   15 00000008 BF00            nop
+   16 0000000A                 ENDP
+   17 0000000A         
+   18 0000000A         svc_handler
+                               PROC
+   19 0000000A                 EXPORT           svc_handler
+   20 0000000A 4849            ldr              r0,=SVC_IRQHandler
+   21 0000000C 4700            bx               r0
+   22 0000000E BF00            nop
+   23 00000010                 ENDP
+   24 00000010         
+   25 00000010         pendsv_handler
+                               PROC
+   26 00000010                 EXPORT           pendsv_handler
+   27 00000010 4848            ldr              r0,=PENDSV_IRQHandler
+   28 00000012 4700            bx               r0
+   29 00000014 BF00            nop
+   30 00000016                 ENDP
+   31 00000016         
+   32 00000016         systick PROC
+   33 00000016                 EXPORT           systick
+   34 00000016 4848            ldr              r0,=SYSTICK_IRQHandler
+   35 00000018 4700            bx               r0
+   36 0000001A BF00            nop
+   37 0000001C                 ENDP
+   38 0000001C         
+   39 0000001C         irq0    PROC
+   40 0000001C                 EXPORT           irq0
+   41 0000001C 2000            movs             r0,#4*0
+   42 0000001E E7FE            b                isr
+   43 00000020                 ENDP
+   44 00000020         
+   45 00000020         irq1    PROC
+   46 00000020                 EXPORT           irq1
+   47 00000020 2004            movs             r0,#4*1
+   48 00000022 E7FE            b                isr
+   49 00000024                 ENDP
+   50 00000024         
+   51 00000024         irq2    PROC
+   52 00000024                 EXPORT           irq2
+   53 00000024 2008            movs             r0,#4*2
+   54 00000026 E7FE            b                isr
+
+
+
+ARM Macro Assembler    Page 2 
+
+
+   55 00000028                 ENDP
+   56 00000028         
+   57 00000028         irq3    PROC
+   58 00000028                 EXPORT           irq3
+   59 00000028 200C            movs             r0,#4*3
+   60 0000002A E7FE            b                isr
+   61 0000002C                 ENDP
+   62 0000002C         
+   63 0000002C         irq4    PROC
+   64 0000002C                 EXPORT           irq4
+   65 0000002C 2010            movs             r0,#4*4
+   66 0000002E E7FE            b                isr
+   67 00000030                 ENDP
+   68 00000030         
+   69 00000030         irq5    PROC
+   70 00000030                 EXPORT           irq5
+   71 00000030 2014            movs             r0,#4*5
+   72 00000032 E7FE            b                isr
+   73 00000034                 ENDP
+   74 00000034         
+   75 00000034         irq6    PROC
+   76 00000034                 EXPORT           irq6
+   77 00000034 2018            movs             r0,#4*6
+   78 00000036 E7FE            b                isr
+   79 00000038                 ENDP
+   80 00000038         
+   81 00000038         irq7    PROC
+   82 00000038                 EXPORT           irq7
+   83 00000038 201C            movs             r0,#4*7
+   84 0000003A E7FE            b                isr
+   85 0000003C                 ENDP
+   86 0000003C         
+   87 0000003C         irq8    PROC
+   88 0000003C                 EXPORT           irq8
+   89 0000003C 2020            movs             r0,#4*8
+   90 0000003E E7FE            b                isr
+   91 00000040                 ENDP
+   92 00000040         
+   93 00000040         irq9    PROC
+   94 00000040                 EXPORT           irq9
+   95 00000040 2024            movs             r0,#4*9
+   96 00000042 E7FE            b                isr
+   97 00000044                 ENDP
+   98 00000044         
+   99 00000044         irq10   PROC
+  100 00000044                 EXPORT           irq10
+  101 00000044 2028            movs             r0,#4*10
+  102 00000046 E7FE            b                isr
+  103 00000048                 ENDP
+  104 00000048         
+  105 00000048         irq11   PROC
+  106 00000048                 EXPORT           irq11
+  107 00000048 202C            movs             r0,#4*11
+  108 0000004A E7FE            b                isr
+  109 0000004C                 ENDP
+  110 0000004C         
+  111 0000004C         irq12   PROC
+  112 0000004C                 EXPORT           irq12
+  113 0000004C 2030            movs             r0,#4*12
+
+
+
+ARM Macro Assembler    Page 3 
+
+
+  114 0000004E E7FE            b                isr
+  115 00000050                 ENDP
+  116 00000050         
+  117 00000050         irq13   PROC
+  118 00000050                 EXPORT           irq13
+  119 00000050 2034            movs             r0,#4*13
+  120 00000052 E7FE            b                isr
+  121 00000054                 ENDP
+  122 00000054         
+  123 00000054         irq14   PROC
+  124 00000054                 EXPORT           irq14
+  125 00000054 2038            movs             r0,#4*14
+  126 00000056 E7FE            b                isr
+  127 00000058                 ENDP
+  128 00000058         
+  129 00000058         irq15   PROC
+  130 00000058                 EXPORT           irq15
+  131 00000058 203C            movs             r0,#4*15
+  132 0000005A E7FE            b                isr
+  133 0000005C                 ENDP
+  134 0000005C         
+  135 0000005C         irq16   PROC
+  136 0000005C                 EXPORT           irq16
+  137 0000005C 2040            movs             r0,#4*16
+  138 0000005E E7FE            b                isr
+  139 00000060                 ENDP
+  140 00000060         
+  141 00000060         irq17   PROC
+  142 00000060                 EXPORT           irq17
+  143 00000060 2044            movs             r0,#4*17
+  144 00000062 E7FE            b                isr
+  145 00000064                 ENDP
+  146 00000064         
+  147 00000064         irq18   PROC
+  148 00000064                 EXPORT           irq18
+  149 00000064 2048            movs             r0,#4*18
+  150 00000066 E7FE            b                isr
+  151 00000068                 ENDP
+  152 00000068         
+  153 00000068         irq19   PROC
+  154 00000068                 EXPORT           irq19
+  155 00000068 204C            movs             r0,#4*19
+  156 0000006A E7FE            b                isr
+  157 0000006C                 ENDP
+  158 0000006C         
+  159 0000006C         irq20   PROC
+  160 0000006C                 EXPORT           irq20
+  161 0000006C 2050            movs             r0,#4*20
+  162 0000006E E7FE            b                isr
+  163 00000070                 ENDP
+  164 00000070         
+  165 00000070         irq21   PROC
+  166 00000070                 EXPORT           irq21
+  167 00000070 2054            movs             r0,#4*21
+  168 00000072 E7FE            b                isr
+  169 00000074                 ENDP
+  170 00000074         
+  171 00000074         irq22   PROC
+  172 00000074                 EXPORT           irq22
+
+
+
+ARM Macro Assembler    Page 4 
+
+
+  173 00000074 2058            movs             r0,#4*22
+  174 00000076 E7FE            b                isr
+  175 00000078                 ENDP
+  176 00000078         
+  177 00000078         irq23   PROC
+  178 00000078                 EXPORT           irq23
+  179 00000078 205C            movs             r0,#4*23
+  180 0000007A E7FE            b                isr
+  181 0000007C                 ENDP
+  182 0000007C         
+  183 0000007C         irq24   PROC
+  184 0000007C                 EXPORT           irq24
+  185 0000007C 2060            movs             r0,#4*24
+  186 0000007E E7FE            b                isr
+  187 00000080                 ENDP
+  188 00000080         
+  189 00000080         irq25   PROC
+  190 00000080                 EXPORT           irq25
+  191 00000080 2064            movs             r0,#4*25
+  192 00000082 E7FE            b                isr
+  193 00000084                 ENDP
+  194 00000084         
+  195 00000084         irq26   PROC
+  196 00000084                 EXPORT           irq26
+  197 00000084 2068            movs             r0,#4*26
+  198 00000086 E7FE            b                isr
+  199 00000088                 ENDP
+  200 00000088         
+  201 00000088         irq27   PROC
+  202 00000088                 EXPORT           irq27
+  203 00000088 206C            movs             r0,#4*27
+  204 0000008A E7FE            b                isr
+  205 0000008C                 ENDP
+  206 0000008C         
+  207 0000008C         irq28   PROC
+  208 0000008C                 EXPORT           irq28
+  209 0000008C 2070            movs             r0,#4*28
+  210 0000008E E7FE            b                isr
+  211 00000090                 ENDP
+  212 00000090         
+  213 00000090         irq29   PROC
+  214 00000090                 EXPORT           irq29
+  215 00000090 2074            movs             r0,#4*29
+  216 00000092 E7FE            b                isr
+  217 00000094                 ENDP
+  218 00000094         
+  219 00000094         irq30   PROC
+  220 00000094                 EXPORT           irq30
+  221 00000094 2078            movs             r0,#4*30
+  222 00000096 E7FE            b                isr
+  223 00000098                 ENDP
+  224 00000098         
+  225 00000098         irq31   PROC
+  226 00000098                 EXPORT           irq31
+  227 00000098 207C            movs             r0,#4*31
+  228 0000009A E7FE            b                isr
+  229 0000009C                 ENDP
+  230 0000009C         
+  231 0000009C         
+
+
+
+ARM Macro Assembler    Page 5 
+
+
+  232 0000009C         isr     PROC
+  233 0000009C 4927            ldr              r1,=isr_table
+  234 0000009E 5840            ldr              r0,[r0, r1]
+  235 000000A0 4700            bx               r0
+  236 000000A2                 ENDP
+  237 000000A2         
+  238 000000A2 00 00           ALIGN
+  239 000000A4         NMI_IRQHandler
+                               PROC
+  240 000000A4                 EXPORT           NMI_IRQHandler    [WEAK]
+  241 000000A4 E7FE            B                .
+  242 000000A6                 ENDP
+  243 000000A6         
+  244 000000A6         HARD_FAULT_IRQHandler
+                               PROC
+  245 000000A6                 EXPORT           HARD_FAULT_IRQHandler  [WEAK]
+  246 000000A6 E7FE            B                .
+  247 000000A8                 ENDP
+  248 000000A8         
+  249 000000A8         SVC_IRQHandler
+                               PROC
+  250 000000A8                 EXPORT           SVC_IRQHandler    [WEAK]
+  251 000000A8 E7FE            B                .
+  252 000000AA                 ENDP
+  253 000000AA         
+  254 000000AA         PENDSV_IRQHandler
+                               PROC
+  255 000000AA                 EXPORT           PENDSV_IRQHandler   [WEAK]
+  256 000000AA E7FE            B                .
+  257 000000AC                 ENDP
+  258 000000AC         
+  259 000000AC         SYSTICK_IRQHandler
+                               PROC
+  260 000000AC                 EXPORT           SYSTICK_IRQHandler   [WEAK]
+  261 000000AC E7FE            B                .
+  262 000000AE                 ENDP
+  263 000000AE         
+  264 000000AE         EXTI0_IRQHandler
+                               PROC
+  265 000000AE                 EXPORT           EXTI0_IRQHandler   [WEAK]
+  266 000000AE E7FE            B                .
+  267 000000B0                 ENDP
+  268 000000B0         
+  269 000000B0         EXTI1_IRQHandler
+                               PROC
+  270 000000B0                 EXPORT           EXTI1_IRQHandler   [WEAK]
+  271 000000B0 E7FE            B                .
+  272 000000B2                 ENDP
+  273 000000B2         
+  274 000000B2         EXTI2_IRQHandler
+                               PROC
+  275 000000B2                 EXPORT           EXTI2_IRQHandler   [WEAK]
+  276 000000B2 E7FE            B                .
+  277 000000B4                 ENDP
+  278 000000B4         
+  279 000000B4         EXTI3_IRQHandler
+                               PROC
+  280 000000B4                 EXPORT           EXTI3_IRQHandler   [WEAK]
+  281 000000B4 E7FE            B                .
+
+
+
+ARM Macro Assembler    Page 6 
+
+
+  282 000000B6                 ENDP
+  283 000000B6         
+  284 000000B6         EXTI4_IRQHandler
+                               PROC
+  285 000000B6                 EXPORT           EXTI4_IRQHandler   [WEAK]
+  286 000000B6 E7FE            B                .
+  287 000000B8                 ENDP
+  288 000000B8         
+  289 000000B8         EXTI5_IRQHandler
+                               PROC
+  290 000000B8                 EXPORT           EXTI5_IRQHandler   [WEAK]
+  291 000000B8 E7FE            B                .
+  292 000000BA                 ENDP
+  293 000000BA         
+  294 000000BA         Default_Handler
+                               PROC
+  295 000000BA         ; ToDo:  Add here the export definition for the device s
+                       pecific external interrupts handler
+  296 000000BA                 EXPORT           USB_IRQHandler   [WEAK]
+  297 000000BA                 EXPORT           IIC_IRQHandler    [WEAK]
+  298 000000BA                 EXPORT           QSPI_IRQHandler   [WEAK]
+  299 000000BA                 EXPORT           SPI0_IRQHandler   [WEAK]
+  300 000000BA                 EXPORT           SPI1_IRQHandler   [WEAK]
+  301 000000BA                 EXPORT           UART0_IRQHandler  [WEAK]
+  302 000000BA                 EXPORT           UART1_IRQHandler  [WEAK]
+  303 000000BA                 EXPORT           MEMCP_IRQHandler  [WEAK]
+  304 000000BA                 EXPORT           RSA_IRQHandler    [WEAK]
+  305 000000BA                 EXPORT           SCI0_IRQHandler   [WEAK]
+  306 000000BA                 EXPORT           SCI1_IRQHandler   [WEAK]
+  307 000000BA                 EXPORT           BT_IRQHandler   [WEAK]
+  308 000000BA                 EXPORT           GPIO_IRQHandler     [WEAK]
+  309 000000BA                 EXPORT           TIMER0_IRQHandler [WEAK]
+  310 000000BA                 EXPORT           TIMER1_IRQHandler [WEAK]
+  311 000000BA                 EXPORT           TIMER2_IRQHandler [WEAK]
+  312 000000BA                 EXPORT           TIMER3_IRQHandler [WEAK]
+  313 000000BA                 EXPORT           TIMER4_IRQHandler [WEAK]
+  314 000000BA                 EXPORT           TIMER5_IRQHandler [WEAK]
+  315 000000BA                 EXPORT           TIMER6_IRQHandler [WEAK]
+  316 000000BA                 EXPORT           TIMER7_IRQHandler [WEAK]
+  317 000000BA                 EXPORT           TIMER8_IRQHandler  [WEAK]
+  318 000000BA                 EXPORT           SM4_IRQHandler    [WEAK]
+  319 000000BA                 EXPORT           SEC_IRQHandler  [WEAK]
+  320 000000BA                 EXPORT           MSR_IRQHandler  [WEAK]
+  321 000000BA                 EXPORT           TRNG_IRQHandler  [WEAK]
+  322 000000BA                 EXPORT           WDT_IRQHandler  [WEAK]
+  323 000000BA         
+  324 000000BA         ; ToDo:  Add here the names for the device specific exte
+                       rnal interrupts handler
+  325 000000BA         USB_IRQHandler
+  326 000000BA         IIC_IRQHandler
+  327 000000BA         QSPI_IRQHandler
+  328 000000BA         SPI0_IRQHandler
+  329 000000BA         SPI1_IRQHandler
+  330 000000BA         UART0_IRQHandler
+  331 000000BA         UART1_IRQHandler
+  332 000000BA         MEMCP_IRQHandler
+  333 000000BA         RSA_IRQHandler
+  334 000000BA         SCI0_IRQHandler
+  335 000000BA         SCI1_IRQHandler
+
+
+
+ARM Macro Assembler    Page 7 
+
+
+  336 000000BA         BT_IRQHandler
+  337 000000BA         GPIO_IRQHandler
+  338 000000BA         TIMER0_IRQHandler
+  339 000000BA         TIMER1_IRQHandler
+  340 000000BA         TIMER2_IRQHandler
+  341 000000BA         TIMER3_IRQHandler
+  342 000000BA         TIMER4_IRQHandler
+  343 000000BA         TIMER5_IRQHandler
+  344 000000BA         TIMER6_IRQHandler
+  345 000000BA         TIMER7_IRQHandler
+  346 000000BA         TIMER8_IRQHandler
+  347 000000BA         SM4_IRQHandler
+  348 000000BA         SEC_IRQHandler
+  349 000000BA         MSR_IRQHandler
+  350 000000BA         TRNG_IRQHandler
+  351 000000BA         WDT_IRQHandler
+  352 000000BA E7FE            B                .
+  353 000000BC                 ENDP
+  354 000000BC         
+  355 000000BC         
+  356 000000BC         
+  357 000000BC                 EXPORT           isr_table
+  358 000000BC 00000000 
+                       isr_table
+                               DCD              USB_IRQHandler
+  359 000000C0 00000000        DCD              IIC_IRQHandler
+  360 000000C4 00000000        DCD              QSPI_IRQHandler
+  361 000000C8 00000000        DCD              SPI0_IRQHandler
+  362 000000CC 00000000        DCD              SPI1_IRQHandler
+  363 000000D0 00000000        DCD              UART0_IRQHandler
+  364 000000D4 00000000        DCD              UART1_IRQHandler
+  365 000000D8 00000000        DCD              MEMCP_IRQHandler
+  366 000000DC 00000000        DCD              RSA_IRQHandler
+  367 000000E0 00000000        DCD              SCI0_IRQHandler
+  368 000000E4 00000000        DCD              SCI1_IRQHandler
+  369 000000E8 00000000        DCD              BT_IRQHandler
+  370 000000EC 00000000        DCD              GPIO_IRQHandler
+  371 000000F0 00000000        DCD              TIMER0_IRQHandler
+  372 000000F4 00000000        DCD              TIMER1_IRQHandler
+  373 000000F8 00000000        DCD              TIMER2_IRQHandler
+  374 000000FC 00000000        DCD              TIMER3_IRQHandler
+  375 00000100 00000000        DCD              TIMER4_IRQHandler
+  376 00000104 00000000        DCD              TIMER5_IRQHandler
+  377 00000108 00000000        DCD              TIMER6_IRQHandler
+  378 0000010C 00000000        DCD              TIMER7_IRQHandler
+  379 00000110 00000000        DCD              TIMER8_IRQHandler
+  380 00000114 00000000        DCD              SM4_IRQHandler
+  381 00000118 00000000        DCD              SEC_IRQHandler
+  382 0000011C 00000000        DCD              MSR_IRQHandler
+  383 00000120 00000000        DCD              TRNG_IRQHandler
+  384 00000124 00000000        DCD              WDT_IRQHandler
+  385 00000128                 END
+              00000000 
+              00000000 
+              00000000 
+              00000000 
+              00000000 
+              00000000 
+Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M0 --apcs=interw
+
+
+
+ARM Macro Assembler    Page 8 
+
+
+ork --depend=.\objects\flash_start.d -o.\objects\flash_start.o -I.\RTE\_YC3121 
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Inc
+lude -IC:\Keil_v5\ARM\CMSIS\Include --predefine="__MICROLIB SETA 1" --predefine
+="__UVISION_VERSION SETA 528" --predefine="ARMCM0 SETA 1" --list=.\listings\fla
+sh_start.lst ..\..\..\..\..\Librarier\startup\flash_start.s
+
+
+
+ARM Macro Assembler    Page 1 Alphabetic symbol ordering
+Relocatable symbols
+
+.flash_start 00000000
+
+Symbol: .flash_start
+   Definitions
+      At line 1 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      None
+Comment: .flash_start unused
+BT_IRQHandler 000000BA
+
+Symbol: BT_IRQHandler
+   Definitions
+      At line 336 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 307 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 369 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+Default_Handler 000000BA
+
+Symbol: Default_Handler
+   Definitions
+      At line 294 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      None
+Comment: Default_Handler unused
+EXTI0_IRQHandler 000000AE
+
+Symbol: EXTI0_IRQHandler
+   Definitions
+      At line 264 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 265 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: EXTI0_IRQHandler used once
+EXTI1_IRQHandler 000000B0
+
+Symbol: EXTI1_IRQHandler
+   Definitions
+      At line 269 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 270 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: EXTI1_IRQHandler used once
+EXTI2_IRQHandler 000000B2
+
+Symbol: EXTI2_IRQHandler
+   Definitions
+      At line 274 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 275 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: EXTI2_IRQHandler used once
+EXTI3_IRQHandler 000000B4
+
+Symbol: EXTI3_IRQHandler
+   Definitions
+      At line 279 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 280 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: EXTI3_IRQHandler used once
+EXTI4_IRQHandler 000000B6
+
+
+
+
+ARM Macro Assembler    Page 2 Alphabetic symbol ordering
+Relocatable symbols
+
+Symbol: EXTI4_IRQHandler
+   Definitions
+      At line 284 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 285 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: EXTI4_IRQHandler used once
+EXTI5_IRQHandler 000000B8
+
+Symbol: EXTI5_IRQHandler
+   Definitions
+      At line 289 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 290 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: EXTI5_IRQHandler used once
+GPIO_IRQHandler 000000BA
+
+Symbol: GPIO_IRQHandler
+   Definitions
+      At line 337 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 308 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 370 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+HARD_FAULT_IRQHandler 000000A6
+
+Symbol: HARD_FAULT_IRQHandler
+   Definitions
+      At line 244 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 13 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 245 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+IIC_IRQHandler 000000BA
+
+Symbol: IIC_IRQHandler
+   Definitions
+      At line 326 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 297 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 359 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+MEMCP_IRQHandler 000000BA
+
+Symbol: MEMCP_IRQHandler
+   Definitions
+      At line 332 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 303 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 365 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+MSR_IRQHandler 000000BA
+
+Symbol: MSR_IRQHandler
+   Definitions
+      At line 349 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 320 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 382 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+
+
+
+ARM Macro Assembler    Page 3 Alphabetic symbol ordering
+Relocatable symbols
+
+NMI_IRQHandler 000000A4
+
+Symbol: NMI_IRQHandler
+   Definitions
+      At line 239 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 240 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: NMI_IRQHandler used once
+PENDSV_IRQHandler 000000AA
+
+Symbol: PENDSV_IRQHandler
+   Definitions
+      At line 254 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 27 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 255 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+QSPI_IRQHandler 000000BA
+
+Symbol: QSPI_IRQHandler
+   Definitions
+      At line 327 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 298 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 360 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+RSA_IRQHandler 000000BA
+
+Symbol: RSA_IRQHandler
+   Definitions
+      At line 333 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 304 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 366 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+Reset_Handler 00000000
+
+Symbol: Reset_Handler
+   Definitions
+      At line 3 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 4 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: Reset_Handler used once
+SCI0_IRQHandler 000000BA
+
+Symbol: SCI0_IRQHandler
+   Definitions
+      At line 334 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 305 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 367 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+SCI1_IRQHandler 000000BA
+
+Symbol: SCI1_IRQHandler
+   Definitions
+      At line 335 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 306 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+
+
+ARM Macro Assembler    Page 4 Alphabetic symbol ordering
+Relocatable symbols
+
+      At line 368 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+SEC_IRQHandler 000000BA
+
+Symbol: SEC_IRQHandler
+   Definitions
+      At line 348 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 319 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 381 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+SM4_IRQHandler 000000BA
+
+Symbol: SM4_IRQHandler
+   Definitions
+      At line 347 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 318 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 380 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+SPI0_IRQHandler 000000BA
+
+Symbol: SPI0_IRQHandler
+   Definitions
+      At line 328 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 299 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 361 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+SPI1_IRQHandler 000000BA
+
+Symbol: SPI1_IRQHandler
+   Definitions
+      At line 329 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 300 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 362 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+SVC_IRQHandler 000000A8
+
+Symbol: SVC_IRQHandler
+   Definitions
+      At line 249 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 20 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 250 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+SYSTICK_IRQHandler 000000AC
+
+Symbol: SYSTICK_IRQHandler
+   Definitions
+      At line 259 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 34 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 260 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+TIMER0_IRQHandler 000000BA
+
+Symbol: TIMER0_IRQHandler
+
+
+
+ARM Macro Assembler    Page 5 Alphabetic symbol ordering
+Relocatable symbols
+
+   Definitions
+      At line 338 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 309 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 371 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+TIMER1_IRQHandler 000000BA
+
+Symbol: TIMER1_IRQHandler
+   Definitions
+      At line 339 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 310 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 372 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+TIMER2_IRQHandler 000000BA
+
+Symbol: TIMER2_IRQHandler
+   Definitions
+      At line 340 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 311 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 373 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+TIMER3_IRQHandler 000000BA
+
+Symbol: TIMER3_IRQHandler
+   Definitions
+      At line 341 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 312 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 374 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+TIMER4_IRQHandler 000000BA
+
+Symbol: TIMER4_IRQHandler
+   Definitions
+      At line 342 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 313 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 375 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+TIMER5_IRQHandler 000000BA
+
+Symbol: TIMER5_IRQHandler
+   Definitions
+      At line 343 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 314 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 376 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+TIMER6_IRQHandler 000000BA
+
+Symbol: TIMER6_IRQHandler
+   Definitions
+      At line 344 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 315 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 377 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+
+
+ARM Macro Assembler    Page 6 Alphabetic symbol ordering
+Relocatable symbols
+
+
+TIMER7_IRQHandler 000000BA
+
+Symbol: TIMER7_IRQHandler
+   Definitions
+      At line 345 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 316 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 378 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+TIMER8_IRQHandler 000000BA
+
+Symbol: TIMER8_IRQHandler
+   Definitions
+      At line 346 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 317 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 379 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+TRNG_IRQHandler 000000BA
+
+Symbol: TRNG_IRQHandler
+   Definitions
+      At line 350 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 321 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 383 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+UART0_IRQHandler 000000BA
+
+Symbol: UART0_IRQHandler
+   Definitions
+      At line 330 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 301 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 363 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+UART1_IRQHandler 000000BA
+
+Symbol: UART1_IRQHandler
+   Definitions
+      At line 331 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 302 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 364 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+USB_IRQHandler 000000BA
+
+Symbol: USB_IRQHandler
+   Definitions
+      At line 325 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 296 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 358 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+WDT_IRQHandler 000000BA
+
+Symbol: WDT_IRQHandler
+   Definitions
+
+
+
+ARM Macro Assembler    Page 7 Alphabetic symbol ordering
+Relocatable symbols
+
+      At line 351 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 322 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 384 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+hard_fault_handler 00000004
+
+Symbol: hard_fault_handler
+   Definitions
+      At line 11 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 12 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: hard_fault_handler used once
+irq0 0000001C
+
+Symbol: irq0
+   Definitions
+      At line 39 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 40 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq0 used once
+irq1 00000020
+
+Symbol: irq1
+   Definitions
+      At line 45 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 46 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq1 used once
+irq10 00000044
+
+Symbol: irq10
+   Definitions
+      At line 99 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 100 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq10 used once
+irq11 00000048
+
+Symbol: irq11
+   Definitions
+      At line 105 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 106 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq11 used once
+irq12 0000004C
+
+Symbol: irq12
+   Definitions
+      At line 111 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 112 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq12 used once
+irq13 00000050
+
+Symbol: irq13
+   Definitions
+      At line 117 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+
+
+
+ARM Macro Assembler    Page 8 Alphabetic symbol ordering
+Relocatable symbols
+
+      At line 118 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq13 used once
+irq14 00000054
+
+Symbol: irq14
+   Definitions
+      At line 123 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 124 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq14 used once
+irq15 00000058
+
+Symbol: irq15
+   Definitions
+      At line 129 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 130 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq15 used once
+irq16 0000005C
+
+Symbol: irq16
+   Definitions
+      At line 135 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 136 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq16 used once
+irq17 00000060
+
+Symbol: irq17
+   Definitions
+      At line 141 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 142 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq17 used once
+irq18 00000064
+
+Symbol: irq18
+   Definitions
+      At line 147 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 148 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq18 used once
+irq19 00000068
+
+Symbol: irq19
+   Definitions
+      At line 153 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 154 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq19 used once
+irq2 00000024
+
+Symbol: irq2
+   Definitions
+      At line 51 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 52 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq2 used once
+irq20 0000006C
+
+
+
+ARM Macro Assembler    Page 9 Alphabetic symbol ordering
+Relocatable symbols
+
+
+Symbol: irq20
+   Definitions
+      At line 159 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 160 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq20 used once
+irq21 00000070
+
+Symbol: irq21
+   Definitions
+      At line 165 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 166 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq21 used once
+irq22 00000074
+
+Symbol: irq22
+   Definitions
+      At line 171 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 172 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq22 used once
+irq23 00000078
+
+Symbol: irq23
+   Definitions
+      At line 177 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 178 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq23 used once
+irq24 0000007C
+
+Symbol: irq24
+   Definitions
+      At line 183 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 184 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq24 used once
+irq25 00000080
+
+Symbol: irq25
+   Definitions
+      At line 189 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 190 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq25 used once
+irq26 00000084
+
+Symbol: irq26
+   Definitions
+      At line 195 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 196 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq26 used once
+irq27 00000088
+
+Symbol: irq27
+   Definitions
+
+
+
+ARM Macro Assembler    Page 10 Alphabetic symbol ordering
+Relocatable symbols
+
+      At line 201 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 202 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq27 used once
+irq28 0000008C
+
+Symbol: irq28
+   Definitions
+      At line 207 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 208 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq28 used once
+irq29 00000090
+
+Symbol: irq29
+   Definitions
+      At line 213 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 214 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq29 used once
+irq3 00000028
+
+Symbol: irq3
+   Definitions
+      At line 57 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 58 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq3 used once
+irq30 00000094
+
+Symbol: irq30
+   Definitions
+      At line 219 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 220 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq30 used once
+irq31 00000098
+
+Symbol: irq31
+   Definitions
+      At line 225 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 226 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq31 used once
+irq4 0000002C
+
+Symbol: irq4
+   Definitions
+      At line 63 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 64 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq4 used once
+irq5 00000030
+
+Symbol: irq5
+   Definitions
+      At line 69 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 70 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+
+
+ARM Macro Assembler    Page 11 Alphabetic symbol ordering
+Relocatable symbols
+
+Comment: irq5 used once
+irq6 00000034
+
+Symbol: irq6
+   Definitions
+      At line 75 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 76 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq6 used once
+irq7 00000038
+
+Symbol: irq7
+   Definitions
+      At line 81 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 82 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq7 used once
+irq8 0000003C
+
+Symbol: irq8
+   Definitions
+      At line 87 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 88 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq8 used once
+irq9 00000040
+
+Symbol: irq9
+   Definitions
+      At line 93 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 94 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: irq9 used once
+isr 0000009C
+
+Symbol: isr
+   Definitions
+      At line 232 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 42 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 48 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 54 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 60 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 66 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 72 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 78 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 84 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 90 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 96 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 102 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 108 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 114 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 120 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 126 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 132 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 138 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 144 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 150 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 156 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+
+
+ARM Macro Assembler    Page 12 Alphabetic symbol ordering
+Relocatable symbols
+
+      At line 162 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 168 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 174 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 180 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 186 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 192 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 198 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 204 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 210 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 216 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 222 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 228 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+isr_table 000000BC
+
+Symbol: isr_table
+   Definitions
+      At line 358 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 233 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+      At line 357 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+
+pendsv_handler 00000010
+
+Symbol: pendsv_handler
+   Definitions
+      At line 25 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 26 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: pendsv_handler used once
+svc_handler 0000000A
+
+Symbol: svc_handler
+   Definitions
+      At line 18 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 19 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: svc_handler used once
+systick 00000016
+
+Symbol: systick
+   Definitions
+      At line 32 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 33 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: systick used once
+79 symbols
+
+
+
+ARM Macro Assembler    Page 1 Alphabetic symbol ordering
+External symbols
+
+__main 00000000
+
+Symbol: __main
+   Definitions
+      At line 5 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+   Uses
+      At line 6 in file ..\..\..\..\..\Librarier\startup\flash_start.s
+Comment: __main used once
+1 symbol
+415 symbols in table
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Listings/startup.lst
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Listings/startup.lst	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Listings/startup.lst	(working copy)
@@ -0,0 +1,701 @@
+
+
+
+ARM Macro Assembler    Page 1 
+
+
+    1 00000000 00010000 
+                       Stack_Size
+                               EQU              0x0010000
+    2 00000000         
+    3 00000000                 AREA             STACK, NOINIT, READWRITE, ALIGN
+=4
+    4 00000000         Stack_Mem
+                               SPACE            Stack_Size
+    5 00010000 00030000 
+                       __initial_sp
+                               EQU              0x30000
+    6 00010000         
+    7 00010000         
+    8 00010000         ; <h> Heap Configuration
+    9 00010000         ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+   10 00010000         ; </h>
+   11 00010000         
+   12 00010000 00000000 
+                       Heap_Size
+                               EQU              0x00000000
+   13 00010000                 AREA             HEAP, NOINIT, READWRITE, ALIGN=
+4
+   14 00000000         __heap_base
+   15 00000000         Heap_Mem
+                               SPACE            Heap_Size
+   16 00000000         __heap_limit
+   17 00000000         
+   18 00000000         
+   19 00000000                 PRESERVE8
+   20 00000000                 THUMB
+   21 00000000         
+   22 00000000         
+   23 00000000         ; Vector Table Mapped to Address 0 at Reset
+   24 00000000         
+   25 00000000                 AREA             RESET, DATA, READONLY
+   26 00000000                 IMPORT           systick
+   27 00000000                 IMPORT           irq0
+   28 00000000                 IMPORT           irq1
+   29 00000000                 IMPORT           irq2
+   30 00000000                 IMPORT           irq3
+   31 00000000                 IMPORT           irq4
+   32 00000000                 IMPORT           irq5
+   33 00000000                 IMPORT           irq6
+   34 00000000                 IMPORT           irq7
+   35 00000000                 IMPORT           irq8
+   36 00000000                 IMPORT           irq9
+   37 00000000                 IMPORT           irq10
+   38 00000000                 IMPORT           irq11
+   39 00000000                 IMPORT           irq12
+   40 00000000                 IMPORT           irq13
+   41 00000000                 IMPORT           irq14
+   42 00000000                 IMPORT           irq15
+   43 00000000                 IMPORT           irq16
+   44 00000000                 IMPORT           irq17
+   45 00000000                 IMPORT           irq18
+   46 00000000                 IMPORT           irq19
+   47 00000000                 IMPORT           irq20
+   48 00000000                 IMPORT           irq21
+   49 00000000                 IMPORT           irq22
+
+
+
+ARM Macro Assembler    Page 2 
+
+
+   50 00000000                 IMPORT           irq23
+   51 00000000                 IMPORT           irq24
+   52 00000000                 IMPORT           irq25
+   53 00000000                 IMPORT           irq26
+   54 00000000                 IMPORT           irq27
+   55 00000000                 IMPORT           irq28
+   56 00000000                 IMPORT           irq29
+   57 00000000                 IMPORT           irq30
+   58 00000000                 IMPORT           irq31
+   59 00000000                 IMPORT           hard_fault_handler
+   60 00000000         
+   61 00000000                 EXPORT           __Vectors
+   62 00000000                 EXPORT           __Vectors_End
+   63 00000000                 EXPORT           __Vectors_Size
+   64 00000000 00030000 
+                       __Vectors
+                               DCD              __initial_sp ; Top of Stack
+   65 00000004 00000000        DCD              reset_handler ; Reset Handler
+   66 00000008 00000000        DCD              nmi_handler ; NMI Handler
+   67 0000000C 00000000        DCD              hard_fault_handler ; Hard Fault
+                                                             Handler     
+   68 00000010 00000000        DCD              0           ; 
+   69 00000014 00000000        DCD              0           ;
+   70 00000018 00000000        DCD              0           ;
+   71 0000001C 00000000        DCD              0           ;
+   72 00000020 00000000        DCD              0           ;
+   73 00000024 00000000        DCD              0           ;
+   74 00000028 00000000        DCD              0           ;
+   75 0000002C 00000000        DCD              0           ;
+   76 00000030 00000000        DCD              0           ;
+   77 00000034 00000000        DCD              0           ;
+   78 00000038 00000000        DCD              0           ;
+   79 0000003C 00000000        DCD              systick     ; 
+   80 00000040 00000000        DCD              irq0        ;
+   81 00000044 00000000        DCD              irq1        ;
+   82 00000048 00000000        DCD              irq2        ;
+   83 0000004C 00000000        DCD              irq3        ;
+   84 00000050 00000000        DCD              irq4        ;
+   85 00000054 00000000        DCD              irq5        ;
+   86 00000058 00000000        DCD              irq6        ;
+   87 0000005C 00000000        DCD              irq7        ;
+   88 00000060 00000000        DCD              irq8        ;
+   89 00000064 00000000        DCD              irq9        ;
+   90 00000068 00000000        DCD              irq10       ;
+   91 0000006C 00000000        DCD              irq11       ;
+   92 00000070 00000000        DCD              irq12       ;
+   93 00000074 00000000        DCD              irq13       ;
+   94 00000078 00000000        DCD              irq14       ;
+   95 0000007C 00000000        DCD              irq15       ;
+   96 00000080 00000000        DCD              irq16       ;
+   97 00000084 00000000        DCD              irq17       ;
+   98 00000088 00000000        DCD              irq18       ;
+   99 0000008C 00000000        DCD              irq19       ;
+  100 00000090 00000000        DCD              irq20       ;
+  101 00000094 00000000        DCD              irq21       ;
+  102 00000098 00000000        DCD              irq22       ;
+  103 0000009C 00000000        DCD              irq23       ;
+  104 000000A0 00000000        DCD              irq24       ;
+  105 000000A4 00000000        DCD              irq25       ;
+
+
+
+ARM Macro Assembler    Page 3 
+
+
+  106 000000A8 00000000        DCD              irq26       ;
+  107 000000AC 00000000        DCD              irq27       ;
+  108 000000B0 00000000        DCD              irq28       ;
+  109 000000B4 00000000        DCD              irq29       ;
+  110 000000B8 00000000        DCD              irq30       ;
+  111 000000BC 00000000        DCD              irq31       ;
+  112 000000C0         __Vectors_End
+  113 000000C0         
+  114 000000C0 000000C0 
+                       __Vectors_Size
+                               EQU              __Vectors_End - __Vectors
+  115 000000C0         
+  116 000000C0                 AREA             |.text|, CODE, READONLY ,ALIGN=
+4
+  117 00000000         
+  118 00000000         
+  119 00000000         
+  120 00000000         ; Reset Handler
+  121 00000000         
+  122 00000000         reset_handler
+                               PROC
+  123 00000000                 EXPORT           reset_handler             [WEAK
+]
+  124 00000000                 IMPORT           Reset_Handler
+  125 00000000         ;    bl  Reset_Handler
+  126 00000000         ;    movs r0,#0x3
+  127 00000000         
+  128 00000000 4803            LDR              R0, =Reset_Handler
+  129 00000002 4700            BX               R0
+  130 00000004 BF00            nop
+  131 00000006                 ENDP
+  132 00000006         
+  133 00000006         
+  134 00000006         
+  135 00000006         delay   PROC
+  136 00000006                 EXPORT           delay
+  137 00000006 3801            subs             r0,#1
+  138 00000008 D1FE            bne              delay
+  139 0000000A BF00            nop
+  140 0000000C 4770            bx               lr
+  141 0000000E                 ENDP
+  142 0000000E         
+  143 0000000E         nmi_handler
+                               PROC
+  144 0000000E                 EXPORT           nmi_handler             [WEAK]
+  145 0000000E E7FE            b                nmi_handler
+  146 00000010                 ENDP
+  147 00000010         
+  148 00000010                 ALIGN
+  149 00000010         
+  150 00000010         
+  151 00000010         ; User Initial Stack & Heap
+  152 00000010         
+  153 00000010                 IF               :DEF:__MICROLIB
+  154 00000010                 EXPORT           __initial_sp
+  155 00000010                 EXPORT           __heap_base
+  156 00000010                 EXPORT           __heap_limit
+  157 00000010         
+  158 00000010                 ELSE
+
+
+
+ARM Macro Assembler    Page 4 
+
+
+  173                          ENDIF
+  174 00000010         
+  175 00000010                 END
+              00000000 
+Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M0 --apcs=interw
+ork --depend=.\objects\startup.d -o.\objects\startup.o -I.\RTE\_YC3121 -IC:\Use
+rs\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include -IC
+:\Keil_v5\ARM\CMSIS\Include --predefine="__MICROLIB SETA 1" --predefine="__UVIS
+ION_VERSION SETA 528" --predefine="ARMCM0 SETA 1" --list=.\listings\startup.lst
+ ..\..\..\..\..\Librarier\startup\startup.s
+
+
+
+ARM Macro Assembler    Page 1 Alphabetic symbol ordering
+Relocatable symbols
+
+STACK 00000000
+
+Symbol: STACK
+   Definitions
+      At line 3 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      None
+Comment: STACK unused
+Stack_Mem 00000000
+
+Symbol: Stack_Mem
+   Definitions
+      At line 4 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      None
+Comment: Stack_Mem unused
+2 symbols
+
+
+
+ARM Macro Assembler    Page 1 Alphabetic symbol ordering
+Relocatable symbols
+
+HEAP 00000000
+
+Symbol: HEAP
+   Definitions
+      At line 13 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      None
+Comment: HEAP unused
+Heap_Mem 00000000
+
+Symbol: Heap_Mem
+   Definitions
+      At line 15 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      None
+Comment: Heap_Mem unused
+__heap_base 00000000
+
+Symbol: __heap_base
+   Definitions
+      At line 14 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 155 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: __heap_base used once
+__heap_limit 00000000
+
+Symbol: __heap_limit
+   Definitions
+      At line 16 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 156 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: __heap_limit used once
+4 symbols
+
+
+
+ARM Macro Assembler    Page 1 Alphabetic symbol ordering
+Relocatable symbols
+
+RESET 00000000
+
+Symbol: RESET
+   Definitions
+      At line 25 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      None
+Comment: RESET unused
+__Vectors 00000000
+
+Symbol: __Vectors
+   Definitions
+      At line 64 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 61 in file ..\..\..\..\..\Librarier\startup\startup.s
+      At line 114 in file ..\..\..\..\..\Librarier\startup\startup.s
+
+__Vectors_End 000000C0
+
+Symbol: __Vectors_End
+   Definitions
+      At line 112 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 62 in file ..\..\..\..\..\Librarier\startup\startup.s
+      At line 114 in file ..\..\..\..\..\Librarier\startup\startup.s
+
+3 symbols
+
+
+
+ARM Macro Assembler    Page 1 Alphabetic symbol ordering
+Relocatable symbols
+
+.text 00000000
+
+Symbol: .text
+   Definitions
+      At line 116 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      None
+Comment: .text unused
+delay 00000006
+
+Symbol: delay
+   Definitions
+      At line 135 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 136 in file ..\..\..\..\..\Librarier\startup\startup.s
+      At line 138 in file ..\..\..\..\..\Librarier\startup\startup.s
+
+nmi_handler 0000000E
+
+Symbol: nmi_handler
+   Definitions
+      At line 143 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 66 in file ..\..\..\..\..\Librarier\startup\startup.s
+      At line 144 in file ..\..\..\..\..\Librarier\startup\startup.s
+      At line 145 in file ..\..\..\..\..\Librarier\startup\startup.s
+
+reset_handler 00000000
+
+Symbol: reset_handler
+   Definitions
+      At line 122 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 65 in file ..\..\..\..\..\Librarier\startup\startup.s
+      At line 123 in file ..\..\..\..\..\Librarier\startup\startup.s
+
+4 symbols
+
+
+
+ARM Macro Assembler    Page 1 Alphabetic symbol ordering
+Absolute symbols
+
+Heap_Size 00000000
+
+Symbol: Heap_Size
+   Definitions
+      At line 12 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 15 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: Heap_Size used once
+Stack_Size 00010000
+
+Symbol: Stack_Size
+   Definitions
+      At line 1 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 4 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: Stack_Size used once
+__Vectors_Size 000000C0
+
+Symbol: __Vectors_Size
+   Definitions
+      At line 114 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 63 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: __Vectors_Size used once
+__initial_sp 00030000
+
+Symbol: __initial_sp
+   Definitions
+      At line 5 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 64 in file ..\..\..\..\..\Librarier\startup\startup.s
+      At line 154 in file ..\..\..\..\..\Librarier\startup\startup.s
+
+4 symbols
+
+
+
+ARM Macro Assembler    Page 1 Alphabetic symbol ordering
+External symbols
+
+Reset_Handler 00000000
+
+Symbol: Reset_Handler
+   Definitions
+      At line 124 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 128 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: Reset_Handler used once
+hard_fault_handler 00000000
+
+Symbol: hard_fault_handler
+   Definitions
+      At line 59 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 67 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: hard_fault_handler used once
+irq0 00000000
+
+Symbol: irq0
+   Definitions
+      At line 27 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 80 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq0 used once
+irq1 00000000
+
+Symbol: irq1
+   Definitions
+      At line 28 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 81 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq1 used once
+irq10 00000000
+
+Symbol: irq10
+   Definitions
+      At line 37 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 90 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq10 used once
+irq11 00000000
+
+Symbol: irq11
+   Definitions
+      At line 38 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 91 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq11 used once
+irq12 00000000
+
+Symbol: irq12
+   Definitions
+      At line 39 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 92 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq12 used once
+irq13 00000000
+
+Symbol: irq13
+
+
+
+ARM Macro Assembler    Page 2 Alphabetic symbol ordering
+External symbols
+
+   Definitions
+      At line 40 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 93 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq13 used once
+irq14 00000000
+
+Symbol: irq14
+   Definitions
+      At line 41 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 94 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq14 used once
+irq15 00000000
+
+Symbol: irq15
+   Definitions
+      At line 42 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 95 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq15 used once
+irq16 00000000
+
+Symbol: irq16
+   Definitions
+      At line 43 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 96 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq16 used once
+irq17 00000000
+
+Symbol: irq17
+   Definitions
+      At line 44 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 97 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq17 used once
+irq18 00000000
+
+Symbol: irq18
+   Definitions
+      At line 45 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 98 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq18 used once
+irq19 00000000
+
+Symbol: irq19
+   Definitions
+      At line 46 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 99 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq19 used once
+irq2 00000000
+
+Symbol: irq2
+   Definitions
+      At line 29 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+
+
+
+ARM Macro Assembler    Page 3 Alphabetic symbol ordering
+External symbols
+
+      At line 82 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq2 used once
+irq20 00000000
+
+Symbol: irq20
+   Definitions
+      At line 47 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 100 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq20 used once
+irq21 00000000
+
+Symbol: irq21
+   Definitions
+      At line 48 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 101 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq21 used once
+irq22 00000000
+
+Symbol: irq22
+   Definitions
+      At line 49 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 102 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq22 used once
+irq23 00000000
+
+Symbol: irq23
+   Definitions
+      At line 50 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 103 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq23 used once
+irq24 00000000
+
+Symbol: irq24
+   Definitions
+      At line 51 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 104 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq24 used once
+irq25 00000000
+
+Symbol: irq25
+   Definitions
+      At line 52 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 105 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq25 used once
+irq26 00000000
+
+Symbol: irq26
+   Definitions
+      At line 53 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 106 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq26 used once
+irq27 00000000
+
+
+
+ARM Macro Assembler    Page 4 Alphabetic symbol ordering
+External symbols
+
+
+Symbol: irq27
+   Definitions
+      At line 54 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 107 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq27 used once
+irq28 00000000
+
+Symbol: irq28
+   Definitions
+      At line 55 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 108 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq28 used once
+irq29 00000000
+
+Symbol: irq29
+   Definitions
+      At line 56 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 109 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq29 used once
+irq3 00000000
+
+Symbol: irq3
+   Definitions
+      At line 30 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 83 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq3 used once
+irq30 00000000
+
+Symbol: irq30
+   Definitions
+      At line 57 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 110 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq30 used once
+irq31 00000000
+
+Symbol: irq31
+   Definitions
+      At line 58 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 111 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq31 used once
+irq4 00000000
+
+Symbol: irq4
+   Definitions
+      At line 31 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 84 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq4 used once
+irq5 00000000
+
+Symbol: irq5
+   Definitions
+
+
+
+ARM Macro Assembler    Page 5 Alphabetic symbol ordering
+External symbols
+
+      At line 32 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 85 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq5 used once
+irq6 00000000
+
+Symbol: irq6
+   Definitions
+      At line 33 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 86 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq6 used once
+irq7 00000000
+
+Symbol: irq7
+   Definitions
+      At line 34 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 87 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq7 used once
+irq8 00000000
+
+Symbol: irq8
+   Definitions
+      At line 35 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 88 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq8 used once
+irq9 00000000
+
+Symbol: irq9
+   Definitions
+      At line 36 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 89 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: irq9 used once
+systick 00000000
+
+Symbol: systick
+   Definitions
+      At line 26 in file ..\..\..\..\..\Librarier\startup\startup.s
+   Uses
+      At line 79 in file ..\..\..\..\..\Librarier\startup\startup.s
+Comment: systick used once
+35 symbols
+387 symbols in table
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/HME230PC_YC3121_BOOT_V1.02.01.bin
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/HME230PC_YC3121_BOOT_V1.02.01.bin
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.axf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.axf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.build_log.htm
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.build_log.htm	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.build_log.htm	(working copy)
@@ -0,0 +1,66 @@
+<html>
+<body>
+<pre>
+<h1>礦ision Build Log</h1>
+<h2>Tool Versions:</h2>
+IDE-Version: μVision V5.28.0.0
+Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved.
+License Information: 1 yichip, 1, LIC=65ISZ-JPVKM-JJX6S-L3ADU-RQ762-VK0LS
+ 
+Tool Versions:
+Toolchain:       MDK-ARM Plus  Version: 5.28.0.0
+Toolchain Path:  C:\Keil_v5\ARM\ARMCC\Bin
+C Compiler:      Armcc.exe V5.06 update 6 (build 750)
+Assembler:       Armasm.exe V5.06 update 6 (build 750)
+Linker/Locator:  ArmLink.exe V5.06 update 6 (build 750)
+Library Manager: ArmAr.exe V5.06 update 6 (build 750)
+Hex Converter:   FromElf.exe V5.06 update 6 (build 750)
+CPU DLL:         SARMCM3.DLL V5.28.0.0
+Dialog DLL:      DARMCM1.DLL V1.19.2.0
+Target DLL:      Segger\JL2CM3.dll V2.99.36.0
+Dialog DLL:      TARMCM1.DLL V1.14.1.0
+ 
+<h2>Project:</h2>
+D:\desktop\zijietuozhan\sdk\ModuleDemo\BlueTooth\BT_BLE2\prj\MDK\YC3121_Keil.uvprojx
+Project File Date:  07/20/2021
+
+<h2>Output:</h2>
+*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
+Rebuild target 'YC3121'
+compiling misc.c...
+compiling system.c...
+compiling bt_code.c...
+compiling main.c...
+compiling yc_gpio.c...
+compiling yc_uart.c...
+compiling yc_bt.c...
+compiling yc_systick.c...
+compiling yc_ipc.c...
+compiling yc_otp.c...
+compiling yc_timer.c...
+compiling yc_lpm.c...
+compiling yc_sysctrl.c...
+assembling flash_start.s...
+assembling startup.s...
+linking...
+Program Size: Code=18572 RO-data=6636 RW-data=76 ZI-data=13780  
+FromELF: creating hex file...
+After Build - User command #1: fromelf.exe --text -a -c --output=YC3121_Keil_asm.txt ".\Objects\YC3121_Keil.axf"
+".\Objects\YC3121_Keil.axf" - 0 Error(s), 0 Warning(s).
+
+<h2>Software Packages used:</h2>
+
+Package Vendor: ARM
+                http://www.keil.com/pack/ARM.CMSIS.5.5.1.pack
+                ARM.CMSIS.5.5.1
+                CMSIS (Cortex Microcontroller Software Interface Standard)
+
+<h2>Collection of Component include folders:</h2>
+  .\RTE\_YC3121
+  C:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+
+<h2>Collection of Component Files used:</h2>
+Build Time Elapsed:  00:00:06
+</pre>
+</body>
+</html>
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.hex
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.hex	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.hex	(working copy)
@@ -0,0 +1,1586 @@
+:020000040000FA
+:1000000000000300C1000000CF0000000502000155
+:1000100000000000000000000000000000000000E0
+:1000200000000000000000000000000000000000D0
+:1000300000000000000000000000000017020001A6
+:100040001D02000121020001250200012902000118
+:100050002D020001310200013502000139020001C8
+:100060003D02000141020001450200014902000178
+:100070004D02000151020001550200015902000128
+:100080005D020001610200016502000169020001D8
+:100090006D02000171020001750200017902000188
+:1000A0007D02000181020001850200018902000138
+:1000B0008D020001910200019502000199020001E8
+:1000C0000348004700BF0138FDD100BF7047FEE77D
+:0400D0000102000128
+:020000040100F9
+:10020000494800474948004700BF4948004700BFE8
+:100210004848004700BF4848004700BF00203DE075
+:1002200004203BE0082039E00C2037E0102035E0C6
+:10023000142033E0182031E01C202FE020202DE096
+:1002400024202BE0282029E02C2027E0302025E066
+:10025000342023E0382021E03C201FE040201DE036
+:1002600044201BE0482019E04C2017E0502015E006
+:10027000542013E0582011E05C200FE060200DE0D6
+:1002800064200BE0682009E06C2007E0702005E0A6
+:10029000742003E0782001E07C20C04627494058C4
+:1002A00000470000FEE7FEE7FEE7FEE7FEE7FEE7A9
+:1002B000FEE7FEE7FEE7FEE7FEE7FEE7BB02000122
+:1002C000BB020001BB020001BB020001BB02000136
+:1002D000BB020001BB020001BB020001BB02000126
+:1002E000BB020001BB02000139080001BB02000192
+:1002F000BB020001BB020001BB020001BB02000106
+:10030000BB020001BB020001BB020001BB020001F5
+:10031000BB020001BB020001BB020001BB020001E5
+:10032000BB020001BB02000101040001A7020001A1
+:10033000A9020001AB020001BD080001BC020001DE
+:020000040100F9
+:100400000348854604F0AAFA004800474B1400014F
+:100410000000030010B50246002A19DA324813071B
+:100420001B0F083B9B089B00C0589307DC0EFF2363
+:10043000A34098438B071B0E9407E40EA340184378
+:10044000294B1407240F083CA408A400185118E0F5
+:10045000264803231B02C01893089B00C05893072B
+:10046000DC0EFF23A34098438B071B0E9407E40E7A
+:10047000A34018431D4B032424021B199408A40015
+:100480001851012010BD18481C3840680121090787
+:10049000084315491C394860704700BF1349096873
+:1004A000012282401143114A116000BF704700BF12
+:1004B000012181400D4A8032116000BF70470C4815
+:1004C000406B012108430A4948635520C86300BFB7
+:1004D000FEE7EFF3108001467047EFF30880014616
+:1004E000704780F3088870471CED00E000E100E0F1
+:1004F00040850F0070B5C0B006460C46154600207A
+:1005000003E0215C6A461154401CA842F9DB2A46EC
+:100510006946304601F0C1FD40B070BD0FB4F0B582
+:100520008BB011A8019048E1002400E0641C1098F1
+:10053000005D252803D01098005D0028F6D1002C1E
+:1005400004D0224600201099FFF7D4FF109800191C
+:100550001090109800782528E5D11098401C109034
+:1005600000252020039000BF10980178401C1090B7
+:10057000382930D014DC332928D008DC252970D064
+:10058000302920D031291FD032296BD11DE03429E8
+:100590001DD035291CD036291BD03729F5D119E0BB
+:1005A000702975D008DC392916D0582972D06329F2
+:1005B00022D06429E9D12BE073293DD075295CD084
+:1005C0007829E2D173E000BF00BF00BF00BF00BFC9
+:1005D00000BF00BF00BF00BF10982038C07F302888
+:1005E00002D1002D00D103900A20454310982038F5
+:1005F000C07F30384519B7E7019800680A90019824
+:10060000001D019001220AA90020FFF773FFD3E02B
+:10061000019800680A900198001D019000260A9830
+:10062000002805DA0A9840420A900120099001E06A
+:10063000002009900A2748E0019800680890019876
+:10064000001D0190002400E0641C0898005D002853
+:10065000FAD122460899FFF74DFFA5420CD92D1B70
+:1006600006E09CE0A2E0012268A10020FFF742FF23
+:1006700028466D1E0028F6D19EE0019800680A9079
+:100680000198001D019000260A27002009901CE017
+:100690000EE0FFE7019800680A900198001D0190A4
+:1006A0000026102700200990582002900DE000BF7E
+:1006B000019800680A900198001D019000261027FB
+:1006C000002009907820029000BF012403E020461A
+:1006D000784304466D1E204678430A99884207D81D
+:1006E000214679430846394604F0D6F8A042EED0B8
+:1006F0000998002800D06D1E0998002809D0039899
+:10070000302806D12D223046761C04A90A54002038
+:100710000990012D0BD9102D09D26D1E05E031462F
+:10072000761C04AA039850546D1E002DF7D1099829
+:10073000002804D02D223046761C04A90A5426E055
+:10074000029878280FD121460A9804F0A5F8394676
+:10075000009004F0A1F82E480068425C3046761CF8
+:1007600004A90A540EE021460A9804F095F8394687
+:10077000009004F091F827480068425C3046761CEF
+:1007800004A90A543946204604F086F80446002C91
+:10079000D6D1324604A90020FFF7ACFE0CE0109839
+:1007A000411E01220020FFF7A5FE05E005221AA147
+:1007B0000020FFF79FFE00BF00BF109800780028C0
+:1007C00000D0B1E601900BB0F0BC08BC04B01847F3
+:1007D000F7B505460E460024002711A00299FFF741
+:1007E0009DFE00BF0DE02007000F002804D1394610
+:1007F0000DA0FFF793FE1037295D0DA0FFF78EFEC9
+:10080000641CB442EFD3FEBD00BFFEE72000000031
+:10081000384B00013C4B00014552524F5200000042
+:100820000D0A2025733A00000D0A253038783A0069
+:10083000253032782000000010B5002432E0F9485D
+:100840000078F9490978884206DBF6480078F649CD
+:100850000978401AC4B206E0F24800780A30F2493A
+:100860000978401AC4B2092C0CDB0B20FFF71FFEDD
+:10087000EE48C07880218843EC49C8700120EC49DB
+:10088000087010BD0020EA490870E6480078401C56
+:10089000E4490870084600780A2801DB0020087047
+:1008A00002F0CBFB03F0CFF80028C8D1DF48C078B6
+:1008B00080218843DD49C87000BFE2E7DD48006859
+:1008C000401CDC49086008460068DB49884202D1C8
+:1008D0000020D8490860704730B50346002012E078
+:1008E0004C1E241A1C5D2411D44D2C5D450054551A
+:1008F0004C1E241A1C5D2407240FD04D2D5D44008E
+:10090000641C1555401C8842EADB30BDCC48807C15
+:10091000002801D0012070470020FCE70146C848AC
+:100920002038808D884201D1012070470020FCE7EB
+:10093000C3498874704710B50446002C06D0022CB9
+:100940000FD0032C09D0052C13D10EE0BDA0FFF76A
+:10095000E5FD022001F0B2FF0BE0BFA0FFF7DEFDD6
+:1009600007E0C3A0FFF7DAFD03E0C6A0FFF7D6FD5E
+:1009700000BF00BF10BD3EB5002400BF00200090A6
+:1009800001900290AE482038008EC2B22146641C0D
+:1009900068464254AA482038008E01122246641C40
+:1009A0006846815402222146641C42547F2221461B
+:1009B000641C425400222146641C4254214601F02A
+:1009C000F6FD3EBD3EB5054600249D482038008E0C
+:1009D000C2B22146641C6846425499482038008EB1
+:1009E00001122246641C6846815401222146641C7F
+:1009F00042542146641C4554214601F0D8FD012093
+:100A00003EBDFFB50446002002260246401C9E540F
+:100A100001260246401C9E5402260246401C9E545B
+:100A20004A1CD6B20246401C9E5409260246401C6F
+:100A30009E54002204E0A65C0546401C5E55521CF4
+:100A40008A42F8DB09260246401C9E54FF260546D2
+:100A5000401C5E5500260546401C5E550546401C60
+:100A60005E55002207E00525AE1A029DAE5D0546E3
+:100A7000401C5E55521C062AF5DB03E000260546A5
+:100A8000401C5E551F28F9DBFFBDF0B5A7B083A061
+:100A900000682690002582A00068259081A103C9E6
+:100AA0002491239081A103C92291219081A103C99E
+:100AB00020911F90142281A11AA803F017FF14227D
+:100AC00083A115A803F012FF142286A110A803F039
+:100AD0000DFF142288A10BA803F008FF202103A812
+:100AE00003F01DFF8948006A0007000F811C884839
+:100AF00003F0E8FE07467D21C90003F0E3FE064649
+:100B000002F0D4FE83A0FFF709FD4D4A203A118878
+:100B1000506801F00EFC81A0FFF700FD0B20FFF7ED
+:100B2000BCFC80A0FFF7FAFC02210B20FFF772FC4F
+:100B30000F214348143801F0EAFC012805D140494F
+:100B400014397AA0FFF7EAFC03E07FA0FFF7E6FC88
+:100B500001250F213A48143801F0B4FC012805D1D1
+:100B6000374914397DA0FFF7D9FC03E082A0FFF7D5
+:100B7000D5FC0125324801F040FC012810D1304855
+:100B800040792F4909792E4AD2780092019102903A
+:100B90002B488378427801787BA0FFF7BFFC03E005
+:100BA00085A0FFF7BBFC0125254801F000FC0128CA
+:100BB00010D12348407922490979214AD2780092FC
+:100BC000019102901E488378427801787FA0FFF758
+:100BD000A5FC03E05CA0FFF7A1FC0125184988797A
+:100BE00001F04AFD012805D11548817983A0FFF75E
+:100BF00095FC03E088A0FFF791FC012526A801F0F1
+:100C0000D9FF012803D18AA0FFF788FC03E08CA05C
+:100C1000FFF784FC012501F0F3FF012800D117E163
+:100C20001AE100002F0002003000020040800C009A
+:100C3000050002003C000200FFFFFF7F06000200EB
+:100C4000180102006576744254535050436F6E652C
+:100C5000637465640A000000657674425453505012
+:100C6000446973636F6E65637465640A0000000015
+:100C70006576744254424C45436F6E656374656497
+:100C80000A0000006576744254424C45446973631F
+:100C90006F6E65637465640A0000000080060400DE
+:100CA0000200FF000C0202FF01000000100201FF21
+:100CB00001000000100203FF010000001055E405D0
+:100CC000D2AF9FA98FE54A7DFE5549554D000000E2
+:100CD000101016962447C62361BAD94B4D1E5549AC
+:100CE000554D01000C10B39B7234BEECD4A8F443F4
+:100CF00041885549554D010018101803A6285ED8A3
+:100D0000EC911C48A3AC5549554D010040850F009E
+:100D100000B0710B7878310A000000007878320A50
+:100D2000000000007878330A000000005365744228
+:100D30006C654E616D655F73756320626C65206ED6
+:100D4000616D653A25730A00536574426C654E61A6
+:100D50006D655F6661696C65640A00005365746265
+:100D6000744E616D655F73756320737070206E6182
+:100D70006D653A25730A000053657462744E616DA7
+:100D8000655F6661696C0A00536574426C65416415
+:100D900064725F7375633A2530327820253032787B
+:100DA00020253032782025303278202530327820C6
+:100DB00025303278200A0000536574426C65416426
+:100DC00064725F6661696C0A0000000053657442DA
+:100DD00074416464725F7375633A253032782025FC
+:100DE0003032782025303278202530327820253076
+:100DF000327820253032780A0000000073657420B4
+:100E000070616972206D6F646520737563636573CB
+:100E1000733A25640A00000073657420706169727A
+:100E2000206D6F6465206661696C65640A0000006E
+:100E300073657420434F44207375636573730A00B0
+:100E400073657420434F44206661696C65640A00D1
+:100E5000CDA0FFF763FB03E0D1A0FFF75FFB012507
+:100E6000032125A801F0F2FE0446002C04D02146FF
+:100E7000D1A0FFF753FB04E02146D7A0FFF74EFBBC
+:100E80000125062123A801F00CFFDB4988850846CF
+:100E9000808D002805D00846818DD8A0FFF73EFB45
+:100EA00005E0D548818DE0A0FFF738FB012506213C
+:100EB00021A801F0F6FED049C8850846C08D00285B
+:100EC00005D00846C18DE3A0FFF728FB05E0CA481E
+:100ED000C18DEBA0FFF722FB012506211FA801F021
+:100EE000E0FEC54908860846008E002805D0084661
+:100EF000018EEEA0FFF712FB05E0BF48018EF8A0BF
+:100F0000FFF70CFB012511211AA801F09FFE0446F2
+:100F1000002C04D02146A8A0FFF700FB04E02146E6
+:100F2000ADA0FFF7FBFA0125142115A801F0B9FEC9
+:100F3000B14908860846008E002805D00846018E73
+:100F4000DAA0FFF7EBFA05E0AB48018EE4A0FFF76B
+:100F5000E5FA0125142110A801F0A3FEA649088690
+:100F60000846008E002805D00846018ECFA0FFF766
+:100F7000D5FA05E0A048018ED9A0FFF7CFFA0125E8
+:100F800006211FA801F08DFE9B4908860846008EA9
+:100F9000002805D00846018EC4A0FFF7BFFA05E07F
+:100FA0009548018ECEA0FFF7B9FA012503AB924A0E
+:100FB00020320F2110461438FFF723FD1F2103A80C
+:100FC00001F0DBFC012803D1D2A0FFF7A7FA03E070
+:100FD000D6A0FFF7A3FA01251F2103A801F0F3FC17
+:100FE000012803D1D7A0FFF799FA03E0DCA0FFF7AF
+:100FF00095FA012501221146104601F024FA012834
+:1010000003D1DEA0FFF78AFA03E0E2A0FFF786FA39
+:10101000012501F0A5FB784988620846816AE3A0B2
+:10102000FFF77CFA284627B0F0BD70B505460C46A0
+:1010300071498868FF21013103F071FC01F005F965
+:10104000082818D16C498968881C2246294603F073
+:101050004DFC6948C08D6849896808706648C08D34
+:101060000012654989684870A21C91B2624A906872
+:1010700001F09DFA0AE0604922468868294603F09B
+:1010800035FCA1B25C4A906801F066FA70BD10B5FB
+:101090000446CA480078012806D12078C849097852
+:1010A00048402070002010BDC6480078030003F0BF
+:1010B0006DFC0A060F1C293643505D69686720786D
+:1010C0001B2804D1BF480078401CBE4908709EE12F
+:1010D00020781C2805D1BB480078401CB94908700D
+:1010E00002E00020B749087091E12078732805D10B
+:1010F000B4480078401CB349087002E00020B149B0
+:10110000087084E12078652805D1AE480078401C3D
+:10111000AC49087002E00020AA49087077E1207805
+:10112000742805D1A7480078401CA649087002E041
+:101130000020A44908706AE12078202805D1A14840
+:101140000078401C9F49087002E000209D4908700B
+:101150005DE120786D2805D19A480078401C9949B6
+:10116000087002E000209749087050E120786D284F
+:1011700005D194480078401C9249087027E123E18A
+:1011800041E12EE124E1000064656C657465207323
+:10119000657276696365207375636573730A000011
+:1011A00064656C6574652073657276696365206635
+:1011B00061696C65640A000061646420736572761D
+:1011C000696365207375636573732C68616E646C05
+:1011D000653D253034780A00616464207365727659
+:1011E000696365206661696C65642C7265747572EB
+:1011F0006E3D253034780A00F800020061646420F6
+:1012000043686172616374657269737469632074A1
+:1012100078207375636573732C68616E646C653DCB
+:10122000253034780A0000006164642043686172EC
+:101230006163746572697374696320747820666190
+:10124000696C65642C72657475726E3D25303478F6
+:101250000A00000061646420436861726163746520
+:101260007269737469632072782073756365737330
+:101270003B68616E646C653D253034780A0000007F
+:101280006164642043686172616374657269737438
+:101290006963207278206661696C65642C7265747C
+:1012A00075726E3D253034780A0000006164642058
+:1012B00043686172616374657269737469632066FF
+:1012C0006C6F775F6374726C207375636573733BC7
+:1012D00068616E646C653D253034780A000000005A
+:1012E00061646420436861726163746572697374D8
+:1012F000696320666C6F775F6374726C20666169E6
+:101300006C65642C72657475726E3D253034780A94
+:101310000000000042545F5365744C4541647644BC
+:10132000617461207375636573730A0042545F537F
+:1013300065744C4541647644617461206661696CF2
+:1013400065640A0042545F5365744C455363616E93
+:1013500044617461207375636573730A0000000053
+:1013600042545F5365744C455363616E44617461CC
+:10137000206661696C65640A00000000536574565C
+:1013800069736962696C69747920737563657373D5
+:101390000A0000005365745669736962696C697468
+:1013A00079206661696C65640A00000062742076C9
+:1013B000657273696F6E3D25780A000016000200A1
+:1013C00017000200180002000020414908701EE0CA
+:1013D0002078404908703E480078401C3C4908701D
+:1013E00015E020783B49097840183A4908700120F7
+:1013F00039490870002036490870022137A0FFF7EC
+:1014000014FE00204FE600203149087000BF00BFE5
+:101410003148007847E61FB508220221002000F07D
+:1014200099F809220121002000F094F8E12000033E
+:10143000019000216846017241728172C17201708F
+:101440006946002000F0C2FC1FBD00BF002003F071
+:101450009FF9FFF7E0FF22A0FFF760F80B2224A11D
+:10146000264803F043FA25480C3825A10968C161D4
+:10147000062225A1203003F039FA01211F4814303B
+:10148000817123481D490C39886022484860012039
+:10149000C002088020A0FFF741F8FFF7F6FA1FA06E
+:1014A000FFF73CF804E0012189021F4802F07EF8B2
+:1014B000F9E710B504461DA0FFF730F8244803F003
+:1014C000FBFAAA222146224803F00AFB10BD0000C5
+:1014D0001800020017000200160002004F4B000027
+:1014E000627420626C652064656D6F0A0000000004
+:1014F000506F6F6F6C695F4C355300000401020040
+:1015000031323334000000005868007A67860000EA
+:101510002C0102002C02020078310A00627420695A
+:101520006E6974206F6B0A002C0A02006E657720CA
+:101530006E7672616D20646174612C757064617483
+:101540006120746F20666C6173680D0A00000000F2
+:1015500000F00701F8B506460C461746032E04DBDB
+:10156000FE4A0E21FEA0FFF74FF9012C2BD0022CD2
+:1015700029D0042C27D0082C25D0102C23D0202CA7
+:1015800021D0402C1FD0802C1DD0FF200130844260
+:1015900019D04000844216D04000844213D040004D
+:1015A000844210D0400084420DD0400084420AD0D2
+:1015B0004000844207D04000844204D0E74A0F2113
+:1015C000E7A0FFF721F9002509E00120A84020400D
+:1015D000002803D03001EC49401847556D1C102DF0
+:1015E000F3DBF8BD70B506460D46032E04DBE74A73
+:1015F0001C21DBA0FFF708F928780020002802D181
+:101600002888002804D1E14A1D21D5A0FFF7FCF865
+:10161000A878012810D0A87802280DD0A87803282F
+:101620000AD0A878052807D0A878042804D0D74A7B
+:101630001E21CBA0FFF7E8F8A878030003F0A6F975
+:10164000065904152637485900240BE02888012143
+:10165000A1400840002804D000203101CA4A89185E
+:101660000855641C102CF1DB44E000240BE02888B2
+:101670000121A1400840002804D040203101C24A85
+:1016800089180855641C102CF1DB33E000240BE0B2
+:1016900028880121A1400840002804D08020310181
+:1016A000B94A89180855641C102CF1DB22E000248B
+:1016B0000BE028880121A1400840002804D0C02068
+:1016C0003101B14A89180855641C102CF1DB11E076
+:1016D00000240BE028880121A1400840002804D004
+:1016E0003E203101A84A89180855641C102CF1DBF2
+:1016F00000E000BF00BF70BDF8B506460C461746B7
+:10170000032E04DBA24A532195A0FFF77DF8012C9C
+:101710002BD0022C29D0042C27D0082C25D0102C1B
+:1017200023D0202C21D0402C1FD0802C1DD0FF2076
+:101730000130844219D04000844216D040008442D7
+:1017400013D04000844210D0400084420DD04000AD
+:1017500084420AD04000844207D04000844204D032
+:101760008B4A54217EA0FFF74FF800251EE0012090
+:10177000A8402040002818D0012F0AD1300182490A
+:101780004018405D4021084331017F4A891848557F
+:101790000BE0002F09D130017B494018405D40210A
+:1017A00088433101784A891848556D1C102DDEDBBD
+:1017B000F8BD10B50446032C04DB764A6A2168A004
+:1017C000FFF722F8600070494018808F10BD70B597
+:1017D00005460C46032D04DB6F4A712160A0FFF71C
+:1017E00013F8012C2BD0022C29D0042C27D0082C44
+:1017F00025D0102C23D0202C21D0402C1FD0802C81
+:101800001DD0FF200130844219D04000844216D000
+:101810004000844213D04000844210D040008442F3
+:101820000DD0400084420AD04000844207D04000DE
+:10183000844204D0584A722149A0FEF7E5FF6800AF
+:1018400051494018808F2040002801D0012070BDF0
+:101850000020FCE710B50446032C04DB4F4A80212E
+:101860003FA0FEF7D1FF600047494018808F10BDB0
+:1018700070B505460C46032D04DB494A872138A084
+:10188000FEF7C2FF012C2BD0022C29D0042C27D02C
+:10189000082C25D0102C23D0202C21D0402C1FD058
+:1018A000802C1DD0FF200130844219D0400084429A
+:1018B00016D04000844213D04000844210D0400033
+:1018C00084420DD0400084420AD04000844207D0B8
+:1018D0004000844204D0324A882121A0FEF794FFC0
+:1018E000680029494018808F2040002801D001203D
+:1018F00070BD0020FCE7F8B506460C46032E04DB5D
+:10190000284A962116A0FEF77FFF012C52D0022C08
+:1019100050D0042C4ED0082C4CD0102C4AD0202C67
+:1019200048D0402C46D0802C44D0FF200130844247
+:1019300040D0400084423DD0400084423AD0400034
+:10194000844237D04000844234D04000844231D0B9
+:10195000400084422ED04000844225E0CC6100014A
+:101960002E2E5C2E2E5C2E2E5C2E2E5C2E2E5C4C93
+:1019700069627261726965725C73646B5C79635FE2
+:101980006770696F2E63000000870F00D861000147
+:10199000E2610001F1610001046200011A620001CC
+:1019A0002E6200014562000104D06C4A97216C4808
+:1019B000FEF72AFF002510E00120A8402040002863
+:1019C0000AD0300167494018475D3F200743FE2099
+:1019D00007403001401847556D1C102DECDBF8BD59
+:1019E00070B506460C46032E04DB5F4AAA215C480C
+:1019F000FEF70AFF012C2BD0022C29D0042C27D073
+:101A0000082C25D0102C23D0202C21D0402C1FD0E6
+:101A1000802C1DD0FF200130844219D04000844228
+:101A200016D04000844213D04000844210D04000C1
+:101A300084420DD0400084420AD04000844207D046
+:101A40004000844204D0484AAB214548FEF7DCFE02
+:101A500000250FE00120A8402040002809D03001D7
+:101A600040494018405D3F21084331013D4A8918F3
+:101A700048556D1C102DEDDB70BD0021C943018060
+:101A800001218170704770B505460E46032D04DBB9
+:101A9000364ABE213248FEF7B7FE002413E001208B
+:101AA000A04030402041002806D00120A04081B253
+:101AB0002846FFF795FF05E00120A04081B22846A7
+:101AC000FFF719FF641C102CE9DB70BD70B50646EA
+:101AD0000C461546032E04DB254ACD212048FEF78F
+:101AE00093FE012C2BD0022C29D0042C27D0082CBB
+:101AF00025D0102C23D0202C21D0402C1FD0802C7E
+:101B00001DD0FF200130844219D04000844216D0FD
+:101B10004000844213D04000844210D040008442F0
+:101B20000DD0400084420AD04000844207D04000DB
+:101B3000844204D00E4ACE210948FEF765FE012DED
+:101B400004D121463046FFF74BFF05E0002D03D1BD
+:101B500021463046FFF7CFFE70BD00004562000110
+:101B60006019000100870F005462000161620001EA
+:101B70006C62000170B504460D46002C06D0012CA5
+:101B800004D0F34A1C21F3A0FEF73EFE012D13D131
+:101B9000002C02D0012C0ED106E0F848C0691021BB
+:101BA0000843F649C86106E0F548C06910210843BA
+:101BB000F349C86100BF13E0002C02D0012C0ED104
+:101BC00006E0EE48C06910218843EC49C86106E090
+:101BD000EB48C06910218843E949C86100BF00BFD4
+:101BE00070BD70B506460C461546002E06D0012E77
+:101BF00004D0E44AF321D7A0FEF706FE012C06D05C
+:101C0000022C04D0DF4AF421D2A0FEF7FDFD002E05
+:101C100002D0012E44D121E0022C10D1002D06D09B
+:101C2000D648C069E1010843D449C86115E0D348EA
+:101C3000C069FF2109028843D049C8610DE0012C29
+:101C40000BD1CE48C06940004008CC49C861084665
+:101C5000C069E9070843C949C86121E0022C10D1D5
+:101C6000002D06D0C648C069E1010843C449C861D7
+:101C700015E0C348C069FF2109028843C049C86113
+:101C80000DE0012C0BD1BE48C06940004008BC49A2
+:101C9000C8610846C069E9070843B949C86100BF7F
+:101CA00000BF70BD01460020002902D0012930D1BB
+:101CB00017E0B24AD269FF231B021A40002A06DD50
+:101CC000AE4A926A1214002A01DD022008E0AB4AF3
+:101CD000D269D20FD207002A01D0012000E00020F3
+:101CE00017E0A74AD269FF231B021A40002A06DD2B
+:101CF000A34A926A1214002A01DD022008E0A04AD9
+:101D0000D269D20FD207002A01D0012000E00020C2
+:101D100000BF00BF704770B504462046FFF7C2FF02
+:101D20000546002229462046FFF75BFF70BD10B52F
+:101D30000446002C06D0012C04D0934A412185A0F2
+:101D4000FEF762FD002C02D0012C08D103E0002038
+:101D50008A49C86103E000208949C86100BF00BF0B
+:101D600010BD70B504460D461646002C06D0012C59
+:101D700004D0864A502177A0FEF746FD002D04D1FD
+:101D8000824A512173A0FEF73FFD8148864204DB61
+:101D90007E4A52216FA0FEF737FD002C0AD177480A
+:101DA0000560806880B231040843744988608020EF
+:101DB000C8730AE072480560806880B23104084345
+:101DC0006F49886080206D49C87370BDF8B50546BD
+:101DD0000C4600260027002D06D0012D04D06D4AA8
+:101DE0009A215CA0FEF710FD2078402807D02078CB
+:101DF000002804D0674A9B2156A0FEF705FDB721B5
+:101E0000C9006068884203D963496068884204D386
+:101E1000604A9C214FA0FEF7F7FCA07A00280AD068
+:101E2000A07A002807D0A07A022804D0594A9D2120
+:101E300048A0FEF7E9FCE07A002807D0E07A1028F5
+:101E400004D0544A9E2143A0FEF7DEFC607A0028AD
+:101E500007D0607A082804D04E4A9F213DA0FEF7A3
+:101E6000D3FC4E48616802F017FD0704A07A0121F7
+:101E70000843217A0843617A0843E17A08432178CC
+:101E800008438021084338430646002D1AD100201C
+:101E90003A49C861424848600120800288600120B8
+:101EA00008730846C07B202108433449C87308469C
+:101EB000C07B202188433149C8730020C86108468F
+:101EC000C66119E000202E49C861364848600120EB
+:101ED00080028860012008730846C07B20210843E7
+:101EE0002749C8730846C07B202188432449C8730A
+:101EF0000020C8610846C661F8BD10B50446002C34
+:101F000006D0012C04D0284AC82112A0FEF77CFC80
+:101F1000002C04D11948806A0221084010BD1848DD
+:101F2000806A02210840F9E710B50446002C06D06B
+:101F3000012C04D01D4AD72106A0FEF765FC002C19
+:101F400038D10E48806A0014002831D0012010BD1D
+:101F50007A6200012E2E5C2E2E5C2E2E5C2E2E5CC4
+:101F60002E2E5C4C69627261726965725C73646B7F
+:101F70005C79635F756172742E630000008B0F00E3
+:101F8000008C0F00ED6200018F6200019B62000176
+:101F9000FFFF0000AB62000121AA4400006CDC02DC
+:101FA0002C0E02002C120200B5620001C762000173
+:101FB000002010BD9948806A0014002801D001203B
+:101FC000F7E70020F5E710B50446002C06D0012CF9
+:101FD00004D0934AE5219348FEF716FC002C06D165
+:101FE00091480069C007C00F0121484010BD8B48CF
+:101FF0000069C007C00F01214840F7E710B504464B
+:10200000002C07D0012C05D0884AFF2128318548B3
+:10201000FEF7FAFB002C03D183482030007910BD75
+:102020007E4820300079FAE7FEB504460D46174693
+:102030000026002001900090002C07D0012C05D034
+:102040007B4AFF2139317748FEF7DEFB002D05D1B1
+:10205000774AFF213A317348FEF7D6FB002C05D1B1
+:10206000714828300190001F009004E06B48283030
+:102070000190001F009008E0BE4205D2009802784F
+:102080003046761C2A5400E004E0019800680014F1
+:102090000028F1DC00BF3046FEBD70B504460D4699
+:1020A0001646002C07D0012C05D0624AFF21593179
+:1020B0005C48FEF7A9FB002D05D15E4AFF215A318D
+:1020C0005848FEF7A1FB5C48864205DB594AFF21D0
+:1020D0005B315448FEF798FB002C11D100BF5248E9
+:1020E0000069C007C00F0028F9D04F48056080681C
+:1020F00080B2310408434C4988608020C87310E0E6
+:1021000000BF46480069C007C00F0028F9D0434807
+:102110000560806880B231040843404988608020AF
+:10212000C87370BD08B50091002814D16A463E4BB3
+:102130001A601A46926892B201231B04D2183A4BD5
+:102140009A608022DA7300BF374A1269D207D20F31
+:10215000002AF9D013E06A46304B1A601A4692689A
+:1021600092B201231B04D2182C4B9A608022DA739E
+:1021700000BF2A4A1269D207D20F002AF9D008BD3F
+:10218000002802D1284A116201E0244A11627047F6
+:1021900070B504460D46002C07D0012C05D0274A07
+:1021A000FF2191311F48FEF72FFB002C0AD11E485A
+:1021B000C069FF21090288432906090C08431A490E
+:1021C000C86109E01548C069FF2109028843290652
+:1021D000090C08431149C86170BD4B21C901416018
+:1021E00000210172C172017041728172704710B595
+:1021F0000446002C07D0012C05D0114AFF21AA313A
+:102200000848FEF701FB002C03D10748806A000C48
+:1022100010BD0248806A000CFAE70000008C0F0035
+:10222000DD620001541F0001008B0F00FB62000102
+:102230000C63000119630001FFFF00002663000129
+:1022400036630001FE4800787047FE48007870470A
+:1022500010B5202905DA01238B4002681A43026079
+:1022600006E00B46203B01249C404268224342602A
+:1022700010BD10B5202905DA01238B4002689A436E
+:10228000026006E00B46203B01249C404268A243CA
+:10229000426010BD10B50246202906DA01238B40AA
+:1022A00010681840C840C0B210BD0846203801244C
+:1022B00084405368184620400B46203BD840C0B2AB
+:1022C000F2E7FFB5044600210120186000251DE05B
+:1022D000481CC1B220782E280DD1481E50551D68CB
+:1022E0001868401C186018683E2802DB002004B003
+:1022F000F0BD002109E026781F68781C1860D655CB
+:1023000018683E2801DB0020F1E7641C0198461E96
+:10231000F6B201960028DBD1515500261F68781CC3
+:102320001860D65518683E2801DB0020DFE7012041
+:10233000DDE770B505460E460020C34908604860D9
+:10234000C2490860002403E00020C1490855641C0C
+:10235000052CF9DB00240BE0E200BE4BD218111D66
+:10236000192252016243BC4BD01802F0EDFA641CF2
+:102370000A2CF1DBB949BA4802F0E6FA01F084FF11
+:10238000012070BD10B5044601F079FB0146E078EC
+:10239000A27800021043C01C814201DA002010BD67
+:1023A00001202070204601F0A0FB0120F7E71CB5BA
+:1023B00004460021684641700621418001940021B5
+:1023C000A148FFF756FF6846FFF7DCFF01F09AFAD5
+:1023D0009E49086000BF00219B48FFF75BFF002873
+:1023E00001D001201CBDFF21F5319848006801F0A3
+:1023F0008CFA0028EFD00020F4E71CB50446012138
+:102400006846417006214180019401218E48FFF702
+:1024100030FF6846FFF7B6FF01F074FA8B49086099
+:1024200000BF01218848FFF735FF002801D00120B7
+:102430001CBDFF21F5318548006801F066FA0028CF
+:10244000EFD00020F4E7FEB504460D461646002006
+:102450000090012C04D169460878012108430090BE
+:10246000012D04D169460878022108430090012E0D
+:1024700004D1694608780421084300900221684687
+:1024800041710121C180029002216F48FFF7F1FEE6
+:1024900001A8FFF777FF01F035FA6C49086000BF2B
+:1024A00002216948FFF7F6FE002801D00120FEBD99
+:1024B000FF21F5316548006801F027FA0028EFD0C8
+:1024C0000020F4E77CB504460D46032168464170C0
+:1024D000458001945C48FFF7CCFE6846FFF752FF49
+:1024E00001F010FA5949086000BF03215648FFF770
+:1024F000D1FE002801D001207CBDFF21F5315348D9
+:10250000006801F002FA0028EFD00020F4E77CB563
+:1025100004460D46042168464170458001944A48AE
+:10252000FFF7A7FE6846FFF72DFF01F0EBF94749DB
+:10253000086000BF04214448FFF7ACFE002801D02A
+:1025400001207CBDFF21F5314048006801F0DDF934
+:102550000028EFD00020F4E77CB505460C46002C9F
+:1025600001D0FF2C01DD00207CBD052168464170B3
+:10257000448001953448FFF77CFE6846FFF702FF70
+:1025800001F0C0F93149086000BF05212E48FFF76E
+:1025900081FE002801D00120E6E7FF21F5312B481C
+:1025A000006801F0B2F90028EFD00020DCE77CB52C
+:1025B00005460C46022C01DBFF2C01DD00207CBD12
+:1025C0000921684641704480019506211E48FFF7A5
+:1025D00050FE6846FFF7D6FE01F094F91B490860EB
+:1025E00000BF06211848FFF755FE002801D0012042
+:1025F000E5E7FF21F5311548006801F086F900286C
+:10260000EFD00020DBE71CB50B21684641700021AC
+:1026100041800020019007210B48FFF72AFE684601
+:10262000FFF7B0FE01F06EF90849086000BF07210E
+:102630000548FFF72FFE002814D0054800781CBD80
+:102640002E0002002D000200200002001C000200EB
+:10265000280002002C1602007C1602003500020041
+:10266000BC350200FF21F531FA48006801F04DF950
+:102670000028DCD08020E2E73EB5044602940C211D
+:10268000684641700121418002A801900821F2486A
+:10269000FFF7EFFD6846FFF775FE01F033F9ED49EE
+:1026A000086000BF0821EC48FFF7F4FD002801D0C6
+:1026B00001203EBDFF21F531E648006801F025F913
+:1026C0000028EFD00020F4E77CB504460D460D212C
+:1026D00068464170458001940921DF48FFF7C9FD34
+:1026E0006846FFF74FFE01F00DF9DA49086000BFB8
+:1026F0000921D948FFF7CEFD002801D001207CBD7B
+:10270000FF21F531D348006801F0FFF80028EFD031
+:102710000020F4E71CB5112168464170002141807A
+:10272000002001900B21CC48FFF7A3FD6846FFF77E
+:1027300029FE01F0E7F8C749086000BF0B21C64831
+:10274000FFF7A8FD002801D001201CBDFF21F531B5
+:10275000C048006801F0D9F80028EFD00020F4E765
+:102760001CB50024102168464170002141800020E2
+:1027700001900A21B848FFF77CFD6846FFF702FE8A
+:1027800001F0C0F8B349086000BF0A21B248FFF762
+:1027900081FD002808D0B14800780002AF4949788F
+:1027A0000843044620461CBDFF21F531A9480068B6
+:1027B00001F0ABF80028E8D00020F4E71CB51221A6
+:1027C0006846417000214180002001900C21A24800
+:1027D000FFF74FFD6846FFF7D5FD01F093F89D49DF
+:1027E000086000BF0C219C48FFF754FD002801D071
+:1027F00001201CBDFF21F5319648006801F085F8E5
+:102800000028EFD00020F4E77CB504460D462621D1
+:1028100068464170458001940D218F48FFF729FDDE
+:102820006846FFF7AFFD01F06DF88A49086000BF08
+:102830000D218948FFF72EFD002801D001207CBD25
+:10284000FF21F5318348006801F05FF80028EFD0E0
+:102850000020F4E71CB52721684641700021418023
+:10286000002001906846FFF78DFD01201CBD3EB59C
+:10287000044600942821684641710121C1800290DC
+:1028800010217548FFF7F5FC01A8FFF77BFD01F06B
+:1028900039F87049086000BF10216F48FFF7FAFC53
+:1028A000002801D001203EBDFF21F53169480068B4
+:1028B00001F02BF80028EFD00020F4E73EB50446E5
+:1028C0002921684641710121C180009402901221A2
+:1028D0006148FFF7CEFC01A8FFF754FD01203EBD83
+:1028E0001CB50446302168464170042141800194A2
+:1028F00013215948FFF7BDFC6846FFF743FD01F07F
+:1029000001F85449086000BF13215348FFF7C2FC87
+:10291000002801D001201CBDFF21F5314D48006881
+:1029200000F0F3FF0028EFD00020F4E73EB50446A6
+:102930003321684641710121C18000940290142125
+:102940004548FFF796FC01A8FFF71CFD00F0DAFFF1
+:102950004049086000BF14213F48FFF79BFC002856
+:1029600001D001203EBDFF21F5313A48006800F05A
+:10297000CCFF0028EFD00020F4E77CB504460D46DC
+:102980003421684641704580019415213248FFF793
+:1029900070FC6846FFF7F6FC00F0B4FF2D490860B4
+:1029A00000BF15212C48FFF775FC002801D001203D
+:1029B0007CBDFF21F5312748006800F0A6FF002804
+:1029C000EFD00020F4E77CB504460D46352168467B
+:1029D00041704580019416211F48FFF74AFC684664
+:1029E000FFF7D0FC00F08EFF1A49086000BF1621E7
+:1029F0001948FFF74FFC002801D001207CBDFF21C2
+:102A0000F5311448006800F080FF0028EFD0002066
+:102A1000F4E77CB505460C46082C01D000207CBDAF
+:102A20003621684641704480019517210A48FFF716
+:102A300020FC6846FFF7A6FC00F064FF054908602B
+:102A400000BF17210448FFF725FC002808D001200B
+:102A5000E5E700001C000200200002002800020040
+:102A6000FF21F531F848006800F04FFF0028E8D05A
+:102A70000020D4E77CB505460C46002C01D100208F
+:102A80007CBD372168464170448001951821EF488C
+:102A9000FFF7EFFB6846FFF775FC00F033FFEA49EC
+:102AA000086000BF1821E948FFF7F4FB002801D0B7
+:102AB0000120E5E7FF21F531E348006800F025FF3C
+:102AC0000028EFD00020DBE73EB504460294492100
+:102AD000684641700121418002A801901921DB481C
+:102AE000FFF7C7FB6846FFF74DFC00F00BFFD64928
+:102AF000086000BF1921D548FFF7CCFB002801D0A2
+:102B000001203EBDFF21F531CF48006800F0FDFEF9
+:102B10000028EFD00020F4E73EB50446029442219D
+:102B2000684641700121418002A801900E21C748EA
+:102B3000FFF79FFB6846FFF725FC00F0E3FEC24964
+:102B4000086000BF0E21C148FFF7A4FB002801D098
+:102B500001203EBDFF21F531BB48006800F0D5FEE5
+:102B60000028EFD00020F4E71CB504466121684638
+:102B700041700521418001941A21B448FFF779FB87
+:102B80006846FFF7FFFB00F0BDFEAF49086000BFDD
+:102B90001A21AE48FFF77EFB002801D001201CBDA2
+:102BA000FF21F531A848006800F0AFFE0028EFD003
+:102BB0000020F4E71CB50446152168464170032146
+:102BC000418001941D21A148FFF753FB6846FFF7A0
+:102BD000D9FB00F097FE9C49086000BF1D219B486F
+:102BE000FFF758FB002801D001201CBDFF21F53163
+:102BF0009548006800F089FE0028EFD00020F4E737
+:102C00001CB576216846417000214180002001906A
+:102C10001F218E48FFF72DFB6846FFF7B3FB00F03E
+:102C200071FE8949086000BF1F218848FFF732FB09
+:102C3000002801D001201CBDFF21F5318248006829
+:102C400000F063FE0028EFD00020F4E77CB50446D6
+:102C50000D467721684641704580019420217B48CC
+:102C6000FFF707FB6846FFF78DFB00F04BFE764948
+:102C7000086000BF20217548FFF70CFB002806D034
+:102C80007348007872494978090208437CBDFF21E6
+:102C9000F5316D48006800F038FE0028EAD00020C9
+:102CA000F4E77CB504460D467821684641704580BE
+:102CB000019420216548FFF7DCFA6846FFF762FBC4
+:102CC00000F020FE6049086000BF20215F48FFF748
+:102CD000E1FA002806D05E4800785D49497809028B
+:102CE00008437CBDFF21F5315748006800F00DFE18
+:102CF0000028EAD00020F4E730B593B005460C4632
+:102D0000E1B202AB03AA2846FFF7DBFA012802D0A2
+:102D1000002013B030BD822168464170029881B214
+:102D20006846418003A8019021214848FFF7A1FA95
+:102D30006846FFF727FB00F0E5FD4349086000BF48
+:102D400021214248FFF7A6FA002801D00120E0E740
+:102D5000FF21F5313C48006800F0D7FD0028EFD096
+:102D60000020D6E77CB504460D467E2168464170BA
+:102D70004580019422213548FFF77BFA6846FFF72A
+:102D800001FB00F0BFFD3049086000BF22212F4841
+:102D9000FFF780FA002801D001207CBDFF21F5312A
+:102DA0002948006800F0B1FD0028EFD00020F4E7CA
+:102DB00010B5FFF7AFFC10BD7CB504460D467F2172
+:102DC000684641704580019423212048FFF751FA5D
+:102DD0006846FFF7D7FA00F095FD1B49086000BF71
+:102DE00023211A48FFF756FA002801D001207CBDA4
+:102DF000FF21F5311448006800F087FD0028EFD06E
+:102E00000020F4E77CB505460C46601EEB2801DD8A
+:102E100000207CBD812168464170448001952421B9
+:102E20000A48FFF726FA6846FFF7ACFA00F06AFD99
+:102E30000549086000BF24210448FFF72BFA002849
+:102E400008D00120E5E700001C000200200002007D
+:102E500028000200FF21F531F748006800F055FD19
+:102E60000028E8D00020D4E7F0B5C3B006460C46F1
+:102E7000601EF249884202DD002043B0F0BD85208B
+:102E800040A9487100252821ED48FFF7F2F92921D2
+:102E9000EB48FFF7EEF94EE0002D21D1601EFA2835
+:102EA00001DDFA2000E0601E0746781D81B240A8CF
+:102EB000C180317868460171601EC1B268464171B7
+:102EC000601E0004010E684681710021C17101720B
+:102ED0003A46711C093001F009FD01A842900DE04D
+:102EE000601E401BFF2801DDFF2001E0601E401B2B
+:102EF000074640A9CF80681C301842902721D0484F
+:102F0000FFF7B7F941A8FFF73DFA00F0FBFCCA490B
+:102F1000086009E0FF21F531C748006800F0F5FCC2
+:102F2000002801D00020A8E72721C548FFF7B2F903
+:102F30000028EFD0ED19601EA842ADDC00F0E2FCE5
+:102F4000BD49086009E0FF21F531BB48006800F089
+:102F5000DCFC002801D000208FE72821B848FFF7CB
+:102F600099F90028EFD000F0CDFCB349086009E0E2
+:102F7000FF21F531B048006800F0C7FC002801D0FF
+:102F800000207AE72921AE48FFF784F90028EFD026
+:102F9000012072E77CB505460C46082C01DBFF2CAE
+:102FA00001DD00207CBD842168464170448001958C
+:102FB0002621A348FFF75DF96846FFF7E3F900F023
+:102FC000A1FC9D49086000BF26219D48FFF762F9DA
+:102FD000002801D00120E5E7FF21F531964800687F
+:102FE00000F093FC0028EFD00020DBE701B582B0B1
+:102FF0008021684641700121418002A8019025216D
+:103000008F48FFF736F96846FFF7BCF900F07AFC05
+:103010008949086000BF25218948FFF73BF900284E
+:1030200001D001200EBDFF21F5318348006800F07A
+:103030006CFC0028EFD00020F4E710B5002401F06C
+:1030400048F80446072C01D0082C07D17D4909789F
+:10305000C9007D4A881800F0FCFE9DE2794800789E
+:10306000002803D109207749087004E075480078EA
+:10307000401E74490870754800F0F4FD2C2C4DD0AA
+:103080001ADC0A2C76D008DC230001F07FFC0A232E
+:103090008A2A318A38538A8AEA8A112C3CD006DC83
+:1030A0000D2C37D00E2C34D0102C7AD133E0142CC8
+:1030B00033D0292CF9D140E220462D38030001F00D
+:1030C00065FC0F2E2F30317032333435363738707F
+:1030D000F1F070000020FDF72EFC00205C49087024
+:1030E00059E20220FDF727FC02205949087052E2FC
+:1030F0000320FDF720FC0320554908704BE2052012
+:10310000FDF719FC0020FDF713FC0520504908705D
+:1031100041E200BF00BF00BF00BF00BF00BF00BF53
+:1031200000BF00BF00BF00BF00BF00BF00BF00BFA7
+:1031300000BF30E24548001D01F0FCFB0078332859
+:1031400078D01FDC0D2876D00ADC030001F01EFCCD
+:103150000D424E5A668D9C858585AD8585B8850066
+:10316000152877D007DC102875D0112874D01228C4
+:1031700073D1E8E0D6E1262870D028286FD0302817
+:10318000F6D10CE17E286BD013DC42286AD009DC32
+:10319000342868D0352867D0362871D03728E7D151
+:1031A00029E1F7E149286CD061286BD07628DFD17E
+:1031B0004DE1822867D006DC7F2870D080286FD050
+:1031C0008128D5D17AE184286DD085286CD0FF285C
+:1031D000CED1D9E01D48001D01F0ACFB407800289D
+:1031E00003D100211648FFF733F894E11748001D7A
+:1031F00001F0A0FB4078002803D101211048FFF71F
+:1032000027F888E11148001D01F094FB4078002860
+:1032100003D102210A48FFF71BF87CE10B48001D8F
+:1032200001F088FB4078002803D103210448FFF710
+:103230000FF870E171E04EE01C000200AC050000E8
+:10324000200002002F0002002C16020031000200B4
+:103250002E000200F0E049E06AE05BE17EE088E0F9
+:103260000BE15AE1D2E0A5E0AFE0FE4801F062FBDD
+:103270004078002803D10421FB48FEF7E9FF4AE12A
+:10328000AEE0CEE0EEE03AE1F64801F053FB4078E4
+:10329000002803D10521F448FEF7DAFF3BE1F7E00F
+:1032A00001E166E15AE114E11EE1EE4801F042FB62
+:1032B0004078002803D10621EB48FEF7C9FF2AE138
+:1032C000E84801F037FB4078002803D10821E648A0
+:1032D000FEF7BEFF1FE1E34801F02CFB4078002819
+:1032E00003D10921E048FEF7B3FF14E1DD4801F006
+:1032F00021FB407800280FD10A21DB48FEF7A8FF08
+:10330000D84801F017FB8078D8490870D54801F0FB
+:1033100011FBC078D5494870FDE0D24801F00AFBA6
+:103320004078002803D11421CF48FEF791FFF2E046
+:10333000CC4801F0FFFA4078002803D10B21CA489D
+:10334000FEF786FFE7E0C74801F0F4FA407800286E
+:1033500003D10C21C448FEF77BFFDCE0C14801F03B
+:10336000E9FA4078002803D10D21BF48FEF770FF2D
+:10337000D1E0BC4801F0DEFA4078002803D11021EA
+:10338000B948FEF765FFC6E0B64801F0D3FA4078C9
+:10339000002803D12A21B448FEF75AFFBBE0B14808
+:1033A00001F0C8FA4078002803D11321AE48FEF797
+:1033B0004FFFB0E0AB4801F0BDFA4078002803D1E0
+:1033C0001521A948FEF744FFA5E0A64801F0B2FA8E
+:1033D0004078002803D11621A348FEF739FF9AE070
+:1033E000A04801F0A7FA4078002803D117219E4891
+:1033F000FEF72EFF8FE09B4801F09CFA40780028F2
+:1034000003D118219848FEF723FF84E0954801F086
+:1034100091FA4078002803D10E219348FEF718FF57
+:1034200079E0904801F086FA4078002803D119210C
+:103430008D48FEF70DFF6EE08A4801F07BFA407878
+:10344000002803D11D218848FEF702FF63E085486C
+:1034500001F070FA4078002803D11F218248FEF75E
+:10346000F7FE58E07F4801F065FA4078002803D164
+:103470001A217D48FEF7ECFE4DE07A4801F05AFA39
+:103480004078002803D122217748FEF7E1FE42E090
+:10349000744801F04FFA4078002803D12321724884
+:1034A000FEF7D6FE37E06F4801F044FA4078002876
+:1034B00003D125216C48FEF7CBFE2CE0694801F0D2
+:1034C00039FA4078002803D124216748FEF7C0FE6E
+:1034D00021E0644801F02EFA4078002803D126212B
+:1034E0006148FEF7B5FE16E05E4801F023FA407829
+:1034F000002803D127215C48FEF7AAFE0BE05948BB
+:1035000001F018FA4078002803D121215648FEF72F
+:103510009FFE00E000BF00BF3DE01C215248FEF7C7
+:1035200097FE38E007215048FEF792FE4D4801F023
+:1035300001FA00784D4908702DE020214A48FEF735
+:1035400087FE484801F0F6F9007848490870454878
+:1035500001F0F0F94078454948701CE0414801F01D
+:10356000E9F90078002803D128213F48FEF770FED2
+:1035700011E03C4801F0DEF90078032805D0394815
+:1035800001F0D8F90078042803D129213648FEF744
+:103590005FFE00E000BF00BF00203549C87335481A
+:1035A000007F042188433349087710BDFEB500270A
+:1035B00000240026142001902F4800782F49097814
+:1035C00088420FD12E480078012808D10B20FCF743
+:1035D00064FF2C48C078802108432A49C870002025
+:1035E000C043FEBD25480078401C244908700846A9
+:1035F00000780A2801DB0020087020480078C0000D
+:10360000214940184578681C00287DD0082802D040
+:1036100009287AD14EE01D480078401C1B490870EB
+:103620000846007802280ADB0220FFF747F9012844
+:1036300002D017A0FCF772FF0020144908700F4950
+:103640000978C900104A8918081D01F073F9009023
+:103650000A480078C0000C494118C87889780002EF
+:10366000084321E03500020020000200280002008B
+:10367000E04F0C0020850F002F00020030000200F8
+:103680000500020040800C002C16020039000200E8
+:103690007365742073707020666C6F772066616943
+:1036A0006C65640A00000000024600200099FEF7E5
+:1036B000F4FC55E02C490978C9002C4A8918081DEA
+:1036C00001F038F9067828490978C900274A89188D
+:1036D000081D01F02FF944782402A01984B2224970
+:1036E0000978C900214A8918081D01F023F90090C2
+:1036F0001D480078C0001D494118C878897800022B
+:1037000008430246002001E026E027E00099FEF78A
+:10371000C4FC2046FDF702F9012802D1FDF752F959
+:1037200019E0FDF7F3F8002813D1142C01D1012082
+:1037300000E00020024621460DA0FCF7EFFE142C0D
+:1037400007D10120FDF7F4F80C20FDF73BF9FDF758
+:1037500012F9002045E703E0002042E7002040E79F
+:1037600000BF38463DE70000300002002C16020082
+:1037700068616E646C65723A25782C25640A0000D5
+:1037800070B50446FF205E30844204D9814A12217C
+:1037900081A0FDF739F88B48006A0007000F811CF3
+:1037A000894801F08FF806467D21C90001F08AF8AA
+:1037B000604305466D1E8548456100208349886148
+:1037C000084600690221884380490861084600696B
+:1037D000052108437D49086100BF7C480069000C51
+:1037E000002801D1012000E00020C007C00F002800
+:1037F000F3D1764800697549086170BD70B5064619
+:10380000FF212D31304601F047F80446FF212D31CC
+:10381000304601F041F80D4604E0FF202D30FFF75F
+:10382000AFFF641E002CF8D1002D02D02846FFF710
+:10383000A7FF70BD70B504466548844204D9654A47
+:10384000302155A0FCF7E0FF5E48006A0007000F3A
+:10385000811C5D4801F036F806465F4901F032F8F8
+:10386000604305466D1E59484561002057498861EF
+:1038700008460069022188435449086108460069E6
+:10388000052108435149086100BF50480069000CF8
+:10389000002801D1012000E00020C007C00F00284F
+:1038A000F3D14A4800694949086170BD10B5044622
+:1038B0004A48844204D94A4A422137A0FCF7A4FF6F
+:1038C000641E4248006940084000404908610846BB
+:1038D000446100208861434908603C480069072131
+:1038E00008433A49086110BD384800694008400063
+:1038F000364908610020486188613A4908603349C7
+:1039000008617047374800687047F8B504460D46AF
+:10391000FFF7F8FF041B002C01DA3348241829486C
+:10392000006A0007000F811C274800F0CBFF074604
+:103930007D21C90000F0C6FF06462449496961435C
+:103940000846314600F0A8FFA84201D30120F8BD87
+:103950000020FCE770B50446FFF7D4FF041B002CE1
+:1039600001DA214824181748006A0007000F811C5B
+:10397000154800F0A7FF06467D21C90000F0A2FF10
+:1039800005461249496961430846294600F084FF0B
+:1039900070BD00004A6300012E2E5C2E2E5C2E2E80
+:1039A0005C2E2E5C2E2E5C4C6962726172696572AF
+:1039B0005C73646B5C79635F7379737469636B2E9A
+:1039C0006300000040850F0000B0710B00E000E0D4
+:1039D000485305005B63000140420F00FFFFFF00FA
+:1039E0006C6300013C000200FFFFFF7FF0B5059C07
+:1039F0000502F74EAD1929600502AD196B6015047B
+:103A000025430602F24FF619B56080250602F61925
+:103A1000F573F0BD00BF0102ED4A89180969C907B5
+:103A2000C90F0029F7D07047F8B504460E46154671
+:103A300023462A46314606200095FFF7D7FF062089
+:103A4000FFF7E8FFF8BDE34800680079E14909683D
+:103A500049790902FF22120211400843DD49096831
+:103A60008979DC4A1268D2791202FF231B021A40BC
+:103A70001143884201D0012070470020FCE770B557
+:103A8000D54800680079D44D2D686D792D02FF2648
+:103A90003602354028430146CF4800688079CE4D34
+:103AA0002D68ED792D02354028430246CA4800684A
+:103AB0008078C94D2D68ED782D02354028430346A6
+:103AC000C54800680078C44D2D686D782D023540DA
+:103AD00028430446914202DD881A80B270BD181B4B
+:103AE000401C8D1A401B80B2F8E7F8B50446BB486D
+:103AF000007F04210843B94908770120B849C873F9
+:103B0000B54800688079B4490968C9790902FF227B
+:103B10001202114008430546E078A17800020843EC
+:103B2000C01C86B2274629E0387803218904691829
+:103B300008707F1CA84800688078A7490968C97880
+:103B40000902FF22120211400843A8420AD1A248EA
+:103B500000680078A04909684978090211400843C3
+:103B6000054601E0681C85B2E078A17800020843B0
+:103B7000B04203D1201D00F0DDFE07463046711E25
+:103B80008EB20028D0D100BF934909688D71290AEF
+:103B900091480068C17100BF00209149C8738F48E7
+:103BA000007F042188438D490877F8BDF8B50746A2
+:103BB0000D46002D03D0FF200330854201D900209F
+:103BC000F8BD8648007F0421084384490877012016
+:103BD0008349C8730A2000F009FC7F480068847993
+:103BE0007D490968C9790902FF22120211400C437C
+:103BF0003E461FE030780321890461180870761C66
+:103C000075480068807874490968C9780902FF22FC
+:103C1000120211400843A0420AD16F4800680078A0
+:103C20006D4909684978090211400843044601E0DA
+:103C3000601C84B228466D1E0028DBD100BF664997
+:103C400009688C71210A64480068C17100BF0020B6
+:103C50006349C8736148007F042188435F4908773E
+:103C60000120ADE7F8B505465A4800680079594982
+:103C7000096849790902FF22120211400843554997
+:103C800009688979534A1268D2791202FF231B020C
+:103C90001A40114388427DD04E48006800794D4952
+:103CA0000968497909021A4611400843044603206D
+:103CB00080042018007828704648006880784549BC
+:103CC0000968C978090211400843A0420AD1414855
+:103CD000006800783F4909684978090211400843A3
+:103CE000044601E0601C84B20320800420180078A0
+:103CF000687038480068807836490968C9780902D0
+:103D0000FF22120211400843A0420AD13148006844
+:103D1000007830490968497809021140084304468F
+:103D200001E0601C84B20320800420180778294831
+:103D30000068807827490968C9780902FF221202C1
+:103D400011400843A0420AD1224800680078214966
+:103D500009684978090211400843044601E0601CE3
+:103D600084B20320800420180078A870000AE8704C
+:103D700018480068807817490968C9780902FF2245
+:103D8000120211400843A0420CD11248006800788A
+:103D9000104900E05BE009684978090211400843D6
+:103DA000044601E0601C84B2E878A9780002084368
+:103DB0000006000CA870000AE870E878A9780002F4
+:103DC0000843C01980B2A870000AE87000262DE0F0
+:103DD00000880F00400002004400020020850F0010
+:103DE000E04F0C00281D00F0A5FD03218904611897
+:103DF00009788155FE4800688078FD490968C978CE
+:103E00000902FF22120211400843A0420AD1F848D9
+:103E100000680078F64909684978090211400843AA
+:103E2000044601E0601C84B2701C86B2E878A97870
+:103E300000020843B042D5DC00BFED4909680C71AF
+:103E4000210AEB480068417100BF0120F8BD002045
+:103E5000FCE7F0B585B005460020039000270290EE
+:103E6000E34800680079E249096849790902FF22BC
+:103E7000120211400843DE4909688979DC4A126858
+:103E8000D2791202FF231B021A40114388427DD0CF
+:103E9000D74800680079D6490968497909021A4665
+:103EA000114008430446D348844220D82046641C6D
+:103EB000032189040843007828702046641C0843C5
+:103EC000007868702046641C084306782046641C0D
+:103ED00008430078A870000AE87000BFC449096868
+:103EE0000C712004010EC248006841717AE0032081
+:103EF0008004204300782870BD4800688078BC4961
+:103F00000968C9780902FF22120211400843A04241
+:103F10000AD1B74800680078B549096849780902AC
+:103F200011400843044600E0641C03208004204341
+:103F300000786870AE4800688078AD490968C97833
+:103F40000902FF22120211400843A0420AD1A848E8
+:103F500000680078A64909684978090211400843B9
+:103F6000044600E0641C0320800420430678A04837
+:103F7000006880789E490968C9780902FF22120208
+:103F800011400843A0420CD1994800E09FE000682E
+:103F900000789749096849780902114008430446A6
+:103FA00000E0641C0320800420430078A870000A0D
+:103FB000E8708F48006880788D490968C9780902DF
+:103FC000FF22120211400843A0420AD1884800682B
+:103FD0000078874909684978090211400843044676
+:103FE00000E0641CE878A978000208430006000C91
+:103FF000A870000AE870E878A978000208438019E0
+:1040000080B2A870000AE870E878A9780002084336
+:1040100006467748006807787549096849780902B3
+:10402000FF22120211400F437148006880787049E6
+:104030000968C97809021140084302903019401EEE
+:1040400080B2049002990498884221DB0298001BF8
+:10405000401C86B220460321890408430190281D94
+:1040600000F068FC324600900199FFF7DDFC00BFCC
+:104070005F4909680F71390A5D480068417100BFE6
+:104080003C460396E878A97800020843801B86B274
+:10409000002E19DD0320800420430190281D00F02C
+:1040A00049FC03994018324600900199FFF7BCFC87
+:1040B00000BFA0194E4909680871A0190004010E3B
+:1040C0004B480068417100BF012005B0F0BD0020E1
+:1040D000FBE710B50020464A12681279444B1B6872
+:1040E0005B791B02FF24240223401A431146414AF4
+:1040F000121D91420AD00A464B1C99B203239B041D
+:10410000D21810781A468A18107821E003229204F7
+:104110008A181078364A12689278354B1B68DB781B
+:104120001B02FF24240223401A438A420AD1304A48
+:10413000126812782E4B1B685B781B0223401A43CF
+:10414000114601E04A1C91B2032292048A181078A9
+:1041500010BDF8B50446A41C207861780902FF223E
+:104160001202114008432449884200D0F8BDA41C23
+:104170000D202249C96A0122824091431F4AD1621F
+:1041800000BF257861780902FF22120211400D4319
+:10419000A41C00201A49087188708020C87008206B
+:1041A000184908732A4621461548401DFFF73CFC74
+:1041B00000201349C87064191249087347E0A41C11
+:1041C000207861780902FF22120211400843054657
+:1041D000A41C207861780902114008430321890456
+:1041E0004618A41C084886421ED1042D1CD10DE09F
+:1041F00040000200FB1F0000AA55000040850F0090
+:1042000020800C00008E0F003D450C000120694607
+:1042100008700322611C684400F068FB2A46694666
+:104220003046FFF701FC11E05148864209D1012DCB
+:1042300007D1002000902A4669463046FFF7F4FB7C
+:1042400004E02A4621463046FFF7EEFB6419207849
+:1042500061780902FF221202114008434549884251
+:10426000ADD000BF82E7002009E0002103229204C4
+:10427000821811703122920382181170401C0121A2
+:1042800009038842F1D3704710B53B4800780028F5
+:104290002BD10B2001218140384A116000BF012041
+:1042A000354908709C2036490877012000F09EF8B7
+:1042B00001201921C903087400F098F800BF3148A3
+:1042C000C078802108400028F9D02E48C078884363
+:1042D0002C49C870FFF7C7FF2B48FFF73AFF9C2017
+:1042E00027490877642000F081F810BDF8B505462D
+:1042F0000E46314625A0FCF711F92A78314625A053
+:10430000FCF70CF96A78314626A0FCF707F9E87843
+:10431000A978000208430246314627A0FCF7FEF8C0
+:1043200031462AA0FCF7FAF8002416E0281D00F018
+:1043300001FB075D394628A0FCF7F0F82046E1179D
+:10434000090F091809110901611A04D1002C02D0C2
+:1043500013A0FCF7E3F8601CC4B2E878A978000267
+:104360000843A042E2DC0EA0FCF7D8F8F8BD00003C
+:10437000CF4A0C00AA5500004800020080E100E08E
+:1043800020850F0040800C00404B00014D3020255F
+:10439000733A0A00257320547970653A25303278D3
+:1043A0000A0000002573204F50436F64653A2025B2
+:1043B0003032780A000000002573204C656E677467
+:1043C000683A20253032780A000000002573204426
+:1043D0006174613A0A000000253032782000000044
+:1043E00010B504462046BB49884710BD10B50446A9
+:1043F0002046B8492431884710BD70B504460D46A3
+:10440000092C04DBB44A2121B4A0FCF7FDF9012DED
+:1044100011D1082C08DABB488068A2000121914024
+:104420000843B849886017E0B648C06801210843CE
+:10443000B449C86010E0082C08DAB2488068A200CD
+:10444000012191408843AF49886005E0AD48C068CC
+:1044500040084000AB49C86070BD10B504462078E4
+:10446000092804DBA84A10219CA0FCF7CDF920788C
+:104470000021FFF7C2FF2178C900A24A403A8918FB
+:10448000606808602078082809DA9E4880682178EA
+:104490008A000C21914008439A49886005E09948B8
+:1044A000C0680C2108439749C86010BD0420974993
+:1044B000C96A012282401143944AD16200BF704709
+:1044C00070B504460D46092C04DB914A352183A0C2
+:1044D000FCF79AF9012D06D0002D04D08C4A362124
+:1044E0007EA0FCF791F9012D11D1082C08DA85483E
+:1044F0008068A2000421914008438249886017E047
+:104500008048C068042108437E49C86010E0082C38
+:1045100008DA7C488068A2000421914088437949E8
+:10452000886005E07748C068042188437549C86001
+:1045300070BD70B504460D46092C04DB754A4A214E
+:1045400066A0FCF761F9E0006E494039401805604B
+:1045500070BD10B504462078092804DB6E4A51214D
+:104560005EA0FCF751F920780021FFF746FF217883
+:10457000C900644A403A8918A06808602178C900D7
+:10458000891860684860207B012813D120780828AA
+:1045900009DA5C48806821788A000221914008434A
+:1045A0005849886019E05748C068022108435549B6
+:1045B000C86012E02078082809DA5248806821781B
+:1045C0008A000221914088434E49886005E04D48A9
+:1045D000C068022188434B49C8602078082809DA5E
+:1045E0004848806821788A000421914088434549E1
+:1045F000886005E04348C068042188434149C86099
+:1046000010BD70B504460D461646092C04DB434A1E
+:104610006C2132A0FCF7F8F8E0003A494039401824
+:104620000660E0004018456070BDF8B504460D46D0
+:1046300016461F46092C04DB394A742127A0FCF7D3
+:10464000E3F8092D04DB364A752124A0FCF7DCF8D9
+:10465000A90001208840A200012191400843294976
+:104660008968814327488160E00026494039401825
+:104670000760E00040184660E80040180660E80067
+:10468000401847601F488068A100491C01228A40E9
+:1046900090431C498860084680680090A900032068
+:1046A0008840A200012191400843009908430090EE
+:1046B00014488068A900491C01228A40104311490E
+:1046C000886031460839880800F05AF90D49009889
+:1046D0008860F8BD39420000846300012E2E5C2EF4
+:1046E0002E5C2E2E5C2E2E5C2E2E5C4C696272612E
+:1046F000726965725C73646B5C79635F74696D6524
+:10470000722E6300400C0F007B63000140850F0098
+:104710008C6300019B630001A9630001B563000184
+:10472000C663000170B504460D464348204000288A
+:1047300004D1424A052142A0FCF766F8002D05D1BC
+:104740004A48C06A20434949C86204E04748C06AF1
+:10475000A0434649C86270BD10B50446022C04D07F
+:10476000434A122136A0FCF74FF85A20414908620B
+:1047700010BD414AD26980231A433F4BDA613B4A5C
+:10478000126A1209120102431146384A1162704737
+:1047900070B50446002C0AD0022C08D0062C06D096
+:1047A0000E2C04D0354A1F2125A0FCF72DF872B637
+:1047B000002C09D1324D294640312846314A9047D4
+:1047C0002046FFF7D6FF08E02849096A09090901D0
+:1047D000214308462549086200BF62B670BD10B586
+:1047E00004462248006A0007000F811C264800F09A
+:1047F00069F8206010BD10B50D201C49C96A01225E
+:1048000082409143194AD16200BF94201749203950
+:104810000877FF20F53000F0B3F87F201B4948747B
+:10482000FF208874C874B1201949C8704A200871E3
+:10483000FF201849487110BDFEFF0700DA63000130
+:104840002E2E5C2E2E5C2E2E5C2E2E5C2E2E5C4C84
+:1048500069627261726965725C73646B5C79635FD3
+:104860007379736374726C2E6300000040850F00CF
+:10487000F463000100840F0000880F00076400014A
+:10488000734700010544000000B0710BA04A0C0002
+:10489000C0400C0000890C0030B50B4601460020DA
+:1048A0002022012409E00D46D5409D4205D31D4636
+:1048B0009540491B2546954040191546521E002D2E
+:1048C000F1DC30BD70B500242546002801DA012452
+:1048D0004042002901DA01254942FFF7DDFFAC42E1
+:1048E00000D04042002C00D0494270BD03460B432B
+:1048F0009B0703D009E008C9121F08C0042AFAD296
+:1049000003E00B780370401C491C521EF9D270471B
+:10491000D2B201E00270401C491EFBD27047002257
+:10492000F6E710B513460A4604461946FFF7F0FFAE
+:10493000204610BD0321001D401E037812021A43B9
+:10494000491EF9D510467047034603220870000A35
+:10495000491C521EFAD5184670470000064C012526
+:10496000064E05E0E36807CC2B430C3C9847103417
+:10497000B442F7D3FBF748FD4464000164640001CE
+:1049800003B40148019001BDC700000030B4744673
+:10499000641E2578641CAB4204D3635D5B00E3189E
+:1049A00030BC18471D46F8E702E008C8121F08C1CE
+:1049B000002AFAD170477047002001E001C1121FA0
+:1049C000002AFBD170470000F7B50D46C2B0FF21A9
+:1049D000053101A8FFF7A3FFE81DF830000A002603
+:1049E000009028E0FF240134A54200D82C464298CC
+:1049F00037023A18134B022101A89847002001A959
+:104A000005E0449A3B18D25C0B181A71401CA04276
+:104A1000F7D30C4814388047002810D00A4A211DCB
+:104A200001A8904700280AD00648A43880470028EB
+:104A300005D02D1B761C00988642D3D3012045B0AB
+:104A4000F0BD0000E54700008D46000010B50649A6
+:104A500004460846403100F02BF82107E009090F11
+:104A6000C00100F053F810BD0D4B000170B50D48AA
+:104A70000025C069802108400B49096A0C07240FF2
+:104A8000002800D08025094925430846403100F020
+:104A90000FF8002C00D102242146002000F036F847
+:104AA000284670BD00880F0040850F000D4B0001A7
+:104AB000004A10470544000070B50546FBF709FDA4
+:104AC00072B6FFF7D3FF04460449284688470546D7
+:104AD0002046FFF7BBFF62B6284670BDB548000010
+:104AE000F8B516460C460546FBF7F3FC72B6FFF721
+:104AF000BDFF0746224631462846FFF765FF0446BC
+:104B00003846FFF7A3FF62B62046F8BD084A802367
+:104B10000028D06901D0184300E09843D0610548CF
+:104B2000026A090712091201090F0A43026270475B
+:104B300000880F0040850F00306400011C640001F4
+:104B40000002AA55B611C2840018C000005AC00065
+:104B500080BEC01A0056C01E8043C02A802DC030BF
+:104B6000006DC04280C4C04480E5C0468062C04A37
+:104B700000A4C05100EEC05180AFC05480B2C056F6
+:104B800000F5C05C00F6C05D8186C05E01FAC05EC3
+:104B9000821BC06D8230C0758237C0788087C07A32
+:104BA000809C20204A8BC0018241C002824DC003FC
+:104BB0000256C003825CC0040265C0058276C0094B
+:104BC0008286C00A0321C00E0336C00F035FC00FE8
+:104BD000838DC01103EFC0190417C01D042AC01F24
+:104BE0000435C0208447C028044DC0290455C04660
+:104BF0008374C04C846920204A8B6FE200191FE245
+:104C00000200C50545576842015C6FE20047793FE5
+:104C1000FE00284FFE007920FE00284FFE0179207B
+:104C2000FE0167E20047284C00012020C5572040C4
+:104C3000003C202045576FE20047C4018000793FC7
+:104C4000FE0379407E0667E20047704BEE0120606C
+:104C5000000020404C2420406B69204045106FE24A
+:104C60004BEE245A00542436C3DE20404A872040AD
+:104C70006B812040448520404753204047242040FA
+:104C800060E96FE2000B1FE0FE0167E2000B2040CD
+:104C9000483D202043DE704BEE00202046896FE225
+:104CA000004C793FFE0267E2004C2020432F6FE268
+:104CB000897379207E0667E28973704BF3011CE2E9
+:104CC0007E00243A4002704BF300202040026FE245
+:104CD00040CE793FFE051FE67C09202100691FE6D2
+:104CE0007C0F2421006B202049AB7040CE0920208E
+:104CF00049AB7040CE0F202049AB6FE2025DC0008F
+:104D00008071C001007C20204A8B6FE40259684406
+:104D1000015D9840FE0067E402591FE67C002022F6
+:104D2000CA8B684410001840840498467C002042D6
+:104D3000C743202046096FE4025B6844015D984048
+:104D4000FE0067E4025B1FE67C002022CA8B6844F9
+:104D500014001840840498467C002042C747202055
+:104D60004609793F802C7044E1002040796420405E
+:104D70005FF878577C0020405AC02021578320409C
+:104D80004C27204057ED20405863242C577520565F
+:104D9000830C6FE24BF4245A00992040579120363F
+:104DA000D762C51657622020576F7920002C78569D
+:104DB000FC002060000078377C002040589B205683
+:104DC000830C6FE24BF4245A00992036D762C51643
+:104DD00057622020576F18427E0020407D2B1C30E8
+:104DE0007E0079207E2C20407D14793FFE2C2040CF
+:104DF0004A7620407D1420740000204000BB202013
+:104E00004A2F1B427E00204000BA20204AE96FE46E
+:104E1000404E1FE37E0020407D2B1E027E0020407E
+:104E20007D141B420400204000BA20204B67204024
+:104E30007D1498000C00793F8C1020207D1F2040AD
+:104E400068C4204060D7204000C22020400A20755E
+:104E5000800020207B9A203080D4708955D4200097
+:104E60000004708955D220000004708955D12000BB
+:104E700000046FE241DFC00000D2C00080E2C00148
+:104E800000D2C00180E2C00200E2C01000E27089DE
+:104E900055D0708956E018002A0818002A0078506A
+:104EA000FC0078507C00782F7C00708902007089AB
+:104EB00001007089000070890300708904706FE23E
+:104EC000890679207E0067E28906206000007089EB
+:104ED00055D0708956C0202000D460420017204071
+:104EE000492A204049805800050020404A8E6FE240
+:104EF000890679207E0067E289062020493770897B
+:104F0000067C207580005800000067E441DD1C43EA
+:104F10007E0067E840942060000020204B7F58000E
+:104F2000010867E441F45800012767E441F658009E
+:104F3000013B67E441FE5800014567E441FA58002F
+:104F4000015A67E441EA5800016C67E441F25800F5
+:104F5000017567E4454120404DAF20404DBC2040E5
+:104F60004C2A2020504D2040017120405648247A80
+:104F7000000020204E3D68444FF46FE44FF6984601
+:104F80007E00206280002020010C2040010C58008F
+:104F9000180067E44FF067E44FF467E44FF66FE4FE
+:104FA0004FF267E4804A6FE44FF067E480481FE205
+:104FB0001400206000002040010C58001C0067E431
+:104FC0004FF067E44FF467E44FF66FE44FF267E4A5
+:104FD000804A6FE44FF067E480481FE214002060CD
+:104FE00000001A627E00C0048131C001012FC00A96
+:104FF0000138C004012D20204DDF20400111202068
+:105000004E02704AD00020204DFB6FE24ACF245A56
+:1050100001362040011C704AD00620204E08704AFC
+:10502000D006206000002040011C204003F9202011
+:105030004E282040013D202050C36FE24AD0207A04
+:1050400000001FE0FFFF67E24AD0247A00006FE40F
+:105050004652C2804D642060000020404F112074F1
+:1050600000001A227E0067E446712040015167E289
+:105070004670684404746044467320405B6C243A74
+:105080004A8B6FE2049E202050426FE24BED243A9F
+:1050900001551F227E00206000001A427E00206021
+:1050A0000000EFE2000367E24BF22020501F204097
+:1050B00002DA2434016A6FE24BF21FE20E006FEC59
+:1050C000810EAFEFFFFF2020816A6FE24BF3243A9D
+:1050D000016A6FE24FEFC000816A6FE24496C080C0
+:1050E000016820204D4DC07FCD4D2020016A204019
+:1050F00067BC20204D4B20400174204001712040AE
+:105100005648247A000020204E3D2040030C2021E8
+:105110004D5420204D562060000020404DD7700A8D
+:10512000FF076FE404FB207A00001FE272006FE4C7
+:1051300004FB9F267E0067E404FB1F227E002040C4
+:1051400002266FE404FD1FE20C00204067C118C274
+:105150007E0067E404FD204067B9202001766FE2FD
+:105160000AFFC01381F8C0060193C03B019CC03BFD
+:1051700081A2C03C01A7C00A81E1C07F01E4C02038
+:105180000157C07F819120204E5C704BF30020209E
+:10519000500C1A220600EFE20003C0004F1CC000B2
+:1051A000CF1FC0014F25C001819A2020501C5800FC
+:1051B000000120204F20D840000C20405B4D18C03B
+:1051C0008BFE58000000E7E400052020501F20401F
+:1051D00001AB204001C858000000E7E40005202092
+:1051E00001DAEFE20003204001AF204001B62020A9
+:1051F00001DA204001CC58280002E7E600052060D3
+:10520000000067E20A96204001CC59280302E7E833
+:1052100000056FE20A96E7E60005206000002040E6
+:1052200001CC204001C8204001C858000000E7E43C
+:105230000005184085FF20405B4D18C08C04EFE24C
+:105240000006C28201C3C28281C31840840120606B
+:105250000000204001CC5A290202E7F00005184066
+:1052600085FF20600000EFE200031FE27200E7E22A
+:105270000005202067ED204001CFE04400052060BC
+:1052800000006FE4448E98000C00EFE40006207AE2
+:1052900000001FE08401EFE2000698C08C00EFE2FE
+:1052A000000698C08C0018C20A00202001D160447A
+:1052B0000A9E700AFF2958000002204050A5684449
+:1052C0000A9EE044000A202067B9EFE6000367E683
+:1052D00040AA2020501FEFE20003C00001EFC000F1
+:1052E00081E9C00101F52020501CEFE400031FE21A
+:1052F0002400EFE200031FE22200D840000020203B
+:10530000502AEFE400031FE20A00EFE200031FE26D
+:105310007200204067DA2020501FEFE200031FE2F6
+:105320002C002020501F2040501F20204D856FE270
+:105330004679C28182EC6FE24679C38380001840CF
+:10534000FFFDD84000C820407DB56842467A204025
+:105350007DB51FE2220018427E009A267E0067E299
+:10536000467A6844467B184085FF20405B4D203AD2
+:105370000217E84800065928030298467C002422B8
+:105380008217EFE20006C2828213C2824F01202000
+:105390000217204003FF6844467B20405E4D2020DA
+:1053A0004F0370467A00700B0101204050E020202E
+:1053B000501C6FE20AFF67E44BFA704BF9026FE290
+:1053C0000B0067E44BFB60500A9E68500A9E204029
+:1053D00067B56FE84BF9E7E8000A2060000067E472
+:1053E0004BFB6FE20AFF67E24BFA704BF902605029
+:1053F0000A9E68500A9E204067B56FE84BF9E7E8BF
+:10540000000A20600000DA40000020405648243A9C
+:105410004A8B20405658DA400C00D8E0000020208B
+:1054200056216FE24BED243A570920405709704A44
+:10543000DB01704ADC005800000067F04AD15800D8
+:10544000001B67E44AD920600000204049BA782355
+:10545000FC007824FC000980000819897E0067E2BE
+:1054600002D50980000819897E00E7E200051FE2E5
+:105470007200203A588B20205887204058A32040A3
+:105480004915684200172040491C200005DC2040D7
+:10549000492178287C00D960157C2020586920405B
+:1054A00057AF20400259202058A7203680EAC51661
+:1054B00000EA202057BE6FE24BED243A58B36FE26A
+:1054C0004ADB08008608EFE200061FE272000800CF
+:1054D00086082022D8BC202058B96FE24BED243A30
+:1054E00058C46FE24456C000D8D36FE244571FF24D
+:1054F0007E001FEBFE0067E24ADB68424341184032
+:10550000FE0667E24ADC6FEC447267EC4ADD184243
+:105510007200D8C0434220407CCF202058DE6FE28A
+:105520004BED243A58F7D84000046FE244577D3AD7
+:10553000040660424ADB684243611840FE0667E2A7
+:105540004ADC6FEC447267EC4ADDD8C04362184213
+:10555000720020407CCF204058A120205AE22040F9
+:105560005AC9C61600002040599A6FE202D52FEFA3
+:10557000FE047920802A1FE37E009842FE002FEF70
+:10558000FE027920800FC60780006FE202D6203A23
+:1055900002996FE2043BC30202992040734220400B
+:1055A00072B27D3A000F247A0000684204527940BA
+:1055B0000402604204526FE24BED247A0000202086
+:1055C000029F6FE202D6207A00006FE202D52FE040
+:1055D0000601202082C72FE00602202082A720603B
+:1055E00000006FE402D9C1820000EFE6000667E622
+:1055F00004737920000FC00902BBC02902BDC00B93
+:1056000002B4C00C5E3BC0015CA1C00F03F9793F3E
+:10561000800F2060000058000B1E67E44AD5204030
+:1056200002C01F20F3FEDA2002E020405ABE2020F4
+:1056300002E0204002BD202002D7204002C0DA2034
+:1056400002DE20205ABE6FE202D61FE0F3F91FE00F
+:10565000FFFC67E44AD1E844000660444AD3206076
+:1056600000007920000F204002CF6FE20473C009D0
+:1056700002D7C00B02D6C1290000793F800F2060FD
+:1056800000006FE202D668444AD19840840060442A
+:105690004AD11FE27200DA2002D720205ABE202011
+:1056A00002E0204002DA2474000020205E13204033
+:1056B0007DC16FE44AD368444AD198467C00246295
+:1056C000800020207DBF6FE44AD51FE20A006FE210
+:1056D00002D61FE2720020407CDC18A27E0067E444
+:1056E0004AD5204002DA24740000D8E000032040AC
+:1056F00050E6202002EC20405C74247A0000700BFD
+:10570000221758000B1E67E44AD768440B1E184046
+:105710008404580000F920407DB51FE0A5FC180066
+:1057200002021FE2220020405C326FE44AD71FE2EF
+:105730000C001A22720020407CCF18C27E0067E461
+:105740004AD76FE40B1E9A467E0067E40B1E203A90
+:105750000308D84000F920407DB51FE2240018005E
+:105760000201202002F75800000067E44AD5D8E083
+:105770000003202050E2704BF40068444FF06FE4C7
+:105780004FF29846220068444FF46FE44FF66044AD
+:105790004BF767E44BF598467E002021031C20223E
+:1057A000831C1A2204006FE44BF59840FE00684405
+:1057B0004BF798467E00D84002C098467C00246192
+:1057C0000000704BF4012060000068420452284C35
+:1057D0000005206080006FE202D51FE3FE009842C2
+:1057E000FE00C4018000793F8405794004036042D3
+:1057F000045228400603246080006FE24BED243AF7
+:1058000003316FE24ADD202003326FE243B0C00271
+:10581000D9AC6FE24497C00159B0206000006FE23C
+:105820000452C382800020405A1C6FE24BED243AA0
+:1058300059FC20405C53203A5A3EEFE20006E84211
+:105840000006184222009A267E002040035B20407A
+:105850007DB51FE20400EFE200061FE202001A22FB
+:105860007E0098C08C00D8A04ADD1842720020400B
+:105870007CCF20405A2E20405A4020405C53EFE21B
+:1058800000061FE2220018C22600E8420006184265
+:1058900024009A467E002040035B20407DB59A405C
+:1058A000FE00E7E200139A267C002462800020209C
+:1058B0005C7618C20A0068444AD918A20C0020601D
+:1058C00000006FE24BED243A5A4160424ADC6842E4
+:1058D00004527920040518417EFC9821FE0067E2FD
+:1058E00004521FE17E1F280FFE297920FE0467E283
+:1058F0004ADB6FE24ADB28200601242083706FE236
+:105900004ADC207A00006FE2043BC4020000204021
+:105910007342202072996FE24BED243A729ADA605A
+:105920004ADB684A43D52040727718007008980017
+:105930005E001800220020407263204072E8DA60A6
+:105940004ADD6FE24ADC1FE0A5FF9A608A0018007A
+:10595000700C1DE27E00E7E800052040728E6FE2C9
+:105960004ADC1FE0FE0467E24ADC684A43D518407F
+:105970008401604A43D520600000C6078000C61637
+:10598000000020405C70247A00006FE202D51FE125
+:105990007E0367E244DEEFE2000667E244DD207A40
+:1059A000000018C27E0067E444DF6FE244DEC001FD
+:1059B00083CE204003A0D8E0000324344BEC2040E9
+:1059C0004BF020205A6B6FE244DEC00103A4C000FC
+:1059D00083B8206000006FE444DF1FE20C00EFE4B6
+:1059E000000667E444CEEFE4000620405A7A2474AF
+:1059F0000000684244DD604244D06FE444CE1FE0C2
+:105A0000FE0498467C002022FDBF6FE244DD1FE2C9
+:105A10007200D8A00D7D6FE444DF1FE20C0020402F
+:105A20007CDC20207DC120405A99247400006FE264
+:105A300044D0D8A00D7D98A0A200684244DD9840D3
+:105A4000FE0067E244D06FE244DD1FE272001A22DA
+:105A50000A006FE444DF1FE20C0020407CCF5800B6
+:105A60000D7D67E444DF6FE444CE1FE0FE0468422E
+:105A700044D098467C002022FDBF20207DC16FE2EB
+:105A800002D7C00403D2C00A03E020206045DA2018
+:105A90000009DA40000920405C2258000021E7F0AC
+:105AA0000005204003D9206000006FE202D81FE10A
+:105AB0007E20203A03DE704BED0020600000704B2A
+:105AC000ED0120600000EFE4000667E44AD92020E1
+:105AD00003E3DA200009DA40001520405C22580078
+:105AE00000FBE7E4000558000848E7E4000558001B
+:105AF00000FBE7E4000558000848E7E400052060E3
+:105B00000000EFE40006C00203F4C0035ED4C0024C
+:105B1000DE9620600000EFE6000667E60473C0082A
+:105B200003FBC004040420205C8DD8E00007202083
+:105B300050E220405E9120405AB3D96000012020FD
+:105B40005DDED8E00007202050E620405CA967E435
+:105B5000447820205CA220405E9120405ABB202047
+:105B600004076844442C60440A9E20405B36204071
+:105B70005B4D18C08DFE18C27E0067E4049868442F
+:105B8000444458002A0098467C0020228413202098
+:105B90005D2DD8402A0020405B5C203A5E562020D4
+:105BA0005D8B6FE24BED243A5BD57855FC002037D6
+:105BB000041C2436DBE620404BA06FE440C167E4C0
+:105BC00004492436CBB3C507CBB36FE244DD243A96
+:105BD0004BB36FE24ADC243A4BB36FE244BBC28260
+:105BE000CBB36FE2043BC282CBB320204B956FE274
+:105BF000007DC008042EC00B8434202060FE684263
+:105C0000054E18467C0620210432202062067000D2
+:105C10007E2420206134202062B878547C0020400B
+:105C200066A36FE20048207A0000C283843B2020F4
+:105C300063F2C042043EC0418441202064212040E0
+:105C400004446FE200482020647B204004446FE25B
+:105C50000048202064EF6FE2462C203A650D20209A
+:105C600065066FE2409E793FFE0367E2409E580062
+:105C7000000167E404CA206000005800000067E2E9
+:105C8000422667E2453667E2452F6FE2453DC00098
+:105C9000E8D770453B85206000006FE204F9C01F23
+:105CA000E93EC039E947C077845BC029EA05206036
+:105CB00000006FE404FD1FE20C00204069846FE2E5
+:105CC00004FFC020E966C020696EC038E9A7C0386B
+:105CD0000465C024E9BE20206A58700A9508204057
+:105CE0007BAB20406972202069BA6FE24490203A71
+:105CF0005ED0204074382020793292ADAA55400001
+:105D000000400300000000001020000020000100FF
+:105D10000000202210000C120039000000080008CA
+:105D20002200E80918D00400044402000500000025
+:105D30000000002000020000000000000000000041
+:105D40000000AA55010092400AAA5501005446409D
+:105D5000AA550100064213AA5501005B4101AA554C
+:105D600008009840FFFB8FFA8B855983AA550300E2
+:105D70001442254A05AA5504003D4500F70107AA2B
+:105D80005503002D46030004AA5501002C4601AA24
+:105D90005506005746043030303030AA551000F018
+:105DA0004F001CFF1F001C001C004CE04F004C006B
+:105DB0004CAA550300EF4B008002AA55020068462A
+:105DC000100FAA5501006C4603AA5501006F460743
+:105DD000AA550300AA40240404AA550100794600EC
+:105DE000AA550100CF4A00AA550100914000AA55CA
+:105DF00003005441000108AA550100744102AA554C
+:105E00000100934000AA5501006D4628AA550600DE
+:105E1000A040A72A2A211055AA550F00E7440E33A7
+:105E2000313231204D6F75204274313231AA550321
+:105E300000E441200002AA550100E84101AA5501F1
+:105E400000904400AA5501005F4407AA550100983C
+:105E50004400AA55040075462D002F00AA550100E4
+:105E6000404300AA55020054444000AA5501006E68
+:105E70004605AA550600724421220133023AAA556A
+:105E80000D0081430C33313231204D6F7520426C4F
+:105E900065AA550400414303020102AA551200619C
+:105EA000430E0201020D0933313231204D6F75204E
+:105EB000426C65AA55070025440203000510020341
+:105EC000AA55080068440800100000002C01AA55DB
+:105ED00001007844F0AA5501007A4417AA5502003F
+:105EE000CC443100AA550100D14001AA550C00490B
+:105EF00045050300120001010001110300AA55121B
+:105F0000005F45010700000000DECAFADEDECADEDF
+:105F1000AFDECACAFFAA55020047458346AA55B854
+:105F20000083460312000100000100010001360059
+:105F3000520900000A00010001090001350319128D
+:105F400000090004350D350619010009000135036B
+:105F50001900010900093508350619120009010068
+:105F60000902000901030902010905AC090202093D
+:105F7000023909020309064409020428010902053D
+:105F800009000203110100030100000100033600B3
+:105F9000460900000A000100030900013503191138
+:105FA000010900020A00000000090004350C350355
+:105FB0001901003505190003080109000635090912
+:105FC000656E09006A090100090100250A53505055
+:105FD00020736C6176650000000100AA5502008EF6
+:105FE00044AF47AA554E01AF470100020028020105
+:105FF0001802000203280120030002052A01000400
+:106000000002022902010005000200280200180611
+:1060100000020328014E070002002A134173742076
+:106020004C45204D6F7573652020202020202008CE
+:1060300000020328014E090002012A0200000A00A2
+:1060400002032801020B0002042A081000200005A8
+:10605000002C010C000200281055E405D2AF9FA9C6
+:106060008FE54A7DFE435353490D00020328011278
+:106070000E001016962447C62361BAD94B4D1E4315
+:10608000535349140000000000000000000000000D
+:1060900000000000000000000F00020229020000C2
+:1060A00010000203280108110010B39B7234BEECEB
+:1060B000D4A8F4434188435353491400000000001E
+:1060C00000000000000000000000000000000012BE
+:1060D000000203280104130010FE69CA9A5619F63B
+:1060E000AB024DAA6D435353491400000000000059
+:1060F000000000000000000000000000000014008C
+:10610000020328011A1500101803A6285ED8EC9186
+:106110001C48A3AC43535349140000000000000086
+:106120000000000000000000000000000016000257
+:1061300002290200000000AA55070076410F84F0F2
+:106140000A0BB232AA55020057418B0BAA55080020
+:10615000A1000000000000000000AA550200BD40A0
+:106160000224AA550800AD4040000002320000029F
+:10617000AA550200BB402000AA550400B7402000E9
+:106180000020AA550400BF4080040010AA55050055
+:10619000E244080E050400AA5502000242301FAA7C
+:1061A000550100104220AA550100E04101AA550FF7
+:1061B00000DE4B4BBA55D056E05788586C59100743
+:1061C000FFFFAA550200C340DE4BB25A4750494F69
+:1061D0005F436F6E666967004750494F5F496E695C
+:1061E00074004750494F5F50756C6C5570436D6437
+:1061F000004750494F5F52656164496E7075744441
+:10620000617461004750494F5F52656164496E7027
+:10621000757444617461426974004750494F5F521C
+:106220006561644F757470757444617461004750A2
+:10623000494F5F526561644F757470757444617441
+:1062400061426974004750494F5F526573657442FB
+:10625000697473004750494F5F53657442697473A2
+:10626000004750494F5F5772697465004750494F66
+:106270005F577269746542697400554152545F41B9
+:1062800075746F466C6F774374726C436D64005520
+:106290004152545F4465496E697400554152545FE0
+:1062A000444D4153656E6442756600554152545FDA
+:1062B000496E697400554152545F497352584649BA
+:1062C000464F46756C6C00554152545F49735258A5
+:1062D0004649464F4E6F74456D7074790055415272
+:1062E000545F497355415254427573790055415278
+:1062F000545F4954436F6E66696700554152545F5D
+:106300005265636569766544617461005541525414
+:106310005F5265637642756600554152545F53651E
+:106320006E6442756600554152545F5365745278ED
+:1063300049544E756D00554152545F52656365690D
+:106340007665446174614C656E007379735469635A
+:106350006B5F64656C61795F6D7300537973546929
+:10636000636B5F44656C61795F5573005379735457
+:1063700069636B5F436F6E6669670054494D5F499F
+:106380006E69740054494D5F436D640054494D5F1C
+:106390004D6F6465436F6E6669670054494D5F5386
+:1063A0006574506572696F640054494D5F50574D74
+:1063B000496E69740054494D5F53657450574D5090
+:1063C0006572696F640054494D5F50574D4469666A
+:1063D000666572656E7469616C005359534354521B
+:1063E0004C5F414842506572697068436C6F636BE3
+:1063F000436D64005359534354524C5F456E74656A
+:1064000072536C656570005359534354524C5F4846
+:10641000434C4B436F6E6669670000003031323386
+:106420003435363738394142434445460000000090
+:1064300030313233343536373839616263646566FA
+:106440000000000064640001000002004C00000035
+:10645000A8490001B06400014C000200D4350000DE
+:10646000B84900012A0024040400303132333435A5
+:1064700036373839616263646566000000000000E9
+:10648000000000000000000000000000000000000C
+:1064900000000000000000000000000000000000FC
+:1064A00000000000F04F0C00F84F0C00000000004E
+:0400000501000401F1
+:00000001FF
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.htm
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.htm	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.htm	(working copy)
@@ -0,0 +1,1854 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html><head>
+<title>Static Call Graph - [.\Objects\YC3121_Keil.axf]</title></head>
+<body><HR>
+<H1>Static Call Graph for image .\Objects\YC3121_Keil.axf</H1><HR>
+<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Wed Jun 01 16:46:11 2022
+<BR><P>
+<H3>Maximum Stack Usage =        544 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
+Call chain for Maximum Stack Depth:</H3>
+main &rArr; bt_init_proc &rArr; MyPrintf &rArr; printfsend &rArr; UART_SendBuf
+<P>
+<H3>
+Mutually Recursive functions
+</H3> <LI><a href="#[1]">nmi_handler</a>&nbsp;&nbsp;&nbsp;&rArr;&nbsp;&nbsp;&nbsp;<a href="#[1]">nmi_handler</a><BR>
+ <LI><a href="#[41]">HARD_FAULT_IRQHandler</a>&nbsp;&nbsp;&nbsp;&rArr;&nbsp;&nbsp;&nbsp;<a href="#[41]">HARD_FAULT_IRQHandler</a><BR>
+ <LI><a href="#[42]">SVC_IRQHandler</a>&nbsp;&nbsp;&nbsp;&rArr;&nbsp;&nbsp;&nbsp;<a href="#[42]">SVC_IRQHandler</a><BR>
+ <LI><a href="#[43]">PENDSV_IRQHandler</a>&nbsp;&nbsp;&nbsp;&rArr;&nbsp;&nbsp;&nbsp;<a href="#[43]">PENDSV_IRQHandler</a><BR>
+ <LI><a href="#[31]">GPIO_IRQHandler</a>&nbsp;&nbsp;&nbsp;&rArr;&nbsp;&nbsp;&nbsp;<a href="#[31]">GPIO_IRQHandler</a><BR>
+</UL>
+<P>
+<H3>
+Function Pointers
+</H3><UL>
+ <LI><a href="#[30]">BT_IRQHandler</a> from main.o(.text) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[31]">GPIO_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[41]">HARD_FAULT_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[46]">HCLKConfig_Div_None</a> from yc_sysctrl.o(.text) referenced from yc_sysctrl.o(.text)
+ <LI><a href="#[26]">IIC_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[2c]">MEMCP_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[3d]">MSR_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[43]">PENDSV_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[27]">QSPI_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[2d]">RSA_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[24]">Reset_Handler</a> from flash_start.o(.flash_start) referenced from startup.o(.text)
+ <LI><a href="#[2e]">SCI0_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[2f]">SCI1_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[3c]">SEC_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[3b]">SM4_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[28]">SPI0_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[29]">SPI1_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[42]">SVC_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[44]">SYSTICK_IRQHandler</a> from main.o(.text) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[32]">TIMER0_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[33]">TIMER1_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[34]">TIMER2_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[35]">TIMER3_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[36]">TIMER4_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[37]">TIMER5_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[38]">TIMER6_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[39]">TIMER7_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[3a]">TIMER8_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[3e]">TRNG_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[2a]">UART0_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[2b]">UART1_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[25]">USB_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[3f]">WDT_IRQHandler</a> from flash_start.o(.flash_start) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[40]">__main</a> from entry.o(.ARM.Collect$$$$00000000) referenced from flash_start.o(.flash_start)
+ <LI><a href="#[2]">hard_fault_handler</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[4]">irq0</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[5]">irq1</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[e]">irq10</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[f]">irq11</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[10]">irq12</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[11]">irq13</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[12]">irq14</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[13]">irq15</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[14]">irq16</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[15]">irq17</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[16]">irq18</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[17]">irq19</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[6]">irq2</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[18]">irq20</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[19]">irq21</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[1a]">irq22</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[1b]">irq23</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[1c]">irq24</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[1d]">irq25</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[1e]">irq26</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[1f]">irq27</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[20]">irq28</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[21]">irq29</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[7]">irq3</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[22]">irq30</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[23]">irq31</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[8]">irq4</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[9]">irq5</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[a]">irq6</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[b]">irq7</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[c]">irq8</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[d]">irq9</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+ <LI><a href="#[45]">main</a> from main.o(.text) referenced from entry9a.o(.ARM.Collect$$$$0000000B)
+ <LI><a href="#[1]">nmi_handler</a> from startup.o(.text) referenced from startup.o(RESET)
+ <LI><a href="#[0]">reset_handler</a> from startup.o(.text) referenced from startup.o(RESET)
+ <LI><a href="#[47]">setqspi</a> from yc_qspi.o(i.setqspi) referenced from yc_qspi.o(i.end_qspi)
+ <LI><a href="#[47]">setqspi</a> from yc_qspi.o(i.setqspi) referenced from yc_qspi.o(i.pre_qspi)
+ <LI><a href="#[3]">systick</a> from flash_start.o(.flash_start) referenced from startup.o(RESET)
+</UL>
+<P>
+<H3>
+Global Symbols
+</H3>
+<P><STRONG><a name="[0]"></a>reset_handler</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, startup.o(.text))
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[48]"></a>delay</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay
+</UL>
+<BR>[Called By]<UL><LI><a href="#[db]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SYSCTRL_EnableDpllClk (via Veneer)
+<LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay
+<LI><a href="#[d7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_PWMDifferential (via Veneer)
+</UL>
+
+<P><STRONG><a name="[1]"></a>nmi_handler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, startup.o(.text))
+<BR><BR>[Calls]<UL><LI><a href="#[1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;nmi_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;nmi_handler
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[24]"></a>Reset_Handler</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(.text)
+</UL>
+<P><STRONG><a name="[2]"></a>hard_fault_handler</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[e4]"></a>svc_handler</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, flash_start.o(.flash_start), UNUSED)
+
+<P><STRONG><a name="[e5]"></a>pendsv_handler</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, flash_start.o(.flash_start), UNUSED)
+
+<P><STRONG><a name="[3]"></a>systick</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[4]"></a>irq0</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[5]"></a>irq1</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[6]"></a>irq2</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[7]"></a>irq3</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[8]"></a>irq4</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[9]"></a>irq5</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[a]"></a>irq6</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[b]"></a>irq7</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[c]"></a>irq8</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[d]"></a>irq9</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[e]"></a>irq10</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[f]"></a>irq11</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[10]"></a>irq12</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[11]"></a>irq13</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[12]"></a>irq14</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[13]"></a>irq15</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[14]"></a>irq16</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[15]"></a>irq17</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[16]"></a>irq18</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[17]"></a>irq19</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[18]"></a>irq20</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[19]"></a>irq21</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[1a]"></a>irq22</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[1b]"></a>irq23</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[1c]"></a>irq24</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[1d]"></a>irq25</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[1e]"></a>irq26</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[1f]"></a>irq27</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[20]"></a>irq28</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[21]"></a>irq29</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[22]"></a>irq30</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[23]"></a>irq31</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;isr
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> startup.o(RESET)
+</UL>
+<P><STRONG><a name="[4a]"></a>NMI_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NMI_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NMI_IRQHandler
+</UL>
+
+<P><STRONG><a name="[41]"></a>HARD_FAULT_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HARD_FAULT_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HARD_FAULT_IRQHandler
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[42]"></a>SVC_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SVC_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SVC_IRQHandler
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[43]"></a>PENDSV_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;PENDSV_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;PENDSV_IRQHandler
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[4b]"></a>EXTI0_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI0_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI0_IRQHandler
+</UL>
+
+<P><STRONG><a name="[4c]"></a>EXTI1_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI1_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI1_IRQHandler
+</UL>
+
+<P><STRONG><a name="[4d]"></a>EXTI2_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI2_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI2_IRQHandler
+</UL>
+
+<P><STRONG><a name="[4e]"></a>EXTI3_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI3_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI3_IRQHandler
+</UL>
+
+<P><STRONG><a name="[4f]"></a>EXTI4_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI4_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI4_IRQHandler
+</UL>
+
+<P><STRONG><a name="[50]"></a>EXTI5_IRQHandler</STRONG> (Thumb, 2 bytes, Stack size 0 bytes, flash_start.o(.flash_start), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI5_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EXTI5_IRQHandler
+</UL>
+
+<P><STRONG><a name="[31]"></a>GPIO_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Calls]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_IRQHandler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_IRQHandler
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[26]"></a>IIC_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[2c]"></a>MEMCP_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[3d]"></a>MSR_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[27]"></a>QSPI_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[2d]"></a>RSA_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[2e]"></a>SCI0_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[2f]"></a>SCI1_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[3c]"></a>SEC_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[3b]"></a>SM4_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[28]"></a>SPI0_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[29]"></a>SPI1_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[32]"></a>TIMER0_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[33]"></a>TIMER1_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[34]"></a>TIMER2_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[35]"></a>TIMER3_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[36]"></a>TIMER4_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[37]"></a>TIMER5_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[38]"></a>TIMER6_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[39]"></a>TIMER7_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[3a]"></a>TIMER8_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[3e]"></a>TRNG_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[2a]"></a>UART0_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[2b]"></a>UART1_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[25]"></a>USB_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[3f]"></a>WDT_IRQHandler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[40]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[e6]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
+
+<P><STRONG><a name="[51]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
+<BR><BR>[Calls]<UL><LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
+</UL>
+
+<P><STRONG><a name="[de]"></a>__main_after_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
+<BR><BR>[Called By]<UL><LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
+</UL>
+
+<P><STRONG><a name="[e7]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
+
+<P><STRONG><a name="[e8]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
+
+<P><STRONG><a name="[e9]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
+
+<P><STRONG><a name="[ea]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
+
+<P><STRONG><a name="[eb]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
+
+<P><STRONG><a name="[67]"></a>NVIC_SetPriority</STRONG> (Thumb, 114 bytes, Stack size 8 bytes, misc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = NVIC_SetPriority
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[ec]"></a>trigger_PendSV</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, misc.o(.text), UNUSED)
+
+<P><STRONG><a name="[66]"></a>NVIC_EnableIRQ</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, misc.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[58]"></a>NVIC_DisableIRQ</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, misc.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_IRQHandler
+</UL>
+
+<P><STRONG><a name="[ed]"></a>soft_reset</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, misc.o(.text), UNUSED)
+
+<P><STRONG><a name="[e3]"></a>get_primask</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, misc.o(.text), UNUSED)
+<BR><BR>[Called By]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;qspi_flash_write
+<LI><a href="#[83]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;qspi_flash_sectorerase
+</UL>
+
+<P><STRONG><a name="[ee]"></a>get_msp</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, misc.o(.text), UNUSED)
+
+<P><STRONG><a name="[ef]"></a>set_msp</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, misc.o(.text), UNUSED)
+
+<P><STRONG><a name="[53]"></a>printfsend</STRONG> (Thumb, 40 bytes, Stack size 272 bytes, system.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 288<LI>Call Chain = printfsend &rArr; UART_SendBuf
+</UL>
+<BR>[Calls]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_SendBuf
+</UL>
+<BR>[Called By]<UL><LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MyPrintf
+</UL>
+
+<P><STRONG><a name="[55]"></a>MyPrintf</STRONG> (Thumb, 692 bytes, Stack size 80 bytes, system.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 368<LI>Call Chain = MyPrintf &rArr; printfsend &rArr; UART_SendBuf
+</UL>
+<BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
+<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;printfsend
+</UL>
+<BR>[Called By]<UL><LI><a href="#[d0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;PrintHCIPack
+<LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+<LI><a href="#[82]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ReserveNV
+<LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_yc3121_bt_post_event
+<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;printv
+</UL>
+
+<P><STRONG><a name="[57]"></a>printv</STRONG> (Thumb, 56 bytes, Stack size 32 bytes, system.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MyPrintf
+</UL>
+
+<P><STRONG><a name="[85]"></a>_assert_handler</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, system.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[d9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SYSCTRL_EnterSleep
+<LI><a href="#[d8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SYSCTRL_AHBPeriphClockCmd
+<LI><a href="#[d7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_PWMDifferential
+<LI><a href="#[d6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_SetPWMPeriod
+<LI><a href="#[d5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_PWMInit
+<LI><a href="#[d4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_SetPeriod
+<LI><a href="#[d3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_ModeConfig
+<LI><a href="#[d2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_Init
+<LI><a href="#[d1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_Cmd
+<LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Delay_Us
+<LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sysTick_delay_ms
+<LI><a href="#[9c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ReceiveDataLen
+<LI><a href="#[9b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_SetRxITNum
+<LI><a href="#[9a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_RecvBuf
+<LI><a href="#[99]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ReceiveData
+<LI><a href="#[98]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_IsUARTBusy
+<LI><a href="#[97]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_IsRXFIFONotEmpty
+<LI><a href="#[96]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_IsRXFIFOFull
+<LI><a href="#[95]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_DMASendBuf
+<LI><a href="#[94]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_DeInit
+<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig
+<LI><a href="#[90]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_AutoFlowCtrlCmd
+<LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_WriteBit
+<LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Write
+<LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_SetBits
+<LI><a href="#[8c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_ResetBits
+<LI><a href="#[8b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_ReadOutputDataBit
+<LI><a href="#[8a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_ReadOutputData
+<LI><a href="#[89]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_ReadInputDataBit
+<LI><a href="#[88]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_ReadInputData
+<LI><a href="#[87]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_PullUpCmd
+<LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Init
+<LI><a href="#[7f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init
+<LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Config
+<LI><a href="#[80]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SYSCTRL_HCLKConfig
+<LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Config
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_SendBuf
+</UL>
+
+<P><STRONG><a name="[30]"></a>BT_IRQHandler</STRONG> (Thumb, 132 bytes, Stack size 8 bytes, main.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 392<LI>Call Chain = BT_IRQHandler &rArr; BT_ParseBTData &rArr; prt_yc3121_bt_post_event &rArr; MyPrintf &rArr; printfsend &rArr; UART_SendBuf
+</UL>
+<BR>[Calls]<UL><LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_have_data
+<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ParseBTData
+<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_DisableIRQ
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[44]"></a>SYSTICK_IRQHandler</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, main.o(.text))
+<BR>[Address Reference Count : 1]<UL><LI> flash_start.o(.flash_start)
+</UL>
+<P><STRONG><a name="[c4]"></a>prt_ble_first_get</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, main.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+</UL>
+
+<P><STRONG><a name="[c3]"></a>prt_is_ble_data</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, main.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+</UL>
+
+<P><STRONG><a name="[c0]"></a>prt_ble_first_set</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, main.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ParseBTData
+</UL>
+
+<P><STRONG><a name="[5b]"></a>prt_yc3121_bt_post_event</STRONG> (Thumb, 64 bytes, Stack size 8 bytes, main.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 376<LI>Call Chain = prt_yc3121_bt_post_event &rArr; MyPrintf &rArr; printfsend &rArr; UART_SendBuf
+</UL>
+<BR>[Calls]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetSppFlowcontrol
+<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MyPrintf
+</UL>
+<BR>[Called By]<UL><LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ParseBTData
+</UL>
+
+<P><STRONG><a name="[5d]"></a>prt_bt_ble_set_mtu</STRONG> (Thumb, 78 bytes, Stack size 24 bytes, main.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 100<LI>Call Chain = prt_bt_ble_set_mtu &rArr; BT_SendBleData &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendBleData
+</UL>
+<BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+</UL>
+
+<P><STRONG><a name="[5f]"></a>prt_bt_ble_flow_proc</STRONG> (Thumb, 62 bytes, Stack size 24 bytes, main.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 100<LI>Call Chain = prt_bt_ble_flow_proc &rArr; BT_SendBleData &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendBleData
+</UL>
+<BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+</UL>
+
+<P><STRONG><a name="[71]"></a>genBleAdvData</STRONG> (Thumb, 136 bytes, Stack size 36 bytes, main.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = genBleAdvData
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[7d]"></a>UART_Configuration</STRONG> (Thumb, 52 bytes, Stack size 24 bytes, main.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 60<LI>Call Chain = UART_Configuration &rArr; UART_Init &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[7f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init
+<LI><a href="#[7e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Config
+</UL>
+<BR>[Called By]<UL><LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+</UL>
+
+<P><STRONG><a name="[45]"></a>main</STRONG> (Thumb, 104 bytes, Stack size 0 bytes, main.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 544<LI>Call Chain = main &rArr; bt_init_proc &rArr; MyPrintf &rArr; printfsend &rArr; UART_SendBuf
+</UL>
+<BR>[Calls]<UL><LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy4
+<LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+<LI><a href="#[80]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SYSCTRL_HCLKConfig
+<LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Configuration
+<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MyPrintf
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
+</UL>
+<P><STRONG><a name="[82]"></a>ReserveNV</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, main.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;qspi_flash_write
+<LI><a href="#[83]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;qspi_flash_sectorerase
+<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MyPrintf
+</UL>
+
+<P><STRONG><a name="[7e]"></a>GPIO_Config</STRONG> (Thumb, 144 bytes, Stack size 24 bytes, yc_gpio.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = GPIO_Config
+</UL>
+<BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Configuration
+</UL>
+
+<P><STRONG><a name="[86]"></a>GPIO_Init</STRONG> (Thumb, 276 bytes, Stack size 16 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[7c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_common_switch8
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[87]"></a>GPIO_PullUpCmd</STRONG> (Thumb, 186 bytes, Stack size 24 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[88]"></a>GPIO_ReadInputData</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[89]"></a>GPIO_ReadInputDataBit</STRONG> (Thumb, 134 bytes, Stack size 16 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[8a]"></a>GPIO_ReadOutputData</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[8b]"></a>GPIO_ReadOutputDataBit</STRONG> (Thumb, 134 bytes, Stack size 16 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[8c]"></a>GPIO_ResetBits</STRONG> (Thumb, 234 bytes, Stack size 24 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_WriteBit
+<LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Write
+</UL>
+
+<P><STRONG><a name="[8d]"></a>GPIO_SetBits</STRONG> (Thumb, 154 bytes, Stack size 16 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[8f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_WriteBit
+<LI><a href="#[8e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Write
+</UL>
+
+<P><STRONG><a name="[f0]"></a>GPIO_StructInit</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, yc_gpio.o(.text), UNUSED)
+
+<P><STRONG><a name="[8e]"></a>GPIO_Write</STRONG> (Thumb, 70 bytes, Stack size 16 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_SetBits
+<LI><a href="#[8c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_ResetBits
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[8f]"></a>GPIO_WriteBit</STRONG> (Thumb, 142 bytes, Stack size 16 bytes, yc_gpio.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[8d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_SetBits
+<LI><a href="#[8c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_ResetBits
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[90]"></a>UART_AutoFlowCtrlCmd</STRONG> (Thumb, 110 bytes, Stack size 16 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[91]"></a>UART_ITConfig</STRONG> (Thumb, 194 bytes, Stack size 16 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ClearIT
+</UL>
+
+<P><STRONG><a name="[93]"></a>UART_GetITIdentity</STRONG> (Thumb, 114 bytes, Stack size 0 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Called By]<UL><LI><a href="#[92]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ClearIT
+</UL>
+
+<P><STRONG><a name="[92]"></a>UART_ClearIT</STRONG> (Thumb, 24 bytes, Stack size 16 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[93]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_GetITIdentity
+<LI><a href="#[91]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig
+</UL>
+
+<P><STRONG><a name="[94]"></a>UART_DeInit</STRONG> (Thumb, 52 bytes, Stack size 8 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[95]"></a>UART_DMASendBuf</STRONG> (Thumb, 106 bytes, Stack size 16 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[7f]"></a>UART_Init</STRONG> (Thumb, 302 bytes, Stack size 24 bytes, yc_uart.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = UART_Init &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[7d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Configuration
+</UL>
+
+<P><STRONG><a name="[96]"></a>UART_IsRXFIFOFull</STRONG> (Thumb, 46 bytes, Stack size 8 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[97]"></a>UART_IsRXFIFONotEmpty</STRONG> (Thumb, 158 bytes, Stack size 8 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[98]"></a>UART_IsUARTBusy</STRONG> (Thumb, 54 bytes, Stack size 8 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[99]"></a>UART_ReceiveData</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[9a]"></a>UART_RecvBuf</STRONG> (Thumb, 114 bytes, Stack size 32 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[54]"></a>UART_SendBuf</STRONG> (Thumb, 138 bytes, Stack size 16 bytes, yc_uart.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = UART_SendBuf
+</UL>
+<BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;printfsend
+</UL>
+
+<P><STRONG><a name="[f1]"></a>UART_SendData</STRONG> (Thumb, 92 bytes, Stack size 8 bytes, yc_uart.o(.text), UNUSED)
+
+<P><STRONG><a name="[f2]"></a>UART_SetITTimeout</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, yc_uart.o(.text), UNUSED)
+
+<P><STRONG><a name="[9b]"></a>UART_SetRxITNum</STRONG> (Thumb, 74 bytes, Stack size 16 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[f3]"></a>UART_StructInit</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, yc_uart.o(.text), UNUSED)
+
+<P><STRONG><a name="[9c]"></a>UART_ReceiveDataLen</STRONG> (Thumb, 44 bytes, Stack size 8 bytes, yc_uart.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[f4]"></a>prt_get_bt_connection_status</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, yc_bt.o(.text), UNUSED)
+
+<P><STRONG><a name="[78]"></a>prt_get_bt_type</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Called By]<UL><LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_write
+</UL>
+
+<P><STRONG><a name="[c2]"></a>BT_BIT_SET</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = BT_BIT_SET
+</UL>
+<BR>[Called By]<UL><LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ParseBTData
+</UL>
+
+<P><STRONG><a name="[a2]"></a>BT_BIT_CLEAR</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = BT_BIT_CLEAR
+</UL>
+<BR>[Called By]<UL><LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DisconnectTcp
+<LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendUdpData
+<LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpBigData
+<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpData
+<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectTcp
+<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectBnep
+<LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DnsReq
+<LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_Set_FixedPasskey
+<LI><a href="#[b2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetTxPower
+<LI><a href="#[b1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_RejectJustWork
+<LI><a href="#[b0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvParm
+<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLESendConnUpdate
+<LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEParing
+<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_PasskeyEntry
+<LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConfirmGkey
+<LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetNVRAM
+<LI><a href="#[a9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BleDisconnect
+<LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BtDisconnect
+<LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetPincode
+<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Bt_GetBtStatus
+<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetVisibility
+<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetSppFlowcontrol
+<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetParingMode
+<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEScanData
+<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvData
+<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetCOD
+<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtName
+<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtAddr
+<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleName
+<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleAddr
+<LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendSppData
+<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendBleData
+<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_GetVersion
+<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DeleteService
+<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleService
+<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleCharacteristic
+</UL>
+
+<P><STRONG><a name="[a4]"></a>BT_BIT_GET</STRONG> (Thumb, 46 bytes, Stack size 8 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = BT_BIT_GET
+</UL>
+<BR>[Called By]<UL><LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DisconnectTcp
+<LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendUdpData
+<LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpBigData
+<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpData
+<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectTcp
+<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectBnep
+<LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DnsReq
+<LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_Set_FixedPasskey
+<LI><a href="#[b2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetTxPower
+<LI><a href="#[b1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_RejectJustWork
+<LI><a href="#[b0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvParm
+<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLESendConnUpdate
+<LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEParing
+<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_PasskeyEntry
+<LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConfirmGkey
+<LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetNVRAM
+<LI><a href="#[a9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BleDisconnect
+<LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BtDisconnect
+<LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetPincode
+<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Bt_GetBtStatus
+<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetVisibility
+<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetParingMode
+<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEScanData
+<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvData
+<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetCOD
+<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtName
+<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtAddr
+<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleName
+<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleAddr
+<LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendSppData
+<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendBleData
+<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_GetVersion
+<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DeleteService
+<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleService
+<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleCharacteristic
+</UL>
+
+<P><STRONG><a name="[b5]"></a>BNEP_DomainConvert</STRONG> (Thumb, 112 bytes, Stack size 36 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Called By]<UL><LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DnsReq
+</UL>
+
+<P><STRONG><a name="[65]"></a>BT_Init</STRONG> (Thumb, 82 bytes, Stack size 16 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 92<LI>Call Chain = BT_Init &rArr; IpcInit &rArr; _download_btcode &rArr; _dmacopy &rArr; _dma_start
+</UL>
+<BR>[Calls]<UL><LI><a href="#[9d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uwrite4
+<LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IpcInit
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[6b]"></a>BT_SetBtAddr</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 68<LI>Call Chain = BT_SetBtAddr &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[6a]"></a>BT_SetBleAddr</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 68<LI>Call Chain = BT_SetBleAddr &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[74]"></a>BT_SetVisibility</STRONG> (Thumb, 126 bytes, Stack size 32 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 84<LI>Call Chain = BT_SetVisibility &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[69]"></a>BT_SetBtName</STRONG> (Thumb, 74 bytes, Stack size 24 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = BT_SetBtName &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[68]"></a>BT_SetBleName</STRONG> (Thumb, 74 bytes, Stack size 24 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = BT_SetBleName &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[7a]"></a>BT_SendSppData</STRONG> (Thumb, 86 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_write
+</UL>
+
+<P><STRONG><a name="[5e]"></a>BT_SendBleData</STRONG> (Thumb, 88 bytes, Stack size 24 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = BT_SendBleData &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_bt_ble_flow_proc
+<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_bt_ble_set_mtu
+<LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_write
+</UL>
+
+<P><STRONG><a name="[a6]"></a>Bt_GetBtStatus</STRONG> (Thumb, 114 bytes, Stack size 16 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[6c]"></a>BT_SetParingMode</STRONG> (Thumb, 80 bytes, Stack size 24 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = BT_SetParingMode &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[a7]"></a>BT_SetPincode</STRONG> (Thumb, 76 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[a8]"></a>BT_BtDisconnect</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[b7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_disconnectBnep
+</UL>
+
+<P><STRONG><a name="[75]"></a>BT_GetVersion</STRONG> (Thumb, 92 bytes, Stack size 16 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 68<LI>Call Chain = BT_GetVersion &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[a9]"></a>BT_BleDisconnect</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[aa]"></a>BT_SetNVRAM</STRONG> (Thumb, 76 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[ab]"></a>BT_EnterSleepMode</STRONG> (Thumb, 26 bytes, Stack size 16 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[ac]"></a>BT_ConfirmGkey</STRONG> (Thumb, 78 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[5c]"></a>BT_SetSppFlowcontrol</STRONG> (Thumb, 36 bytes, Stack size 24 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = BT_SetSppFlowcontrol &rArr; SendCMD &rArr; IPC_TxData
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_yc3121_bt_post_event
+</UL>
+
+<P><STRONG><a name="[ad]"></a>BT_PasskeyEntry</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[ae]"></a>BT_SetLEParing</STRONG> (Thumb, 78 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[72]"></a>BT_SetLEAdvData</STRONG> (Thumb, 76 bytes, Stack size 24 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = BT_SetLEAdvData &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[73]"></a>BT_SetLEScanData</STRONG> (Thumb, 76 bytes, Stack size 24 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = BT_SetLEScanData &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[af]"></a>BT_SetLESendConnUpdate</STRONG> (Thumb, 98 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[b0]"></a>BT_SetLEAdvParm</STRONG> (Thumb, 84 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[b1]"></a>BT_RejectJustWork</STRONG> (Thumb, 80 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[b2]"></a>BT_SetTxPower</STRONG> (Thumb, 80 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[b3]"></a>BT_Set_FixedPasskey</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[6d]"></a>BT_SetCOD</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 68<LI>Call Chain = BT_SetCOD &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[6e]"></a>BT_DeleteService</STRONG> (Thumb, 76 bytes, Stack size 16 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 68<LI>Call Chain = BT_DeleteService &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[6f]"></a>BT_AddBleService</STRONG> (Thumb, 86 bytes, Stack size 24 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = BT_AddBleService &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[70]"></a>BT_AddBleCharacteristic</STRONG> (Thumb, 86 bytes, Stack size 24 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = BT_AddBleCharacteristic &rArr; SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[b4]"></a>BT_DnsReq</STRONG> (Thumb, 108 bytes, Stack size 88 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[b5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BNEP_DomainConvert
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[b6]"></a>BT_ConnectBnep</STRONG> (Thumb, 76 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[b7]"></a>BT_disconnectBnep</STRONG> (Thumb, 8 bytes, Stack size 8 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BtDisconnect
+</UL>
+
+<P><STRONG><a name="[b8]"></a>BT_ConnectTcp</STRONG> (Thumb, 76 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[b9]"></a>BT_BnepSendTcpData</STRONG> (Thumb, 100 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[ba]"></a>BT_BnepSendTcpBigData</STRONG> (Thumb, 300 bytes, Stack size 288 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy
+<LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[bb]"></a>BT_BnepSendUdpData</STRONG> (Thumb, 88 bytes, Stack size 24 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[bc]"></a>BT_DisconnectTcp</STRONG> (Thumb, 78 bytes, Stack size 16 bytes, yc_bt.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+<LI><a href="#[a4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_GET
+<LI><a href="#[a2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_CLEAR
+<LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[59]"></a>BT_ParseBTData</STRONG> (Thumb, 1394 bytes, Stack size 8 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 384<LI>Call Chain = BT_ParseBTData &rArr; prt_yc3121_bt_post_event &rArr; MyPrintf &rArr; printfsend &rArr; UART_SendBuf
+</UL>
+<BR>[Calls]<UL><LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uread4
+<LI><a href="#[bd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_ReadIPC_Opcode
+<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_ReadBtData_DMA
+<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_ReadBtData
+<LI><a href="#[c2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BIT_SET
+<LI><a href="#[7c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_common_switch8
+<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_yc3121_bt_post_event
+<LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_ble_first_set
+</UL>
+<BR>[Called By]<UL><LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_IRQHandler
+</UL>
+
+<P><STRONG><a name="[81]"></a>prt_get_bt_data</STRONG> (Thumb, 442 bytes, Stack size 32 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 400<LI>Call Chain = prt_get_bt_data &rArr; MyPrintf &rArr; printfsend &rArr; UART_SendBuf
+</UL>
+<BR>[Calls]<UL><LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uread4
+<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetSppFlowcontrol
+<LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_bt_ble_flow_proc
+<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_bt_ble_set_mtu
+<LI><a href="#[c0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_ble_first_set
+<LI><a href="#[c3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_is_ble_data
+<LI><a href="#[c4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_ble_first_get
+<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_SendBuf
+<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MyPrintf
+<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_EnableIRQ
+</UL>
+<BR>[Called By]<UL><LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+</UL>
+
+<P><STRONG><a name="[c6]"></a>SysTick_Delay_Ms</STRONG> (Thumb, 56 bytes, Stack size 16 bytes, yc_systick.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
+<LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sysTick_delay_ms
+</UL>
+
+<P><STRONG><a name="[c7]"></a>SysTick_Delay_Us</STRONG> (Thumb, 120 bytes, Stack size 16 bytes, yc_systick.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_idivmod
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[64]"></a>SysTick_Config</STRONG> (Thumb, 60 bytes, Stack size 8 bytes, yc_systick.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = SysTick_Config
+</UL>
+<BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[f5]"></a>SysTick_disable</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, yc_systick.o(.text), UNUSED)
+
+<P><STRONG><a name="[a3]"></a>SysTick_GetTick</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, yc_systick.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetRelativeTime
+<LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DisconnectTcp
+<LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendUdpData
+<LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpBigData
+<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpData
+<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectTcp
+<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectBnep
+<LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DnsReq
+<LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_Set_FixedPasskey
+<LI><a href="#[b2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetTxPower
+<LI><a href="#[b1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_RejectJustWork
+<LI><a href="#[b0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvParm
+<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLESendConnUpdate
+<LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEParing
+<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_PasskeyEntry
+<LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConfirmGkey
+<LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetNVRAM
+<LI><a href="#[a9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BleDisconnect
+<LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BtDisconnect
+<LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetPincode
+<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Bt_GetBtStatus
+<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetVisibility
+<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetParingMode
+<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEScanData
+<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvData
+<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetCOD
+<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtName
+<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtAddr
+<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleName
+<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleAddr
+<LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendSppData
+<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendBleData
+<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_GetVersion
+<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DeleteService
+<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleService
+<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleCharacteristic
+</UL>
+
+<P><STRONG><a name="[a5]"></a>SysTick_IsTimeOut</STRONG> (Thumb, 74 bytes, Stack size 24 bytes, yc_systick.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 52<LI>Call Chain = SysTick_IsTimeOut &rArr; __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_idivmod
+<LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+</UL>
+<BR>[Called By]<UL><LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DisconnectTcp
+<LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendUdpData
+<LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpBigData
+<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpData
+<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectTcp
+<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectBnep
+<LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DnsReq
+<LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_Set_FixedPasskey
+<LI><a href="#[b2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetTxPower
+<LI><a href="#[b1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_RejectJustWork
+<LI><a href="#[b0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvParm
+<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLESendConnUpdate
+<LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEParing
+<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_PasskeyEntry
+<LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConfirmGkey
+<LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetNVRAM
+<LI><a href="#[a9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BleDisconnect
+<LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BtDisconnect
+<LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetPincode
+<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Bt_GetBtStatus
+<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetVisibility
+<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetParingMode
+<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEScanData
+<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvData
+<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetCOD
+<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtName
+<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtAddr
+<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleName
+<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleAddr
+<LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendSppData
+<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendBleData
+<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_GetVersion
+<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DeleteService
+<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleService
+<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleCharacteristic
+</UL>
+
+<P><STRONG><a name="[c8]"></a>SysTick_GetRelativeTime</STRONG> (Thumb, 62 bytes, Stack size 16 bytes, yc_systick.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_idivmod
+<LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
+<LI><a href="#[a3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetTick
+</UL>
+
+<P><STRONG><a name="[cb]"></a>_dma_wait</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, yc_ipc.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dmacopy
+</UL>
+
+<P><STRONG><a name="[c9]"></a>_dmacopy</STRONG> (Thumb, 30 bytes, Stack size 24 bytes, yc_ipc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = _dmacopy &rArr; _dma_start
+</UL>
+<BR>[Calls]<UL><LI><a href="#[cb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dma_wait
+<LI><a href="#[ca]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dma_start
+</UL>
+<BR>[Called By]<UL><LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_download_btcode
+<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_ReadBtData_DMA
+</UL>
+
+<P><STRONG><a name="[5a]"></a>IPC_have_data</STRONG> (Thumb, 56 bytes, Stack size 0 bytes, yc_ipc.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_IRQHandler
+</UL>
+
+<P><STRONG><a name="[a0]"></a>IPC_get_available_size</STRONG> (Thumb, 108 bytes, Stack size 16 bytes, yc_ipc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = IPC_get_available_size
+</UL>
+<BR>[Called By]<UL><LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[a1]"></a>IPC_TxData</STRONG> (Thumb, 194 bytes, Stack size 24 bytes, yc_ipc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = IPC_TxData
+</UL>
+<BR>[Calls]<UL><LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uread4
+</UL>
+<BR>[Called By]<UL><LI><a href="#[9f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SendCMD
+</UL>
+
+<P><STRONG><a name="[cc]"></a>IPC_PutBtData</STRONG> (Thumb, 184 bytes, Stack size 24 bytes, yc_ipc.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[cd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_ms
+</UL>
+
+<P><STRONG><a name="[bf]"></a>IPC_ReadBtData</STRONG> (Thumb, 494 bytes, Stack size 24 bytes, yc_ipc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = IPC_ReadBtData
+</UL>
+<BR>[Calls]<UL><LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uread4
+</UL>
+<BR>[Called By]<UL><LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ParseBTData
+</UL>
+
+<P><STRONG><a name="[be]"></a>IPC_ReadBtData_DMA</STRONG> (Thumb, 640 bytes, Stack size 40 bytes, yc_ipc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 84<LI>Call Chain = IPC_ReadBtData_DMA &rArr; _dmacopy &rArr; _dma_start
+</UL>
+<BR>[Calls]<UL><LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uread4
+<LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dmacopy
+</UL>
+<BR>[Called By]<UL><LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ParseBTData
+</UL>
+
+<P><STRONG><a name="[bd]"></a>IPC_ReadIPC_Opcode</STRONG> (Thumb, 128 bytes, Stack size 8 bytes, yc_ipc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = IPC_ReadIPC_Opcode
+</UL>
+<BR>[Called By]<UL><LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ParseBTData
+</UL>
+
+<P><STRONG><a name="[ce]"></a>_download_btcode</STRONG> (Thumb, 276 bytes, Stack size 24 bytes, yc_ipc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 68<LI>Call Chain = _download_btcode &rArr; _dmacopy &rArr; _dma_start
+</UL>
+<BR>[Calls]<UL><LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy
+<LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dmacopy
+</UL>
+<BR>[Called By]<UL><LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IpcInit
+</UL>
+
+<P><STRONG><a name="[cf]"></a>erase_memory</STRONG> (Thumb, 34 bytes, Stack size 0 bytes, yc_ipc.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IpcInit
+</UL>
+
+<P><STRONG><a name="[9e]"></a>IpcInit</STRONG> (Thumb, 100 bytes, Stack size 8 bytes, yc_ipc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 76<LI>Call Chain = IpcInit &rArr; _download_btcode &rArr; _dmacopy &rArr; _dma_start
+</UL>
+<BR>[Calls]<UL><LI><a href="#[cd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay_ms
+<LI><a href="#[cf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;erase_memory
+<LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_download_btcode
+</UL>
+<BR>[Called By]<UL><LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_Init
+</UL>
+
+<P><STRONG><a name="[d0]"></a>PrintHCIPack</STRONG> (Thumb, 130 bytes, Stack size 24 bytes, yc_ipc.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[c1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uread4
+<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MyPrintf
+</UL>
+
+<P><STRONG><a name="[f6]"></a>delay_us</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, yc_timer.o(.text), UNUSED)
+
+<P><STRONG><a name="[cd]"></a>delay_ms</STRONG> (Thumb, 14 bytes, Stack size 8 bytes, yc_timer.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = delay_ms
+</UL>
+<BR>[Called By]<UL><LI><a href="#[cc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_PutBtData
+<LI><a href="#[9e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IpcInit
+</UL>
+
+<P><STRONG><a name="[d1]"></a>TIM_Cmd</STRONG> (Thumb, 96 bytes, Stack size 16 bytes, yc_timer.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[d5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_PWMInit
+<LI><a href="#[d2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_Init
+</UL>
+
+<P><STRONG><a name="[d2]"></a>TIM_Init</STRONG> (Thumb, 82 bytes, Stack size 8 bytes, yc_timer.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[d1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_Cmd
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[f7]"></a>TIM_DeInit</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, yc_timer.o(.text), UNUSED)
+
+<P><STRONG><a name="[d3]"></a>TIM_ModeConfig</STRONG> (Thumb, 114 bytes, Stack size 16 bytes, yc_timer.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[d4]"></a>TIM_SetPeriod</STRONG> (Thumb, 32 bytes, Stack size 16 bytes, yc_timer.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[d5]"></a>TIM_PWMInit</STRONG> (Thumb, 176 bytes, Stack size 8 bytes, yc_timer.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[d1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIM_Cmd
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[d6]"></a>TIM_SetPWMPeriod</STRONG> (Thumb, 40 bytes, Stack size 16 bytes, yc_timer.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[d7]"></a>TIM_PWMDifferential</STRONG> (Thumb, 170 bytes, Stack size 24 bytes, yc_timer.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay (via Veneer)
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[d8]"></a>SYSCTRL_AHBPeriphClockCmd</STRONG> (Thumb, 52 bytes, Stack size 16 bytes, yc_sysctrl.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[d9]"></a>SYSCTRL_EnterSleep</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, yc_sysctrl.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+
+<P><STRONG><a name="[46]"></a>HCLKConfig_Div_None</STRONG> (Thumb, 30 bytes, Stack size 0 bytes, yc_sysctrl.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[80]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SYSCTRL_HCLKConfig
+</UL>
+<BR>[Address Reference Count : 1]<UL><LI> yc_sysctrl.o(.text)
+</UL>
+<P><STRONG><a name="[80]"></a>SYSCTRL_HCLKConfig</STRONG> (Thumb, 78 bytes, Stack size 16 bytes, yc_sysctrl.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = SYSCTRL_HCLKConfig
+</UL>
+<BR>[Calls]<UL><LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;HCLKConfig_Div_None
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+</UL>
+
+<P><STRONG><a name="[da]"></a>SYSCTRL_GetClocksFreq</STRONG> (Thumb, 24 bytes, Stack size 8 bytes, yc_sysctrl.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_idivmod
+</UL>
+
+<P><STRONG><a name="[db]"></a>SYSCTRL_EnableDpllClk</STRONG> (Thumb, 66 bytes, Stack size 8 bytes, yc_sysctrl.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;delay (via Veneer)
+</UL>
+
+<P><STRONG><a name="[f8]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
+
+<P><STRONG><a name="[56]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidivmod
+</UL>
+<BR>[Called By]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_idivmod
+<LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetRelativeTime
+<LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Delay_Ms
+<LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[7f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init
+<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MyPrintf
+</UL>
+
+<P><STRONG><a name="[f9]"></a>__aeabi_idiv</STRONG> (Thumb, 0 bytes, Stack size 16 bytes, idiv.o(.text), UNUSED)
+
+<P><STRONG><a name="[63]"></a>__aeabi_idivmod</STRONG> (Thumb, 40 bytes, Stack size 16 bytes, idiv.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = __aeabi_idivmod &rArr; __aeabi_uidivmod
+</UL>
+<BR>[Calls]<UL><LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
+</UL>
+<BR>[Called By]<UL><LI><a href="#[da]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SYSCTRL_GetClocksFreq
+<LI><a href="#[c8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_GetRelativeTime
+<LI><a href="#[c7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Delay_Us
+<LI><a href="#[c5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sysTick_delay_ms
+<LI><a href="#[a5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_IsTimeOut
+<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[79]"></a>__aeabi_memcpy</STRONG> (Thumb, 36 bytes, Stack size 0 bytes, memcpya.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[ce]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_download_btcode
+<LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpBigData
+<LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_write
+</UL>
+
+<P><STRONG><a name="[61]"></a>__aeabi_memcpy4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[fa]"></a>__aeabi_memcpy8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
+
+<P><STRONG><a name="[dc]"></a>__aeabi_memset</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+<BR><BR>[Called By]<UL><LI><a href="#[dd]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_memset$wrapper
+<LI><a href="#[77]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
+</UL>
+
+<P><STRONG><a name="[fb]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+
+<P><STRONG><a name="[fc]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+
+<P><STRONG><a name="[77]"></a>__aeabi_memclr</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[dc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
+</UL>
+<BR>[Called By]<UL><LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_write
+</UL>
+
+<P><STRONG><a name="[62]"></a>__aeabi_memclr4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[df]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_qspi_flash_write
+<LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_init_proc
+</UL>
+
+<P><STRONG><a name="[fd]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
+
+<P><STRONG><a name="[dd]"></a>_memset$wrapper</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[dc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
+</UL>
+
+<P><STRONG><a name="[c1]"></a>__aeabi_uread4</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, uread4.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[d0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;PrintHCIPack
+<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_TxData
+<LI><a href="#[be]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_ReadBtData_DMA
+<LI><a href="#[bf]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_ReadBtData
+<LI><a href="#[81]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_data
+<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ParseBTData
+</UL>
+
+<P><STRONG><a name="[fe]"></a>__rt_uread4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, uread4.o(.text), UNUSED)
+
+<P><STRONG><a name="[ff]"></a>_uread4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, uread4.o(.text), UNUSED)
+
+<P><STRONG><a name="[9d]"></a>__aeabi_uwrite4</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, uwrite4.o(.text))
+<BR><BR>[Called By]<UL><LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_Init
+</UL>
+
+<P><STRONG><a name="[100]"></a>__rt_uwrite4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, uwrite4.o(.text), UNUSED)
+
+<P><STRONG><a name="[101]"></a>_uwrite4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, uwrite4.o(.text), UNUSED)
+
+<P><STRONG><a name="[52]"></a>__scatterload</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, init.o(.text))
+<BR><BR>[Calls]<UL><LI><a href="#[de]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main_after_scatterload
+</UL>
+<BR>[Called By]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_main_scatterload
+</UL>
+
+<P><STRONG><a name="[102]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
+
+<P><STRONG><a name="[7c]"></a>__ARM_common_switch8</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, main.o(i.__ARM_common_switch8))
+<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __ARM_common_switch8
+</UL>
+<BR>[Called By]<UL><LI><a href="#[86]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Init
+<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ParseBTData
+<LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_printbuf_data_parse
+</UL>
+
+<P><STRONG><a name="[103]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
+
+<P><STRONG><a name="[104]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
+
+<P><STRONG><a name="[105]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
+
+<P><STRONG><a name="[df]"></a>_qspi_flash_write</STRONG> (Thumb, 122 bytes, Stack size 296 bytes, yc_qspi.o(i._qspi_flash_write), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
+</UL>
+<BR>[Called By]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;qspi_flash_write
+</UL>
+
+<P><STRONG><a name="[e0]"></a>end_qspi</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, yc_qspi.o(i.end_qspi), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;setqspi
+<LI><a href="#[e1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prefetch
+</UL>
+<BR>[Called By]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;qspi_flash_write
+<LI><a href="#[83]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;qspi_flash_sectorerase
+</UL>
+
+<P><STRONG><a name="[e2]"></a>pre_qspi</STRONG> (Thumb, 56 bytes, Stack size 16 bytes, yc_qspi.o(i.pre_qspi), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;setqspi
+<LI><a href="#[e1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prefetch
+</UL>
+<BR>[Called By]<UL><LI><a href="#[84]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;qspi_flash_write
+<LI><a href="#[83]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;qspi_flash_sectorerase
+</UL>
+
+<P><STRONG><a name="[e1]"></a>prefetch</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, yc_qspi.o(i.prefetch), UNUSED)
+<BR><BR>[Called By]<UL><LI><a href="#[e2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pre_qspi
+<LI><a href="#[e0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;end_qspi
+</UL>
+
+<P><STRONG><a name="[83]"></a>qspi_flash_sectorerase</STRONG> (Thumb, 36 bytes, Stack size 16 bytes, yc_qspi.o(i.qspi_flash_sectorerase), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[e2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pre_qspi
+<LI><a href="#[e0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;end_qspi
+<LI><a href="#[e3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;get_primask
+</UL>
+<BR>[Called By]<UL><LI><a href="#[82]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ReserveNV
+</UL>
+
+<P><STRONG><a name="[84]"></a>qspi_flash_write</STRONG> (Thumb, 44 bytes, Stack size 24 bytes, yc_qspi.o(i.qspi_flash_write), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[e2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pre_qspi
+<LI><a href="#[e0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;end_qspi
+<LI><a href="#[df]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_qspi_flash_write
+<LI><a href="#[e3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;get_primask
+</UL>
+<BR>[Called By]<UL><LI><a href="#[82]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ReserveNV
+</UL>
+
+<P><STRONG><a name="[47]"></a>setqspi</STRONG> (Thumb, 36 bytes, Stack size 0 bytes, yc_qspi.o(i.setqspi))
+<BR><BR>[Called By]<UL><LI><a href="#[e2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pre_qspi
+<LI><a href="#[e0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;end_qspi
+</UL>
+<BR>[Address Reference Count : 2]<UL><LI> yc_qspi.o(i.end_qspi)
+<LI> yc_qspi.o(i.pre_qspi)
+</UL><P>
+<H3>
+Local Symbols
+</H3>
+<P><STRONG><a name="[60]"></a>bt_init_proc</STRONG> (Thumb, 1440 bytes, Stack size 176 bytes, main.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 544<LI>Call Chain = bt_init_proc &rArr; MyPrintf &rArr; printfsend &rArr; UART_SendBuf
+</UL>
+<BR>[Calls]<UL><LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
+<LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy4
+<LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_idivmod
+<LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Config
+<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetVisibility
+<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetParingMode
+<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEScanData
+<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvData
+<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetCOD
+<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtName
+<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtAddr
+<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleName
+<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleAddr
+<LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_Init
+<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_GetVersion
+<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DeleteService
+<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleService
+<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleCharacteristic
+<LI><a href="#[71]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;genBleAdvData
+<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MyPrintf
+<LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_EnableIRQ
+<LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_SetPriority
+</UL>
+<BR>[Called By]<UL><LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
+</UL>
+
+<P><STRONG><a name="[76]"></a>bt_write</STRONG> (Thumb, 100 bytes, Stack size 16 bytes, main.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[77]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
+<LI><a href="#[79]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy
+<LI><a href="#[78]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_get_bt_type
+<LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendSppData
+<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendBleData
+</UL>
+<BR>[Called By]<UL><LI><a href="#[7b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;prt_printbuf_data_parse
+</UL>
+
+<P><STRONG><a name="[7b]"></a>prt_printbuf_data_parse</STRONG> (Thumb, 904 bytes, Stack size 8 bytes, main.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[7c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_common_switch8
+<LI><a href="#[76]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;bt_write
+</UL>
+
+<P><STRONG><a name="[9f]"></a>SendCMD</STRONG> (Thumb, 42 bytes, Stack size 8 bytes, yc_bt.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = SendCMD &rArr; IPC_TxData
+</UL>
+<BR>[Calls]<UL><LI><a href="#[a0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_get_available_size
+<LI><a href="#[a1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;IPC_TxData
+</UL>
+<BR>[Called By]<UL><LI><a href="#[bc]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DisconnectTcp
+<LI><a href="#[bb]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendUdpData
+<LI><a href="#[ba]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpBigData
+<LI><a href="#[b9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BnepSendTcpData
+<LI><a href="#[b8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectTcp
+<LI><a href="#[b6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConnectBnep
+<LI><a href="#[b4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DnsReq
+<LI><a href="#[b3]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_Set_FixedPasskey
+<LI><a href="#[b2]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetTxPower
+<LI><a href="#[b1]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_RejectJustWork
+<LI><a href="#[b0]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvParm
+<LI><a href="#[af]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLESendConnUpdate
+<LI><a href="#[ae]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEParing
+<LI><a href="#[ad]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_PasskeyEntry
+<LI><a href="#[ac]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_ConfirmGkey
+<LI><a href="#[ab]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_EnterSleepMode
+<LI><a href="#[aa]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetNVRAM
+<LI><a href="#[a9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BleDisconnect
+<LI><a href="#[a8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_BtDisconnect
+<LI><a href="#[a7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetPincode
+<LI><a href="#[a6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Bt_GetBtStatus
+<LI><a href="#[74]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetVisibility
+<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetSppFlowcontrol
+<LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetParingMode
+<LI><a href="#[73]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEScanData
+<LI><a href="#[72]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetLEAdvData
+<LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetCOD
+<LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtName
+<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBtAddr
+<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleName
+<LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SetBleAddr
+<LI><a href="#[7a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendSppData
+<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_SendBleData
+<LI><a href="#[75]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_GetVersion
+<LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_DeleteService
+<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleService
+<LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;BT_AddBleCharacteristic
+</UL>
+
+<P><STRONG><a name="[c5]"></a>sysTick_delay_ms</STRONG> (Thumb, 124 bytes, Stack size 16 bytes, yc_systick.o(.text), UNUSED)
+<BR><BR>[Calls]<UL><LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_idivmod
+<LI><a href="#[85]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_assert_handler
+</UL>
+<BR>[Called By]<UL><LI><a href="#[c6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;SysTick_Delay_Ms
+</UL>
+
+<P><STRONG><a name="[ca]"></a>_dma_start</STRONG> (Thumb, 40 bytes, Stack size 20 bytes, yc_ipc.o(.text))
+<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = _dma_start
+</UL>
+<BR>[Called By]<UL><LI><a href="#[c9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dmacopy
+</UL>
+
+<P><STRONG><a name="[49]"></a>isr</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, flash_start.o(.flash_start))
+<BR><BR>[Called By]<UL><LI><a href="#[23]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq31
+<LI><a href="#[22]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq30
+<LI><a href="#[21]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq29
+<LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq28
+<LI><a href="#[1f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq27
+<LI><a href="#[1e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq26
+<LI><a href="#[1d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq25
+<LI><a href="#[1c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq24
+<LI><a href="#[1b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq23
+<LI><a href="#[1a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq22
+<LI><a href="#[19]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq21
+<LI><a href="#[18]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq20
+<LI><a href="#[17]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq19
+<LI><a href="#[16]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq18
+<LI><a href="#[15]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq17
+<LI><a href="#[14]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq16
+<LI><a href="#[13]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq15
+<LI><a href="#[12]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq14
+<LI><a href="#[11]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq13
+<LI><a href="#[10]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq12
+<LI><a href="#[f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq11
+<LI><a href="#[e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq10
+<LI><a href="#[d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq9
+<LI><a href="#[c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq8
+<LI><a href="#[b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq7
+<LI><a href="#[a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq6
+<LI><a href="#[9]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq5
+<LI><a href="#[8]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq4
+<LI><a href="#[7]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq3
+<LI><a href="#[6]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq2
+<LI><a href="#[5]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq1
+<LI><a href="#[4]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;irq0
+</UL>
+<P>
+<H3>
+Undefined Global Symbols
+</H3><HR></body></html>
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.lnp
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.lnp	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil.lnp	(working copy)
@@ -0,0 +1,21 @@
+--cpu Cortex-M0
+".\objects\misc.o"
+".\objects\system.o"
+".\objects\bt_code.o"
+".\objects\main.o"
+".\objects\yc_gpio.o"
+".\objects\yc_uart.o"
+".\objects\yc_bt.o"
+".\objects\yc_systick.o"
+".\objects\yc_ipc.o"
+".\objects\yc_otp.o"
+".\objects\yc_timer.o"
+"..\..\..\..\..\Librarier\sdk\yc_qspi.lib"
+".\objects\yc_lpm.o"
+".\objects\yc_sysctrl.o"
+".\objects\flash_start.o"
+".\objects\startup.o"
+--library_type=microlib --strict --scatter ".\Objects\YC3121_keil.sct"
+--summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols
+--info sizes --info totals --info unused --info veneers
+--list ".\Listings\YC3121_Keil.map" -o .\Objects\YC3121_Keil.axf
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil_YC3121.dep
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil_YC3121.dep	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_Keil_YC3121.dep	(working copy)
@@ -0,0 +1,144 @@
+Dependencies for Project 'YC3121_Keil', Target 'YC3121': (DO NOT MODIFY !)
+F (..\..\..\..\..\Librarier\core\misc.c)(0x5F1AA64A)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\misc.o --omf_browse .\objects\misc.crf --depend .\objects\misc.d)
+I (..\..\..\..\..\Librarier\core\misc.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+F (..\..\..\..\..\Librarier\core\system.c)(0x6057FD7F)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\system.o --omf_browse .\objects\system.crf --depend .\objects\system.d)
+I (C:\Keil_v5\ARM\ARMCC\include\stdarg.h)(0x5CEB79E4)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+F (..\..\..\..\..\Librarier\core\bt_code.c)(0x628EF286)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\bt_code.o --omf_browse .\objects\bt_code.crf --depend .\objects\bt_code.d)
+F (..\..\user\main.c)(0x6297274E)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\main.o --omf_browse .\objects\main.crf --depend .\objects\main.d)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_gpio.h)(0x5F2A2220)
+I (..\..\..\..\..\Librarier\sdk\yc_bt.h)(0x60FA2D90)
+I (..\..\..\..\..\Librarier\sdk\yc_ipc.h)(0x60FA311C)
+I (..\..\..\..\..\Librarier\sdk\yc_timer.h)(0x5F1AA67A)
+I (..\..\..\..\..\Librarier\core\bt_code.h)(0x5F1AAB84)
+I (..\..\..\..\..\Librarier\core\misc.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_lpm.h)(0x60C9F053)
+I (..\..\..\..\..\Librarier\sdk\yc_otp.h)(0x5F1AA67C)
+I (..\..\..\..\..\Librarier\sdk\yc_sysctrl.h)(0x5F1AA67D)
+I (..\..\..\..\..\Librarier\sdk\yc_systick.h)(0x5EA8F9D6)
+I (..\..\..\..\..\Librarier\sdk\yc_qspi.h)(0x60A3BD80)
+I (..\..\..\..\..\Librarier\core\board_config.h)(0x628EEAEA)
+I (..\..\..\..\..\Librarier\sdk\yc_exti.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\sdk\yc_spi.h)(0x5F22C131)
+F (..\..\..\..\..\Librarier\sdk\yc_gpio.c)(0x5F1AA67B)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\yc_gpio.o --omf_browse .\objects\yc_gpio.crf --depend .\objects\yc_gpio.d)
+I (..\..\..\..\..\Librarier\sdk\yc_gpio.h)(0x5F2A2220)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_lpm.h)(0x60C9F053)
+I (..\..\..\..\..\Librarier\sdk\yc_ipc.h)(0x60FA311C)
+I (..\..\..\..\..\Librarier\sdk\yc_timer.h)(0x5F1AA67A)
+I (..\..\..\..\..\Librarier\core\bt_code.h)(0x5F1AAB84)
+I (..\..\..\..\..\Librarier\core\misc.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_otp.h)(0x5F1AA67C)
+I (..\..\..\..\..\Librarier\sdk\yc_sysctrl.h)(0x5F1AA67D)
+F (..\..\..\..\..\Librarier\sdk\yc_uart.c)(0x60F95D79)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\yc_uart.o --omf_browse .\objects\yc_uart.crf --depend .\objects\yc_uart.d)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+F (..\..\..\..\..\Librarier\sdk\yc_bt.c)(0x627E1BBA)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\yc_bt.o --omf_browse .\objects\yc_bt.crf --depend .\objects\yc_bt.d)
+I (..\..\..\..\..\Librarier\sdk\yc_bt.h)(0x60FA2D90)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_ipc.h)(0x60FA311C)
+I (..\..\..\..\..\Librarier\sdk\yc_timer.h)(0x5F1AA67A)
+I (..\..\..\..\..\Librarier\sdk\yc_gpio.h)(0x5F2A2220)
+I (..\..\..\..\..\Librarier\core\bt_code.h)(0x5F1AAB84)
+I (..\..\..\..\..\Librarier\core\misc.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_lpm.h)(0x60C9F053)
+I (..\..\..\..\..\Librarier\sdk\yc_otp.h)(0x5F1AA67C)
+I (..\..\..\..\..\Librarier\sdk\yc_sysctrl.h)(0x5F1AA67D)
+I (..\..\..\..\..\Librarier\sdk\yc_systick.h)(0x5EA8F9D6)
+F (..\..\..\..\..\Librarier\sdk\yc_systick.c)(0x5F1AA67B)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\yc_systick.o --omf_browse .\objects\yc_systick.crf --depend .\objects\yc_systick.d)
+I (..\..\..\..\..\Librarier\sdk\yc_systick.h)(0x5EA8F9D6)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+F (..\..\..\..\..\Librarier\sdk\yc_ipc.c)(0x60FA310D)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\yc_ipc.o --omf_browse .\objects\yc_ipc.crf --depend .\objects\yc_ipc.d)
+I (..\..\..\..\..\Librarier\sdk\yc_ipc.h)(0x60FA311C)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_timer.h)(0x5F1AA67A)
+I (..\..\..\..\..\Librarier\sdk\yc_gpio.h)(0x5F2A2220)
+I (..\..\..\..\..\Librarier\core\bt_code.h)(0x5F1AAB84)
+I (..\..\..\..\..\Librarier\core\misc.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_lpm.h)(0x60C9F053)
+I (..\..\..\..\..\Librarier\sdk\yc_otp.h)(0x5F1AA67C)
+I (..\..\..\..\..\Librarier\sdk\yc_sysctrl.h)(0x5F1AA67D)
+F (..\..\..\..\..\Librarier\sdk\yc_otp.c)(0x604B24F5)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\yc_otp.o --omf_browse .\objects\yc_otp.crf --depend .\objects\yc_otp.d)
+I (..\..\..\..\..\Librarier\sdk\yc_otp.h)(0x5F1AA67C)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+F (..\..\..\..\..\Librarier\sdk\yc_timer.c)(0x5F1AA67B)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\yc_timer.o --omf_browse .\objects\yc_timer.crf --depend .\objects\yc_timer.d)
+I (..\..\..\..\..\Librarier\sdk\yc_timer.h)(0x5F1AA67A)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_gpio.h)(0x5F2A2220)
+F (..\..\..\..\..\Librarier\sdk\yc_qspi.lib)(0x60A3BDA2)()
+F (..\..\..\..\..\Librarier\sdk\yc_lpm.c)(0x60C9F053)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\yc_lpm.o --omf_browse .\objects\yc_lpm.crf --depend .\objects\yc_lpm.d)
+I (..\..\..\..\..\Librarier\sdk\yc_lpm.h)(0x60C9F053)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_ipc.h)(0x60FA311C)
+I (..\..\..\..\..\Librarier\sdk\yc_timer.h)(0x5F1AA67A)
+I (..\..\..\..\..\Librarier\sdk\yc_gpio.h)(0x5F2A2220)
+I (..\..\..\..\..\Librarier\core\bt_code.h)(0x5F1AAB84)
+I (..\..\..\..\..\Librarier\core\misc.h)(0x5F1AA64A)
+I (..\..\..\..\..\Librarier\sdk\yc_otp.h)(0x5F1AA67C)
+I (..\..\..\..\..\Librarier\sdk\yc_sysctrl.h)(0x5F1AA67D)
+F (..\..\..\..\..\Librarier\sdk\yc_sysctrl.c)(0x60C0BA2B)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__

-o .\objects\yc_sysctrl.o --omf_browse .\objects\yc_sysctrl.crf --depend .\objects\yc_sysctrl.d)
+I (..\..\..\..\..\Librarier\sdk\yc_sysctrl.h)(0x5F1AA67D)
+I (..\..\..\..\..\Librarier\core\yc3121.h)(0x609CF5A9)
+I (..\..\..\..\..\Librarier\core\type.h)(0x60C0BC8C)
+I (..\..\..\..\..\Librarier\core\system.h)(0x5F1AA64A)
+I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x5CEB79E2)
+I (..\..\..\..\..\Librarier\sdk\yc_uart.h)(0x5F1AA67B)
+I (..\..\..\..\..\Librarier\core\rom_api.h)(0x5F1AA64A)
+F (..\..\..\..\..\Librarier\startup\flash_start.s)(0x5FD1DAE4)(--cpu Cortex-M0 --li -g --apcs=interwork --pd "__MICROLIB SETA 1"

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

--pd "__UVISION_VERSION SETA 528" --pd "ARMCM0 SETA 1"

--list .\listings\flash_start.lst --xref -o .\objects\flash_start.o --depend .\objects\flash_start.d)
+F (..\..\..\..\..\Librarier\startup\startup.s)(0x60501659)(--cpu Cortex-M0 --li -g --apcs=interwork --pd "__MICROLIB SETA 1"

-I.\RTE\_YC3121

-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include

-IC:\Keil_v5\ARM\CMSIS\Include

--pd "__UVISION_VERSION SETA 528" --pd "ARMCM0 SETA 1"

--list .\listings\startup.lst --xref -o .\objects\startup.o --depend .\objects\startup.d)
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_keil.sct
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_keil.sct	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/YC3121_keil.sct	(working copy)
@@ -0,0 +1,55 @@
+; *************************************************************
+; *** Scatter-Loading Description File generated by uVision ***
+; *************************************************************
+
+LR_IROM1 0x00000000 0x0001fff  {    ; load region size_region
+  ER_IROM1 0x00000000 0x00001fff  {  ; load address = execution address
+   startup.o (RESET, +First)
+   startup.o (|.text|,+RO)
+;   *(InRoot$$Sections)
+  }
+  ;ER_IROM2 0x4000   {
+  ;rom_main.o (+RO)
+  ;}
+  
+  ;ER_IROM3 0x100000 {
+	  ;*(InRoot$$Sections)
+  ;}
+	
+  ;ER_IROM4 0x100400   {
+  ;flash_start.o (+RO)
+  ;.ANY (+RO) 
+  ;}
+  
+  ;RW_IRAM1 0x000d0000 0x0010000  {  ; RW data
+   ;.ANY (+RW +ZI)
+  ;}
+  
+;  ARM_LIB_STACK 0xE0000 EMPTY -0x10000{}
+}
+
+;LR_IROM2 0x4000 0x4000{
+;	ER_IROM2 0x4000 {
+;	  rom_main.o (+RO)
+;	}
+;}
+
+LR_IROM3 0x1000200 0x200{
+	ER_IROM3 0x1000200 {
+	  flash_start.o (|.flash_start|,+RO)
+	}
+}
+
+LR_IROM4 0x1000400 0x1000000{
+	ER_IROM4 0x1000400 {
+;	  flash_start.o (|.flash_start|,+RO)
+	  *(InRoot$$Sections)
+	  .ANY (+RO)
+	}
+	
+	
+	 RW_IRAM2 0x00020000 0x010000  {  ; RW data
+	.ANY (+RW +ZI)
+	}
+}
+
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/bt_code.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/bt_code.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/bt_code.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\bt_code.o --omf_browse .\objects\bt_code.crf --depend .\objects\bt_code.d "..\..\..\..\..\Librarier\core\bt_code.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/bt_code.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/bt_code.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/bt_code.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/bt_code.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/bt_code.d	(working copy)
@@ -0,0 +1 @@
+.\objects\bt_code.o: ..\..\..\..\..\Librarier\core\bt_code.c
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/flash.bin
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/flash.bin
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/flash_start._ia
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/flash_start._ia	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/flash_start._ia	(working copy)
@@ -0,0 +1,6 @@
+--cpu Cortex-M0 --li -g --apcs=interwork --pd "__MICROLIB SETA 1"
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+--pd "__UVISION_VERSION SETA 528" --pd "ARMCM0 SETA 1"
+--list .\listings\flash_start.lst --xref -o .\objects\flash_start.o --depend .\objects\flash_start.d "..\..\..\..\..\Librarier\startup\flash_start.s"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/flash_start.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/flash_start.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/flash_start.d	(working copy)
@@ -0,0 +1 @@
+.\objects\flash_start.o: ..\..\..\..\..\Librarier\startup\flash_start.s
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/main.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/main.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/main.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\main.o --omf_browse .\objects\main.crf --depend .\objects\main.d "..\..\user\main.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/main.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/main.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/main.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/main.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/main.d	(working copy)
@@ -0,0 +1,23 @@
+.\objects\main.o: ..\..\user\main.c
+.\objects\main.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\main.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\main.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\main.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\main.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\main.o: ..\..\..\..\..\Librarier\core\rom_api.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_gpio.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_bt.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_ipc.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_timer.h
+.\objects\main.o: ..\..\..\..\..\Librarier\core\bt_code.h
+.\objects\main.o: ..\..\..\..\..\Librarier\core\misc.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_lpm.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_ipc.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_otp.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_sysctrl.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_systick.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_qspi.h
+.\objects\main.o: ..\..\..\..\..\Librarier\core\board_config.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_exti.h
+.\objects\main.o: ..\..\..\..\..\Librarier\sdk\yc_spi.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/misc.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/misc.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/misc.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\misc.o --omf_browse .\objects\misc.crf --depend .\objects\misc.d "..\..\..\..\..\Librarier\core\misc.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/misc.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/misc.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/misc.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/misc.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/misc.d	(working copy)
@@ -0,0 +1,9 @@
+.\objects\misc.o: ..\..\..\..\..\Librarier\core\misc.c
+.\objects\misc.o: ..\..\..\..\..\Librarier\core\misc.h
+.\objects\misc.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\misc.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\misc.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\misc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\misc.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\misc.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\misc.o: ..\..\..\..\..\Librarier\core\rom_api.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/startup._ia
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/startup._ia	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/startup._ia	(working copy)
@@ -0,0 +1,6 @@
+--cpu Cortex-M0 --li -g --apcs=interwork --pd "__MICROLIB SETA 1"
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+--pd "__UVISION_VERSION SETA 528" --pd "ARMCM0 SETA 1"
+--list .\listings\startup.lst --xref -o .\objects\startup.o --depend .\objects\startup.d "..\..\..\..\..\Librarier\startup\startup.s"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/startup.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/startup.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/startup.d	(working copy)
@@ -0,0 +1 @@
+.\objects\startup.o: ..\..\..\..\..\Librarier\startup\startup.s
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/system.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/system.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/system.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\system.o --omf_browse .\objects\system.crf --depend .\objects\system.d "..\..\..\..\..\Librarier\core\system.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/system.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/system.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/system.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/system.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/system.d	(working copy)
@@ -0,0 +1,9 @@
+.\objects\system.o: ..\..\..\..\..\Librarier\core\system.c
+.\objects\system.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdarg.h
+.\objects\system.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\system.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\system.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\system.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\system.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\system.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\system.o: ..\..\..\..\..\Librarier\core\rom_api.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_bt.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_bt.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_bt.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\yc_bt.o --omf_browse .\objects\yc_bt.crf --depend .\objects\yc_bt.d "..\..\..\..\..\Librarier\sdk\yc_bt.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_bt.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_bt.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_bt.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_bt.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_bt.d	(working copy)
@@ -0,0 +1,19 @@
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_bt.c
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_bt.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\yc_bt.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\core\rom_api.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_ipc.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_timer.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_gpio.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\core\bt_code.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\core\misc.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_lpm.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_ipc.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_otp.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_sysctrl.h
+.\objects\yc_bt.o: ..\..\..\..\..\Librarier\sdk\yc_systick.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_gpio.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_gpio.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_gpio.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\yc_gpio.o --omf_browse .\objects\yc_gpio.crf --depend .\objects\yc_gpio.d "..\..\..\..\..\Librarier\sdk\yc_gpio.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_gpio.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_gpio.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_gpio.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_gpio.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_gpio.d	(working copy)
@@ -0,0 +1,17 @@
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\sdk\yc_gpio.c
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\sdk\yc_gpio.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\yc_gpio.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\core\rom_api.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\sdk\yc_lpm.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\sdk\yc_ipc.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\sdk\yc_timer.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\core\bt_code.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\core\misc.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\sdk\yc_lpm.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\sdk\yc_otp.h
+.\objects\yc_gpio.o: ..\..\..\..\..\Librarier\sdk\yc_sysctrl.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_ipc.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_ipc.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_ipc.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\yc_ipc.o --omf_browse .\objects\yc_ipc.crf --depend .\objects\yc_ipc.d "..\..\..\..\..\Librarier\sdk\yc_ipc.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_ipc.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_ipc.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_ipc.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_ipc.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_ipc.d	(working copy)
@@ -0,0 +1,17 @@
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\sdk\yc_ipc.c
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\sdk\yc_ipc.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\yc_ipc.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\core\rom_api.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\sdk\yc_timer.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\sdk\yc_gpio.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\core\bt_code.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\core\misc.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\sdk\yc_lpm.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\sdk\yc_ipc.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\sdk\yc_otp.h
+.\objects\yc_ipc.o: ..\..\..\..\..\Librarier\sdk\yc_sysctrl.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_lpm.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_lpm.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_lpm.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\yc_lpm.o --omf_browse .\objects\yc_lpm.crf --depend .\objects\yc_lpm.d "..\..\..\..\..\Librarier\sdk\yc_lpm.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_lpm.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_lpm.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_lpm.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_lpm.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_lpm.d	(working copy)
@@ -0,0 +1,17 @@
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\sdk\yc_lpm.c
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\sdk\yc_lpm.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\yc_lpm.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\core\rom_api.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\sdk\yc_ipc.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\sdk\yc_timer.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\sdk\yc_gpio.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\core\bt_code.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\core\misc.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\sdk\yc_lpm.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\sdk\yc_otp.h
+.\objects\yc_lpm.o: ..\..\..\..\..\Librarier\sdk\yc_sysctrl.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_otp.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_otp.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_otp.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\yc_otp.o --omf_browse .\objects\yc_otp.crf --depend .\objects\yc_otp.d "..\..\..\..\..\Librarier\sdk\yc_otp.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_otp.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_otp.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_otp.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_otp.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_otp.d	(working copy)
@@ -0,0 +1,9 @@
+.\objects\yc_otp.o: ..\..\..\..\..\Librarier\sdk\yc_otp.c
+.\objects\yc_otp.o: ..\..\..\..\..\Librarier\sdk\yc_otp.h
+.\objects\yc_otp.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_otp.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\yc_otp.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\yc_otp.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\yc_otp.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_otp.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_otp.o: ..\..\..\..\..\Librarier\core\rom_api.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_sysctrl.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_sysctrl.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_sysctrl.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\yc_sysctrl.o --omf_browse .\objects\yc_sysctrl.crf --depend .\objects\yc_sysctrl.d "..\..\..\..\..\Librarier\sdk\yc_sysctrl.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_sysctrl.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_sysctrl.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_sysctrl.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_sysctrl.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_sysctrl.d	(working copy)
@@ -0,0 +1,9 @@
+.\objects\yc_sysctrl.o: ..\..\..\..\..\Librarier\sdk\yc_sysctrl.c
+.\objects\yc_sysctrl.o: ..\..\..\..\..\Librarier\sdk\yc_sysctrl.h
+.\objects\yc_sysctrl.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_sysctrl.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\yc_sysctrl.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\yc_sysctrl.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\yc_sysctrl.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_sysctrl.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_sysctrl.o: ..\..\..\..\..\Librarier\core\rom_api.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_systick.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_systick.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_systick.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\yc_systick.o --omf_browse .\objects\yc_systick.crf --depend .\objects\yc_systick.d "..\..\..\..\..\Librarier\sdk\yc_systick.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_systick.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_systick.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_systick.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_systick.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_systick.d	(working copy)
@@ -0,0 +1,9 @@
+.\objects\yc_systick.o: ..\..\..\..\..\Librarier\sdk\yc_systick.c
+.\objects\yc_systick.o: ..\..\..\..\..\Librarier\sdk\yc_systick.h
+.\objects\yc_systick.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_systick.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\yc_systick.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\yc_systick.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\yc_systick.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_systick.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_systick.o: ..\..\..\..\..\Librarier\core\rom_api.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_timer.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_timer.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_timer.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\yc_timer.o --omf_browse .\objects\yc_timer.crf --depend .\objects\yc_timer.d "..\..\..\..\..\Librarier\sdk\yc_timer.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_timer.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_timer.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_timer.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_timer.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_timer.d	(working copy)
@@ -0,0 +1,10 @@
+.\objects\yc_timer.o: ..\..\..\..\..\Librarier\sdk\yc_timer.c
+.\objects\yc_timer.o: ..\..\..\..\..\Librarier\sdk\yc_timer.h
+.\objects\yc_timer.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_timer.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\yc_timer.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\yc_timer.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\yc_timer.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_timer.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_timer.o: ..\..\..\..\..\Librarier\core\rom_api.h
+.\objects\yc_timer.o: ..\..\..\..\..\Librarier\sdk\yc_gpio.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_uart.__i
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_uart.__i	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_uart.__i	(working copy)
@@ -0,0 +1,6 @@
+--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -W -O0 --apcs=interwork -I ..\..\..\..\..\Librarier\sdk -I ..\..\..\..\..\Librarier\core -I ..\..\user
+-I.\RTE\_YC3121
+-IC:\Users\yichip\AppData\Local\Arm\Packs\ARM\CMSIS\5.5.1\Device\ARM\ARMCM0\Include
+-IC:\Keil_v5\ARM\CMSIS\Include
+-D__UVISION_VERSION="528" -DARMCM0 -D__USEKEILCOMPILE__
+-o .\objects\yc_uart.o --omf_browse .\objects\yc_uart.crf --depend .\objects\yc_uart.d "..\..\..\..\..\Librarier\sdk\yc_uart.c"
\ No newline at end of file
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_uart.crf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_uart.crf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_uart.d
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_uart.d	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/Objects/yc_uart.d	(working copy)
@@ -0,0 +1,8 @@
+.\objects\yc_uart.o: ..\..\..\..\..\Librarier\sdk\yc_uart.c
+.\objects\yc_uart.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_uart.o: ..\..\..\..\..\Librarier\core\yc3121.h
+.\objects\yc_uart.o: ..\..\..\..\..\Librarier\core\type.h
+.\objects\yc_uart.o: ..\..\..\..\..\Librarier\core\system.h
+.\objects\yc_uart.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
+.\objects\yc_uart.o: ..\..\..\..\..\Librarier\sdk\yc_uart.h
+.\objects\yc_uart.o: ..\..\..\..\..\Librarier\core\rom_api.h
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121.BAT
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121.BAT	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121.BAT	(working copy)
@@ -0,0 +1,23 @@
+SET PATH=C:\Keil_v5\ARM\ARMCC\Bin;C:\Program Files (x86)\GnuWin32\bin;C:\Program Files (x86)\RBTools\bin;C:\Perl\bin\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\IVI Foundation\VISA\WinNT\Bin\;C:\Program Files\IVI Foundation\VISA\Win64\Bin\;C:\Users\yichip\AppData\Local\Microsoft\WindowsApps;C:\Users\yichip\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files (x86)\GnuWin32\bin;C:\Users\yichip\AppData\Local\Microsoft\WindowsApps;C:\Users\yichip\AppData\Local\Programs\Microsoft VS Code\bin;
+SET CPU_TYPE=ARMCM0
+SET CPU_VENDOR=ARM
+SET UV2_TARGET=YC3121
+SET CPU_CLOCK=0x00B71B00
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\misc.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\system.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\bt_code.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\main.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\yc_gpio.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\yc_uart.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\yc_bt.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\yc_systick.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\yc_ipc.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\yc_otp.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\yc_timer.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\yc_lpm.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmCC" --Via ".\objects\yc_sysctrl.__i"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmAsm" --Via ".\objects\flash_start._ia"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmAsm" --Via ".\objects\startup._ia"
+"C:\Keil_v5\ARM\ARMCC\Bin\ArmLink" --Via ".\Objects\YC3121_Keil.lnp"
+"C:\Keil_v5\ARM\ARMCC\Bin\fromelf.exe" ".\Objects\YC3121_Keil.axf" --i32combined --output ".\Objects\YC3121_Keil.hex"
+fromelf.exe --text -a -c --output=YC3121_Keil_asm.txt ".\Objects\YC3121_Keil.axf"
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvguix.caijingwei
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvguix.caijingwei	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvguix.caijingwei	(working copy)
@@ -0,0 +1,1860 @@
+<?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>-6.1</SchemaVersion>
+
+  <Header>### uVision Project, (C) Keil Software</Header>
+
+  <PrjGuiSettings>
+    <LastAddFilePath></LastAddFilePath>
+  </PrjGuiSettings>
+
+  <ViewPool/>
+
+  <SECTreeCtrl>
+    <View>
+      <WinId>38003</WinId>
+      <ViewName>Registers</ViewName>
+      <TableColWidths>140 90</TableColWidths>
+    </View>
+    <View>
+      <WinId>346</WinId>
+      <ViewName>Code Coverage</ViewName>
+      <TableColWidths>1010 160</TableColWidths>
+    </View>
+    <View>
+      <WinId>204</WinId>
+      <ViewName>Performance Analyzer</ViewName>
+      <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>80 80 80</TableColWidths>
+    </View>
+    <View>
+      <WinId>1936</WinId>
+      <ViewName>Watch 1</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 133 133</TableColWidths>
+    </View>
+    <View>
+      <WinId>1937</WinId>
+      <ViewName>Watch 2</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 133 133</TableColWidths>
+    </View>
+    <View>
+      <WinId>1935</WinId>
+      <ViewName>Call Stack + Locals</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 133 133</TableColWidths>
+    </View>
+    <View>
+      <WinId>2506</WinId>
+      <ViewName>Trace Data</ViewName>
+      <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>
+      <ShowSignalInfo>1</ShowSignalInfo>
+      <ShowCycles>0</ShowCycles>
+      <LeftSideBarSize>0</LeftSideBarSize>
+      <TimeBaseIndex>-1</TimeBaseIndex>
+    </LogicAnalizer>
+  </WindowSettings>
+
+  <WinLayoutEx>
+    <sActiveDebugView></sActiveDebugView>
+    <WindowPosition>
+      <length>44</length>
+      <flags>0</flags>
+      <showCmd>1</showCmd>
+      <MinPosition>
+        <xPos>-1</xPos>
+        <yPos>-1</yPos>
+      </MinPosition>
+      <MaxPosition>
+        <xPos>-1</xPos>
+        <yPos>-1</yPos>
+      </MaxPosition>
+      <NormalPosition>
+        <Top>38</Top>
+        <Left>101</Left>
+        <Right>1608</Right>
+        <Bottom>948</Bottom>
+      </NormalPosition>
+    </WindowPosition>
+    <MDIClientArea>
+      <RegID>0</RegID>
+      <MDITabState>
+        <Len>60</Len>
+        <Data>010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000000000000</Data>
+      </MDITabState>
+    </MDIClientArea>
+    <ViewEx>
+      <ViewType>0</ViewType>
+      <ViewName>Build</ViewName>
+      <Window>
+        <RegID>-1</RegID>
+        <PaneID>-1</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>F40000004F00000090050000DF000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>6101000094000000FD05000024010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1005</RegID>
+        <PaneID>1005</PaneID>
+        <IsVisible>1</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>0300000066000000ED0000005E020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>109</RegID>
+        <PaneID>109</PaneID>
+        <IsVisible>1</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>0300000066000000ED0000005E020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F0070000900000000C090000D0020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1465</RegID>
+        <PaneID>1465</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1466</RegID>
+        <PaneID>1466</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1467</RegID>
+        <PaneID>1467</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1468</RegID>
+        <PaneID>1468</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1506</RegID>
+        <PaneID>1506</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>16384</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1913</RegID>
+        <PaneID>1913</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>F7000000660000008D050000C6000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1935</RegID>
+        <PaneID>1935</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1936</RegID>
+        <PaneID>1936</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1937</RegID>
+        <PaneID>1937</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1939</RegID>
+        <PaneID>1939</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1940</RegID>
+        <PaneID>1940</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1941</RegID>
+        <PaneID>1941</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1942</RegID>
+        <PaneID>1942</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>195</RegID>
+        <PaneID>195</PaneID>
+        <IsVisible>1</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>0300000066000000ED0000005E020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F0070000900000000C090000D0020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>196</RegID>
+        <PaneID>196</PaneID>
+        <IsVisible>1</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>0300000066000000ED0000005E020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F0070000900000000C090000D0020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>197</RegID>
+        <PaneID>197</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>000000008F020000D305000054030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>198</RegID>
+        <PaneID>198</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>000000001902000090050000BD020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>199</RegID>
+        <PaneID>199</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>0300000092020000170300003B030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>203</RegID>
+        <PaneID>203</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>F7000000660000008D050000C6000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>204</RegID>
+        <PaneID>204</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>F7000000660000008D050000C6000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>221</RegID>
+        <PaneID>221</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>00000000000000000000000000000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>2506</RegID>
+        <PaneID>2506</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>2507</RegID>
+        <PaneID>2507</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>343</RegID>
+        <PaneID>343</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>F7000000660000008D050000C6000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>346</RegID>
+        <PaneID>346</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>F7000000660000008D050000C6000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</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>F7000000660000008D050000C6000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35824</RegID>
+        <PaneID>35824</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>F7000000660000008D050000C6000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35885</RegID>
+        <PaneID>35885</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35886</RegID>
+        <PaneID>35886</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35887</RegID>
+        <PaneID>35887</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35888</RegID>
+        <PaneID>35888</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35889</RegID>
+        <PaneID>35889</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35890</RegID>
+        <PaneID>35890</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35891</RegID>
+        <PaneID>35891</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35892</RegID>
+        <PaneID>35892</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35893</RegID>
+        <PaneID>35893</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35894</RegID>
+        <PaneID>35894</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35895</RegID>
+        <PaneID>35895</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35896</RegID>
+        <PaneID>35896</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35897</RegID>
+        <PaneID>35897</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35898</RegID>
+        <PaneID>35898</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35899</RegID>
+        <PaneID>35899</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35900</RegID>
+        <PaneID>35900</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35901</RegID>
+        <PaneID>35901</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35902</RegID>
+        <PaneID>35902</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35903</RegID>
+        <PaneID>35903</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35904</RegID>
+        <PaneID>35904</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35905</RegID>
+        <PaneID>35905</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>38003</RegID>
+        <PaneID>38003</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>0300000066000000ED00000016020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F0070000900000000C090000D0020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>38007</RegID>
+        <PaneID>38007</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>0300000092020000170300003B030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>436</RegID>
+        <PaneID>436</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>0300000092020000170300003B030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F0070000900000000C090000D0020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>437</RegID>
+        <PaneID>437</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>440</RegID>
+        <PaneID>440</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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>0300000092020000170300003B030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F0070000900000000C090000D0020000</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>0300000092020000170300003B030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F0070000900000000C090000D0020000</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>F7000000660000008D050000C6000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000B80A000020010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</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>A3040000660000008D05000010020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59392</RegID>
+        <PaneID>59392</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>966</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>0000000000000000D10300001C000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59393</RegID>
+        <PaneID>0</PaneID>
+        <IsVisible>1</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>0000000054030000D305000067030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59399</RegID>
+        <PaneID>59399</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>476</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>1</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>000000001C000000E701000038000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59400</RegID>
+        <PaneID>59400</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>612</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>2</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>00000000380000006F02000054000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <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>03000000300200008D050000A4020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>F007000090000000E00800005B010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <DockMan>
+        <Len>3312</Len>
+        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000006101000094000000FD05000024010000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000029020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000D05000094000000FD0500006E020000A00400004F000000900500002902000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F400000077020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000006D000000940000005D01000074020000000000004F000000F0000000770200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000015020000900500001902000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000006D0000005E020000FD05000002030000000000001902000090050000BD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000019020000CC020000BD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000077020000D30500007B0200000100000001000010040000000100000094FDFFFF8E000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000006D000000780200008703000051030000000000007B020000D3050000540300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
+      </DockMan>
+      <ToolBar>
+        <RegID>59392</RegID>
+        <Name>File</Name>
+        <Buttons>
+          <Len>2775</Len>
+          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000400020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000004000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000400000000000000000000000000000000000001000000010000009600000002002050000000000E4950435F52656164427444617461960000000000000010000E4950435F52656164427444617461094950435F4445425547067072696E7466084D795072696E74660768616E646C65720C737472756374206E6574696611656E65745F73797374656D5F73657475700572657365740A537461636B5F53697A6505616C69676E0669727168616E0B62745F6C706D5F6D6F64650A5F5F4E4F494E4C494E45115370695F573235585F53656345726173650470636E740361657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000004001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
+        </Buttons>
+        <OriginalItems>
+          <Len>1423</Len>
+          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+        </OriginalItems>
+        <OrigResetItems>
+          <Len>1423</Len>
+          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data>
+        </OrigResetItems>
+      </ToolBar>
+      <ToolBar>
+        <RegID>59399</RegID>
+        <Name>Build</Name>
+        <Buttons>
+          <Len>972</Len>
+          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000065943333132319600000000000000010006594333313231000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
+        </Buttons>
+        <OriginalItems>
+          <Len>583</Len>
+          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+        </OriginalItems>
+        <OrigResetItems>
+          <Len>583</Len>
+          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data>
+        </OrigResetItems>
+      </ToolBar>
+      <ToolBar>
+        <RegID>59400</RegID>
+        <Name>Debug</Name>
+        <Buttons>
+          <Len>2373</Len>
+          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
+        </Buttons>
+        <OriginalItems>
+          <Len>898</Len>
+          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+        </OriginalItems>
+        <OrigResetItems>
+          <Len>898</Len>
+          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data>
+        </OrigResetItems>
+      </ToolBar>
+      <ControlBarsSummary>
+        <Bars>0</Bars>
+        <ScreenCX>1920</ScreenCX>
+        <ScreenCY>1080</ScreenCY>
+      </ControlBarsSummary>
+    </ViewEx>
+  </WinLayoutEx>
+
+</ProjectGui>
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvguix.yanhengbo
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvguix.yanhengbo	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvguix.yanhengbo	(working copy)
@@ -0,0 +1,1950 @@
+<?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>-6.1</SchemaVersion>
+
+  <Header>### uVision Project, (C) Keil Software</Header>
+
+  <PrjGuiSettings>
+    <LastAddFilePath></LastAddFilePath>
+  </PrjGuiSettings>
+
+  <ViewPool/>
+
+  <SECTreeCtrl>
+    <View>
+      <WinId>38003</WinId>
+      <ViewName>Registers</ViewName>
+      <TableColWidths>140 118</TableColWidths>
+    </View>
+    <View>
+      <WinId>346</WinId>
+      <ViewName>Code Coverage</ViewName>
+      <TableColWidths>1058 160</TableColWidths>
+    </View>
+    <View>
+      <WinId>204</WinId>
+      <ViewName>Performance Analyzer</ViewName>
+      <TableColWidths>1218</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>64 64 64</TableColWidths>
+    </View>
+    <View>
+      <WinId>1936</WinId>
+      <ViewName>Watch 1</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 133 133</TableColWidths>
+    </View>
+    <View>
+      <WinId>1937</WinId>
+      <ViewName>Watch 2</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 133 133</TableColWidths>
+    </View>
+    <View>
+      <WinId>1935</WinId>
+      <ViewName>Call Stack + Locals</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 133 133</TableColWidths>
+    </View>
+    <View>
+      <WinId>2506</WinId>
+      <ViewName>Trace Data</ViewName>
+      <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>
+      <ShowSignalInfo>1</ShowSignalInfo>
+      <ShowCycles>0</ShowCycles>
+      <LeftSideBarSize>0</LeftSideBarSize>
+      <TimeBaseIndex>-1</TimeBaseIndex>
+    </LogicAnalizer>
+  </WindowSettings>
+
+  <WinLayoutEx>
+    <sActiveDebugView></sActiveDebugView>
+    <WindowPosition>
+      <length>44</length>
+      <flags>2</flags>
+      <showCmd>3</showCmd>
+      <MinPosition>
+        <xPos>-32000</xPos>
+        <yPos>-32000</yPos>
+      </MinPosition>
+      <MaxPosition>
+        <xPos>-1</xPos>
+        <yPos>-1</yPos>
+      </MaxPosition>
+      <NormalPosition>
+        <Top>103</Top>
+        <Left>-153</Left>
+        <Right>1173</Right>
+        <Bottom>862</Bottom>
+      </NormalPosition>
+    </WindowPosition>
+    <MDIClientArea>
+      <RegID>0</RegID>
+      <MDITabState>
+        <Len>946</Len>
+        <Data>0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000900000001000000010000004C453A5C323032305F735C73656375726974795F33315C707572756974655F73706565645C4D6F64756C6544656D6F5C426C7565546F6F74685C42545F424C45325C757365725C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF39453A5C323032305F735C73656375726974795F33315C707572756974655F73706565645C4C69627261726965725C73646B5C79635F62742E63000000000779635F62742E6300000000FFDC7800FFFFFFFF3A453A5C323032305F735C73656375726974795F33315C707572756974655F73706565645C4C69627261726965725C73646B5C79635F6970632E63000000000879635F6970632E6300000000BECEA100FFFFFFFF3A453A5C323032305F735C73656375726974795F33315C707572756974655F73706565645C4C69627261726965725C73646B5C79635F6970632E68000000000879635F6970632E6800000000F0A0A100FFFFFFFF3B453A5C323032305F735C73656375726974795F33315C707572756974655F73706565645C4C69627261726965725C636F72655C73797374656D2E63000000000873797374656D2E6300000000BCA8E100FFFFFFFF39453A5C323032305F735C73656375726974795F33315C707572756974655F73706565645C4C69627261726965725C73646B5C79635F62742E68000000000779635F62742E68000000009CC1B600FFFFFFFF3B453A5C323032305F735C73656375726974795F33315C707572756974655F73706565645C4C69627261726965725C636F72655C7963333132312E6800000000087963333132312E6800000000F7B88600FFFFFFFF3B453A5C323032305F735C73656375726974795F33315C707572756974655F73706565645C4C69627261726965725C73646B5C79635F756172742E63000000000979635F756172742E6300000000D9ADC200FFFFFFFF3B453A5C323032305F735C73656375726974795F33315C707572756974655F73706565645C4C69627261726965725C73646B5C79635F6770696F2E63000000000979635F6770696F2E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000100100006600000000060000FF010000</Data>
+      </MDITabState>
+    </MDIClientArea>
+    <ViewEx>
+      <ViewType>0</ViewType>
+      <ViewName>Build</ViewName>
+      <Window>
+        <RegID>-1</RegID>
+        <PaneID>-1</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>C40000004F00000090050000DE000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>33000000D5000000FF04000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1005</RegID>
+        <PaneID>1005</PaneID>
+        <IsVisible>1</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>030000006600000009010000CF010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>109</RegID>
+        <PaneID>109</PaneID>
+        <IsVisible>1</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>030000006600000009010000CF010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D50000005A09000012030000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1465</RegID>
+        <PaneID>1465</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1466</RegID>
+        <PaneID>1466</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1467</RegID>
+        <PaneID>1467</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1468</RegID>
+        <PaneID>1468</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1506</RegID>
+        <PaneID>1506</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>16384</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1913</RegID>
+        <PaneID>1913</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>C7000000660000008D050000C5000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1935</RegID>
+        <PaneID>1935</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D000000160100000D010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1936</RegID>
+        <PaneID>1936</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D000000160100000D010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1937</RegID>
+        <PaneID>1937</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1939</RegID>
+        <PaneID>1939</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000008E020000DB000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1940</RegID>
+        <PaneID>1940</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1941</RegID>
+        <PaneID>1941</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1942</RegID>
+        <PaneID>1942</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>195</RegID>
+        <PaneID>195</PaneID>
+        <IsVisible>1</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>030000006600000009010000CF010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D50000005A09000012030000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>196</RegID>
+        <PaneID>196</PaneID>
+        <IsVisible>1</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>030000006600000009010000CF010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D50000005A09000012030000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>197</RegID>
+        <PaneID>197</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>0300000003020000FD050000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000008E020000DB000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>198</RegID>
+        <PaneID>198</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>000000001602000090050000B9020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>199</RegID>
+        <PaneID>199</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>0300000003020000FD050000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>560000006D0000008E020000DB000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>203</RegID>
+        <PaneID>203</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>C7000000660000008D050000C5000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>204</RegID>
+        <PaneID>204</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>C7000000660000008D050000C5000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>221</RegID>
+        <PaneID>221</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>00000000000000000000000000000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>2506</RegID>
+        <PaneID>2506</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>2507</RegID>
+        <PaneID>2507</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>343</RegID>
+        <PaneID>343</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>C7000000660000008D050000C5000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>346</RegID>
+        <PaneID>346</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>C7000000660000008D050000C5000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</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>C7000000660000008D050000C5000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35824</RegID>
+        <PaneID>35824</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>C7000000660000008D050000C5000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35885</RegID>
+        <PaneID>35885</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35886</RegID>
+        <PaneID>35886</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35887</RegID>
+        <PaneID>35887</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35888</RegID>
+        <PaneID>35888</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35889</RegID>
+        <PaneID>35889</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35890</RegID>
+        <PaneID>35890</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35891</RegID>
+        <PaneID>35891</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35892</RegID>
+        <PaneID>35892</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35893</RegID>
+        <PaneID>35893</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35894</RegID>
+        <PaneID>35894</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35895</RegID>
+        <PaneID>35895</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35896</RegID>
+        <PaneID>35896</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35897</RegID>
+        <PaneID>35897</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35898</RegID>
+        <PaneID>35898</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35899</RegID>
+        <PaneID>35899</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35900</RegID>
+        <PaneID>35900</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35901</RegID>
+        <PaneID>35901</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35902</RegID>
+        <PaneID>35902</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35903</RegID>
+        <PaneID>35903</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35904</RegID>
+        <PaneID>35904</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35905</RegID>
+        <PaneID>35905</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>38003</RegID>
+        <PaneID>38003</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>030000006600000009010000A7020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D50000005A09000012030000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>38007</RegID>
+        <PaneID>38007</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>0300000003020000FD050000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>436</RegID>
+        <PaneID>436</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>03000000030200007D070000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D50000005A09000012030000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>437</RegID>
+        <PaneID>437</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>440</RegID>
+        <PaneID>440</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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>03000000030200007D070000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D50000005A09000012030000</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>03000000030200007D070000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D50000005A09000012030000</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>C7000000660000008D050000C5000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000060B000064010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</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>D3040000660000008D0500000D020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59392</RegID>
+        <PaneID>59392</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>966</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>0000000000000000D10300001C000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59393</RegID>
+        <PaneID>0</PaneID>
+        <IsVisible>1</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>000000000E0300000006000021030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59399</RegID>
+        <PaneID>59399</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>476</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>1</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>000000001C000000E701000038000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59400</RegID>
+        <PaneID>59400</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>612</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>2</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>00000000380000006F02000054000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <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>030000002D0200008D050000A0020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>3E080000D5000000FE08000075010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <DockMan>
+        <Len>3312</Len>
+        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000DE00000090050000E2000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E65002000000000000033000000D5000000FF04000064010000C40000004F00000090050000DE0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFCC0400004F000000D004000026020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000003F040000D5000000FF040000AC020000D00400004F000000900500002602000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF0C0100004F00000010010000E80100000100000002000010040000000100000042FFFFFF37050000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000006FFFFFFFD50000007B00000046030000000000004F0000000C010000E80100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000012020000900500001602000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000006FFFFFFF9C020000FF0400003F030000000000001602000090050000B902000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000016020000CC020000B902000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000E801000000060000EC01000001000000010000100400000001000000BFFDFFFF4B010000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000006FFFFFFF4A030000EF0600006C04000000000000EC010000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
+      </DockMan>
+      <ToolBar>
+        <RegID>59392</RegID>
+        <Name>File</Name>
+        <Buttons>
+          <Len>2701</Len>
+          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000D4950435F686176655F64617461960000000000000008000B4750494F5F434F4E4649470D4950435F686176655F64617461124950435F526561644950435F4F70636F64650E4950435F526561644274446174611D4950435F526561644274446174615F6D656D6F7279696E6D30636F72650D4950435F476574427444617461074C4F475F4F55540642545F4C4F470000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
+        </Buttons>
+        <OriginalItems>
+          <Len>1423</Len>
+          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+        </OriginalItems>
+        <OrigResetItems>
+          <Len>1423</Len>
+          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data>
+        </OrigResetItems>
+      </ToolBar>
+      <ToolBar>
+        <RegID>59399</RegID>
+        <Name>Build</Name>
+        <Buttons>
+          <Len>972</Len>
+          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000065943333132319600000000000000010006594333313231000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
+        </Buttons>
+        <OriginalItems>
+          <Len>583</Len>
+          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+        </OriginalItems>
+        <OrigResetItems>
+          <Len>583</Len>
+          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data>
+        </OrigResetItems>
+      </ToolBar>
+      <ToolBar>
+        <RegID>59400</RegID>
+        <Name>Debug</Name>
+        <Buttons>
+          <Len>2373</Len>
+          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
+        </Buttons>
+        <OriginalItems>
+          <Len>898</Len>
+          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+        </OriginalItems>
+        <OrigResetItems>
+          <Len>898</Len>
+          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data>
+        </OrigResetItems>
+      </ToolBar>
+      <ControlBarsSummary>
+        <Bars>0</Bars>
+        <ScreenCX>1536</ScreenCX>
+        <ScreenCY>864</ScreenCY>
+      </ControlBarsSummary>
+    </ViewEx>
+  </WinLayoutEx>
+
+  <MDIGroups>
+    <Orientation>1</Orientation>
+    <ActiveMDIGroup>0</ActiveMDIGroup>
+    <MDIGroup>
+      <Size>100</Size>
+      <ActiveTab>1</ActiveTab>
+      <Doc>
+        <Name>..\..\user\main.c</Name>
+        <ColumnNumber>22</ColumnNumber>
+        <TopLine>119</TopLine>
+        <CurrentLine>132</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\sdk\yc_bt.c</Name>
+        <ColumnNumber>0</ColumnNumber>
+        <TopLine>970</TopLine>
+        <CurrentLine>975</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\sdk\yc_ipc.c</Name>
+        <ColumnNumber>0</ColumnNumber>
+        <TopLine>199</TopLine>
+        <CurrentLine>200</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\sdk\yc_ipc.h</Name>
+        <ColumnNumber>21</ColumnNumber>
+        <TopLine>94</TopLine>
+        <CurrentLine>108</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\core\system.c</Name>
+        <ColumnNumber>0</ColumnNumber>
+        <TopLine>43</TopLine>
+        <CurrentLine>51</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\sdk\yc_bt.h</Name>
+        <ColumnNumber>0</ColumnNumber>
+        <TopLine>542</TopLine>
+        <CurrentLine>557</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\core\yc3121.h</Name>
+        <ColumnNumber>0</ColumnNumber>
+        <TopLine>163</TopLine>
+        <CurrentLine>178</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\sdk\yc_uart.c</Name>
+        <ColumnNumber>49</ColumnNumber>
+        <TopLine>343</TopLine>
+        <CurrentLine>358</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\sdk\yc_gpio.c</Name>
+        <ColumnNumber>23</ColumnNumber>
+        <TopLine>7</TopLine>
+        <CurrentLine>22</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+    </MDIGroup>
+  </MDIGroups>
+
+</ProjectGui>
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvguix.yichip
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvguix.yichip	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvguix.yichip	(working copy)
@@ -0,0 +1,1905 @@
+<?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>-6.1</SchemaVersion>
+
+  <Header>### uVision Project, (C) Keil Software</Header>
+
+  <PrjGuiSettings>
+    <LastAddFilePath></LastAddFilePath>
+  </PrjGuiSettings>
+
+  <ViewPool/>
+
+  <SECTreeCtrl>
+    <View>
+      <WinId>38003</WinId>
+      <ViewName>Registers</ViewName>
+      <TableColWidths>140 42</TableColWidths>
+    </View>
+    <View>
+      <WinId>346</WinId>
+      <ViewName>Code Coverage</ViewName>
+      <TableColWidths>770 160</TableColWidths>
+    </View>
+    <View>
+      <WinId>204</WinId>
+      <ViewName>Performance Analyzer</ViewName>
+      <TableColWidths>930</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>64 64 64</TableColWidths>
+    </View>
+    <View>
+      <WinId>1936</WinId>
+      <ViewName>Watch 1</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 133 133</TableColWidths>
+    </View>
+    <View>
+      <WinId>1937</WinId>
+      <ViewName>Watch 2</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 133 133</TableColWidths>
+    </View>
+    <View>
+      <WinId>1935</WinId>
+      <ViewName>Call Stack + Locals</ViewName>
+      <UserString></UserString>
+      <TableColWidths>200 133 133</TableColWidths>
+    </View>
+    <View>
+      <WinId>2506</WinId>
+      <ViewName>Trace Data</ViewName>
+      <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>
+      <ShowSignalInfo>1</ShowSignalInfo>
+      <ShowCycles>0</ShowCycles>
+      <LeftSideBarSize>0</LeftSideBarSize>
+      <TimeBaseIndex>-1</TimeBaseIndex>
+    </LogicAnalizer>
+  </WindowSettings>
+
+  <WinLayoutEx>
+    <sActiveDebugView></sActiveDebugView>
+    <WindowPosition>
+      <length>44</length>
+      <flags>2</flags>
+      <showCmd>2</showCmd>
+      <MinPosition>
+        <xPos>-32000</xPos>
+        <yPos>-32000</yPos>
+      </MinPosition>
+      <MaxPosition>
+        <xPos>-1</xPos>
+        <yPos>-1</yPos>
+      </MaxPosition>
+      <NormalPosition>
+        <Top>4</Top>
+        <Left>-6</Left>
+        <Right>2400</Right>
+        <Bottom>1080</Bottom>
+      </NormalPosition>
+    </WindowPosition>
+    <MDIClientArea>
+      <RegID>0</RegID>
+      <MDITabState>
+        <Len>570</Len>
+        <Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000004000000000000000100000054443A5C6465736B746F705CD0C2BDA8CEC4BCFEBCD0202832295C42545F646F75626C65627974655C73646B5C4D6F64756C6544656D6F5C426C7565546F6F74685C42545F424C45325C757365725C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF49443A5C6465736B746F705CD0C2BDA8CEC4BCFEBCD0202832295C42545F646F75626C65627974655C73646B5C4C69627261726965725C636F72655C626F6172645F636F6E6669672E68000000000E626F6172645F636F6E6669672E6800000000FFDC7800FFFFFFFF41443A5C6465736B746F705CD0C2BDA8CEC4BCFEBCD0202832295C42545F646F75626C65627974655C73646B5C4C69627261726965725C73646B5C79635F62742E63000000000779635F62742E6300000000BECEA100FFFFFFFF44443A5C6465736B746F705CD0C2BDA8CEC4BCFEBCD0202832295C42545F646F75626C65627974655C73646B5C4C69627261726965725C636F72655C62745F636F64652E63000000000962745F636F64652E6300000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000C483FFFF4F83FFFF0089FFFF3F85FFFF</Data>
+      </MDITabState>
+    </MDIClientArea>
+    <ViewEx>
+      <ViewType>0</ViewType>
+      <ViewName>Build</ViewName>
+      <Window>
+        <RegID>-1</RegID>
+        <PaneID>-1</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>C40000004F00000070040000BD000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>C40000006600000070040000D4000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1005</RegID>
+        <PaneID>1005</PaneID>
+        <IsVisible>1</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>0300000066000000BD00000026020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>109</RegID>
+        <PaneID>109</PaneID>
+        <IsVisible>1</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>0300000066000000BD00000026020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000005301000043020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1465</RegID>
+        <PaneID>1465</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1466</RegID>
+        <PaneID>1466</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1467</RegID>
+        <PaneID>1467</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1468</RegID>
+        <PaneID>1468</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1506</RegID>
+        <PaneID>1506</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>16384</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1913</RegID>
+        <PaneID>1913</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>C7000000660000006D040000A4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1935</RegID>
+        <PaneID>1935</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1936</RegID>
+        <PaneID>1936</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1937</RegID>
+        <PaneID>1937</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1939</RegID>
+        <PaneID>1939</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1940</RegID>
+        <PaneID>1940</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1941</RegID>
+        <PaneID>1941</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>1942</RegID>
+        <PaneID>1942</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>195</RegID>
+        <PaneID>195</PaneID>
+        <IsVisible>1</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>0300000066000000BD00000026020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000005301000043020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>196</RegID>
+        <PaneID>196</PaneID>
+        <IsVisible>1</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>0300000066000000BD00000026020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000005301000043020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>197</RegID>
+        <PaneID>197</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>030000005A020000FD050000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>198</RegID>
+        <PaneID>198</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>32768</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>00000000950100007004000017020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>199</RegID>
+        <PaneID>199</PaneID>
+        <IsVisible>1</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>030000005A020000FD050000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>203</RegID>
+        <PaneID>203</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>32767</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>C7000000660000006D040000A4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>204</RegID>
+        <PaneID>204</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>C7000000660000006D040000A4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>221</RegID>
+        <PaneID>221</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>00000000000000000000000000000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>2506</RegID>
+        <PaneID>2506</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>2507</RegID>
+        <PaneID>2507</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>343</RegID>
+        <PaneID>343</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>C7000000660000006D040000A4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>346</RegID>
+        <PaneID>346</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>C7000000660000006D040000A4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</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>C7000000660000006D040000A4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35824</RegID>
+        <PaneID>35824</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>C7000000660000006D040000A4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35885</RegID>
+        <PaneID>35885</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35886</RegID>
+        <PaneID>35886</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35887</RegID>
+        <PaneID>35887</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35888</RegID>
+        <PaneID>35888</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35889</RegID>
+        <PaneID>35889</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35890</RegID>
+        <PaneID>35890</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35891</RegID>
+        <PaneID>35891</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35892</RegID>
+        <PaneID>35892</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35893</RegID>
+        <PaneID>35893</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35894</RegID>
+        <PaneID>35894</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35895</RegID>
+        <PaneID>35895</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35896</RegID>
+        <PaneID>35896</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35897</RegID>
+        <PaneID>35897</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35898</RegID>
+        <PaneID>35898</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35899</RegID>
+        <PaneID>35899</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35900</RegID>
+        <PaneID>35900</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35901</RegID>
+        <PaneID>35901</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35902</RegID>
+        <PaneID>35902</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35903</RegID>
+        <PaneID>35903</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35904</RegID>
+        <PaneID>35904</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>35905</RegID>
+        <PaneID>35905</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>38003</RegID>
+        <PaneID>38003</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>0300000066000000BD00000026020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000005301000043020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>38007</RegID>
+        <PaneID>38007</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>030000005A020000FD050000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>436</RegID>
+        <PaneID>436</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>030000005A020000FD050000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000005301000043020000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>437</RegID>
+        <PaneID>437</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>440</RegID>
+        <PaneID>440</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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>030000005A020000FD050000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000005301000043020000</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>030000005A020000FD050000F5020000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000005301000043020000</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>C7000000660000006D040000A4000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>7000000087000000A8020000F5000000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</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>B3030000660000006D0400008C010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59392</RegID>
+        <PaneID>59392</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>966</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>0</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>0000000000000000D10300001C000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59393</RegID>
+        <PaneID>0</PaneID>
+        <IsVisible>1</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>000000000E0300000006000021030000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59399</RegID>
+        <PaneID>59399</PaneID>
+        <IsVisible>1</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>476</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>1</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>000000001C000000E701000038000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>0A0000000A0000006E0000006E000000</Data>
+        </RectRecentFloat>
+      </Window>
+      <Window>
+        <RegID>59400</RegID>
+        <PaneID>59400</PaneID>
+        <IsVisible>0</IsVisible>
+        <IsFloating>0</IsFloating>
+        <IsTabbed>0</IsTabbed>
+        <IsActivated>0</IsActivated>
+        <MRUWidth>612</MRUWidth>
+        <PinState>0</PinState>
+        <RecentFrameAlignment>8192</RecentFrameAlignment>
+        <RecentRowIndex>2</RecentRowIndex>
+        <RectRecentDocked>
+          <Len>16</Len>
+          <Data>00000000380000006F02000054000000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <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>03000000AC0100006D040000FE010000</Data>
+        </RectRecentDocked>
+        <RectRecentFloat>
+          <Len>16</Len>
+          <Data>70000000870000003001000027010000</Data>
+        </RectRecentFloat>
+      </Window>
+      <DockMan>
+        <Len>3312</Len>
+        <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFC4000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000C40000006600000070040000D4000000C40000004F00000070040000BD0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFAC0300004F000000B0030000A5010000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B00300006600000070040000BC010000B00300004F00000070040000A501000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFC00000004F000000C40000003F020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000C000000056020000000000004F000000C00000003F0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000AC010000700400002E0200000000000095010000700400001702000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000003F020000000600004302000001000000010000100400000001000000B8FDFFFF6C000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000005A02000000060000250300000000000043020000000600000E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
+      </DockMan>
+      <ToolBar>
+        <RegID>59392</RegID>
+        <Name>File</Name>
+        <Buttons>
+          <Len>2973</Len>
+          <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001F626C655F43686172616374657269737469635F757569645F6C7370735F7478960000000000000014001F626C655F43686172616374657269737469635F757569645F6C7370735F74780E626C655F74785F68616E646C6572114249545F42545F444953434F4E4E4543540A6372656469745F6E756D106576744254535050436F6E65637465640E62745F68616E646C65722E6D61630A62745F68616E646C6572174E5649435F456E61626C654952512842545F4952516E29184E5649435F44697361626C654952512842545F4952516E2914656E61626C655F696E747228494E54525F42542915656E61626C655F696E747228494E54525F4254293B1664697361626C655F696E747228494E54525F4254293B0B656E61626C655F696E74720642545F4C4F470E42545F50617273654254446174610D42545F70617273655F646174610F5350505F464C4F57434F4E54524F4C056274203036063131353230300D627420303620636D64206572720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data>
+        </Buttons>
+        <OriginalItems>
+          <Len>1423</Len>
+          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+        </OriginalItems>
+        <OrigResetItems>
+          <Len>1423</Len>
+          <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data>
+        </OrigResetItems>
+      </ToolBar>
+      <ToolBar>
+        <RegID>59399</RegID>
+        <Name>Build</Name>
+        <Buttons>
+          <Len>972</Len>
+          <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000065943333132319600000000000000010006594333313231000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
+        </Buttons>
+        <OriginalItems>
+          <Len>583</Len>
+          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+        </OriginalItems>
+        <OrigResetItems>
+          <Len>583</Len>
+          <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data>
+        </OrigResetItems>
+      </ToolBar>
+      <ToolBar>
+        <RegID>59400</RegID>
+        <Name>Debug</Name>
+        <Buttons>
+          <Len>2373</Len>
+          <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data>
+        </Buttons>
+        <OriginalItems>
+          <Len>898</Len>
+          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+        </OriginalItems>
+        <OrigResetItems>
+          <Len>898</Len>
+          <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data>
+        </OrigResetItems>
+      </ToolBar>
+      <ControlBarsSummary>
+        <Bars>0</Bars>
+        <ScreenCX>1536</ScreenCX>
+        <ScreenCY>864</ScreenCY>
+      </ControlBarsSummary>
+    </ViewEx>
+  </WinLayoutEx>
+
+  <MDIGroups>
+    <Orientation>1</Orientation>
+    <ActiveMDIGroup>0</ActiveMDIGroup>
+    <MDIGroup>
+      <Size>100</Size>
+      <ActiveTab>0</ActiveTab>
+      <Doc>
+        <Name>..\..\user\main.c</Name>
+        <ColumnNumber>8</ColumnNumber>
+        <TopLine>412</TopLine>
+        <CurrentLine>413</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\core\board_config.h</Name>
+        <ColumnNumber>21</ColumnNumber>
+        <TopLine>121</TopLine>
+        <CurrentLine>122</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\sdk\yc_bt.c</Name>
+        <ColumnNumber>13</ColumnNumber>
+        <TopLine>1353</TopLine>
+        <CurrentLine>1361</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+      <Doc>
+        <Name>..\..\..\..\..\Librarier\core\bt_code.c</Name>
+        <ColumnNumber>12</ColumnNumber>
+        <TopLine>1</TopLine>
+        <CurrentLine>16</CurrentLine>
+        <Folding>1</Folding>
+        <ContractedFolders></ContractedFolders>
+        <PaneID>0</PaneID>
+      </Doc>
+    </MDIGroup>
+  </MDIGroups>
+
+</ProjectGui>
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvoptx
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvoptx	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvoptx	(working copy)
@@ -0,0 +1,426 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
+
+  <SchemaVersion>1.0</SchemaVersion>
+
+  <Header>### uVision Project, (C) Keil Software</Header>
+
+  <Extensions>
+    <cExt>*.c</cExt>
+    <aExt>*.s*; *.src; *.a*</aExt>
+    <oExt>*.obj; *.o</oExt>
+    <lExt>*.lib</lExt>
+    <tExt>*.txt; *.h; *.inc</tExt>
+    <pExt>*.plm</pExt>
+    <CppX>*.cpp</CppX>
+    <nMigrate>0</nMigrate>
+  </Extensions>
+
+  <DaveTm>
+    <dwLowDateTime>0</dwLowDateTime>
+    <dwHighDateTime>0</dwHighDateTime>
+  </DaveTm>
+
+  <Target>
+    <TargetName>YC3121</TargetName>
+    <ToolsetNumber>0x4</ToolsetNumber>
+    <ToolsetName>ARM-ADS</ToolsetName>
+    <TargetOption>
+      <CLKADS>12000000</CLKADS>
+      <OPTTT>
+        <gFlags>1</gFlags>
+        <BeepAtEnd>1</BeepAtEnd>
+        <RunSim>0</RunSim>
+        <RunTarget>1</RunTarget>
+        <RunAbUc>0</RunAbUc>
+      </OPTTT>
+      <OPTHX>
+        <HexSelection>1</HexSelection>
+        <FlashByte>65535</FlashByte>
+        <HexRangeLowAddress>0</HexRangeLowAddress>
+        <HexRangeHighAddress>0</HexRangeHighAddress>
+        <HexOffset>0</HexOffset>
+      </OPTHX>
+      <OPTLEX>
+        <PageWidth>79</PageWidth>
+        <PageLength>66</PageLength>
+        <TabStop>8</TabStop>
+        <ListingPath>.\Listings\</ListingPath>
+      </OPTLEX>
+      <ListingPage>
+        <CreateCListing>1</CreateCListing>
+        <CreateAListing>1</CreateAListing>
+        <CreateLListing>1</CreateLListing>
+        <CreateIListing>0</CreateIListing>
+        <AsmCond>1</AsmCond>
+        <AsmSymb>1</AsmSymb>
+        <AsmXref>0</AsmXref>
+        <CCond>1</CCond>
+        <CCode>0</CCode>
+        <CListInc>0</CListInc>
+        <CSymb>0</CSymb>
+        <LinkerCodeListing>0</LinkerCodeListing>
+      </ListingPage>
+      <OPTXL>
+        <LMap>1</LMap>
+        <LComments>1</LComments>
+        <LGenerateSymbols>1</LGenerateSymbols>
+        <LLibSym>1</LLibSym>
+        <LLines>1</LLines>
+        <LLocSym>1</LLocSym>
+        <LPubSym>1</LPubSym>
+        <LXref>0</LXref>
+        <LExpSel>0</LExpSel>
+      </OPTXL>
+      <OPTFL>
+        <tvExp>1</tvExp>
+        <tvExpOptDlg>0</tvExpOptDlg>
+        <IsCurrentTarget>1</IsCurrentTarget>
+      </OPTFL>
+      <CpuCode>7</CpuCode>
+      <DebugOpt>
+        <uSim>0</uSim>
+        <uTrg>1</uTrg>
+        <sLdApp>1</sLdApp>
+        <sGomain>1</sGomain>
+        <sRbreak>1</sRbreak>
+        <sRwatch>1</sRwatch>
+        <sRmem>1</sRmem>
+        <sRfunc>1</sRfunc>
+        <sRbox>1</sRbox>
+        <tLdApp>1</tLdApp>
+        <tGomain>1</tGomain>
+        <tRbreak>1</tRbreak>
+        <tRwatch>1</tRwatch>
+        <tRmem>1</tRmem>
+        <tRfunc>0</tRfunc>
+        <tRbox>1</tRbox>
+        <tRtrace>1</tRtrace>
+        <sRSysVw>1</sRSysVw>
+        <tRSysVw>1</tRSysVw>
+        <sRunDeb>0</sRunDeb>
+        <sLrtime>0</sLrtime>
+        <bEvRecOn>1</bEvRecOn>
+        <bSchkAxf>0</bSchkAxf>
+        <bTchkAxf>0</bTchkAxf>
+        <nTsel>4</nTsel>
+        <sDll></sDll>
+        <sDllPa></sDllPa>
+        <sDlgDll></sDlgDll>
+        <sDlgPa></sDlgPa>
+        <sIfile></sIfile>
+        <tDll></tDll>
+        <tDllPa></tDllPa>
+        <tDlgDll></tDlgDll>
+        <tDlgPa></tDlgPa>
+        <tIfile>..\..\..\..\..\ConfigFiles\MDK\flash.ini</tIfile>
+        <pMon>Segger\JL2CM3.dll</pMon>
+      </DebugOpt>
+      <TargetDriverDllRegistry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGUARM</Key>
+          <Name>d</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>PWSTATINFO</Key>
+          <Name>200,50,700</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>ARMRTXEVENTFLAGS</Key>
+          <Name>-L70 -Z18 -C0 -M0 -T1</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>DLGTARM</Key>
+          <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>ARMDBGFLAGS</Key>
+          <Name></Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>JL2CM3</Key>
+          <Name>-U4294967295 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO31 -FD20000 -FCA000 -FN1 -FF0YC3121 -FS01000200 -FL01000000</Name>
+        </SetRegEntry>
+        <SetRegEntry>
+          <Number>0</Number>
+          <Key>UL2CM3</Key>
+          <Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)</Name>
+        </SetRegEntry>
+      </TargetDriverDllRegistry>
+      <Breakpoint/>
+      <Tracepoint>
+        <THDelay>0</THDelay>
+      </Tracepoint>
+      <DebugFlag>
+        <trace>0</trace>
+        <periodic>0</periodic>
+        <aLwin>1</aLwin>
+        <aCover>0</aCover>
+        <aSer1>0</aSer1>
+        <aSer2>0</aSer2>
+        <aPa>0</aPa>
+        <viewmode>1</viewmode>
+        <vrSel>0</vrSel>
+        <aSym>0</aSym>
+        <aTbox>0</aTbox>
+        <AscS1>0</AscS1>
+        <AscS2>0</AscS2>
+        <AscS3>0</AscS3>
+        <aSer3>0</aSer3>
+        <eProf>0</eProf>
+        <aLa>0</aLa>
+        <aPa1>0</aPa1>
+        <AscS4>0</AscS4>
+        <aSer4>0</aSer4>
+        <StkLoc>0</StkLoc>
+        <TrcWin>0</TrcWin>
+        <newCpu>0</newCpu>
+        <uProt>0</uProt>
+      </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>
+
+  <Group>
+    <GroupName>core</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>1</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\core\misc.c</PathWithFileName>
+      <FilenameWithoutPath>misc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>2</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\core\system.c</PathWithFileName>
+      <FilenameWithoutPath>system.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>1</GroupNumber>
+      <FileNumber>3</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\core\bt_code.c</PathWithFileName>
+      <FilenameWithoutPath>bt_code.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
+  <Group>
+    <GroupName>main</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>2</GroupNumber>
+      <FileNumber>4</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\user\main.c</PathWithFileName>
+      <FilenameWithoutPath>main.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
+  <Group>
+    <GroupName>sdk</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>5</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_gpio.c</PathWithFileName>
+      <FilenameWithoutPath>yc_gpio.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>6</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_uart.c</PathWithFileName>
+      <FilenameWithoutPath>yc_uart.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>7</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_bt.c</PathWithFileName>
+      <FilenameWithoutPath>yc_bt.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>8</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_systick.c</PathWithFileName>
+      <FilenameWithoutPath>yc_systick.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>9</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_ipc.c</PathWithFileName>
+      <FilenameWithoutPath>yc_ipc.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>10</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_otp.c</PathWithFileName>
+      <FilenameWithoutPath>yc_otp.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>11</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_timer.c</PathWithFileName>
+      <FilenameWithoutPath>yc_timer.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>12</FileNumber>
+      <FileType>4</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_qspi.lib</PathWithFileName>
+      <FilenameWithoutPath>yc_qspi.lib</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>13</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_lpm.c</PathWithFileName>
+      <FilenameWithoutPath>yc_lpm.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>3</GroupNumber>
+      <FileNumber>14</FileNumber>
+      <FileType>1</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\sdk\yc_sysctrl.c</PathWithFileName>
+      <FilenameWithoutPath>yc_sysctrl.c</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
+  <Group>
+    <GroupName>startup</GroupName>
+    <tvExp>1</tvExp>
+    <tvExpOptDlg>0</tvExpOptDlg>
+    <cbSel>0</cbSel>
+    <RteFlg>0</RteFlg>
+    <File>
+      <GroupNumber>4</GroupNumber>
+      <FileNumber>15</FileNumber>
+      <FileType>2</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\startup\flash_start.s</PathWithFileName>
+      <FilenameWithoutPath>flash_start.s</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+    <File>
+      <GroupNumber>4</GroupNumber>
+      <FileNumber>16</FileNumber>
+      <FileType>2</FileType>
+      <tvExp>0</tvExp>
+      <tvExpOptDlg>0</tvExpOptDlg>
+      <bDave2>0</bDave2>
+      <PathWithFileName>..\..\..\..\..\Librarier\startup\startup.s</PathWithFileName>
+      <FilenameWithoutPath>startup.s</FilenameWithoutPath>
+      <RteFlg>0</RteFlg>
+      <bShared>0</bShared>
+    </File>
+  </Group>
+
+</ProjectOpt>
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvprojx
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvprojx	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil.uvprojx	(working copy)
@@ -0,0 +1,492 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
+
+  <SchemaVersion>2.1</SchemaVersion>
+
+  <Header>### uVision Project, (C) Keil Software</Header>
+
+  <Targets>
+    <Target>
+      <TargetName>YC3121</TargetName>
+      <ToolsetNumber>0x4</ToolsetNumber>
+      <ToolsetName>ARM-ADS</ToolsetName>
+      <pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
+      <uAC6>0</uAC6>
+      <TargetOption>
+        <TargetCommonOption>
+          <Device>ARMCM0</Device>
+          <Vendor>ARM</Vendor>
+          <PackID>ARM.CMSIS.5.5.1</PackID>
+          <PackURL>http://www.keil.com/pack/</PackURL>
+          <Cpu>IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE</Cpu>
+          <FlashUtilSpec></FlashUtilSpec>
+          <StartupFile></StartupFile>
+          <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)</FlashDriverDll>
+          <DeviceId>0</DeviceId>
+          <RegisterFile>$$Device:ARMCM0$Device\ARM\ARMCM0\Include\ARMCM0.h</RegisterFile>
+          <MemoryEnv></MemoryEnv>
+          <Cmp></Cmp>
+          <Asm></Asm>
+          <Linker></Linker>
+          <OHString></OHString>
+          <InfinionOptionDll></InfinionOptionDll>
+          <SLE66CMisc></SLE66CMisc>
+          <SLE66AMisc></SLE66AMisc>
+          <SLE66LinkerMisc></SLE66LinkerMisc>
+          <SFDFile>$$Device:ARMCM0$Device\ARM\SVD\ARMCM0.svd</SFDFile>
+          <bCustSvd>0</bCustSvd>
+          <UseEnv>0</UseEnv>
+          <BinPath></BinPath>
+          <IncludePath></IncludePath>
+          <LibPath></LibPath>
+          <RegisterFilePath></RegisterFilePath>
+          <DBRegisterFilePath></DBRegisterFilePath>
+          <TargetStatus>
+            <Error>0</Error>
+            <ExitCodeStop>0</ExitCodeStop>
+            <ButtonStop>0</ButtonStop>
+            <NotGenerated>0</NotGenerated>
+            <InvalidFlash>1</InvalidFlash>
+          </TargetStatus>
+          <OutputDirectory>.\Objects\</OutputDirectory>
+          <OutputName>YC3121_Keil</OutputName>
+          <CreateExecutable>1</CreateExecutable>
+          <CreateLib>0</CreateLib>
+          <CreateHexFile>1</CreateHexFile>
+          <DebugInformation>1</DebugInformation>
+          <BrowseInformation>1</BrowseInformation>
+          <ListingPath>.\Listings\</ListingPath>
+          <HexFormatSelection>1</HexFormatSelection>
+          <Merge32K>0</Merge32K>
+          <CreateBatchFile>1</CreateBatchFile>
+          <BeforeCompile>
+            <RunUserProg1>0</RunUserProg1>
+            <RunUserProg2>0</RunUserProg2>
+            <UserProg1Name></UserProg1Name>
+            <UserProg2Name></UserProg2Name>
+            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopU1X>0</nStopU1X>
+            <nStopU2X>0</nStopU2X>
+          </BeforeCompile>
+          <BeforeMake>
+            <RunUserProg1>0</RunUserProg1>
+            <RunUserProg2>0</RunUserProg2>
+            <UserProg1Name></UserProg1Name>
+            <UserProg2Name></UserProg2Name>
+            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopB1X>0</nStopB1X>
+            <nStopB2X>0</nStopB2X>
+          </BeforeMake>
+          <AfterMake>
+            <RunUserProg1>1</RunUserProg1>
+            <RunUserProg2>0</RunUserProg2>
+            <UserProg1Name>fromelf.exe --text -a -c --output=@L_asm.txt "!L"</UserProg1Name>
+            <UserProg2Name></UserProg2Name>
+            <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+            <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+            <nStopA1X>0</nStopA1X>
+            <nStopA2X>0</nStopA2X>
+          </AfterMake>
+          <SelectedForBatchBuild>0</SelectedForBatchBuild>
+          <SVCSIdString></SVCSIdString>
+        </TargetCommonOption>
+        <CommonProperty>
+          <UseCPPCompiler>0</UseCPPCompiler>
+          <RVCTCodeConst>0</RVCTCodeConst>
+          <RVCTZI>0</RVCTZI>
+          <RVCTOtherData>0</RVCTOtherData>
+          <ModuleSelection>0</ModuleSelection>
+          <IncludeInBuild>1</IncludeInBuild>
+          <AlwaysBuild>0</AlwaysBuild>
+          <GenerateAssemblyFile>0</GenerateAssemblyFile>
+          <AssembleAssemblyFile>0</AssembleAssemblyFile>
+          <PublicsOnly>0</PublicsOnly>
+          <StopOnExitCode>3</StopOnExitCode>
+          <CustomArgument></CustomArgument>
+          <IncludeLibraryModules></IncludeLibraryModules>
+          <ComprImg>1</ComprImg>
+        </CommonProperty>
+        <DllOption>
+          <SimDllName>SARMCM3.DLL</SimDllName>
+          <SimDllArguments>  </SimDllArguments>
+          <SimDlgDll>DARMCM1.DLL</SimDlgDll>
+          <SimDlgDllArguments>-pCM0</SimDlgDllArguments>
+          <TargetDllName>SARMCM3.DLL</TargetDllName>
+          <TargetDllArguments> </TargetDllArguments>
+          <TargetDlgDll>TARMCM1.DLL</TargetDlgDll>
+          <TargetDlgDllArguments>-pCM0</TargetDlgDllArguments>
+        </DllOption>
+        <DebugOption>
+          <OPTHX>
+            <HexSelection>1</HexSelection>
+            <HexRangeLowAddress>0</HexRangeLowAddress>
+            <HexRangeHighAddress>0</HexRangeHighAddress>
+            <HexOffset>0</HexOffset>
+            <Oh166RecLen>16</Oh166RecLen>
+          </OPTHX>
+        </DebugOption>
+        <Utilities>
+          <Flash1>
+            <UseTargetDll>1</UseTargetDll>
+            <UseExternalTool>0</UseExternalTool>
+            <RunIndependent>1</RunIndependent>
+            <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
+            <Capability>1</Capability>
+            <DriverSelection>4100</DriverSelection>
+          </Flash1>
+          <bUseTDR>0</bUseTDR>
+          <Flash2>Segger\JL2CM3.dll</Flash2>
+          <Flash3>"" ()</Flash3>
+          <Flash4></Flash4>
+          <pFcarmOut></pFcarmOut>
+          <pFcarmGrp></pFcarmGrp>
+          <pFcArmRoot></pFcArmRoot>
+          <FcArmLst>0</FcArmLst>
+        </Utilities>
+        <TargetArmAds>
+          <ArmAdsMisc>
+            <GenerateListings>0</GenerateListings>
+            <asHll>1</asHll>
+            <asAsm>1</asAsm>
+            <asMacX>1</asMacX>
+            <asSyms>1</asSyms>
+            <asFals>1</asFals>
+            <asDbgD>1</asDbgD>
+            <asForm>1</asForm>
+            <ldLst>0</ldLst>
+            <ldmm>1</ldmm>
+            <ldXref>1</ldXref>
+            <BigEnd>0</BigEnd>
+            <AdsALst>1</AdsALst>
+            <AdsACrf>1</AdsACrf>
+            <AdsANop>0</AdsANop>
+            <AdsANot>0</AdsANot>
+            <AdsLLst>1</AdsLLst>
+            <AdsLmap>1</AdsLmap>
+            <AdsLcgr>1</AdsLcgr>
+            <AdsLsym>1</AdsLsym>
+            <AdsLszi>1</AdsLszi>
+            <AdsLtoi>1</AdsLtoi>
+            <AdsLsun>1</AdsLsun>
+            <AdsLven>1</AdsLven>
+            <AdsLsxf>1</AdsLsxf>
+            <RvctClst>0</RvctClst>
+            <GenPPlst>0</GenPPlst>
+            <AdsCpuType>"Cortex-M0"</AdsCpuType>
+            <RvctDeviceName></RvctDeviceName>
+            <mOS>0</mOS>
+            <uocRom>0</uocRom>
+            <uocRam>0</uocRam>
+            <hadIROM>1</hadIROM>
+            <hadIRAM>1</hadIRAM>
+            <hadXRAM>0</hadXRAM>
+            <uocXRam>0</uocXRam>
+            <RvdsVP>0</RvdsVP>
+            <RvdsMve>0</RvdsMve>
+            <hadIRAM2>0</hadIRAM2>
+            <hadIROM2>0</hadIROM2>
+            <StupSel>8</StupSel>
+            <useUlib>1</useUlib>
+            <EndSel>1</EndSel>
+            <uLtcg>0</uLtcg>
+            <nSecure>0</nSecure>
+            <RoSelD>3</RoSelD>
+            <RwSelD>3</RwSelD>
+            <CodeSel>0</CodeSel>
+            <OptFeed>0</OptFeed>
+            <NoZi1>0</NoZi1>
+            <NoZi2>0</NoZi2>
+            <NoZi3>0</NoZi3>
+            <NoZi4>1</NoZi4>
+            <NoZi5>0</NoZi5>
+            <Ro1Chk>0</Ro1Chk>
+            <Ro2Chk>0</Ro2Chk>
+            <Ro3Chk>0</Ro3Chk>
+            <Ir1Chk>1</Ir1Chk>
+            <Ir2Chk>0</Ir2Chk>
+            <Ra1Chk>0</Ra1Chk>
+            <Ra2Chk>0</Ra2Chk>
+            <Ra3Chk>0</Ra3Chk>
+            <Im1Chk>1</Im1Chk>
+            <Im2Chk>0</Im2Chk>
+            <OnChipMemories>
+              <Ocm1>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm1>
+              <Ocm2>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm2>
+              <Ocm3>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm3>
+              <Ocm4>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm4>
+              <Ocm5>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm5>
+              <Ocm6>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </Ocm6>
+              <IRAM>
+                <Type>0</Type>
+                <StartAddress>0x20000000</StartAddress>
+                <Size>0x20000</Size>
+              </IRAM>
+              <IROM>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x40000</Size>
+              </IROM>
+              <XRAM>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </XRAM>
+              <OCR_RVCT1>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT1>
+              <OCR_RVCT2>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT2>
+              <OCR_RVCT3>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT3>
+              <OCR_RVCT4>
+                <Type>1</Type>
+                <StartAddress>0x1000000</StartAddress>
+                <Size>0x80000</Size>
+              </OCR_RVCT4>
+              <OCR_RVCT5>
+                <Type>1</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT5>
+              <OCR_RVCT6>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT6>
+              <OCR_RVCT7>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT7>
+              <OCR_RVCT8>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT8>
+              <OCR_RVCT9>
+                <Type>0</Type>
+                <StartAddress>0x20000</StartAddress>
+                <Size>0x10000</Size>
+              </OCR_RVCT9>
+              <OCR_RVCT10>
+                <Type>0</Type>
+                <StartAddress>0x0</StartAddress>
+                <Size>0x0</Size>
+              </OCR_RVCT10>
+            </OnChipMemories>
+            <RvctStartVector></RvctStartVector>
+          </ArmAdsMisc>
+          <Cads>
+            <interw>1</interw>
+            <Optim>1</Optim>
+            <oTime>0</oTime>
+            <SplitLS>0</SplitLS>
+            <OneElfS>0</OneElfS>
+            <Strict>0</Strict>
+            <EnumInt>0</EnumInt>
+            <PlainCh>0</PlainCh>
+            <Ropi>0</Ropi>
+            <Rwpi>0</Rwpi>
+            <wLevel>1</wLevel>
+            <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>__USEKEILCOMPILE__</Define>
+              <Undefine></Undefine>
+              <IncludePath>..\..\..\..\..\Librarier\sdk;..\..\..\..\..\Librarier\core;..\..\user</IncludePath>
+            </VariousControls>
+          </Cads>
+          <Aads>
+            <interw>1</interw>
+            <Ropi>0</Ropi>
+            <Rwpi>0</Rwpi>
+            <thumb>0</thumb>
+            <SplitLS>0</SplitLS>
+            <SwStkChk>0</SwStkChk>
+            <NoWarn>0</NoWarn>
+            <uSurpInc>0</uSurpInc>
+            <useXO>0</useXO>
+            <uClangAs>0</uClangAs>
+            <VariousControls>
+              <MiscControls></MiscControls>
+              <Define></Define>
+              <Undefine></Undefine>
+              <IncludePath></IncludePath>
+            </VariousControls>
+          </Aads>
+          <LDads>
+            <umfTarg>0</umfTarg>
+            <Ropi>0</Ropi>
+            <Rwpi>0</Rwpi>
+            <noStLib>0</noStLib>
+            <RepFail>1</RepFail>
+            <useFile>0</useFile>
+            <TextAddressRange>0x00000000</TextAddressRange>
+            <DataAddressRange>0xd0000</DataAddressRange>
+            <pXoBase></pXoBase>
+            <ScatterFile>.\Objects\YC3121_keil.sct</ScatterFile>
+            <IncludeLibs></IncludeLibs>
+            <IncludeLibsPath></IncludeLibsPath>
+            <Misc></Misc>
+            <LinkerInputFile></LinkerInputFile>
+            <DisabledWarnings></DisabledWarnings>
+          </LDads>
+        </TargetArmAds>
+      </TargetOption>
+      <Groups>
+        <Group>
+          <GroupName>core</GroupName>
+          <Files>
+            <File>
+              <FileName>misc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\core\misc.c</FilePath>
+            </File>
+            <File>
+              <FileName>system.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\core\system.c</FilePath>
+            </File>
+            <File>
+              <FileName>bt_code.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\core\bt_code.c</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>main</GroupName>
+          <Files>
+            <File>
+              <FileName>main.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\user\main.c</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>sdk</GroupName>
+          <Files>
+            <File>
+              <FileName>yc_gpio.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_gpio.c</FilePath>
+            </File>
+            <File>
+              <FileName>yc_uart.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_uart.c</FilePath>
+            </File>
+            <File>
+              <FileName>yc_bt.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_bt.c</FilePath>
+            </File>
+            <File>
+              <FileName>yc_systick.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_systick.c</FilePath>
+            </File>
+            <File>
+              <FileName>yc_ipc.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_ipc.c</FilePath>
+            </File>
+            <File>
+              <FileName>yc_otp.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_otp.c</FilePath>
+            </File>
+            <File>
+              <FileName>yc_timer.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_timer.c</FilePath>
+            </File>
+            <File>
+              <FileName>yc_qspi.lib</FileName>
+              <FileType>4</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_qspi.lib</FilePath>
+            </File>
+            <File>
+              <FileName>yc_lpm.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_lpm.c</FilePath>
+            </File>
+            <File>
+              <FileName>yc_sysctrl.c</FileName>
+              <FileType>1</FileType>
+              <FilePath>..\..\..\..\..\Librarier\sdk\yc_sysctrl.c</FilePath>
+            </File>
+          </Files>
+        </Group>
+        <Group>
+          <GroupName>startup</GroupName>
+          <Files>
+            <File>
+              <FileName>flash_start.s</FileName>
+              <FileType>2</FileType>
+              <FilePath>..\..\..\..\..\Librarier\startup\flash_start.s</FilePath>
+            </File>
+            <File>
+              <FileName>startup.s</FileName>
+              <FileType>2</FileType>
+              <FilePath>..\..\..\..\..\Librarier\startup\startup.s</FilePath>
+            </File>
+          </Files>
+        </Group>
+      </Groups>
+    </Target>
+  </Targets>
+
+  <RTE>
+    <apis/>
+    <components/>
+    <files/>
+  </RTE>
+
+</Project>
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil_asm.txt
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil_asm.txt	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/prj/MDK/YC3121_Keil_asm.txt	(working copy)
@@ -0,0 +1,10514 @@
+
+========================================================================
+
+** ELF Header Information
+
+    File Name: .\Objects\YC3121_Keil.axf
+
+    Machine class: ELFCLASS32 (32-bit)
+    Data encoding: ELFDATA2LSB (Little endian)
+    Header version: EV_CURRENT (Current version)
+    Operating System ABI: none
+    ABI Version: 0
+    File Type: ET_EXEC (Executable) (2)
+    Machine: EM_ARM (ARM)
+
+    Image Entry point: 0x01000401
+    Flags: EF_ARM_HASENTRY + EF_ARM_ABI_FLOAT_SOFT (0x05000202)
+
+    ARM ELF revision: 5 (ABI version 2)
+
+    Conforms to Soft float procedure-call standard
+
+    Built with
+    Component: ARM Compiler 5.06 update 6 (build 750) Tool: armasm [4d35ec]
+    Component: ARM Compiler 5.06 update 6 (build 750) Tool: armlink [4d35ed]
+
+    Header size: 52 bytes (0x34)
+    Program header entry size: 32 bytes (0x20)
+    Section header entry size: 40 bytes (0x28)
+
+    Program header entries: 3
+    Section header entries: 18
+
+    Program header offset: 210176 (0x00033500)
+    Section header offset: 210272 (0x00033560)
+
+    Section header string table index: 17
+
+========================================================================
+
+** Program header #0 (PT_LOAD) [PF_X + PF_R]
+    Size : 212 bytes
+    Virtual address: 0x00000000 (Alignment 16)
+
+
+====================================
+
+** Program header #1 (PT_LOAD) [PF_X + PF_R]
+    Size : 320 bytes
+    Virtual address: 0x01000200 (Alignment 16)
+
+
+====================================
+
+** Program header #2 (PT_LOAD) [PF_X + PF_W + PF_R + PF_ARM_ENTRY]
+    Size : 38532 bytes (24752 bytes in file)
+    Virtual address: 0x01000400 (Alignment 4)
+
+
+========================================================================
+
+** Section #1 'ER_IROM1' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
+    Size   : 212 bytes (alignment 16)
+    Address: 0x00000000
+
+    $d.realdata
+    RESET
+    __Vectors
+        0x00000000:    00030000    ....    DCD    196608
+        0x00000004:    000000c1    ....    DCD    193
+        0x00000008:    000000cf    ....    DCD    207
+        0x0000000c:    01000205    ....    DCD    16777733
+        0x00000010:    00000000    ....    DCD    0
+        0x00000014:    00000000    ....    DCD    0
+        0x00000018:    00000000    ....    DCD    0
+        0x0000001c:    00000000    ....    DCD    0
+        0x00000020:    00000000    ....    DCD    0
+        0x00000024:    00000000    ....    DCD    0
+        0x00000028:    00000000    ....    DCD    0
+        0x0000002c:    00000000    ....    DCD    0
+        0x00000030:    00000000    ....    DCD    0
+        0x00000034:    00000000    ....    DCD    0
+        0x00000038:    00000000    ....    DCD    0
+        0x0000003c:    01000217    ....    DCD    16777751
+        0x00000040:    0100021d    ....    DCD    16777757
+        0x00000044:    01000221    !...    DCD    16777761
+        0x00000048:    01000225    %...    DCD    16777765
+        0x0000004c:    01000229    )...    DCD    16777769
+        0x00000050:    0100022d    -...    DCD    16777773
+        0x00000054:    01000231    1...    DCD    16777777
+        0x00000058:    01000235    5...    DCD    16777781
+        0x0000005c:    01000239    9...    DCD    16777785
+        0x00000060:    0100023d    =...    DCD    16777789
+        0x00000064:    01000241    A...    DCD    16777793
+        0x00000068:    01000245    E...    DCD    16777797
+        0x0000006c:    01000249    I...    DCD    16777801
+        0x00000070:    0100024d    M...    DCD    16777805
+        0x00000074:    01000251    Q...    DCD    16777809
+        0x00000078:    01000255    U...    DCD    16777813
+        0x0000007c:    01000259    Y...    DCD    16777817
+        0x00000080:    0100025d    ]...    DCD    16777821
+        0x00000084:    01000261    a...    DCD    16777825
+        0x00000088:    01000265    e...    DCD    16777829
+        0x0000008c:    01000269    i...    DCD    16777833
+        0x00000090:    0100026d    m...    DCD    16777837
+        0x00000094:    01000271    q...    DCD    16777841
+        0x00000098:    01000275    u...    DCD    16777845
+        0x0000009c:    01000279    y...    DCD    16777849
+        0x000000a0:    0100027d    }...    DCD    16777853
+        0x000000a4:    01000281    ....    DCD    16777857
+        0x000000a8:    01000285    ....    DCD    16777861
+        0x000000ac:    01000289    ....    DCD    16777865
+        0x000000b0:    0100028d    ....    DCD    16777869
+        0x000000b4:    01000291    ....    DCD    16777873
+        0x000000b8:    01000295    ....    DCD    16777877
+        0x000000bc:    01000299    ....    DCD    16777881
+    $t
+    .text
+    __Vectors_End
+    reset_handler
+        0x000000c0:    4803        .H      LDR      r0,[pc,#12] ; [0xd0] = 0x1000201
+        0x000000c2:    4700        .G      BX       r0
+        0x000000c4:    bf00        ..      NOP      
+    delay
+        0x000000c6:    3801        .8      SUBS     r0,#1
+        0x000000c8:    d1fd        ..      BNE      delay ; 0xc6
+        0x000000ca:    bf00        ..      NOP      
+        0x000000cc:    4770        pG      BX       lr
+    nmi_handler
+        0x000000ce:    e7fe        ..      B        nmi_handler ; 0xce
+    $d
+        0x000000d0:    01000201    ....    DCD    16777729
+
+** Section #2 'ER_IROM3' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
+    Size   : 320 bytes (alignment 16)
+    Address: 0x01000200
+
+    $t
+    .flash_start
+    Reset_Handler
+        0x01000200:    4849        IH      LDR      r0,[pc,#292] ; [0x1000328] = 0x1000401
+        0x01000202:    4700        .G      BX       r0
+    hard_fault_handler
+        0x01000204:    4849        IH      LDR      r0,[pc,#292] ; [0x100032c] = 0x10002a7
+        0x01000206:    4700        .G      BX       r0
+        0x01000208:    bf00        ..      NOP      
+    svc_handler
+        0x0100020a:    4849        IH      LDR      r0,[pc,#292] ; [0x1000330] = 0x10002a9
+        0x0100020c:    4700        .G      BX       r0
+        0x0100020e:    bf00        ..      NOP      
+    pendsv_handler
+        0x01000210:    4848        HH      LDR      r0,[pc,#288] ; [0x1000334] = 0x10002ab
+        0x01000212:    4700        .G      BX       r0
+        0x01000214:    bf00        ..      NOP      
+    systick
+        0x01000216:    4848        HH      LDR      r0,[pc,#288] ; [0x1000338] = 0x10008bd
+        0x01000218:    4700        .G      BX       r0
+        0x0100021a:    bf00        ..      NOP      
+    irq0
+        0x0100021c:    2000        .       MOVS     r0,#0
+        0x0100021e:    e03d        =.      B        isr ; 0x100029c
+    irq1
+        0x01000220:    2004        .       MOVS     r0,#4
+        0x01000222:    e03b        ;.      B        isr ; 0x100029c
+    irq2
+        0x01000224:    2008        .       MOVS     r0,#8
+        0x01000226:    e039        9.      B        isr ; 0x100029c
+    irq3
+        0x01000228:    200c        .       MOVS     r0,#0xc
+        0x0100022a:    e037        7.      B        isr ; 0x100029c
+    irq4
+        0x0100022c:    2010        .       MOVS     r0,#0x10
+        0x0100022e:    e035        5.      B        isr ; 0x100029c
+    irq5
+        0x01000230:    2014        .       MOVS     r0,#0x14
+        0x01000232:    e033        3.      B        isr ; 0x100029c
+    irq6
+        0x01000234:    2018        .       MOVS     r0,#0x18
+        0x01000236:    e031        1.      B        isr ; 0x100029c
+    irq7
+        0x01000238:    201c        .       MOVS     r0,#0x1c
+        0x0100023a:    e02f        /.      B        isr ; 0x100029c
+    irq8
+        0x0100023c:    2020                MOVS     r0,#0x20
+        0x0100023e:    e02d        -.      B        isr ; 0x100029c
+    irq9
+        0x01000240:    2024        $       MOVS     r0,#0x24
+        0x01000242:    e02b        +.      B        isr ; 0x100029c
+    irq10
+        0x01000244:    2028        (       MOVS     r0,#0x28
+        0x01000246:    e029        ).      B        isr ; 0x100029c
+    irq11
+        0x01000248:    202c        ,       MOVS     r0,#0x2c
+        0x0100024a:    e027        '.      B        isr ; 0x100029c
+    irq12
+        0x0100024c:    2030        0       MOVS     r0,#0x30
+        0x0100024e:    e025        %.      B        isr ; 0x100029c
+    irq13
+        0x01000250:    2034        4       MOVS     r0,#0x34
+        0x01000252:    e023        #.      B        isr ; 0x100029c
+    irq14
+        0x01000254:    2038        8       MOVS     r0,#0x38
+        0x01000256:    e021        !.      B        isr ; 0x100029c
+    irq15
+        0x01000258:    203c        <       MOVS     r0,#0x3c
+        0x0100025a:    e01f        ..      B        isr ; 0x100029c
+    irq16
+        0x0100025c:    2040        @       MOVS     r0,#0x40
+        0x0100025e:    e01d        ..      B        isr ; 0x100029c
+    irq17
+        0x01000260:    2044        D       MOVS     r0,#0x44
+        0x01000262:    e01b        ..      B        isr ; 0x100029c
+    irq18
+        0x01000264:    2048        H       MOVS     r0,#0x48
+        0x01000266:    e019        ..      B        isr ; 0x100029c
+    irq19
+        0x01000268:    204c        L       MOVS     r0,#0x4c
+        0x0100026a:    e017        ..      B        isr ; 0x100029c
+    irq20
+        0x0100026c:    2050        P       MOVS     r0,#0x50
+        0x0100026e:    e015        ..      B        isr ; 0x100029c
+    irq21
+        0x01000270:    2054        T       MOVS     r0,#0x54
+        0x01000272:    e013        ..      B        isr ; 0x100029c
+    irq22
+        0x01000274:    2058        X       MOVS     r0,#0x58
+        0x01000276:    e011        ..      B        isr ; 0x100029c
+    irq23
+        0x01000278:    205c        \       MOVS     r0,#0x5c
+        0x0100027a:    e00f        ..      B        isr ; 0x100029c
+    irq24
+        0x0100027c:    2060        `       MOVS     r0,#0x60
+        0x0100027e:    e00d        ..      B        isr ; 0x100029c
+    irq25
+        0x01000280:    2064        d       MOVS     r0,#0x64
+        0x01000282:    e00b        ..      B        isr ; 0x100029c
+    irq26
+        0x01000284:    2068        h       MOVS     r0,#0x68
+        0x01000286:    e009        ..      B        isr ; 0x100029c
+    irq27
+        0x01000288:    206c        l       MOVS     r0,#0x6c
+        0x0100028a:    e007        ..      B        isr ; 0x100029c
+    irq28
+        0x0100028c:    2070        p       MOVS     r0,#0x70
+        0x0100028e:    e005        ..      B        isr ; 0x100029c
+    irq29
+        0x01000290:    2074        t       MOVS     r0,#0x74
+        0x01000292:    e003        ..      B        isr ; 0x100029c
+    irq30
+        0x01000294:    2078        x       MOVS     r0,#0x78
+        0x01000296:    e001        ..      B        isr ; 0x100029c
+    irq31
+        0x01000298:    207c        |       MOVS     r0,#0x7c
+        0x0100029a:    46c0        .F      MOV      r8,r8
+    isr
+        0x0100029c:    4927        'I      LDR      r1,[pc,#156] ; [0x100033c] = 0x10002bc
+        0x0100029e:    5840        @X      LDR      r0,[r0,r1]
+        0x010002a0:    4700        .G      BX       r0
+    $d
+        0x010002a2:    0000        ..      DCW    0
+    $t
+    NMI_IRQHandler
+        0x010002a4:    e7fe        ..      B        NMI_IRQHandler ; 0x10002a4
+    HARD_FAULT_IRQHandler
+        0x010002a6:    e7fe        ..      B        HARD_FAULT_IRQHandler ; 0x10002a6
+    SVC_IRQHandler
+        0x010002a8:    e7fe        ..      B        SVC_IRQHandler ; 0x10002a8
+    PENDSV_IRQHandler
+        0x010002aa:    e7fe        ..      B        PENDSV_IRQHandler ; 0x10002aa
+        0x010002ac:    e7fe        ..      B        0x10002ac ; PENDSV_IRQHandler + 2
+    EXTI0_IRQHandler
+        0x010002ae:    e7fe        ..      B        EXTI0_IRQHandler ; 0x10002ae
+    EXTI1_IRQHandler
+        0x010002b0:    e7fe        ..      B        EXTI1_IRQHandler ; 0x10002b0
+    EXTI2_IRQHandler
+        0x010002b2:    e7fe        ..      B        EXTI2_IRQHandler ; 0x10002b2
+    EXTI3_IRQHandler
+        0x010002b4:    e7fe        ..      B        EXTI3_IRQHandler ; 0x10002b4
+    EXTI4_IRQHandler
+        0x010002b6:    e7fe        ..      B        EXTI4_IRQHandler ; 0x10002b6
+    EXTI5_IRQHandler
+        0x010002b8:    e7fe        ..      B        EXTI5_IRQHandler ; 0x10002b8
+    GPIO_IRQHandler
+    IIC_IRQHandler
+    MEMCP_IRQHandler
+    MSR_IRQHandler
+    QSPI_IRQHandler
+    RSA_IRQHandler
+    SCI0_IRQHandler
+    SCI1_IRQHandler
+    SEC_IRQHandler
+    SM4_IRQHandler
+    SPI0_IRQHandler
+    SPI1_IRQHandler
+    TIMER0_IRQHandler
+    TIMER1_IRQHandler
+    TIMER2_IRQHandler
+    TIMER3_IRQHandler
+    TIMER4_IRQHandler
+    TIMER5_IRQHandler
+    TIMER6_IRQHandler
+    TIMER7_IRQHandler
+    TIMER8_IRQHandler
+    TRNG_IRQHandler
+    UART0_IRQHandler
+    UART1_IRQHandler
+    USB_IRQHandler
+    WDT_IRQHandler
+        0x010002ba:    e7fe        ..      B        GPIO_IRQHandler ; 0x10002ba
+    $d
+    isr_table
+        0x010002bc:    010002bb    ....    DCD    16777915
+        0x010002c0:    010002bb    ....    DCD    16777915
+        0x010002c4:    010002bb    ....    DCD    16777915
+        0x010002c8:    010002bb    ....    DCD    16777915
+        0x010002cc:    010002bb    ....    DCD    16777915
+        0x010002d0:    010002bb    ....    DCD    16777915
+        0x010002d4:    010002bb    ....    DCD    16777915
+        0x010002d8:    010002bb    ....    DCD    16777915
+        0x010002dc:    010002bb    ....    DCD    16777915
+        0x010002e0:    010002bb    ....    DCD    16777915
+        0x010002e4:    010002bb    ....    DCD    16777915
+        0x010002e8:    01000839    9...    DCD    16779321
+        0x010002ec:    010002bb    ....    DCD    16777915
+        0x010002f0:    010002bb    ....    DCD    16777915
+        0x010002f4:    010002bb    ....    DCD    16777915
+        0x010002f8:    010002bb    ....    DCD    16777915
+        0x010002fc:    010002bb    ....    DCD    16777915
+        0x01000300:    010002bb    ....    DCD    16777915
+        0x01000304:    010002bb    ....    DCD    16777915
+        0x01000308:    010002bb    ....    DCD    16777915
+        0x0100030c:    010002bb    ....    DCD    16777915
+        0x01000310:    010002bb    ....    DCD    16777915
+        0x01000314:    010002bb    ....    DCD    16777915
+        0x01000318:    010002bb    ....    DCD    16777915
+        0x0100031c:    010002bb    ....    DCD    16777915
+        0x01000320:    010002bb    ....    DCD    16777915
+        0x01000324:    010002bb    ....    DCD    16777915
+        0x01000328:    01000401    ....    DCD    16778241
+        0x0100032c:    010002a7    ....    DCD    16777895
+        0x01000330:    010002a9    ....    DCD    16777897
+        0x01000334:    010002ab    ....    DCD    16777899
+        0x01000338:    010008bd    ....    DCD    16779453
+        0x0100033c:    010002bc    ....    DCD    16777916
+
+** Section #3 'ER_IROM4' (SHT_PROGBITS) [SHF_ALLOC + SHF_EXECINSTR]
+    Size   : 24676 bytes (alignment 4)
+    Address: 0x01000400
+
+    $t
+    .ARM.Collect$$$$00000000
+    .ARM.Collect$$$$00000001
+    __main
+    _main_stk
+        0x01000400:    4803        .H      LDR      r0,__lit__00000000 ; [0x1000410] = 0x30000
+        0x01000402:    4685        .F      MOV      sp,r0
+    .ARM.Collect$$$$00000004
+    _main_scatterload
+        0x01000404:    f004faaa    ....    BL       __scatterload ; 0x100495c
+    .ARM.Collect$$$$00000008
+    .ARM.Collect$$$$0000000A
+    .ARM.Collect$$$$0000000B
+    __main_after_scatterload
+    _main_clock
+    _main_cpp_init
+    _main_init
+        0x01000408:    4800        .H      LDR      r0,[pc,#0] ; [0x100040c] = 0x100144b
+        0x0100040a:    4700        .G      BX       r0
+    $d
+        0x0100040c:    0100144b    K...    DCD    16782411
+    .ARM.Collect$$$$00002712
+    __lit__00000000
+    .ARM.Collect$$$$0000000D
+    .ARM.Collect$$$$0000000F
+    __rt_final_cpp
+    __rt_final_exit
+        0x01000410:    00030000    ....    DCD    196608
+    $t
+    .text
+    NVIC_SetPriority
+        0x01000414:    b510        ..      PUSH     {r4,lr}
+        0x01000416:    4602        .F      MOV      r2,r0
+        0x01000418:    2a00        .*      CMP      r2,#0
+        0x0100041a:    da19        ..      BGE      0x1000450 ; NVIC_SetPriority + 60
+        0x0100041c:    4832        2H      LDR      r0,[pc,#200] ; [0x10004e8] = 0xe000ed1c
+        0x0100041e:    0713        ..      LSLS     r3,r2,#28
+        0x01000420:    0f1b        ..      LSRS     r3,r3,#28
+        0x01000422:    3b08        .;      SUBS     r3,r3,#8
+        0x01000424:    089b        ..      LSRS     r3,r3,#2
+        0x01000426:    009b        ..      LSLS     r3,r3,#2
+        0x01000428:    58c0        .X      LDR      r0,[r0,r3]
+        0x0100042a:    0793        ..      LSLS     r3,r2,#30
+        0x0100042c:    0edc        ..      LSRS     r4,r3,#27
+        0x0100042e:    23ff        .#      MOVS     r3,#0xff
+        0x01000430:    40a3        .@      LSLS     r3,r3,r4
+        0x01000432:    4398        .C      BICS     r0,r0,r3
+        0x01000434:    078b        ..      LSLS     r3,r1,#30
+        0x01000436:    0e1b        ..      LSRS     r3,r3,#24
+        0x01000438:    0794        ..      LSLS     r4,r2,#30
+        0x0100043a:    0ee4        ..      LSRS     r4,r4,#27
+        0x0100043c:    40a3        .@      LSLS     r3,r3,r4
+        0x0100043e:    4318        .C      ORRS     r0,r0,r3
+        0x01000440:    4b29        )K      LDR      r3,[pc,#164] ; [0x10004e8] = 0xe000ed1c
+        0x01000442:    0714        ..      LSLS     r4,r2,#28
+        0x01000444:    0f24        $.      LSRS     r4,r4,#28
+        0x01000446:    3c08        .<      SUBS     r4,r4,#8
+        0x01000448:    08a4        ..      LSRS     r4,r4,#2
+        0x0100044a:    00a4        ..      LSLS     r4,r4,#2
+        0x0100044c:    5118        .Q      STR      r0,[r3,r4]
+        0x0100044e:    e018        ..      B        0x1000482 ; NVIC_SetPriority + 110
+        0x01000450:    4826        &H      LDR      r0,[pc,#152] ; [0x10004ec] = 0xe000e100
+        0x01000452:    2303        .#      MOVS     r3,#3
+        0x01000454:    021b        ..      LSLS     r3,r3,#8
+        0x01000456:    18c0        ..      ADDS     r0,r0,r3
+        0x01000458:    0893        ..      LSRS     r3,r2,#2
+        0x0100045a:    009b        ..      LSLS     r3,r3,#2
+        0x0100045c:    58c0        .X      LDR      r0,[r0,r3]
+        0x0100045e:    0793        ..      LSLS     r3,r2,#30
+        0x01000460:    0edc        ..      LSRS     r4,r3,#27
+        0x01000462:    23ff        .#      MOVS     r3,#0xff
+        0x01000464:    40a3        .@      LSLS     r3,r3,r4
+        0x01000466:    4398        .C      BICS     r0,r0,r3
+        0x01000468:    078b        ..      LSLS     r3,r1,#30
+        0x0100046a:    0e1b        ..      LSRS     r3,r3,#24
+        0x0100046c:    0794        ..      LSLS     r4,r2,#30
+        0x0100046e:    0ee4        ..      LSRS     r4,r4,#27
+        0x01000470:    40a3        .@      LSLS     r3,r3,r4
+        0x01000472:    4318        .C      ORRS     r0,r0,r3
+        0x01000474:    4b1d        .K      LDR      r3,[pc,#116] ; [0x10004ec] = 0xe000e100
+        0x01000476:    2403        .$      MOVS     r4,#3
+        0x01000478:    0224        $.      LSLS     r4,r4,#8
+        0x0100047a:    191b        ..      ADDS     r3,r3,r4
+        0x0100047c:    0894        ..      LSRS     r4,r2,#2
+        0x0100047e:    00a4        ..      LSLS     r4,r4,#2
+        0x01000480:    5118        .Q      STR      r0,[r3,r4]
+        0x01000482:    2001        .       MOVS     r0,#1
+        0x01000484:    bd10        ..      POP      {r4,pc}
+    trigger_PendSV
+        0x01000486:    4818        .H      LDR      r0,[pc,#96] ; [0x10004e8] = 0xe000ed1c
+        0x01000488:    381c        .8      SUBS     r0,r0,#0x1c
+        0x0100048a:    6840        @h      LDR      r0,[r0,#4]
+        0x0100048c:    2101        .!      MOVS     r1,#1
+        0x0100048e:    0709        ..      LSLS     r1,r1,#28
+        0x01000490:    4308        .C      ORRS     r0,r0,r1
+        0x01000492:    4915        .I      LDR      r1,[pc,#84] ; [0x10004e8] = 0xe000ed1c
+        0x01000494:    391c        .9      SUBS     r1,r1,#0x1c
+        0x01000496:    6048        H`      STR      r0,[r1,#4]
+        0x01000498:    4770        pG      BX       lr
+    NVIC_EnableIRQ
+        0x0100049a:    bf00        ..      NOP      
+        0x0100049c:    4913        .I      LDR      r1,[pc,#76] ; [0x10004ec] = 0xe000e100
+        0x0100049e:    6809        .h      LDR      r1,[r1,#0]
+        0x010004a0:    2201        ."      MOVS     r2,#1
+        0x010004a2:    4082        .@      LSLS     r2,r2,r0
+        0x010004a4:    4311        .C      ORRS     r1,r1,r2
+        0x010004a6:    4a11        .J      LDR      r2,[pc,#68] ; [0x10004ec] = 0xe000e100
+        0x010004a8:    6011        .`      STR      r1,[r2,#0]
+        0x010004aa:    bf00        ..      NOP      
+        0x010004ac:    4770        pG      BX       lr
+    NVIC_DisableIRQ
+        0x010004ae:    bf00        ..      NOP      
+        0x010004b0:    2101        .!      MOVS     r1,#1
+        0x010004b2:    4081        .@      LSLS     r1,r1,r0
+        0x010004b4:    4a0d        .J      LDR      r2,[pc,#52] ; [0x10004ec] = 0xe000e100
+        0x010004b6:    3280        .2      ADDS     r2,r2,#0x80
+        0x010004b8:    6011        .`      STR      r1,[r2,#0]
+        0x010004ba:    bf00        ..      NOP      
+        0x010004bc:    4770        pG      BX       lr
+    soft_reset
+        0x010004be:    480c        .H      LDR      r0,[pc,#48] ; [0x10004f0] = 0xf8540
+        0x010004c0:    6b40        @k      LDR      r0,[r0,#0x34]
+        0x010004c2:    2101        .!      MOVS     r1,#1
+        0x010004c4:    4308        .C      ORRS     r0,r0,r1
+        0x010004c6:    490a        .I      LDR      r1,[pc,#40] ; [0x10004f0] = 0xf8540
+        0x010004c8:    6348        Hc      STR      r0,[r1,#0x34]
+        0x010004ca:    2055        U       MOVS     r0,#0x55
+        0x010004cc:    63c8        .c      STR      r0,[r1,#0x3c]
+        0x010004ce:    bf00        ..      NOP      
+        0x010004d0:    e7fe        ..      B        0x10004d0 ; soft_reset + 18
+    get_primask
+        0x010004d2:    f3ef8010    ....    MRS      r0,PRIMASK
+        0x010004d6:    4601        .F      MOV      r1,r0
+        0x010004d8:    4770        pG      BX       lr
+    get_msp
+        0x010004da:    f3ef8008    ....    MRS      r0,MSP
+        0x010004de:    4601        .F      MOV      r1,r0
+        0x010004e0:    4770        pG      BX       lr
+    set_msp
+        0x010004e2:    f3808808    ....    MSR      MSP,r0
+        0x010004e6:    4770        pG      BX       lr
+    $d
+        0x010004e8:    e000ed1c    ....    DCD    3758157084
+        0x010004ec:    e000e100    ....    DCD    3758153984
+        0x010004f0:    000f8540    @...    DCD    1017152
+    $t
+    .text
+    printfsend
+        0x010004f4:    b570        p.      PUSH     {r4-r6,lr}
+        0x010004f6:    b0c0        ..      SUB      sp,sp,#0x100
+        0x010004f8:    4606        .F      MOV      r6,r0
+        0x010004fa:    460c        .F      MOV      r4,r1
+        0x010004fc:    4615        .F      MOV      r5,r2
+        0x010004fe:    2000        .       MOVS     r0,#0
+        0x01000500:    e003        ..      B        0x100050a ; printfsend + 22
+        0x01000502:    5c21        !\      LDRB     r1,[r4,r0]
+        0x01000504:    466a        jF      MOV      r2,sp
+        0x01000506:    5411        .T      STRB     r1,[r2,r0]
+        0x01000508:    1c40        @.      ADDS     r0,r0,#1
+        0x0100050a:    42a8        .B      CMP      r0,r5
+        0x0100050c:    dbf9        ..      BLT      0x1000502 ; printfsend + 14
+        0x0100050e:    462a        *F      MOV      r2,r5
+        0x01000510:    4669        iF      MOV      r1,sp
+        0x01000512:    4630        0F      MOV      r0,r6
+        0x01000514:    f001fdc1    ....    BL       UART_SendBuf ; 0x100209a
+        0x01000518:    b040        @.      ADD      sp,sp,#0x100
+        0x0100051a:    bd70        p.      POP      {r4-r6,pc}
+    MyPrintf
+        0x0100051c:    b40f        ..      PUSH     {r0-r3}
+        0x0100051e:    b5f0        ..      PUSH     {r4-r7,lr}
+        0x01000520:    b08b        ..      SUB      sp,sp,#0x2c
+        0x01000522:    a811        ..      ADD      r0,sp,#0x44
+        0x01000524:    9001        ..      STR      r0,[sp,#4]
+        0x01000526:    e148        H.      B        0x10007ba ; MyPrintf + 670
+        0x01000528:    2400        .$      MOVS     r4,#0
+        0x0100052a:    e000        ..      B        0x100052e ; MyPrintf + 18
+        0x0100052c:    1c64        d.      ADDS     r4,r4,#1
+        0x0100052e:    9810        ..      LDR      r0,[sp,#0x40]
+        0x01000530:    5d00        .]      LDRB     r0,[r0,r4]
+        0x01000532:    2825        %(      CMP      r0,#0x25
+        0x01000534:    d003        ..      BEQ      0x100053e ; MyPrintf + 34
+        0x01000536:    9810        ..      LDR      r0,[sp,#0x40]
+        0x01000538:    5d00        .]      LDRB     r0,[r0,r4]
+        0x0100053a:    2800        .(      CMP      r0,#0
+        0x0100053c:    d1f6        ..      BNE      0x100052c ; MyPrintf + 16
+        0x0100053e:    2c00        .,      CMP      r4,#0
+        0x01000540:    d004        ..      BEQ      0x100054c ; MyPrintf + 48
+        0x01000542:    4622        "F      MOV      r2,r4
+        0x01000544:    2000        .       MOVS     r0,#0
+        0x01000546:    9910        ..      LDR      r1,[sp,#0x40]
+        0x01000548:    f7ffffd4    ....    BL       printfsend ; 0x10004f4
+        0x0100054c:    9810        ..      LDR      r0,[sp,#0x40]
+        0x0100054e:    1900        ..      ADDS     r0,r0,r4
+        0x01000550:    9010        ..      STR      r0,[sp,#0x40]
+        0x01000552:    9810        ..      LDR      r0,[sp,#0x40]
+        0x01000554:    7800        .x      LDRB     r0,[r0,#0]
+        0x01000556:    2825        %(      CMP      r0,#0x25
+        0x01000558:    d1e5        ..      BNE      0x1000526 ; MyPrintf + 10
+        0x0100055a:    9810        ..      LDR      r0,[sp,#0x40]
+        0x0100055c:    1c40        @.      ADDS     r0,r0,#1
+        0x0100055e:    9010        ..      STR      r0,[sp,#0x40]
+        0x01000560:    2500        .%      MOVS     r5,#0
+        0x01000562:    2020                MOVS     r0,#0x20
+        0x01000564:    9003        ..      STR      r0,[sp,#0xc]
+        0x01000566:    bf00        ..      NOP      
+        0x01000568:    9810        ..      LDR      r0,[sp,#0x40]
+        0x0100056a:    7801        .x      LDRB     r1,[r0,#0]
+        0x0100056c:    1c40        @.      ADDS     r0,r0,#1
+        0x0100056e:    9010        ..      STR      r0,[sp,#0x40]
+        0x01000570:    2938        8)      CMP      r1,#0x38
+        0x01000572:    d030        0.      BEQ      0x10005d6 ; MyPrintf + 186
+        0x01000574:    dc14        ..      BGT      0x10005a0 ; MyPrintf + 132
+        0x01000576:    2933        3)      CMP      r1,#0x33
+        0x01000578:    d028        (.      BEQ      0x10005cc ; MyPrintf + 176
+        0x0100057a:    dc08        ..      BGT      0x100058e ; MyPrintf + 114
+        0x0100057c:    2925        %)      CMP      r1,#0x25
+        0x0100057e:    d070        p.      BEQ      0x1000662 ; MyPrintf + 326
+        0x01000580:    2930        0)      CMP      r1,#0x30
+        0x01000582:    d020         .      BEQ      0x10005c6 ; MyPrintf + 170
+        0x01000584:    2931        1)      CMP      r1,#0x31
+        0x01000586:    d01f        ..      BEQ      0x10005c8 ; MyPrintf + 172
+        0x01000588:    2932        2)      CMP      r1,#0x32
+        0x0100058a:    d16b        k.      BNE      0x1000664 ; MyPrintf + 328
+        0x0100058c:    e01d        ..      B        0x10005ca ; MyPrintf + 174
+        0x0100058e:    2934        4)      CMP      r1,#0x34
+        0x01000590:    d01d        ..      BEQ      0x10005ce ; MyPrintf + 178
+        0x01000592:    2935        5)      CMP      r1,#0x35
+        0x01000594:    d01c        ..      BEQ      0x10005d0 ; MyPrintf + 180
+        0x01000596:    2936        6)      CMP      r1,#0x36
+        0x01000598:    d01b        ..      BEQ      0x10005d2 ; MyPrintf + 182
+        0x0100059a:    2937        7)      CMP      r1,#0x37
+        0x0100059c:    d1f5        ..      BNE      0x100058a ; MyPrintf + 110
+        0x0100059e:    e019        ..      B        0x10005d4 ; MyPrintf + 184
+        0x010005a0:    2970        p)      CMP      r1,#0x70
+        0x010005a2:    d075        u.      BEQ      0x1000690 ; MyPrintf + 372
+        0x010005a4:    dc08        ..      BGT      0x10005b8 ; MyPrintf + 156
+        0x010005a6:    2939        9)      CMP      r1,#0x39
+        0x010005a8:    d016        ..      BEQ      0x10005d8 ; MyPrintf + 188
+        0x010005aa:    2958        X)      CMP      r1,#0x58
+        0x010005ac:    d072        r.      BEQ      0x1000694 ; MyPrintf + 376
+        0x010005ae:    2963        c)      CMP      r1,#0x63
+        0x010005b0:    d022        ".      BEQ      0x10005f8 ; MyPrintf + 220
+        0x010005b2:    2964        d)      CMP      r1,#0x64
+        0x010005b4:    d1e9        ..      BNE      0x100058a ; MyPrintf + 110
+        0x010005b6:    e02b        +.      B        0x1000610 ; MyPrintf + 244
+        0x010005b8:    2973        s)      CMP      r1,#0x73
+        0x010005ba:    d03d        =.      BEQ      0x1000638 ; MyPrintf + 284
+        0x010005bc:    2975        u)      CMP      r1,#0x75
+        0x010005be:    d05c        \.      BEQ      0x100067a ; MyPrintf + 350
+        0x010005c0:    2978        x)      CMP      r1,#0x78
+        0x010005c2:    d1e2        ..      BNE      0x100058a ; MyPrintf + 110
+        0x010005c4:    e073        s.      B        0x10006ae ; MyPrintf + 402
+        0x010005c6:    bf00        ..      NOP      
+        0x010005c8:    bf00        ..      NOP      
+        0x010005ca:    bf00        ..      NOP      
+        0x010005cc:    bf00        ..      NOP      
+        0x010005ce:    bf00        ..      NOP      
+        0x010005d0:    bf00        ..      NOP      
+        0x010005d2:    bf00        ..      NOP      
+        0x010005d4:    bf00        ..      NOP      
+        0x010005d6:    bf00        ..      NOP      
+        0x010005d8:    9810        ..      LDR      r0,[sp,#0x40]
+        0x010005da:    3820         8      SUBS     r0,r0,#0x20
+        0x010005dc:    7fc0        ..      LDRB     r0,[r0,#0x1f]
+        0x010005de:    2830        0(      CMP      r0,#0x30
+        0x010005e0:    d102        ..      BNE      0x10005e8 ; MyPrintf + 204
+        0x010005e2:    2d00        .-      CMP      r5,#0
+        0x010005e4:    d100        ..      BNE      0x10005e8 ; MyPrintf + 204
+        0x010005e6:    9003        ..      STR      r0,[sp,#0xc]
+        0x010005e8:    200a        .       MOVS     r0,#0xa
+        0x010005ea:    4345        EC      MULS     r5,r0,r5
+        0x010005ec:    9810        ..      LDR      r0,[sp,#0x40]
+        0x010005ee:    3820         8      SUBS     r0,r0,#0x20
+        0x010005f0:    7fc0        ..      LDRB     r0,[r0,#0x1f]
+        0x010005f2:    3830        08      SUBS     r0,r0,#0x30
+        0x010005f4:    1945        E.      ADDS     r5,r0,r5
+        0x010005f6:    e7b7        ..      B        0x1000568 ; MyPrintf + 76
+        0x010005f8:    9801        ..      LDR      r0,[sp,#4]
+        0x010005fa:    6800        .h      LDR      r0,[r0,#0]
+        0x010005fc:    900a        ..      STR      r0,[sp,#0x28]
+        0x010005fe:    9801        ..      LDR      r0,[sp,#4]
+        0x01000600:    1d00        ..      ADDS     r0,r0,#4
+        0x01000602:    9001        ..      STR      r0,[sp,#4]
+        0x01000604:    2201        ."      MOVS     r2,#1
+        0x01000606:    a90a        ..      ADD      r1,sp,#0x28
+        0x01000608:    2000        .       MOVS     r0,#0
+        0x0100060a:    f7ffff73    ..s.    BL       printfsend ; 0x10004f4
+        0x0100060e:    e0d3        ..      B        0x10007b8 ; MyPrintf + 668
+        0x01000610:    9801        ..      LDR      r0,[sp,#4]
+        0x01000612:    6800        .h      LDR      r0,[r0,#0]
+        0x01000614:    900a        ..      STR      r0,[sp,#0x28]
+        0x01000616:    9801        ..      LDR      r0,[sp,#4]
+        0x01000618:    1d00        ..      ADDS     r0,r0,#4
+        0x0100061a:    9001        ..      STR      r0,[sp,#4]
+        0x0100061c:    2600        .&      MOVS     r6,#0
+        0x0100061e:    980a        ..      LDR      r0,[sp,#0x28]
+        0x01000620:    2800        .(      CMP      r0,#0
+        0x01000622:    da05        ..      BGE      0x1000630 ; MyPrintf + 276
+        0x01000624:    980a        ..      LDR      r0,[sp,#0x28]
+        0x01000626:    4240        @B      RSBS     r0,r0,#0
+        0x01000628:    900a        ..      STR      r0,[sp,#0x28]
+        0x0100062a:    2001        .       MOVS     r0,#1
+        0x0100062c:    9009        ..      STR      r0,[sp,#0x24]
+        0x0100062e:    e001        ..      B        0x1000634 ; MyPrintf + 280
+        0x01000630:    2000        .       MOVS     r0,#0
+        0x01000632:    9009        ..      STR      r0,[sp,#0x24]
+        0x01000634:    270a        .'      MOVS     r7,#0xa
+        0x01000636:    e048        H.      B        0x10006ca ; MyPrintf + 430
+        0x01000638:    9801        ..      LDR      r0,[sp,#4]
+        0x0100063a:    6800        .h      LDR      r0,[r0,#0]
+        0x0100063c:    9008        ..      STR      r0,[sp,#0x20]
+        0x0100063e:    9801        ..      LDR      r0,[sp,#4]
+        0x01000640:    1d00        ..      ADDS     r0,r0,#4
+        0x01000642:    9001        ..      STR      r0,[sp,#4]
+        0x01000644:    2400        .$      MOVS     r4,#0
+        0x01000646:    e000        ..      B        0x100064a ; MyPrintf + 302
+        0x01000648:    1c64        d.      ADDS     r4,r4,#1
+        0x0100064a:    9808        ..      LDR      r0,[sp,#0x20]
+        0x0100064c:    5d00        .]      LDRB     r0,[r0,r4]
+        0x0100064e:    2800        .(      CMP      r0,#0
+        0x01000650:    d1fa        ..      BNE      0x1000648 ; MyPrintf + 300
+        0x01000652:    4622        "F      MOV      r2,r4
+        0x01000654:    9908        ..      LDR      r1,[sp,#0x20]
+        0x01000656:    f7ffff4d    ..M.    BL       printfsend ; 0x10004f4
+        0x0100065a:    42a5        .B      CMP      r5,r4
+        0x0100065c:    d90c        ..      BLS      0x1000678 ; MyPrintf + 348
+        0x0100065e:    1b2d        -.      SUBS     r5,r5,r4
+        0x01000660:    e006        ..      B        0x1000670 ; MyPrintf + 340
+        0x01000662:    e09c        ..      B        0x100079e ; MyPrintf + 642
+        0x01000664:    e0a2        ..      B        0x10007ac ; MyPrintf + 656
+        0x01000666:    2201        ."      MOVS     r2,#1
+        0x01000668:    a168        h.      ADR      r1,{pc}+0x1a4 ; 0x100080c
+        0x0100066a:    2000        .       MOVS     r0,#0
+        0x0100066c:    f7ffff42    ..B.    BL       printfsend ; 0x10004f4
+        0x01000670:    4628        (F      MOV      r0,r5
+        0x01000672:    1e6d        m.      SUBS     r5,r5,#1
+        0x01000674:    2800        .(      CMP      r0,#0
+        0x01000676:    d1f6        ..      BNE      0x1000666 ; MyPrintf + 330
+        0x01000678:    e09e        ..      B        0x10007b8 ; MyPrintf + 668
+        0x0100067a:    9801        ..      LDR      r0,[sp,#4]
+        0x0100067c:    6800        .h      LDR      r0,[r0,#0]
+        0x0100067e:    900a        ..      STR      r0,[sp,#0x28]
+        0x01000680:    9801        ..      LDR      r0,[sp,#4]
+        0x01000682:    1d00        ..      ADDS     r0,r0,#4
+        0x01000684:    9001        ..      STR      r0,[sp,#4]
+        0x01000686:    2600        .&      MOVS     r6,#0
+        0x01000688:    270a        .'      MOVS     r7,#0xa
+        0x0100068a:    2000        .       MOVS     r0,#0
+        0x0100068c:    9009        ..      STR      r0,[sp,#0x24]
+        0x0100068e:    e01c        ..      B        0x10006ca ; MyPrintf + 430
+        0x01000690:    e00e        ..      B        0x10006b0 ; MyPrintf + 404
+        0x01000692:    e7ff        ..      B        0x1000694 ; MyPrintf + 376
+        0x01000694:    9801        ..      LDR      r0,[sp,#4]
+        0x01000696:    6800        .h      LDR      r0,[r0,#0]
+        0x01000698:    900a        ..      STR      r0,[sp,#0x28]
+        0x0100069a:    9801        ..      LDR      r0,[sp,#4]
+        0x0100069c:    1d00        ..      ADDS     r0,r0,#4
+        0x0100069e:    9001        ..      STR      r0,[sp,#4]
+        0x010006a0:    2600        .&      MOVS     r6,#0
+        0x010006a2:    2710        .'      MOVS     r7,#0x10
+        0x010006a4:    2000        .       MOVS     r0,#0
+        0x010006a6:    9009        ..      STR      r0,[sp,#0x24]
+        0x010006a8:    2058        X       MOVS     r0,#0x58
+        0x010006aa:    9002        ..      STR      r0,[sp,#8]
+        0x010006ac:    e00d        ..      B        0x10006ca ; MyPrintf + 430
+        0x010006ae:    bf00        ..      NOP      
+        0x010006b0:    9801        ..      LDR      r0,[sp,#4]
+        0x010006b2:    6800        .h      LDR      r0,[r0,#0]
+        0x010006b4:    900a        ..      STR      r0,[sp,#0x28]
+        0x010006b6:    9801        ..      LDR      r0,[sp,#4]
+        0x010006b8:    1d00        ..      ADDS     r0,r0,#4
+        0x010006ba:    9001        ..      STR      r0,[sp,#4]
+        0x010006bc:    2600        .&      MOVS     r6,#0
+        0x010006be:    2710        .'      MOVS     r7,#0x10
+        0x010006c0:    2000        .       MOVS     r0,#0
+        0x010006c2:    9009        ..      STR      r0,[sp,#0x24]
+        0x010006c4:    2078        x       MOVS     r0,#0x78
+        0x010006c6:    9002        ..      STR      r0,[sp,#8]
+        0x010006c8:    bf00        ..      NOP      
+        0x010006ca:    2401        .$      MOVS     r4,#1
+        0x010006cc:    e003        ..      B        0x10006d6 ; MyPrintf + 442
+        0x010006ce:    4620         F      MOV      r0,r4
+        0x010006d0:    4378        xC      MULS     r0,r7,r0
+        0x010006d2:    4604        .F      MOV      r4,r0
+        0x010006d4:    1e6d        m.      SUBS     r5,r5,#1
+        0x010006d6:    4620         F      MOV      r0,r4
+        0x010006d8:    4378        xC      MULS     r0,r7,r0
+        0x010006da:    990a        ..      LDR      r1,[sp,#0x28]
+        0x010006dc:    4288        .B      CMP      r0,r1
+        0x010006de:    d807        ..      BHI      0x10006f0 ; MyPrintf + 468
+        0x010006e0:    4621        !F      MOV      r1,r4
+        0x010006e2:    4379        yC      MULS     r1,r7,r1
+        0x010006e4:    4608        .F      MOV      r0,r1
+        0x010006e6:    4639        9F      MOV      r1,r7
+        0x010006e8:    f004f8d6    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x010006ec:    42a0        .B      CMP      r0,r4
+        0x010006ee:    d0ee        ..      BEQ      0x10006ce ; MyPrintf + 434
+        0x010006f0:    9809        ..      LDR      r0,[sp,#0x24]
+        0x010006f2:    2800        .(      CMP      r0,#0
+        0x010006f4:    d000        ..      BEQ      0x10006f8 ; MyPrintf + 476
+        0x010006f6:    1e6d        m.      SUBS     r5,r5,#1
+        0x010006f8:    9809        ..      LDR      r0,[sp,#0x24]
+        0x010006fa:    2800        .(      CMP      r0,#0
+        0x010006fc:    d009        ..      BEQ      0x1000712 ; MyPrintf + 502
+        0x010006fe:    9803        ..      LDR      r0,[sp,#0xc]
+        0x01000700:    2830        0(      CMP      r0,#0x30
+        0x01000702:    d106        ..      BNE      0x1000712 ; MyPrintf + 502
+        0x01000704:    222d        -"      MOVS     r2,#0x2d
+        0x01000706:    4630        0F      MOV      r0,r6
+        0x01000708:    1c76        v.      ADDS     r6,r6,#1
+        0x0100070a:    a904        ..      ADD      r1,sp,#0x10
+        0x0100070c:    540a        .T      STRB     r2,[r1,r0]
+        0x0100070e:    2000        .       MOVS     r0,#0
+        0x01000710:    9009        ..      STR      r0,[sp,#0x24]
+        0x01000712:    2d01        .-      CMP      r5,#1
+        0x01000714:    d90b        ..      BLS      0x100072e ; MyPrintf + 530
+        0x01000716:    2d10        .-      CMP      r5,#0x10
+        0x01000718:    d209        ..      BCS      0x100072e ; MyPrintf + 530
+        0x0100071a:    1e6d        m.      SUBS     r5,r5,#1
+        0x0100071c:    e005        ..      B        0x100072a ; MyPrintf + 526
+        0x0100071e:    4631        1F      MOV      r1,r6
+        0x01000720:    1c76        v.      ADDS     r6,r6,#1
+        0x01000722:    aa04        ..      ADD      r2,sp,#0x10
+        0x01000724:    9803        ..      LDR      r0,[sp,#0xc]
+        0x01000726:    5450        PT      STRB     r0,[r2,r1]
+        0x01000728:    1e6d        m.      SUBS     r5,r5,#1
+        0x0100072a:    2d00        .-      CMP      r5,#0
+        0x0100072c:    d1f7        ..      BNE      0x100071e ; MyPrintf + 514
+        0x0100072e:    9809        ..      LDR      r0,[sp,#0x24]
+        0x01000730:    2800        .(      CMP      r0,#0
+        0x01000732:    d004        ..      BEQ      0x100073e ; MyPrintf + 546
+        0x01000734:    222d        -"      MOVS     r2,#0x2d
+        0x01000736:    4630        0F      MOV      r0,r6
+        0x01000738:    1c76        v.      ADDS     r6,r6,#1
+        0x0100073a:    a904        ..      ADD      r1,sp,#0x10
+        0x0100073c:    540a        .T      STRB     r2,[r1,r0]
+        0x0100073e:    e026        &.      B        0x100078e ; MyPrintf + 626
+        0x01000740:    9802        ..      LDR      r0,[sp,#8]
+        0x01000742:    2878        x(      CMP      r0,#0x78
+        0x01000744:    d10f        ..      BNE      0x1000766 ; MyPrintf + 586
+        0x01000746:    4621        !F      MOV      r1,r4
+        0x01000748:    980a        ..      LDR      r0,[sp,#0x28]
+        0x0100074a:    f004f8a5    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x0100074e:    4639        9F      MOV      r1,r7
+        0x01000750:    9000        ..      STR      r0,[sp,#0]
+        0x01000752:    f004f8a1    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x01000756:    482e        .H      LDR      r0,[pc,#184] ; [0x1000810] = 0x1004b38
+        0x01000758:    6800        .h      LDR      r0,[r0,#0]
+        0x0100075a:    5c42        B\      LDRB     r2,[r0,r1]
+        0x0100075c:    4630        0F      MOV      r0,r6
+        0x0100075e:    1c76        v.      ADDS     r6,r6,#1
+        0x01000760:    a904        ..      ADD      r1,sp,#0x10
+        0x01000762:    540a        .T      STRB     r2,[r1,r0]
+        0x01000764:    e00e        ..      B        0x1000784 ; MyPrintf + 616
+        0x01000766:    4621        !F      MOV      r1,r4
+        0x01000768:    980a        ..      LDR      r0,[sp,#0x28]
+        0x0100076a:    f004f895    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x0100076e:    4639        9F      MOV      r1,r7
+        0x01000770:    9000        ..      STR      r0,[sp,#0]
+        0x01000772:    f004f891    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x01000776:    4827        'H      LDR      r0,[pc,#156] ; [0x1000814] = 0x1004b3c
+        0x01000778:    6800        .h      LDR      r0,[r0,#0]
+        0x0100077a:    5c42        B\      LDRB     r2,[r0,r1]
+        0x0100077c:    4630        0F      MOV      r0,r6
+        0x0100077e:    1c76        v.      ADDS     r6,r6,#1
+        0x01000780:    a904        ..      ADD      r1,sp,#0x10
+        0x01000782:    540a        .T      STRB     r2,[r1,r0]
+        0x01000784:    4639        9F      MOV      r1,r7
+        0x01000786:    4620         F      MOV      r0,r4
+        0x01000788:    f004f886    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x0100078c:    4604        .F      MOV      r4,r0
+        0x0100078e:    2c00        .,      CMP      r4,#0
+        0x01000790:    d1d6        ..      BNE      0x1000740 ; MyPrintf + 548
+        0x01000792:    4632        2F      MOV      r2,r6
+        0x01000794:    a904        ..      ADD      r1,sp,#0x10
+        0x01000796:    2000        .       MOVS     r0,#0
+        0x01000798:    f7fffeac    ....    BL       printfsend ; 0x10004f4
+        0x0100079c:    e00c        ..      B        0x10007b8 ; MyPrintf + 668
+        0x0100079e:    9810        ..      LDR      r0,[sp,#0x40]
+        0x010007a0:    1e41        A.      SUBS     r1,r0,#1
+        0x010007a2:    2201        ."      MOVS     r2,#1
+        0x010007a4:    2000        .       MOVS     r0,#0
+        0x010007a6:    f7fffea5    ....    BL       printfsend ; 0x10004f4
+        0x010007aa:    e005        ..      B        0x10007b8 ; MyPrintf + 668
+        0x010007ac:    2205        ."      MOVS     r2,#5
+        0x010007ae:    a11a        ..      ADR      r1,{pc}+0x6a ; 0x1000818
+        0x010007b0:    2000        .       MOVS     r0,#0
+        0x010007b2:    f7fffe9f    ....    BL       printfsend ; 0x10004f4
+        0x010007b6:    bf00        ..      NOP      
+        0x010007b8:    bf00        ..      NOP      
+        0x010007ba:    9810        ..      LDR      r0,[sp,#0x40]
+        0x010007bc:    7800        .x      LDRB     r0,[r0,#0]
+        0x010007be:    2800        .(      CMP      r0,#0
+        0x010007c0:    d000        ..      BEQ      0x10007c4 ; MyPrintf + 680
+        0x010007c2:    e6b1        ..      B        0x1000528 ; MyPrintf + 12
+        0x010007c4:    9001        ..      STR      r0,[sp,#4]
+        0x010007c6:    b00b        ..      ADD      sp,sp,#0x2c
+        0x010007c8:    bcf0        ..      POP      {r4-r7}
+        0x010007ca:    bc08        ..      POP      {r3}
+        0x010007cc:    b004        ..      ADD      sp,sp,#0x10
+        0x010007ce:    4718        .G      BX       r3
+    printv
+        0x010007d0:    b5f7        ..      PUSH     {r0-r2,r4-r7,lr}
+        0x010007d2:    4605        .F      MOV      r5,r0
+        0x010007d4:    460e        .F      MOV      r6,r1
+        0x010007d6:    2400        .$      MOVS     r4,#0
+        0x010007d8:    2700        .'      MOVS     r7,#0
+        0x010007da:    a011        ..      ADR      r0,{pc}+0x46 ; 0x1000820
+        0x010007dc:    9902        ..      LDR      r1,[sp,#8]
+        0x010007de:    f7fffe9d    ....    BL       MyPrintf ; 0x100051c
+        0x010007e2:    bf00        ..      NOP      
+        0x010007e4:    e00d        ..      B        0x1000802 ; printv + 50
+        0x010007e6:    0720         .      LSLS     r0,r4,#28
+        0x010007e8:    0f00        ..      LSRS     r0,r0,#28
+        0x010007ea:    2800        .(      CMP      r0,#0
+        0x010007ec:    d104        ..      BNE      0x10007f8 ; printv + 40
+        0x010007ee:    4639        9F      MOV      r1,r7
+        0x010007f0:    a00d        ..      ADR      r0,{pc}+0x38 ; 0x1000828
+        0x010007f2:    f7fffe93    ....    BL       MyPrintf ; 0x100051c
+        0x010007f6:    3710        .7      ADDS     r7,r7,#0x10
+        0x010007f8:    5d29        )]      LDRB     r1,[r5,r4]
+        0x010007fa:    a00d        ..      ADR      r0,{pc}+0x36 ; 0x1000830
+        0x010007fc:    f7fffe8e    ....    BL       MyPrintf ; 0x100051c
+        0x01000800:    1c64        d.      ADDS     r4,r4,#1
+        0x01000802:    42b4        .B      CMP      r4,r6
+        0x01000804:    d3ef        ..      BCC      0x10007e6 ; printv + 22
+        0x01000806:    bdfe        ..      POP      {r1-r7,pc}
+    _assert_handler
+        0x01000808:    bf00        ..      NOP      
+        0x0100080a:    e7fe        ..      B        0x100080a ; _assert_handler + 2
+    $d
+        0x0100080c:    00000020     ...    DCD    32
+        0x01000810:    01004b38    8K..    DCD    16796472
+        0x01000814:    01004b3c    <K..    DCD    16796476
+        0x01000818:    4f525245    ERRO    DCD    1330795077
+        0x0100081c:    00000052    R...    DCD    82
+        0x01000820:    25200a0d    .. %    DCD    622856717
+        0x01000824:    00003a73    s:..    DCD    14963
+        0x01000828:    30250a0d    ..%0    DCD    807733773
+        0x0100082c:    003a7838    8x:.    DCD    3831864
+        0x01000830:    78323025    %02x    DCD    2016555045
+        0x01000834:    00000020     ...    DCD    32
+    $t
+    .text
+    BT_IRQHandler
+        0x01000838:    b510        ..      PUSH     {r4,lr}
+        0x0100083a:    2400        .$      MOVS     r4,#0
+        0x0100083c:    e032        2.      B        0x10008a4 ; BT_IRQHandler + 108
+        0x0100083e:    48f9        .H      LDR      r0,[pc,#996] ; [0x1000c24] = 0x2002f
+        0x01000840:    7800        .x      LDRB     r0,[r0,#0]
+        0x01000842:    49f9        .I      LDR      r1,[pc,#996] ; [0x1000c28] = 0x20030
+        0x01000844:    7809        .x      LDRB     r1,[r1,#0]
+        0x01000846:    4288        .B      CMP      r0,r1
+        0x01000848:    db06        ..      BLT      0x1000858 ; BT_IRQHandler + 32
+        0x0100084a:    48f6        .H      LDR      r0,[pc,#984] ; [0x1000c24] = 0x2002f
+        0x0100084c:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100084e:    49f6        .I      LDR      r1,[pc,#984] ; [0x1000c28] = 0x20030
+        0x01000850:    7809        .x      LDRB     r1,[r1,#0]
+        0x01000852:    1a40        @.      SUBS     r0,r0,r1
+        0x01000854:    b2c4        ..      UXTB     r4,r0
+        0x01000856:    e006        ..      B        0x1000866 ; BT_IRQHandler + 46
+        0x01000858:    48f2        .H      LDR      r0,[pc,#968] ; [0x1000c24] = 0x2002f
+        0x0100085a:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100085c:    300a        .0      ADDS     r0,r0,#0xa
+        0x0100085e:    49f2        .I      LDR      r1,[pc,#968] ; [0x1000c28] = 0x20030
+        0x01000860:    7809        .x      LDRB     r1,[r1,#0]
+        0x01000862:    1a40        @.      SUBS     r0,r0,r1
+        0x01000864:    b2c4        ..      UXTB     r4,r0
+        0x01000866:    2c09        .,      CMP      r4,#9
+        0x01000868:    db0c        ..      BLT      0x1000884 ; BT_IRQHandler + 76
+        0x0100086a:    200b        .       MOVS     r0,#0xb
+        0x0100086c:    f7fffe1f    ....    BL       NVIC_DisableIRQ ; 0x10004ae
+        0x01000870:    48ee        .H      LDR      r0,[pc,#952] ; [0x1000c2c] = 0xc8040
+        0x01000872:    78c0        .x      LDRB     r0,[r0,#3]
+        0x01000874:    2180        .!      MOVS     r1,#0x80
+        0x01000876:    4388        .C      BICS     r0,r0,r1
+        0x01000878:    49ec        .I      LDR      r1,[pc,#944] ; [0x1000c2c] = 0xc8040
+        0x0100087a:    70c8        .p      STRB     r0,[r1,#3]
+        0x0100087c:    2001        .       MOVS     r0,#1
+        0x0100087e:    49ec        .I      LDR      r1,[pc,#944] ; [0x1000c30] = 0x20005
+        0x01000880:    7008        .p      STRB     r0,[r1,#0]
+        0x01000882:    bd10        ..      POP      {r4,pc}
+        0x01000884:    2000        .       MOVS     r0,#0
+        0x01000886:    49ea        .I      LDR      r1,[pc,#936] ; [0x1000c30] = 0x20005
+        0x01000888:    7008        .p      STRB     r0,[r1,#0]
+        0x0100088a:    48e6        .H      LDR      r0,[pc,#920] ; [0x1000c24] = 0x2002f
+        0x0100088c:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100088e:    1c40        @.      ADDS     r0,r0,#1
+        0x01000890:    49e4        .I      LDR      r1,[pc,#912] ; [0x1000c24] = 0x2002f
+        0x01000892:    7008        .p      STRB     r0,[r1,#0]
+        0x01000894:    4608        .F      MOV      r0,r1
+        0x01000896:    7800        .x      LDRB     r0,[r0,#0]
+        0x01000898:    280a        .(      CMP      r0,#0xa
+        0x0100089a:    db01        ..      BLT      0x10008a0 ; BT_IRQHandler + 104
+        0x0100089c:    2000        .       MOVS     r0,#0
+        0x0100089e:    7008        .p      STRB     r0,[r1,#0]
+        0x010008a0:    f002fbcb    ....    BL       BT_ParseBTData ; 0x100303a
+        0x010008a4:    f003f8cf    ....    BL       IPC_have_data ; 0x1003a46
+        0x010008a8:    2800        .(      CMP      r0,#0
+        0x010008aa:    d1c8        ..      BNE      0x100083e ; BT_IRQHandler + 6
+        0x010008ac:    48df        .H      LDR      r0,[pc,#892] ; [0x1000c2c] = 0xc8040
+        0x010008ae:    78c0        .x      LDRB     r0,[r0,#3]
+        0x010008b0:    2180        .!      MOVS     r1,#0x80
+        0x010008b2:    4388        .C      BICS     r0,r0,r1
+        0x010008b4:    49dd        .I      LDR      r1,[pc,#884] ; [0x1000c2c] = 0xc8040
+        0x010008b6:    70c8        .p      STRB     r0,[r1,#3]
+        0x010008b8:    bf00        ..      NOP      
+        0x010008ba:    e7e2        ..      B        0x1000882 ; BT_IRQHandler + 74
+    SYSTICK_IRQHandler
+        0x010008bc:    48dd        .H      LDR      r0,[pc,#884] ; [0x1000c34] = 0x2003c
+        0x010008be:    6800        .h      LDR      r0,[r0,#0]
+        0x010008c0:    1c40        @.      ADDS     r0,r0,#1
+        0x010008c2:    49dc        .I      LDR      r1,[pc,#880] ; [0x1000c34] = 0x2003c
+        0x010008c4:    6008        .`      STR      r0,[r1,#0]
+        0x010008c6:    4608        .F      MOV      r0,r1
+        0x010008c8:    6800        .h      LDR      r0,[r0,#0]
+        0x010008ca:    49db        .I      LDR      r1,[pc,#876] ; [0x1000c38] = 0x7fffffff
+        0x010008cc:    4288        .B      CMP      r0,r1
+        0x010008ce:    d102        ..      BNE      0x10008d6 ; SYSTICK_IRQHandler + 26
+        0x010008d0:    2000        .       MOVS     r0,#0
+        0x010008d2:    49d8        .I      LDR      r1,[pc,#864] ; [0x1000c34] = 0x2003c
+        0x010008d4:    6008        .`      STR      r0,[r1,#0]
+        0x010008d6:    4770        pG      BX       lr
+    array2hex
+        0x010008d8:    b530        0.      PUSH     {r4,r5,lr}
+        0x010008da:    4603        .F      MOV      r3,r0
+        0x010008dc:    2000        .       MOVS     r0,#0
+        0x010008de:    e012        ..      B        0x1000906 ; array2hex + 46
+        0x010008e0:    1e4c        L.      SUBS     r4,r1,#1
+        0x010008e2:    1a24        $.      SUBS     r4,r4,r0
+        0x010008e4:    5d1c        .]      LDRB     r4,[r3,r4]
+        0x010008e6:    1124        $.      ASRS     r4,r4,#4
+        0x010008e8:    4dd4        .M      LDR      r5,[pc,#848] ; [0x1000c3c] = 0x20006
+        0x010008ea:    5d2c        ,]      LDRB     r4,[r5,r4]
+        0x010008ec:    0045        E.      LSLS     r5,r0,#1
+        0x010008ee:    5554        TU      STRB     r4,[r2,r5]
+        0x010008f0:    1e4c        L.      SUBS     r4,r1,#1
+        0x010008f2:    1a24        $.      SUBS     r4,r4,r0
+        0x010008f4:    5d1c        .]      LDRB     r4,[r3,r4]
+        0x010008f6:    0724        $.      LSLS     r4,r4,#28
+        0x010008f8:    0f24        $.      LSRS     r4,r4,#28
+        0x010008fa:    4dd0        .M      LDR      r5,[pc,#832] ; [0x1000c3c] = 0x20006
+        0x010008fc:    5d2d        -]      LDRB     r5,[r5,r4]
+        0x010008fe:    0044        D.      LSLS     r4,r0,#1
+        0x01000900:    1c64        d.      ADDS     r4,r4,#1
+        0x01000902:    5515        .U      STRB     r5,[r2,r4]
+        0x01000904:    1c40        @.      ADDS     r0,r0,#1
+        0x01000906:    4288        .B      CMP      r0,r1
+        0x01000908:    dbea        ..      BLT      0x10008e0 ; array2hex + 8
+        0x0100090a:    bd30        0.      POP      {r4,r5,pc}
+    prt_ble_first_get
+        0x0100090c:    48cc        .H      LDR      r0,[pc,#816] ; [0x1000c40] = 0x20118
+        0x0100090e:    7c80        .|      LDRB     r0,[r0,#0x12]
+        0x01000910:    2800        .(      CMP      r0,#0
+        0x01000912:    d001        ..      BEQ      0x1000918 ; prt_ble_first_get + 12
+        0x01000914:    2001        .       MOVS     r0,#1
+        0x01000916:    4770        pG      BX       lr
+        0x01000918:    2000        .       MOVS     r0,#0
+        0x0100091a:    e7fc        ..      B        0x1000916 ; prt_ble_first_get + 10
+    prt_is_ble_data
+        0x0100091c:    4601        .F      MOV      r1,r0
+        0x0100091e:    48c8        .H      LDR      r0,[pc,#800] ; [0x1000c40] = 0x20118
+        0x01000920:    3820         8      SUBS     r0,r0,#0x20
+        0x01000922:    8d80        ..      LDRH     r0,[r0,#0x2c]
+        0x01000924:    4288        .B      CMP      r0,r1
+        0x01000926:    d101        ..      BNE      0x100092c ; prt_is_ble_data + 16
+        0x01000928:    2001        .       MOVS     r0,#1
+        0x0100092a:    4770        pG      BX       lr
+        0x0100092c:    2000        .       MOVS     r0,#0
+        0x0100092e:    e7fc        ..      B        0x100092a ; prt_is_ble_data + 14
+    prt_ble_first_set
+        0x01000930:    49c3        .I      LDR      r1,[pc,#780] ; [0x1000c40] = 0x20118
+        0x01000932:    7488        .t      STRB     r0,[r1,#0x12]
+        0x01000934:    4770        pG      BX       lr
+    prt_yc3121_bt_post_event
+        0x01000936:    b510        ..      PUSH     {r4,lr}
+        0x01000938:    4604        .F      MOV      r4,r0
+        0x0100093a:    2c00        .,      CMP      r4,#0
+        0x0100093c:    d006        ..      BEQ      0x100094c ; prt_yc3121_bt_post_event + 22
+        0x0100093e:    2c02        .,      CMP      r4,#2
+        0x01000940:    d00f        ..      BEQ      0x1000962 ; prt_yc3121_bt_post_event + 44
+        0x01000942:    2c03        .,      CMP      r4,#3
+        0x01000944:    d009        ..      BEQ      0x100095a ; prt_yc3121_bt_post_event + 36
+        0x01000946:    2c05        .,      CMP      r4,#5
+        0x01000948:    d113        ..      BNE      0x1000972 ; prt_yc3121_bt_post_event + 60
+        0x0100094a:    e00e        ..      B        0x100096a ; prt_yc3121_bt_post_event + 52
+        0x0100094c:    a0bd        ..      ADR      r0,{pc}+0x2f8 ; 0x1000c44
+        0x0100094e:    f7fffde5    ....    BL       MyPrintf ; 0x100051c
+        0x01000952:    2002        .       MOVS     r0,#2
+        0x01000954:    f001ffb2    ....    BL       BT_SetSppFlowcontrol ; 0x10028bc
+        0x01000958:    e00b        ..      B        0x1000972 ; prt_yc3121_bt_post_event + 60
+        0x0100095a:    a0bf        ..      ADR      r0,{pc}+0x2fe ; 0x1000c58
+        0x0100095c:    f7fffdde    ....    BL       MyPrintf ; 0x100051c
+        0x01000960:    e007        ..      B        0x1000972 ; prt_yc3121_bt_post_event + 60
+        0x01000962:    a0c3        ..      ADR      r0,{pc}+0x30e ; 0x1000c70
+        0x01000964:    f7fffdda    ....    BL       MyPrintf ; 0x100051c
+        0x01000968:    e003        ..      B        0x1000972 ; prt_yc3121_bt_post_event + 60
+        0x0100096a:    a0c6        ..      ADR      r0,{pc}+0x31a ; 0x1000c84
+        0x0100096c:    f7fffdd6    ....    BL       MyPrintf ; 0x100051c
+        0x01000970:    bf00        ..      NOP      
+        0x01000972:    bf00        ..      NOP      
+        0x01000974:    bd10        ..      POP      {r4,pc}
+    prt_bt_ble_set_mtu
+        0x01000976:    b53e        >.      PUSH     {r1-r5,lr}
+        0x01000978:    2400        .$      MOVS     r4,#0
+        0x0100097a:    bf00        ..      NOP      
+        0x0100097c:    2000        .       MOVS     r0,#0
+        0x0100097e:    9000        ..      STR      r0,[sp,#0]
+        0x01000980:    9001        ..      STR      r0,[sp,#4]
+        0x01000982:    9002        ..      STR      r0,[sp,#8]
+        0x01000984:    48ae        .H      LDR      r0,[pc,#696] ; [0x1000c40] = 0x20118
+        0x01000986:    3820         8      SUBS     r0,r0,#0x20
+        0x01000988:    8e00        ..      LDRH     r0,[r0,#0x30]
+        0x0100098a:    b2c2        ..      UXTB     r2,r0
+        0x0100098c:    4621        !F      MOV      r1,r4
+        0x0100098e:    1c64        d.      ADDS     r4,r4,#1
+        0x01000990:    4668        hF      MOV      r0,sp
+        0x01000992:    5442        BT      STRB     r2,[r0,r1]
+        0x01000994:    48aa        .H      LDR      r0,[pc,#680] ; [0x1000c40] = 0x20118
+        0x01000996:    3820         8      SUBS     r0,r0,#0x20
+        0x01000998:    8e00        ..      LDRH     r0,[r0,#0x30]
+        0x0100099a:    1201        ..      ASRS     r1,r0,#8
+        0x0100099c:    4622        "F      MOV      r2,r4
+        0x0100099e:    1c64        d.      ADDS     r4,r4,#1
+        0x010009a0:    4668        hF      MOV      r0,sp
+        0x010009a2:    5481        .T      STRB     r1,[r0,r2]
+        0x010009a4:    2202        ."      MOVS     r2,#2
+        0x010009a6:    4621        !F      MOV      r1,r4
+        0x010009a8:    1c64        d.      ADDS     r4,r4,#1
+        0x010009aa:    5442        BT      STRB     r2,[r0,r1]
+        0x010009ac:    227f        ."      MOVS     r2,#0x7f
+        0x010009ae:    4621        !F      MOV      r1,r4
+        0x010009b0:    1c64        d.      ADDS     r4,r4,#1
+        0x010009b2:    5442        BT      STRB     r2,[r0,r1]
+        0x010009b4:    2200        ."      MOVS     r2,#0
+        0x010009b6:    4621        !F      MOV      r1,r4
+        0x010009b8:    1c64        d.      ADDS     r4,r4,#1
+        0x010009ba:    5442        BT      STRB     r2,[r0,r1]
+        0x010009bc:    4621        !F      MOV      r1,r4
+        0x010009be:    f001fdf6    ....    BL       BT_SendBleData ; 0x10025ae
+        0x010009c2:    bd3e        >.      POP      {r1-r5,pc}
+    prt_bt_ble_flow_proc
+        0x010009c4:    b53e        >.      PUSH     {r1-r5,lr}
+        0x010009c6:    4605        .F      MOV      r5,r0
+        0x010009c8:    2400        .$      MOVS     r4,#0
+        0x010009ca:    489d        .H      LDR      r0,[pc,#628] ; [0x1000c40] = 0x20118
+        0x010009cc:    3820         8      SUBS     r0,r0,#0x20
+        0x010009ce:    8e00        ..      LDRH     r0,[r0,#0x30]
+        0x010009d0:    b2c2        ..      UXTB     r2,r0
+        0x010009d2:    4621        !F      MOV      r1,r4
+        0x010009d4:    1c64        d.      ADDS     r4,r4,#1
+        0x010009d6:    4668        hF      MOV      r0,sp
+        0x010009d8:    5442        BT      STRB     r2,[r0,r1]
+        0x010009da:    4899        .H      LDR      r0,[pc,#612] ; [0x1000c40] = 0x20118
+        0x010009dc:    3820         8      SUBS     r0,r0,#0x20
+        0x010009de:    8e00        ..      LDRH     r0,[r0,#0x30]
+        0x010009e0:    1201        ..      ASRS     r1,r0,#8
+        0x010009e2:    4622        "F      MOV      r2,r4
+        0x010009e4:    1c64        d.      ADDS     r4,r4,#1
+        0x010009e6:    4668        hF      MOV      r0,sp
+        0x010009e8:    5481        .T      STRB     r1,[r0,r2]
+        0x010009ea:    2201        ."      MOVS     r2,#1
+        0x010009ec:    4621        !F      MOV      r1,r4
+        0x010009ee:    1c64        d.      ADDS     r4,r4,#1
+        0x010009f0:    5442        BT      STRB     r2,[r0,r1]
+        0x010009f2:    4621        !F      MOV      r1,r4
+        0x010009f4:    1c64        d.      ADDS     r4,r4,#1
+        0x010009f6:    5445        ET      STRB     r5,[r0,r1]
+        0x010009f8:    4621        !F      MOV      r1,r4
+        0x010009fa:    f001fdd8    ....    BL       BT_SendBleData ; 0x10025ae
+        0x010009fe:    2001        .       MOVS     r0,#1
+        0x01000a00:    bd3e        >.      POP      {r1-r5,pc}
+    genBleAdvData
+        0x01000a02:    b5ff        ..      PUSH     {r0-r7,lr}
+        0x01000a04:    4604        .F      MOV      r4,r0
+        0x01000a06:    2000        .       MOVS     r0,#0
+        0x01000a08:    2602        .&      MOVS     r6,#2
+        0x01000a0a:    4602        .F      MOV      r2,r0
+        0x01000a0c:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a0e:    549e        .T      STRB     r6,[r3,r2]
+        0x01000a10:    2601        .&      MOVS     r6,#1
+        0x01000a12:    4602        .F      MOV      r2,r0
+        0x01000a14:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a16:    549e        .T      STRB     r6,[r3,r2]
+        0x01000a18:    2602        .&      MOVS     r6,#2
+        0x01000a1a:    4602        .F      MOV      r2,r0
+        0x01000a1c:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a1e:    549e        .T      STRB     r6,[r3,r2]
+        0x01000a20:    1c4a        J.      ADDS     r2,r1,#1
+        0x01000a22:    b2d6        ..      UXTB     r6,r2
+        0x01000a24:    4602        .F      MOV      r2,r0
+        0x01000a26:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a28:    549e        .T      STRB     r6,[r3,r2]
+        0x01000a2a:    2609        .&      MOVS     r6,#9
+        0x01000a2c:    4602        .F      MOV      r2,r0
+        0x01000a2e:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a30:    549e        .T      STRB     r6,[r3,r2]
+        0x01000a32:    2200        ."      MOVS     r2,#0
+        0x01000a34:    e004        ..      B        0x1000a40 ; genBleAdvData + 62
+        0x01000a36:    5ca6        .\      LDRB     r6,[r4,r2]
+        0x01000a38:    4605        .F      MOV      r5,r0
+        0x01000a3a:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a3c:    555e        ^U      STRB     r6,[r3,r5]
+        0x01000a3e:    1c52        R.      ADDS     r2,r2,#1
+        0x01000a40:    428a        .B      CMP      r2,r1
+        0x01000a42:    dbf8        ..      BLT      0x1000a36 ; genBleAdvData + 52
+        0x01000a44:    2609        .&      MOVS     r6,#9
+        0x01000a46:    4602        .F      MOV      r2,r0
+        0x01000a48:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a4a:    549e        .T      STRB     r6,[r3,r2]
+        0x01000a4c:    26ff        .&      MOVS     r6,#0xff
+        0x01000a4e:    4605        .F      MOV      r5,r0
+        0x01000a50:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a52:    555e        ^U      STRB     r6,[r3,r5]
+        0x01000a54:    2600        .&      MOVS     r6,#0
+        0x01000a56:    4605        .F      MOV      r5,r0
+        0x01000a58:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a5a:    555e        ^U      STRB     r6,[r3,r5]
+        0x01000a5c:    4605        .F      MOV      r5,r0
+        0x01000a5e:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a60:    555e        ^U      STRB     r6,[r3,r5]
+        0x01000a62:    2200        ."      MOVS     r2,#0
+        0x01000a64:    e007        ..      B        0x1000a76 ; genBleAdvData + 116
+        0x01000a66:    2505        .%      MOVS     r5,#5
+        0x01000a68:    1aae        ..      SUBS     r6,r5,r2
+        0x01000a6a:    9d02        ..      LDR      r5,[sp,#8]
+        0x01000a6c:    5dae        .]      LDRB     r6,[r5,r6]
+        0x01000a6e:    4605        .F      MOV      r5,r0
+        0x01000a70:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a72:    555e        ^U      STRB     r6,[r3,r5]
+        0x01000a74:    1c52        R.      ADDS     r2,r2,#1
+        0x01000a76:    2a06        .*      CMP      r2,#6
+        0x01000a78:    dbf5        ..      BLT      0x1000a66 ; genBleAdvData + 100
+        0x01000a7a:    e003        ..      B        0x1000a84 ; genBleAdvData + 130
+        0x01000a7c:    2600        .&      MOVS     r6,#0
+        0x01000a7e:    4605        .F      MOV      r5,r0
+        0x01000a80:    1c40        @.      ADDS     r0,r0,#1
+        0x01000a82:    555e        ^U      STRB     r6,[r3,r5]
+        0x01000a84:    281f        .(      CMP      r0,#0x1f
+        0x01000a86:    dbf9        ..      BLT      0x1000a7c ; genBleAdvData + 122
+        0x01000a88:    bdff        ..      POP      {r0-r7,pc}
+    bt_init_proc
+        0x01000a8a:    b5f0        ..      PUSH     {r4-r7,lr}
+        0x01000a8c:    b0a7        ..      SUB      sp,sp,#0x9c
+        0x01000a8e:    a083        ..      ADR      r0,{pc}+0x20e ; 0x1000c9c
+        0x01000a90:    6800        .h      LDR      r0,[r0,#0]
+        0x01000a92:    9026        &.      STR      r0,[sp,#0x98]
+        0x01000a94:    2500        .%      MOVS     r5,#0
+        0x01000a96:    a082        ..      ADR      r0,{pc}+0x20a ; 0x1000ca0
+        0x01000a98:    6800        .h      LDR      r0,[r0,#0]
+        0x01000a9a:    9025        %.      STR      r0,[sp,#0x94]
+        0x01000a9c:    a181        ..      ADR      r1,{pc}+0x208 ; 0x1000ca4
+        0x01000a9e:    c903        ..      LDM      r1,{r0,r1}
+        0x01000aa0:    9124        $.      STR      r1,[sp,#0x90]
+        0x01000aa2:    9023        #.      STR      r0,[sp,#0x8c]
+        0x01000aa4:    a181        ..      ADR      r1,{pc}+0x208 ; 0x1000cac
+        0x01000aa6:    c903        ..      LDM      r1,{r0,r1}
+        0x01000aa8:    9122        ".      STR      r1,[sp,#0x88]
+        0x01000aaa:    9021        !.      STR      r0,[sp,#0x84]
+        0x01000aac:    a181        ..      ADR      r1,{pc}+0x208 ; 0x1000cb4
+        0x01000aae:    c903        ..      LDM      r1,{r0,r1}
+        0x01000ab0:    9120         .      STR      r1,[sp,#0x80]
+        0x01000ab2:    901f        ..      STR      r0,[sp,#0x7c]
+        0x01000ab4:    2214        ."      MOVS     r2,#0x14
+        0x01000ab6:    a181        ..      ADR      r1,{pc}+0x206 ; 0x1000cbc
+        0x01000ab8:    a81a        ..      ADD      r0,sp,#0x68
+        0x01000aba:    f003ff17    ....    BL       __aeabi_memcpy ; 0x10048ec
+        0x01000abe:    2214        ."      MOVS     r2,#0x14
+        0x01000ac0:    a183        ..      ADR      r1,{pc}+0x210 ; 0x1000cd0
+        0x01000ac2:    a815        ..      ADD      r0,sp,#0x54
+        0x01000ac4:    f003ff12    ....    BL       __aeabi_memcpy ; 0x10048ec
+        0x01000ac8:    2214        ."      MOVS     r2,#0x14
+        0x01000aca:    a186        ..      ADR      r1,{pc}+0x21a ; 0x1000ce4
+        0x01000acc:    a810        ..      ADD      r0,sp,#0x40
+        0x01000ace:    f003ff0d    ....    BL       __aeabi_memcpy ; 0x10048ec
+        0x01000ad2:    2214        ."      MOVS     r2,#0x14
+        0x01000ad4:    a188        ..      ADR      r1,{pc}+0x224 ; 0x1000cf8
+        0x01000ad6:    a80b        ..      ADD      r0,sp,#0x2c
+        0x01000ad8:    f003ff08    ....    BL       __aeabi_memcpy ; 0x10048ec
+        0x01000adc:    2120         !      MOVS     r1,#0x20
+        0x01000ade:    a803        ..      ADD      r0,sp,#0xc
+        0x01000ae0:    f003ff1d    ....    BL       __aeabi_memclr ; 0x100491e
+        0x01000ae4:    4889        .H      LDR      r0,[pc,#548] ; [0x1000d0c] = 0xf8540
+        0x01000ae6:    6a00        .j      LDR      r0,[r0,#0x20]
+        0x01000ae8:    0700        ..      LSLS     r0,r0,#28
+        0x01000aea:    0f00        ..      LSRS     r0,r0,#28
+        0x01000aec:    1c81        ..      ADDS     r1,r0,#2
+        0x01000aee:    4888        .H      LDR      r0,[pc,#544] ; [0x1000d10] = 0xb71b000
+        0x01000af0:    f003fee8    ....    BL       __aeabi_idiv ; 0x10048c4
+        0x01000af4:    4607        .F      MOV      r7,r0
+        0x01000af6:    217d        }!      MOVS     r1,#0x7d
+        0x01000af8:    00c9        ..      LSLS     r1,r1,#3
+        0x01000afa:    f003fee3    ....    BL       __aeabi_idiv ; 0x10048c4
+        0x01000afe:    4606        .F      MOV      r6,r0
+        0x01000b00:    f002fed4    ....    BL       SysTick_Config ; 0x10038ac
+        0x01000b04:    a083        ..      ADR      r0,{pc}+0x210 ; 0x1000d14
+        0x01000b06:    f7fffd09    ....    BL       MyPrintf ; 0x100051c
+        0x01000b0a:    4a4d        MJ      LDR      r2,[pc,#308] ; [0x1000c40] = 0x20118
+        0x01000b0c:    3a20         :      SUBS     r2,r2,#0x20
+        0x01000b0e:    8811        ..      LDRH     r1,[r2,#0]
+        0x01000b10:    6850        Ph      LDR      r0,[r2,#4]
+        0x01000b12:    f001fc0e    ....    BL       BT_Init ; 0x1002332
+        0x01000b16:    a081        ..      ADR      r0,{pc}+0x206 ; 0x1000d1c
+        0x01000b18:    f7fffd00    ....    BL       MyPrintf ; 0x100051c
+        0x01000b1c:    200b        .       MOVS     r0,#0xb
+        0x01000b1e:    f7fffcbc    ....    BL       NVIC_EnableIRQ ; 0x100049a
+        0x01000b22:    a080        ..      ADR      r0,{pc}+0x202 ; 0x1000d24
+        0x01000b24:    f7fffcfa    ....    BL       MyPrintf ; 0x100051c
+        0x01000b28:    2102        .!      MOVS     r1,#2
+        0x01000b2a:    200b        .       MOVS     r0,#0xb
+        0x01000b2c:    f7fffc72    ..r.    BL       NVIC_SetPriority ; 0x1000414
+        0x01000b30:    210f        .!      MOVS     r1,#0xf
+        0x01000b32:    4843        CH      LDR      r0,[pc,#268] ; [0x1000c40] = 0x20118
+        0x01000b34:    3814        .8      SUBS     r0,r0,#0x14
+        0x01000b36:    f001fcea    ....    BL       BT_SetBleName ; 0x100250e
+        0x01000b3a:    2801        .(      CMP      r0,#1
+        0x01000b3c:    d105        ..      BNE      0x1000b4a ; bt_init_proc + 192
+        0x01000b3e:    4940        @I      LDR      r1,[pc,#256] ; [0x1000c40] = 0x20118
+        0x01000b40:    3914        .9      SUBS     r1,r1,#0x14
+        0x01000b42:    a07a        z.      ADR      r0,{pc}+0x1ea ; 0x1000d2c
+        0x01000b44:    f7fffcea    ....    BL       MyPrintf ; 0x100051c
+        0x01000b48:    e003        ..      B        0x1000b52 ; bt_init_proc + 200
+        0x01000b4a:    a07f        ..      ADR      r0,{pc}+0x1fe ; 0x1000d48
+        0x01000b4c:    f7fffce6    ....    BL       MyPrintf ; 0x100051c
+        0x01000b50:    2501        .%      MOVS     r5,#1
+        0x01000b52:    210f        .!      MOVS     r1,#0xf
+        0x01000b54:    483a        :H      LDR      r0,[pc,#232] ; [0x1000c40] = 0x20118
+        0x01000b56:    3814        .8      SUBS     r0,r0,#0x14
+        0x01000b58:    f001fcb4    ....    BL       BT_SetBtName ; 0x10024c4
+        0x01000b5c:    2801        .(      CMP      r0,#1
+        0x01000b5e:    d105        ..      BNE      0x1000b6c ; bt_init_proc + 226
+        0x01000b60:    4937        7I      LDR      r1,[pc,#220] ; [0x1000c40] = 0x20118
+        0x01000b62:    3914        .9      SUBS     r1,r1,#0x14
+        0x01000b64:    a07d        }.      ADR      r0,{pc}+0x1f8 ; 0x1000d5c
+        0x01000b66:    f7fffcd9    ....    BL       MyPrintf ; 0x100051c
+        0x01000b6a:    e003        ..      B        0x1000b74 ; bt_init_proc + 234
+        0x01000b6c:    a082        ..      ADR      r0,{pc}+0x20c ; 0x1000d78
+        0x01000b6e:    f7fffcd5    ....    BL       MyPrintf ; 0x100051c
+        0x01000b72:    2501        .%      MOVS     r5,#1
+        0x01000b74:    4832        2H      LDR      r0,[pc,#200] ; [0x1000c40] = 0x20118
+        0x01000b76:    f001fc40    ..@.    BL       BT_SetBleAddr ; 0x10023fa
+        0x01000b7a:    2801        .(      CMP      r0,#1
+        0x01000b7c:    d110        ..      BNE      0x1000ba0 ; bt_init_proc + 278
+        0x01000b7e:    4830        0H      LDR      r0,[pc,#192] ; [0x1000c40] = 0x20118
+        0x01000b80:    7940        @y      LDRB     r0,[r0,#5]
+        0x01000b82:    492f        /I      LDR      r1,[pc,#188] ; [0x1000c40] = 0x20118
+        0x01000b84:    7909        .y      LDRB     r1,[r1,#4]
+        0x01000b86:    4a2e        .J      LDR      r2,[pc,#184] ; [0x1000c40] = 0x20118
+        0x01000b88:    78d2        .x      LDRB     r2,[r2,#3]
+        0x01000b8a:    9200        ..      STR      r2,[sp,#0]
+        0x01000b8c:    9101        ..      STR      r1,[sp,#4]
+        0x01000b8e:    9002        ..      STR      r0,[sp,#8]
+        0x01000b90:    482b        +H      LDR      r0,[pc,#172] ; [0x1000c40] = 0x20118
+        0x01000b92:    7883        .x      LDRB     r3,[r0,#2]
+        0x01000b94:    7842        Bx      LDRB     r2,[r0,#1]
+        0x01000b96:    7801        .x      LDRB     r1,[r0,#0]
+        0x01000b98:    a07b        {.      ADR      r0,{pc}+0x1f0 ; 0x1000d88
+        0x01000b9a:    f7fffcbf    ....    BL       MyPrintf ; 0x100051c
+        0x01000b9e:    e003        ..      B        0x1000ba8 ; bt_init_proc + 286
+        0x01000ba0:    a085        ..      ADR      r0,{pc}+0x218 ; 0x1000db8
+        0x01000ba2:    f7fffcbb    ....    BL       MyPrintf ; 0x100051c
+        0x01000ba6:    2501        .%      MOVS     r5,#1
+        0x01000ba8:    4825        %H      LDR      r0,[pc,#148] ; [0x1000c40] = 0x20118
+        0x01000baa:    f001fc00    ....    BL       BT_SetBtAddr ; 0x10023ae
+        0x01000bae:    2801        .(      CMP      r0,#1
+        0x01000bb0:    d110        ..      BNE      0x1000bd4 ; bt_init_proc + 330
+        0x01000bb2:    4823        #H      LDR      r0,[pc,#140] ; [0x1000c40] = 0x20118
+        0x01000bb4:    7940        @y      LDRB     r0,[r0,#5]
+        0x01000bb6:    4922        "I      LDR      r1,[pc,#136] ; [0x1000c40] = 0x20118
+        0x01000bb8:    7909        .y      LDRB     r1,[r1,#4]
+        0x01000bba:    4a21        !J      LDR      r2,[pc,#132] ; [0x1000c40] = 0x20118
+        0x01000bbc:    78d2        .x      LDRB     r2,[r2,#3]
+        0x01000bbe:    9200        ..      STR      r2,[sp,#0]
+        0x01000bc0:    9101        ..      STR      r1,[sp,#4]
+        0x01000bc2:    9002        ..      STR      r0,[sp,#8]
+        0x01000bc4:    481e        .H      LDR      r0,[pc,#120] ; [0x1000c40] = 0x20118
+        0x01000bc6:    7883        .x      LDRB     r3,[r0,#2]
+        0x01000bc8:    7842        Bx      LDRB     r2,[r0,#1]
+        0x01000bca:    7801        .x      LDRB     r1,[r0,#0]
+        0x01000bcc:    a07f        ..      ADR      r0,{pc}+0x200 ; 0x1000dcc
+        0x01000bce:    f7fffca5    ....    BL       MyPrintf ; 0x100051c
+        0x01000bd2:    e003        ..      B        0x1000bdc ; bt_init_proc + 338
+        0x01000bd4:    a05c        \.      ADR      r0,{pc}+0x174 ; 0x1000d48
+        0x01000bd6:    f7fffca1    ....    BL       MyPrintf ; 0x100051c
+        0x01000bda:    2501        .%      MOVS     r5,#1
+        0x01000bdc:    4918        .I      LDR      r1,[pc,#96] ; [0x1000c40] = 0x20118
+        0x01000bde:    7988        .y      LDRB     r0,[r1,#6]
+        0x01000be0:    f001fd4a    ..J.    BL       BT_SetParingMode ; 0x1002678
+        0x01000be4:    2801        .(      CMP      r0,#1
+        0x01000be6:    d105        ..      BNE      0x1000bf4 ; bt_init_proc + 362
+        0x01000be8:    4815        .H      LDR      r0,[pc,#84] ; [0x1000c40] = 0x20118
+        0x01000bea:    7981        .y      LDRB     r1,[r0,#6]
+        0x01000bec:    a083        ..      ADR      r0,{pc}+0x210 ; 0x1000dfc
+        0x01000bee:    f7fffc95    ....    BL       MyPrintf ; 0x100051c
+        0x01000bf2:    e003        ..      B        0x1000bfc ; bt_init_proc + 370
+        0x01000bf4:    a088        ..      ADR      r0,{pc}+0x224 ; 0x1000e18
+        0x01000bf6:    f7fffc91    ....    BL       MyPrintf ; 0x100051c
+        0x01000bfa:    2501        .%      MOVS     r5,#1
+        0x01000bfc:    a826        &.      ADD      r0,sp,#0x98
+        0x01000bfe:    f001ffd9    ....    BL       BT_SetCOD ; 0x1002bb4
+        0x01000c02:    2801        .(      CMP      r0,#1
+        0x01000c04:    d103        ..      BNE      0x1000c0e ; bt_init_proc + 388
+        0x01000c06:    a08a        ..      ADR      r0,{pc}+0x22a ; 0x1000e30
+        0x01000c08:    f7fffc88    ....    BL       MyPrintf ; 0x100051c
+        0x01000c0c:    e003        ..      B        0x1000c16 ; bt_init_proc + 396
+        0x01000c0e:    a08c        ..      ADR      r0,{pc}+0x232 ; 0x1000e40
+        0x01000c10:    f7fffc84    ....    BL       MyPrintf ; 0x100051c
+        0x01000c14:    2501        .%      MOVS     r5,#1
+        0x01000c16:    f001fff3    ....    BL       BT_DeleteService ; 0x1002c00
+        0x01000c1a:    2801        .(      CMP      r0,#1
+        0x01000c1c:    d100        ..      BNE      0x1000c20 ; bt_init_proc + 406
+        0x01000c1e:    e117        ..      B        0x1000e50 ; bt_init_proc + 966
+        0x01000c20:    e11a        ..      B        0x1000e58 ; bt_init_proc + 974
+    $d
+        0x01000c22:    0000        ..      DCW    0
+        0x01000c24:    0002002f    /...    DCD    131119
+        0x01000c28:    00020030    0...    DCD    131120
+        0x01000c2c:    000c8040    @...    DCD    819264
+        0x01000c30:    00020005    ....    DCD    131077
+        0x01000c34:    0002003c    <...    DCD    131132
+        0x01000c38:    7fffffff    ....    DCD    2147483647
+        0x01000c3c:    00020006    ....    DCD    131078
+        0x01000c40:    00020118    ....    DCD    131352
+        0x01000c44:    42747665    evtB    DCD    1114928741
+        0x01000c48:    50505354    TSPP    DCD    1347441492
+        0x01000c4c:    656e6f43    Cone    DCD    1701736259
+        0x01000c50:    64657463    cted    DCD    1684370531
+        0x01000c54:    0000000a    ....    DCD    10
+        0x01000c58:    42747665    evtB    DCD    1114928741
+        0x01000c5c:    50505354    TSPP    DCD    1347441492
+        0x01000c60:    63736944    Disc    DCD    1668507972
+        0x01000c64:    63656e6f    onec    DCD    1667591791
+        0x01000c68:    0a646574    ted.    DCD    174351732
+        0x01000c6c:    00000000    ....    DCD    0
+        0x01000c70:    42747665    evtB    DCD    1114928741
+        0x01000c74:    454c4254    TBLE    DCD    1162625620
+        0x01000c78:    656e6f43    Cone    DCD    1701736259
+        0x01000c7c:    64657463    cted    DCD    1684370531
+        0x01000c80:    0000000a    ....    DCD    10
+        0x01000c84:    42747665    evtB    DCD    1114928741
+        0x01000c88:    454c4254    TBLE    DCD    1162625620
+        0x01000c8c:    63736944    Disc    DCD    1668507972
+        0x01000c90:    63656e6f    onec    DCD    1667591791
+        0x01000c94:    0a646574    ted.    DCD    174351732
+        0x01000c98:    00000000    ....    DCD    0
+        0x01000c9c:    00040680    ....    DCD    263808
+        0x01000ca0:    00ff0002    ....    DCD    16711682
+        0x01000ca4:    ff02020c    ....    DCD    4278321676
+        0x01000ca8:    00000001    ....    DCD    1
+        0x01000cac:    ff010210    ....    DCD    4278256144
+        0x01000cb0:    00000001    ....    DCD    1
+        0x01000cb4:    ff030210    ....    DCD    4278387216
+        0x01000cb8:    00000001    ....    DCD    1
+        0x01000cbc:    05e45510    .U..    DCD    98850064
+        0x01000cc0:    a99fafd2    ....    DCD    2845814738
+        0x01000cc4:    7d4ae58f    ..J}    DCD    2102060431
+        0x01000cc8:    554955fe    .UIU    DCD    1430869502
+        0x01000ccc:    0000004d    M...    DCD    77
+        0x01000cd0:    96161010    ....    DCD    2518028304
+        0x01000cd4:    23c64724    $G.#    DCD    600196900
+        0x01000cd8:    4bd9ba61    a..K    DCD    1272560225
+        0x01000cdc:    49551e4d    M.UI    DCD    1230315085
+        0x01000ce0:    00014d55    UM..    DCD    85333
+        0x01000ce4:    9bb3100c    ....    DCD    2612203532
+        0x01000ce8:    ecbe3472    r4..    DCD    3971888242
+        0x01000cec:    43f4a8d4    ...C    DCD    1140107476
+        0x01000cf0:    49558841    A.UI    DCD    1230342209
+        0x01000cf4:    00014d55    UM..    DCD    85333
+        0x01000cf8:    03181018    ....    DCD    51908632
+        0x01000cfc:    d85e28a6    .(^.    DCD    3630049446
+        0x01000d00:    481c91ec    ...H    DCD    1209831916
+        0x01000d04:    4955aca3    ..UI    DCD    1230351523
+        0x01000d08:    00014d55    UM..    DCD    85333
+        0x01000d0c:    000f8540    @...    DCD    1017152
+        0x01000d10:    0b71b000    ..q.    DCD    192000000
+        0x01000d14:    0a317878    xx1.    DCD    171014264
+        0x01000d18:    00000000    ....    DCD    0
+        0x01000d1c:    0a327878    xx2.    DCD    171079800
+        0x01000d20:    00000000    ....    DCD    0
+        0x01000d24:    0a337878    xx3.    DCD    171145336
+        0x01000d28:    00000000    ....    DCD    0
+        0x01000d2c:    42746553    SetB    DCD    1114924371
+        0x01000d30:    614e656c    leNa    DCD    1632527724
+        0x01000d34:    735f656d    me_s    DCD    1935631725
+        0x01000d38:    62206375    uc b    DCD    1646289781
+        0x01000d3c:    6e20656c    le n    DCD    1847616876
+        0x01000d40:    3a656d61    ame:    DCD    979725665
+        0x01000d44:    000a7325    %s..    DCD    684837
+        0x01000d48:    42746553    SetB    DCD    1114924371
+        0x01000d4c:    614e656c    leNa    DCD    1632527724
+        0x01000d50:    665f656d    me_f    DCD    1717527917
+        0x01000d54:    656c6961    aile    DCD    1701603681
+        0x01000d58:    00000a64    d...    DCD    2660
+        0x01000d5c:    62746553    Setb    DCD    1651795283
+        0x01000d60:    6d614e74    tNam    DCD    1835093620
+        0x01000d64:    75735f65    e_su    DCD    1970495333
+        0x01000d68:    70732063    c sp    DCD    1886593123
+        0x01000d6c:    616e2070    p na    DCD    1634607216
+        0x01000d70:    253a656d    me:%    DCD    624584045
+        0x01000d74:    00000a73    s...    DCD    2675
+        0x01000d78:    62746553    Setb    DCD    1651795283
+        0x01000d7c:    6d614e74    tNam    DCD    1835093620
+        0x01000d80:    61665f65    e_fa    DCD    1634099045
+        0x01000d84:    000a6c69    il..    DCD    683113
+        0x01000d88:    42746553    SetB    DCD    1114924371
+        0x01000d8c:    6441656c    leAd    DCD    1682007404
+        0x01000d90:    735f7264    dr_s    DCD    1935635044
+        0x01000d94:    253a6375    uc:%    DCD    624583541
+        0x01000d98:    20783230    02x     DCD    544748080
+        0x01000d9c:    78323025    %02x    DCD    2016555045
+        0x01000da0:    32302520     %02    DCD    842016032
+        0x01000da4:    30252078    x %0    DCD    807739512
+        0x01000da8:    25207832    2x %    DCD    622884914
+        0x01000dac:    20783230    02x     DCD    544748080
+        0x01000db0:    78323025    %02x    DCD    2016555045
+        0x01000db4:    00000a20     ...    DCD    2592
+        0x01000db8:    42746553    SetB    DCD    1114924371
+        0x01000dbc:    6441656c    leAd    DCD    1682007404
+        0x01000dc0:    665f7264    dr_f    DCD    1717531236
+        0x01000dc4:    0a6c6961    ail.    DCD    174877025
+        0x01000dc8:    00000000    ....    DCD    0
+        0x01000dcc:    42746553    SetB    DCD    1114924371
+        0x01000dd0:    64644174    tAdd    DCD    1684291956
+        0x01000dd4:    75735f72    r_su    DCD    1970495346
+        0x01000dd8:    30253a63    c:%0    DCD    807746147
+        0x01000ddc:    25207832    2x %    DCD    622884914
+        0x01000de0:    20783230    02x     DCD    544748080
+        0x01000de4:    78323025    %02x    DCD    2016555045
+        0x01000de8:    32302520     %02    DCD    842016032
+        0x01000dec:    30252078    x %0    DCD    807739512
+        0x01000df0:    25207832    2x %    DCD    622884914
+        0x01000df4:    0a783230    02x.    DCD    175649328
+        0x01000df8:    00000000    ....    DCD    0
+        0x01000dfc:    20746573    set     DCD    544499059
+        0x01000e00:    72696170    pair    DCD    1919508848
+        0x01000e04:    646f6d20     mod    DCD    1685024032
+        0x01000e08:    75732065    e su    DCD    1970479205
+        0x01000e0c:    73656363    cces    DCD    1936024419
+        0x01000e10:    64253a73    s:%d    DCD    1680161395
+        0x01000e14:    0000000a    ....    DCD    10
+        0x01000e18:    20746573    set     DCD    544499059
+        0x01000e1c:    72696170    pair    DCD    1919508848
+        0x01000e20:    646f6d20     mod    DCD    1685024032
+        0x01000e24:    61662065    e fa    DCD    1634082917
+        0x01000e28:    64656c69    iled    DCD    1684368489
+        0x01000e2c:    0000000a    ....    DCD    10
+        0x01000e30:    20746573    set     DCD    544499059
+        0x01000e34:    20444f43    COD     DCD    541347651
+        0x01000e38:    65637573    suce    DCD    1701016947
+        0x01000e3c:    000a7373    ss..    DCD    684915
+        0x01000e40:    20746573    set     DCD    544499059
+        0x01000e44:    20444f43    COD     DCD    541347651
+        0x01000e48:    6c696166    fail    DCD    1818845542
+        0x01000e4c:    000a6465    ed..    DCD    681061
+    $t
+        0x01000e50:    a0cd        ..      ADR      r0,{pc}+0x338 ; 0x1001188
+        0x01000e52:    f7fffb63    ..c.    BL       MyPrintf ; 0x100051c
+        0x01000e56:    e003        ..      B        0x1000e60 ; bt_init_proc + 982
+        0x01000e58:    a0d1        ..      ADR      r0,{pc}+0x348 ; 0x10011a0
+        0x01000e5a:    f7fffb5f    .._.    BL       MyPrintf ; 0x100051c
+        0x01000e5e:    2501        .%      MOVS     r5,#1
+        0x01000e60:    2103        .!      MOVS     r1,#3
+        0x01000e62:    a825        %.      ADD      r0,sp,#0x94
+        0x01000e64:    f001fef2    ....    BL       BT_AddBleService ; 0x1002c4c
+        0x01000e68:    4604        .F      MOV      r4,r0
+        0x01000e6a:    2c00        .,      CMP      r4,#0
+        0x01000e6c:    d004        ..      BEQ      0x1000e78 ; bt_init_proc + 1006
+        0x01000e6e:    4621        !F      MOV      r1,r4
+        0x01000e70:    a0d1        ..      ADR      r0,{pc}+0x348 ; 0x10011b8
+        0x01000e72:    f7fffb53    ..S.    BL       MyPrintf ; 0x100051c
+        0x01000e76:    e004        ..      B        0x1000e82 ; bt_init_proc + 1016
+        0x01000e78:    4621        !F      MOV      r1,r4
+        0x01000e7a:    a0d7        ..      ADR      r0,{pc}+0x35e ; 0x10011d8
+        0x01000e7c:    f7fffb4e    ..N.    BL       MyPrintf ; 0x100051c
+        0x01000e80:    2501        .%      MOVS     r5,#1
+        0x01000e82:    2106        .!      MOVS     r1,#6
+        0x01000e84:    a823        #.      ADD      r0,sp,#0x8c
+        0x01000e86:    f001ff0c    ....    BL       BT_AddBleCharacteristic ; 0x1002ca2
+        0x01000e8a:    49db        .I      LDR      r1,[pc,#876] ; [0x10011f8] = 0x200f8
+        0x01000e8c:    8588        ..      STRH     r0,[r1,#0x2c]
+        0x01000e8e:    4608        .F      MOV      r0,r1
+        0x01000e90:    8d80        ..      LDRH     r0,[r0,#0x2c]
+        0x01000e92:    2800        .(      CMP      r0,#0
+        0x01000e94:    d005        ..      BEQ      0x1000ea2 ; bt_init_proc + 1048
+        0x01000e96:    4608        .F      MOV      r0,r1
+        0x01000e98:    8d81        ..      LDRH     r1,[r0,#0x2c]
+        0x01000e9a:    a0d8        ..      ADR      r0,{pc}+0x362 ; 0x10011fc
+        0x01000e9c:    f7fffb3e    ..>.    BL       MyPrintf ; 0x100051c
+        0x01000ea0:    e005        ..      B        0x1000eae ; bt_init_proc + 1060
+        0x01000ea2:    48d5        .H      LDR      r0,[pc,#852] ; [0x10011f8] = 0x200f8
+        0x01000ea4:    8d81        ..      LDRH     r1,[r0,#0x2c]
+        0x01000ea6:    a0e0        ..      ADR      r0,{pc}+0x382 ; 0x1001228
+        0x01000ea8:    f7fffb38    ..8.    BL       MyPrintf ; 0x100051c
+        0x01000eac:    2501        .%      MOVS     r5,#1
+        0x01000eae:    2106        .!      MOVS     r1,#6
+        0x01000eb0:    a821        !.      ADD      r0,sp,#0x84
+        0x01000eb2:    f001fef6    ....    BL       BT_AddBleCharacteristic ; 0x1002ca2
+        0x01000eb6:    49d0        .I      LDR      r1,[pc,#832] ; [0x10011f8] = 0x200f8
+        0x01000eb8:    85c8        ..      STRH     r0,[r1,#0x2e]
+        0x01000eba:    4608        .F      MOV      r0,r1
+        0x01000ebc:    8dc0        ..      LDRH     r0,[r0,#0x2e]
+        0x01000ebe:    2800        .(      CMP      r0,#0
+        0x01000ec0:    d005        ..      BEQ      0x1000ece ; bt_init_proc + 1092
+        0x01000ec2:    4608        .F      MOV      r0,r1
+        0x01000ec4:    8dc1        ..      LDRH     r1,[r0,#0x2e]
+        0x01000ec6:    a0e3        ..      ADR      r0,{pc}+0x38e ; 0x1001254
+        0x01000ec8:    f7fffb28    ..(.    BL       MyPrintf ; 0x100051c
+        0x01000ecc:    e005        ..      B        0x1000eda ; bt_init_proc + 1104
+        0x01000ece:    48ca        .H      LDR      r0,[pc,#808] ; [0x10011f8] = 0x200f8
+        0x01000ed0:    8dc1        ..      LDRH     r1,[r0,#0x2e]
+        0x01000ed2:    a0eb        ..      ADR      r0,{pc}+0x3ae ; 0x1001280
+        0x01000ed4:    f7fffb22    ..".    BL       MyPrintf ; 0x100051c
+        0x01000ed8:    2501        .%      MOVS     r5,#1
+        0x01000eda:    2106        .!      MOVS     r1,#6
+        0x01000edc:    a81f        ..      ADD      r0,sp,#0x7c
+        0x01000ede:    f001fee0    ....    BL       BT_AddBleCharacteristic ; 0x1002ca2
+        0x01000ee2:    49c5        .I      LDR      r1,[pc,#788] ; [0x10011f8] = 0x200f8
+        0x01000ee4:    8608        ..      STRH     r0,[r1,#0x30]
+        0x01000ee6:    4608        .F      MOV      r0,r1
+        0x01000ee8:    8e00        ..      LDRH     r0,[r0,#0x30]
+        0x01000eea:    2800        .(      CMP      r0,#0
+        0x01000eec:    d005        ..      BEQ      0x1000efa ; bt_init_proc + 1136
+        0x01000eee:    4608        .F      MOV      r0,r1
+        0x01000ef0:    8e01        ..      LDRH     r1,[r0,#0x30]
+        0x01000ef2:    a0ee        ..      ADR      r0,{pc}+0x3ba ; 0x10012ac
+        0x01000ef4:    f7fffb12    ....    BL       MyPrintf ; 0x100051c
+        0x01000ef8:    e005        ..      B        0x1000f06 ; bt_init_proc + 1148
+        0x01000efa:    48bf        .H      LDR      r0,[pc,#764] ; [0x10011f8] = 0x200f8
+        0x01000efc:    8e01        ..      LDRH     r1,[r0,#0x30]
+        0x01000efe:    a0f8        ..      ADR      r0,{pc}+0x3e2 ; 0x10012e0
+        0x01000f00:    f7fffb0c    ....    BL       MyPrintf ; 0x100051c
+        0x01000f04:    2501        .%      MOVS     r5,#1
+        0x01000f06:    2111        .!      MOVS     r1,#0x11
+        0x01000f08:    a81a        ..      ADD      r0,sp,#0x68
+        0x01000f0a:    f001fe9f    ....    BL       BT_AddBleService ; 0x1002c4c
+        0x01000f0e:    4604        .F      MOV      r4,r0
+        0x01000f10:    2c00        .,      CMP      r4,#0
+        0x01000f12:    d004        ..      BEQ      0x1000f1e ; bt_init_proc + 1172
+        0x01000f14:    4621        !F      MOV      r1,r4
+        0x01000f16:    a0a8        ..      ADR      r0,{pc}+0x2a2 ; 0x10011b8
+        0x01000f18:    f7fffb00    ....    BL       MyPrintf ; 0x100051c
+        0x01000f1c:    e004        ..      B        0x1000f28 ; bt_init_proc + 1182
+        0x01000f1e:    4621        !F      MOV      r1,r4
+        0x01000f20:    a0ad        ..      ADR      r0,{pc}+0x2b8 ; 0x10011d8
+        0x01000f22:    f7fffafb    ....    BL       MyPrintf ; 0x100051c
+        0x01000f26:    2501        .%      MOVS     r5,#1
+        0x01000f28:    2114        .!      MOVS     r1,#0x14
+        0x01000f2a:    a815        ..      ADD      r0,sp,#0x54
+        0x01000f2c:    f001feb9    ....    BL       BT_AddBleCharacteristic ; 0x1002ca2
+        0x01000f30:    49b1        .I      LDR      r1,[pc,#708] ; [0x10011f8] = 0x200f8
+        0x01000f32:    8608        ..      STRH     r0,[r1,#0x30]
+        0x01000f34:    4608        .F      MOV      r0,r1
+        0x01000f36:    8e00        ..      LDRH     r0,[r0,#0x30]
+        0x01000f38:    2800        .(      CMP      r0,#0
+        0x01000f3a:    d005        ..      BEQ      0x1000f48 ; bt_init_proc + 1214
+        0x01000f3c:    4608        .F      MOV      r0,r1
+        0x01000f3e:    8e01        ..      LDRH     r1,[r0,#0x30]
+        0x01000f40:    a0da        ..      ADR      r0,{pc}+0x36c ; 0x10012ac
+        0x01000f42:    f7fffaeb    ....    BL       MyPrintf ; 0x100051c
+        0x01000f46:    e005        ..      B        0x1000f54 ; bt_init_proc + 1226
+        0x01000f48:    48ab        .H      LDR      r0,[pc,#684] ; [0x10011f8] = 0x200f8
+        0x01000f4a:    8e01        ..      LDRH     r1,[r0,#0x30]
+        0x01000f4c:    a0e4        ..      ADR      r0,{pc}+0x394 ; 0x10012e0
+        0x01000f4e:    f7fffae5    ....    BL       MyPrintf ; 0x100051c
+        0x01000f52:    2501        .%      MOVS     r5,#1
+        0x01000f54:    2114        .!      MOVS     r1,#0x14
+        0x01000f56:    a810        ..      ADD      r0,sp,#0x40
+        0x01000f58:    f001fea3    ....    BL       BT_AddBleCharacteristic ; 0x1002ca2
+        0x01000f5c:    49a6        .I      LDR      r1,[pc,#664] ; [0x10011f8] = 0x200f8
+        0x01000f5e:    8608        ..      STRH     r0,[r1,#0x30]
+        0x01000f60:    4608        .F      MOV      r0,r1
+        0x01000f62:    8e00        ..      LDRH     r0,[r0,#0x30]
+        0x01000f64:    2800        .(      CMP      r0,#0
+        0x01000f66:    d005        ..      BEQ      0x1000f74 ; bt_init_proc + 1258
+        0x01000f68:    4608        .F      MOV      r0,r1
+        0x01000f6a:    8e01        ..      LDRH     r1,[r0,#0x30]
+        0x01000f6c:    a0cf        ..      ADR      r0,{pc}+0x340 ; 0x10012ac
+        0x01000f6e:    f7fffad5    ....    BL       MyPrintf ; 0x100051c
+        0x01000f72:    e005        ..      B        0x1000f80 ; bt_init_proc + 1270
+        0x01000f74:    48a0        .H      LDR      r0,[pc,#640] ; [0x10011f8] = 0x200f8
+        0x01000f76:    8e01        ..      LDRH     r1,[r0,#0x30]
+        0x01000f78:    a0d9        ..      ADR      r0,{pc}+0x368 ; 0x10012e0
+        0x01000f7a:    f7fffacf    ....    BL       MyPrintf ; 0x100051c
+        0x01000f7e:    2501        .%      MOVS     r5,#1
+        0x01000f80:    2106        .!      MOVS     r1,#6
+        0x01000f82:    a81f        ..      ADD      r0,sp,#0x7c
+        0x01000f84:    f001fe8d    ....    BL       BT_AddBleCharacteristic ; 0x1002ca2
+        0x01000f88:    499b        .I      LDR      r1,[pc,#620] ; [0x10011f8] = 0x200f8
+        0x01000f8a:    8608        ..      STRH     r0,[r1,#0x30]
+        0x01000f8c:    4608        .F      MOV      r0,r1
+        0x01000f8e:    8e00        ..      LDRH     r0,[r0,#0x30]
+        0x01000f90:    2800        .(      CMP      r0,#0
+        0x01000f92:    d005        ..      BEQ      0x1000fa0 ; bt_init_proc + 1302
+        0x01000f94:    4608        .F      MOV      r0,r1
+        0x01000f96:    8e01        ..      LDRH     r1,[r0,#0x30]
+        0x01000f98:    a0c4        ..      ADR      r0,{pc}+0x314 ; 0x10012ac
+        0x01000f9a:    f7fffabf    ....    BL       MyPrintf ; 0x100051c
+        0x01000f9e:    e005        ..      B        0x1000fac ; bt_init_proc + 1314
+        0x01000fa0:    4895        .H      LDR      r0,[pc,#596] ; [0x10011f8] = 0x200f8
+        0x01000fa2:    8e01        ..      LDRH     r1,[r0,#0x30]
+        0x01000fa4:    a0ce        ..      ADR      r0,{pc}+0x33c ; 0x10012e0
+        0x01000fa6:    f7fffab9    ....    BL       MyPrintf ; 0x100051c
+        0x01000faa:    2501        .%      MOVS     r5,#1
+        0x01000fac:    ab03        ..      ADD      r3,sp,#0xc
+        0x01000fae:    4a92        .J      LDR      r2,[pc,#584] ; [0x10011f8] = 0x200f8
+        0x01000fb0:    3220         2      ADDS     r2,r2,#0x20
+        0x01000fb2:    210f        .!      MOVS     r1,#0xf
+        0x01000fb4:    4610        .F      MOV      r0,r2
+        0x01000fb6:    3814        .8      SUBS     r0,r0,#0x14
+        0x01000fb8:    f7fffd23    ..#.    BL       genBleAdvData ; 0x1000a02
+        0x01000fbc:    211f        .!      MOVS     r1,#0x1f
+        0x01000fbe:    a803        ..      ADD      r0,sp,#0xc
+        0x01000fc0:    f001fcdb    ....    BL       BT_SetLEAdvData ; 0x100297a
+        0x01000fc4:    2801        .(      CMP      r0,#1
+        0x01000fc6:    d103        ..      BNE      0x1000fd0 ; bt_init_proc + 1350
+        0x01000fc8:    a0d2        ..      ADR      r0,{pc}+0x34c ; 0x1001314
+        0x01000fca:    f7fffaa7    ....    BL       MyPrintf ; 0x100051c
+        0x01000fce:    e003        ..      B        0x1000fd8 ; bt_init_proc + 1358
+        0x01000fd0:    a0d6        ..      ADR      r0,{pc}+0x35c ; 0x100132c
+        0x01000fd2:    f7fffaa3    ....    BL       MyPrintf ; 0x100051c
+        0x01000fd6:    2501        .%      MOVS     r5,#1
+        0x01000fd8:    211f        .!      MOVS     r1,#0x1f
+        0x01000fda:    a803        ..      ADD      r0,sp,#0xc
+        0x01000fdc:    f001fcf3    ....    BL       BT_SetLEScanData ; 0x10029c6
+        0x01000fe0:    2801        .(      CMP      r0,#1
+        0x01000fe2:    d103        ..      BNE      0x1000fec ; bt_init_proc + 1378
+        0x01000fe4:    a0d7        ..      ADR      r0,{pc}+0x360 ; 0x1001344
+        0x01000fe6:    f7fffa99    ....    BL       MyPrintf ; 0x100051c
+        0x01000fea:    e003        ..      B        0x1000ff4 ; bt_init_proc + 1386
+        0x01000fec:    a0dc        ..      ADR      r0,{pc}+0x374 ; 0x1001360
+        0x01000fee:    f7fffa95    ....    BL       MyPrintf ; 0x100051c
+        0x01000ff2:    2501        .%      MOVS     r5,#1
+        0x01000ff4:    2201        ."      MOVS     r2,#1
+        0x01000ff6:    4611        .F      MOV      r1,r2
+        0x01000ff8:    4610        .F      MOV      r0,r2
+        0x01000ffa:    f001fa24    ..$.    BL       BT_SetVisibility ; 0x1002446
+        0x01000ffe:    2801        .(      CMP      r0,#1
+        0x01001000:    d103        ..      BNE      0x100100a ; bt_init_proc + 1408
+        0x01001002:    a0de        ..      ADR      r0,{pc}+0x37a ; 0x100137c
+        0x01001004:    f7fffa8a    ....    BL       MyPrintf ; 0x100051c
+        0x01001008:    e003        ..      B        0x1001012 ; bt_init_proc + 1416
+        0x0100100a:    a0e2        ..      ADR      r0,{pc}+0x38a ; 0x1001394
+        0x0100100c:    f7fffa86    ....    BL       MyPrintf ; 0x100051c
+        0x01001010:    2501        .%      MOVS     r5,#1
+        0x01001012:    f001fba5    ....    BL       BT_GetVersion ; 0x1002760
+        0x01001016:    4978        xI      LDR      r1,[pc,#480] ; [0x10011f8] = 0x200f8
+        0x01001018:    6288        .b      STR      r0,[r1,#0x28]
+        0x0100101a:    4608        .F      MOV      r0,r1
+        0x0100101c:    6a81        .j      LDR      r1,[r0,#0x28]
+        0x0100101e:    a0e3        ..      ADR      r0,{pc}+0x38e ; 0x10013ac
+        0x01001020:    f7fffa7c    ..|.    BL       MyPrintf ; 0x100051c
+        0x01001024:    4628        (F      MOV      r0,r5
+        0x01001026:    b027        '.      ADD      sp,sp,#0x9c
+        0x01001028:    bdf0        ..      POP      {r4-r7,pc}
+    bt_write
+        0x0100102a:    b570        p.      PUSH     {r4-r6,lr}
+        0x0100102c:    4605        .F      MOV      r5,r0
+        0x0100102e:    460c        .F      MOV      r4,r1
+        0x01001030:    4971        qI      LDR      r1,[pc,#452] ; [0x10011f8] = 0x200f8
+        0x01001032:    6888        .h      LDR      r0,[r1,#8]
+        0x01001034:    21ff        .!      MOVS     r1,#0xff
+        0x01001036:    3101        .1      ADDS     r1,#1
+        0x01001038:    f003fc71    ..q.    BL       __aeabi_memclr ; 0x100491e
+        0x0100103c:    f001f905    ....    BL       prt_get_bt_type ; 0x100224a
+        0x01001040:    2808        .(      CMP      r0,#8
+        0x01001042:    d118        ..      BNE      0x1001076 ; bt_write + 76
+        0x01001044:    496c        lI      LDR      r1,[pc,#432] ; [0x10011f8] = 0x200f8
+        0x01001046:    6889        .h      LDR      r1,[r1,#8]
+        0x01001048:    1c88        ..      ADDS     r0,r1,#2
+        0x0100104a:    4622        "F      MOV      r2,r4
+        0x0100104c:    4629        )F      MOV      r1,r5
+        0x0100104e:    f003fc4d    ..M.    BL       __aeabi_memcpy ; 0x10048ec
+        0x01001052:    4869        iH      LDR      r0,[pc,#420] ; [0x10011f8] = 0x200f8
+        0x01001054:    8dc0        ..      LDRH     r0,[r0,#0x2e]
+        0x01001056:    4968        hI      LDR      r1,[pc,#416] ; [0x10011f8] = 0x200f8
+        0x01001058:    6889        .h      LDR      r1,[r1,#8]
+        0x0100105a:    7008        .p      STRB     r0,[r1,#0]
+        0x0100105c:    4866        fH      LDR      r0,[pc,#408] ; [0x10011f8] = 0x200f8
+        0x0100105e:    8dc0        ..      LDRH     r0,[r0,#0x2e]
+        0x01001060:    1200        ..      ASRS     r0,r0,#8
+        0x01001062:    4965        eI      LDR      r1,[pc,#404] ; [0x10011f8] = 0x200f8
+        0x01001064:    6889        .h      LDR      r1,[r1,#8]
+        0x01001066:    7048        Hp      STRB     r0,[r1,#1]
+        0x01001068:    1ca2        ..      ADDS     r2,r4,#2
+        0x0100106a:    b291        ..      UXTH     r1,r2
+        0x0100106c:    4a62        bJ      LDR      r2,[pc,#392] ; [0x10011f8] = 0x200f8
+        0x0100106e:    6890        .h      LDR      r0,[r2,#8]
+        0x01001070:    f001fa9d    ....    BL       BT_SendBleData ; 0x10025ae
+        0x01001074:    e00a        ..      B        0x100108c ; bt_write + 98
+        0x01001076:    4960        `I      LDR      r1,[pc,#384] ; [0x10011f8] = 0x200f8
+        0x01001078:    4622        "F      MOV      r2,r4
+        0x0100107a:    6888        .h      LDR      r0,[r1,#8]
+        0x0100107c:    4629        )F      MOV      r1,r5
+        0x0100107e:    f003fc35    ..5.    BL       __aeabi_memcpy ; 0x10048ec
+        0x01001082:    b2a1        ..      UXTH     r1,r4
+        0x01001084:    4a5c        \J      LDR      r2,[pc,#368] ; [0x10011f8] = 0x200f8
+        0x01001086:    6890        .h      LDR      r0,[r2,#8]
+        0x01001088:    f001fa66    ..f.    BL       BT_SendSppData ; 0x1002558
+        0x0100108c:    bd70        p.      POP      {r4-r6,pc}
+    prt_printbuf_data_parse
+        0x0100108e:    b510        ..      PUSH     {r4,lr}
+        0x01001090:    4604        .F      MOV      r4,r0
+        0x01001092:    48ca        .H      LDR      r0,[pc,#808] ; [0x10013bc] = 0x20016
+        0x01001094:    7800        .x      LDRB     r0,[r0,#0]
+        0x01001096:    2801        .(      CMP      r0,#1
+        0x01001098:    d106        ..      BNE      0x10010a8 ; prt_printbuf_data_parse + 26
+        0x0100109a:    7820         x      LDRB     r0,[r4,#0]
+        0x0100109c:    49c8        .I      LDR      r1,[pc,#800] ; [0x10013c0] = 0x20017
+        0x0100109e:    7809        .x      LDRB     r1,[r1,#0]
+        0x010010a0:    4048        H@      EORS     r0,r0,r1
+        0x010010a2:    7020         p      STRB     r0,[r4,#0]
+        0x010010a4:    2000        .       MOVS     r0,#0
+        0x010010a6:    bd10        ..      POP      {r4,pc}
+        0x010010a8:    48c6        .H      LDR      r0,[pc,#792] ; [0x10013c4] = 0x20018
+        0x010010aa:    7800        .x      LDRB     r0,[r0,#0]
+        0x010010ac:    0003        ..      MOVS     r3,r0
+        0x010010ae:    f003fc6d    ..m.    BL       __ARM_common_switch8 ; 0x100498c
+    $d
+        0x010010b2:    060a        ..      DCW    1546
+        0x010010b4:    36291c0f    ..)6    DCD    908663823
+        0x010010b8:    695d5043    CP]i    DCD    1767723075
+        0x010010bc:    6768        hg      DCW    26472
+    $t
+        0x010010be:    7820         x      LDRB     r0,[r4,#0]
+        0x010010c0:    281b        .(      CMP      r0,#0x1b
+        0x010010c2:    d104        ..      BNE      0x10010ce ; prt_printbuf_data_parse + 64
+        0x010010c4:    48bf        .H      LDR      r0,[pc,#764] ; [0x10013c4] = 0x20018
+        0x010010c6:    7800        .x      LDRB     r0,[r0,#0]
+        0x010010c8:    1c40        @.      ADDS     r0,r0,#1
+        0x010010ca:    49be        .I      LDR      r1,[pc,#760] ; [0x10013c4] = 0x20018
+        0x010010cc:    7008        .p      STRB     r0,[r1,#0]
+        0x010010ce:    e19e        ..      B        0x100140e ; prt_printbuf_data_parse + 896
+        0x010010d0:    7820         x      LDRB     r0,[r4,#0]
+        0x010010d2:    281c        .(      CMP      r0,#0x1c
+        0x010010d4:    d105        ..      BNE      0x10010e2 ; prt_printbuf_data_parse + 84
+        0x010010d6:    48bb        .H      LDR      r0,[pc,#748] ; [0x10013c4] = 0x20018
+        0x010010d8:    7800        .x      LDRB     r0,[r0,#0]
+        0x010010da:    1c40        @.      ADDS     r0,r0,#1
+        0x010010dc:    49b9        .I      LDR      r1,[pc,#740] ; [0x10013c4] = 0x20018
+        0x010010de:    7008        .p      STRB     r0,[r1,#0]
+        0x010010e0:    e002        ..      B        0x10010e8 ; prt_printbuf_data_parse + 90
+        0x010010e2:    2000        .       MOVS     r0,#0
+        0x010010e4:    49b7        .I      LDR      r1,[pc,#732] ; [0x10013c4] = 0x20018
+        0x010010e6:    7008        .p      STRB     r0,[r1,#0]
+        0x010010e8:    e191        ..      B        0x100140e ; prt_printbuf_data_parse + 896
+        0x010010ea:    7820         x      LDRB     r0,[r4,#0]
+        0x010010ec:    2873        s(      CMP      r0,#0x73
+        0x010010ee:    d105        ..      BNE      0x10010fc ; prt_printbuf_data_parse + 110
+        0x010010f0:    48b4        .H      LDR      r0,[pc,#720] ; [0x10013c4] = 0x20018
+        0x010010f2:    7800        .x      LDRB     r0,[r0,#0]
+        0x010010f4:    1c40        @.      ADDS     r0,r0,#1
+        0x010010f6:    49b3        .I      LDR      r1,[pc,#716] ; [0x10013c4] = 0x20018
+        0x010010f8:    7008        .p      STRB     r0,[r1,#0]
+        0x010010fa:    e002        ..      B        0x1001102 ; prt_printbuf_data_parse + 116
+        0x010010fc:    2000        .       MOVS     r0,#0
+        0x010010fe:    49b1        .I      LDR      r1,[pc,#708] ; [0x10013c4] = 0x20018
+        0x01001100:    7008        .p      STRB     r0,[r1,#0]
+        0x01001102:    e184        ..      B        0x100140e ; prt_printbuf_data_parse + 896
+        0x01001104:    7820         x      LDRB     r0,[r4,#0]
+        0x01001106:    2865        e(      CMP      r0,#0x65
+        0x01001108:    d105        ..      BNE      0x1001116 ; prt_printbuf_data_parse + 136
+        0x0100110a:    48ae        .H      LDR      r0,[pc,#696] ; [0x10013c4] = 0x20018
+        0x0100110c:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100110e:    1c40        @.      ADDS     r0,r0,#1
+        0x01001110:    49ac        .I      LDR      r1,[pc,#688] ; [0x10013c4] = 0x20018
+        0x01001112:    7008        .p      STRB     r0,[r1,#0]
+        0x01001114:    e002        ..      B        0x100111c ; prt_printbuf_data_parse + 142
+        0x01001116:    2000        .       MOVS     r0,#0
+        0x01001118:    49aa        .I      LDR      r1,[pc,#680] ; [0x10013c4] = 0x20018
+        0x0100111a:    7008        .p      STRB     r0,[r1,#0]
+        0x0100111c:    e177        w.      B        0x100140e ; prt_printbuf_data_parse + 896
+        0x0100111e:    7820         x      LDRB     r0,[r4,#0]
+        0x01001120:    2874        t(      CMP      r0,#0x74
+        0x01001122:    d105        ..      BNE      0x1001130 ; prt_printbuf_data_parse + 162
+        0x01001124:    48a7        .H      LDR      r0,[pc,#668] ; [0x10013c4] = 0x20018
+        0x01001126:    7800        .x      LDRB     r0,[r0,#0]
+        0x01001128:    1c40        @.      ADDS     r0,r0,#1
+        0x0100112a:    49a6        .I      LDR      r1,[pc,#664] ; [0x10013c4] = 0x20018
+        0x0100112c:    7008        .p      STRB     r0,[r1,#0]
+        0x0100112e:    e002        ..      B        0x1001136 ; prt_printbuf_data_parse + 168
+        0x01001130:    2000        .       MOVS     r0,#0
+        0x01001132:    49a4        .I      LDR      r1,[pc,#656] ; [0x10013c4] = 0x20018
+        0x01001134:    7008        .p      STRB     r0,[r1,#0]
+        0x01001136:    e16a        j.      B        0x100140e ; prt_printbuf_data_parse + 896
+        0x01001138:    7820         x      LDRB     r0,[r4,#0]
+        0x0100113a:    2820         (      CMP      r0,#0x20
+        0x0100113c:    d105        ..      BNE      0x100114a ; prt_printbuf_data_parse + 188
+        0x0100113e:    48a1        .H      LDR      r0,[pc,#644] ; [0x10013c4] = 0x20018
+        0x01001140:    7800        .x      LDRB     r0,[r0,#0]
+        0x01001142:    1c40        @.      ADDS     r0,r0,#1
+        0x01001144:    499f        .I      LDR      r1,[pc,#636] ; [0x10013c4] = 0x20018
+        0x01001146:    7008        .p      STRB     r0,[r1,#0]
+        0x01001148:    e002        ..      B        0x1001150 ; prt_printbuf_data_parse + 194
+        0x0100114a:    2000        .       MOVS     r0,#0
+        0x0100114c:    499d        .I      LDR      r1,[pc,#628] ; [0x10013c4] = 0x20018
+        0x0100114e:    7008        .p      STRB     r0,[r1,#0]
+        0x01001150:    e15d        ].      B        0x100140e ; prt_printbuf_data_parse + 896
+        0x01001152:    7820         x      LDRB     r0,[r4,#0]
+        0x01001154:    286d        m(      CMP      r0,#0x6d
+        0x01001156:    d105        ..      BNE      0x1001164 ; prt_printbuf_data_parse + 214
+        0x01001158:    489a        .H      LDR      r0,[pc,#616] ; [0x10013c4] = 0x20018
+        0x0100115a:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100115c:    1c40        @.      ADDS     r0,r0,#1
+        0x0100115e:    4999        .I      LDR      r1,[pc,#612] ; [0x10013c4] = 0x20018
+        0x01001160:    7008        .p      STRB     r0,[r1,#0]
+        0x01001162:    e002        ..      B        0x100116a ; prt_printbuf_data_parse + 220
+        0x01001164:    2000        .       MOVS     r0,#0
+        0x01001166:    4997        .I      LDR      r1,[pc,#604] ; [0x10013c4] = 0x20018
+        0x01001168:    7008        .p      STRB     r0,[r1,#0]
+        0x0100116a:    e150        P.      B        0x100140e ; prt_printbuf_data_parse + 896
+        0x0100116c:    7820         x      LDRB     r0,[r4,#0]
+        0x0100116e:    286d        m(      CMP      r0,#0x6d
+        0x01001170:    d105        ..      BNE      0x100117e ; prt_printbuf_data_parse + 240
+        0x01001172:    4894        .H      LDR      r0,[pc,#592] ; [0x10013c4] = 0x20018
+        0x01001174:    7800        .x      LDRB     r0,[r0,#0]
+        0x01001176:    1c40        @.      ADDS     r0,r0,#1
+        0x01001178:    4992        .I      LDR      r1,[pc,#584] ; [0x10013c4] = 0x20018
+        0x0100117a:    7008        .p      STRB     r0,[r1,#0]
+        0x0100117c:    e127        '.      B        0x10013ce ; prt_printbuf_data_parse + 832
+        0x0100117e:    e123        #.      B        0x10013c8 ; prt_printbuf_data_parse + 826
+        0x01001180:    e141        A.      B        0x1001406 ; prt_printbuf_data_parse + 888
+        0x01001182:    e12e        ..      B        0x10013e2 ; prt_printbuf_data_parse + 852
+        0x01001184:    e124        $.      B        0x10013d0 ; prt_printbuf_data_parse + 834
+    $d
+        0x01001186:    0000        ..      DCW    0
+        0x01001188:    656c6564    dele    DCD    1701602660
+        0x0100118c:    73206574    te s    DCD    1931502964
+        0x01001190:    69767265    ervi    DCD    1769370213
+        0x01001194:    73206563    ce s    DCD    1931502947
+        0x01001198:    73656375    uces    DCD    1936024437
+        0x0100119c:    00000a73    s...    DCD    2675
+        0x010011a0:    656c6564    dele    DCD    1701602660
+        0x010011a4:    73206574    te s    DCD    1931502964
+        0x010011a8:    69767265    ervi    DCD    1769370213
+        0x010011ac:    66206563    ce f    DCD    1713399139
+        0x010011b0:    656c6961    aile    DCD    1701603681
+        0x010011b4:    00000a64    d...    DCD    2660
+        0x010011b8:    20646461    add     DCD    543450209
+        0x010011bc:    76726573    serv    DCD    1987208563
+        0x010011c0:    20656369    ice     DCD    543515497
+        0x010011c4:    65637573    suce    DCD    1701016947
+        0x010011c8:    682c7373    ss,h    DCD    1747743603
+        0x010011cc:    6c646e61    andl    DCD    1818521185
+        0x010011d0:    30253d65    e=%0    DCD    807746917
+        0x010011d4:    000a7834    4x..    DCD    686132
+        0x010011d8:    20646461    add     DCD    543450209
+        0x010011dc:    76726573    serv    DCD    1987208563
+        0x010011e0:    20656369    ice     DCD    543515497
+        0x010011e4:    6c696166    fail    DCD    1818845542
+        0x010011e8:    722c6465    ed,r    DCD    1915511909
+        0x010011ec:    72757465    etur    DCD    1920300133
+        0x010011f0:    30253d6e    n=%0    DCD    807746926
+        0x010011f4:    000a7834    4x..    DCD    686132
+        0x010011f8:    000200f8    ....    DCD    131320
+        0x010011fc:    20646461    add     DCD    543450209
+        0x01001200:    72616843    Char    DCD    1918986307
+        0x01001204:    65746361    acte    DCD    1702126433
+        0x01001208:    74736972    rist    DCD    1953720690
+        0x0100120c:    74206369    ic t    DCD    1948279657
+        0x01001210:    75732078    x su    DCD    1970479224
+        0x01001214:    73736563    cess    DCD    1936942435
+        0x01001218:    6e61682c    ,han    DCD    1851877420
+        0x0100121c:    3d656c64    dle=    DCD    1030057060
+        0x01001220:    78343025    %04x    DCD    2016686117
+        0x01001224:    0000000a    ....    DCD    10
+        0x01001228:    20646461    add     DCD    543450209
+        0x0100122c:    72616843    Char    DCD    1918986307
+        0x01001230:    65746361    acte    DCD    1702126433
+        0x01001234:    74736972    rist    DCD    1953720690
+        0x01001238:    74206369    ic t    DCD    1948279657
+        0x0100123c:    61662078    x fa    DCD    1634082936
+        0x01001240:    64656c69    iled    DCD    1684368489
+        0x01001244:    7465722c    ,ret    DCD    1952805420
+        0x01001248:    3d6e7275    urn=    DCD    1030648437
+        0x0100124c:    78343025    %04x    DCD    2016686117
+        0x01001250:    0000000a    ....    DCD    10
+        0x01001254:    20646461    add     DCD    543450209
+        0x01001258:    72616843    Char    DCD    1918986307
+        0x0100125c:    65746361    acte    DCD    1702126433
+        0x01001260:    74736972    rist    DCD    1953720690
+        0x01001264:    72206369    ic r    DCD    1914725225
+        0x01001268:    75732078    x su    DCD    1970479224
+        0x0100126c:    73736563    cess    DCD    1936942435
+        0x01001270:    6e61683b    ;han    DCD    1851877435
+        0x01001274:    3d656c64    dle=    DCD    1030057060
+        0x01001278:    78343025    %04x    DCD    2016686117
+        0x0100127c:    0000000a    ....    DCD    10
+        0x01001280:    20646461    add     DCD    543450209
+        0x01001284:    72616843    Char    DCD    1918986307
+        0x01001288:    65746361    acte    DCD    1702126433
+        0x0100128c:    74736972    rist    DCD    1953720690
+        0x01001290:    72206369    ic r    DCD    1914725225
+        0x01001294:    61662078    x fa    DCD    1634082936
+        0x01001298:    64656c69    iled    DCD    1684368489
+        0x0100129c:    7465722c    ,ret    DCD    1952805420
+        0x010012a0:    3d6e7275    urn=    DCD    1030648437
+        0x010012a4:    78343025    %04x    DCD    2016686117
+        0x010012a8:    0000000a    ....    DCD    10
+        0x010012ac:    20646461    add     DCD    543450209
+        0x010012b0:    72616843    Char    DCD    1918986307
+        0x010012b4:    65746361    acte    DCD    1702126433
+        0x010012b8:    74736972    rist    DCD    1953720690
+        0x010012bc:    66206369    ic f    DCD    1713398633
+        0x010012c0:    5f776f6c    low_    DCD    1601662828
+        0x010012c4:    6c727463    ctrl    DCD    1819440227
+        0x010012c8:    63757320     suc    DCD    1668641568
+        0x010012cc:    3b737365    ess;    DCD    997421925
+        0x010012d0:    646e6168    hand    DCD    1684955496
+        0x010012d4:    253d656c    le=%    DCD    624780652
+        0x010012d8:    0a783430    04x.    DCD    175649840
+        0x010012dc:    00000000    ....    DCD    0
+        0x010012e0:    20646461    add     DCD    543450209
+        0x010012e4:    72616843    Char    DCD    1918986307
+        0x010012e8:    65746361    acte    DCD    1702126433
+        0x010012ec:    74736972    rist    DCD    1953720690
+        0x010012f0:    66206369    ic f    DCD    1713398633
+        0x010012f4:    5f776f6c    low_    DCD    1601662828
+        0x010012f8:    6c727463    ctrl    DCD    1819440227
+        0x010012fc:    69616620     fai    DCD    1767990816
+        0x01001300:    2c64656c    led,    DCD    744777068
+        0x01001304:    75746572    retu    DCD    1970562418
+        0x01001308:    253d6e72    rn=%    DCD    624782962
+        0x0100130c:    0a783430    04x.    DCD    175649840
+        0x01001310:    00000000    ....    DCD    0
+        0x01001314:    535f5442    BT_S    DCD    1398756418
+        0x01001318:    454c7465    etLE    DCD    1162638437
+        0x0100131c:    44766441    AdvD    DCD    1148609601
+        0x01001320:    20617461    ata     DCD    543257697
+        0x01001324:    65637573    suce    DCD    1701016947
+        0x01001328:    000a7373    ss..    DCD    684915
+        0x0100132c:    535f5442    BT_S    DCD    1398756418
+        0x01001330:    454c7465    etLE    DCD    1162638437
+        0x01001334:    44766441    AdvD    DCD    1148609601
+        0x01001338:    20617461    ata     DCD    543257697
+        0x0100133c:    6c696166    fail    DCD    1818845542
+        0x01001340:    000a6465    ed..    DCD    681061
+        0x01001344:    535f5442    BT_S    DCD    1398756418
+        0x01001348:    454c7465    etLE    DCD    1162638437
+        0x0100134c:    6e616353    Scan    DCD    1851876179
+        0x01001350:    61746144    Data    DCD    1635017028
+        0x01001354:    63757320     suc    DCD    1668641568
+        0x01001358:    0a737365    ess.    DCD    175338341
+        0x0100135c:    00000000    ....    DCD    0
+        0x01001360:    535f5442    BT_S    DCD    1398756418
+        0x01001364:    454c7465    etLE    DCD    1162638437
+        0x01001368:    6e616353    Scan    DCD    1851876179
+        0x0100136c:    61746144    Data    DCD    1635017028
+        0x01001370:    69616620     fai    DCD    1767990816
+        0x01001374:    0a64656c    led.    DCD    174351724
+        0x01001378:    00000000    ....    DCD    0
+        0x0100137c:    56746553    SetV    DCD    1450468691
+        0x01001380:    62697369    isib    DCD    1651077993
+        0x01001384:    74696c69    ilit    DCD    1953066089
+        0x01001388:    75732079    y su    DCD    1970479225
+        0x0100138c:    73736563    cess    DCD    1936942435
+        0x01001390:    0000000a    ....    DCD    10
+        0x01001394:    56746553    SetV    DCD    1450468691
+        0x01001398:    62697369    isib    DCD    1651077993
+        0x0100139c:    74696c69    ilit    DCD    1953066089
+        0x010013a0:    61662079    y fa    DCD    1634082937
+        0x010013a4:    64656c69    iled    DCD    1684368489
+        0x010013a8:    0000000a    ....    DCD    10
+        0x010013ac:    76207462    bt v    DCD    1981838434
+        0x010013b0:    69737265    ersi    DCD    1769173605
+        0x010013b4:    253d6e6f    on=%    DCD    624782959
+        0x010013b8:    00000a78    x...    DCD    2680
+        0x010013bc:    00020016    ....    DCD    131094
+        0x010013c0:    00020017    ....    DCD    131095
+        0x010013c4:    00020018    ....    DCD    131096
+    $t
+        0x010013c8:    2000        .       MOVS     r0,#0
+        0x010013ca:    4941        AI      LDR      r1,[pc,#260] ; [0x10014d0] = 0x20018
+        0x010013cc:    7008        .p      STRB     r0,[r1,#0]
+        0x010013ce:    e01e        ..      B        0x100140e ; prt_printbuf_data_parse + 896
+        0x010013d0:    7820         x      LDRB     r0,[r4,#0]
+        0x010013d2:    4940        @I      LDR      r1,[pc,#256] ; [0x10014d4] = 0x20017
+        0x010013d4:    7008        .p      STRB     r0,[r1,#0]
+        0x010013d6:    483e        >H      LDR      r0,[pc,#248] ; [0x10014d0] = 0x20018
+        0x010013d8:    7800        .x      LDRB     r0,[r0,#0]
+        0x010013da:    1c40        @.      ADDS     r0,r0,#1
+        0x010013dc:    493c        <I      LDR      r1,[pc,#240] ; [0x10014d0] = 0x20018
+        0x010013de:    7008        .p      STRB     r0,[r1,#0]
+        0x010013e0:    e015        ..      B        0x100140e ; prt_printbuf_data_parse + 896
+        0x010013e2:    7820         x      LDRB     r0,[r4,#0]
+        0x010013e4:    493b        ;I      LDR      r1,[pc,#236] ; [0x10014d4] = 0x20017
+        0x010013e6:    7809        .x      LDRB     r1,[r1,#0]
+        0x010013e8:    1840        @.      ADDS     r0,r0,r1
+        0x010013ea:    493a        :I      LDR      r1,[pc,#232] ; [0x10014d4] = 0x20017
+        0x010013ec:    7008        .p      STRB     r0,[r1,#0]
+        0x010013ee:    2001        .       MOVS     r0,#1
+        0x010013f0:    4939        9I      LDR      r1,[pc,#228] ; [0x10014d8] = 0x20016
+        0x010013f2:    7008        .p      STRB     r0,[r1,#0]
+        0x010013f4:    2000        .       MOVS     r0,#0
+        0x010013f6:    4936        6I      LDR      r1,[pc,#216] ; [0x10014d0] = 0x20018
+        0x010013f8:    7008        .p      STRB     r0,[r1,#0]
+        0x010013fa:    2102        .!      MOVS     r1,#2
+        0x010013fc:    a037        7.      ADR      r0,{pc}+0xe0 ; 0x10014dc
+        0x010013fe:    f7fffe14    ....    BL       bt_write ; 0x100102a
+        0x01001402:    2000        .       MOVS     r0,#0
+        0x01001404:    e64f        O.      B        0x10010a6 ; prt_printbuf_data_parse + 24
+        0x01001406:    2000        .       MOVS     r0,#0
+        0x01001408:    4931        1I      LDR      r1,[pc,#196] ; [0x10014d0] = 0x20018
+        0x0100140a:    7008        .p      STRB     r0,[r1,#0]
+        0x0100140c:    bf00        ..      NOP      
+        0x0100140e:    bf00        ..      NOP      
+        0x01001410:    4831        1H      LDR      r0,[pc,#196] ; [0x10014d8] = 0x20016
+        0x01001412:    7800        .x      LDRB     r0,[r0,#0]
+        0x01001414:    e647        G.      B        0x10010a6 ; prt_printbuf_data_parse + 24
+    UART_Configuration
+        0x01001416:    b51f        ..      PUSH     {r0-r4,lr}
+        0x01001418:    2208        ."      MOVS     r2,#8
+        0x0100141a:    2102        .!      MOVS     r1,#2
+        0x0100141c:    2000        .       MOVS     r0,#0
+        0x0100141e:    f000f899    ....    BL       GPIO_Config ; 0x1001554
+        0x01001422:    2209        ."      MOVS     r2,#9
+        0x01001424:    2101        .!      MOVS     r1,#1
+        0x01001426:    2000        .       MOVS     r0,#0
+        0x01001428:    f000f894    ....    BL       GPIO_Config ; 0x1001554
+        0x0100142c:    20e1        .       MOVS     r0,#0xe1
+        0x0100142e:    0300        ..      LSLS     r0,r0,#12
+        0x01001430:    9001        ..      STR      r0,[sp,#4]
+        0x01001432:    2100        .!      MOVS     r1,#0
+        0x01001434:    4668        hF      MOV      r0,sp
+        0x01001436:    7201        .r      STRB     r1,[r0,#8]
+        0x01001438:    7241        Ar      STRB     r1,[r0,#9]
+        0x0100143a:    7281        .r      STRB     r1,[r0,#0xa]
+        0x0100143c:    72c1        .r      STRB     r1,[r0,#0xb]
+        0x0100143e:    7001        .p      STRB     r1,[r0,#0]
+        0x01001440:    4669        iF      MOV      r1,sp
+        0x01001442:    2000        .       MOVS     r0,#0
+        0x01001444:    f000fcc2    ....    BL       UART_Init ; 0x1001dcc
+        0x01001448:    bd1f        ..      POP      {r0-r4,pc}
+    main
+        0x0100144a:    bf00        ..      NOP      
+        0x0100144c:    2000        .       MOVS     r0,#0
+        0x0100144e:    f003f99f    ....    BL       SYSCTRL_HCLKConfig ; 0x1004790
+        0x01001452:    f7ffffe0    ....    BL       UART_Configuration ; 0x1001416
+        0x01001456:    a022        ".      ADR      r0,{pc}+0x8a ; 0x10014e0
+        0x01001458:    f7fff860    ..`.    BL       MyPrintf ; 0x100051c
+        0x0100145c:    220b        ."      MOVS     r2,#0xb
+        0x0100145e:    a124        $.      ADR      r1,{pc}+0x92 ; 0x10014f0
+        0x01001460:    4826        &H      LDR      r0,[pc,#152] ; [0x10014fc] = 0x20104
+        0x01001462:    f003fa43    ..C.    BL       __aeabi_memcpy ; 0x10048ec
+        0x01001466:    4825        %H      LDR      r0,[pc,#148] ; [0x10014fc] = 0x20104
+        0x01001468:    380c        .8      SUBS     r0,r0,#0xc
+        0x0100146a:    a125        %.      ADR      r1,{pc}+0x96 ; 0x1001500
+        0x0100146c:    6809        .h      LDR      r1,[r1,#0]
+        0x0100146e:    61c1        .a      STR      r1,[r0,#0x1c]
+        0x01001470:    2206        ."      MOVS     r2,#6
+        0x01001472:    a125        %.      ADR      r1,{pc}+0x96 ; 0x1001508
+        0x01001474:    3020         0      ADDS     r0,r0,#0x20
+        0x01001476:    f003fa39    ..9.    BL       __aeabi_memcpy ; 0x10048ec
+        0x0100147a:    2101        .!      MOVS     r1,#1
+        0x0100147c:    481f        .H      LDR      r0,[pc,#124] ; [0x10014fc] = 0x20104
+        0x0100147e:    3014        .0      ADDS     r0,r0,#0x14
+        0x01001480:    7181        .q      STRB     r1,[r0,#6]
+        0x01001482:    4823        #H      LDR      r0,[pc,#140] ; [0x1001510] = 0x2012c
+        0x01001484:    491d        .I      LDR      r1,[pc,#116] ; [0x10014fc] = 0x20104
+        0x01001486:    390c        .9      SUBS     r1,r1,#0xc
+        0x01001488:    6088        .`      STR      r0,[r1,#8]
+        0x0100148a:    4822        "H      LDR      r0,[pc,#136] ; [0x1001514] = 0x2022c
+        0x0100148c:    6048        H`      STR      r0,[r1,#4]
+        0x0100148e:    2001        .       MOVS     r0,#1
+        0x01001490:    02c0        ..      LSLS     r0,r0,#11
+        0x01001492:    8008        ..      STRH     r0,[r1,#0]
+        0x01001494:    a020         .      ADR      r0,{pc}+0x84 ; 0x1001518
+        0x01001496:    f7fff841    ..A.    BL       MyPrintf ; 0x100051c
+        0x0100149a:    f7fffaf6    ....    BL       bt_init_proc ; 0x1000a8a
+        0x0100149e:    a01f        ..      ADR      r0,{pc}+0x7e ; 0x100151c
+        0x010014a0:    f7fff83c    ..<.    BL       MyPrintf ; 0x100051c
+        0x010014a4:    e004        ..      B        0x10014b0 ; main + 102
+        0x010014a6:    2101        .!      MOVS     r1,#1
+        0x010014a8:    0289        ..      LSLS     r1,r1,#10
+        0x010014aa:    481f        .H      LDR      r0,[pc,#124] ; [0x1001528] = 0x20a2c
+        0x010014ac:    f002f87e    ..~.    BL       prt_get_bt_data ; 0x10035ac
+        0x010014b0:    e7f9        ..      B        0x10014a6 ; main + 92
+    ReserveNV
+        0x010014b2:    b510        ..      PUSH     {r4,lr}
+        0x010014b4:    4604        .F      MOV      r4,r0
+        0x010014b6:    a01d        ..      ADR      r0,{pc}+0x76 ; 0x100152c
+        0x010014b8:    f7fff830    ..0.    BL       MyPrintf ; 0x100051c
+        0x010014bc:    4824        $H      LDR      r0,[pc,#144] ; [0x1001550] = 0x107f000
+        0x010014be:    f003fafb    ....    BL       qspi_flash_sectorerase ; 0x1004ab8
+        0x010014c2:    22aa        ."      MOVS     r2,#0xaa
+        0x010014c4:    4621        !F      MOV      r1,r4
+        0x010014c6:    4822        "H      LDR      r0,[pc,#136] ; [0x1001550] = 0x107f000
+        0x010014c8:    f003fb0a    ....    BL       qspi_flash_write ; 0x1004ae0
+        0x010014cc:    bd10        ..      POP      {r4,pc}
+    $d
+        0x010014ce:    0000        ..      DCW    0
+        0x010014d0:    00020018    ....    DCD    131096
+        0x010014d4:    00020017    ....    DCD    131095
+        0x010014d8:    00020016    ....    DCD    131094
+        0x010014dc:    00004b4f    OK..    DCD    19279
+        0x010014e0:    62207462    bt b    DCD    1646294114
+        0x010014e4:    6420656c    le d    DCD    1679844716
+        0x010014e8:    0a6f6d65    emo.    DCD    175074661
+        0x010014ec:    00000000    ....    DCD    0
+        0x010014f0:    6f6f6f50    Pooo    DCD    1869573968
+        0x010014f4:    4c5f696c    li_L    DCD    1281321324
+        0x010014f8:    00005335    5S..    DCD    21301
+        0x010014fc:    00020104    ....    DCD    131332
+        0x01001500:    34333231    1234    DCD    875770417
+        0x01001504:    00000000    ....    DCD    0
+        0x01001508:    7a006858    Xh.z    DCD    2046847064
+        0x0100150c:    00008667    g...    DCD    34407
+        0x01001510:    0002012c    ,...    DCD    131372
+        0x01001514:    0002022c    ,...    DCD    131628
+        0x01001518:    000a3178    x1..    DCD    668024
+        0x0100151c:    69207462    bt i    DCD    1763734626
+        0x01001520:    2074696e    nit     DCD    544500078
+        0x01001524:    000a6b6f    ok..    DCD    682863
+        0x01001528:    00020a2c    ,...    DCD    133676
+        0x0100152c:    2077656e    new     DCD    544695662
+        0x01001530:    6172766e    nvra    DCD    1634891374
+        0x01001534:    6164206d    m da    DCD    1633951853
+        0x01001538:    752c6174    ta,u    DCD    1965842804
+        0x0100153c:    74616470    pdat    DCD    1952539760
+        0x01001540:    6f742061    a to    DCD    1869881441
+        0x01001544:    616c6620     fla    DCD    1634493984
+        0x01001548:    0a0d6873    sh..    DCD    168650867
+        0x0100154c:    00000000    ....    DCD    0
+        0x01001550:    0107f000    ....    DCD    17297408
+    $t
+    .text
+    GPIO_Config
+        0x01001554:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x01001556:    4606        .F      MOV      r6,r0
+        0x01001558:    460c        .F      MOV      r4,r1
+        0x0100155a:    4617        .F      MOV      r7,r2
+        0x0100155c:    2e03        ..      CMP      r6,#3
+        0x0100155e:    db04        ..      BLT      0x100156a ; GPIO_Config + 22
+        0x01001560:    4afe        .J      LDR      r2,[pc,#1016] ; [0x100195c] = 0x10061cc
+        0x01001562:    210e        .!      MOVS     r1,#0xe
+        0x01001564:    a0fe        ..      ADR      r0,{pc}+0x3fc ; 0x1001960
+        0x01001566:    f7fff94f    ..O.    BL       _assert_handler ; 0x1000808
+        0x0100156a:    2c01        .,      CMP      r4,#1
+        0x0100156c:    d02b        +.      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x0100156e:    2c02        .,      CMP      r4,#2
+        0x01001570:    d029        ).      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x01001572:    2c04        .,      CMP      r4,#4
+        0x01001574:    d027        '.      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x01001576:    2c08        .,      CMP      r4,#8
+        0x01001578:    d025        %.      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x0100157a:    2c10        .,      CMP      r4,#0x10
+        0x0100157c:    d023        #.      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x0100157e:    2c20         ,      CMP      r4,#0x20
+        0x01001580:    d021        !.      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x01001582:    2c40        @,      CMP      r4,#0x40
+        0x01001584:    d01f        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x01001586:    2c80        .,      CMP      r4,#0x80
+        0x01001588:    d01d        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x0100158a:    20ff        .       MOVS     r0,#0xff
+        0x0100158c:    3001        .0      ADDS     r0,#1
+        0x0100158e:    4284        .B      CMP      r4,r0
+        0x01001590:    d019        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x01001592:    0040        @.      LSLS     r0,r0,#1
+        0x01001594:    4284        .B      CMP      r4,r0
+        0x01001596:    d016        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x01001598:    0040        @.      LSLS     r0,r0,#1
+        0x0100159a:    4284        .B      CMP      r4,r0
+        0x0100159c:    d013        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x0100159e:    0040        @.      LSLS     r0,r0,#1
+        0x010015a0:    4284        .B      CMP      r4,r0
+        0x010015a2:    d010        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x010015a4:    0040        @.      LSLS     r0,r0,#1
+        0x010015a6:    4284        .B      CMP      r4,r0
+        0x010015a8:    d00d        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x010015aa:    0040        @.      LSLS     r0,r0,#1
+        0x010015ac:    4284        .B      CMP      r4,r0
+        0x010015ae:    d00a        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x010015b0:    0040        @.      LSLS     r0,r0,#1
+        0x010015b2:    4284        .B      CMP      r4,r0
+        0x010015b4:    d007        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x010015b6:    0040        @.      LSLS     r0,r0,#1
+        0x010015b8:    4284        .B      CMP      r4,r0
+        0x010015ba:    d004        ..      BEQ      0x10015c6 ; GPIO_Config + 114
+        0x010015bc:    4ae7        .J      LDR      r2,[pc,#924] ; [0x100195c] = 0x10061cc
+        0x010015be:    210f        .!      MOVS     r1,#0xf
+        0x010015c0:    a0e7        ..      ADR      r0,{pc}+0x3a0 ; 0x1001960
+        0x010015c2:    f7fff921    ..!.    BL       _assert_handler ; 0x1000808
+        0x010015c6:    2500        .%      MOVS     r5,#0
+        0x010015c8:    e009        ..      B        0x10015de ; GPIO_Config + 138
+        0x010015ca:    2001        .       MOVS     r0,#1
+        0x010015cc:    40a8        .@      LSLS     r0,r0,r5
+        0x010015ce:    4020         @      ANDS     r0,r0,r4
+        0x010015d0:    2800        .(      CMP      r0,#0
+        0x010015d2:    d003        ..      BEQ      0x10015dc ; GPIO_Config + 136
+        0x010015d4:    0130        0.      LSLS     r0,r6,#4
+        0x010015d6:    49ec        .I      LDR      r1,[pc,#944] ; [0x1001988] = 0xf8700
+        0x010015d8:    1840        @.      ADDS     r0,r0,r1
+        0x010015da:    5547        GU      STRB     r7,[r0,r5]
+        0x010015dc:    1c6d        m.      ADDS     r5,r5,#1
+        0x010015de:    2d10        .-      CMP      r5,#0x10
+        0x010015e0:    dbf3        ..      BLT      0x10015ca ; GPIO_Config + 118
+        0x010015e2:    bdf8        ..      POP      {r3-r7,pc}
+    GPIO_Init
+        0x010015e4:    b570        p.      PUSH     {r4-r6,lr}
+        0x010015e6:    4606        .F      MOV      r6,r0
+        0x010015e8:    460d        .F      MOV      r5,r1
+        0x010015ea:    2e03        ..      CMP      r6,#3
+        0x010015ec:    db04        ..      BLT      0x10015f8 ; GPIO_Init + 20
+        0x010015ee:    4ae7        .J      LDR      r2,[pc,#924] ; [0x100198c] = 0x10061d8
+        0x010015f0:    211c        .!      MOVS     r1,#0x1c
+        0x010015f2:    a0db        ..      ADR      r0,{pc}+0x36e ; 0x1001960
+        0x010015f4:    f7fff908    ....    BL       _assert_handler ; 0x1000808
+        0x010015f8:    7828        (x      LDRB     r0,[r5,#0]
+        0x010015fa:    2000        .       MOVS     r0,#0
+        0x010015fc:    2800        .(      CMP      r0,#0
+        0x010015fe:    d102        ..      BNE      0x1001606 ; GPIO_Init + 34
+        0x01001600:    8828        (.      LDRH     r0,[r5,#0]
+        0x01001602:    2800        .(      CMP      r0,#0
+        0x01001604:    d104        ..      BNE      0x1001610 ; GPIO_Init + 44
+        0x01001606:    4ae1        .J      LDR      r2,[pc,#900] ; [0x100198c] = 0x10061d8
+        0x01001608:    211d        .!      MOVS     r1,#0x1d
+        0x0100160a:    a0d5        ..      ADR      r0,{pc}+0x356 ; 0x1001960
+        0x0100160c:    f7fff8fc    ....    BL       _assert_handler ; 0x1000808
+        0x01001610:    78a8        .x      LDRB     r0,[r5,#2]
+        0x01001612:    2801        .(      CMP      r0,#1
+        0x01001614:    d010        ..      BEQ      0x1001638 ; GPIO_Init + 84
+        0x01001616:    78a8        .x      LDRB     r0,[r5,#2]
+        0x01001618:    2802        .(      CMP      r0,#2
+        0x0100161a:    d00d        ..      BEQ      0x1001638 ; GPIO_Init + 84
+        0x0100161c:    78a8        .x      LDRB     r0,[r5,#2]
+        0x0100161e:    2803        .(      CMP      r0,#3
+        0x01001620:    d00a        ..      BEQ      0x1001638 ; GPIO_Init + 84
+        0x01001622:    78a8        .x      LDRB     r0,[r5,#2]
+        0x01001624:    2805        .(      CMP      r0,#5
+        0x01001626:    d007        ..      BEQ      0x1001638 ; GPIO_Init + 84
+        0x01001628:    78a8        .x      LDRB     r0,[r5,#2]
+        0x0100162a:    2804        .(      CMP      r0,#4
+        0x0100162c:    d004        ..      BEQ      0x1001638 ; GPIO_Init + 84
+        0x0100162e:    4ad7        .J      LDR      r2,[pc,#860] ; [0x100198c] = 0x10061d8
+        0x01001630:    211e        .!      MOVS     r1,#0x1e
+        0x01001632:    a0cb        ..      ADR      r0,{pc}+0x32e ; 0x1001960
+        0x01001634:    f7fff8e8    ....    BL       _assert_handler ; 0x1000808
+        0x01001638:    78a8        .x      LDRB     r0,[r5,#2]
+        0x0100163a:    0003        ..      MOVS     r3,r0
+        0x0100163c:    f003f9a6    ....    BL       __ARM_common_switch8 ; 0x100498c
+    $d
+        0x01001640:    15045906    .Y..    DCD    352606470
+        0x01001644:    59483726    &7HY    DCD    1497904934
+    $t
+        0x01001648:    2400        .$      MOVS     r4,#0
+        0x0100164a:    e00b        ..      B        0x1001664 ; GPIO_Init + 128
+        0x0100164c:    8828        (.      LDRH     r0,[r5,#0]
+        0x0100164e:    2101        .!      MOVS     r1,#1
+        0x01001650:    40a1        .@      LSLS     r1,r1,r4
+        0x01001652:    4008        .@      ANDS     r0,r0,r1
+        0x01001654:    2800        .(      CMP      r0,#0
+        0x01001656:    d004        ..      BEQ      0x1001662 ; GPIO_Init + 126
+        0x01001658:    2000        .       MOVS     r0,#0
+        0x0100165a:    0131        1.      LSLS     r1,r6,#4
+        0x0100165c:    4aca        .J      LDR      r2,[pc,#808] ; [0x1001988] = 0xf8700
+        0x0100165e:    1889        ..      ADDS     r1,r1,r2
+        0x01001660:    5508        .U      STRB     r0,[r1,r4]
+        0x01001662:    1c64        d.      ADDS     r4,r4,#1
+        0x01001664:    2c10        .,      CMP      r4,#0x10
+        0x01001666:    dbf1        ..      BLT      0x100164c ; GPIO_Init + 104
+        0x01001668:    e044        D.      B        0x10016f4 ; GPIO_Init + 272
+        0x0100166a:    2400        .$      MOVS     r4,#0
+        0x0100166c:    e00b        ..      B        0x1001686 ; GPIO_Init + 162
+        0x0100166e:    8828        (.      LDRH     r0,[r5,#0]
+        0x01001670:    2101        .!      MOVS     r1,#1
+        0x01001672:    40a1        .@      LSLS     r1,r1,r4
+        0x01001674:    4008        .@      ANDS     r0,r0,r1
+        0x01001676:    2800        .(      CMP      r0,#0
+        0x01001678:    d004        ..      BEQ      0x1001684 ; GPIO_Init + 160
+        0x0100167a:    2040        @       MOVS     r0,#0x40
+        0x0100167c:    0131        1.      LSLS     r1,r6,#4
+        0x0100167e:    4ac2        .J      LDR      r2,[pc,#776] ; [0x1001988] = 0xf8700
+        0x01001680:    1889        ..      ADDS     r1,r1,r2
+        0x01001682:    5508        .U      STRB     r0,[r1,r4]
+        0x01001684:    1c64        d.      ADDS     r4,r4,#1
+        0x01001686:    2c10        .,      CMP      r4,#0x10
+        0x01001688:    dbf1        ..      BLT      0x100166e ; GPIO_Init + 138
+        0x0100168a:    e033        3.      B        0x10016f4 ; GPIO_Init + 272
+        0x0100168c:    2400        .$      MOVS     r4,#0
+        0x0100168e:    e00b        ..      B        0x10016a8 ; GPIO_Init + 196
+        0x01001690:    8828        (.      LDRH     r0,[r5,#0]
+        0x01001692:    2101        .!      MOVS     r1,#1
+        0x01001694:    40a1        .@      LSLS     r1,r1,r4
+        0x01001696:    4008        .@      ANDS     r0,r0,r1
+        0x01001698:    2800        .(      CMP      r0,#0
+        0x0100169a:    d004        ..      BEQ      0x10016a6 ; GPIO_Init + 194
+        0x0100169c:    2080        .       MOVS     r0,#0x80
+        0x0100169e:    0131        1.      LSLS     r1,r6,#4
+        0x010016a0:    4ab9        .J      LDR      r2,[pc,#740] ; [0x1001988] = 0xf8700
+        0x010016a2:    1889        ..      ADDS     r1,r1,r2
+        0x010016a4:    5508        .U      STRB     r0,[r1,r4]
+        0x010016a6:    1c64        d.      ADDS     r4,r4,#1
+        0x010016a8:    2c10        .,      CMP      r4,#0x10
+        0x010016aa:    dbf1        ..      BLT      0x1001690 ; GPIO_Init + 172
+        0x010016ac:    e022        ".      B        0x10016f4 ; GPIO_Init + 272
+        0x010016ae:    2400        .$      MOVS     r4,#0
+        0x010016b0:    e00b        ..      B        0x10016ca ; GPIO_Init + 230
+        0x010016b2:    8828        (.      LDRH     r0,[r5,#0]
+        0x010016b4:    2101        .!      MOVS     r1,#1
+        0x010016b6:    40a1        .@      LSLS     r1,r1,r4
+        0x010016b8:    4008        .@      ANDS     r0,r0,r1
+        0x010016ba:    2800        .(      CMP      r0,#0
+        0x010016bc:    d004        ..      BEQ      0x10016c8 ; GPIO_Init + 228
+        0x010016be:    20c0        .       MOVS     r0,#0xc0
+        0x010016c0:    0131        1.      LSLS     r1,r6,#4
+        0x010016c2:    4ab1        .J      LDR      r2,[pc,#708] ; [0x1001988] = 0xf8700
+        0x010016c4:    1889        ..      ADDS     r1,r1,r2
+        0x010016c6:    5508        .U      STRB     r0,[r1,r4]
+        0x010016c8:    1c64        d.      ADDS     r4,r4,#1
+        0x010016ca:    2c10        .,      CMP      r4,#0x10
+        0x010016cc:    dbf1        ..      BLT      0x10016b2 ; GPIO_Init + 206
+        0x010016ce:    e011        ..      B        0x10016f4 ; GPIO_Init + 272
+        0x010016d0:    2400        .$      MOVS     r4,#0
+        0x010016d2:    e00b        ..      B        0x10016ec ; GPIO_Init + 264
+        0x010016d4:    8828        (.      LDRH     r0,[r5,#0]
+        0x010016d6:    2101        .!      MOVS     r1,#1
+        0x010016d8:    40a1        .@      LSLS     r1,r1,r4
+        0x010016da:    4008        .@      ANDS     r0,r0,r1
+        0x010016dc:    2800        .(      CMP      r0,#0
+        0x010016de:    d004        ..      BEQ      0x10016ea ; GPIO_Init + 262
+        0x010016e0:    203e        >       MOVS     r0,#0x3e
+        0x010016e2:    0131        1.      LSLS     r1,r6,#4
+        0x010016e4:    4aa8        .J      LDR      r2,[pc,#672] ; [0x1001988] = 0xf8700
+        0x010016e6:    1889        ..      ADDS     r1,r1,r2
+        0x010016e8:    5508        .U      STRB     r0,[r1,r4]
+        0x010016ea:    1c64        d.      ADDS     r4,r4,#1
+        0x010016ec:    2c10        .,      CMP      r4,#0x10
+        0x010016ee:    dbf1        ..      BLT      0x10016d4 ; GPIO_Init + 240
+        0x010016f0:    e000        ..      B        0x10016f4 ; GPIO_Init + 272
+        0x010016f2:    bf00        ..      NOP      
+        0x010016f4:    bf00        ..      NOP      
+        0x010016f6:    bd70        p.      POP      {r4-r6,pc}
+    GPIO_PullUpCmd
+        0x010016f8:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x010016fa:    4606        .F      MOV      r6,r0
+        0x010016fc:    460c        .F      MOV      r4,r1
+        0x010016fe:    4617        .F      MOV      r7,r2
+        0x01001700:    2e03        ..      CMP      r6,#3
+        0x01001702:    db04        ..      BLT      0x100170e ; GPIO_PullUpCmd + 22
+        0x01001704:    4aa2        .J      LDR      r2,[pc,#648] ; [0x1001990] = 0x10061e2
+        0x01001706:    2153        S!      MOVS     r1,#0x53
+        0x01001708:    a095        ..      ADR      r0,{pc}+0x258 ; 0x1001960
+        0x0100170a:    f7fff87d    ..}.    BL       _assert_handler ; 0x1000808
+        0x0100170e:    2c01        .,      CMP      r4,#1
+        0x01001710:    d02b        +.      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x01001712:    2c02        .,      CMP      r4,#2
+        0x01001714:    d029        ).      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x01001716:    2c04        .,      CMP      r4,#4
+        0x01001718:    d027        '.      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x0100171a:    2c08        .,      CMP      r4,#8
+        0x0100171c:    d025        %.      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x0100171e:    2c10        .,      CMP      r4,#0x10
+        0x01001720:    d023        #.      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x01001722:    2c20         ,      CMP      r4,#0x20
+        0x01001724:    d021        !.      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x01001726:    2c40        @,      CMP      r4,#0x40
+        0x01001728:    d01f        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x0100172a:    2c80        .,      CMP      r4,#0x80
+        0x0100172c:    d01d        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x0100172e:    20ff        .       MOVS     r0,#0xff
+        0x01001730:    3001        .0      ADDS     r0,#1
+        0x01001732:    4284        .B      CMP      r4,r0
+        0x01001734:    d019        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x01001736:    0040        @.      LSLS     r0,r0,#1
+        0x01001738:    4284        .B      CMP      r4,r0
+        0x0100173a:    d016        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x0100173c:    0040        @.      LSLS     r0,r0,#1
+        0x0100173e:    4284        .B      CMP      r4,r0
+        0x01001740:    d013        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x01001742:    0040        @.      LSLS     r0,r0,#1
+        0x01001744:    4284        .B      CMP      r4,r0
+        0x01001746:    d010        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x01001748:    0040        @.      LSLS     r0,r0,#1
+        0x0100174a:    4284        .B      CMP      r4,r0
+        0x0100174c:    d00d        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x0100174e:    0040        @.      LSLS     r0,r0,#1
+        0x01001750:    4284        .B      CMP      r4,r0
+        0x01001752:    d00a        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x01001754:    0040        @.      LSLS     r0,r0,#1
+        0x01001756:    4284        .B      CMP      r4,r0
+        0x01001758:    d007        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x0100175a:    0040        @.      LSLS     r0,r0,#1
+        0x0100175c:    4284        .B      CMP      r4,r0
+        0x0100175e:    d004        ..      BEQ      0x100176a ; GPIO_PullUpCmd + 114
+        0x01001760:    4a8b        .J      LDR      r2,[pc,#556] ; [0x1001990] = 0x10061e2
+        0x01001762:    2154        T!      MOVS     r1,#0x54
+        0x01001764:    a07e        ~.      ADR      r0,{pc}+0x1fc ; 0x1001960
+        0x01001766:    f7fff84f    ..O.    BL       _assert_handler ; 0x1000808
+        0x0100176a:    2500        .%      MOVS     r5,#0
+        0x0100176c:    e01e        ..      B        0x10017ac ; GPIO_PullUpCmd + 180
+        0x0100176e:    2001        .       MOVS     r0,#1
+        0x01001770:    40a8        .@      LSLS     r0,r0,r5
+        0x01001772:    4020         @      ANDS     r0,r0,r4
+        0x01001774:    2800        .(      CMP      r0,#0
+        0x01001776:    d018        ..      BEQ      0x10017aa ; GPIO_PullUpCmd + 178
+        0x01001778:    2f01        ./      CMP      r7,#1
+        0x0100177a:    d10a        ..      BNE      0x1001792 ; GPIO_PullUpCmd + 154
+        0x0100177c:    0130        0.      LSLS     r0,r6,#4
+        0x0100177e:    4982        .I      LDR      r1,[pc,#520] ; [0x1001988] = 0xf8700
+        0x01001780:    1840        @.      ADDS     r0,r0,r1
+        0x01001782:    5d40        @]      LDRB     r0,[r0,r5]
+        0x01001784:    2140        @!      MOVS     r1,#0x40
+        0x01001786:    4308        .C      ORRS     r0,r0,r1
+        0x01001788:    0131        1.      LSLS     r1,r6,#4
+        0x0100178a:    4a7f        .J      LDR      r2,[pc,#508] ; [0x1001988] = 0xf8700
+        0x0100178c:    1889        ..      ADDS     r1,r1,r2
+        0x0100178e:    5548        HU      STRB     r0,[r1,r5]
+        0x01001790:    e00b        ..      B        0x10017aa ; GPIO_PullUpCmd + 178
+        0x01001792:    2f00        ./      CMP      r7,#0
+        0x01001794:    d109        ..      BNE      0x10017aa ; GPIO_PullUpCmd + 178
+        0x01001796:    0130        0.      LSLS     r0,r6,#4
+        0x01001798:    497b        {I      LDR      r1,[pc,#492] ; [0x1001988] = 0xf8700
+        0x0100179a:    1840        @.      ADDS     r0,r0,r1
+        0x0100179c:    5d40        @]      LDRB     r0,[r0,r5]
+        0x0100179e:    2140        @!      MOVS     r1,#0x40
+        0x010017a0:    4388        .C      BICS     r0,r0,r1
+        0x010017a2:    0131        1.      LSLS     r1,r6,#4
+        0x010017a4:    4a78        xJ      LDR      r2,[pc,#480] ; [0x1001988] = 0xf8700
+        0x010017a6:    1889        ..      ADDS     r1,r1,r2
+        0x010017a8:    5548        HU      STRB     r0,[r1,r5]
+        0x010017aa:    1c6d        m.      ADDS     r5,r5,#1
+        0x010017ac:    2d10        .-      CMP      r5,#0x10
+        0x010017ae:    dbde        ..      BLT      0x100176e ; GPIO_PullUpCmd + 118
+        0x010017b0:    bdf8        ..      POP      {r3-r7,pc}
+    GPIO_ReadInputData
+        0x010017b2:    b510        ..      PUSH     {r4,lr}
+        0x010017b4:    4604        .F      MOV      r4,r0
+        0x010017b6:    2c03        .,      CMP      r4,#3
+        0x010017b8:    db04        ..      BLT      0x10017c4 ; GPIO_ReadInputData + 18
+        0x010017ba:    4a76        vJ      LDR      r2,[pc,#472] ; [0x1001994] = 0x10061f1
+        0x010017bc:    216a        j!      MOVS     r1,#0x6a
+        0x010017be:    a068        h.      ADR      r0,{pc}+0x1a2 ; 0x1001960
+        0x010017c0:    f7fff822    ..".    BL       _assert_handler ; 0x1000808
+        0x010017c4:    0060        `.      LSLS     r0,r4,#1
+        0x010017c6:    4970        pI      LDR      r1,[pc,#448] ; [0x1001988] = 0xf8700
+        0x010017c8:    1840        @.      ADDS     r0,r0,r1
+        0x010017ca:    8f80        ..      LDRH     r0,[r0,#0x3c]
+        0x010017cc:    bd10        ..      POP      {r4,pc}
+    GPIO_ReadInputDataBit
+        0x010017ce:    b570        p.      PUSH     {r4-r6,lr}
+        0x010017d0:    4605        .F      MOV      r5,r0
+        0x010017d2:    460c        .F      MOV      r4,r1
+        0x010017d4:    2d03        .-      CMP      r5,#3
+        0x010017d6:    db04        ..      BLT      0x10017e2 ; GPIO_ReadInputDataBit + 20
+        0x010017d8:    4a6f        oJ      LDR      r2,[pc,#444] ; [0x1001998] = 0x1006204
+        0x010017da:    2171        q!      MOVS     r1,#0x71
+        0x010017dc:    a060        `.      ADR      r0,{pc}+0x184 ; 0x1001960
+        0x010017de:    f7fff813    ....    BL       _assert_handler ; 0x1000808
+        0x010017e2:    2c01        .,      CMP      r4,#1
+        0x010017e4:    d02b        +.      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x010017e6:    2c02        .,      CMP      r4,#2
+        0x010017e8:    d029        ).      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x010017ea:    2c04        .,      CMP      r4,#4
+        0x010017ec:    d027        '.      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x010017ee:    2c08        .,      CMP      r4,#8
+        0x010017f0:    d025        %.      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x010017f2:    2c10        .,      CMP      r4,#0x10
+        0x010017f4:    d023        #.      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x010017f6:    2c20         ,      CMP      r4,#0x20
+        0x010017f8:    d021        !.      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x010017fa:    2c40        @,      CMP      r4,#0x40
+        0x010017fc:    d01f        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x010017fe:    2c80        .,      CMP      r4,#0x80
+        0x01001800:    d01d        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x01001802:    20ff        .       MOVS     r0,#0xff
+        0x01001804:    3001        .0      ADDS     r0,#1
+        0x01001806:    4284        .B      CMP      r4,r0
+        0x01001808:    d019        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x0100180a:    0040        @.      LSLS     r0,r0,#1
+        0x0100180c:    4284        .B      CMP      r4,r0
+        0x0100180e:    d016        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x01001810:    0040        @.      LSLS     r0,r0,#1
+        0x01001812:    4284        .B      CMP      r4,r0
+        0x01001814:    d013        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x01001816:    0040        @.      LSLS     r0,r0,#1
+        0x01001818:    4284        .B      CMP      r4,r0
+        0x0100181a:    d010        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x0100181c:    0040        @.      LSLS     r0,r0,#1
+        0x0100181e:    4284        .B      CMP      r4,r0
+        0x01001820:    d00d        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x01001822:    0040        @.      LSLS     r0,r0,#1
+        0x01001824:    4284        .B      CMP      r4,r0
+        0x01001826:    d00a        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x01001828:    0040        @.      LSLS     r0,r0,#1
+        0x0100182a:    4284        .B      CMP      r4,r0
+        0x0100182c:    d007        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x0100182e:    0040        @.      LSLS     r0,r0,#1
+        0x01001830:    4284        .B      CMP      r4,r0
+        0x01001832:    d004        ..      BEQ      0x100183e ; GPIO_ReadInputDataBit + 112
+        0x01001834:    4a58        XJ      LDR      r2,[pc,#352] ; [0x1001998] = 0x1006204
+        0x01001836:    2172        r!      MOVS     r1,#0x72
+        0x01001838:    a049        I.      ADR      r0,{pc}+0x128 ; 0x1001960
+        0x0100183a:    f7feffe5    ....    BL       _assert_handler ; 0x1000808
+        0x0100183e:    0068        h.      LSLS     r0,r5,#1
+        0x01001840:    4951        QI      LDR      r1,[pc,#324] ; [0x1001988] = 0xf8700
+        0x01001842:    1840        @.      ADDS     r0,r0,r1
+        0x01001844:    8f80        ..      LDRH     r0,[r0,#0x3c]
+        0x01001846:    4020         @      ANDS     r0,r0,r4
+        0x01001848:    2800        .(      CMP      r0,#0
+        0x0100184a:    d001        ..      BEQ      0x1001850 ; GPIO_ReadInputDataBit + 130
+        0x0100184c:    2001        .       MOVS     r0,#1
+        0x0100184e:    bd70        p.      POP      {r4-r6,pc}
+        0x01001850:    2000        .       MOVS     r0,#0
+        0x01001852:    e7fc        ..      B        0x100184e ; GPIO_ReadInputDataBit + 128
+    GPIO_ReadOutputData
+        0x01001854:    b510        ..      PUSH     {r4,lr}
+        0x01001856:    4604        .F      MOV      r4,r0
+        0x01001858:    2c03        .,      CMP      r4,#3
+        0x0100185a:    db04        ..      BLT      0x1001866 ; GPIO_ReadOutputData + 18
+        0x0100185c:    4a4f        OJ      LDR      r2,[pc,#316] ; [0x100199c] = 0x100621a
+        0x0100185e:    2180        .!      MOVS     r1,#0x80
+        0x01001860:    a03f        ?.      ADR      r0,{pc}+0x100 ; 0x1001960
+        0x01001862:    f7feffd1    ....    BL       _assert_handler ; 0x1000808
+        0x01001866:    0060        `.      LSLS     r0,r4,#1
+        0x01001868:    4947        GI      LDR      r1,[pc,#284] ; [0x1001988] = 0xf8700
+        0x0100186a:    1840        @.      ADDS     r0,r0,r1
+        0x0100186c:    8f80        ..      LDRH     r0,[r0,#0x3c]
+        0x0100186e:    bd10        ..      POP      {r4,pc}
+    GPIO_ReadOutputDataBit
+        0x01001870:    b570        p.      PUSH     {r4-r6,lr}
+        0x01001872:    4605        .F      MOV      r5,r0
+        0x01001874:    460c        .F      MOV      r4,r1
+        0x01001876:    2d03        .-      CMP      r5,#3
+        0x01001878:    db04        ..      BLT      0x1001884 ; GPIO_ReadOutputDataBit + 20
+        0x0100187a:    4a49        IJ      LDR      r2,[pc,#292] ; [0x10019a0] = 0x100622e
+        0x0100187c:    2187        .!      MOVS     r1,#0x87
+        0x0100187e:    a038        8.      ADR      r0,{pc}+0xe2 ; 0x1001960
+        0x01001880:    f7feffc2    ....    BL       _assert_handler ; 0x1000808
+        0x01001884:    2c01        .,      CMP      r4,#1
+        0x01001886:    d02b        +.      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x01001888:    2c02        .,      CMP      r4,#2
+        0x0100188a:    d029        ).      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x0100188c:    2c04        .,      CMP      r4,#4
+        0x0100188e:    d027        '.      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x01001890:    2c08        .,      CMP      r4,#8
+        0x01001892:    d025        %.      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x01001894:    2c10        .,      CMP      r4,#0x10
+        0x01001896:    d023        #.      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x01001898:    2c20         ,      CMP      r4,#0x20
+        0x0100189a:    d021        !.      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x0100189c:    2c40        @,      CMP      r4,#0x40
+        0x0100189e:    d01f        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018a0:    2c80        .,      CMP      r4,#0x80
+        0x010018a2:    d01d        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018a4:    20ff        .       MOVS     r0,#0xff
+        0x010018a6:    3001        .0      ADDS     r0,#1
+        0x010018a8:    4284        .B      CMP      r4,r0
+        0x010018aa:    d019        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018ac:    0040        @.      LSLS     r0,r0,#1
+        0x010018ae:    4284        .B      CMP      r4,r0
+        0x010018b0:    d016        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018b2:    0040        @.      LSLS     r0,r0,#1
+        0x010018b4:    4284        .B      CMP      r4,r0
+        0x010018b6:    d013        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018b8:    0040        @.      LSLS     r0,r0,#1
+        0x010018ba:    4284        .B      CMP      r4,r0
+        0x010018bc:    d010        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018be:    0040        @.      LSLS     r0,r0,#1
+        0x010018c0:    4284        .B      CMP      r4,r0
+        0x010018c2:    d00d        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018c4:    0040        @.      LSLS     r0,r0,#1
+        0x010018c6:    4284        .B      CMP      r4,r0
+        0x010018c8:    d00a        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018ca:    0040        @.      LSLS     r0,r0,#1
+        0x010018cc:    4284        .B      CMP      r4,r0
+        0x010018ce:    d007        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018d0:    0040        @.      LSLS     r0,r0,#1
+        0x010018d2:    4284        .B      CMP      r4,r0
+        0x010018d4:    d004        ..      BEQ      0x10018e0 ; GPIO_ReadOutputDataBit + 112
+        0x010018d6:    4a32        2J      LDR      r2,[pc,#200] ; [0x10019a0] = 0x100622e
+        0x010018d8:    2188        .!      MOVS     r1,#0x88
+        0x010018da:    a021        !.      ADR      r0,{pc}+0x86 ; 0x1001960
+        0x010018dc:    f7feff94    ....    BL       _assert_handler ; 0x1000808
+        0x010018e0:    0068        h.      LSLS     r0,r5,#1
+        0x010018e2:    4929        )I      LDR      r1,[pc,#164] ; [0x1001988] = 0xf8700
+        0x010018e4:    1840        @.      ADDS     r0,r0,r1
+        0x010018e6:    8f80        ..      LDRH     r0,[r0,#0x3c]
+        0x010018e8:    4020         @      ANDS     r0,r0,r4
+        0x010018ea:    2800        .(      CMP      r0,#0
+        0x010018ec:    d001        ..      BEQ      0x10018f2 ; GPIO_ReadOutputDataBit + 130
+        0x010018ee:    2001        .       MOVS     r0,#1
+        0x010018f0:    bd70        p.      POP      {r4-r6,pc}
+        0x010018f2:    2000        .       MOVS     r0,#0
+        0x010018f4:    e7fc        ..      B        0x10018f0 ; GPIO_ReadOutputDataBit + 128
+    GPIO_ResetBits
+        0x010018f6:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x010018f8:    4606        .F      MOV      r6,r0
+        0x010018fa:    460c        .F      MOV      r4,r1
+        0x010018fc:    2e03        ..      CMP      r6,#3
+        0x010018fe:    db04        ..      BLT      0x100190a ; GPIO_ResetBits + 20
+        0x01001900:    4a28        (J      LDR      r2,[pc,#160] ; [0x10019a4] = 0x1006245
+        0x01001902:    2196        .!      MOVS     r1,#0x96
+        0x01001904:    a016        ..      ADR      r0,{pc}+0x5c ; 0x1001960
+        0x01001906:    f7feff7f    ....    BL       _assert_handler ; 0x1000808
+        0x0100190a:    2c01        .,      CMP      r4,#1
+        0x0100190c:    d052        R.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x0100190e:    2c02        .,      CMP      r4,#2
+        0x01001910:    d050        P.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x01001912:    2c04        .,      CMP      r4,#4
+        0x01001914:    d04e        N.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x01001916:    2c08        .,      CMP      r4,#8
+        0x01001918:    d04c        L.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x0100191a:    2c10        .,      CMP      r4,#0x10
+        0x0100191c:    d04a        J.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x0100191e:    2c20         ,      CMP      r4,#0x20
+        0x01001920:    d048        H.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x01001922:    2c40        @,      CMP      r4,#0x40
+        0x01001924:    d046        F.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x01001926:    2c80        .,      CMP      r4,#0x80
+        0x01001928:    d044        D.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x0100192a:    20ff        .       MOVS     r0,#0xff
+        0x0100192c:    3001        .0      ADDS     r0,#1
+        0x0100192e:    4284        .B      CMP      r4,r0
+        0x01001930:    d040        @.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x01001932:    0040        @.      LSLS     r0,r0,#1
+        0x01001934:    4284        .B      CMP      r4,r0
+        0x01001936:    d03d        =.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x01001938:    0040        @.      LSLS     r0,r0,#1
+        0x0100193a:    4284        .B      CMP      r4,r0
+        0x0100193c:    d03a        :.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x0100193e:    0040        @.      LSLS     r0,r0,#1
+        0x01001940:    4284        .B      CMP      r4,r0
+        0x01001942:    d037        7.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x01001944:    0040        @.      LSLS     r0,r0,#1
+        0x01001946:    4284        .B      CMP      r4,r0
+        0x01001948:    d034        4.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x0100194a:    0040        @.      LSLS     r0,r0,#1
+        0x0100194c:    4284        .B      CMP      r4,r0
+        0x0100194e:    d031        1.      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x01001950:    0040        @.      LSLS     r0,r0,#1
+        0x01001952:    4284        .B      CMP      r4,r0
+        0x01001954:    d02e        ..      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x01001956:    0040        @.      LSLS     r0,r0,#1
+        0x01001958:    4284        .B      CMP      r4,r0
+        0x0100195a:    e025        %.      B        0x10019a8 ; GPIO_ResetBits + 178
+    $d
+        0x0100195c:    010061cc    .a..    DCD    16802252
+        0x01001960:    2e5c2e2e    ..\.    DCD    777793070
+        0x01001964:    2e2e5c2e    .\..    DCD    774790190
+        0x01001968:    5c2e2e5c    \..\    DCD    1546530396
+        0x0100196c:    4c5c2e2e    ..\L    DCD    1281109550
+        0x01001970:    61726269    ibra    DCD    1634886249
+        0x01001974:    72656972    rier    DCD    1919248754
+        0x01001978:    6b64735c    \sdk    DCD    1801745244
+        0x0100197c:    5f63795c    \yc_    DCD    1600354652
+        0x01001980:    6f697067    gpio    DCD    1869181031
+        0x01001984:    0000632e    .c..    DCD    25390
+        0x01001988:    000f8700    ....    DCD    1017600
+        0x0100198c:    010061d8    .a..    DCD    16802264
+        0x01001990:    010061e2    .a..    DCD    16802274
+        0x01001994:    010061f1    .a..    DCD    16802289
+        0x01001998:    01006204    .b..    DCD    16802308
+        0x0100199c:    0100621a    .b..    DCD    16802330
+        0x010019a0:    0100622e    .b..    DCD    16802350
+        0x010019a4:    01006245    Eb..    DCD    16802373
+    $t
+        0x010019a8:    d004        ..      BEQ      0x10019b4 ; GPIO_ResetBits + 190
+        0x010019aa:    4a6c        lJ      LDR      r2,[pc,#432] ; [0x1001b5c] = 0x1006245
+        0x010019ac:    2197        .!      MOVS     r1,#0x97
+        0x010019ae:    486c        lH      LDR      r0,[pc,#432] ; [0x1001b60] = 0x1001960
+        0x010019b0:    f7feff2a    ..*.    BL       _assert_handler ; 0x1000808
+        0x010019b4:    2500        .%      MOVS     r5,#0
+        0x010019b6:    e010        ..      B        0x10019da ; GPIO_ResetBits + 228
+        0x010019b8:    2001        .       MOVS     r0,#1
+        0x010019ba:    40a8        .@      LSLS     r0,r0,r5
+        0x010019bc:    4020         @      ANDS     r0,r0,r4
+        0x010019be:    2800        .(      CMP      r0,#0
+        0x010019c0:    d00a        ..      BEQ      0x10019d8 ; GPIO_ResetBits + 226
+        0x010019c2:    0130        0.      LSLS     r0,r6,#4
+        0x010019c4:    4967        gI      LDR      r1,[pc,#412] ; [0x1001b64] = 0xf8700
+        0x010019c6:    1840        @.      ADDS     r0,r0,r1
+        0x010019c8:    5d47        G]      LDRB     r7,[r0,r5]
+        0x010019ca:    203f        ?       MOVS     r0,#0x3f
+        0x010019cc:    4307        .C      ORRS     r7,r7,r0
+        0x010019ce:    20fe        .       MOVS     r0,#0xfe
+        0x010019d0:    4007        .@      ANDS     r7,r7,r0
+        0x010019d2:    0130        0.      LSLS     r0,r6,#4
+        0x010019d4:    1840        @.      ADDS     r0,r0,r1
+        0x010019d6:    5547        GU      STRB     r7,[r0,r5]
+        0x010019d8:    1c6d        m.      ADDS     r5,r5,#1
+        0x010019da:    2d10        .-      CMP      r5,#0x10
+        0x010019dc:    dbec        ..      BLT      0x10019b8 ; GPIO_ResetBits + 194
+        0x010019de:    bdf8        ..      POP      {r3-r7,pc}
+    GPIO_SetBits
+        0x010019e0:    b570        p.      PUSH     {r4-r6,lr}
+        0x010019e2:    4606        .F      MOV      r6,r0
+        0x010019e4:    460c        .F      MOV      r4,r1
+        0x010019e6:    2e03        ..      CMP      r6,#3
+        0x010019e8:    db04        ..      BLT      0x10019f4 ; GPIO_SetBits + 20
+        0x010019ea:    4a5f        _J      LDR      r2,[pc,#380] ; [0x1001b68] = 0x1006254
+        0x010019ec:    21aa        .!      MOVS     r1,#0xaa
+        0x010019ee:    485c        \H      LDR      r0,[pc,#368] ; [0x1001b60] = 0x1001960
+        0x010019f0:    f7feff0a    ....    BL       _assert_handler ; 0x1000808
+        0x010019f4:    2c01        .,      CMP      r4,#1
+        0x010019f6:    d02b        +.      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x010019f8:    2c02        .,      CMP      r4,#2
+        0x010019fa:    d029        ).      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x010019fc:    2c04        .,      CMP      r4,#4
+        0x010019fe:    d027        '.      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a00:    2c08        .,      CMP      r4,#8
+        0x01001a02:    d025        %.      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a04:    2c10        .,      CMP      r4,#0x10
+        0x01001a06:    d023        #.      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a08:    2c20         ,      CMP      r4,#0x20
+        0x01001a0a:    d021        !.      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a0c:    2c40        @,      CMP      r4,#0x40
+        0x01001a0e:    d01f        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a10:    2c80        .,      CMP      r4,#0x80
+        0x01001a12:    d01d        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a14:    20ff        .       MOVS     r0,#0xff
+        0x01001a16:    3001        .0      ADDS     r0,#1
+        0x01001a18:    4284        .B      CMP      r4,r0
+        0x01001a1a:    d019        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a1c:    0040        @.      LSLS     r0,r0,#1
+        0x01001a1e:    4284        .B      CMP      r4,r0
+        0x01001a20:    d016        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a22:    0040        @.      LSLS     r0,r0,#1
+        0x01001a24:    4284        .B      CMP      r4,r0
+        0x01001a26:    d013        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a28:    0040        @.      LSLS     r0,r0,#1
+        0x01001a2a:    4284        .B      CMP      r4,r0
+        0x01001a2c:    d010        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a2e:    0040        @.      LSLS     r0,r0,#1
+        0x01001a30:    4284        .B      CMP      r4,r0
+        0x01001a32:    d00d        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a34:    0040        @.      LSLS     r0,r0,#1
+        0x01001a36:    4284        .B      CMP      r4,r0
+        0x01001a38:    d00a        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a3a:    0040        @.      LSLS     r0,r0,#1
+        0x01001a3c:    4284        .B      CMP      r4,r0
+        0x01001a3e:    d007        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a40:    0040        @.      LSLS     r0,r0,#1
+        0x01001a42:    4284        .B      CMP      r4,r0
+        0x01001a44:    d004        ..      BEQ      0x1001a50 ; GPIO_SetBits + 112
+        0x01001a46:    4a48        HJ      LDR      r2,[pc,#288] ; [0x1001b68] = 0x1006254
+        0x01001a48:    21ab        .!      MOVS     r1,#0xab
+        0x01001a4a:    4845        EH      LDR      r0,[pc,#276] ; [0x1001b60] = 0x1001960
+        0x01001a4c:    f7fefedc    ....    BL       _assert_handler ; 0x1000808
+        0x01001a50:    2500        .%      MOVS     r5,#0
+        0x01001a52:    e00f        ..      B        0x1001a74 ; GPIO_SetBits + 148
+        0x01001a54:    2001        .       MOVS     r0,#1
+        0x01001a56:    40a8        .@      LSLS     r0,r0,r5
+        0x01001a58:    4020         @      ANDS     r0,r0,r4
+        0x01001a5a:    2800        .(      CMP      r0,#0
+        0x01001a5c:    d009        ..      BEQ      0x1001a72 ; GPIO_SetBits + 146
+        0x01001a5e:    0130        0.      LSLS     r0,r6,#4
+        0x01001a60:    4940        @I      LDR      r1,[pc,#256] ; [0x1001b64] = 0xf8700
+        0x01001a62:    1840        @.      ADDS     r0,r0,r1
+        0x01001a64:    5d40        @]      LDRB     r0,[r0,r5]
+        0x01001a66:    213f        ?!      MOVS     r1,#0x3f
+        0x01001a68:    4308        .C      ORRS     r0,r0,r1
+        0x01001a6a:    0131        1.      LSLS     r1,r6,#4
+        0x01001a6c:    4a3d        =J      LDR      r2,[pc,#244] ; [0x1001b64] = 0xf8700
+        0x01001a6e:    1889        ..      ADDS     r1,r1,r2
+        0x01001a70:    5548        HU      STRB     r0,[r1,r5]
+        0x01001a72:    1c6d        m.      ADDS     r5,r5,#1
+        0x01001a74:    2d10        .-      CMP      r5,#0x10
+        0x01001a76:    dbed        ..      BLT      0x1001a54 ; GPIO_SetBits + 116
+        0x01001a78:    bd70        p.      POP      {r4-r6,pc}
+    GPIO_StructInit
+        0x01001a7a:    2100        .!      MOVS     r1,#0
+        0x01001a7c:    43c9        .C      MVNS     r1,r1
+        0x01001a7e:    8001        ..      STRH     r1,[r0,#0]
+        0x01001a80:    2101        .!      MOVS     r1,#1
+        0x01001a82:    7081        .p      STRB     r1,[r0,#2]
+        0x01001a84:    4770        pG      BX       lr
+    GPIO_Write
+        0x01001a86:    b570        p.      PUSH     {r4-r6,lr}
+        0x01001a88:    4605        .F      MOV      r5,r0
+        0x01001a8a:    460e        .F      MOV      r6,r1
+        0x01001a8c:    2d03        .-      CMP      r5,#3
+        0x01001a8e:    db04        ..      BLT      0x1001a9a ; GPIO_Write + 20
+        0x01001a90:    4a36        6J      LDR      r2,[pc,#216] ; [0x1001b6c] = 0x1006261
+        0x01001a92:    21be        .!      MOVS     r1,#0xbe
+        0x01001a94:    4832        2H      LDR      r0,[pc,#200] ; [0x1001b60] = 0x1001960
+        0x01001a96:    f7fefeb7    ....    BL       _assert_handler ; 0x1000808
+        0x01001a9a:    2400        .$      MOVS     r4,#0
+        0x01001a9c:    e013        ..      B        0x1001ac6 ; GPIO_Write + 64
+        0x01001a9e:    2001        .       MOVS     r0,#1
+        0x01001aa0:    40a0        .@      LSLS     r0,r0,r4
+        0x01001aa2:    4030        0@      ANDS     r0,r0,r6
+        0x01001aa4:    4120         A      ASRS     r0,r0,r4
+        0x01001aa6:    2800        .(      CMP      r0,#0
+        0x01001aa8:    d006        ..      BEQ      0x1001ab8 ; GPIO_Write + 50
+        0x01001aaa:    2001        .       MOVS     r0,#1
+        0x01001aac:    40a0        .@      LSLS     r0,r0,r4
+        0x01001aae:    b281        ..      UXTH     r1,r0
+        0x01001ab0:    4628        (F      MOV      r0,r5
+        0x01001ab2:    f7ffff95    ....    BL       GPIO_SetBits ; 0x10019e0
+        0x01001ab6:    e005        ..      B        0x1001ac4 ; GPIO_Write + 62
+        0x01001ab8:    2001        .       MOVS     r0,#1
+        0x01001aba:    40a0        .@      LSLS     r0,r0,r4
+        0x01001abc:    b281        ..      UXTH     r1,r0
+        0x01001abe:    4628        (F      MOV      r0,r5
+        0x01001ac0:    f7ffff19    ....    BL       GPIO_ResetBits ; 0x10018f6
+        0x01001ac4:    1c64        d.      ADDS     r4,r4,#1
+        0x01001ac6:    2c10        .,      CMP      r4,#0x10
+        0x01001ac8:    dbe9        ..      BLT      0x1001a9e ; GPIO_Write + 24
+        0x01001aca:    bd70        p.      POP      {r4-r6,pc}
+    GPIO_WriteBit
+        0x01001acc:    b570        p.      PUSH     {r4-r6,lr}
+        0x01001ace:    4606        .F      MOV      r6,r0
+        0x01001ad0:    460c        .F      MOV      r4,r1
+        0x01001ad2:    4615        .F      MOV      r5,r2
+        0x01001ad4:    2e03        ..      CMP      r6,#3
+        0x01001ad6:    db04        ..      BLT      0x1001ae2 ; GPIO_WriteBit + 22
+        0x01001ad8:    4a25        %J      LDR      r2,[pc,#148] ; [0x1001b70] = 0x100626c
+        0x01001ada:    21cd        .!      MOVS     r1,#0xcd
+        0x01001adc:    4820         H      LDR      r0,[pc,#128] ; [0x1001b60] = 0x1001960
+        0x01001ade:    f7fefe93    ....    BL       _assert_handler ; 0x1000808
+        0x01001ae2:    2c01        .,      CMP      r4,#1
+        0x01001ae4:    d02b        +.      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001ae6:    2c02        .,      CMP      r4,#2
+        0x01001ae8:    d029        ).      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001aea:    2c04        .,      CMP      r4,#4
+        0x01001aec:    d027        '.      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001aee:    2c08        .,      CMP      r4,#8
+        0x01001af0:    d025        %.      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001af2:    2c10        .,      CMP      r4,#0x10
+        0x01001af4:    d023        #.      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001af6:    2c20         ,      CMP      r4,#0x20
+        0x01001af8:    d021        !.      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001afa:    2c40        @,      CMP      r4,#0x40
+        0x01001afc:    d01f        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001afe:    2c80        .,      CMP      r4,#0x80
+        0x01001b00:    d01d        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001b02:    20ff        .       MOVS     r0,#0xff
+        0x01001b04:    3001        .0      ADDS     r0,#1
+        0x01001b06:    4284        .B      CMP      r4,r0
+        0x01001b08:    d019        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001b0a:    0040        @.      LSLS     r0,r0,#1
+        0x01001b0c:    4284        .B      CMP      r4,r0
+        0x01001b0e:    d016        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001b10:    0040        @.      LSLS     r0,r0,#1
+        0x01001b12:    4284        .B      CMP      r4,r0
+        0x01001b14:    d013        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001b16:    0040        @.      LSLS     r0,r0,#1
+        0x01001b18:    4284        .B      CMP      r4,r0
+        0x01001b1a:    d010        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001b1c:    0040        @.      LSLS     r0,r0,#1
+        0x01001b1e:    4284        .B      CMP      r4,r0
+        0x01001b20:    d00d        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001b22:    0040        @.      LSLS     r0,r0,#1
+        0x01001b24:    4284        .B      CMP      r4,r0
+        0x01001b26:    d00a        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001b28:    0040        @.      LSLS     r0,r0,#1
+        0x01001b2a:    4284        .B      CMP      r4,r0
+        0x01001b2c:    d007        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001b2e:    0040        @.      LSLS     r0,r0,#1
+        0x01001b30:    4284        .B      CMP      r4,r0
+        0x01001b32:    d004        ..      BEQ      0x1001b3e ; GPIO_WriteBit + 114
+        0x01001b34:    4a0e        .J      LDR      r2,[pc,#56] ; [0x1001b70] = 0x100626c
+        0x01001b36:    21ce        .!      MOVS     r1,#0xce
+        0x01001b38:    4809        .H      LDR      r0,[pc,#36] ; [0x1001b60] = 0x1001960
+        0x01001b3a:    f7fefe65    ..e.    BL       _assert_handler ; 0x1000808
+        0x01001b3e:    2d01        .-      CMP      r5,#1
+        0x01001b40:    d104        ..      BNE      0x1001b4c ; GPIO_WriteBit + 128
+        0x01001b42:    4621        !F      MOV      r1,r4
+        0x01001b44:    4630        0F      MOV      r0,r6
+        0x01001b46:    f7ffff4b    ..K.    BL       GPIO_SetBits ; 0x10019e0
+        0x01001b4a:    e005        ..      B        0x1001b58 ; GPIO_WriteBit + 140
+        0x01001b4c:    2d00        .-      CMP      r5,#0
+        0x01001b4e:    d103        ..      BNE      0x1001b58 ; GPIO_WriteBit + 140
+        0x01001b50:    4621        !F      MOV      r1,r4
+        0x01001b52:    4630        0F      MOV      r0,r6
+        0x01001b54:    f7fffecf    ....    BL       GPIO_ResetBits ; 0x10018f6
+        0x01001b58:    bd70        p.      POP      {r4-r6,pc}
+    $d
+        0x01001b5a:    0000        ..      DCW    0
+        0x01001b5c:    01006245    Eb..    DCD    16802373
+        0x01001b60:    01001960    `...    DCD    16783712
+        0x01001b64:    000f8700    ....    DCD    1017600
+        0x01001b68:    01006254    Tb..    DCD    16802388
+        0x01001b6c:    01006261    ab..    DCD    16802401
+        0x01001b70:    0100626c    lb..    DCD    16802412
+    $t
+    .text
+    UART_AutoFlowCtrlCmd
+        0x01001b74:    b570        p.      PUSH     {r4-r6,lr}
+        0x01001b76:    4604        .F      MOV      r4,r0
+        0x01001b78:    460d        .F      MOV      r5,r1
+        0x01001b7a:    2c00        .,      CMP      r4,#0
+        0x01001b7c:    d006        ..      BEQ      0x1001b8c ; UART_AutoFlowCtrlCmd + 24
+        0x01001b7e:    2c01        .,      CMP      r4,#1
+        0x01001b80:    d004        ..      BEQ      0x1001b8c ; UART_AutoFlowCtrlCmd + 24
+        0x01001b82:    4af3        .J      LDR      r2,[pc,#972] ; [0x1001f50] = 0x100627a
+        0x01001b84:    211c        .!      MOVS     r1,#0x1c
+        0x01001b86:    a0f3        ..      ADR      r0,{pc}+0x3ce ; 0x1001f54
+        0x01001b88:    f7fefe3e    ..>.    BL       _assert_handler ; 0x1000808
+        0x01001b8c:    2d01        .-      CMP      r5,#1
+        0x01001b8e:    d113        ..      BNE      0x1001bb8 ; UART_AutoFlowCtrlCmd + 68
+        0x01001b90:    2c00        .,      CMP      r4,#0
+        0x01001b92:    d002        ..      BEQ      0x1001b9a ; UART_AutoFlowCtrlCmd + 38
+        0x01001b94:    2c01        .,      CMP      r4,#1
+        0x01001b96:    d10e        ..      BNE      0x1001bb6 ; UART_AutoFlowCtrlCmd + 66
+        0x01001b98:    e006        ..      B        0x1001ba8 ; UART_AutoFlowCtrlCmd + 52
+        0x01001b9a:    48f8        .H      LDR      r0,[pc,#992] ; [0x1001f7c] = 0xf8b00
+        0x01001b9c:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001b9e:    2110        .!      MOVS     r1,#0x10
+        0x01001ba0:    4308        .C      ORRS     r0,r0,r1
+        0x01001ba2:    49f6        .I      LDR      r1,[pc,#984] ; [0x1001f7c] = 0xf8b00
+        0x01001ba4:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001ba6:    e006        ..      B        0x1001bb6 ; UART_AutoFlowCtrlCmd + 66
+        0x01001ba8:    48f5        .H      LDR      r0,[pc,#980] ; [0x1001f80] = 0xf8c00
+        0x01001baa:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001bac:    2110        .!      MOVS     r1,#0x10
+        0x01001bae:    4308        .C      ORRS     r0,r0,r1
+        0x01001bb0:    49f3        .I      LDR      r1,[pc,#972] ; [0x1001f80] = 0xf8c00
+        0x01001bb2:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001bb4:    bf00        ..      NOP      
+        0x01001bb6:    e013        ..      B        0x1001be0 ; UART_AutoFlowCtrlCmd + 108
+        0x01001bb8:    2c00        .,      CMP      r4,#0
+        0x01001bba:    d002        ..      BEQ      0x1001bc2 ; UART_AutoFlowCtrlCmd + 78
+        0x01001bbc:    2c01        .,      CMP      r4,#1
+        0x01001bbe:    d10e        ..      BNE      0x1001bde ; UART_AutoFlowCtrlCmd + 106
+        0x01001bc0:    e006        ..      B        0x1001bd0 ; UART_AutoFlowCtrlCmd + 92
+        0x01001bc2:    48ee        .H      LDR      r0,[pc,#952] ; [0x1001f7c] = 0xf8b00
+        0x01001bc4:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001bc6:    2110        .!      MOVS     r1,#0x10
+        0x01001bc8:    4388        .C      BICS     r0,r0,r1
+        0x01001bca:    49ec        .I      LDR      r1,[pc,#944] ; [0x1001f7c] = 0xf8b00
+        0x01001bcc:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001bce:    e006        ..      B        0x1001bde ; UART_AutoFlowCtrlCmd + 106
+        0x01001bd0:    48eb        .H      LDR      r0,[pc,#940] ; [0x1001f80] = 0xf8c00
+        0x01001bd2:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001bd4:    2110        .!      MOVS     r1,#0x10
+        0x01001bd6:    4388        .C      BICS     r0,r0,r1
+        0x01001bd8:    49e9        .I      LDR      r1,[pc,#932] ; [0x1001f80] = 0xf8c00
+        0x01001bda:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001bdc:    bf00        ..      NOP      
+        0x01001bde:    bf00        ..      NOP      
+        0x01001be0:    bd70        p.      POP      {r4-r6,pc}
+    UART_ITConfig
+        0x01001be2:    b570        p.      PUSH     {r4-r6,lr}
+        0x01001be4:    4606        .F      MOV      r6,r0
+        0x01001be6:    460c        .F      MOV      r4,r1
+        0x01001be8:    4615        .F      MOV      r5,r2
+        0x01001bea:    2e00        ..      CMP      r6,#0
+        0x01001bec:    d006        ..      BEQ      0x1001bfc ; UART_ITConfig + 26
+        0x01001bee:    2e01        ..      CMP      r6,#1
+        0x01001bf0:    d004        ..      BEQ      0x1001bfc ; UART_ITConfig + 26
+        0x01001bf2:    4ae4        .J      LDR      r2,[pc,#912] ; [0x1001f84] = 0x10062ed
+        0x01001bf4:    21f3        .!      MOVS     r1,#0xf3
+        0x01001bf6:    a0d7        ..      ADR      r0,{pc}+0x35e ; 0x1001f54
+        0x01001bf8:    f7fefe06    ....    BL       _assert_handler ; 0x1000808
+        0x01001bfc:    2c01        .,      CMP      r4,#1
+        0x01001bfe:    d006        ..      BEQ      0x1001c0e ; UART_ITConfig + 44
+        0x01001c00:    2c02        .,      CMP      r4,#2
+        0x01001c02:    d004        ..      BEQ      0x1001c0e ; UART_ITConfig + 44
+        0x01001c04:    4adf        .J      LDR      r2,[pc,#892] ; [0x1001f84] = 0x10062ed
+        0x01001c06:    21f4        .!      MOVS     r1,#0xf4
+        0x01001c08:    a0d2        ..      ADR      r0,{pc}+0x34c ; 0x1001f54
+        0x01001c0a:    f7fefdfd    ....    BL       _assert_handler ; 0x1000808
+        0x01001c0e:    2e00        ..      CMP      r6,#0
+        0x01001c10:    d002        ..      BEQ      0x1001c18 ; UART_ITConfig + 54
+        0x01001c12:    2e01        ..      CMP      r6,#1
+        0x01001c14:    d144        D.      BNE      0x1001ca0 ; UART_ITConfig + 190
+        0x01001c16:    e021        !.      B        0x1001c5c ; UART_ITConfig + 122
+        0x01001c18:    2c02        .,      CMP      r4,#2
+        0x01001c1a:    d110        ..      BNE      0x1001c3e ; UART_ITConfig + 92
+        0x01001c1c:    2d00        .-      CMP      r5,#0
+        0x01001c1e:    d006        ..      BEQ      0x1001c2e ; UART_ITConfig + 76
+        0x01001c20:    48d6        .H      LDR      r0,[pc,#856] ; [0x1001f7c] = 0xf8b00
+        0x01001c22:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001c24:    01e1        ..      LSLS     r1,r4,#7
+        0x01001c26:    4308        .C      ORRS     r0,r0,r1
+        0x01001c28:    49d4        .I      LDR      r1,[pc,#848] ; [0x1001f7c] = 0xf8b00
+        0x01001c2a:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001c2c:    e015        ..      B        0x1001c5a ; UART_ITConfig + 120
+        0x01001c2e:    48d3        .H      LDR      r0,[pc,#844] ; [0x1001f7c] = 0xf8b00
+        0x01001c30:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001c32:    21ff        .!      MOVS     r1,#0xff
+        0x01001c34:    0209        ..      LSLS     r1,r1,#8
+        0x01001c36:    4388        .C      BICS     r0,r0,r1
+        0x01001c38:    49d0        .I      LDR      r1,[pc,#832] ; [0x1001f7c] = 0xf8b00
+        0x01001c3a:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001c3c:    e00d        ..      B        0x1001c5a ; UART_ITConfig + 120
+        0x01001c3e:    2c01        .,      CMP      r4,#1
+        0x01001c40:    d10b        ..      BNE      0x1001c5a ; UART_ITConfig + 120
+        0x01001c42:    48ce        .H      LDR      r0,[pc,#824] ; [0x1001f7c] = 0xf8b00
+        0x01001c44:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001c46:    0040        @.      LSLS     r0,r0,#1
+        0x01001c48:    0840        @.      LSRS     r0,r0,#1
+        0x01001c4a:    49cc        .I      LDR      r1,[pc,#816] ; [0x1001f7c] = 0xf8b00
+        0x01001c4c:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001c4e:    4608        .F      MOV      r0,r1
+        0x01001c50:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001c52:    07e9        ..      LSLS     r1,r5,#31
+        0x01001c54:    4308        .C      ORRS     r0,r0,r1
+        0x01001c56:    49c9        .I      LDR      r1,[pc,#804] ; [0x1001f7c] = 0xf8b00
+        0x01001c58:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001c5a:    e021        !.      B        0x1001ca0 ; UART_ITConfig + 190
+        0x01001c5c:    2c02        .,      CMP      r4,#2
+        0x01001c5e:    d110        ..      BNE      0x1001c82 ; UART_ITConfig + 160
+        0x01001c60:    2d00        .-      CMP      r5,#0
+        0x01001c62:    d006        ..      BEQ      0x1001c72 ; UART_ITConfig + 144
+        0x01001c64:    48c6        .H      LDR      r0,[pc,#792] ; [0x1001f80] = 0xf8c00
+        0x01001c66:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001c68:    01e1        ..      LSLS     r1,r4,#7
+        0x01001c6a:    4308        .C      ORRS     r0,r0,r1
+        0x01001c6c:    49c4        .I      LDR      r1,[pc,#784] ; [0x1001f80] = 0xf8c00
+        0x01001c6e:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001c70:    e015        ..      B        0x1001c9e ; UART_ITConfig + 188
+        0x01001c72:    48c3        .H      LDR      r0,[pc,#780] ; [0x1001f80] = 0xf8c00
+        0x01001c74:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001c76:    21ff        .!      MOVS     r1,#0xff
+        0x01001c78:    0209        ..      LSLS     r1,r1,#8
+        0x01001c7a:    4388        .C      BICS     r0,r0,r1
+        0x01001c7c:    49c0        .I      LDR      r1,[pc,#768] ; [0x1001f80] = 0xf8c00
+        0x01001c7e:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001c80:    e00d        ..      B        0x1001c9e ; UART_ITConfig + 188
+        0x01001c82:    2c01        .,      CMP      r4,#1
+        0x01001c84:    d10b        ..      BNE      0x1001c9e ; UART_ITConfig + 188
+        0x01001c86:    48be        .H      LDR      r0,[pc,#760] ; [0x1001f80] = 0xf8c00
+        0x01001c88:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001c8a:    0040        @.      LSLS     r0,r0,#1
+        0x01001c8c:    0840        @.      LSRS     r0,r0,#1
+        0x01001c8e:    49bc        .I      LDR      r1,[pc,#752] ; [0x1001f80] = 0xf8c00
+        0x01001c90:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001c92:    4608        .F      MOV      r0,r1
+        0x01001c94:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01001c96:    07e9        ..      LSLS     r1,r5,#31
+        0x01001c98:    4308        .C      ORRS     r0,r0,r1
+        0x01001c9a:    49b9        .I      LDR      r1,[pc,#740] ; [0x1001f80] = 0xf8c00
+        0x01001c9c:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001c9e:    bf00        ..      NOP      
+        0x01001ca0:    bf00        ..      NOP      
+        0x01001ca2:    bd70        p.      POP      {r4-r6,pc}
+    UART_GetITIdentity
+        0x01001ca4:    4601        .F      MOV      r1,r0
+        0x01001ca6:    2000        .       MOVS     r0,#0
+        0x01001ca8:    2900        .)      CMP      r1,#0
+        0x01001caa:    d002        ..      BEQ      0x1001cb2 ; UART_GetITIdentity + 14
+        0x01001cac:    2901        .)      CMP      r1,#1
+        0x01001cae:    d130        0.      BNE      0x1001d12 ; UART_GetITIdentity + 110
+        0x01001cb0:    e017        ..      B        0x1001ce2 ; UART_GetITIdentity + 62
+        0x01001cb2:    4ab2        .J      LDR      r2,[pc,#712] ; [0x1001f7c] = 0xf8b00
+        0x01001cb4:    69d2        .i      LDR      r2,[r2,#0x1c]
+        0x01001cb6:    23ff        .#      MOVS     r3,#0xff
+        0x01001cb8:    021b        ..      LSLS     r3,r3,#8
+        0x01001cba:    401a        .@      ANDS     r2,r2,r3
+        0x01001cbc:    2a00        .*      CMP      r2,#0
+        0x01001cbe:    dd06        ..      BLE      0x1001cce ; UART_GetITIdentity + 42
+        0x01001cc0:    4aae        .J      LDR      r2,[pc,#696] ; [0x1001f7c] = 0xf8b00
+        0x01001cc2:    6a92        .j      LDR      r2,[r2,#0x28]
+        0x01001cc4:    1412        ..      ASRS     r2,r2,#16
+        0x01001cc6:    2a00        .*      CMP      r2,#0
+        0x01001cc8:    dd01        ..      BLE      0x1001cce ; UART_GetITIdentity + 42
+        0x01001cca:    2002        .       MOVS     r0,#2
+        0x01001ccc:    e008        ..      B        0x1001ce0 ; UART_GetITIdentity + 60
+        0x01001cce:    4aab        .J      LDR      r2,[pc,#684] ; [0x1001f7c] = 0xf8b00
+        0x01001cd0:    69d2        .i      LDR      r2,[r2,#0x1c]
+        0x01001cd2:    0fd2        ..      LSRS     r2,r2,#31
+        0x01001cd4:    07d2        ..      LSLS     r2,r2,#31
+        0x01001cd6:    2a00        .*      CMP      r2,#0
+        0x01001cd8:    d001        ..      BEQ      0x1001cde ; UART_GetITIdentity + 58
+        0x01001cda:    2001        .       MOVS     r0,#1
+        0x01001cdc:    e000        ..      B        0x1001ce0 ; UART_GetITIdentity + 60
+        0x01001cde:    2000        .       MOVS     r0,#0
+        0x01001ce0:    e017        ..      B        0x1001d12 ; UART_GetITIdentity + 110
+        0x01001ce2:    4aa7        .J      LDR      r2,[pc,#668] ; [0x1001f80] = 0xf8c00
+        0x01001ce4:    69d2        .i      LDR      r2,[r2,#0x1c]
+        0x01001ce6:    23ff        .#      MOVS     r3,#0xff
+        0x01001ce8:    021b        ..      LSLS     r3,r3,#8
+        0x01001cea:    401a        .@      ANDS     r2,r2,r3
+        0x01001cec:    2a00        .*      CMP      r2,#0
+        0x01001cee:    dd06        ..      BLE      0x1001cfe ; UART_GetITIdentity + 90
+        0x01001cf0:    4aa3        .J      LDR      r2,[pc,#652] ; [0x1001f80] = 0xf8c00
+        0x01001cf2:    6a92        .j      LDR      r2,[r2,#0x28]
+        0x01001cf4:    1412        ..      ASRS     r2,r2,#16
+        0x01001cf6:    2a00        .*      CMP      r2,#0
+        0x01001cf8:    dd01        ..      BLE      0x1001cfe ; UART_GetITIdentity + 90
+        0x01001cfa:    2002        .       MOVS     r0,#2
+        0x01001cfc:    e008        ..      B        0x1001d10 ; UART_GetITIdentity + 108
+        0x01001cfe:    4aa0        .J      LDR      r2,[pc,#640] ; [0x1001f80] = 0xf8c00
+        0x01001d00:    69d2        .i      LDR      r2,[r2,#0x1c]
+        0x01001d02:    0fd2        ..      LSRS     r2,r2,#31
+        0x01001d04:    07d2        ..      LSLS     r2,r2,#31
+        0x01001d06:    2a00        .*      CMP      r2,#0
+        0x01001d08:    d001        ..      BEQ      0x1001d0e ; UART_GetITIdentity + 106
+        0x01001d0a:    2001        .       MOVS     r0,#1
+        0x01001d0c:    e000        ..      B        0x1001d10 ; UART_GetITIdentity + 108
+        0x01001d0e:    2000        .       MOVS     r0,#0
+        0x01001d10:    bf00        ..      NOP      
+        0x01001d12:    bf00        ..      NOP      
+        0x01001d14:    4770        pG      BX       lr
+    UART_ClearIT
+        0x01001d16:    b570        p.      PUSH     {r4-r6,lr}
+        0x01001d18:    4604        .F      MOV      r4,r0
+        0x01001d1a:    4620         F      MOV      r0,r4
+        0x01001d1c:    f7ffffc2    ....    BL       UART_GetITIdentity ; 0x1001ca4
+        0x01001d20:    4605        .F      MOV      r5,r0
+        0x01001d22:    2200        ."      MOVS     r2,#0
+        0x01001d24:    4629        )F      MOV      r1,r5
+        0x01001d26:    4620         F      MOV      r0,r4
+        0x01001d28:    f7ffff5b    ..[.    BL       UART_ITConfig ; 0x1001be2
+        0x01001d2c:    bd70        p.      POP      {r4-r6,pc}
+    UART_DeInit
+        0x01001d2e:    b510        ..      PUSH     {r4,lr}
+        0x01001d30:    4604        .F      MOV      r4,r0
+        0x01001d32:    2c00        .,      CMP      r4,#0
+        0x01001d34:    d006        ..      BEQ      0x1001d44 ; UART_DeInit + 22
+        0x01001d36:    2c01        .,      CMP      r4,#1
+        0x01001d38:    d004        ..      BEQ      0x1001d44 ; UART_DeInit + 22
+        0x01001d3a:    4a93        .J      LDR      r2,[pc,#588] ; [0x1001f88] = 0x100628f
+        0x01001d3c:    2141        A!      MOVS     r1,#0x41
+        0x01001d3e:    a085        ..      ADR      r0,{pc}+0x216 ; 0x1001f54
+        0x01001d40:    f7fefd62    ..b.    BL       _assert_handler ; 0x1000808
+        0x01001d44:    2c00        .,      CMP      r4,#0
+        0x01001d46:    d002        ..      BEQ      0x1001d4e ; UART_DeInit + 32
+        0x01001d48:    2c01        .,      CMP      r4,#1
+        0x01001d4a:    d108        ..      BNE      0x1001d5e ; UART_DeInit + 48
+        0x01001d4c:    e003        ..      B        0x1001d56 ; UART_DeInit + 40
+        0x01001d4e:    2000        .       MOVS     r0,#0
+        0x01001d50:    498a        .I      LDR      r1,[pc,#552] ; [0x1001f7c] = 0xf8b00
+        0x01001d52:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001d54:    e003        ..      B        0x1001d5e ; UART_DeInit + 48
+        0x01001d56:    2000        .       MOVS     r0,#0
+        0x01001d58:    4989        .I      LDR      r1,[pc,#548] ; [0x1001f80] = 0xf8c00
+        0x01001d5a:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001d5c:    bf00        ..      NOP      
+        0x01001d5e:    bf00        ..      NOP      
+        0x01001d60:    bd10        ..      POP      {r4,pc}
+    UART_DMASendBuf
+        0x01001d62:    b570        p.      PUSH     {r4-r6,lr}
+        0x01001d64:    4604        .F      MOV      r4,r0
+        0x01001d66:    460d        .F      MOV      r5,r1
+        0x01001d68:    4616        .F      MOV      r6,r2
+        0x01001d6a:    2c00        .,      CMP      r4,#0
+        0x01001d6c:    d006        ..      BEQ      0x1001d7c ; UART_DMASendBuf + 26
+        0x01001d6e:    2c01        .,      CMP      r4,#1
+        0x01001d70:    d004        ..      BEQ      0x1001d7c ; UART_DMASendBuf + 26
+        0x01001d72:    4a86        .J      LDR      r2,[pc,#536] ; [0x1001f8c] = 0x100629b
+        0x01001d74:    2150        P!      MOVS     r1,#0x50
+        0x01001d76:    a077        w.      ADR      r0,{pc}+0x1de ; 0x1001f54
+        0x01001d78:    f7fefd46    ..F.    BL       _assert_handler ; 0x1000808
+        0x01001d7c:    2d00        .-      CMP      r5,#0
+        0x01001d7e:    d104        ..      BNE      0x1001d8a ; UART_DMASendBuf + 40
+        0x01001d80:    4a82        .J      LDR      r2,[pc,#520] ; [0x1001f8c] = 0x100629b
+        0x01001d82:    2151        Q!      MOVS     r1,#0x51
+        0x01001d84:    a073        s.      ADR      r0,{pc}+0x1d0 ; 0x1001f54
+        0x01001d86:    f7fefd3f    ..?.    BL       _assert_handler ; 0x1000808
+        0x01001d8a:    4881        .H      LDR      r0,[pc,#516] ; [0x1001f90] = 0xffff
+        0x01001d8c:    4286        .B      CMP      r6,r0
+        0x01001d8e:    db04        ..      BLT      0x1001d9a ; UART_DMASendBuf + 56
+        0x01001d90:    4a7e        ~J      LDR      r2,[pc,#504] ; [0x1001f8c] = 0x100629b
+        0x01001d92:    2152        R!      MOVS     r1,#0x52
+        0x01001d94:    a06f        o.      ADR      r0,{pc}+0x1c0 ; 0x1001f54
+        0x01001d96:    f7fefd37    ..7.    BL       _assert_handler ; 0x1000808
+        0x01001d9a:    2c00        .,      CMP      r4,#0
+        0x01001d9c:    d10a        ..      BNE      0x1001db4 ; UART_DMASendBuf + 82
+        0x01001d9e:    4877        wH      LDR      r0,[pc,#476] ; [0x1001f7c] = 0xf8b00
+        0x01001da0:    6005        .`      STR      r5,[r0,#0]
+        0x01001da2:    6880        .h      LDR      r0,[r0,#8]
+        0x01001da4:    b280        ..      UXTH     r0,r0
+        0x01001da6:    0431        1.      LSLS     r1,r6,#16
+        0x01001da8:    4308        .C      ORRS     r0,r0,r1
+        0x01001daa:    4974        tI      LDR      r1,[pc,#464] ; [0x1001f7c] = 0xf8b00
+        0x01001dac:    6088        .`      STR      r0,[r1,#8]
+        0x01001dae:    2080        .       MOVS     r0,#0x80
+        0x01001db0:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01001db2:    e00a        ..      B        0x1001dca ; UART_DMASendBuf + 104
+        0x01001db4:    4872        rH      LDR      r0,[pc,#456] ; [0x1001f80] = 0xf8c00
+        0x01001db6:    6005        .`      STR      r5,[r0,#0]
+        0x01001db8:    6880        .h      LDR      r0,[r0,#8]
+        0x01001dba:    b280        ..      UXTH     r0,r0
+        0x01001dbc:    0431        1.      LSLS     r1,r6,#16
+        0x01001dbe:    4308        .C      ORRS     r0,r0,r1
+        0x01001dc0:    496f        oI      LDR      r1,[pc,#444] ; [0x1001f80] = 0xf8c00
+        0x01001dc2:    6088        .`      STR      r0,[r1,#8]
+        0x01001dc4:    2080        .       MOVS     r0,#0x80
+        0x01001dc6:    496d        mI      LDR      r1,[pc,#436] ; [0x1001f7c] = 0xf8b00
+        0x01001dc8:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01001dca:    bd70        p.      POP      {r4-r6,pc}
+    UART_Init
+        0x01001dcc:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x01001dce:    4605        .F      MOV      r5,r0
+        0x01001dd0:    460c        .F      MOV      r4,r1
+        0x01001dd2:    2600        .&      MOVS     r6,#0
+        0x01001dd4:    2700        .'      MOVS     r7,#0
+        0x01001dd6:    2d00        .-      CMP      r5,#0
+        0x01001dd8:    d006        ..      BEQ      0x1001de8 ; UART_Init + 28
+        0x01001dda:    2d01        .-      CMP      r5,#1
+        0x01001ddc:    d004        ..      BEQ      0x1001de8 ; UART_Init + 28
+        0x01001dde:    4a6d        mJ      LDR      r2,[pc,#436] ; [0x1001f94] = 0x10062ab
+        0x01001de0:    219a        .!      MOVS     r1,#0x9a
+        0x01001de2:    a05c        \.      ADR      r0,{pc}+0x172 ; 0x1001f54
+        0x01001de4:    f7fefd10    ....    BL       _assert_handler ; 0x1000808
+        0x01001de8:    7820         x      LDRB     r0,[r4,#0]
+        0x01001dea:    2840        @(      CMP      r0,#0x40
+        0x01001dec:    d007        ..      BEQ      0x1001dfe ; UART_Init + 50
+        0x01001dee:    7820         x      LDRB     r0,[r4,#0]
+        0x01001df0:    2800        .(      CMP      r0,#0
+        0x01001df2:    d004        ..      BEQ      0x1001dfe ; UART_Init + 50
+        0x01001df4:    4a67        gJ      LDR      r2,[pc,#412] ; [0x1001f94] = 0x10062ab
+        0x01001df6:    219b        .!      MOVS     r1,#0x9b
+        0x01001df8:    a056        V.      ADR      r0,{pc}+0x15c ; 0x1001f54
+        0x01001dfa:    f7fefd05    ....    BL       _assert_handler ; 0x1000808
+        0x01001dfe:    21b7        .!      MOVS     r1,#0xb7
+        0x01001e00:    00c9        ..      LSLS     r1,r1,#3
+        0x01001e02:    6860        `h      LDR      r0,[r4,#4]
+        0x01001e04:    4288        .B      CMP      r0,r1
+        0x01001e06:    d903        ..      BLS      0x1001e10 ; UART_Init + 68
+        0x01001e08:    4963        cI      LDR      r1,[pc,#396] ; [0x1001f98] = 0x44aa21
+        0x01001e0a:    6860        `h      LDR      r0,[r4,#4]
+        0x01001e0c:    4288        .B      CMP      r0,r1
+        0x01001e0e:    d304        ..      BCC      0x1001e1a ; UART_Init + 78
+        0x01001e10:    4a60        `J      LDR      r2,[pc,#384] ; [0x1001f94] = 0x10062ab
+        0x01001e12:    219c        .!      MOVS     r1,#0x9c
+        0x01001e14:    a04f        O.      ADR      r0,{pc}+0x140 ; 0x1001f54
+        0x01001e16:    f7fefcf7    ....    BL       _assert_handler ; 0x1000808
+        0x01001e1a:    7aa0        .z      LDRB     r0,[r4,#0xa]
+        0x01001e1c:    2800        .(      CMP      r0,#0
+        0x01001e1e:    d00a        ..      BEQ      0x1001e36 ; UART_Init + 106
+        0x01001e20:    7aa0        .z      LDRB     r0,[r4,#0xa]
+        0x01001e22:    2800        .(      CMP      r0,#0
+        0x01001e24:    d007        ..      BEQ      0x1001e36 ; UART_Init + 106
+        0x01001e26:    7aa0        .z      LDRB     r0,[r4,#0xa]
+        0x01001e28:    2802        .(      CMP      r0,#2
+        0x01001e2a:    d004        ..      BEQ      0x1001e36 ; UART_Init + 106
+        0x01001e2c:    4a59        YJ      LDR      r2,[pc,#356] ; [0x1001f94] = 0x10062ab
+        0x01001e2e:    219d        .!      MOVS     r1,#0x9d
+        0x01001e30:    a048        H.      ADR      r0,{pc}+0x124 ; 0x1001f54
+        0x01001e32:    f7fefce9    ....    BL       _assert_handler ; 0x1000808
+        0x01001e36:    7ae0        .z      LDRB     r0,[r4,#0xb]
+        0x01001e38:    2800        .(      CMP      r0,#0
+        0x01001e3a:    d007        ..      BEQ      0x1001e4c ; UART_Init + 128
+        0x01001e3c:    7ae0        .z      LDRB     r0,[r4,#0xb]
+        0x01001e3e:    2810        .(      CMP      r0,#0x10
+        0x01001e40:    d004        ..      BEQ      0x1001e4c ; UART_Init + 128
+        0x01001e42:    4a54        TJ      LDR      r2,[pc,#336] ; [0x1001f94] = 0x10062ab
+        0x01001e44:    219e        .!      MOVS     r1,#0x9e
+        0x01001e46:    a043        C.      ADR      r0,{pc}+0x10e ; 0x1001f54
+        0x01001e48:    f7fefcde    ....    BL       _assert_handler ; 0x1000808
+        0x01001e4c:    7a60        `z      LDRB     r0,[r4,#9]
+        0x01001e4e:    2800        .(      CMP      r0,#0
+        0x01001e50:    d007        ..      BEQ      0x1001e62 ; UART_Init + 150
+        0x01001e52:    7a60        `z      LDRB     r0,[r4,#9]
+        0x01001e54:    2808        .(      CMP      r0,#8
+        0x01001e56:    d004        ..      BEQ      0x1001e62 ; UART_Init + 150
+        0x01001e58:    4a4e        NJ      LDR      r2,[pc,#312] ; [0x1001f94] = 0x10062ab
+        0x01001e5a:    219f        .!      MOVS     r1,#0x9f
+        0x01001e5c:    a03d        =.      ADR      r0,{pc}+0xf8 ; 0x1001f54
+        0x01001e5e:    f7fefcd3    ....    BL       _assert_handler ; 0x1000808
+        0x01001e62:    484e        NH      LDR      r0,[pc,#312] ; [0x1001f9c] = 0x2dc6c00
+        0x01001e64:    6861        ah      LDR      r1,[r4,#4]
+        0x01001e66:    f002fd17    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x01001e6a:    0407        ..      LSLS     r7,r0,#16
+        0x01001e6c:    7aa0        .z      LDRB     r0,[r4,#0xa]
+        0x01001e6e:    2101        .!      MOVS     r1,#1
+        0x01001e70:    4308        .C      ORRS     r0,r0,r1
+        0x01001e72:    7a21        !z      LDRB     r1,[r4,#8]
+        0x01001e74:    4308        .C      ORRS     r0,r0,r1
+        0x01001e76:    7a61        az      LDRB     r1,[r4,#9]
+        0x01001e78:    4308        .C      ORRS     r0,r0,r1
+        0x01001e7a:    7ae1        .z      LDRB     r1,[r4,#0xb]
+        0x01001e7c:    4308        .C      ORRS     r0,r0,r1
+        0x01001e7e:    7821        !x      LDRB     r1,[r4,#0]
+        0x01001e80:    4308        .C      ORRS     r0,r0,r1
+        0x01001e82:    2180        .!      MOVS     r1,#0x80
+        0x01001e84:    4308        .C      ORRS     r0,r0,r1
+        0x01001e86:    4338        8C      ORRS     r0,r0,r7
+        0x01001e88:    4606        .F      MOV      r6,r0
+        0x01001e8a:    2d00        .-      CMP      r5,#0
+        0x01001e8c:    d11a        ..      BNE      0x1001ec4 ; UART_Init + 248
+        0x01001e8e:    2000        .       MOVS     r0,#0
+        0x01001e90:    493a        :I      LDR      r1,[pc,#232] ; [0x1001f7c] = 0xf8b00
+        0x01001e92:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001e94:    4842        BH      LDR      r0,[pc,#264] ; [0x1001fa0] = 0x20e2c
+        0x01001e96:    6048        H`      STR      r0,[r1,#4]
+        0x01001e98:    2001        .       MOVS     r0,#1
+        0x01001e9a:    0280        ..      LSLS     r0,r0,#10
+        0x01001e9c:    6088        .`      STR      r0,[r1,#8]
+        0x01001e9e:    2001        .       MOVS     r0,#1
+        0x01001ea0:    7308        .s      STRB     r0,[r1,#0xc]
+        0x01001ea2:    4608        .F      MOV      r0,r1
+        0x01001ea4:    7bc0        .{      LDRB     r0,[r0,#0xf]
+        0x01001ea6:    2120         !      MOVS     r1,#0x20
+        0x01001ea8:    4308        .C      ORRS     r0,r0,r1
+        0x01001eaa:    4934        4I      LDR      r1,[pc,#208] ; [0x1001f7c] = 0xf8b00
+        0x01001eac:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01001eae:    4608        .F      MOV      r0,r1
+        0x01001eb0:    7bc0        .{      LDRB     r0,[r0,#0xf]
+        0x01001eb2:    2120         !      MOVS     r1,#0x20
+        0x01001eb4:    4388        .C      BICS     r0,r0,r1
+        0x01001eb6:    4931        1I      LDR      r1,[pc,#196] ; [0x1001f7c] = 0xf8b00
+        0x01001eb8:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01001eba:    2000        .       MOVS     r0,#0
+        0x01001ebc:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001ebe:    4608        .F      MOV      r0,r1
+        0x01001ec0:    61c6        .a      STR      r6,[r0,#0x1c]
+        0x01001ec2:    e019        ..      B        0x1001ef8 ; UART_Init + 300
+        0x01001ec4:    2000        .       MOVS     r0,#0
+        0x01001ec6:    492e        .I      LDR      r1,[pc,#184] ; [0x1001f80] = 0xf8c00
+        0x01001ec8:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001eca:    4836        6H      LDR      r0,[pc,#216] ; [0x1001fa4] = 0x2122c
+        0x01001ecc:    6048        H`      STR      r0,[r1,#4]
+        0x01001ece:    2001        .       MOVS     r0,#1
+        0x01001ed0:    0280        ..      LSLS     r0,r0,#10
+        0x01001ed2:    6088        .`      STR      r0,[r1,#8]
+        0x01001ed4:    2001        .       MOVS     r0,#1
+        0x01001ed6:    7308        .s      STRB     r0,[r1,#0xc]
+        0x01001ed8:    4608        .F      MOV      r0,r1
+        0x01001eda:    7bc0        .{      LDRB     r0,[r0,#0xf]
+        0x01001edc:    2120         !      MOVS     r1,#0x20
+        0x01001ede:    4308        .C      ORRS     r0,r0,r1
+        0x01001ee0:    4927        'I      LDR      r1,[pc,#156] ; [0x1001f80] = 0xf8c00
+        0x01001ee2:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01001ee4:    4608        .F      MOV      r0,r1
+        0x01001ee6:    7bc0        .{      LDRB     r0,[r0,#0xf]
+        0x01001ee8:    2120         !      MOVS     r1,#0x20
+        0x01001eea:    4388        .C      BICS     r0,r0,r1
+        0x01001eec:    4924        $I      LDR      r1,[pc,#144] ; [0x1001f80] = 0xf8c00
+        0x01001eee:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01001ef0:    2000        .       MOVS     r0,#0
+        0x01001ef2:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x01001ef4:    4608        .F      MOV      r0,r1
+        0x01001ef6:    61c6        .a      STR      r6,[r0,#0x1c]
+        0x01001ef8:    bdf8        ..      POP      {r3-r7,pc}
+    UART_IsRXFIFOFull
+        0x01001efa:    b510        ..      PUSH     {r4,lr}
+        0x01001efc:    4604        .F      MOV      r4,r0
+        0x01001efe:    2c00        .,      CMP      r4,#0
+        0x01001f00:    d006        ..      BEQ      0x1001f10 ; UART_IsRXFIFOFull + 22
+        0x01001f02:    2c01        .,      CMP      r4,#1
+        0x01001f04:    d004        ..      BEQ      0x1001f10 ; UART_IsRXFIFOFull + 22
+        0x01001f06:    4a28        (J      LDR      r2,[pc,#160] ; [0x1001fa8] = 0x10062b5
+        0x01001f08:    21c8        .!      MOVS     r1,#0xc8
+        0x01001f0a:    a012        ..      ADR      r0,{pc}+0x4a ; 0x1001f54
+        0x01001f0c:    f7fefc7c    ..|.    BL       _assert_handler ; 0x1000808
+        0x01001f10:    2c00        .,      CMP      r4,#0
+        0x01001f12:    d104        ..      BNE      0x1001f1e ; UART_IsRXFIFOFull + 36
+        0x01001f14:    4819        .H      LDR      r0,[pc,#100] ; [0x1001f7c] = 0xf8b00
+        0x01001f16:    6a80        .j      LDR      r0,[r0,#0x28]
+        0x01001f18:    2102        .!      MOVS     r1,#2
+        0x01001f1a:    4008        .@      ANDS     r0,r0,r1
+        0x01001f1c:    bd10        ..      POP      {r4,pc}
+        0x01001f1e:    4818        .H      LDR      r0,[pc,#96] ; [0x1001f80] = 0xf8c00
+        0x01001f20:    6a80        .j      LDR      r0,[r0,#0x28]
+        0x01001f22:    2102        .!      MOVS     r1,#2
+        0x01001f24:    4008        .@      ANDS     r0,r0,r1
+        0x01001f26:    e7f9        ..      B        0x1001f1c ; UART_IsRXFIFOFull + 34
+    UART_IsRXFIFONotEmpty
+        0x01001f28:    b510        ..      PUSH     {r4,lr}
+        0x01001f2a:    4604        .F      MOV      r4,r0
+        0x01001f2c:    2c00        .,      CMP      r4,#0
+        0x01001f2e:    d006        ..      BEQ      0x1001f3e ; UART_IsRXFIFONotEmpty + 22
+        0x01001f30:    2c01        .,      CMP      r4,#1
+        0x01001f32:    d004        ..      BEQ      0x1001f3e ; UART_IsRXFIFONotEmpty + 22
+        0x01001f34:    4a1d        .J      LDR      r2,[pc,#116] ; [0x1001fac] = 0x10062c7
+        0x01001f36:    21d7        .!      MOVS     r1,#0xd7
+        0x01001f38:    a006        ..      ADR      r0,{pc}+0x1c ; 0x1001f54
+        0x01001f3a:    f7fefc65    ..e.    BL       _assert_handler ; 0x1000808
+        0x01001f3e:    2c00        .,      CMP      r4,#0
+        0x01001f40:    d138        8.      BNE      0x1001fb4 ; UART_IsRXFIFONotEmpty + 140
+        0x01001f42:    480e        .H      LDR      r0,[pc,#56] ; [0x1001f7c] = 0xf8b00
+        0x01001f44:    6a80        .j      LDR      r0,[r0,#0x28]
+        0x01001f46:    1400        ..      ASRS     r0,r0,#16
+        0x01001f48:    2800        .(      CMP      r0,#0
+        0x01001f4a:    d031        1.      BEQ      0x1001fb0 ; UART_IsRXFIFONotEmpty + 136
+        0x01001f4c:    2001        .       MOVS     r0,#1
+        0x01001f4e:    bd10        ..      POP      {r4,pc}
+    $d
+        0x01001f50:    0100627a    zb..    DCD    16802426
+        0x01001f54:    2e5c2e2e    ..\.    DCD    777793070
+        0x01001f58:    2e2e5c2e    .\..    DCD    774790190
+        0x01001f5c:    5c2e2e5c    \..\    DCD    1546530396
+        0x01001f60:    4c5c2e2e    ..\L    DCD    1281109550
+        0x01001f64:    61726269    ibra    DCD    1634886249
+        0x01001f68:    72656972    rier    DCD    1919248754
+        0x01001f6c:    6b64735c    \sdk    DCD    1801745244
+        0x01001f70:    5f63795c    \yc_    DCD    1600354652
+        0x01001f74:    74726175    uart    DCD    1953653109
+        0x01001f78:    0000632e    .c..    DCD    25390
+        0x01001f7c:    000f8b00    ....    DCD    1018624
+        0x01001f80:    000f8c00    ....    DCD    1018880
+        0x01001f84:    010062ed    .b..    DCD    16802541
+        0x01001f88:    0100628f    .b..    DCD    16802447
+        0x01001f8c:    0100629b    .b..    DCD    16802459
+        0x01001f90:    0000ffff    ....    DCD    65535
+        0x01001f94:    010062ab    .b..    DCD    16802475
+        0x01001f98:    0044aa21    !.D.    DCD    4500001
+        0x01001f9c:    02dc6c00    .l..    DCD    48000000
+        0x01001fa0:    00020e2c    ,...    DCD    134700
+        0x01001fa4:    0002122c    ,...    DCD    135724
+        0x01001fa8:    010062b5    .b..    DCD    16802485
+        0x01001fac:    010062c7    .b..    DCD    16802503
+    $t
+        0x01001fb0:    2000        .       MOVS     r0,#0
+        0x01001fb2:    bd10        ..      POP      {r4,pc}
+        0x01001fb4:    4899        .H      LDR      r0,[pc,#612] ; [0x100221c] = 0xf8c00
+        0x01001fb6:    6a80        .j      LDR      r0,[r0,#0x28]
+        0x01001fb8:    1400        ..      ASRS     r0,r0,#16
+        0x01001fba:    2800        .(      CMP      r0,#0
+        0x01001fbc:    d001        ..      BEQ      0x1001fc2 ; UART_IsRXFIFONotEmpty + 154
+        0x01001fbe:    2001        .       MOVS     r0,#1
+        0x01001fc0:    e7f7        ..      B        0x1001fb2 ; UART_IsRXFIFONotEmpty + 138
+        0x01001fc2:    2000        .       MOVS     r0,#0
+        0x01001fc4:    e7f5        ..      B        0x1001fb2 ; UART_IsRXFIFONotEmpty + 138
+    UART_IsUARTBusy
+        0x01001fc6:    b510        ..      PUSH     {r4,lr}
+        0x01001fc8:    4604        .F      MOV      r4,r0
+        0x01001fca:    2c00        .,      CMP      r4,#0
+        0x01001fcc:    d006        ..      BEQ      0x1001fdc ; UART_IsUARTBusy + 22
+        0x01001fce:    2c01        .,      CMP      r4,#1
+        0x01001fd0:    d004        ..      BEQ      0x1001fdc ; UART_IsUARTBusy + 22
+        0x01001fd2:    4a93        .J      LDR      r2,[pc,#588] ; [0x1002220] = 0x10062dd
+        0x01001fd4:    21e5        .!      MOVS     r1,#0xe5
+        0x01001fd6:    4893        .H      LDR      r0,[pc,#588] ; [0x1002224] = 0x1001f54
+        0x01001fd8:    f7fefc16    ....    BL       _assert_handler ; 0x1000808
+        0x01001fdc:    2c00        .,      CMP      r4,#0
+        0x01001fde:    d106        ..      BNE      0x1001fee ; UART_IsUARTBusy + 40
+        0x01001fe0:    4891        .H      LDR      r0,[pc,#580] ; [0x1002228] = 0xf8b00
+        0x01001fe2:    6900        .i      LDR      r0,[r0,#0x10]
+        0x01001fe4:    07c0        ..      LSLS     r0,r0,#31
+        0x01001fe6:    0fc0        ..      LSRS     r0,r0,#31
+        0x01001fe8:    2101        .!      MOVS     r1,#1
+        0x01001fea:    4048        H@      EORS     r0,r0,r1
+        0x01001fec:    bd10        ..      POP      {r4,pc}
+        0x01001fee:    488b        .H      LDR      r0,[pc,#556] ; [0x100221c] = 0xf8c00
+        0x01001ff0:    6900        .i      LDR      r0,[r0,#0x10]
+        0x01001ff2:    07c0        ..      LSLS     r0,r0,#31
+        0x01001ff4:    0fc0        ..      LSRS     r0,r0,#31
+        0x01001ff6:    2101        .!      MOVS     r1,#1
+        0x01001ff8:    4048        H@      EORS     r0,r0,r1
+        0x01001ffa:    e7f7        ..      B        0x1001fec ; UART_IsUARTBusy + 38
+    UART_ReceiveData
+        0x01001ffc:    b510        ..      PUSH     {r4,lr}
+        0x01001ffe:    4604        .F      MOV      r4,r0
+        0x01002000:    2c00        .,      CMP      r4,#0
+        0x01002002:    d007        ..      BEQ      0x1002014 ; UART_ReceiveData + 24
+        0x01002004:    2c01        .,      CMP      r4,#1
+        0x01002006:    d005        ..      BEQ      0x1002014 ; UART_ReceiveData + 24
+        0x01002008:    4a88        .J      LDR      r2,[pc,#544] ; [0x100222c] = 0x10062fb
+        0x0100200a:    21ff        .!      MOVS     r1,#0xff
+        0x0100200c:    3128        (1      ADDS     r1,r1,#0x28
+        0x0100200e:    4885        .H      LDR      r0,[pc,#532] ; [0x1002224] = 0x1001f54
+        0x01002010:    f7fefbfa    ....    BL       _assert_handler ; 0x1000808
+        0x01002014:    2c00        .,      CMP      r4,#0
+        0x01002016:    d103        ..      BNE      0x1002020 ; UART_ReceiveData + 36
+        0x01002018:    4883        .H      LDR      r0,[pc,#524] ; [0x1002228] = 0xf8b00
+        0x0100201a:    3020         0      ADDS     r0,r0,#0x20
+        0x0100201c:    7900        .y      LDRB     r0,[r0,#4]
+        0x0100201e:    bd10        ..      POP      {r4,pc}
+        0x01002020:    487e        ~H      LDR      r0,[pc,#504] ; [0x100221c] = 0xf8c00
+        0x01002022:    3020         0      ADDS     r0,r0,#0x20
+        0x01002024:    7900        .y      LDRB     r0,[r0,#4]
+        0x01002026:    e7fa        ..      B        0x100201e ; UART_ReceiveData + 34
+    UART_RecvBuf
+        0x01002028:    b5fe        ..      PUSH     {r1-r7,lr}
+        0x0100202a:    4604        .F      MOV      r4,r0
+        0x0100202c:    460d        .F      MOV      r5,r1
+        0x0100202e:    4617        .F      MOV      r7,r2
+        0x01002030:    2600        .&      MOVS     r6,#0
+        0x01002032:    2000        .       MOVS     r0,#0
+        0x01002034:    9001        ..      STR      r0,[sp,#4]
+        0x01002036:    9000        ..      STR      r0,[sp,#0]
+        0x01002038:    2c00        .,      CMP      r4,#0
+        0x0100203a:    d007        ..      BEQ      0x100204c ; UART_RecvBuf + 36
+        0x0100203c:    2c01        .,      CMP      r4,#1
+        0x0100203e:    d005        ..      BEQ      0x100204c ; UART_RecvBuf + 36
+        0x01002040:    4a7b        {J      LDR      r2,[pc,#492] ; [0x1002230] = 0x100630c
+        0x01002042:    21ff        .!      MOVS     r1,#0xff
+        0x01002044:    3139        91      ADDS     r1,r1,#0x39
+        0x01002046:    4877        wH      LDR      r0,[pc,#476] ; [0x1002224] = 0x1001f54
+        0x01002048:    f7fefbde    ....    BL       _assert_handler ; 0x1000808
+        0x0100204c:    2d00        .-      CMP      r5,#0
+        0x0100204e:    d105        ..      BNE      0x100205c ; UART_RecvBuf + 52
+        0x01002050:    4a77        wJ      LDR      r2,[pc,#476] ; [0x1002230] = 0x100630c
+        0x01002052:    21ff        .!      MOVS     r1,#0xff
+        0x01002054:    313a        :1      ADDS     r1,r1,#0x3a
+        0x01002056:    4873        sH      LDR      r0,[pc,#460] ; [0x1002224] = 0x1001f54
+        0x01002058:    f7fefbd6    ....    BL       _assert_handler ; 0x1000808
+        0x0100205c:    2c00        .,      CMP      r4,#0
+        0x0100205e:    d105        ..      BNE      0x100206c ; UART_RecvBuf + 68
+        0x01002060:    4871        qH      LDR      r0,[pc,#452] ; [0x1002228] = 0xf8b00
+        0x01002062:    3028        (0      ADDS     r0,r0,#0x28
+        0x01002064:    9001        ..      STR      r0,[sp,#4]
+        0x01002066:    1f00        ..      SUBS     r0,r0,#4
+        0x01002068:    9000        ..      STR      r0,[sp,#0]
+        0x0100206a:    e004        ..      B        0x1002076 ; UART_RecvBuf + 78
+        0x0100206c:    486b        kH      LDR      r0,[pc,#428] ; [0x100221c] = 0xf8c00
+        0x0100206e:    3028        (0      ADDS     r0,r0,#0x28
+        0x01002070:    9001        ..      STR      r0,[sp,#4]
+        0x01002072:    1f00        ..      SUBS     r0,r0,#4
+        0x01002074:    9000        ..      STR      r0,[sp,#0]
+        0x01002076:    e008        ..      B        0x100208a ; UART_RecvBuf + 98
+        0x01002078:    42be        .B      CMP      r6,r7
+        0x0100207a:    d205        ..      BCS      0x1002088 ; UART_RecvBuf + 96
+        0x0100207c:    9800        ..      LDR      r0,[sp,#0]
+        0x0100207e:    7802        .x      LDRB     r2,[r0,#0]
+        0x01002080:    4630        0F      MOV      r0,r6
+        0x01002082:    1c76        v.      ADDS     r6,r6,#1
+        0x01002084:    542a        *T      STRB     r2,[r5,r0]
+        0x01002086:    e000        ..      B        0x100208a ; UART_RecvBuf + 98
+        0x01002088:    e004        ..      B        0x1002094 ; UART_RecvBuf + 108
+        0x0100208a:    9801        ..      LDR      r0,[sp,#4]
+        0x0100208c:    6800        .h      LDR      r0,[r0,#0]
+        0x0100208e:    1400        ..      ASRS     r0,r0,#16
+        0x01002090:    2800        .(      CMP      r0,#0
+        0x01002092:    dcf1        ..      BGT      0x1002078 ; UART_RecvBuf + 80
+        0x01002094:    bf00        ..      NOP      
+        0x01002096:    4630        0F      MOV      r0,r6
+        0x01002098:    bdfe        ..      POP      {r1-r7,pc}
+    UART_SendBuf
+        0x0100209a:    b570        p.      PUSH     {r4-r6,lr}
+        0x0100209c:    4604        .F      MOV      r4,r0
+        0x0100209e:    460d        .F      MOV      r5,r1
+        0x010020a0:    4616        .F      MOV      r6,r2
+        0x010020a2:    2c00        .,      CMP      r4,#0
+        0x010020a4:    d007        ..      BEQ      0x10020b6 ; UART_SendBuf + 28
+        0x010020a6:    2c01        .,      CMP      r4,#1
+        0x010020a8:    d005        ..      BEQ      0x10020b6 ; UART_SendBuf + 28
+        0x010020aa:    4a62        bJ      LDR      r2,[pc,#392] ; [0x1002234] = 0x1006319
+        0x010020ac:    21ff        .!      MOVS     r1,#0xff
+        0x010020ae:    3159        Y1      ADDS     r1,r1,#0x59
+        0x010020b0:    485c        \H      LDR      r0,[pc,#368] ; [0x1002224] = 0x1001f54
+        0x010020b2:    f7fefba9    ....    BL       _assert_handler ; 0x1000808
+        0x010020b6:    2d00        .-      CMP      r5,#0
+        0x010020b8:    d105        ..      BNE      0x10020c6 ; UART_SendBuf + 44
+        0x010020ba:    4a5e        ^J      LDR      r2,[pc,#376] ; [0x1002234] = 0x1006319
+        0x010020bc:    21ff        .!      MOVS     r1,#0xff
+        0x010020be:    315a        Z1      ADDS     r1,r1,#0x5a
+        0x010020c0:    4858        XH      LDR      r0,[pc,#352] ; [0x1002224] = 0x1001f54
+        0x010020c2:    f7fefba1    ....    BL       _assert_handler ; 0x1000808
+        0x010020c6:    485c        \H      LDR      r0,[pc,#368] ; [0x1002238] = 0xffff
+        0x010020c8:    4286        .B      CMP      r6,r0
+        0x010020ca:    db05        ..      BLT      0x10020d8 ; UART_SendBuf + 62
+        0x010020cc:    4a59        YJ      LDR      r2,[pc,#356] ; [0x1002234] = 0x1006319
+        0x010020ce:    21ff        .!      MOVS     r1,#0xff
+        0x010020d0:    315b        [1      ADDS     r1,r1,#0x5b
+        0x010020d2:    4854        TH      LDR      r0,[pc,#336] ; [0x1002224] = 0x1001f54
+        0x010020d4:    f7fefb98    ....    BL       _assert_handler ; 0x1000808
+        0x010020d8:    2c00        .,      CMP      r4,#0
+        0x010020da:    d111        ..      BNE      0x1002100 ; UART_SendBuf + 102
+        0x010020dc:    bf00        ..      NOP      
+        0x010020de:    4852        RH      LDR      r0,[pc,#328] ; [0x1002228] = 0xf8b00
+        0x010020e0:    6900        .i      LDR      r0,[r0,#0x10]
+        0x010020e2:    07c0        ..      LSLS     r0,r0,#31
+        0x010020e4:    0fc0        ..      LSRS     r0,r0,#31
+        0x010020e6:    2800        .(      CMP      r0,#0
+        0x010020e8:    d0f9        ..      BEQ      0x10020de ; UART_SendBuf + 68
+        0x010020ea:    484f        OH      LDR      r0,[pc,#316] ; [0x1002228] = 0xf8b00
+        0x010020ec:    6005        .`      STR      r5,[r0,#0]
+        0x010020ee:    6880        .h      LDR      r0,[r0,#8]
+        0x010020f0:    b280        ..      UXTH     r0,r0
+        0x010020f2:    0431        1.      LSLS     r1,r6,#16
+        0x010020f4:    4308        .C      ORRS     r0,r0,r1
+        0x010020f6:    494c        LI      LDR      r1,[pc,#304] ; [0x1002228] = 0xf8b00
+        0x010020f8:    6088        .`      STR      r0,[r1,#8]
+        0x010020fa:    2080        .       MOVS     r0,#0x80
+        0x010020fc:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x010020fe:    e010        ..      B        0x1002122 ; UART_SendBuf + 136
+        0x01002100:    bf00        ..      NOP      
+        0x01002102:    4846        FH      LDR      r0,[pc,#280] ; [0x100221c] = 0xf8c00
+        0x01002104:    6900        .i      LDR      r0,[r0,#0x10]
+        0x01002106:    07c0        ..      LSLS     r0,r0,#31
+        0x01002108:    0fc0        ..      LSRS     r0,r0,#31
+        0x0100210a:    2800        .(      CMP      r0,#0
+        0x0100210c:    d0f9        ..      BEQ      0x1002102 ; UART_SendBuf + 104
+        0x0100210e:    4843        CH      LDR      r0,[pc,#268] ; [0x100221c] = 0xf8c00
+        0x01002110:    6005        .`      STR      r5,[r0,#0]
+        0x01002112:    6880        .h      LDR      r0,[r0,#8]
+        0x01002114:    b280        ..      UXTH     r0,r0
+        0x01002116:    0431        1.      LSLS     r1,r6,#16
+        0x01002118:    4308        .C      ORRS     r0,r0,r1
+        0x0100211a:    4940        @I      LDR      r1,[pc,#256] ; [0x100221c] = 0xf8c00
+        0x0100211c:    6088        .`      STR      r0,[r1,#8]
+        0x0100211e:    2080        .       MOVS     r0,#0x80
+        0x01002120:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01002122:    bd70        p.      POP      {r4-r6,pc}
+    UART_SendData
+        0x01002124:    b508        ..      PUSH     {r3,lr}
+        0x01002126:    9100        ..      STR      r1,[sp,#0]
+        0x01002128:    2800        .(      CMP      r0,#0
+        0x0100212a:    d114        ..      BNE      0x1002156 ; UART_SendData + 50
+        0x0100212c:    466a        jF      MOV      r2,sp
+        0x0100212e:    4b3e        >K      LDR      r3,[pc,#248] ; [0x1002228] = 0xf8b00
+        0x01002130:    601a        .`      STR      r2,[r3,#0]
+        0x01002132:    461a        .F      MOV      r2,r3
+        0x01002134:    6892        .h      LDR      r2,[r2,#8]
+        0x01002136:    b292        ..      UXTH     r2,r2
+        0x01002138:    2301        .#      MOVS     r3,#1
+        0x0100213a:    041b        ..      LSLS     r3,r3,#16
+        0x0100213c:    18d2        ..      ADDS     r2,r2,r3
+        0x0100213e:    4b3a        :K      LDR      r3,[pc,#232] ; [0x1002228] = 0xf8b00
+        0x01002140:    609a        .`      STR      r2,[r3,#8]
+        0x01002142:    2280        ."      MOVS     r2,#0x80
+        0x01002144:    73da        .s      STRB     r2,[r3,#0xf]
+        0x01002146:    bf00        ..      NOP      
+        0x01002148:    4a37        7J      LDR      r2,[pc,#220] ; [0x1002228] = 0xf8b00
+        0x0100214a:    6912        .i      LDR      r2,[r2,#0x10]
+        0x0100214c:    07d2        ..      LSLS     r2,r2,#31
+        0x0100214e:    0fd2        ..      LSRS     r2,r2,#31
+        0x01002150:    2a00        .*      CMP      r2,#0
+        0x01002152:    d0f9        ..      BEQ      0x1002148 ; UART_SendData + 36
+        0x01002154:    e013        ..      B        0x100217e ; UART_SendData + 90
+        0x01002156:    466a        jF      MOV      r2,sp
+        0x01002158:    4b30        0K      LDR      r3,[pc,#192] ; [0x100221c] = 0xf8c00
+        0x0100215a:    601a        .`      STR      r2,[r3,#0]
+        0x0100215c:    461a        .F      MOV      r2,r3
+        0x0100215e:    6892        .h      LDR      r2,[r2,#8]
+        0x01002160:    b292        ..      UXTH     r2,r2
+        0x01002162:    2301        .#      MOVS     r3,#1
+        0x01002164:    041b        ..      LSLS     r3,r3,#16
+        0x01002166:    18d2        ..      ADDS     r2,r2,r3
+        0x01002168:    4b2c        ,K      LDR      r3,[pc,#176] ; [0x100221c] = 0xf8c00
+        0x0100216a:    609a        .`      STR      r2,[r3,#8]
+        0x0100216c:    2280        ."      MOVS     r2,#0x80
+        0x0100216e:    73da        .s      STRB     r2,[r3,#0xf]
+        0x01002170:    bf00        ..      NOP      
+        0x01002172:    4a2a        *J      LDR      r2,[pc,#168] ; [0x100221c] = 0xf8c00
+        0x01002174:    6912        .i      LDR      r2,[r2,#0x10]
+        0x01002176:    07d2        ..      LSLS     r2,r2,#31
+        0x01002178:    0fd2        ..      LSRS     r2,r2,#31
+        0x0100217a:    2a00        .*      CMP      r2,#0
+        0x0100217c:    d0f9        ..      BEQ      0x1002172 ; UART_SendData + 78
+        0x0100217e:    bd08        ..      POP      {r3,pc}
+    UART_SetITTimeout
+        0x01002180:    2800        .(      CMP      r0,#0
+        0x01002182:    d102        ..      BNE      0x100218a ; UART_SetITTimeout + 10
+        0x01002184:    4a28        (J      LDR      r2,[pc,#160] ; [0x1002228] = 0xf8b00
+        0x01002186:    6211        .b      STR      r1,[r2,#0x20]
+        0x01002188:    e001        ..      B        0x100218e ; UART_SetITTimeout + 14
+        0x0100218a:    4a24        $J      LDR      r2,[pc,#144] ; [0x100221c] = 0xf8c00
+        0x0100218c:    6211        .b      STR      r1,[r2,#0x20]
+        0x0100218e:    4770        pG      BX       lr
+    UART_SetRxITNum
+        0x01002190:    b570        p.      PUSH     {r4-r6,lr}
+        0x01002192:    4604        .F      MOV      r4,r0
+        0x01002194:    460d        .F      MOV      r5,r1
+        0x01002196:    2c00        .,      CMP      r4,#0
+        0x01002198:    d007        ..      BEQ      0x10021aa ; UART_SetRxITNum + 26
+        0x0100219a:    2c01        .,      CMP      r4,#1
+        0x0100219c:    d005        ..      BEQ      0x10021aa ; UART_SetRxITNum + 26
+        0x0100219e:    4a27        'J      LDR      r2,[pc,#156] ; [0x100223c] = 0x1006326
+        0x010021a0:    21ff        .!      MOVS     r1,#0xff
+        0x010021a2:    3191        .1      ADDS     r1,r1,#0x91
+        0x010021a4:    481f        .H      LDR      r0,[pc,#124] ; [0x1002224] = 0x1001f54
+        0x010021a6:    f7fefb2f    ../.    BL       _assert_handler ; 0x1000808
+        0x010021aa:    2c00        .,      CMP      r4,#0
+        0x010021ac:    d10a        ..      BNE      0x10021c4 ; UART_SetRxITNum + 52
+        0x010021ae:    481e        .H      LDR      r0,[pc,#120] ; [0x1002228] = 0xf8b00
+        0x010021b0:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x010021b2:    21ff        .!      MOVS     r1,#0xff
+        0x010021b4:    0209        ..      LSLS     r1,r1,#8
+        0x010021b6:    4388        .C      BICS     r0,r0,r1
+        0x010021b8:    0629        ).      LSLS     r1,r5,#24
+        0x010021ba:    0c09        ..      LSRS     r1,r1,#16
+        0x010021bc:    4308        .C      ORRS     r0,r0,r1
+        0x010021be:    491a        .I      LDR      r1,[pc,#104] ; [0x1002228] = 0xf8b00
+        0x010021c0:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x010021c2:    e009        ..      B        0x10021d8 ; UART_SetRxITNum + 72
+        0x010021c4:    4815        .H      LDR      r0,[pc,#84] ; [0x100221c] = 0xf8c00
+        0x010021c6:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x010021c8:    21ff        .!      MOVS     r1,#0xff
+        0x010021ca:    0209        ..      LSLS     r1,r1,#8
+        0x010021cc:    4388        .C      BICS     r0,r0,r1
+        0x010021ce:    0629        ).      LSLS     r1,r5,#24
+        0x010021d0:    0c09        ..      LSRS     r1,r1,#16
+        0x010021d2:    4308        .C      ORRS     r0,r0,r1
+        0x010021d4:    4911        .I      LDR      r1,[pc,#68] ; [0x100221c] = 0xf8c00
+        0x010021d6:    61c8        .a      STR      r0,[r1,#0x1c]
+        0x010021d8:    bd70        p.      POP      {r4-r6,pc}
+    UART_StructInit
+        0x010021da:    214b        K!      MOVS     r1,#0x4b
+        0x010021dc:    01c9        ..      LSLS     r1,r1,#7
+        0x010021de:    6041        A`      STR      r1,[r0,#4]
+        0x010021e0:    2100        .!      MOVS     r1,#0
+        0x010021e2:    7201        .r      STRB     r1,[r0,#8]
+        0x010021e4:    72c1        .r      STRB     r1,[r0,#0xb]
+        0x010021e6:    7001        .p      STRB     r1,[r0,#0]
+        0x010021e8:    7241        Ar      STRB     r1,[r0,#9]
+        0x010021ea:    7281        .r      STRB     r1,[r0,#0xa]
+        0x010021ec:    4770        pG      BX       lr
+    UART_ReceiveDataLen
+        0x010021ee:    b510        ..      PUSH     {r4,lr}
+        0x010021f0:    4604        .F      MOV      r4,r0
+        0x010021f2:    2c00        .,      CMP      r4,#0
+        0x010021f4:    d007        ..      BEQ      0x1002206 ; UART_ReceiveDataLen + 24
+        0x010021f6:    2c01        .,      CMP      r4,#1
+        0x010021f8:    d005        ..      BEQ      0x1002206 ; UART_ReceiveDataLen + 24
+        0x010021fa:    4a11        .J      LDR      r2,[pc,#68] ; [0x1002240] = 0x1006336
+        0x010021fc:    21ff        .!      MOVS     r1,#0xff
+        0x010021fe:    31aa        .1      ADDS     r1,r1,#0xaa
+        0x01002200:    4808        .H      LDR      r0,[pc,#32] ; [0x1002224] = 0x1001f54
+        0x01002202:    f7fefb01    ....    BL       _assert_handler ; 0x1000808
+        0x01002206:    2c00        .,      CMP      r4,#0
+        0x01002208:    d103        ..      BNE      0x1002212 ; UART_ReceiveDataLen + 36
+        0x0100220a:    4807        .H      LDR      r0,[pc,#28] ; [0x1002228] = 0xf8b00
+        0x0100220c:    6a80        .j      LDR      r0,[r0,#0x28]
+        0x0100220e:    0c00        ..      LSRS     r0,r0,#16
+        0x01002210:    bd10        ..      POP      {r4,pc}
+        0x01002212:    4802        .H      LDR      r0,[pc,#8] ; [0x100221c] = 0xf8c00
+        0x01002214:    6a80        .j      LDR      r0,[r0,#0x28]
+        0x01002216:    0c00        ..      LSRS     r0,r0,#16
+        0x01002218:    e7fa        ..      B        0x1002210 ; UART_ReceiveDataLen + 34
+    $d
+        0x0100221a:    0000        ..      DCW    0
+        0x0100221c:    000f8c00    ....    DCD    1018880
+        0x01002220:    010062dd    .b..    DCD    16802525
+        0x01002224:    01001f54    T...    DCD    16785236
+        0x01002228:    000f8b00    ....    DCD    1018624
+        0x0100222c:    010062fb    .b..    DCD    16802555
+        0x01002230:    0100630c    .c..    DCD    16802572
+        0x01002234:    01006319    .c..    DCD    16802585
+        0x01002238:    0000ffff    ....    DCD    65535
+        0x0100223c:    01006326    &c..    DCD    16802598
+        0x01002240:    01006336    6c..    DCD    16802614
+    $t
+    .text
+    prt_get_bt_connection_status
+        0x01002244:    48fe        .H      LDR      r0,[pc,#1016] ; [0x1002640] = 0x2002e
+        0x01002246:    7800        .x      LDRB     r0,[r0,#0]
+        0x01002248:    4770        pG      BX       lr
+    prt_get_bt_type
+        0x0100224a:    48fe        .H      LDR      r0,[pc,#1016] ; [0x1002644] = 0x2002d
+        0x0100224c:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100224e:    4770        pG      BX       lr
+    BT_BIT_SET
+        0x01002250:    b510        ..      PUSH     {r4,lr}
+        0x01002252:    2920         )      CMP      r1,#0x20
+        0x01002254:    da05        ..      BGE      0x1002262 ; BT_BIT_SET + 18
+        0x01002256:    2301        .#      MOVS     r3,#1
+        0x01002258:    408b        .@      LSLS     r3,r3,r1
+        0x0100225a:    6802        .h      LDR      r2,[r0,#0]
+        0x0100225c:    431a        .C      ORRS     r2,r2,r3
+        0x0100225e:    6002        .`      STR      r2,[r0,#0]
+        0x01002260:    e006        ..      B        0x1002270 ; BT_BIT_SET + 32
+        0x01002262:    460b        .F      MOV      r3,r1
+        0x01002264:    3b20         ;      SUBS     r3,r3,#0x20
+        0x01002266:    2401        .$      MOVS     r4,#1
+        0x01002268:    409c        .@      LSLS     r4,r4,r3
+        0x0100226a:    6842        Bh      LDR      r2,[r0,#4]
+        0x0100226c:    4322        "C      ORRS     r2,r2,r4
+        0x0100226e:    6042        B`      STR      r2,[r0,#4]
+        0x01002270:    bd10        ..      POP      {r4,pc}
+    BT_BIT_CLEAR
+        0x01002272:    b510        ..      PUSH     {r4,lr}
+        0x01002274:    2920         )      CMP      r1,#0x20
+        0x01002276:    da05        ..      BGE      0x1002284 ; BT_BIT_CLEAR + 18
+        0x01002278:    2301        .#      MOVS     r3,#1
+        0x0100227a:    408b        .@      LSLS     r3,r3,r1
+        0x0100227c:    6802        .h      LDR      r2,[r0,#0]
+        0x0100227e:    439a        .C      BICS     r2,r2,r3
+        0x01002280:    6002        .`      STR      r2,[r0,#0]
+        0x01002282:    e006        ..      B        0x1002292 ; BT_BIT_CLEAR + 32
+        0x01002284:    460b        .F      MOV      r3,r1
+        0x01002286:    3b20         ;      SUBS     r3,r3,#0x20
+        0x01002288:    2401        .$      MOVS     r4,#1
+        0x0100228a:    409c        .@      LSLS     r4,r4,r3
+        0x0100228c:    6842        Bh      LDR      r2,[r0,#4]
+        0x0100228e:    43a2        .C      BICS     r2,r2,r4
+        0x01002290:    6042        B`      STR      r2,[r0,#4]
+        0x01002292:    bd10        ..      POP      {r4,pc}
+    BT_BIT_GET
+        0x01002294:    b510        ..      PUSH     {r4,lr}
+        0x01002296:    4602        .F      MOV      r2,r0
+        0x01002298:    2920         )      CMP      r1,#0x20
+        0x0100229a:    da06        ..      BGE      0x10022aa ; BT_BIT_GET + 22
+        0x0100229c:    2301        .#      MOVS     r3,#1
+        0x0100229e:    408b        .@      LSLS     r3,r3,r1
+        0x010022a0:    6810        .h      LDR      r0,[r2,#0]
+        0x010022a2:    4018        .@      ANDS     r0,r0,r3
+        0x010022a4:    40c8        .@      LSRS     r0,r0,r1
+        0x010022a6:    b2c0        ..      UXTB     r0,r0
+        0x010022a8:    bd10        ..      POP      {r4,pc}
+        0x010022aa:    4608        .F      MOV      r0,r1
+        0x010022ac:    3820         8      SUBS     r0,r0,#0x20
+        0x010022ae:    2401        .$      MOVS     r4,#1
+        0x010022b0:    4084        .@      LSLS     r4,r4,r0
+        0x010022b2:    6853        Sh      LDR      r3,[r2,#4]
+        0x010022b4:    4618        .F      MOV      r0,r3
+        0x010022b6:    4020         @      ANDS     r0,r0,r4
+        0x010022b8:    460b        .F      MOV      r3,r1
+        0x010022ba:    3b20         ;      SUBS     r3,r3,#0x20
+        0x010022bc:    40d8        .@      LSRS     r0,r0,r3
+        0x010022be:    b2c0        ..      UXTB     r0,r0
+        0x010022c0:    e7f2        ..      B        0x10022a8 ; BT_BIT_GET + 20
+    BNEP_DomainConvert
+        0x010022c2:    b5ff        ..      PUSH     {r0-r7,lr}
+        0x010022c4:    4604        .F      MOV      r4,r0
+        0x010022c6:    2100        .!      MOVS     r1,#0
+        0x010022c8:    2001        .       MOVS     r0,#1
+        0x010022ca:    6018        .`      STR      r0,[r3,#0]
+        0x010022cc:    2500        .%      MOVS     r5,#0
+        0x010022ce:    e01d        ..      B        0x100230c ; BNEP_DomainConvert + 74
+        0x010022d0:    1c48        H.      ADDS     r0,r1,#1
+        0x010022d2:    b2c1        ..      UXTB     r1,r0
+        0x010022d4:    7820         x      LDRB     r0,[r4,#0]
+        0x010022d6:    282e        .(      CMP      r0,#0x2e
+        0x010022d8:    d10d        ..      BNE      0x10022f6 ; BNEP_DomainConvert + 52
+        0x010022da:    1e48        H.      SUBS     r0,r1,#1
+        0x010022dc:    5550        PU      STRB     r0,[r2,r5]
+        0x010022de:    681d        .h      LDR      r5,[r3,#0]
+        0x010022e0:    6818        .h      LDR      r0,[r3,#0]
+        0x010022e2:    1c40        @.      ADDS     r0,r0,#1
+        0x010022e4:    6018        .`      STR      r0,[r3,#0]
+        0x010022e6:    6818        .h      LDR      r0,[r3,#0]
+        0x010022e8:    283e        >(      CMP      r0,#0x3e
+        0x010022ea:    db02        ..      BLT      0x10022f2 ; BNEP_DomainConvert + 48
+        0x010022ec:    2000        .       MOVS     r0,#0
+        0x010022ee:    b004        ..      ADD      sp,sp,#0x10
+        0x010022f0:    bdf0        ..      POP      {r4-r7,pc}
+        0x010022f2:    2100        .!      MOVS     r1,#0
+        0x010022f4:    e009        ..      B        0x100230a ; BNEP_DomainConvert + 72
+        0x010022f6:    7826        &x      LDRB     r6,[r4,#0]
+        0x010022f8:    681f        .h      LDR      r7,[r3,#0]
+        0x010022fa:    1c78        x.      ADDS     r0,r7,#1
+        0x010022fc:    6018        .`      STR      r0,[r3,#0]
+        0x010022fe:    55d6        .U      STRB     r6,[r2,r7]
+        0x01002300:    6818        .h      LDR      r0,[r3,#0]
+        0x01002302:    283e        >(      CMP      r0,#0x3e
+        0x01002304:    db01        ..      BLT      0x100230a ; BNEP_DomainConvert + 72
+        0x01002306:    2000        .       MOVS     r0,#0
+        0x01002308:    e7f1        ..      B        0x10022ee ; BNEP_DomainConvert + 44
+        0x0100230a:    1c64        d.      ADDS     r4,r4,#1
+        0x0100230c:    9801        ..      LDR      r0,[sp,#4]
+        0x0100230e:    1e46        F.      SUBS     r6,r0,#1
+        0x01002310:    b2f6        ..      UXTB     r6,r6
+        0x01002312:    9601        ..      STR      r6,[sp,#4]
+        0x01002314:    2800        .(      CMP      r0,#0
+        0x01002316:    d1db        ..      BNE      0x10022d0 ; BNEP_DomainConvert + 14
+        0x01002318:    5551        QU      STRB     r1,[r2,r5]
+        0x0100231a:    2600        .&      MOVS     r6,#0
+        0x0100231c:    681f        .h      LDR      r7,[r3,#0]
+        0x0100231e:    1c78        x.      ADDS     r0,r7,#1
+        0x01002320:    6018        .`      STR      r0,[r3,#0]
+        0x01002322:    55d6        .U      STRB     r6,[r2,r7]
+        0x01002324:    6818        .h      LDR      r0,[r3,#0]
+        0x01002326:    283e        >(      CMP      r0,#0x3e
+        0x01002328:    db01        ..      BLT      0x100232e ; BNEP_DomainConvert + 108
+        0x0100232a:    2000        .       MOVS     r0,#0
+        0x0100232c:    e7df        ..      B        0x10022ee ; BNEP_DomainConvert + 44
+        0x0100232e:    2001        .       MOVS     r0,#1
+        0x01002330:    e7dd        ..      B        0x10022ee ; BNEP_DomainConvert + 44
+    BT_Init
+        0x01002332:    b570        p.      PUSH     {r4-r6,lr}
+        0x01002334:    4605        .F      MOV      r5,r0
+        0x01002336:    460e        .F      MOV      r6,r1
+        0x01002338:    2000        .       MOVS     r0,#0
+        0x0100233a:    49c3        .I      LDR      r1,[pc,#780] ; [0x1002648] = 0x20020
+        0x0100233c:    6008        .`      STR      r0,[r1,#0]
+        0x0100233e:    6048        H`      STR      r0,[r1,#4]
+        0x01002340:    49c2        .I      LDR      r1,[pc,#776] ; [0x100264c] = 0x2001c
+        0x01002342:    6008        .`      STR      r0,[r1,#0]
+        0x01002344:    2400        .$      MOVS     r4,#0
+        0x01002346:    e003        ..      B        0x1002350 ; BT_Init + 30
+        0x01002348:    2000        .       MOVS     r0,#0
+        0x0100234a:    49c1        .I      LDR      r1,[pc,#772] ; [0x1002650] = 0x20028
+        0x0100234c:    5508        .U      STRB     r0,[r1,r4]
+        0x0100234e:    1c64        d.      ADDS     r4,r4,#1
+        0x01002350:    2c05        .,      CMP      r4,#5
+        0x01002352:    dbf9        ..      BLT      0x1002348 ; BT_Init + 22
+        0x01002354:    2400        .$      MOVS     r4,#0
+        0x01002356:    e00b        ..      B        0x1002370 ; BT_Init + 62
+        0x01002358:    00e2        ..      LSLS     r2,r4,#3
+        0x0100235a:    4bbe        .K      LDR      r3,[pc,#760] ; [0x1002654] = 0x2162c
+        0x0100235c:    18d2        ..      ADDS     r2,r2,r3
+        0x0100235e:    1d11        ..      ADDS     r1,r2,#4
+        0x01002360:    2219        ."      MOVS     r2,#0x19
+        0x01002362:    0152        R.      LSLS     r2,r2,#5
+        0x01002364:    4362        bC      MULS     r2,r4,r2
+        0x01002366:    4bbc        .K      LDR      r3,[pc,#752] ; [0x1002658] = 0x2167c
+        0x01002368:    18d0        ..      ADDS     r0,r2,r3
+        0x0100236a:    f002faed    ....    BL       __aeabi_uwrite4 ; 0x1004948
+        0x0100236e:    1c64        d.      ADDS     r4,r4,#1
+        0x01002370:    2c0a        .,      CMP      r4,#0xa
+        0x01002372:    dbf1        ..      BLT      0x1002358 ; BT_Init + 38
+        0x01002374:    49b9        .I      LDR      r1,[pc,#740] ; [0x100265c] = 0x20035
+        0x01002376:    48ba        .H      LDR      r0,[pc,#744] ; [0x1002660] = 0x235bc
+        0x01002378:    f002fae6    ....    BL       __aeabi_uwrite4 ; 0x1004948
+        0x0100237c:    f001ff84    ....    BL       IpcInit ; 0x1004288
+        0x01002380:    2001        .       MOVS     r0,#1
+        0x01002382:    bd70        p.      POP      {r4-r6,pc}
+    SendCMD
+        0x01002384:    b510        ..      PUSH     {r4,lr}
+        0x01002386:    4604        .F      MOV      r4,r0
+        0x01002388:    f001fb79    ..y.    BL       IPC_get_available_size ; 0x1003a7e
+        0x0100238c:    4601        .F      MOV      r1,r0
+        0x0100238e:    78e0        .x      LDRB     r0,[r4,#3]
+        0x01002390:    78a2        .x      LDRB     r2,[r4,#2]
+        0x01002392:    0200        ..      LSLS     r0,r0,#8
+        0x01002394:    4310        .C      ORRS     r0,r0,r2
+        0x01002396:    1cc0        ..      ADDS     r0,r0,#3
+        0x01002398:    4281        .B      CMP      r1,r0
+        0x0100239a:    da01        ..      BGE      0x10023a0 ; SendCMD + 28
+        0x0100239c:    2000        .       MOVS     r0,#0
+        0x0100239e:    bd10        ..      POP      {r4,pc}
+        0x010023a0:    2001        .       MOVS     r0,#1
+        0x010023a2:    7020         p      STRB     r0,[r4,#0]
+        0x010023a4:    4620         F      MOV      r0,r4
+        0x010023a6:    f001fba0    ....    BL       IPC_TxData ; 0x1003aea
+        0x010023aa:    2001        .       MOVS     r0,#1
+        0x010023ac:    e7f7        ..      B        0x100239e ; SendCMD + 26
+    BT_SetBtAddr
+        0x010023ae:    b51c        ..      PUSH     {r2-r4,lr}
+        0x010023b0:    4604        .F      MOV      r4,r0
+        0x010023b2:    2100        .!      MOVS     r1,#0
+        0x010023b4:    4668        hF      MOV      r0,sp
+        0x010023b6:    7041        Ap      STRB     r1,[r0,#1]
+        0x010023b8:    2106        .!      MOVS     r1,#6
+        0x010023ba:    8041        A.      STRH     r1,[r0,#2]
+        0x010023bc:    9401        ..      STR      r4,[sp,#4]
+        0x010023be:    2100        .!      MOVS     r1,#0
+        0x010023c0:    48a1        .H      LDR      r0,[pc,#644] ; [0x1002648] = 0x20020
+        0x010023c2:    f7ffff56    ..V.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x010023c6:    4668        hF      MOV      r0,sp
+        0x010023c8:    f7ffffdc    ....    BL       SendCMD ; 0x1002384
+        0x010023cc:    f001fa9a    ....    BL       SysTick_GetTick ; 0x1003904
+        0x010023d0:    499e        .I      LDR      r1,[pc,#632] ; [0x100264c] = 0x2001c
+        0x010023d2:    6008        .`      STR      r0,[r1,#0]
+        0x010023d4:    bf00        ..      NOP      
+        0x010023d6:    2100        .!      MOVS     r1,#0
+        0x010023d8:    489b        .H      LDR      r0,[pc,#620] ; [0x1002648] = 0x20020
+        0x010023da:    f7ffff5b    ..[.    BL       BT_BIT_GET ; 0x1002294
+        0x010023de:    2800        .(      CMP      r0,#0
+        0x010023e0:    d001        ..      BEQ      0x10023e6 ; BT_SetBtAddr + 56
+        0x010023e2:    2001        .       MOVS     r0,#1
+        0x010023e4:    bd1c        ..      POP      {r2-r4,pc}
+        0x010023e6:    21ff        .!      MOVS     r1,#0xff
+        0x010023e8:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x010023ea:    4898        .H      LDR      r0,[pc,#608] ; [0x100264c] = 0x2001c
+        0x010023ec:    6800        .h      LDR      r0,[r0,#0]
+        0x010023ee:    f001fa8c    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x010023f2:    2800        .(      CMP      r0,#0
+        0x010023f4:    d0ef        ..      BEQ      0x10023d6 ; BT_SetBtAddr + 40
+        0x010023f6:    2000        .       MOVS     r0,#0
+        0x010023f8:    e7f4        ..      B        0x10023e4 ; BT_SetBtAddr + 54
+    BT_SetBleAddr
+        0x010023fa:    b51c        ..      PUSH     {r2-r4,lr}
+        0x010023fc:    4604        .F      MOV      r4,r0
+        0x010023fe:    2101        .!      MOVS     r1,#1
+        0x01002400:    4668        hF      MOV      r0,sp
+        0x01002402:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002404:    2106        .!      MOVS     r1,#6
+        0x01002406:    8041        A.      STRH     r1,[r0,#2]
+        0x01002408:    9401        ..      STR      r4,[sp,#4]
+        0x0100240a:    2101        .!      MOVS     r1,#1
+        0x0100240c:    488e        .H      LDR      r0,[pc,#568] ; [0x1002648] = 0x20020
+        0x0100240e:    f7ffff30    ..0.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002412:    4668        hF      MOV      r0,sp
+        0x01002414:    f7ffffb6    ....    BL       SendCMD ; 0x1002384
+        0x01002418:    f001fa74    ..t.    BL       SysTick_GetTick ; 0x1003904
+        0x0100241c:    498b        .I      LDR      r1,[pc,#556] ; [0x100264c] = 0x2001c
+        0x0100241e:    6008        .`      STR      r0,[r1,#0]
+        0x01002420:    bf00        ..      NOP      
+        0x01002422:    2101        .!      MOVS     r1,#1
+        0x01002424:    4888        .H      LDR      r0,[pc,#544] ; [0x1002648] = 0x20020
+        0x01002426:    f7ffff35    ..5.    BL       BT_BIT_GET ; 0x1002294
+        0x0100242a:    2800        .(      CMP      r0,#0
+        0x0100242c:    d001        ..      BEQ      0x1002432 ; BT_SetBleAddr + 56
+        0x0100242e:    2001        .       MOVS     r0,#1
+        0x01002430:    bd1c        ..      POP      {r2-r4,pc}
+        0x01002432:    21ff        .!      MOVS     r1,#0xff
+        0x01002434:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002436:    4885        .H      LDR      r0,[pc,#532] ; [0x100264c] = 0x2001c
+        0x01002438:    6800        .h      LDR      r0,[r0,#0]
+        0x0100243a:    f001fa66    ..f.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x0100243e:    2800        .(      CMP      r0,#0
+        0x01002440:    d0ef        ..      BEQ      0x1002422 ; BT_SetBleAddr + 40
+        0x01002442:    2000        .       MOVS     r0,#0
+        0x01002444:    e7f4        ..      B        0x1002430 ; BT_SetBleAddr + 54
+    BT_SetVisibility
+        0x01002446:    b5fe        ..      PUSH     {r1-r7,lr}
+        0x01002448:    4604        .F      MOV      r4,r0
+        0x0100244a:    460d        .F      MOV      r5,r1
+        0x0100244c:    4616        .F      MOV      r6,r2
+        0x0100244e:    2000        .       MOVS     r0,#0
+        0x01002450:    9000        ..      STR      r0,[sp,#0]
+        0x01002452:    2c01        .,      CMP      r4,#1
+        0x01002454:    d104        ..      BNE      0x1002460 ; BT_SetVisibility + 26
+        0x01002456:    4669        iF      MOV      r1,sp
+        0x01002458:    7808        .x      LDRB     r0,[r1,#0]
+        0x0100245a:    2101        .!      MOVS     r1,#1
+        0x0100245c:    4308        .C      ORRS     r0,r0,r1
+        0x0100245e:    9000        ..      STR      r0,[sp,#0]
+        0x01002460:    2d01        .-      CMP      r5,#1
+        0x01002462:    d104        ..      BNE      0x100246e ; BT_SetVisibility + 40
+        0x01002464:    4669        iF      MOV      r1,sp
+        0x01002466:    7808        .x      LDRB     r0,[r1,#0]
+        0x01002468:    2102        .!      MOVS     r1,#2
+        0x0100246a:    4308        .C      ORRS     r0,r0,r1
+        0x0100246c:    9000        ..      STR      r0,[sp,#0]
+        0x0100246e:    2e01        ..      CMP      r6,#1
+        0x01002470:    d104        ..      BNE      0x100247c ; BT_SetVisibility + 54
+        0x01002472:    4669        iF      MOV      r1,sp
+        0x01002474:    7808        .x      LDRB     r0,[r1,#0]
+        0x01002476:    2104        .!      MOVS     r1,#4
+        0x01002478:    4308        .C      ORRS     r0,r0,r1
+        0x0100247a:    9000        ..      STR      r0,[sp,#0]
+        0x0100247c:    2102        .!      MOVS     r1,#2
+        0x0100247e:    4668        hF      MOV      r0,sp
+        0x01002480:    7141        Aq      STRB     r1,[r0,#5]
+        0x01002482:    2101        .!      MOVS     r1,#1
+        0x01002484:    80c1        ..      STRH     r1,[r0,#6]
+        0x01002486:    9002        ..      STR      r0,[sp,#8]
+        0x01002488:    2102        .!      MOVS     r1,#2
+        0x0100248a:    486f        oH      LDR      r0,[pc,#444] ; [0x1002648] = 0x20020
+        0x0100248c:    f7fffef1    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002490:    a801        ..      ADD      r0,sp,#4
+        0x01002492:    f7ffff77    ..w.    BL       SendCMD ; 0x1002384
+        0x01002496:    f001fa35    ..5.    BL       SysTick_GetTick ; 0x1003904
+        0x0100249a:    496c        lI      LDR      r1,[pc,#432] ; [0x100264c] = 0x2001c
+        0x0100249c:    6008        .`      STR      r0,[r1,#0]
+        0x0100249e:    bf00        ..      NOP      
+        0x010024a0:    2102        .!      MOVS     r1,#2
+        0x010024a2:    4869        iH      LDR      r0,[pc,#420] ; [0x1002648] = 0x20020
+        0x010024a4:    f7fffef6    ....    BL       BT_BIT_GET ; 0x1002294
+        0x010024a8:    2800        .(      CMP      r0,#0
+        0x010024aa:    d001        ..      BEQ      0x10024b0 ; BT_SetVisibility + 106
+        0x010024ac:    2001        .       MOVS     r0,#1
+        0x010024ae:    bdfe        ..      POP      {r1-r7,pc}
+        0x010024b0:    21ff        .!      MOVS     r1,#0xff
+        0x010024b2:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x010024b4:    4865        eH      LDR      r0,[pc,#404] ; [0x100264c] = 0x2001c
+        0x010024b6:    6800        .h      LDR      r0,[r0,#0]
+        0x010024b8:    f001fa27    ..'.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x010024bc:    2800        .(      CMP      r0,#0
+        0x010024be:    d0ef        ..      BEQ      0x10024a0 ; BT_SetVisibility + 90
+        0x010024c0:    2000        .       MOVS     r0,#0
+        0x010024c2:    e7f4        ..      B        0x10024ae ; BT_SetVisibility + 104
+    BT_SetBtName
+        0x010024c4:    b57c        |.      PUSH     {r2-r6,lr}
+        0x010024c6:    4604        .F      MOV      r4,r0
+        0x010024c8:    460d        .F      MOV      r5,r1
+        0x010024ca:    2103        .!      MOVS     r1,#3
+        0x010024cc:    4668        hF      MOV      r0,sp
+        0x010024ce:    7041        Ap      STRB     r1,[r0,#1]
+        0x010024d0:    8045        E.      STRH     r5,[r0,#2]
+        0x010024d2:    9401        ..      STR      r4,[sp,#4]
+        0x010024d4:    485c        \H      LDR      r0,[pc,#368] ; [0x1002648] = 0x20020
+        0x010024d6:    f7fffecc    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x010024da:    4668        hF      MOV      r0,sp
+        0x010024dc:    f7ffff52    ..R.    BL       SendCMD ; 0x1002384
+        0x010024e0:    f001fa10    ....    BL       SysTick_GetTick ; 0x1003904
+        0x010024e4:    4959        YI      LDR      r1,[pc,#356] ; [0x100264c] = 0x2001c
+        0x010024e6:    6008        .`      STR      r0,[r1,#0]
+        0x010024e8:    bf00        ..      NOP      
+        0x010024ea:    2103        .!      MOVS     r1,#3
+        0x010024ec:    4856        VH      LDR      r0,[pc,#344] ; [0x1002648] = 0x20020
+        0x010024ee:    f7fffed1    ....    BL       BT_BIT_GET ; 0x1002294
+        0x010024f2:    2800        .(      CMP      r0,#0
+        0x010024f4:    d001        ..      BEQ      0x10024fa ; BT_SetBtName + 54
+        0x010024f6:    2001        .       MOVS     r0,#1
+        0x010024f8:    bd7c        |.      POP      {r2-r6,pc}
+        0x010024fa:    21ff        .!      MOVS     r1,#0xff
+        0x010024fc:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x010024fe:    4853        SH      LDR      r0,[pc,#332] ; [0x100264c] = 0x2001c
+        0x01002500:    6800        .h      LDR      r0,[r0,#0]
+        0x01002502:    f001fa02    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002506:    2800        .(      CMP      r0,#0
+        0x01002508:    d0ef        ..      BEQ      0x10024ea ; BT_SetBtName + 38
+        0x0100250a:    2000        .       MOVS     r0,#0
+        0x0100250c:    e7f4        ..      B        0x10024f8 ; BT_SetBtName + 52
+    BT_SetBleName
+        0x0100250e:    b57c        |.      PUSH     {r2-r6,lr}
+        0x01002510:    4604        .F      MOV      r4,r0
+        0x01002512:    460d        .F      MOV      r5,r1
+        0x01002514:    2104        .!      MOVS     r1,#4
+        0x01002516:    4668        hF      MOV      r0,sp
+        0x01002518:    7041        Ap      STRB     r1,[r0,#1]
+        0x0100251a:    8045        E.      STRH     r5,[r0,#2]
+        0x0100251c:    9401        ..      STR      r4,[sp,#4]
+        0x0100251e:    484a        JH      LDR      r0,[pc,#296] ; [0x1002648] = 0x20020
+        0x01002520:    f7fffea7    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002524:    4668        hF      MOV      r0,sp
+        0x01002526:    f7ffff2d    ..-.    BL       SendCMD ; 0x1002384
+        0x0100252a:    f001f9eb    ....    BL       SysTick_GetTick ; 0x1003904
+        0x0100252e:    4947        GI      LDR      r1,[pc,#284] ; [0x100264c] = 0x2001c
+        0x01002530:    6008        .`      STR      r0,[r1,#0]
+        0x01002532:    bf00        ..      NOP      
+        0x01002534:    2104        .!      MOVS     r1,#4
+        0x01002536:    4844        DH      LDR      r0,[pc,#272] ; [0x1002648] = 0x20020
+        0x01002538:    f7fffeac    ....    BL       BT_BIT_GET ; 0x1002294
+        0x0100253c:    2800        .(      CMP      r0,#0
+        0x0100253e:    d001        ..      BEQ      0x1002544 ; BT_SetBleName + 54
+        0x01002540:    2001        .       MOVS     r0,#1
+        0x01002542:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002544:    21ff        .!      MOVS     r1,#0xff
+        0x01002546:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002548:    4840        @H      LDR      r0,[pc,#256] ; [0x100264c] = 0x2001c
+        0x0100254a:    6800        .h      LDR      r0,[r0,#0]
+        0x0100254c:    f001f9dd    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002550:    2800        .(      CMP      r0,#0
+        0x01002552:    d0ef        ..      BEQ      0x1002534 ; BT_SetBleName + 38
+        0x01002554:    2000        .       MOVS     r0,#0
+        0x01002556:    e7f4        ..      B        0x1002542 ; BT_SetBleName + 52
+    BT_SendSppData
+        0x01002558:    b57c        |.      PUSH     {r2-r6,lr}
+        0x0100255a:    4605        .F      MOV      r5,r0
+        0x0100255c:    460c        .F      MOV      r4,r1
+        0x0100255e:    2c00        .,      CMP      r4,#0
+        0x01002560:    d001        ..      BEQ      0x1002566 ; BT_SendSppData + 14
+        0x01002562:    2cff        .,      CMP      r4,#0xff
+        0x01002564:    dd01        ..      BLE      0x100256a ; BT_SendSppData + 18
+        0x01002566:    2000        .       MOVS     r0,#0
+        0x01002568:    bd7c        |.      POP      {r2-r6,pc}
+        0x0100256a:    2105        .!      MOVS     r1,#5
+        0x0100256c:    4668        hF      MOV      r0,sp
+        0x0100256e:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002570:    8044        D.      STRH     r4,[r0,#2]
+        0x01002572:    9501        ..      STR      r5,[sp,#4]
+        0x01002574:    4834        4H      LDR      r0,[pc,#208] ; [0x1002648] = 0x20020
+        0x01002576:    f7fffe7c    ..|.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x0100257a:    4668        hF      MOV      r0,sp
+        0x0100257c:    f7ffff02    ....    BL       SendCMD ; 0x1002384
+        0x01002580:    f001f9c0    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002584:    4931        1I      LDR      r1,[pc,#196] ; [0x100264c] = 0x2001c
+        0x01002586:    6008        .`      STR      r0,[r1,#0]
+        0x01002588:    bf00        ..      NOP      
+        0x0100258a:    2105        .!      MOVS     r1,#5
+        0x0100258c:    482e        .H      LDR      r0,[pc,#184] ; [0x1002648] = 0x20020
+        0x0100258e:    f7fffe81    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002592:    2800        .(      CMP      r0,#0
+        0x01002594:    d001        ..      BEQ      0x100259a ; BT_SendSppData + 66
+        0x01002596:    2001        .       MOVS     r0,#1
+        0x01002598:    e7e6        ..      B        0x1002568 ; BT_SendSppData + 16
+        0x0100259a:    21ff        .!      MOVS     r1,#0xff
+        0x0100259c:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x0100259e:    482b        +H      LDR      r0,[pc,#172] ; [0x100264c] = 0x2001c
+        0x010025a0:    6800        .h      LDR      r0,[r0,#0]
+        0x010025a2:    f001f9b2    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x010025a6:    2800        .(      CMP      r0,#0
+        0x010025a8:    d0ef        ..      BEQ      0x100258a ; BT_SendSppData + 50
+        0x010025aa:    2000        .       MOVS     r0,#0
+        0x010025ac:    e7dc        ..      B        0x1002568 ; BT_SendSppData + 16
+    BT_SendBleData
+        0x010025ae:    b57c        |.      PUSH     {r2-r6,lr}
+        0x010025b0:    4605        .F      MOV      r5,r0
+        0x010025b2:    460c        .F      MOV      r4,r1
+        0x010025b4:    2c02        .,      CMP      r4,#2
+        0x010025b6:    db01        ..      BLT      0x10025bc ; BT_SendBleData + 14
+        0x010025b8:    2cff        .,      CMP      r4,#0xff
+        0x010025ba:    dd01        ..      BLE      0x10025c0 ; BT_SendBleData + 18
+        0x010025bc:    2000        .       MOVS     r0,#0
+        0x010025be:    bd7c        |.      POP      {r2-r6,pc}
+        0x010025c0:    2109        .!      MOVS     r1,#9
+        0x010025c2:    4668        hF      MOV      r0,sp
+        0x010025c4:    7041        Ap      STRB     r1,[r0,#1]
+        0x010025c6:    8044        D.      STRH     r4,[r0,#2]
+        0x010025c8:    9501        ..      STR      r5,[sp,#4]
+        0x010025ca:    2106        .!      MOVS     r1,#6
+        0x010025cc:    481e        .H      LDR      r0,[pc,#120] ; [0x1002648] = 0x20020
+        0x010025ce:    f7fffe50    ..P.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x010025d2:    4668        hF      MOV      r0,sp
+        0x010025d4:    f7fffed6    ....    BL       SendCMD ; 0x1002384
+        0x010025d8:    f001f994    ....    BL       SysTick_GetTick ; 0x1003904
+        0x010025dc:    491b        .I      LDR      r1,[pc,#108] ; [0x100264c] = 0x2001c
+        0x010025de:    6008        .`      STR      r0,[r1,#0]
+        0x010025e0:    bf00        ..      NOP      
+        0x010025e2:    2106        .!      MOVS     r1,#6
+        0x010025e4:    4818        .H      LDR      r0,[pc,#96] ; [0x1002648] = 0x20020
+        0x010025e6:    f7fffe55    ..U.    BL       BT_BIT_GET ; 0x1002294
+        0x010025ea:    2800        .(      CMP      r0,#0
+        0x010025ec:    d001        ..      BEQ      0x10025f2 ; BT_SendBleData + 68
+        0x010025ee:    2001        .       MOVS     r0,#1
+        0x010025f0:    e7e5        ..      B        0x10025be ; BT_SendBleData + 16
+        0x010025f2:    21ff        .!      MOVS     r1,#0xff
+        0x010025f4:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x010025f6:    4815        .H      LDR      r0,[pc,#84] ; [0x100264c] = 0x2001c
+        0x010025f8:    6800        .h      LDR      r0,[r0,#0]
+        0x010025fa:    f001f986    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x010025fe:    2800        .(      CMP      r0,#0
+        0x01002600:    d0ef        ..      BEQ      0x10025e2 ; BT_SendBleData + 52
+        0x01002602:    2000        .       MOVS     r0,#0
+        0x01002604:    e7db        ..      B        0x10025be ; BT_SendBleData + 16
+    Bt_GetBtStatus
+        0x01002606:    b51c        ..      PUSH     {r2-r4,lr}
+        0x01002608:    210b        .!      MOVS     r1,#0xb
+        0x0100260a:    4668        hF      MOV      r0,sp
+        0x0100260c:    7041        Ap      STRB     r1,[r0,#1]
+        0x0100260e:    2100        .!      MOVS     r1,#0
+        0x01002610:    8041        A.      STRH     r1,[r0,#2]
+        0x01002612:    2000        .       MOVS     r0,#0
+        0x01002614:    9001        ..      STR      r0,[sp,#4]
+        0x01002616:    2107        .!      MOVS     r1,#7
+        0x01002618:    480b        .H      LDR      r0,[pc,#44] ; [0x1002648] = 0x20020
+        0x0100261a:    f7fffe2a    ..*.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x0100261e:    4668        hF      MOV      r0,sp
+        0x01002620:    f7fffeb0    ....    BL       SendCMD ; 0x1002384
+        0x01002624:    f001f96e    ..n.    BL       SysTick_GetTick ; 0x1003904
+        0x01002628:    4908        .I      LDR      r1,[pc,#32] ; [0x100264c] = 0x2001c
+        0x0100262a:    6008        .`      STR      r0,[r1,#0]
+        0x0100262c:    bf00        ..      NOP      
+        0x0100262e:    2107        .!      MOVS     r1,#7
+        0x01002630:    4805        .H      LDR      r0,[pc,#20] ; [0x1002648] = 0x20020
+        0x01002632:    f7fffe2f    ../.    BL       BT_BIT_GET ; 0x1002294
+        0x01002636:    2800        .(      CMP      r0,#0
+        0x01002638:    d014        ..      BEQ      0x1002664 ; Bt_GetBtStatus + 94
+        0x0100263a:    4805        .H      LDR      r0,[pc,#20] ; [0x1002650] = 0x20028
+        0x0100263c:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100263e:    bd1c        ..      POP      {r2-r4,pc}
+    $d
+        0x01002640:    0002002e    ....    DCD    131118
+        0x01002644:    0002002d    -...    DCD    131117
+        0x01002648:    00020020     ...    DCD    131104
+        0x0100264c:    0002001c    ....    DCD    131100
+        0x01002650:    00020028    (...    DCD    131112
+        0x01002654:    0002162c    ,...    DCD    136748
+        0x01002658:    0002167c    |...    DCD    136828
+        0x0100265c:    00020035    5...    DCD    131125
+        0x01002660:    000235bc    .5..    DCD    144828
+    $t
+        0x01002664:    21ff        .!      MOVS     r1,#0xff
+        0x01002666:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002668:    48fa        .H      LDR      r0,[pc,#1000] ; [0x1002a54] = 0x2001c
+        0x0100266a:    6800        .h      LDR      r0,[r0,#0]
+        0x0100266c:    f001f94d    ..M.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002670:    2800        .(      CMP      r0,#0
+        0x01002672:    d0dc        ..      BEQ      0x100262e ; Bt_GetBtStatus + 40
+        0x01002674:    2080        .       MOVS     r0,#0x80
+        0x01002676:    e7e2        ..      B        0x100263e ; Bt_GetBtStatus + 56
+    BT_SetParingMode
+        0x01002678:    b53e        >.      PUSH     {r1-r5,lr}
+        0x0100267a:    4604        .F      MOV      r4,r0
+        0x0100267c:    9402        ..      STR      r4,[sp,#8]
+        0x0100267e:    210c        .!      MOVS     r1,#0xc
+        0x01002680:    4668        hF      MOV      r0,sp
+        0x01002682:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002684:    2101        .!      MOVS     r1,#1
+        0x01002686:    8041        A.      STRH     r1,[r0,#2]
+        0x01002688:    a802        ..      ADD      r0,sp,#8
+        0x0100268a:    9001        ..      STR      r0,[sp,#4]
+        0x0100268c:    2108        .!      MOVS     r1,#8
+        0x0100268e:    48f2        .H      LDR      r0,[pc,#968] ; [0x1002a58] = 0x20020
+        0x01002690:    f7fffdef    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002694:    4668        hF      MOV      r0,sp
+        0x01002696:    f7fffe75    ..u.    BL       SendCMD ; 0x1002384
+        0x0100269a:    f001f933    ..3.    BL       SysTick_GetTick ; 0x1003904
+        0x0100269e:    49ed        .I      LDR      r1,[pc,#948] ; [0x1002a54] = 0x2001c
+        0x010026a0:    6008        .`      STR      r0,[r1,#0]
+        0x010026a2:    bf00        ..      NOP      
+        0x010026a4:    2108        .!      MOVS     r1,#8
+        0x010026a6:    48ec        .H      LDR      r0,[pc,#944] ; [0x1002a58] = 0x20020
+        0x010026a8:    f7fffdf4    ....    BL       BT_BIT_GET ; 0x1002294
+        0x010026ac:    2800        .(      CMP      r0,#0
+        0x010026ae:    d001        ..      BEQ      0x10026b4 ; BT_SetParingMode + 60
+        0x010026b0:    2001        .       MOVS     r0,#1
+        0x010026b2:    bd3e        >.      POP      {r1-r5,pc}
+        0x010026b4:    21ff        .!      MOVS     r1,#0xff
+        0x010026b6:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x010026b8:    48e6        .H      LDR      r0,[pc,#920] ; [0x1002a54] = 0x2001c
+        0x010026ba:    6800        .h      LDR      r0,[r0,#0]
+        0x010026bc:    f001f925    ..%.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x010026c0:    2800        .(      CMP      r0,#0
+        0x010026c2:    d0ef        ..      BEQ      0x10026a4 ; BT_SetParingMode + 44
+        0x010026c4:    2000        .       MOVS     r0,#0
+        0x010026c6:    e7f4        ..      B        0x10026b2 ; BT_SetParingMode + 58
+    BT_SetPincode
+        0x010026c8:    b57c        |.      PUSH     {r2-r6,lr}
+        0x010026ca:    4604        .F      MOV      r4,r0
+        0x010026cc:    460d        .F      MOV      r5,r1
+        0x010026ce:    210d        .!      MOVS     r1,#0xd
+        0x010026d0:    4668        hF      MOV      r0,sp
+        0x010026d2:    7041        Ap      STRB     r1,[r0,#1]
+        0x010026d4:    8045        E.      STRH     r5,[r0,#2]
+        0x010026d6:    9401        ..      STR      r4,[sp,#4]
+        0x010026d8:    2109        .!      MOVS     r1,#9
+        0x010026da:    48df        .H      LDR      r0,[pc,#892] ; [0x1002a58] = 0x20020
+        0x010026dc:    f7fffdc9    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x010026e0:    4668        hF      MOV      r0,sp
+        0x010026e2:    f7fffe4f    ..O.    BL       SendCMD ; 0x1002384
+        0x010026e6:    f001f90d    ....    BL       SysTick_GetTick ; 0x1003904
+        0x010026ea:    49da        .I      LDR      r1,[pc,#872] ; [0x1002a54] = 0x2001c
+        0x010026ec:    6008        .`      STR      r0,[r1,#0]
+        0x010026ee:    bf00        ..      NOP      
+        0x010026f0:    2109        .!      MOVS     r1,#9
+        0x010026f2:    48d9        .H      LDR      r0,[pc,#868] ; [0x1002a58] = 0x20020
+        0x010026f4:    f7fffdce    ....    BL       BT_BIT_GET ; 0x1002294
+        0x010026f8:    2800        .(      CMP      r0,#0
+        0x010026fa:    d001        ..      BEQ      0x1002700 ; BT_SetPincode + 56
+        0x010026fc:    2001        .       MOVS     r0,#1
+        0x010026fe:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002700:    21ff        .!      MOVS     r1,#0xff
+        0x01002702:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002704:    48d3        .H      LDR      r0,[pc,#844] ; [0x1002a54] = 0x2001c
+        0x01002706:    6800        .h      LDR      r0,[r0,#0]
+        0x01002708:    f001f8ff    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x0100270c:    2800        .(      CMP      r0,#0
+        0x0100270e:    d0ef        ..      BEQ      0x10026f0 ; BT_SetPincode + 40
+        0x01002710:    2000        .       MOVS     r0,#0
+        0x01002712:    e7f4        ..      B        0x10026fe ; BT_SetPincode + 54
+    BT_BtDisconnect
+        0x01002714:    b51c        ..      PUSH     {r2-r4,lr}
+        0x01002716:    2111        .!      MOVS     r1,#0x11
+        0x01002718:    4668        hF      MOV      r0,sp
+        0x0100271a:    7041        Ap      STRB     r1,[r0,#1]
+        0x0100271c:    2100        .!      MOVS     r1,#0
+        0x0100271e:    8041        A.      STRH     r1,[r0,#2]
+        0x01002720:    2000        .       MOVS     r0,#0
+        0x01002722:    9001        ..      STR      r0,[sp,#4]
+        0x01002724:    210b        .!      MOVS     r1,#0xb
+        0x01002726:    48cc        .H      LDR      r0,[pc,#816] ; [0x1002a58] = 0x20020
+        0x01002728:    f7fffda3    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x0100272c:    4668        hF      MOV      r0,sp
+        0x0100272e:    f7fffe29    ..).    BL       SendCMD ; 0x1002384
+        0x01002732:    f001f8e7    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002736:    49c7        .I      LDR      r1,[pc,#796] ; [0x1002a54] = 0x2001c
+        0x01002738:    6008        .`      STR      r0,[r1,#0]
+        0x0100273a:    bf00        ..      NOP      
+        0x0100273c:    210b        .!      MOVS     r1,#0xb
+        0x0100273e:    48c6        .H      LDR      r0,[pc,#792] ; [0x1002a58] = 0x20020
+        0x01002740:    f7fffda8    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002744:    2800        .(      CMP      r0,#0
+        0x01002746:    d001        ..      BEQ      0x100274c ; BT_BtDisconnect + 56
+        0x01002748:    2001        .       MOVS     r0,#1
+        0x0100274a:    bd1c        ..      POP      {r2-r4,pc}
+        0x0100274c:    21ff        .!      MOVS     r1,#0xff
+        0x0100274e:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002750:    48c0        .H      LDR      r0,[pc,#768] ; [0x1002a54] = 0x2001c
+        0x01002752:    6800        .h      LDR      r0,[r0,#0]
+        0x01002754:    f001f8d9    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002758:    2800        .(      CMP      r0,#0
+        0x0100275a:    d0ef        ..      BEQ      0x100273c ; BT_BtDisconnect + 40
+        0x0100275c:    2000        .       MOVS     r0,#0
+        0x0100275e:    e7f4        ..      B        0x100274a ; BT_BtDisconnect + 54
+    BT_GetVersion
+        0x01002760:    b51c        ..      PUSH     {r2-r4,lr}
+        0x01002762:    2400        .$      MOVS     r4,#0
+        0x01002764:    2110        .!      MOVS     r1,#0x10
+        0x01002766:    4668        hF      MOV      r0,sp
+        0x01002768:    7041        Ap      STRB     r1,[r0,#1]
+        0x0100276a:    2100        .!      MOVS     r1,#0
+        0x0100276c:    8041        A.      STRH     r1,[r0,#2]
+        0x0100276e:    2000        .       MOVS     r0,#0
+        0x01002770:    9001        ..      STR      r0,[sp,#4]
+        0x01002772:    210a        .!      MOVS     r1,#0xa
+        0x01002774:    48b8        .H      LDR      r0,[pc,#736] ; [0x1002a58] = 0x20020
+        0x01002776:    f7fffd7c    ..|.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x0100277a:    4668        hF      MOV      r0,sp
+        0x0100277c:    f7fffe02    ....    BL       SendCMD ; 0x1002384
+        0x01002780:    f001f8c0    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002784:    49b3        .I      LDR      r1,[pc,#716] ; [0x1002a54] = 0x2001c
+        0x01002786:    6008        .`      STR      r0,[r1,#0]
+        0x01002788:    bf00        ..      NOP      
+        0x0100278a:    210a        .!      MOVS     r1,#0xa
+        0x0100278c:    48b2        .H      LDR      r0,[pc,#712] ; [0x1002a58] = 0x20020
+        0x0100278e:    f7fffd81    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002792:    2800        .(      CMP      r0,#0
+        0x01002794:    d008        ..      BEQ      0x10027a8 ; BT_GetVersion + 72
+        0x01002796:    48b1        .H      LDR      r0,[pc,#708] ; [0x1002a5c] = 0x20028
+        0x01002798:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100279a:    0200        ..      LSLS     r0,r0,#8
+        0x0100279c:    49af        .I      LDR      r1,[pc,#700] ; [0x1002a5c] = 0x20028
+        0x0100279e:    7849        Ix      LDRB     r1,[r1,#1]
+        0x010027a0:    4308        .C      ORRS     r0,r0,r1
+        0x010027a2:    4604        .F      MOV      r4,r0
+        0x010027a4:    4620         F      MOV      r0,r4
+        0x010027a6:    bd1c        ..      POP      {r2-r4,pc}
+        0x010027a8:    21ff        .!      MOVS     r1,#0xff
+        0x010027aa:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x010027ac:    48a9        .H      LDR      r0,[pc,#676] ; [0x1002a54] = 0x2001c
+        0x010027ae:    6800        .h      LDR      r0,[r0,#0]
+        0x010027b0:    f001f8ab    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x010027b4:    2800        .(      CMP      r0,#0
+        0x010027b6:    d0e8        ..      BEQ      0x100278a ; BT_GetVersion + 42
+        0x010027b8:    2000        .       MOVS     r0,#0
+        0x010027ba:    e7f4        ..      B        0x10027a6 ; BT_GetVersion + 70
+    BT_BleDisconnect
+        0x010027bc:    b51c        ..      PUSH     {r2-r4,lr}
+        0x010027be:    2112        .!      MOVS     r1,#0x12
+        0x010027c0:    4668        hF      MOV      r0,sp
+        0x010027c2:    7041        Ap      STRB     r1,[r0,#1]
+        0x010027c4:    2100        .!      MOVS     r1,#0
+        0x010027c6:    8041        A.      STRH     r1,[r0,#2]
+        0x010027c8:    2000        .       MOVS     r0,#0
+        0x010027ca:    9001        ..      STR      r0,[sp,#4]
+        0x010027cc:    210c        .!      MOVS     r1,#0xc
+        0x010027ce:    48a2        .H      LDR      r0,[pc,#648] ; [0x1002a58] = 0x20020
+        0x010027d0:    f7fffd4f    ..O.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x010027d4:    4668        hF      MOV      r0,sp
+        0x010027d6:    f7fffdd5    ....    BL       SendCMD ; 0x1002384
+        0x010027da:    f001f893    ....    BL       SysTick_GetTick ; 0x1003904
+        0x010027de:    499d        .I      LDR      r1,[pc,#628] ; [0x1002a54] = 0x2001c
+        0x010027e0:    6008        .`      STR      r0,[r1,#0]
+        0x010027e2:    bf00        ..      NOP      
+        0x010027e4:    210c        .!      MOVS     r1,#0xc
+        0x010027e6:    489c        .H      LDR      r0,[pc,#624] ; [0x1002a58] = 0x20020
+        0x010027e8:    f7fffd54    ..T.    BL       BT_BIT_GET ; 0x1002294
+        0x010027ec:    2800        .(      CMP      r0,#0
+        0x010027ee:    d001        ..      BEQ      0x10027f4 ; BT_BleDisconnect + 56
+        0x010027f0:    2001        .       MOVS     r0,#1
+        0x010027f2:    bd1c        ..      POP      {r2-r4,pc}
+        0x010027f4:    21ff        .!      MOVS     r1,#0xff
+        0x010027f6:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x010027f8:    4896        .H      LDR      r0,[pc,#600] ; [0x1002a54] = 0x2001c
+        0x010027fa:    6800        .h      LDR      r0,[r0,#0]
+        0x010027fc:    f001f885    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002800:    2800        .(      CMP      r0,#0
+        0x01002802:    d0ef        ..      BEQ      0x10027e4 ; BT_BleDisconnect + 40
+        0x01002804:    2000        .       MOVS     r0,#0
+        0x01002806:    e7f4        ..      B        0x10027f2 ; BT_BleDisconnect + 54
+    BT_SetNVRAM
+        0x01002808:    b57c        |.      PUSH     {r2-r6,lr}
+        0x0100280a:    4604        .F      MOV      r4,r0
+        0x0100280c:    460d        .F      MOV      r5,r1
+        0x0100280e:    2126        &!      MOVS     r1,#0x26
+        0x01002810:    4668        hF      MOV      r0,sp
+        0x01002812:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002814:    8045        E.      STRH     r5,[r0,#2]
+        0x01002816:    9401        ..      STR      r4,[sp,#4]
+        0x01002818:    210d        .!      MOVS     r1,#0xd
+        0x0100281a:    488f        .H      LDR      r0,[pc,#572] ; [0x1002a58] = 0x20020
+        0x0100281c:    f7fffd29    ..).    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002820:    4668        hF      MOV      r0,sp
+        0x01002822:    f7fffdaf    ....    BL       SendCMD ; 0x1002384
+        0x01002826:    f001f86d    ..m.    BL       SysTick_GetTick ; 0x1003904
+        0x0100282a:    498a        .I      LDR      r1,[pc,#552] ; [0x1002a54] = 0x2001c
+        0x0100282c:    6008        .`      STR      r0,[r1,#0]
+        0x0100282e:    bf00        ..      NOP      
+        0x01002830:    210d        .!      MOVS     r1,#0xd
+        0x01002832:    4889        .H      LDR      r0,[pc,#548] ; [0x1002a58] = 0x20020
+        0x01002834:    f7fffd2e    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002838:    2800        .(      CMP      r0,#0
+        0x0100283a:    d001        ..      BEQ      0x1002840 ; BT_SetNVRAM + 56
+        0x0100283c:    2001        .       MOVS     r0,#1
+        0x0100283e:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002840:    21ff        .!      MOVS     r1,#0xff
+        0x01002842:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002844:    4883        .H      LDR      r0,[pc,#524] ; [0x1002a54] = 0x2001c
+        0x01002846:    6800        .h      LDR      r0,[r0,#0]
+        0x01002848:    f001f85f    .._.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x0100284c:    2800        .(      CMP      r0,#0
+        0x0100284e:    d0ef        ..      BEQ      0x1002830 ; BT_SetNVRAM + 40
+        0x01002850:    2000        .       MOVS     r0,#0
+        0x01002852:    e7f4        ..      B        0x100283e ; BT_SetNVRAM + 54
+    BT_EnterSleepMode
+        0x01002854:    b51c        ..      PUSH     {r2-r4,lr}
+        0x01002856:    2127        '!      MOVS     r1,#0x27
+        0x01002858:    4668        hF      MOV      r0,sp
+        0x0100285a:    7041        Ap      STRB     r1,[r0,#1]
+        0x0100285c:    2100        .!      MOVS     r1,#0
+        0x0100285e:    8041        A.      STRH     r1,[r0,#2]
+        0x01002860:    2000        .       MOVS     r0,#0
+        0x01002862:    9001        ..      STR      r0,[sp,#4]
+        0x01002864:    4668        hF      MOV      r0,sp
+        0x01002866:    f7fffd8d    ....    BL       SendCMD ; 0x1002384
+        0x0100286a:    2001        .       MOVS     r0,#1
+        0x0100286c:    bd1c        ..      POP      {r2-r4,pc}
+    BT_ConfirmGkey
+        0x0100286e:    b53e        >.      PUSH     {r1-r5,lr}
+        0x01002870:    4604        .F      MOV      r4,r0
+        0x01002872:    9400        ..      STR      r4,[sp,#0]
+        0x01002874:    2128        (!      MOVS     r1,#0x28
+        0x01002876:    4668        hF      MOV      r0,sp
+        0x01002878:    7141        Aq      STRB     r1,[r0,#5]
+        0x0100287a:    2101        .!      MOVS     r1,#1
+        0x0100287c:    80c1        ..      STRH     r1,[r0,#6]
+        0x0100287e:    9002        ..      STR      r0,[sp,#8]
+        0x01002880:    2110        .!      MOVS     r1,#0x10
+        0x01002882:    4875        uH      LDR      r0,[pc,#468] ; [0x1002a58] = 0x20020
+        0x01002884:    f7fffcf5    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002888:    a801        ..      ADD      r0,sp,#4
+        0x0100288a:    f7fffd7b    ..{.    BL       SendCMD ; 0x1002384
+        0x0100288e:    f001f839    ..9.    BL       SysTick_GetTick ; 0x1003904
+        0x01002892:    4970        pI      LDR      r1,[pc,#448] ; [0x1002a54] = 0x2001c
+        0x01002894:    6008        .`      STR      r0,[r1,#0]
+        0x01002896:    bf00        ..      NOP      
+        0x01002898:    2110        .!      MOVS     r1,#0x10
+        0x0100289a:    486f        oH      LDR      r0,[pc,#444] ; [0x1002a58] = 0x20020
+        0x0100289c:    f7fffcfa    ....    BL       BT_BIT_GET ; 0x1002294
+        0x010028a0:    2800        .(      CMP      r0,#0
+        0x010028a2:    d001        ..      BEQ      0x10028a8 ; BT_ConfirmGkey + 58
+        0x010028a4:    2001        .       MOVS     r0,#1
+        0x010028a6:    bd3e        >.      POP      {r1-r5,pc}
+        0x010028a8:    21ff        .!      MOVS     r1,#0xff
+        0x010028aa:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x010028ac:    4869        iH      LDR      r0,[pc,#420] ; [0x1002a54] = 0x2001c
+        0x010028ae:    6800        .h      LDR      r0,[r0,#0]
+        0x010028b0:    f001f82b    ..+.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x010028b4:    2800        .(      CMP      r0,#0
+        0x010028b6:    d0ef        ..      BEQ      0x1002898 ; BT_ConfirmGkey + 42
+        0x010028b8:    2000        .       MOVS     r0,#0
+        0x010028ba:    e7f4        ..      B        0x10028a6 ; BT_ConfirmGkey + 56
+    BT_SetSppFlowcontrol
+        0x010028bc:    b53e        >.      PUSH     {r1-r5,lr}
+        0x010028be:    4604        .F      MOV      r4,r0
+        0x010028c0:    2129        )!      MOVS     r1,#0x29
+        0x010028c2:    4668        hF      MOV      r0,sp
+        0x010028c4:    7141        Aq      STRB     r1,[r0,#5]
+        0x010028c6:    2101        .!      MOVS     r1,#1
+        0x010028c8:    80c1        ..      STRH     r1,[r0,#6]
+        0x010028ca:    9400        ..      STR      r4,[sp,#0]
+        0x010028cc:    9002        ..      STR      r0,[sp,#8]
+        0x010028ce:    2112        .!      MOVS     r1,#0x12
+        0x010028d0:    4861        aH      LDR      r0,[pc,#388] ; [0x1002a58] = 0x20020
+        0x010028d2:    f7fffcce    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x010028d6:    a801        ..      ADD      r0,sp,#4
+        0x010028d8:    f7fffd54    ..T.    BL       SendCMD ; 0x1002384
+        0x010028dc:    2001        .       MOVS     r0,#1
+        0x010028de:    bd3e        >.      POP      {r1-r5,pc}
+    BT_PasskeyEntry
+        0x010028e0:    b51c        ..      PUSH     {r2-r4,lr}
+        0x010028e2:    4604        .F      MOV      r4,r0
+        0x010028e4:    2130        0!      MOVS     r1,#0x30
+        0x010028e6:    4668        hF      MOV      r0,sp
+        0x010028e8:    7041        Ap      STRB     r1,[r0,#1]
+        0x010028ea:    2104        .!      MOVS     r1,#4
+        0x010028ec:    8041        A.      STRH     r1,[r0,#2]
+        0x010028ee:    9401        ..      STR      r4,[sp,#4]
+        0x010028f0:    2113        .!      MOVS     r1,#0x13
+        0x010028f2:    4859        YH      LDR      r0,[pc,#356] ; [0x1002a58] = 0x20020
+        0x010028f4:    f7fffcbd    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x010028f8:    4668        hF      MOV      r0,sp
+        0x010028fa:    f7fffd43    ..C.    BL       SendCMD ; 0x1002384
+        0x010028fe:    f001f801    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002902:    4954        TI      LDR      r1,[pc,#336] ; [0x1002a54] = 0x2001c
+        0x01002904:    6008        .`      STR      r0,[r1,#0]
+        0x01002906:    bf00        ..      NOP      
+        0x01002908:    2113        .!      MOVS     r1,#0x13
+        0x0100290a:    4853        SH      LDR      r0,[pc,#332] ; [0x1002a58] = 0x20020
+        0x0100290c:    f7fffcc2    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002910:    2800        .(      CMP      r0,#0
+        0x01002912:    d001        ..      BEQ      0x1002918 ; BT_PasskeyEntry + 56
+        0x01002914:    2001        .       MOVS     r0,#1
+        0x01002916:    bd1c        ..      POP      {r2-r4,pc}
+        0x01002918:    21ff        .!      MOVS     r1,#0xff
+        0x0100291a:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x0100291c:    484d        MH      LDR      r0,[pc,#308] ; [0x1002a54] = 0x2001c
+        0x0100291e:    6800        .h      LDR      r0,[r0,#0]
+        0x01002920:    f000fff3    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002924:    2800        .(      CMP      r0,#0
+        0x01002926:    d0ef        ..      BEQ      0x1002908 ; BT_PasskeyEntry + 40
+        0x01002928:    2000        .       MOVS     r0,#0
+        0x0100292a:    e7f4        ..      B        0x1002916 ; BT_PasskeyEntry + 54
+    BT_SetLEParing
+        0x0100292c:    b53e        >.      PUSH     {r1-r5,lr}
+        0x0100292e:    4604        .F      MOV      r4,r0
+        0x01002930:    2133        3!      MOVS     r1,#0x33
+        0x01002932:    4668        hF      MOV      r0,sp
+        0x01002934:    7141        Aq      STRB     r1,[r0,#5]
+        0x01002936:    2101        .!      MOVS     r1,#1
+        0x01002938:    80c1        ..      STRH     r1,[r0,#6]
+        0x0100293a:    9400        ..      STR      r4,[sp,#0]
+        0x0100293c:    9002        ..      STR      r0,[sp,#8]
+        0x0100293e:    2114        .!      MOVS     r1,#0x14
+        0x01002940:    4845        EH      LDR      r0,[pc,#276] ; [0x1002a58] = 0x20020
+        0x01002942:    f7fffc96    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002946:    a801        ..      ADD      r0,sp,#4
+        0x01002948:    f7fffd1c    ....    BL       SendCMD ; 0x1002384
+        0x0100294c:    f000ffda    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002950:    4940        @I      LDR      r1,[pc,#256] ; [0x1002a54] = 0x2001c
+        0x01002952:    6008        .`      STR      r0,[r1,#0]
+        0x01002954:    bf00        ..      NOP      
+        0x01002956:    2114        .!      MOVS     r1,#0x14
+        0x01002958:    483f        ?H      LDR      r0,[pc,#252] ; [0x1002a58] = 0x20020
+        0x0100295a:    f7fffc9b    ....    BL       BT_BIT_GET ; 0x1002294
+        0x0100295e:    2800        .(      CMP      r0,#0
+        0x01002960:    d001        ..      BEQ      0x1002966 ; BT_SetLEParing + 58
+        0x01002962:    2001        .       MOVS     r0,#1
+        0x01002964:    bd3e        >.      POP      {r1-r5,pc}
+        0x01002966:    21ff        .!      MOVS     r1,#0xff
+        0x01002968:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x0100296a:    483a        :H      LDR      r0,[pc,#232] ; [0x1002a54] = 0x2001c
+        0x0100296c:    6800        .h      LDR      r0,[r0,#0]
+        0x0100296e:    f000ffcc    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002972:    2800        .(      CMP      r0,#0
+        0x01002974:    d0ef        ..      BEQ      0x1002956 ; BT_SetLEParing + 42
+        0x01002976:    2000        .       MOVS     r0,#0
+        0x01002978:    e7f4        ..      B        0x1002964 ; BT_SetLEParing + 56
+    BT_SetLEAdvData
+        0x0100297a:    b57c        |.      PUSH     {r2-r6,lr}
+        0x0100297c:    4604        .F      MOV      r4,r0
+        0x0100297e:    460d        .F      MOV      r5,r1
+        0x01002980:    2134        4!      MOVS     r1,#0x34
+        0x01002982:    4668        hF      MOV      r0,sp
+        0x01002984:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002986:    8045        E.      STRH     r5,[r0,#2]
+        0x01002988:    9401        ..      STR      r4,[sp,#4]
+        0x0100298a:    2115        .!      MOVS     r1,#0x15
+        0x0100298c:    4832        2H      LDR      r0,[pc,#200] ; [0x1002a58] = 0x20020
+        0x0100298e:    f7fffc70    ..p.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002992:    4668        hF      MOV      r0,sp
+        0x01002994:    f7fffcf6    ....    BL       SendCMD ; 0x1002384
+        0x01002998:    f000ffb4    ....    BL       SysTick_GetTick ; 0x1003904
+        0x0100299c:    492d        -I      LDR      r1,[pc,#180] ; [0x1002a54] = 0x2001c
+        0x0100299e:    6008        .`      STR      r0,[r1,#0]
+        0x010029a0:    bf00        ..      NOP      
+        0x010029a2:    2115        .!      MOVS     r1,#0x15
+        0x010029a4:    482c        ,H      LDR      r0,[pc,#176] ; [0x1002a58] = 0x20020
+        0x010029a6:    f7fffc75    ..u.    BL       BT_BIT_GET ; 0x1002294
+        0x010029aa:    2800        .(      CMP      r0,#0
+        0x010029ac:    d001        ..      BEQ      0x10029b2 ; BT_SetLEAdvData + 56
+        0x010029ae:    2001        .       MOVS     r0,#1
+        0x010029b0:    bd7c        |.      POP      {r2-r6,pc}
+        0x010029b2:    21ff        .!      MOVS     r1,#0xff
+        0x010029b4:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x010029b6:    4827        'H      LDR      r0,[pc,#156] ; [0x1002a54] = 0x2001c
+        0x010029b8:    6800        .h      LDR      r0,[r0,#0]
+        0x010029ba:    f000ffa6    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x010029be:    2800        .(      CMP      r0,#0
+        0x010029c0:    d0ef        ..      BEQ      0x10029a2 ; BT_SetLEAdvData + 40
+        0x010029c2:    2000        .       MOVS     r0,#0
+        0x010029c4:    e7f4        ..      B        0x10029b0 ; BT_SetLEAdvData + 54
+    BT_SetLEScanData
+        0x010029c6:    b57c        |.      PUSH     {r2-r6,lr}
+        0x010029c8:    4604        .F      MOV      r4,r0
+        0x010029ca:    460d        .F      MOV      r5,r1
+        0x010029cc:    2135        5!      MOVS     r1,#0x35
+        0x010029ce:    4668        hF      MOV      r0,sp
+        0x010029d0:    7041        Ap      STRB     r1,[r0,#1]
+        0x010029d2:    8045        E.      STRH     r5,[r0,#2]
+        0x010029d4:    9401        ..      STR      r4,[sp,#4]
+        0x010029d6:    2116        .!      MOVS     r1,#0x16
+        0x010029d8:    481f        .H      LDR      r0,[pc,#124] ; [0x1002a58] = 0x20020
+        0x010029da:    f7fffc4a    ..J.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x010029de:    4668        hF      MOV      r0,sp
+        0x010029e0:    f7fffcd0    ....    BL       SendCMD ; 0x1002384
+        0x010029e4:    f000ff8e    ....    BL       SysTick_GetTick ; 0x1003904
+        0x010029e8:    491a        .I      LDR      r1,[pc,#104] ; [0x1002a54] = 0x2001c
+        0x010029ea:    6008        .`      STR      r0,[r1,#0]
+        0x010029ec:    bf00        ..      NOP      
+        0x010029ee:    2116        .!      MOVS     r1,#0x16
+        0x010029f0:    4819        .H      LDR      r0,[pc,#100] ; [0x1002a58] = 0x20020
+        0x010029f2:    f7fffc4f    ..O.    BL       BT_BIT_GET ; 0x1002294
+        0x010029f6:    2800        .(      CMP      r0,#0
+        0x010029f8:    d001        ..      BEQ      0x10029fe ; BT_SetLEScanData + 56
+        0x010029fa:    2001        .       MOVS     r0,#1
+        0x010029fc:    bd7c        |.      POP      {r2-r6,pc}
+        0x010029fe:    21ff        .!      MOVS     r1,#0xff
+        0x01002a00:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002a02:    4814        .H      LDR      r0,[pc,#80] ; [0x1002a54] = 0x2001c
+        0x01002a04:    6800        .h      LDR      r0,[r0,#0]
+        0x01002a06:    f000ff80    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002a0a:    2800        .(      CMP      r0,#0
+        0x01002a0c:    d0ef        ..      BEQ      0x10029ee ; BT_SetLEScanData + 40
+        0x01002a0e:    2000        .       MOVS     r0,#0
+        0x01002a10:    e7f4        ..      B        0x10029fc ; BT_SetLEScanData + 54
+    BT_SetLESendConnUpdate
+        0x01002a12:    b57c        |.      PUSH     {r2-r6,lr}
+        0x01002a14:    4605        .F      MOV      r5,r0
+        0x01002a16:    460c        .F      MOV      r4,r1
+        0x01002a18:    2c08        .,      CMP      r4,#8
+        0x01002a1a:    d001        ..      BEQ      0x1002a20 ; BT_SetLESendConnUpdate + 14
+        0x01002a1c:    2000        .       MOVS     r0,#0
+        0x01002a1e:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002a20:    2136        6!      MOVS     r1,#0x36
+        0x01002a22:    4668        hF      MOV      r0,sp
+        0x01002a24:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002a26:    8044        D.      STRH     r4,[r0,#2]
+        0x01002a28:    9501        ..      STR      r5,[sp,#4]
+        0x01002a2a:    2117        .!      MOVS     r1,#0x17
+        0x01002a2c:    480a        .H      LDR      r0,[pc,#40] ; [0x1002a58] = 0x20020
+        0x01002a2e:    f7fffc20    .. .    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002a32:    4668        hF      MOV      r0,sp
+        0x01002a34:    f7fffca6    ....    BL       SendCMD ; 0x1002384
+        0x01002a38:    f000ff64    ..d.    BL       SysTick_GetTick ; 0x1003904
+        0x01002a3c:    4905        .I      LDR      r1,[pc,#20] ; [0x1002a54] = 0x2001c
+        0x01002a3e:    6008        .`      STR      r0,[r1,#0]
+        0x01002a40:    bf00        ..      NOP      
+        0x01002a42:    2117        .!      MOVS     r1,#0x17
+        0x01002a44:    4804        .H      LDR      r0,[pc,#16] ; [0x1002a58] = 0x20020
+        0x01002a46:    f7fffc25    ..%.    BL       BT_BIT_GET ; 0x1002294
+        0x01002a4a:    2800        .(      CMP      r0,#0
+        0x01002a4c:    d008        ..      BEQ      0x1002a60 ; BT_SetLESendConnUpdate + 78
+        0x01002a4e:    2001        .       MOVS     r0,#1
+        0x01002a50:    e7e5        ..      B        0x1002a1e ; BT_SetLESendConnUpdate + 12
+    $d
+        0x01002a52:    0000        ..      DCW    0
+        0x01002a54:    0002001c    ....    DCD    131100
+        0x01002a58:    00020020     ...    DCD    131104
+        0x01002a5c:    00020028    (...    DCD    131112
+    $t
+        0x01002a60:    21ff        .!      MOVS     r1,#0xff
+        0x01002a62:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002a64:    48f8        .H      LDR      r0,[pc,#992] ; [0x1002e48] = 0x2001c
+        0x01002a66:    6800        .h      LDR      r0,[r0,#0]
+        0x01002a68:    f000ff4f    ..O.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002a6c:    2800        .(      CMP      r0,#0
+        0x01002a6e:    d0e8        ..      BEQ      0x1002a42 ; BT_SetLESendConnUpdate + 48
+        0x01002a70:    2000        .       MOVS     r0,#0
+        0x01002a72:    e7d4        ..      B        0x1002a1e ; BT_SetLESendConnUpdate + 12
+    BT_SetLEAdvParm
+        0x01002a74:    b57c        |.      PUSH     {r2-r6,lr}
+        0x01002a76:    4605        .F      MOV      r5,r0
+        0x01002a78:    460c        .F      MOV      r4,r1
+        0x01002a7a:    2c00        .,      CMP      r4,#0
+        0x01002a7c:    d101        ..      BNE      0x1002a82 ; BT_SetLEAdvParm + 14
+        0x01002a7e:    2000        .       MOVS     r0,#0
+        0x01002a80:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002a82:    2137        7!      MOVS     r1,#0x37
+        0x01002a84:    4668        hF      MOV      r0,sp
+        0x01002a86:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002a88:    8044        D.      STRH     r4,[r0,#2]
+        0x01002a8a:    9501        ..      STR      r5,[sp,#4]
+        0x01002a8c:    2118        .!      MOVS     r1,#0x18
+        0x01002a8e:    48ef        .H      LDR      r0,[pc,#956] ; [0x1002e4c] = 0x20020
+        0x01002a90:    f7fffbef    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002a94:    4668        hF      MOV      r0,sp
+        0x01002a96:    f7fffc75    ..u.    BL       SendCMD ; 0x1002384
+        0x01002a9a:    f000ff33    ..3.    BL       SysTick_GetTick ; 0x1003904
+        0x01002a9e:    49ea        .I      LDR      r1,[pc,#936] ; [0x1002e48] = 0x2001c
+        0x01002aa0:    6008        .`      STR      r0,[r1,#0]
+        0x01002aa2:    bf00        ..      NOP      
+        0x01002aa4:    2118        .!      MOVS     r1,#0x18
+        0x01002aa6:    48e9        .H      LDR      r0,[pc,#932] ; [0x1002e4c] = 0x20020
+        0x01002aa8:    f7fffbf4    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002aac:    2800        .(      CMP      r0,#0
+        0x01002aae:    d001        ..      BEQ      0x1002ab4 ; BT_SetLEAdvParm + 64
+        0x01002ab0:    2001        .       MOVS     r0,#1
+        0x01002ab2:    e7e5        ..      B        0x1002a80 ; BT_SetLEAdvParm + 12
+        0x01002ab4:    21ff        .!      MOVS     r1,#0xff
+        0x01002ab6:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002ab8:    48e3        .H      LDR      r0,[pc,#908] ; [0x1002e48] = 0x2001c
+        0x01002aba:    6800        .h      LDR      r0,[r0,#0]
+        0x01002abc:    f000ff25    ..%.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002ac0:    2800        .(      CMP      r0,#0
+        0x01002ac2:    d0ef        ..      BEQ      0x1002aa4 ; BT_SetLEAdvParm + 48
+        0x01002ac4:    2000        .       MOVS     r0,#0
+        0x01002ac6:    e7db        ..      B        0x1002a80 ; BT_SetLEAdvParm + 12
+    BT_RejectJustWork
+        0x01002ac8:    b53e        >.      PUSH     {r1-r5,lr}
+        0x01002aca:    4604        .F      MOV      r4,r0
+        0x01002acc:    9402        ..      STR      r4,[sp,#8]
+        0x01002ace:    2149        I!      MOVS     r1,#0x49
+        0x01002ad0:    4668        hF      MOV      r0,sp
+        0x01002ad2:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002ad4:    2101        .!      MOVS     r1,#1
+        0x01002ad6:    8041        A.      STRH     r1,[r0,#2]
+        0x01002ad8:    a802        ..      ADD      r0,sp,#8
+        0x01002ada:    9001        ..      STR      r0,[sp,#4]
+        0x01002adc:    2119        .!      MOVS     r1,#0x19
+        0x01002ade:    48db        .H      LDR      r0,[pc,#876] ; [0x1002e4c] = 0x20020
+        0x01002ae0:    f7fffbc7    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002ae4:    4668        hF      MOV      r0,sp
+        0x01002ae6:    f7fffc4d    ..M.    BL       SendCMD ; 0x1002384
+        0x01002aea:    f000ff0b    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002aee:    49d6        .I      LDR      r1,[pc,#856] ; [0x1002e48] = 0x2001c
+        0x01002af0:    6008        .`      STR      r0,[r1,#0]
+        0x01002af2:    bf00        ..      NOP      
+        0x01002af4:    2119        .!      MOVS     r1,#0x19
+        0x01002af6:    48d5        .H      LDR      r0,[pc,#852] ; [0x1002e4c] = 0x20020
+        0x01002af8:    f7fffbcc    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002afc:    2800        .(      CMP      r0,#0
+        0x01002afe:    d001        ..      BEQ      0x1002b04 ; BT_RejectJustWork + 60
+        0x01002b00:    2001        .       MOVS     r0,#1
+        0x01002b02:    bd3e        >.      POP      {r1-r5,pc}
+        0x01002b04:    21ff        .!      MOVS     r1,#0xff
+        0x01002b06:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002b08:    48cf        .H      LDR      r0,[pc,#828] ; [0x1002e48] = 0x2001c
+        0x01002b0a:    6800        .h      LDR      r0,[r0,#0]
+        0x01002b0c:    f000fefd    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002b10:    2800        .(      CMP      r0,#0
+        0x01002b12:    d0ef        ..      BEQ      0x1002af4 ; BT_RejectJustWork + 44
+        0x01002b14:    2000        .       MOVS     r0,#0
+        0x01002b16:    e7f4        ..      B        0x1002b02 ; BT_RejectJustWork + 58
+    BT_SetTxPower
+        0x01002b18:    b53e        >.      PUSH     {r1-r5,lr}
+        0x01002b1a:    4604        .F      MOV      r4,r0
+        0x01002b1c:    9402        ..      STR      r4,[sp,#8]
+        0x01002b1e:    2142        B!      MOVS     r1,#0x42
+        0x01002b20:    4668        hF      MOV      r0,sp
+        0x01002b22:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002b24:    2101        .!      MOVS     r1,#1
+        0x01002b26:    8041        A.      STRH     r1,[r0,#2]
+        0x01002b28:    a802        ..      ADD      r0,sp,#8
+        0x01002b2a:    9001        ..      STR      r0,[sp,#4]
+        0x01002b2c:    210e        .!      MOVS     r1,#0xe
+        0x01002b2e:    48c7        .H      LDR      r0,[pc,#796] ; [0x1002e4c] = 0x20020
+        0x01002b30:    f7fffb9f    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002b34:    4668        hF      MOV      r0,sp
+        0x01002b36:    f7fffc25    ..%.    BL       SendCMD ; 0x1002384
+        0x01002b3a:    f000fee3    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002b3e:    49c2        .I      LDR      r1,[pc,#776] ; [0x1002e48] = 0x2001c
+        0x01002b40:    6008        .`      STR      r0,[r1,#0]
+        0x01002b42:    bf00        ..      NOP      
+        0x01002b44:    210e        .!      MOVS     r1,#0xe
+        0x01002b46:    48c1        .H      LDR      r0,[pc,#772] ; [0x1002e4c] = 0x20020
+        0x01002b48:    f7fffba4    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002b4c:    2800        .(      CMP      r0,#0
+        0x01002b4e:    d001        ..      BEQ      0x1002b54 ; BT_SetTxPower + 60
+        0x01002b50:    2001        .       MOVS     r0,#1
+        0x01002b52:    bd3e        >.      POP      {r1-r5,pc}
+        0x01002b54:    21ff        .!      MOVS     r1,#0xff
+        0x01002b56:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002b58:    48bb        .H      LDR      r0,[pc,#748] ; [0x1002e48] = 0x2001c
+        0x01002b5a:    6800        .h      LDR      r0,[r0,#0]
+        0x01002b5c:    f000fed5    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002b60:    2800        .(      CMP      r0,#0
+        0x01002b62:    d0ef        ..      BEQ      0x1002b44 ; BT_SetTxPower + 44
+        0x01002b64:    2000        .       MOVS     r0,#0
+        0x01002b66:    e7f4        ..      B        0x1002b52 ; BT_SetTxPower + 58
+    BT_Set_FixedPasskey
+        0x01002b68:    b51c        ..      PUSH     {r2-r4,lr}
+        0x01002b6a:    4604        .F      MOV      r4,r0
+        0x01002b6c:    2161        a!      MOVS     r1,#0x61
+        0x01002b6e:    4668        hF      MOV      r0,sp
+        0x01002b70:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002b72:    2105        .!      MOVS     r1,#5
+        0x01002b74:    8041        A.      STRH     r1,[r0,#2]
+        0x01002b76:    9401        ..      STR      r4,[sp,#4]
+        0x01002b78:    211a        .!      MOVS     r1,#0x1a
+        0x01002b7a:    48b4        .H      LDR      r0,[pc,#720] ; [0x1002e4c] = 0x20020
+        0x01002b7c:    f7fffb79    ..y.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002b80:    4668        hF      MOV      r0,sp
+        0x01002b82:    f7fffbff    ....    BL       SendCMD ; 0x1002384
+        0x01002b86:    f000febd    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002b8a:    49af        .I      LDR      r1,[pc,#700] ; [0x1002e48] = 0x2001c
+        0x01002b8c:    6008        .`      STR      r0,[r1,#0]
+        0x01002b8e:    bf00        ..      NOP      
+        0x01002b90:    211a        .!      MOVS     r1,#0x1a
+        0x01002b92:    48ae        .H      LDR      r0,[pc,#696] ; [0x1002e4c] = 0x20020
+        0x01002b94:    f7fffb7e    ..~.    BL       BT_BIT_GET ; 0x1002294
+        0x01002b98:    2800        .(      CMP      r0,#0
+        0x01002b9a:    d001        ..      BEQ      0x1002ba0 ; BT_Set_FixedPasskey + 56
+        0x01002b9c:    2001        .       MOVS     r0,#1
+        0x01002b9e:    bd1c        ..      POP      {r2-r4,pc}
+        0x01002ba0:    21ff        .!      MOVS     r1,#0xff
+        0x01002ba2:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002ba4:    48a8        .H      LDR      r0,[pc,#672] ; [0x1002e48] = 0x2001c
+        0x01002ba6:    6800        .h      LDR      r0,[r0,#0]
+        0x01002ba8:    f000feaf    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002bac:    2800        .(      CMP      r0,#0
+        0x01002bae:    d0ef        ..      BEQ      0x1002b90 ; BT_Set_FixedPasskey + 40
+        0x01002bb0:    2000        .       MOVS     r0,#0
+        0x01002bb2:    e7f4        ..      B        0x1002b9e ; BT_Set_FixedPasskey + 54
+    BT_SetCOD
+        0x01002bb4:    b51c        ..      PUSH     {r2-r4,lr}
+        0x01002bb6:    4604        .F      MOV      r4,r0
+        0x01002bb8:    2115        .!      MOVS     r1,#0x15
+        0x01002bba:    4668        hF      MOV      r0,sp
+        0x01002bbc:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002bbe:    2103        .!      MOVS     r1,#3
+        0x01002bc0:    8041        A.      STRH     r1,[r0,#2]
+        0x01002bc2:    9401        ..      STR      r4,[sp,#4]
+        0x01002bc4:    211d        .!      MOVS     r1,#0x1d
+        0x01002bc6:    48a1        .H      LDR      r0,[pc,#644] ; [0x1002e4c] = 0x20020
+        0x01002bc8:    f7fffb53    ..S.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002bcc:    4668        hF      MOV      r0,sp
+        0x01002bce:    f7fffbd9    ....    BL       SendCMD ; 0x1002384
+        0x01002bd2:    f000fe97    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002bd6:    499c        .I      LDR      r1,[pc,#624] ; [0x1002e48] = 0x2001c
+        0x01002bd8:    6008        .`      STR      r0,[r1,#0]
+        0x01002bda:    bf00        ..      NOP      
+        0x01002bdc:    211d        .!      MOVS     r1,#0x1d
+        0x01002bde:    489b        .H      LDR      r0,[pc,#620] ; [0x1002e4c] = 0x20020
+        0x01002be0:    f7fffb58    ..X.    BL       BT_BIT_GET ; 0x1002294
+        0x01002be4:    2800        .(      CMP      r0,#0
+        0x01002be6:    d001        ..      BEQ      0x1002bec ; BT_SetCOD + 56
+        0x01002be8:    2001        .       MOVS     r0,#1
+        0x01002bea:    bd1c        ..      POP      {r2-r4,pc}
+        0x01002bec:    21ff        .!      MOVS     r1,#0xff
+        0x01002bee:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002bf0:    4895        .H      LDR      r0,[pc,#596] ; [0x1002e48] = 0x2001c
+        0x01002bf2:    6800        .h      LDR      r0,[r0,#0]
+        0x01002bf4:    f000fe89    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002bf8:    2800        .(      CMP      r0,#0
+        0x01002bfa:    d0ef        ..      BEQ      0x1002bdc ; BT_SetCOD + 40
+        0x01002bfc:    2000        .       MOVS     r0,#0
+        0x01002bfe:    e7f4        ..      B        0x1002bea ; BT_SetCOD + 54
+    BT_DeleteService
+        0x01002c00:    b51c        ..      PUSH     {r2-r4,lr}
+        0x01002c02:    2176        v!      MOVS     r1,#0x76
+        0x01002c04:    4668        hF      MOV      r0,sp
+        0x01002c06:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002c08:    2100        .!      MOVS     r1,#0
+        0x01002c0a:    8041        A.      STRH     r1,[r0,#2]
+        0x01002c0c:    2000        .       MOVS     r0,#0
+        0x01002c0e:    9001        ..      STR      r0,[sp,#4]
+        0x01002c10:    211f        .!      MOVS     r1,#0x1f
+        0x01002c12:    488e        .H      LDR      r0,[pc,#568] ; [0x1002e4c] = 0x20020
+        0x01002c14:    f7fffb2d    ..-.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002c18:    4668        hF      MOV      r0,sp
+        0x01002c1a:    f7fffbb3    ....    BL       SendCMD ; 0x1002384
+        0x01002c1e:    f000fe71    ..q.    BL       SysTick_GetTick ; 0x1003904
+        0x01002c22:    4989        .I      LDR      r1,[pc,#548] ; [0x1002e48] = 0x2001c
+        0x01002c24:    6008        .`      STR      r0,[r1,#0]
+        0x01002c26:    bf00        ..      NOP      
+        0x01002c28:    211f        .!      MOVS     r1,#0x1f
+        0x01002c2a:    4888        .H      LDR      r0,[pc,#544] ; [0x1002e4c] = 0x20020
+        0x01002c2c:    f7fffb32    ..2.    BL       BT_BIT_GET ; 0x1002294
+        0x01002c30:    2800        .(      CMP      r0,#0
+        0x01002c32:    d001        ..      BEQ      0x1002c38 ; BT_DeleteService + 56
+        0x01002c34:    2001        .       MOVS     r0,#1
+        0x01002c36:    bd1c        ..      POP      {r2-r4,pc}
+        0x01002c38:    21ff        .!      MOVS     r1,#0xff
+        0x01002c3a:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002c3c:    4882        .H      LDR      r0,[pc,#520] ; [0x1002e48] = 0x2001c
+        0x01002c3e:    6800        .h      LDR      r0,[r0,#0]
+        0x01002c40:    f000fe63    ..c.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002c44:    2800        .(      CMP      r0,#0
+        0x01002c46:    d0ef        ..      BEQ      0x1002c28 ; BT_DeleteService + 40
+        0x01002c48:    2000        .       MOVS     r0,#0
+        0x01002c4a:    e7f4        ..      B        0x1002c36 ; BT_DeleteService + 54
+    BT_AddBleService
+        0x01002c4c:    b57c        |.      PUSH     {r2-r6,lr}
+        0x01002c4e:    4604        .F      MOV      r4,r0
+        0x01002c50:    460d        .F      MOV      r5,r1
+        0x01002c52:    2177        w!      MOVS     r1,#0x77
+        0x01002c54:    4668        hF      MOV      r0,sp
+        0x01002c56:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002c58:    8045        E.      STRH     r5,[r0,#2]
+        0x01002c5a:    9401        ..      STR      r4,[sp,#4]
+        0x01002c5c:    2120         !      MOVS     r1,#0x20
+        0x01002c5e:    487b        {H      LDR      r0,[pc,#492] ; [0x1002e4c] = 0x20020
+        0x01002c60:    f7fffb07    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002c64:    4668        hF      MOV      r0,sp
+        0x01002c66:    f7fffb8d    ....    BL       SendCMD ; 0x1002384
+        0x01002c6a:    f000fe4b    ..K.    BL       SysTick_GetTick ; 0x1003904
+        0x01002c6e:    4976        vI      LDR      r1,[pc,#472] ; [0x1002e48] = 0x2001c
+        0x01002c70:    6008        .`      STR      r0,[r1,#0]
+        0x01002c72:    bf00        ..      NOP      
+        0x01002c74:    2120         !      MOVS     r1,#0x20
+        0x01002c76:    4875        uH      LDR      r0,[pc,#468] ; [0x1002e4c] = 0x20020
+        0x01002c78:    f7fffb0c    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002c7c:    2800        .(      CMP      r0,#0
+        0x01002c7e:    d006        ..      BEQ      0x1002c8e ; BT_AddBleService + 66
+        0x01002c80:    4873        sH      LDR      r0,[pc,#460] ; [0x1002e50] = 0x20028
+        0x01002c82:    7800        .x      LDRB     r0,[r0,#0]
+        0x01002c84:    4972        rI      LDR      r1,[pc,#456] ; [0x1002e50] = 0x20028
+        0x01002c86:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01002c88:    0209        ..      LSLS     r1,r1,#8
+        0x01002c8a:    4308        .C      ORRS     r0,r0,r1
+        0x01002c8c:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002c8e:    21ff        .!      MOVS     r1,#0xff
+        0x01002c90:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002c92:    486d        mH      LDR      r0,[pc,#436] ; [0x1002e48] = 0x2001c
+        0x01002c94:    6800        .h      LDR      r0,[r0,#0]
+        0x01002c96:    f000fe38    ..8.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002c9a:    2800        .(      CMP      r0,#0
+        0x01002c9c:    d0ea        ..      BEQ      0x1002c74 ; BT_AddBleService + 40
+        0x01002c9e:    2000        .       MOVS     r0,#0
+        0x01002ca0:    e7f4        ..      B        0x1002c8c ; BT_AddBleService + 64
+    BT_AddBleCharacteristic
+        0x01002ca2:    b57c        |.      PUSH     {r2-r6,lr}
+        0x01002ca4:    4604        .F      MOV      r4,r0
+        0x01002ca6:    460d        .F      MOV      r5,r1
+        0x01002ca8:    2178        x!      MOVS     r1,#0x78
+        0x01002caa:    4668        hF      MOV      r0,sp
+        0x01002cac:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002cae:    8045        E.      STRH     r5,[r0,#2]
+        0x01002cb0:    9401        ..      STR      r4,[sp,#4]
+        0x01002cb2:    2120         !      MOVS     r1,#0x20
+        0x01002cb4:    4865        eH      LDR      r0,[pc,#404] ; [0x1002e4c] = 0x20020
+        0x01002cb6:    f7fffadc    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002cba:    4668        hF      MOV      r0,sp
+        0x01002cbc:    f7fffb62    ..b.    BL       SendCMD ; 0x1002384
+        0x01002cc0:    f000fe20    .. .    BL       SysTick_GetTick ; 0x1003904
+        0x01002cc4:    4960        `I      LDR      r1,[pc,#384] ; [0x1002e48] = 0x2001c
+        0x01002cc6:    6008        .`      STR      r0,[r1,#0]
+        0x01002cc8:    bf00        ..      NOP      
+        0x01002cca:    2120         !      MOVS     r1,#0x20
+        0x01002ccc:    485f        _H      LDR      r0,[pc,#380] ; [0x1002e4c] = 0x20020
+        0x01002cce:    f7fffae1    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002cd2:    2800        .(      CMP      r0,#0
+        0x01002cd4:    d006        ..      BEQ      0x1002ce4 ; BT_AddBleCharacteristic + 66
+        0x01002cd6:    485e        ^H      LDR      r0,[pc,#376] ; [0x1002e50] = 0x20028
+        0x01002cd8:    7800        .x      LDRB     r0,[r0,#0]
+        0x01002cda:    495d        ]I      LDR      r1,[pc,#372] ; [0x1002e50] = 0x20028
+        0x01002cdc:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01002cde:    0209        ..      LSLS     r1,r1,#8
+        0x01002ce0:    4308        .C      ORRS     r0,r0,r1
+        0x01002ce2:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002ce4:    21ff        .!      MOVS     r1,#0xff
+        0x01002ce6:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002ce8:    4857        WH      LDR      r0,[pc,#348] ; [0x1002e48] = 0x2001c
+        0x01002cea:    6800        .h      LDR      r0,[r0,#0]
+        0x01002cec:    f000fe0d    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002cf0:    2800        .(      CMP      r0,#0
+        0x01002cf2:    d0ea        ..      BEQ      0x1002cca ; BT_AddBleCharacteristic + 40
+        0x01002cf4:    2000        .       MOVS     r0,#0
+        0x01002cf6:    e7f4        ..      B        0x1002ce2 ; BT_AddBleCharacteristic + 64
+    BT_DnsReq
+        0x01002cf8:    b530        0.      PUSH     {r4,r5,lr}
+        0x01002cfa:    b093        ..      SUB      sp,sp,#0x4c
+        0x01002cfc:    4605        .F      MOV      r5,r0
+        0x01002cfe:    460c        .F      MOV      r4,r1
+        0x01002d00:    b2e1        ..      UXTB     r1,r4
+        0x01002d02:    ab02        ..      ADD      r3,sp,#8
+        0x01002d04:    aa03        ..      ADD      r2,sp,#0xc
+        0x01002d06:    4628        (F      MOV      r0,r5
+        0x01002d08:    f7fffadb    ....    BL       BNEP_DomainConvert ; 0x10022c2
+        0x01002d0c:    2801        .(      CMP      r0,#1
+        0x01002d0e:    d002        ..      BEQ      0x1002d16 ; BT_DnsReq + 30
+        0x01002d10:    2000        .       MOVS     r0,#0
+        0x01002d12:    b013        ..      ADD      sp,sp,#0x4c
+        0x01002d14:    bd30        0.      POP      {r4,r5,pc}
+        0x01002d16:    2182        .!      MOVS     r1,#0x82
+        0x01002d18:    4668        hF      MOV      r0,sp
+        0x01002d1a:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002d1c:    9802        ..      LDR      r0,[sp,#8]
+        0x01002d1e:    b281        ..      UXTH     r1,r0
+        0x01002d20:    4668        hF      MOV      r0,sp
+        0x01002d22:    8041        A.      STRH     r1,[r0,#2]
+        0x01002d24:    a803        ..      ADD      r0,sp,#0xc
+        0x01002d26:    9001        ..      STR      r0,[sp,#4]
+        0x01002d28:    2121        !!      MOVS     r1,#0x21
+        0x01002d2a:    4848        HH      LDR      r0,[pc,#288] ; [0x1002e4c] = 0x20020
+        0x01002d2c:    f7fffaa1    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002d30:    4668        hF      MOV      r0,sp
+        0x01002d32:    f7fffb27    ..'.    BL       SendCMD ; 0x1002384
+        0x01002d36:    f000fde5    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002d3a:    4943        CI      LDR      r1,[pc,#268] ; [0x1002e48] = 0x2001c
+        0x01002d3c:    6008        .`      STR      r0,[r1,#0]
+        0x01002d3e:    bf00        ..      NOP      
+        0x01002d40:    2121        !!      MOVS     r1,#0x21
+        0x01002d42:    4842        BH      LDR      r0,[pc,#264] ; [0x1002e4c] = 0x20020
+        0x01002d44:    f7fffaa6    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002d48:    2800        .(      CMP      r0,#0
+        0x01002d4a:    d001        ..      BEQ      0x1002d50 ; BT_DnsReq + 88
+        0x01002d4c:    2001        .       MOVS     r0,#1
+        0x01002d4e:    e7e0        ..      B        0x1002d12 ; BT_DnsReq + 26
+        0x01002d50:    21ff        .!      MOVS     r1,#0xff
+        0x01002d52:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002d54:    483c        <H      LDR      r0,[pc,#240] ; [0x1002e48] = 0x2001c
+        0x01002d56:    6800        .h      LDR      r0,[r0,#0]
+        0x01002d58:    f000fdd7    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002d5c:    2800        .(      CMP      r0,#0
+        0x01002d5e:    d0ef        ..      BEQ      0x1002d40 ; BT_DnsReq + 72
+        0x01002d60:    2000        .       MOVS     r0,#0
+        0x01002d62:    e7d6        ..      B        0x1002d12 ; BT_DnsReq + 26
+    BT_ConnectBnep
+        0x01002d64:    b57c        |.      PUSH     {r2-r6,lr}
+        0x01002d66:    4604        .F      MOV      r4,r0
+        0x01002d68:    460d        .F      MOV      r5,r1
+        0x01002d6a:    217e        ~!      MOVS     r1,#0x7e
+        0x01002d6c:    4668        hF      MOV      r0,sp
+        0x01002d6e:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002d70:    8045        E.      STRH     r5,[r0,#2]
+        0x01002d72:    9401        ..      STR      r4,[sp,#4]
+        0x01002d74:    2122        "!      MOVS     r1,#0x22
+        0x01002d76:    4835        5H      LDR      r0,[pc,#212] ; [0x1002e4c] = 0x20020
+        0x01002d78:    f7fffa7b    ..{.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002d7c:    4668        hF      MOV      r0,sp
+        0x01002d7e:    f7fffb01    ....    BL       SendCMD ; 0x1002384
+        0x01002d82:    f000fdbf    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002d86:    4930        0I      LDR      r1,[pc,#192] ; [0x1002e48] = 0x2001c
+        0x01002d88:    6008        .`      STR      r0,[r1,#0]
+        0x01002d8a:    bf00        ..      NOP      
+        0x01002d8c:    2122        "!      MOVS     r1,#0x22
+        0x01002d8e:    482f        /H      LDR      r0,[pc,#188] ; [0x1002e4c] = 0x20020
+        0x01002d90:    f7fffa80    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002d94:    2800        .(      CMP      r0,#0
+        0x01002d96:    d001        ..      BEQ      0x1002d9c ; BT_ConnectBnep + 56
+        0x01002d98:    2001        .       MOVS     r0,#1
+        0x01002d9a:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002d9c:    21ff        .!      MOVS     r1,#0xff
+        0x01002d9e:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002da0:    4829        )H      LDR      r0,[pc,#164] ; [0x1002e48] = 0x2001c
+        0x01002da2:    6800        .h      LDR      r0,[r0,#0]
+        0x01002da4:    f000fdb1    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002da8:    2800        .(      CMP      r0,#0
+        0x01002daa:    d0ef        ..      BEQ      0x1002d8c ; BT_ConnectBnep + 40
+        0x01002dac:    2000        .       MOVS     r0,#0
+        0x01002dae:    e7f4        ..      B        0x1002d9a ; BT_ConnectBnep + 54
+    BT_disconnectBnep
+        0x01002db0:    b510        ..      PUSH     {r4,lr}
+        0x01002db2:    f7fffcaf    ....    BL       BT_BtDisconnect ; 0x1002714
+        0x01002db6:    bd10        ..      POP      {r4,pc}
+    BT_ConnectTcp
+        0x01002db8:    b57c        |.      PUSH     {r2-r6,lr}
+        0x01002dba:    4604        .F      MOV      r4,r0
+        0x01002dbc:    460d        .F      MOV      r5,r1
+        0x01002dbe:    217f        .!      MOVS     r1,#0x7f
+        0x01002dc0:    4668        hF      MOV      r0,sp
+        0x01002dc2:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002dc4:    8045        E.      STRH     r5,[r0,#2]
+        0x01002dc6:    9401        ..      STR      r4,[sp,#4]
+        0x01002dc8:    2123        #!      MOVS     r1,#0x23
+        0x01002dca:    4820         H      LDR      r0,[pc,#128] ; [0x1002e4c] = 0x20020
+        0x01002dcc:    f7fffa51    ..Q.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002dd0:    4668        hF      MOV      r0,sp
+        0x01002dd2:    f7fffad7    ....    BL       SendCMD ; 0x1002384
+        0x01002dd6:    f000fd95    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002dda:    491b        .I      LDR      r1,[pc,#108] ; [0x1002e48] = 0x2001c
+        0x01002ddc:    6008        .`      STR      r0,[r1,#0]
+        0x01002dde:    bf00        ..      NOP      
+        0x01002de0:    2123        #!      MOVS     r1,#0x23
+        0x01002de2:    481a        .H      LDR      r0,[pc,#104] ; [0x1002e4c] = 0x20020
+        0x01002de4:    f7fffa56    ..V.    BL       BT_BIT_GET ; 0x1002294
+        0x01002de8:    2800        .(      CMP      r0,#0
+        0x01002dea:    d001        ..      BEQ      0x1002df0 ; BT_ConnectTcp + 56
+        0x01002dec:    2001        .       MOVS     r0,#1
+        0x01002dee:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002df0:    21ff        .!      MOVS     r1,#0xff
+        0x01002df2:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002df4:    4814        .H      LDR      r0,[pc,#80] ; [0x1002e48] = 0x2001c
+        0x01002df6:    6800        .h      LDR      r0,[r0,#0]
+        0x01002df8:    f000fd87    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002dfc:    2800        .(      CMP      r0,#0
+        0x01002dfe:    d0ef        ..      BEQ      0x1002de0 ; BT_ConnectTcp + 40
+        0x01002e00:    2000        .       MOVS     r0,#0
+        0x01002e02:    e7f4        ..      B        0x1002dee ; BT_ConnectTcp + 54
+    BT_BnepSendTcpData
+        0x01002e04:    b57c        |.      PUSH     {r2-r6,lr}
+        0x01002e06:    4605        .F      MOV      r5,r0
+        0x01002e08:    460c        .F      MOV      r4,r1
+        0x01002e0a:    1e60        `.      SUBS     r0,r4,#1
+        0x01002e0c:    28eb        .(      CMP      r0,#0xeb
+        0x01002e0e:    dd01        ..      BLE      0x1002e14 ; BT_BnepSendTcpData + 16
+        0x01002e10:    2000        .       MOVS     r0,#0
+        0x01002e12:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002e14:    2181        .!      MOVS     r1,#0x81
+        0x01002e16:    4668        hF      MOV      r0,sp
+        0x01002e18:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002e1a:    8044        D.      STRH     r4,[r0,#2]
+        0x01002e1c:    9501        ..      STR      r5,[sp,#4]
+        0x01002e1e:    2124        $!      MOVS     r1,#0x24
+        0x01002e20:    480a        .H      LDR      r0,[pc,#40] ; [0x1002e4c] = 0x20020
+        0x01002e22:    f7fffa26    ..&.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002e26:    4668        hF      MOV      r0,sp
+        0x01002e28:    f7fffaac    ....    BL       SendCMD ; 0x1002384
+        0x01002e2c:    f000fd6a    ..j.    BL       SysTick_GetTick ; 0x1003904
+        0x01002e30:    4905        .I      LDR      r1,[pc,#20] ; [0x1002e48] = 0x2001c
+        0x01002e32:    6008        .`      STR      r0,[r1,#0]
+        0x01002e34:    bf00        ..      NOP      
+        0x01002e36:    2124        $!      MOVS     r1,#0x24
+        0x01002e38:    4804        .H      LDR      r0,[pc,#16] ; [0x1002e4c] = 0x20020
+        0x01002e3a:    f7fffa2b    ..+.    BL       BT_BIT_GET ; 0x1002294
+        0x01002e3e:    2800        .(      CMP      r0,#0
+        0x01002e40:    d008        ..      BEQ      0x1002e54 ; BT_BnepSendTcpData + 80
+        0x01002e42:    2001        .       MOVS     r0,#1
+        0x01002e44:    e7e5        ..      B        0x1002e12 ; BT_BnepSendTcpData + 14
+    $d
+        0x01002e46:    0000        ..      DCW    0
+        0x01002e48:    0002001c    ....    DCD    131100
+        0x01002e4c:    00020020     ...    DCD    131104
+        0x01002e50:    00020028    (...    DCD    131112
+    $t
+        0x01002e54:    21ff        .!      MOVS     r1,#0xff
+        0x01002e56:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002e58:    48f7        .H      LDR      r0,[pc,#988] ; [0x1003238] = 0x2001c
+        0x01002e5a:    6800        .h      LDR      r0,[r0,#0]
+        0x01002e5c:    f000fd55    ..U.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002e60:    2800        .(      CMP      r0,#0
+        0x01002e62:    d0e8        ..      BEQ      0x1002e36 ; BT_BnepSendTcpData + 50
+        0x01002e64:    2000        .       MOVS     r0,#0
+        0x01002e66:    e7d4        ..      B        0x1002e12 ; BT_BnepSendTcpData + 14
+    BT_BnepSendTcpBigData
+        0x01002e68:    b5f0        ..      PUSH     {r4-r7,lr}
+        0x01002e6a:    b0c3        ..      SUB      sp,sp,#0x10c
+        0x01002e6c:    4606        .F      MOV      r6,r0
+        0x01002e6e:    460c        .F      MOV      r4,r1
+        0x01002e70:    1e60        `.      SUBS     r0,r4,#1
+        0x01002e72:    49f2        .I      LDR      r1,[pc,#968] ; [0x100323c] = 0x5ac
+        0x01002e74:    4288        .B      CMP      r0,r1
+        0x01002e76:    dd02        ..      BLE      0x1002e7e ; BT_BnepSendTcpBigData + 22
+        0x01002e78:    2000        .       MOVS     r0,#0
+        0x01002e7a:    b043        C.      ADD      sp,sp,#0x10c
+        0x01002e7c:    bdf0        ..      POP      {r4-r7,pc}
+        0x01002e7e:    2085        .       MOVS     r0,#0x85
+        0x01002e80:    a940        @.      ADD      r1,sp,#0x100
+        0x01002e82:    7148        Hq      STRB     r0,[r1,#5]
+        0x01002e84:    2500        .%      MOVS     r5,#0
+        0x01002e86:    2128        (!      MOVS     r1,#0x28
+        0x01002e88:    48ed        .H      LDR      r0,[pc,#948] ; [0x1003240] = 0x20020
+        0x01002e8a:    f7fff9f2    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002e8e:    2129        )!      MOVS     r1,#0x29
+        0x01002e90:    48eb        .H      LDR      r0,[pc,#940] ; [0x1003240] = 0x20020
+        0x01002e92:    f7fff9ee    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002e96:    e04e        N.      B        0x1002f36 ; BT_BnepSendTcpBigData + 206
+        0x01002e98:    2d00        .-      CMP      r5,#0
+        0x01002e9a:    d121        !.      BNE      0x1002ee0 ; BT_BnepSendTcpBigData + 120
+        0x01002e9c:    1e60        `.      SUBS     r0,r4,#1
+        0x01002e9e:    28fa        .(      CMP      r0,#0xfa
+        0x01002ea0:    dd01        ..      BLE      0x1002ea6 ; BT_BnepSendTcpBigData + 62
+        0x01002ea2:    20fa        .       MOVS     r0,#0xfa
+        0x01002ea4:    e000        ..      B        0x1002ea8 ; BT_BnepSendTcpBigData + 64
+        0x01002ea6:    1e60        `.      SUBS     r0,r4,#1
+        0x01002ea8:    4607        .F      MOV      r7,r0
+        0x01002eaa:    1d78        x.      ADDS     r0,r7,#5
+        0x01002eac:    b281        ..      UXTH     r1,r0
+        0x01002eae:    a840        @.      ADD      r0,sp,#0x100
+        0x01002eb0:    80c1        ..      STRH     r1,[r0,#6]
+        0x01002eb2:    7831        1x      LDRB     r1,[r6,#0]
+        0x01002eb4:    4668        hF      MOV      r0,sp
+        0x01002eb6:    7101        .q      STRB     r1,[r0,#4]
+        0x01002eb8:    1e60        `.      SUBS     r0,r4,#1
+        0x01002eba:    b2c1        ..      UXTB     r1,r0
+        0x01002ebc:    4668        hF      MOV      r0,sp
+        0x01002ebe:    7141        Aq      STRB     r1,[r0,#5]
+        0x01002ec0:    1e60        `.      SUBS     r0,r4,#1
+        0x01002ec2:    0400        ..      LSLS     r0,r0,#16
+        0x01002ec4:    0e01        ..      LSRS     r1,r0,#24
+        0x01002ec6:    4668        hF      MOV      r0,sp
+        0x01002ec8:    7181        .q      STRB     r1,[r0,#6]
+        0x01002eca:    2100        .!      MOVS     r1,#0
+        0x01002ecc:    71c1        .q      STRB     r1,[r0,#7]
+        0x01002ece:    7201        .r      STRB     r1,[r0,#8]
+        0x01002ed0:    463a        :F      MOV      r2,r7
+        0x01002ed2:    1c71        q.      ADDS     r1,r6,#1
+        0x01002ed4:    3009        .0      ADDS     r0,r0,#9
+        0x01002ed6:    f001fd09    ....    BL       __aeabi_memcpy ; 0x10048ec
+        0x01002eda:    a801        ..      ADD      r0,sp,#4
+        0x01002edc:    9042        B.      STR      r0,[sp,#0x108]
+        0x01002ede:    e00d        ..      B        0x1002efc ; BT_BnepSendTcpBigData + 148
+        0x01002ee0:    1e60        `.      SUBS     r0,r4,#1
+        0x01002ee2:    1b40        @.      SUBS     r0,r0,r5
+        0x01002ee4:    28ff        .(      CMP      r0,#0xff
+        0x01002ee6:    dd01        ..      BLE      0x1002eec ; BT_BnepSendTcpBigData + 132
+        0x01002ee8:    20ff        .       MOVS     r0,#0xff
+        0x01002eea:    e001        ..      B        0x1002ef0 ; BT_BnepSendTcpBigData + 136
+        0x01002eec:    1e60        `.      SUBS     r0,r4,#1
+        0x01002eee:    1b40        @.      SUBS     r0,r0,r5
+        0x01002ef0:    4607        .F      MOV      r7,r0
+        0x01002ef2:    a940        @.      ADD      r1,sp,#0x100
+        0x01002ef4:    80cf        ..      STRH     r7,[r1,#6]
+        0x01002ef6:    1c68        h.      ADDS     r0,r5,#1
+        0x01002ef8:    1830        0.      ADDS     r0,r6,r0
+        0x01002efa:    9042        B.      STR      r0,[sp,#0x108]
+        0x01002efc:    2127        '!      MOVS     r1,#0x27
+        0x01002efe:    48d0        .H      LDR      r0,[pc,#832] ; [0x1003240] = 0x20020
+        0x01002f00:    f7fff9b7    ....    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002f04:    a841        A.      ADD      r0,sp,#0x104
+        0x01002f06:    f7fffa3d    ..=.    BL       SendCMD ; 0x1002384
+        0x01002f0a:    f000fcfb    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002f0e:    49ca        .I      LDR      r1,[pc,#808] ; [0x1003238] = 0x2001c
+        0x01002f10:    6008        .`      STR      r0,[r1,#0]
+        0x01002f12:    e009        ..      B        0x1002f28 ; BT_BnepSendTcpBigData + 192
+        0x01002f14:    21ff        .!      MOVS     r1,#0xff
+        0x01002f16:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002f18:    48c7        .H      LDR      r0,[pc,#796] ; [0x1003238] = 0x2001c
+        0x01002f1a:    6800        .h      LDR      r0,[r0,#0]
+        0x01002f1c:    f000fcf5    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002f20:    2800        .(      CMP      r0,#0
+        0x01002f22:    d001        ..      BEQ      0x1002f28 ; BT_BnepSendTcpBigData + 192
+        0x01002f24:    2000        .       MOVS     r0,#0
+        0x01002f26:    e7a8        ..      B        0x1002e7a ; BT_BnepSendTcpBigData + 18
+        0x01002f28:    2127        '!      MOVS     r1,#0x27
+        0x01002f2a:    48c5        .H      LDR      r0,[pc,#788] ; [0x1003240] = 0x20020
+        0x01002f2c:    f7fff9b2    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002f30:    2800        .(      CMP      r0,#0
+        0x01002f32:    d0ef        ..      BEQ      0x1002f14 ; BT_BnepSendTcpBigData + 172
+        0x01002f34:    19ed        ..      ADDS     r5,r5,r7
+        0x01002f36:    1e60        `.      SUBS     r0,r4,#1
+        0x01002f38:    42a8        .B      CMP      r0,r5
+        0x01002f3a:    dcad        ..      BGT      0x1002e98 ; BT_BnepSendTcpBigData + 48
+        0x01002f3c:    f000fce2    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002f40:    49bd        .I      LDR      r1,[pc,#756] ; [0x1003238] = 0x2001c
+        0x01002f42:    6008        .`      STR      r0,[r1,#0]
+        0x01002f44:    e009        ..      B        0x1002f5a ; BT_BnepSendTcpBigData + 242
+        0x01002f46:    21ff        .!      MOVS     r1,#0xff
+        0x01002f48:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002f4a:    48bb        .H      LDR      r0,[pc,#748] ; [0x1003238] = 0x2001c
+        0x01002f4c:    6800        .h      LDR      r0,[r0,#0]
+        0x01002f4e:    f000fcdc    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002f52:    2800        .(      CMP      r0,#0
+        0x01002f54:    d001        ..      BEQ      0x1002f5a ; BT_BnepSendTcpBigData + 242
+        0x01002f56:    2000        .       MOVS     r0,#0
+        0x01002f58:    e78f        ..      B        0x1002e7a ; BT_BnepSendTcpBigData + 18
+        0x01002f5a:    2128        (!      MOVS     r1,#0x28
+        0x01002f5c:    48b8        .H      LDR      r0,[pc,#736] ; [0x1003240] = 0x20020
+        0x01002f5e:    f7fff999    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002f62:    2800        .(      CMP      r0,#0
+        0x01002f64:    d0ef        ..      BEQ      0x1002f46 ; BT_BnepSendTcpBigData + 222
+        0x01002f66:    f000fccd    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002f6a:    49b3        .I      LDR      r1,[pc,#716] ; [0x1003238] = 0x2001c
+        0x01002f6c:    6008        .`      STR      r0,[r1,#0]
+        0x01002f6e:    e009        ..      B        0x1002f84 ; BT_BnepSendTcpBigData + 284
+        0x01002f70:    21ff        .!      MOVS     r1,#0xff
+        0x01002f72:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002f74:    48b0        .H      LDR      r0,[pc,#704] ; [0x1003238] = 0x2001c
+        0x01002f76:    6800        .h      LDR      r0,[r0,#0]
+        0x01002f78:    f000fcc7    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002f7c:    2800        .(      CMP      r0,#0
+        0x01002f7e:    d001        ..      BEQ      0x1002f84 ; BT_BnepSendTcpBigData + 284
+        0x01002f80:    2000        .       MOVS     r0,#0
+        0x01002f82:    e77a        z.      B        0x1002e7a ; BT_BnepSendTcpBigData + 18
+        0x01002f84:    2129        )!      MOVS     r1,#0x29
+        0x01002f86:    48ae        .H      LDR      r0,[pc,#696] ; [0x1003240] = 0x20020
+        0x01002f88:    f7fff984    ....    BL       BT_BIT_GET ; 0x1002294
+        0x01002f8c:    2800        .(      CMP      r0,#0
+        0x01002f8e:    d0ef        ..      BEQ      0x1002f70 ; BT_BnepSendTcpBigData + 264
+        0x01002f90:    2001        .       MOVS     r0,#1
+        0x01002f92:    e772        r.      B        0x1002e7a ; BT_BnepSendTcpBigData + 18
+    BT_BnepSendUdpData
+        0x01002f94:    b57c        |.      PUSH     {r2-r6,lr}
+        0x01002f96:    4605        .F      MOV      r5,r0
+        0x01002f98:    460c        .F      MOV      r4,r1
+        0x01002f9a:    2c08        .,      CMP      r4,#8
+        0x01002f9c:    db01        ..      BLT      0x1002fa2 ; BT_BnepSendUdpData + 14
+        0x01002f9e:    2cff        .,      CMP      r4,#0xff
+        0x01002fa0:    dd01        ..      BLE      0x1002fa6 ; BT_BnepSendUdpData + 18
+        0x01002fa2:    2000        .       MOVS     r0,#0
+        0x01002fa4:    bd7c        |.      POP      {r2-r6,pc}
+        0x01002fa6:    2184        .!      MOVS     r1,#0x84
+        0x01002fa8:    4668        hF      MOV      r0,sp
+        0x01002faa:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002fac:    8044        D.      STRH     r4,[r0,#2]
+        0x01002fae:    9501        ..      STR      r5,[sp,#4]
+        0x01002fb0:    2126        &!      MOVS     r1,#0x26
+        0x01002fb2:    48a3        .H      LDR      r0,[pc,#652] ; [0x1003240] = 0x20020
+        0x01002fb4:    f7fff95d    ..].    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01002fb8:    4668        hF      MOV      r0,sp
+        0x01002fba:    f7fff9e3    ....    BL       SendCMD ; 0x1002384
+        0x01002fbe:    f000fca1    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01002fc2:    499d        .I      LDR      r1,[pc,#628] ; [0x1003238] = 0x2001c
+        0x01002fc4:    6008        .`      STR      r0,[r1,#0]
+        0x01002fc6:    bf00        ..      NOP      
+        0x01002fc8:    2126        &!      MOVS     r1,#0x26
+        0x01002fca:    489d        .H      LDR      r0,[pc,#628] ; [0x1003240] = 0x20020
+        0x01002fcc:    f7fff962    ..b.    BL       BT_BIT_GET ; 0x1002294
+        0x01002fd0:    2800        .(      CMP      r0,#0
+        0x01002fd2:    d001        ..      BEQ      0x1002fd8 ; BT_BnepSendUdpData + 68
+        0x01002fd4:    2001        .       MOVS     r0,#1
+        0x01002fd6:    e7e5        ..      B        0x1002fa4 ; BT_BnepSendUdpData + 16
+        0x01002fd8:    21ff        .!      MOVS     r1,#0xff
+        0x01002fda:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x01002fdc:    4896        .H      LDR      r0,[pc,#600] ; [0x1003238] = 0x2001c
+        0x01002fde:    6800        .h      LDR      r0,[r0,#0]
+        0x01002fe0:    f000fc93    ....    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01002fe4:    2800        .(      CMP      r0,#0
+        0x01002fe6:    d0ef        ..      BEQ      0x1002fc8 ; BT_BnepSendUdpData + 52
+        0x01002fe8:    2000        .       MOVS     r0,#0
+        0x01002fea:    e7db        ..      B        0x1002fa4 ; BT_BnepSendUdpData + 16
+    BT_DisconnectTcp
+        0x01002fec:    b501        ..      PUSH     {r0,lr}
+        0x01002fee:    b082        ..      SUB      sp,sp,#8
+        0x01002ff0:    2180        .!      MOVS     r1,#0x80
+        0x01002ff2:    4668        hF      MOV      r0,sp
+        0x01002ff4:    7041        Ap      STRB     r1,[r0,#1]
+        0x01002ff6:    2101        .!      MOVS     r1,#1
+        0x01002ff8:    8041        A.      STRH     r1,[r0,#2]
+        0x01002ffa:    a802        ..      ADD      r0,sp,#8
+        0x01002ffc:    9001        ..      STR      r0,[sp,#4]
+        0x01002ffe:    2125        %!      MOVS     r1,#0x25
+        0x01003000:    488f        .H      LDR      r0,[pc,#572] ; [0x1003240] = 0x20020
+        0x01003002:    f7fff936    ..6.    BL       BT_BIT_CLEAR ; 0x1002272
+        0x01003006:    4668        hF      MOV      r0,sp
+        0x01003008:    f7fff9bc    ....    BL       SendCMD ; 0x1002384
+        0x0100300c:    f000fc7a    ..z.    BL       SysTick_GetTick ; 0x1003904
+        0x01003010:    4989        .I      LDR      r1,[pc,#548] ; [0x1003238] = 0x2001c
+        0x01003012:    6008        .`      STR      r0,[r1,#0]
+        0x01003014:    bf00        ..      NOP      
+        0x01003016:    2125        %!      MOVS     r1,#0x25
+        0x01003018:    4889        .H      LDR      r0,[pc,#548] ; [0x1003240] = 0x20020
+        0x0100301a:    f7fff93b    ..;.    BL       BT_BIT_GET ; 0x1002294
+        0x0100301e:    2800        .(      CMP      r0,#0
+        0x01003020:    d001        ..      BEQ      0x1003026 ; BT_DisconnectTcp + 58
+        0x01003022:    2001        .       MOVS     r0,#1
+        0x01003024:    bd0e        ..      POP      {r1-r3,pc}
+        0x01003026:    21ff        .!      MOVS     r1,#0xff
+        0x01003028:    31f5        .1      ADDS     r1,r1,#0xf5
+        0x0100302a:    4883        .H      LDR      r0,[pc,#524] ; [0x1003238] = 0x2001c
+        0x0100302c:    6800        .h      LDR      r0,[r0,#0]
+        0x0100302e:    f000fc6c    ..l.    BL       SysTick_IsTimeOut ; 0x100390a
+        0x01003032:    2800        .(      CMP      r0,#0
+        0x01003034:    d0ef        ..      BEQ      0x1003016 ; BT_DisconnectTcp + 42
+        0x01003036:    2000        .       MOVS     r0,#0
+        0x01003038:    e7f4        ..      B        0x1003024 ; BT_DisconnectTcp + 56
+    BT_ParseBTData
+        0x0100303a:    b510        ..      PUSH     {r4,lr}
+        0x0100303c:    2400        .$      MOVS     r4,#0
+        0x0100303e:    f001f848    ..H.    BL       IPC_ReadIPC_Opcode ; 0x10040d2
+        0x01003042:    4604        .F      MOV      r4,r0
+        0x01003044:    2c07        .,      CMP      r4,#7
+        0x01003046:    d001        ..      BEQ      0x100304c ; BT_ParseBTData + 18
+        0x01003048:    2c08        .,      CMP      r4,#8
+        0x0100304a:    d107        ..      BNE      0x100305c ; BT_ParseBTData + 34
+        0x0100304c:    497d        }I      LDR      r1,[pc,#500] ; [0x1003244] = 0x2002f
+        0x0100304e:    7809        .x      LDRB     r1,[r1,#0]
+        0x01003050:    00c9        ..      LSLS     r1,r1,#3
+        0x01003052:    4a7d        }J      LDR      r2,[pc,#500] ; [0x1003248] = 0x2162c
+        0x01003054:    1888        ..      ADDS     r0,r1,r2
+        0x01003056:    f000fefc    ....    BL       IPC_ReadBtData_DMA ; 0x1003e52
+        0x0100305a:    e29d        ..      B        0x1003598 ; BT_ParseBTData + 1374
+        0x0100305c:    4879        yH      LDR      r0,[pc,#484] ; [0x1003244] = 0x2002f
+        0x0100305e:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003060:    2800        .(      CMP      r0,#0
+        0x01003062:    d103        ..      BNE      0x100306c ; BT_ParseBTData + 50
+        0x01003064:    2009        .       MOVS     r0,#9
+        0x01003066:    4977        wI      LDR      r1,[pc,#476] ; [0x1003244] = 0x2002f
+        0x01003068:    7008        .p      STRB     r0,[r1,#0]
+        0x0100306a:    e004        ..      B        0x1003076 ; BT_ParseBTData + 60
+        0x0100306c:    4875        uH      LDR      r0,[pc,#468] ; [0x1003244] = 0x2002f
+        0x0100306e:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003070:    1e40        @.      SUBS     r0,r0,#1
+        0x01003072:    4974        tI      LDR      r1,[pc,#464] ; [0x1003244] = 0x2002f
+        0x01003074:    7008        .p      STRB     r0,[r1,#0]
+        0x01003076:    4875        uH      LDR      r0,[pc,#468] ; [0x100324c] = 0x20031
+        0x01003078:    f000fdf4    ....    BL       IPC_ReadBtData ; 0x1003c64
+        0x0100307c:    2c2c        ,,      CMP      r4,#0x2c
+        0x0100307e:    d04d        M.      BEQ      0x100311c ; BT_ParseBTData + 226
+        0x01003080:    dc1a        ..      BGT      0x10030b8 ; BT_ParseBTData + 126
+        0x01003082:    2c0a        .,      CMP      r4,#0xa
+        0x01003084:    d076        v.      BEQ      0x1003174 ; BT_ParseBTData + 314
+        0x01003086:    dc08        ..      BGT      0x100309a ; BT_ParseBTData + 96
+        0x01003088:    0023        #.      MOVS     r3,r4
+        0x0100308a:    f001fc7f    ....    BL       __ARM_common_switch8 ; 0x100498c
+    $d
+        0x0100308e:    230a        .#      DCW    8970
+        0x01003090:    8a312a8a    .*1.    DCD    2318477962
+        0x01003094:    8a8a5338    8S..    DCD    2324321080
+        0x01003098:    8aea        ..      DCW    35562
+    $t
+        0x0100309a:    2c11        .,      CMP      r4,#0x11
+        0x0100309c:    d03c        <.      BEQ      0x1003118 ; BT_ParseBTData + 222
+        0x0100309e:    dc06        ..      BGT      0x10030ae ; BT_ParseBTData + 116
+        0x010030a0:    2c0d        .,      CMP      r4,#0xd
+        0x010030a2:    d037        7.      BEQ      0x1003114 ; BT_ParseBTData + 218
+        0x010030a4:    2c0e        .,      CMP      r4,#0xe
+        0x010030a6:    d034        4.      BEQ      0x1003112 ; BT_ParseBTData + 216
+        0x010030a8:    2c10        .,      CMP      r4,#0x10
+        0x010030aa:    d17a        z.      BNE      0x10031a2 ; BT_ParseBTData + 360
+        0x010030ac:    e033        3.      B        0x1003116 ; BT_ParseBTData + 220
+        0x010030ae:    2c14        .,      CMP      r4,#0x14
+        0x010030b0:    d033        3.      BEQ      0x100311a ; BT_ParseBTData + 224
+        0x010030b2:    2c29        ),      CMP      r4,#0x29
+        0x010030b4:    d1f9        ..      BNE      0x10030aa ; BT_ParseBTData + 112
+        0x010030b6:    e240        @.      B        0x100353a ; BT_ParseBTData + 1280
+        0x010030b8:    4620         F      MOV      r0,r4
+        0x010030ba:    382d        -8      SUBS     r0,r0,#0x2d
+        0x010030bc:    0003        ..      MOVS     r3,r0
+        0x010030be:    f001fc65    ..e.    BL       __ARM_common_switch8 ; 0x100498c
+    $d
+        0x010030c2:    2e0f        ..      DCW    11791
+        0x010030c4:    7031302f    /01p    DCD    1882271791
+        0x010030c8:    35343332    2345    DCD    892613426
+        0x010030cc:    70383736    678p    DCD    1882732342
+        0x010030d0:    0070f0f1    ..p.    DCD    7401713
+    $t
+        0x010030d4:    2000        .       MOVS     r0,#0
+        0x010030d6:    f7fdfc2e    ....    BL       prt_yc3121_bt_post_event ; 0x1000936
+        0x010030da:    2000        .       MOVS     r0,#0
+        0x010030dc:    495c        \I      LDR      r1,[pc,#368] ; [0x1003250] = 0x2002e
+        0x010030de:    7008        .p      STRB     r0,[r1,#0]
+        0x010030e0:    e259        Y.      B        0x1003596 ; BT_ParseBTData + 1372
+        0x010030e2:    2002        .       MOVS     r0,#2
+        0x010030e4:    f7fdfc27    ..'.    BL       prt_yc3121_bt_post_event ; 0x1000936
+        0x010030e8:    2002        .       MOVS     r0,#2
+        0x010030ea:    4959        YI      LDR      r1,[pc,#356] ; [0x1003250] = 0x2002e
+        0x010030ec:    7008        .p      STRB     r0,[r1,#0]
+        0x010030ee:    e252        R.      B        0x1003596 ; BT_ParseBTData + 1372
+        0x010030f0:    2003        .       MOVS     r0,#3
+        0x010030f2:    f7fdfc20    .. .    BL       prt_yc3121_bt_post_event ; 0x1000936
+        0x010030f6:    2003        .       MOVS     r0,#3
+        0x010030f8:    4955        UI      LDR      r1,[pc,#340] ; [0x1003250] = 0x2002e
+        0x010030fa:    7008        .p      STRB     r0,[r1,#0]
+        0x010030fc:    e24b        K.      B        0x1003596 ; BT_ParseBTData + 1372
+        0x010030fe:    2005        .       MOVS     r0,#5
+        0x01003100:    f7fdfc19    ....    BL       prt_yc3121_bt_post_event ; 0x1000936
+        0x01003104:    2000        .       MOVS     r0,#0
+        0x01003106:    f7fdfc13    ....    BL       prt_ble_first_set ; 0x1000930
+        0x0100310a:    2005        .       MOVS     r0,#5
+        0x0100310c:    4950        PI      LDR      r1,[pc,#320] ; [0x1003250] = 0x2002e
+        0x0100310e:    7008        .p      STRB     r0,[r1,#0]
+        0x01003110:    e241        A.      B        0x1003596 ; BT_ParseBTData + 1372
+        0x01003112:    bf00        ..      NOP      
+        0x01003114:    bf00        ..      NOP      
+        0x01003116:    bf00        ..      NOP      
+        0x01003118:    bf00        ..      NOP      
+        0x0100311a:    bf00        ..      NOP      
+        0x0100311c:    bf00        ..      NOP      
+        0x0100311e:    bf00        ..      NOP      
+        0x01003120:    bf00        ..      NOP      
+        0x01003122:    bf00        ..      NOP      
+        0x01003124:    bf00        ..      NOP      
+        0x01003126:    bf00        ..      NOP      
+        0x01003128:    bf00        ..      NOP      
+        0x0100312a:    bf00        ..      NOP      
+        0x0100312c:    bf00        ..      NOP      
+        0x0100312e:    bf00        ..      NOP      
+        0x01003130:    bf00        ..      NOP      
+        0x01003132:    e230        0.      B        0x1003596 ; BT_ParseBTData + 1372
+        0x01003134:    4845        EH      LDR      r0,[pc,#276] ; [0x100324c] = 0x20031
+        0x01003136:    1d00        ..      ADDS     r0,r0,#4
+        0x01003138:    f001fbfc    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x0100313c:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100313e:    2833        3(      CMP      r0,#0x33
+        0x01003140:    d078        x.      BEQ      0x1003234 ; BT_ParseBTData + 506
+        0x01003142:    dc1f        ..      BGT      0x1003184 ; BT_ParseBTData + 330
+        0x01003144:    280d        .(      CMP      r0,#0xd
+        0x01003146:    d076        v.      BEQ      0x1003236 ; BT_ParseBTData + 508
+        0x01003148:    dc0a        ..      BGT      0x1003160 ; BT_ParseBTData + 294
+        0x0100314a:    0003        ..      MOVS     r3,r0
+        0x0100314c:    f001fc1e    ....    BL       __ARM_common_switch8 ; 0x100498c
+    $d
+        0x01003150:    5a4e420d    .BNZ    DCD    1515078157
+        0x01003154:    859c8d66    f...    DCD    2241629542
+        0x01003158:    85ad8585    ....    DCD    2242741637
+        0x0100315c:    0085b885    ....    DCD    8763525
+    $t
+        0x01003160:    2815        .(      CMP      r0,#0x15
+        0x01003162:    d077        w.      BEQ      0x1003254 ; BT_ParseBTData + 538
+        0x01003164:    dc07        ..      BGT      0x1003176 ; BT_ParseBTData + 316
+        0x01003166:    2810        .(      CMP      r0,#0x10
+        0x01003168:    d075        u.      BEQ      0x1003256 ; BT_ParseBTData + 540
+        0x0100316a:    2811        .(      CMP      r0,#0x11
+        0x0100316c:    d074        t.      BEQ      0x1003258 ; BT_ParseBTData + 542
+        0x0100316e:    2812        .(      CMP      r0,#0x12
+        0x01003170:    d173        s.      BNE      0x100325a ; BT_ParseBTData + 544
+        0x01003172:    e0e8        ..      B        0x1003346 ; BT_ParseBTData + 780
+        0x01003174:    e1d6        ..      B        0x1003524 ; BT_ParseBTData + 1258
+        0x01003176:    2826        &(      CMP      r0,#0x26
+        0x01003178:    d070        p.      BEQ      0x100325c ; BT_ParseBTData + 546
+        0x0100317a:    2828        ((      CMP      r0,#0x28
+        0x0100317c:    d06f        o.      BEQ      0x100325e ; BT_ParseBTData + 548
+        0x0100317e:    2830        0(      CMP      r0,#0x30
+        0x01003180:    d1f6        ..      BNE      0x1003170 ; BT_ParseBTData + 310
+        0x01003182:    e10c        ..      B        0x100339e ; BT_ParseBTData + 868
+        0x01003184:    287e        ~(      CMP      r0,#0x7e
+        0x01003186:    d06b        k.      BEQ      0x1003260 ; BT_ParseBTData + 550
+        0x01003188:    dc13        ..      BGT      0x10031b2 ; BT_ParseBTData + 376
+        0x0100318a:    2842        B(      CMP      r0,#0x42
+        0x0100318c:    d06a        j.      BEQ      0x1003264 ; BT_ParseBTData + 554
+        0x0100318e:    dc09        ..      BGT      0x10031a4 ; BT_ParseBTData + 362
+        0x01003190:    2834        4(      CMP      r0,#0x34
+        0x01003192:    d068        h.      BEQ      0x1003266 ; BT_ParseBTData + 556
+        0x01003194:    2835        5(      CMP      r0,#0x35
+        0x01003196:    d067        g.      BEQ      0x1003268 ; BT_ParseBTData + 558
+        0x01003198:    2836        6(      CMP      r0,#0x36
+        0x0100319a:    d071        q.      BEQ      0x1003280 ; BT_ParseBTData + 582
+        0x0100319c:    2837        7(      CMP      r0,#0x37
+        0x0100319e:    d1e7        ..      BNE      0x1003170 ; BT_ParseBTData + 310
+        0x010031a0:    e129        ).      B        0x10033f6 ; BT_ParseBTData + 956
+        0x010031a2:    e1f7        ..      B        0x1003594 ; BT_ParseBTData + 1370
+        0x010031a4:    2849        I(      CMP      r0,#0x49
+        0x010031a6:    d06c        l.      BEQ      0x1003282 ; BT_ParseBTData + 584
+        0x010031a8:    2861        a(      CMP      r0,#0x61
+        0x010031aa:    d06b        k.      BEQ      0x1003284 ; BT_ParseBTData + 586
+        0x010031ac:    2876        v(      CMP      r0,#0x76
+        0x010031ae:    d1df        ..      BNE      0x1003170 ; BT_ParseBTData + 310
+        0x010031b0:    e14d        M.      B        0x100344e ; BT_ParseBTData + 1044
+        0x010031b2:    2882        .(      CMP      r0,#0x82
+        0x010031b4:    d067        g.      BEQ      0x1003286 ; BT_ParseBTData + 588
+        0x010031b6:    dc06        ..      BGT      0x10031c6 ; BT_ParseBTData + 396
+        0x010031b8:    287f        .(      CMP      r0,#0x7f
+        0x010031ba:    d070        p.      BEQ      0x100329e ; BT_ParseBTData + 612
+        0x010031bc:    2880        .(      CMP      r0,#0x80
+        0x010031be:    d06f        o.      BEQ      0x10032a0 ; BT_ParseBTData + 614
+        0x010031c0:    2881        .(      CMP      r0,#0x81
+        0x010031c2:    d1d5        ..      BNE      0x1003170 ; BT_ParseBTData + 310
+        0x010031c4:    e17a        z.      B        0x10034bc ; BT_ParseBTData + 1154
+        0x010031c6:    2884        .(      CMP      r0,#0x84
+        0x010031c8:    d06d        m.      BEQ      0x10032a6 ; BT_ParseBTData + 620
+        0x010031ca:    2885        .(      CMP      r0,#0x85
+        0x010031cc:    d06c        l.      BEQ      0x10032a8 ; BT_ParseBTData + 622
+        0x010031ce:    28ff        .(      CMP      r0,#0xff
+        0x010031d0:    d1ce        ..      BNE      0x1003170 ; BT_ParseBTData + 310
+        0x010031d2:    e0d9        ..      B        0x1003388 ; BT_ParseBTData + 846
+        0x010031d4:    481d        .H      LDR      r0,[pc,#116] ; [0x100324c] = 0x20031
+        0x010031d6:    1d00        ..      ADDS     r0,r0,#4
+        0x010031d8:    f001fbac    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x010031dc:    7840        @x      LDRB     r0,[r0,#1]
+        0x010031de:    2800        .(      CMP      r0,#0
+        0x010031e0:    d103        ..      BNE      0x10031ea ; BT_ParseBTData + 432
+        0x010031e2:    2100        .!      MOVS     r1,#0
+        0x010031e4:    4816        .H      LDR      r0,[pc,#88] ; [0x1003240] = 0x20020
+        0x010031e6:    f7fff833    ..3.    BL       BT_BIT_SET ; 0x1002250
+        0x010031ea:    e194        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010031ec:    4817        .H      LDR      r0,[pc,#92] ; [0x100324c] = 0x20031
+        0x010031ee:    1d00        ..      ADDS     r0,r0,#4
+        0x010031f0:    f001fba0    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x010031f4:    7840        @x      LDRB     r0,[r0,#1]
+        0x010031f6:    2800        .(      CMP      r0,#0
+        0x010031f8:    d103        ..      BNE      0x1003202 ; BT_ParseBTData + 456
+        0x010031fa:    2101        .!      MOVS     r1,#1
+        0x010031fc:    4810        .H      LDR      r0,[pc,#64] ; [0x1003240] = 0x20020
+        0x010031fe:    f7fff827    ..'.    BL       BT_BIT_SET ; 0x1002250
+        0x01003202:    e188        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003204:    4811        .H      LDR      r0,[pc,#68] ; [0x100324c] = 0x20031
+        0x01003206:    1d00        ..      ADDS     r0,r0,#4
+        0x01003208:    f001fb94    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x0100320c:    7840        @x      LDRB     r0,[r0,#1]
+        0x0100320e:    2800        .(      CMP      r0,#0
+        0x01003210:    d103        ..      BNE      0x100321a ; BT_ParseBTData + 480
+        0x01003212:    2102        .!      MOVS     r1,#2
+        0x01003214:    480a        .H      LDR      r0,[pc,#40] ; [0x1003240] = 0x20020
+        0x01003216:    f7fff81b    ....    BL       BT_BIT_SET ; 0x1002250
+        0x0100321a:    e17c        |.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x0100321c:    480b        .H      LDR      r0,[pc,#44] ; [0x100324c] = 0x20031
+        0x0100321e:    1d00        ..      ADDS     r0,r0,#4
+        0x01003220:    f001fb88    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003224:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003226:    2800        .(      CMP      r0,#0
+        0x01003228:    d103        ..      BNE      0x1003232 ; BT_ParseBTData + 504
+        0x0100322a:    2103        .!      MOVS     r1,#3
+        0x0100322c:    4804        .H      LDR      r0,[pc,#16] ; [0x1003240] = 0x20020
+        0x0100322e:    f7fff80f    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003232:    e170        p.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003234:    e071        q.      B        0x100331a ; BT_ParseBTData + 736
+        0x01003236:    e04e        N.      B        0x10032d6 ; BT_ParseBTData + 668
+    $d
+        0x01003238:    0002001c    ....    DCD    131100
+        0x0100323c:    000005ac    ....    DCD    1452
+        0x01003240:    00020020     ...    DCD    131104
+        0x01003244:    0002002f    /...    DCD    131119
+        0x01003248:    0002162c    ,...    DCD    136748
+        0x0100324c:    00020031    1...    DCD    131121
+        0x01003250:    0002002e    ....    DCD    131118
+    $t
+        0x01003254:    e0f0        ..      B        0x1003438 ; BT_ParseBTData + 1022
+        0x01003256:    e049        I.      B        0x10032ec ; BT_ParseBTData + 690
+        0x01003258:    e06a        j.      B        0x1003330 ; BT_ParseBTData + 758
+        0x0100325a:    e15b        [.      B        0x1003514 ; BT_ParseBTData + 1242
+        0x0100325c:    e07e        ~.      B        0x100335c ; BT_ParseBTData + 802
+        0x0100325e:    e088        ..      B        0x1003372 ; BT_ParseBTData + 824
+        0x01003260:    e10b        ..      B        0x100347a ; BT_ParseBTData + 1088
+        0x01003262:    e15a        Z.      B        0x100351a ; BT_ParseBTData + 1248
+        0x01003264:    e0d2        ..      B        0x100340c ; BT_ParseBTData + 978
+        0x01003266:    e0a5        ..      B        0x10033b4 ; BT_ParseBTData + 890
+        0x01003268:    e0af        ..      B        0x10033ca ; BT_ParseBTData + 912
+        0x0100326a:    48fe        .H      LDR      r0,[pc,#1016] ; [0x1003664] = 0x20035
+        0x0100326c:    f001fb62    ..b.    BL       __aeabi_uread4 ; 0x1004934
+        0x01003270:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003272:    2800        .(      CMP      r0,#0
+        0x01003274:    d103        ..      BNE      0x100327e ; BT_ParseBTData + 580
+        0x01003276:    2104        .!      MOVS     r1,#4
+        0x01003278:    48fb        .H      LDR      r0,[pc,#1004] ; [0x1003668] = 0x20020
+        0x0100327a:    f7feffe9    ....    BL       BT_BIT_SET ; 0x1002250
+        0x0100327e:    e14a        J.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003280:    e0ae        ..      B        0x10033e0 ; BT_ParseBTData + 934
+        0x01003282:    e0ce        ..      B        0x1003422 ; BT_ParseBTData + 1000
+        0x01003284:    e0ee        ..      B        0x1003464 ; BT_ParseBTData + 1066
+        0x01003286:    e13a        :.      B        0x10034fe ; BT_ParseBTData + 1220
+        0x01003288:    48f6        .H      LDR      r0,[pc,#984] ; [0x1003664] = 0x20035
+        0x0100328a:    f001fb53    ..S.    BL       __aeabi_uread4 ; 0x1004934
+        0x0100328e:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003290:    2800        .(      CMP      r0,#0
+        0x01003292:    d103        ..      BNE      0x100329c ; BT_ParseBTData + 610
+        0x01003294:    2105        .!      MOVS     r1,#5
+        0x01003296:    48f4        .H      LDR      r0,[pc,#976] ; [0x1003668] = 0x20020
+        0x01003298:    f7feffda    ....    BL       BT_BIT_SET ; 0x1002250
+        0x0100329c:    e13b        ;.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x0100329e:    e0f7        ..      B        0x1003490 ; BT_ParseBTData + 1110
+        0x010032a0:    e101        ..      B        0x10034a6 ; BT_ParseBTData + 1132
+        0x010032a2:    e166        f.      B        0x1003572 ; BT_ParseBTData + 1336
+        0x010032a4:    e15a        Z.      B        0x100355c ; BT_ParseBTData + 1314
+        0x010032a6:    e114        ..      B        0x10034d2 ; BT_ParseBTData + 1176
+        0x010032a8:    e11e        ..      B        0x10034e8 ; BT_ParseBTData + 1198
+        0x010032aa:    48ee        .H      LDR      r0,[pc,#952] ; [0x1003664] = 0x20035
+        0x010032ac:    f001fb42    ..B.    BL       __aeabi_uread4 ; 0x1004934
+        0x010032b0:    7840        @x      LDRB     r0,[r0,#1]
+        0x010032b2:    2800        .(      CMP      r0,#0
+        0x010032b4:    d103        ..      BNE      0x10032be ; BT_ParseBTData + 644
+        0x010032b6:    2106        .!      MOVS     r1,#6
+        0x010032b8:    48eb        .H      LDR      r0,[pc,#940] ; [0x1003668] = 0x20020
+        0x010032ba:    f7feffc9    ....    BL       BT_BIT_SET ; 0x1002250
+        0x010032be:    e12a        *.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010032c0:    48e8        .H      LDR      r0,[pc,#928] ; [0x1003664] = 0x20035
+        0x010032c2:    f001fb37    ..7.    BL       __aeabi_uread4 ; 0x1004934
+        0x010032c6:    7840        @x      LDRB     r0,[r0,#1]
+        0x010032c8:    2800        .(      CMP      r0,#0
+        0x010032ca:    d103        ..      BNE      0x10032d4 ; BT_ParseBTData + 666
+        0x010032cc:    2108        .!      MOVS     r1,#8
+        0x010032ce:    48e6        .H      LDR      r0,[pc,#920] ; [0x1003668] = 0x20020
+        0x010032d0:    f7feffbe    ....    BL       BT_BIT_SET ; 0x1002250
+        0x010032d4:    e11f        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010032d6:    48e3        .H      LDR      r0,[pc,#908] ; [0x1003664] = 0x20035
+        0x010032d8:    f001fb2c    ..,.    BL       __aeabi_uread4 ; 0x1004934
+        0x010032dc:    7840        @x      LDRB     r0,[r0,#1]
+        0x010032de:    2800        .(      CMP      r0,#0
+        0x010032e0:    d103        ..      BNE      0x10032ea ; BT_ParseBTData + 688
+        0x010032e2:    2109        .!      MOVS     r1,#9
+        0x010032e4:    48e0        .H      LDR      r0,[pc,#896] ; [0x1003668] = 0x20020
+        0x010032e6:    f7feffb3    ....    BL       BT_BIT_SET ; 0x1002250
+        0x010032ea:    e114        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010032ec:    48dd        .H      LDR      r0,[pc,#884] ; [0x1003664] = 0x20035
+        0x010032ee:    f001fb21    ..!.    BL       __aeabi_uread4 ; 0x1004934
+        0x010032f2:    7840        @x      LDRB     r0,[r0,#1]
+        0x010032f4:    2800        .(      CMP      r0,#0
+        0x010032f6:    d10f        ..      BNE      0x1003318 ; BT_ParseBTData + 734
+        0x010032f8:    210a        .!      MOVS     r1,#0xa
+        0x010032fa:    48db        .H      LDR      r0,[pc,#876] ; [0x1003668] = 0x20020
+        0x010032fc:    f7feffa8    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003300:    48d8        .H      LDR      r0,[pc,#864] ; [0x1003664] = 0x20035
+        0x01003302:    f001fb17    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003306:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003308:    49d8        .I      LDR      r1,[pc,#864] ; [0x100366c] = 0x20028
+        0x0100330a:    7008        .p      STRB     r0,[r1,#0]
+        0x0100330c:    48d5        .H      LDR      r0,[pc,#852] ; [0x1003664] = 0x20035
+        0x0100330e:    f001fb11    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003312:    78c0        .x      LDRB     r0,[r0,#3]
+        0x01003314:    49d5        .I      LDR      r1,[pc,#852] ; [0x100366c] = 0x20028
+        0x01003316:    7048        Hp      STRB     r0,[r1,#1]
+        0x01003318:    e0fd        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x0100331a:    48d2        .H      LDR      r0,[pc,#840] ; [0x1003664] = 0x20035
+        0x0100331c:    f001fb0a    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003320:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003322:    2800        .(      CMP      r0,#0
+        0x01003324:    d103        ..      BNE      0x100332e ; BT_ParseBTData + 756
+        0x01003326:    2114        .!      MOVS     r1,#0x14
+        0x01003328:    48cf        .H      LDR      r0,[pc,#828] ; [0x1003668] = 0x20020
+        0x0100332a:    f7feff91    ....    BL       BT_BIT_SET ; 0x1002250
+        0x0100332e:    e0f2        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003330:    48cc        .H      LDR      r0,[pc,#816] ; [0x1003664] = 0x20035
+        0x01003332:    f001faff    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003336:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003338:    2800        .(      CMP      r0,#0
+        0x0100333a:    d103        ..      BNE      0x1003344 ; BT_ParseBTData + 778
+        0x0100333c:    210b        .!      MOVS     r1,#0xb
+        0x0100333e:    48ca        .H      LDR      r0,[pc,#808] ; [0x1003668] = 0x20020
+        0x01003340:    f7feff86    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003344:    e0e7        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003346:    48c7        .H      LDR      r0,[pc,#796] ; [0x1003664] = 0x20035
+        0x01003348:    f001faf4    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x0100334c:    7840        @x      LDRB     r0,[r0,#1]
+        0x0100334e:    2800        .(      CMP      r0,#0
+        0x01003350:    d103        ..      BNE      0x100335a ; BT_ParseBTData + 800
+        0x01003352:    210c        .!      MOVS     r1,#0xc
+        0x01003354:    48c4        .H      LDR      r0,[pc,#784] ; [0x1003668] = 0x20020
+        0x01003356:    f7feff7b    ..{.    BL       BT_BIT_SET ; 0x1002250
+        0x0100335a:    e0dc        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x0100335c:    48c1        .H      LDR      r0,[pc,#772] ; [0x1003664] = 0x20035
+        0x0100335e:    f001fae9    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003362:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003364:    2800        .(      CMP      r0,#0
+        0x01003366:    d103        ..      BNE      0x1003370 ; BT_ParseBTData + 822
+        0x01003368:    210d        .!      MOVS     r1,#0xd
+        0x0100336a:    48bf        .H      LDR      r0,[pc,#764] ; [0x1003668] = 0x20020
+        0x0100336c:    f7feff70    ..p.    BL       BT_BIT_SET ; 0x1002250
+        0x01003370:    e0d1        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003372:    48bc        .H      LDR      r0,[pc,#752] ; [0x1003664] = 0x20035
+        0x01003374:    f001fade    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003378:    7840        @x      LDRB     r0,[r0,#1]
+        0x0100337a:    2800        .(      CMP      r0,#0
+        0x0100337c:    d103        ..      BNE      0x1003386 ; BT_ParseBTData + 844
+        0x0100337e:    2110        .!      MOVS     r1,#0x10
+        0x01003380:    48b9        .H      LDR      r0,[pc,#740] ; [0x1003668] = 0x20020
+        0x01003382:    f7feff65    ..e.    BL       BT_BIT_SET ; 0x1002250
+        0x01003386:    e0c6        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003388:    48b6        .H      LDR      r0,[pc,#728] ; [0x1003664] = 0x20035
+        0x0100338a:    f001fad3    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x0100338e:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003390:    2800        .(      CMP      r0,#0
+        0x01003392:    d103        ..      BNE      0x100339c ; BT_ParseBTData + 866
+        0x01003394:    212a        *!      MOVS     r1,#0x2a
+        0x01003396:    48b4        .H      LDR      r0,[pc,#720] ; [0x1003668] = 0x20020
+        0x01003398:    f7feff5a    ..Z.    BL       BT_BIT_SET ; 0x1002250
+        0x0100339c:    e0bb        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x0100339e:    48b1        .H      LDR      r0,[pc,#708] ; [0x1003664] = 0x20035
+        0x010033a0:    f001fac8    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x010033a4:    7840        @x      LDRB     r0,[r0,#1]
+        0x010033a6:    2800        .(      CMP      r0,#0
+        0x010033a8:    d103        ..      BNE      0x10033b2 ; BT_ParseBTData + 888
+        0x010033aa:    2113        .!      MOVS     r1,#0x13
+        0x010033ac:    48ae        .H      LDR      r0,[pc,#696] ; [0x1003668] = 0x20020
+        0x010033ae:    f7feff4f    ..O.    BL       BT_BIT_SET ; 0x1002250
+        0x010033b2:    e0b0        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010033b4:    48ab        .H      LDR      r0,[pc,#684] ; [0x1003664] = 0x20035
+        0x010033b6:    f001fabd    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x010033ba:    7840        @x      LDRB     r0,[r0,#1]
+        0x010033bc:    2800        .(      CMP      r0,#0
+        0x010033be:    d103        ..      BNE      0x10033c8 ; BT_ParseBTData + 910
+        0x010033c0:    2115        .!      MOVS     r1,#0x15
+        0x010033c2:    48a9        .H      LDR      r0,[pc,#676] ; [0x1003668] = 0x20020
+        0x010033c4:    f7feff44    ..D.    BL       BT_BIT_SET ; 0x1002250
+        0x010033c8:    e0a5        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010033ca:    48a6        .H      LDR      r0,[pc,#664] ; [0x1003664] = 0x20035
+        0x010033cc:    f001fab2    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x010033d0:    7840        @x      LDRB     r0,[r0,#1]
+        0x010033d2:    2800        .(      CMP      r0,#0
+        0x010033d4:    d103        ..      BNE      0x10033de ; BT_ParseBTData + 932
+        0x010033d6:    2116        .!      MOVS     r1,#0x16
+        0x010033d8:    48a3        .H      LDR      r0,[pc,#652] ; [0x1003668] = 0x20020
+        0x010033da:    f7feff39    ..9.    BL       BT_BIT_SET ; 0x1002250
+        0x010033de:    e09a        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010033e0:    48a0        .H      LDR      r0,[pc,#640] ; [0x1003664] = 0x20035
+        0x010033e2:    f001faa7    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x010033e6:    7840        @x      LDRB     r0,[r0,#1]
+        0x010033e8:    2800        .(      CMP      r0,#0
+        0x010033ea:    d103        ..      BNE      0x10033f4 ; BT_ParseBTData + 954
+        0x010033ec:    2117        .!      MOVS     r1,#0x17
+        0x010033ee:    489e        .H      LDR      r0,[pc,#632] ; [0x1003668] = 0x20020
+        0x010033f0:    f7feff2e    ....    BL       BT_BIT_SET ; 0x1002250
+        0x010033f4:    e08f        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010033f6:    489b        .H      LDR      r0,[pc,#620] ; [0x1003664] = 0x20035
+        0x010033f8:    f001fa9c    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x010033fc:    7840        @x      LDRB     r0,[r0,#1]
+        0x010033fe:    2800        .(      CMP      r0,#0
+        0x01003400:    d103        ..      BNE      0x100340a ; BT_ParseBTData + 976
+        0x01003402:    2118        .!      MOVS     r1,#0x18
+        0x01003404:    4898        .H      LDR      r0,[pc,#608] ; [0x1003668] = 0x20020
+        0x01003406:    f7feff23    ..#.    BL       BT_BIT_SET ; 0x1002250
+        0x0100340a:    e084        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x0100340c:    4895        .H      LDR      r0,[pc,#596] ; [0x1003664] = 0x20035
+        0x0100340e:    f001fa91    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003412:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003414:    2800        .(      CMP      r0,#0
+        0x01003416:    d103        ..      BNE      0x1003420 ; BT_ParseBTData + 998
+        0x01003418:    210e        .!      MOVS     r1,#0xe
+        0x0100341a:    4893        .H      LDR      r0,[pc,#588] ; [0x1003668] = 0x20020
+        0x0100341c:    f7feff18    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003420:    e079        y.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003422:    4890        .H      LDR      r0,[pc,#576] ; [0x1003664] = 0x20035
+        0x01003424:    f001fa86    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003428:    7840        @x      LDRB     r0,[r0,#1]
+        0x0100342a:    2800        .(      CMP      r0,#0
+        0x0100342c:    d103        ..      BNE      0x1003436 ; BT_ParseBTData + 1020
+        0x0100342e:    2119        .!      MOVS     r1,#0x19
+        0x01003430:    488d        .H      LDR      r0,[pc,#564] ; [0x1003668] = 0x20020
+        0x01003432:    f7feff0d    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003436:    e06e        n.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003438:    488a        .H      LDR      r0,[pc,#552] ; [0x1003664] = 0x20035
+        0x0100343a:    f001fa7b    ..{.    BL       __aeabi_uread4 ; 0x1004934
+        0x0100343e:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003440:    2800        .(      CMP      r0,#0
+        0x01003442:    d103        ..      BNE      0x100344c ; BT_ParseBTData + 1042
+        0x01003444:    211d        .!      MOVS     r1,#0x1d
+        0x01003446:    4888        .H      LDR      r0,[pc,#544] ; [0x1003668] = 0x20020
+        0x01003448:    f7feff02    ....    BL       BT_BIT_SET ; 0x1002250
+        0x0100344c:    e063        c.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x0100344e:    4885        .H      LDR      r0,[pc,#532] ; [0x1003664] = 0x20035
+        0x01003450:    f001fa70    ..p.    BL       __aeabi_uread4 ; 0x1004934
+        0x01003454:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003456:    2800        .(      CMP      r0,#0
+        0x01003458:    d103        ..      BNE      0x1003462 ; BT_ParseBTData + 1064
+        0x0100345a:    211f        .!      MOVS     r1,#0x1f
+        0x0100345c:    4882        .H      LDR      r0,[pc,#520] ; [0x1003668] = 0x20020
+        0x0100345e:    f7fefef7    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003462:    e058        X.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003464:    487f        .H      LDR      r0,[pc,#508] ; [0x1003664] = 0x20035
+        0x01003466:    f001fa65    ..e.    BL       __aeabi_uread4 ; 0x1004934
+        0x0100346a:    7840        @x      LDRB     r0,[r0,#1]
+        0x0100346c:    2800        .(      CMP      r0,#0
+        0x0100346e:    d103        ..      BNE      0x1003478 ; BT_ParseBTData + 1086
+        0x01003470:    211a        .!      MOVS     r1,#0x1a
+        0x01003472:    487d        }H      LDR      r0,[pc,#500] ; [0x1003668] = 0x20020
+        0x01003474:    f7fefeec    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003478:    e04d        M.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x0100347a:    487a        zH      LDR      r0,[pc,#488] ; [0x1003664] = 0x20035
+        0x0100347c:    f001fa5a    ..Z.    BL       __aeabi_uread4 ; 0x1004934
+        0x01003480:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003482:    2800        .(      CMP      r0,#0
+        0x01003484:    d103        ..      BNE      0x100348e ; BT_ParseBTData + 1108
+        0x01003486:    2122        "!      MOVS     r1,#0x22
+        0x01003488:    4877        wH      LDR      r0,[pc,#476] ; [0x1003668] = 0x20020
+        0x0100348a:    f7fefee1    ....    BL       BT_BIT_SET ; 0x1002250
+        0x0100348e:    e042        B.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003490:    4874        tH      LDR      r0,[pc,#464] ; [0x1003664] = 0x20035
+        0x01003492:    f001fa4f    ..O.    BL       __aeabi_uread4 ; 0x1004934
+        0x01003496:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003498:    2800        .(      CMP      r0,#0
+        0x0100349a:    d103        ..      BNE      0x10034a4 ; BT_ParseBTData + 1130
+        0x0100349c:    2123        #!      MOVS     r1,#0x23
+        0x0100349e:    4872        rH      LDR      r0,[pc,#456] ; [0x1003668] = 0x20020
+        0x010034a0:    f7fefed6    ....    BL       BT_BIT_SET ; 0x1002250
+        0x010034a4:    e037        7.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010034a6:    486f        oH      LDR      r0,[pc,#444] ; [0x1003664] = 0x20035
+        0x010034a8:    f001fa44    ..D.    BL       __aeabi_uread4 ; 0x1004934
+        0x010034ac:    7840        @x      LDRB     r0,[r0,#1]
+        0x010034ae:    2800        .(      CMP      r0,#0
+        0x010034b0:    d103        ..      BNE      0x10034ba ; BT_ParseBTData + 1152
+        0x010034b2:    2125        %!      MOVS     r1,#0x25
+        0x010034b4:    486c        lH      LDR      r0,[pc,#432] ; [0x1003668] = 0x20020
+        0x010034b6:    f7fefecb    ....    BL       BT_BIT_SET ; 0x1002250
+        0x010034ba:    e02c        ,.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010034bc:    4869        iH      LDR      r0,[pc,#420] ; [0x1003664] = 0x20035
+        0x010034be:    f001fa39    ..9.    BL       __aeabi_uread4 ; 0x1004934
+        0x010034c2:    7840        @x      LDRB     r0,[r0,#1]
+        0x010034c4:    2800        .(      CMP      r0,#0
+        0x010034c6:    d103        ..      BNE      0x10034d0 ; BT_ParseBTData + 1174
+        0x010034c8:    2124        $!      MOVS     r1,#0x24
+        0x010034ca:    4867        gH      LDR      r0,[pc,#412] ; [0x1003668] = 0x20020
+        0x010034cc:    f7fefec0    ....    BL       BT_BIT_SET ; 0x1002250
+        0x010034d0:    e021        !.      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010034d2:    4864        dH      LDR      r0,[pc,#400] ; [0x1003664] = 0x20035
+        0x010034d4:    f001fa2e    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x010034d8:    7840        @x      LDRB     r0,[r0,#1]
+        0x010034da:    2800        .(      CMP      r0,#0
+        0x010034dc:    d103        ..      BNE      0x10034e6 ; BT_ParseBTData + 1196
+        0x010034de:    2126        &!      MOVS     r1,#0x26
+        0x010034e0:    4861        aH      LDR      r0,[pc,#388] ; [0x1003668] = 0x20020
+        0x010034e2:    f7fefeb5    ....    BL       BT_BIT_SET ; 0x1002250
+        0x010034e6:    e016        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010034e8:    485e        ^H      LDR      r0,[pc,#376] ; [0x1003664] = 0x20035
+        0x010034ea:    f001fa23    ..#.    BL       __aeabi_uread4 ; 0x1004934
+        0x010034ee:    7840        @x      LDRB     r0,[r0,#1]
+        0x010034f0:    2800        .(      CMP      r0,#0
+        0x010034f2:    d103        ..      BNE      0x10034fc ; BT_ParseBTData + 1218
+        0x010034f4:    2127        '!      MOVS     r1,#0x27
+        0x010034f6:    485c        \H      LDR      r0,[pc,#368] ; [0x1003668] = 0x20020
+        0x010034f8:    f7fefeaa    ....    BL       BT_BIT_SET ; 0x1002250
+        0x010034fc:    e00b        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x010034fe:    4859        YH      LDR      r0,[pc,#356] ; [0x1003664] = 0x20035
+        0x01003500:    f001fa18    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003504:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003506:    2800        .(      CMP      r0,#0
+        0x01003508:    d103        ..      BNE      0x1003512 ; BT_ParseBTData + 1240
+        0x0100350a:    2121        !!      MOVS     r1,#0x21
+        0x0100350c:    4856        VH      LDR      r0,[pc,#344] ; [0x1003668] = 0x20020
+        0x0100350e:    f7fefe9f    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003512:    e000        ..      B        0x1003516 ; BT_ParseBTData + 1244
+        0x01003514:    bf00        ..      NOP      
+        0x01003516:    bf00        ..      NOP      
+        0x01003518:    e03d        =.      B        0x1003596 ; BT_ParseBTData + 1372
+        0x0100351a:    211c        .!      MOVS     r1,#0x1c
+        0x0100351c:    4852        RH      LDR      r0,[pc,#328] ; [0x1003668] = 0x20020
+        0x0100351e:    f7fefe97    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003522:    e038        8.      B        0x1003596 ; BT_ParseBTData + 1372
+        0x01003524:    2107        .!      MOVS     r1,#7
+        0x01003526:    4850        PH      LDR      r0,[pc,#320] ; [0x1003668] = 0x20020
+        0x01003528:    f7fefe92    ....    BL       BT_BIT_SET ; 0x1002250
+        0x0100352c:    484d        MH      LDR      r0,[pc,#308] ; [0x1003664] = 0x20035
+        0x0100352e:    f001fa01    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003532:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003534:    494d        MI      LDR      r1,[pc,#308] ; [0x100366c] = 0x20028
+        0x01003536:    7008        .p      STRB     r0,[r1,#0]
+        0x01003538:    e02d        -.      B        0x1003596 ; BT_ParseBTData + 1372
+        0x0100353a:    2120         !      MOVS     r1,#0x20
+        0x0100353c:    484a        JH      LDR      r0,[pc,#296] ; [0x1003668] = 0x20020
+        0x0100353e:    f7fefe87    ....    BL       BT_BIT_SET ; 0x1002250
+        0x01003542:    4848        HH      LDR      r0,[pc,#288] ; [0x1003664] = 0x20035
+        0x01003544:    f001f9f6    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003548:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100354a:    4948        HI      LDR      r1,[pc,#288] ; [0x100366c] = 0x20028
+        0x0100354c:    7008        .p      STRB     r0,[r1,#0]
+        0x0100354e:    4845        EH      LDR      r0,[pc,#276] ; [0x1003664] = 0x20035
+        0x01003550:    f001f9f0    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003554:    7840        @x      LDRB     r0,[r0,#1]
+        0x01003556:    4945        EI      LDR      r1,[pc,#276] ; [0x100366c] = 0x20028
+        0x01003558:    7048        Hp      STRB     r0,[r1,#1]
+        0x0100355a:    e01c        ..      B        0x1003596 ; BT_ParseBTData + 1372
+        0x0100355c:    4841        AH      LDR      r0,[pc,#260] ; [0x1003664] = 0x20035
+        0x0100355e:    f001f9e9    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003562:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003564:    2800        .(      CMP      r0,#0
+        0x01003566:    d103        ..      BNE      0x1003570 ; BT_ParseBTData + 1334
+        0x01003568:    2128        (!      MOVS     r1,#0x28
+        0x0100356a:    483f        ?H      LDR      r0,[pc,#252] ; [0x1003668] = 0x20020
+        0x0100356c:    f7fefe70    ..p.    BL       BT_BIT_SET ; 0x1002250
+        0x01003570:    e011        ..      B        0x1003596 ; BT_ParseBTData + 1372
+        0x01003572:    483c        <H      LDR      r0,[pc,#240] ; [0x1003664] = 0x20035
+        0x01003574:    f001f9de    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003578:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100357a:    2803        .(      CMP      r0,#3
+        0x0100357c:    d005        ..      BEQ      0x100358a ; BT_ParseBTData + 1360
+        0x0100357e:    4839        9H      LDR      r0,[pc,#228] ; [0x1003664] = 0x20035
+        0x01003580:    f001f9d8    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003584:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003586:    2804        .(      CMP      r0,#4
+        0x01003588:    d103        ..      BNE      0x1003592 ; BT_ParseBTData + 1368
+        0x0100358a:    2129        )!      MOVS     r1,#0x29
+        0x0100358c:    4836        6H      LDR      r0,[pc,#216] ; [0x1003668] = 0x20020
+        0x0100358e:    f7fefe5f    .._.    BL       BT_BIT_SET ; 0x1002250
+        0x01003592:    e000        ..      B        0x1003596 ; BT_ParseBTData + 1372
+        0x01003594:    bf00        ..      NOP      
+        0x01003596:    bf00        ..      NOP      
+        0x01003598:    2000        .       MOVS     r0,#0
+        0x0100359a:    4935        5I      LDR      r1,[pc,#212] ; [0x1003670] = 0xc4fe0
+        0x0100359c:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x0100359e:    4835        5H      LDR      r0,[pc,#212] ; [0x1003674] = 0xf8520
+        0x010035a0:    7f00        ..      LDRB     r0,[r0,#0x1c]
+        0x010035a2:    2104        .!      MOVS     r1,#4
+        0x010035a4:    4388        .C      BICS     r0,r0,r1
+        0x010035a6:    4933        3I      LDR      r1,[pc,#204] ; [0x1003674] = 0xf8520
+        0x010035a8:    7708        .w      STRB     r0,[r1,#0x1c]
+        0x010035aa:    bd10        ..      POP      {r4,pc}
+    prt_get_bt_data
+        0x010035ac:    b5fe        ..      PUSH     {r1-r7,lr}
+        0x010035ae:    2700        .'      MOVS     r7,#0
+        0x010035b0:    2400        .$      MOVS     r4,#0
+        0x010035b2:    2600        .&      MOVS     r6,#0
+        0x010035b4:    2014        .       MOVS     r0,#0x14
+        0x010035b6:    9001        ..      STR      r0,[sp,#4]
+        0x010035b8:    482f        /H      LDR      r0,[pc,#188] ; [0x1003678] = 0x2002f
+        0x010035ba:    7800        .x      LDRB     r0,[r0,#0]
+        0x010035bc:    492f        /I      LDR      r1,[pc,#188] ; [0x100367c] = 0x20030
+        0x010035be:    7809        .x      LDRB     r1,[r1,#0]
+        0x010035c0:    4288        .B      CMP      r0,r1
+        0x010035c2:    d10f        ..      BNE      0x10035e4 ; prt_get_bt_data + 56
+        0x010035c4:    482e        .H      LDR      r0,[pc,#184] ; [0x1003680] = 0x20005
+        0x010035c6:    7800        .x      LDRB     r0,[r0,#0]
+        0x010035c8:    2801        .(      CMP      r0,#1
+        0x010035ca:    d108        ..      BNE      0x10035de ; prt_get_bt_data + 50
+        0x010035cc:    200b        .       MOVS     r0,#0xb
+        0x010035ce:    f7fcff64    ..d.    BL       NVIC_EnableIRQ ; 0x100049a
+        0x010035d2:    482c        ,H      LDR      r0,[pc,#176] ; [0x1003684] = 0xc8040
+        0x010035d4:    78c0        .x      LDRB     r0,[r0,#3]
+        0x010035d6:    2180        .!      MOVS     r1,#0x80
+        0x010035d8:    4308        .C      ORRS     r0,r0,r1
+        0x010035da:    492a        *I      LDR      r1,[pc,#168] ; [0x1003684] = 0xc8040
+        0x010035dc:    70c8        .p      STRB     r0,[r1,#3]
+        0x010035de:    2000        .       MOVS     r0,#0
+        0x010035e0:    43c0        .C      MVNS     r0,r0
+        0x010035e2:    bdfe        ..      POP      {r1-r7,pc}
+        0x010035e4:    4825        %H      LDR      r0,[pc,#148] ; [0x100367c] = 0x20030
+        0x010035e6:    7800        .x      LDRB     r0,[r0,#0]
+        0x010035e8:    1c40        @.      ADDS     r0,r0,#1
+        0x010035ea:    4924        $I      LDR      r1,[pc,#144] ; [0x100367c] = 0x20030
+        0x010035ec:    7008        .p      STRB     r0,[r1,#0]
+        0x010035ee:    4608        .F      MOV      r0,r1
+        0x010035f0:    7800        .x      LDRB     r0,[r0,#0]
+        0x010035f2:    280a        .(      CMP      r0,#0xa
+        0x010035f4:    db01        ..      BLT      0x10035fa ; prt_get_bt_data + 78
+        0x010035f6:    2000        .       MOVS     r0,#0
+        0x010035f8:    7008        .p      STRB     r0,[r1,#0]
+        0x010035fa:    4820         H      LDR      r0,[pc,#128] ; [0x100367c] = 0x20030
+        0x010035fc:    7800        .x      LDRB     r0,[r0,#0]
+        0x010035fe:    00c0        ..      LSLS     r0,r0,#3
+        0x01003600:    4921        !I      LDR      r1,[pc,#132] ; [0x1003688] = 0x2162c
+        0x01003602:    1840        @.      ADDS     r0,r0,r1
+        0x01003604:    7845        Ex      LDRB     r5,[r0,#1]
+        0x01003606:    1c68        h.      ADDS     r0,r5,#1
+        0x01003608:    2800        .(      CMP      r0,#0
+        0x0100360a:    d07d        }.      BEQ      0x1003708 ; prt_get_bt_data + 348
+        0x0100360c:    2808        .(      CMP      r0,#8
+        0x0100360e:    d002        ..      BEQ      0x1003616 ; prt_get_bt_data + 106
+        0x01003610:    2809        .(      CMP      r0,#9
+        0x01003612:    d17a        z.      BNE      0x100370a ; prt_get_bt_data + 350
+        0x01003614:    e04e        N.      B        0x10036b4 ; prt_get_bt_data + 264
+        0x01003616:    481d        .H      LDR      r0,[pc,#116] ; [0x100368c] = 0x20039
+        0x01003618:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100361a:    1c40        @.      ADDS     r0,r0,#1
+        0x0100361c:    491b        .I      LDR      r1,[pc,#108] ; [0x100368c] = 0x20039
+        0x0100361e:    7008        .p      STRB     r0,[r1,#0]
+        0x01003620:    4608        .F      MOV      r0,r1
+        0x01003622:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003624:    2802        .(      CMP      r0,#2
+        0x01003626:    db0a        ..      BLT      0x100363e ; prt_get_bt_data + 146
+        0x01003628:    2002        .       MOVS     r0,#2
+        0x0100362a:    f7fff947    ..G.    BL       BT_SetSppFlowcontrol ; 0x10028bc
+        0x0100362e:    2801        .(      CMP      r0,#1
+        0x01003630:    d002        ..      BEQ      0x1003638 ; prt_get_bt_data + 140
+        0x01003632:    a017        ..      ADR      r0,{pc}+0x5e ; 0x1003690
+        0x01003634:    f7fcff72    ..r.    BL       MyPrintf ; 0x100051c
+        0x01003638:    2000        .       MOVS     r0,#0
+        0x0100363a:    4914        .I      LDR      r1,[pc,#80] ; [0x100368c] = 0x20039
+        0x0100363c:    7008        .p      STRB     r0,[r1,#0]
+        0x0100363e:    490f        .I      LDR      r1,[pc,#60] ; [0x100367c] = 0x20030
+        0x01003640:    7809        .x      LDRB     r1,[r1,#0]
+        0x01003642:    00c9        ..      LSLS     r1,r1,#3
+        0x01003644:    4a10        .J      LDR      r2,[pc,#64] ; [0x1003688] = 0x2162c
+        0x01003646:    1889        ..      ADDS     r1,r1,r2
+        0x01003648:    1d08        ..      ADDS     r0,r1,#4
+        0x0100364a:    f001f973    ..s.    BL       __aeabi_uread4 ; 0x1004934
+        0x0100364e:    9000        ..      STR      r0,[sp,#0]
+        0x01003650:    480a        .H      LDR      r0,[pc,#40] ; [0x100367c] = 0x20030
+        0x01003652:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003654:    00c0        ..      LSLS     r0,r0,#3
+        0x01003656:    490c        .I      LDR      r1,[pc,#48] ; [0x1003688] = 0x2162c
+        0x01003658:    1841        A.      ADDS     r1,r0,r1
+        0x0100365a:    78c8        .x      LDRB     r0,[r1,#3]
+        0x0100365c:    7889        .x      LDRB     r1,[r1,#2]
+        0x0100365e:    0200        ..      LSLS     r0,r0,#8
+        0x01003660:    4308        .C      ORRS     r0,r0,r1
+        0x01003662:    e021        !.      B        0x10036a8 ; prt_get_bt_data + 252
+    $d
+        0x01003664:    00020035    5...    DCD    131125
+        0x01003668:    00020020     ...    DCD    131104
+        0x0100366c:    00020028    (...    DCD    131112
+        0x01003670:    000c4fe0    .O..    DCD    806880
+        0x01003674:    000f8520     ...    DCD    1017120
+        0x01003678:    0002002f    /...    DCD    131119
+        0x0100367c:    00020030    0...    DCD    131120
+        0x01003680:    00020005    ....    DCD    131077
+        0x01003684:    000c8040    @...    DCD    819264
+        0x01003688:    0002162c    ,...    DCD    136748
+        0x0100368c:    00020039    9...    DCD    131129
+        0x01003690:    20746573    set     DCD    544499059
+        0x01003694:    20707073    spp     DCD    544239731
+        0x01003698:    776f6c66    flow    DCD    2003790950
+        0x0100369c:    69616620     fai    DCD    1767990816
+        0x010036a0:    0a64656c    led.    DCD    174351724
+        0x010036a4:    00000000    ....    DCD    0
+    $t
+        0x010036a8:    4602        .F      MOV      r2,r0
+        0x010036aa:    2000        .       MOVS     r0,#0
+        0x010036ac:    9900        ..      LDR      r1,[sp,#0]
+        0x010036ae:    f7fefcf4    ....    BL       UART_SendBuf ; 0x100209a
+        0x010036b2:    e055        U.      B        0x1003760 ; prt_get_bt_data + 436
+        0x010036b4:    492c        ,I      LDR      r1,[pc,#176] ; [0x1003768] = 0x20030
+        0x010036b6:    7809        .x      LDRB     r1,[r1,#0]
+        0x010036b8:    00c9        ..      LSLS     r1,r1,#3
+        0x010036ba:    4a2c        ,J      LDR      r2,[pc,#176] ; [0x100376c] = 0x2162c
+        0x010036bc:    1889        ..      ADDS     r1,r1,r2
+        0x010036be:    1d08        ..      ADDS     r0,r1,#4
+        0x010036c0:    f001f938    ..8.    BL       __aeabi_uread4 ; 0x1004934
+        0x010036c4:    7806        .x      LDRB     r6,[r0,#0]
+        0x010036c6:    4928        (I      LDR      r1,[pc,#160] ; [0x1003768] = 0x20030
+        0x010036c8:    7809        .x      LDRB     r1,[r1,#0]
+        0x010036ca:    00c9        ..      LSLS     r1,r1,#3
+        0x010036cc:    4a27        'J      LDR      r2,[pc,#156] ; [0x100376c] = 0x2162c
+        0x010036ce:    1889        ..      ADDS     r1,r1,r2
+        0x010036d0:    1d08        ..      ADDS     r0,r1,#4
+        0x010036d2:    f001f92f    ../.    BL       __aeabi_uread4 ; 0x1004934
+        0x010036d6:    7844        Dx      LDRB     r4,[r0,#1]
+        0x010036d8:    0224        $.      LSLS     r4,r4,#8
+        0x010036da:    19a0        ..      ADDS     r0,r4,r6
+        0x010036dc:    b284        ..      UXTH     r4,r0
+        0x010036de:    4922        "I      LDR      r1,[pc,#136] ; [0x1003768] = 0x20030
+        0x010036e0:    7809        .x      LDRB     r1,[r1,#0]
+        0x010036e2:    00c9        ..      LSLS     r1,r1,#3
+        0x010036e4:    4a21        !J      LDR      r2,[pc,#132] ; [0x100376c] = 0x2162c
+        0x010036e6:    1889        ..      ADDS     r1,r1,r2
+        0x010036e8:    1d08        ..      ADDS     r0,r1,#4
+        0x010036ea:    f001f923    ..#.    BL       __aeabi_uread4 ; 0x1004934
+        0x010036ee:    9000        ..      STR      r0,[sp,#0]
+        0x010036f0:    481d        .H      LDR      r0,[pc,#116] ; [0x1003768] = 0x20030
+        0x010036f2:    7800        .x      LDRB     r0,[r0,#0]
+        0x010036f4:    00c0        ..      LSLS     r0,r0,#3
+        0x010036f6:    491d        .I      LDR      r1,[pc,#116] ; [0x100376c] = 0x2162c
+        0x010036f8:    1841        A.      ADDS     r1,r0,r1
+        0x010036fa:    78c8        .x      LDRB     r0,[r1,#3]
+        0x010036fc:    7889        .x      LDRB     r1,[r1,#2]
+        0x010036fe:    0200        ..      LSLS     r0,r0,#8
+        0x01003700:    4308        .C      ORRS     r0,r0,r1
+        0x01003702:    4602        .F      MOV      r2,r0
+        0x01003704:    2000        .       MOVS     r0,#0
+        0x01003706:    e001        ..      B        0x100370c ; prt_get_bt_data + 352
+        0x01003708:    e026        &.      B        0x1003758 ; prt_get_bt_data + 428
+        0x0100370a:    e027        '.      B        0x100375c ; prt_get_bt_data + 432
+        0x0100370c:    9900        ..      LDR      r1,[sp,#0]
+        0x0100370e:    f7fefcc4    ....    BL       UART_SendBuf ; 0x100209a
+        0x01003712:    4620         F      MOV      r0,r4
+        0x01003714:    f7fdf902    ....    BL       prt_is_ble_data ; 0x100091c
+        0x01003718:    2801        .(      CMP      r0,#1
+        0x0100371a:    d102        ..      BNE      0x1003722 ; prt_get_bt_data + 374
+        0x0100371c:    f7fdf952    ..R.    BL       prt_bt_ble_flow_proc ; 0x10009c4
+        0x01003720:    e019        ..      B        0x1003756 ; prt_get_bt_data + 426
+        0x01003722:    f7fdf8f3    ....    BL       prt_ble_first_get ; 0x100090c
+        0x01003726:    2800        .(      CMP      r0,#0
+        0x01003728:    d113        ..      BNE      0x1003752 ; prt_get_bt_data + 422
+        0x0100372a:    2c14        .,      CMP      r4,#0x14
+        0x0100372c:    d101        ..      BNE      0x1003732 ; prt_get_bt_data + 390
+        0x0100372e:    2001        .       MOVS     r0,#1
+        0x01003730:    e000        ..      B        0x1003734 ; prt_get_bt_data + 392
+        0x01003732:    2000        .       MOVS     r0,#0
+        0x01003734:    4602        .F      MOV      r2,r0
+        0x01003736:    4621        !F      MOV      r1,r4
+        0x01003738:    a00d        ..      ADR      r0,{pc}+0x38 ; 0x1003770
+        0x0100373a:    f7fcfeef    ....    BL       MyPrintf ; 0x100051c
+        0x0100373e:    2c14        .,      CMP      r4,#0x14
+        0x01003740:    d107        ..      BNE      0x1003752 ; prt_get_bt_data + 422
+        0x01003742:    2001        .       MOVS     r0,#1
+        0x01003744:    f7fdf8f4    ....    BL       prt_ble_first_set ; 0x1000930
+        0x01003748:    200c        .       MOVS     r0,#0xc
+        0x0100374a:    f7fdf93b    ..;.    BL       prt_bt_ble_flow_proc ; 0x10009c4
+        0x0100374e:    f7fdf912    ....    BL       prt_bt_ble_set_mtu ; 0x1000976
+        0x01003752:    2000        .       MOVS     r0,#0
+        0x01003754:    e745        E.      B        0x10035e2 ; prt_get_bt_data + 54
+        0x01003756:    e003        ..      B        0x1003760 ; prt_get_bt_data + 436
+        0x01003758:    2000        .       MOVS     r0,#0
+        0x0100375a:    e742        B.      B        0x10035e2 ; prt_get_bt_data + 54
+        0x0100375c:    2000        .       MOVS     r0,#0
+        0x0100375e:    e740        @.      B        0x10035e2 ; prt_get_bt_data + 54
+        0x01003760:    bf00        ..      NOP      
+        0x01003762:    4638        8F      MOV      r0,r7
+        0x01003764:    e73d        =.      B        0x10035e2 ; prt_get_bt_data + 54
+    $d
+        0x01003766:    0000        ..      DCW    0
+        0x01003768:    00020030    0...    DCD    131120
+        0x0100376c:    0002162c    ,...    DCD    136748
+        0x01003770:    646e6168    hand    DCD    1684955496
+        0x01003774:    3a72656c    ler:    DCD    980575596
+        0x01003778:    252c7825    %x,%    DCD    623671333
+        0x0100377c:    00000a64    d...    DCD    2660
+    $t
+    .text
+    sysTick_delay_ms
+        0x01003780:    b570        p.      PUSH     {r4-r6,lr}
+        0x01003782:    4604        .F      MOV      r4,r0
+        0x01003784:    20ff        .       MOVS     r0,#0xff
+        0x01003786:    305e        ^0      ADDS     r0,r0,#0x5e
+        0x01003788:    4284        .B      CMP      r4,r0
+        0x0100378a:    d904        ..      BLS      0x1003796 ; sysTick_delay_ms + 22
+        0x0100378c:    4a81        .J      LDR      r2,[pc,#516] ; [0x1003994] = 0x100634a
+        0x0100378e:    2112        .!      MOVS     r1,#0x12
+        0x01003790:    a081        ..      ADR      r0,{pc}+0x208 ; 0x1003998
+        0x01003792:    f7fdf839    ..9.    BL       _assert_handler ; 0x1000808
+        0x01003796:    488b        .H      LDR      r0,[pc,#556] ; [0x10039c4] = 0xf8540
+        0x01003798:    6a00        .j      LDR      r0,[r0,#0x20]
+        0x0100379a:    0700        ..      LSLS     r0,r0,#28
+        0x0100379c:    0f00        ..      LSRS     r0,r0,#28
+        0x0100379e:    1c81        ..      ADDS     r1,r0,#2
+        0x010037a0:    4889        .H      LDR      r0,[pc,#548] ; [0x10039c8] = 0xb71b000
+        0x010037a2:    f001f88f    ....    BL       __aeabi_idiv ; 0x10048c4
+        0x010037a6:    4606        .F      MOV      r6,r0
+        0x010037a8:    217d        }!      MOVS     r1,#0x7d
+        0x010037aa:    00c9        ..      LSLS     r1,r1,#3
+        0x010037ac:    f001f88a    ....    BL       __aeabi_idiv ; 0x10048c4
+        0x010037b0:    4360        `C      MULS     r0,r4,r0
+        0x010037b2:    4605        .F      MOV      r5,r0
+        0x010037b4:    1e6d        m.      SUBS     r5,r5,#1
+        0x010037b6:    4885        .H      LDR      r0,[pc,#532] ; [0x10039cc] = 0xe000e000
+        0x010037b8:    6145        Ea      STR      r5,[r0,#0x14]
+        0x010037ba:    2000        .       MOVS     r0,#0
+        0x010037bc:    4983        .I      LDR      r1,[pc,#524] ; [0x10039cc] = 0xe000e000
+        0x010037be:    6188        .a      STR      r0,[r1,#0x18]
+        0x010037c0:    4608        .F      MOV      r0,r1
+        0x010037c2:    6900        .i      LDR      r0,[r0,#0x10]
+        0x010037c4:    2102        .!      MOVS     r1,#2
+        0x010037c6:    4388        .C      BICS     r0,r0,r1
+        0x010037c8:    4980        .I      LDR      r1,[pc,#512] ; [0x10039cc] = 0xe000e000
+        0x010037ca:    6108        .a      STR      r0,[r1,#0x10]
+        0x010037cc:    4608        .F      MOV      r0,r1
+        0x010037ce:    6900        .i      LDR      r0,[r0,#0x10]
+        0x010037d0:    2105        .!      MOVS     r1,#5
+        0x010037d2:    4308        .C      ORRS     r0,r0,r1
+        0x010037d4:    497d        }I      LDR      r1,[pc,#500] ; [0x10039cc] = 0xe000e000
+        0x010037d6:    6108        .a      STR      r0,[r1,#0x10]
+        0x010037d8:    bf00        ..      NOP      
+        0x010037da:    487c        |H      LDR      r0,[pc,#496] ; [0x10039cc] = 0xe000e000
+        0x010037dc:    6900        .i      LDR      r0,[r0,#0x10]
+        0x010037de:    0c00        ..      LSRS     r0,r0,#16
+        0x010037e0:    2800        .(      CMP      r0,#0
+        0x010037e2:    d101        ..      BNE      0x10037e8 ; sysTick_delay_ms + 104
+        0x010037e4:    2001        .       MOVS     r0,#1
+        0x010037e6:    e000        ..      B        0x10037ea ; sysTick_delay_ms + 106
+        0x010037e8:    2000        .       MOVS     r0,#0
+        0x010037ea:    07c0        ..      LSLS     r0,r0,#31
+        0x010037ec:    0fc0        ..      LSRS     r0,r0,#31
+        0x010037ee:    2800        .(      CMP      r0,#0
+        0x010037f0:    d1f3        ..      BNE      0x10037da ; sysTick_delay_ms + 90
+        0x010037f2:    4876        vH      LDR      r0,[pc,#472] ; [0x10039cc] = 0xe000e000
+        0x010037f4:    6900        .i      LDR      r0,[r0,#0x10]
+        0x010037f6:    4975        uI      LDR      r1,[pc,#468] ; [0x10039cc] = 0xe000e000
+        0x010037f8:    6108        .a      STR      r0,[r1,#0x10]
+        0x010037fa:    bd70        p.      POP      {r4-r6,pc}
+    SysTick_Delay_Ms
+        0x010037fc:    b570        p.      PUSH     {r4-r6,lr}
+        0x010037fe:    4606        .F      MOV      r6,r0
+        0x01003800:    21ff        .!      MOVS     r1,#0xff
+        0x01003802:    312d        -1      ADDS     r1,r1,#0x2d
+        0x01003804:    4630        0F      MOV      r0,r6
+        0x01003806:    f001f847    ..G.    BL       __aeabi_uidiv ; 0x1004898
+        0x0100380a:    4604        .F      MOV      r4,r0
+        0x0100380c:    21ff        .!      MOVS     r1,#0xff
+        0x0100380e:    312d        -1      ADDS     r1,r1,#0x2d
+        0x01003810:    4630        0F      MOV      r0,r6
+        0x01003812:    f001f841    ..A.    BL       __aeabi_uidiv ; 0x1004898
+        0x01003816:    460d        .F      MOV      r5,r1
+        0x01003818:    e004        ..      B        0x1003824 ; SysTick_Delay_Ms + 40
+        0x0100381a:    20ff        .       MOVS     r0,#0xff
+        0x0100381c:    302d        -0      ADDS     r0,r0,#0x2d
+        0x0100381e:    f7ffffaf    ....    BL       sysTick_delay_ms ; 0x1003780
+        0x01003822:    1e64        d.      SUBS     r4,r4,#1
+        0x01003824:    2c00        .,      CMP      r4,#0
+        0x01003826:    d1f8        ..      BNE      0x100381a ; SysTick_Delay_Ms + 30
+        0x01003828:    2d00        .-      CMP      r5,#0
+        0x0100382a:    d002        ..      BEQ      0x1003832 ; SysTick_Delay_Ms + 54
+        0x0100382c:    4628        (F      MOV      r0,r5
+        0x0100382e:    f7ffffa7    ....    BL       sysTick_delay_ms ; 0x1003780
+        0x01003832:    bd70        p.      POP      {r4-r6,pc}
+    SysTick_Delay_Us
+        0x01003834:    b570        p.      PUSH     {r4-r6,lr}
+        0x01003836:    4604        .F      MOV      r4,r0
+        0x01003838:    4865        eH      LDR      r0,[pc,#404] ; [0x10039d0] = 0x55348
+        0x0100383a:    4284        .B      CMP      r4,r0
+        0x0100383c:    d904        ..      BLS      0x1003848 ; SysTick_Delay_Us + 20
+        0x0100383e:    4a65        eJ      LDR      r2,[pc,#404] ; [0x10039d4] = 0x100635b
+        0x01003840:    2130        0!      MOVS     r1,#0x30
+        0x01003842:    a055        U.      ADR      r0,{pc}+0x156 ; 0x1003998
+        0x01003844:    f7fcffe0    ....    BL       _assert_handler ; 0x1000808
+        0x01003848:    485e        ^H      LDR      r0,[pc,#376] ; [0x10039c4] = 0xf8540
+        0x0100384a:    6a00        .j      LDR      r0,[r0,#0x20]
+        0x0100384c:    0700        ..      LSLS     r0,r0,#28
+        0x0100384e:    0f00        ..      LSRS     r0,r0,#28
+        0x01003850:    1c81        ..      ADDS     r1,r0,#2
+        0x01003852:    485d        ]H      LDR      r0,[pc,#372] ; [0x10039c8] = 0xb71b000
+        0x01003854:    f001f836    ..6.    BL       __aeabi_idiv ; 0x10048c4
+        0x01003858:    4606        .F      MOV      r6,r0
+        0x0100385a:    495f        _I      LDR      r1,[pc,#380] ; [0x10039d8] = 0xf4240
+        0x0100385c:    f001f832    ..2.    BL       __aeabi_idiv ; 0x10048c4
+        0x01003860:    4360        `C      MULS     r0,r4,r0
+        0x01003862:    4605        .F      MOV      r5,r0
+        0x01003864:    1e6d        m.      SUBS     r5,r5,#1
+        0x01003866:    4859        YH      LDR      r0,[pc,#356] ; [0x10039cc] = 0xe000e000
+        0x01003868:    6145        Ea      STR      r5,[r0,#0x14]
+        0x0100386a:    2000        .       MOVS     r0,#0
+        0x0100386c:    4957        WI      LDR      r1,[pc,#348] ; [0x10039cc] = 0xe000e000
+        0x0100386e:    6188        .a      STR      r0,[r1,#0x18]
+        0x01003870:    4608        .F      MOV      r0,r1
+        0x01003872:    6900        .i      LDR      r0,[r0,#0x10]
+        0x01003874:    2102        .!      MOVS     r1,#2
+        0x01003876:    4388        .C      BICS     r0,r0,r1
+        0x01003878:    4954        TI      LDR      r1,[pc,#336] ; [0x10039cc] = 0xe000e000
+        0x0100387a:    6108        .a      STR      r0,[r1,#0x10]
+        0x0100387c:    4608        .F      MOV      r0,r1
+        0x0100387e:    6900        .i      LDR      r0,[r0,#0x10]
+        0x01003880:    2105        .!      MOVS     r1,#5
+        0x01003882:    4308        .C      ORRS     r0,r0,r1
+        0x01003884:    4951        QI      LDR      r1,[pc,#324] ; [0x10039cc] = 0xe000e000
+        0x01003886:    6108        .a      STR      r0,[r1,#0x10]
+        0x01003888:    bf00        ..      NOP      
+        0x0100388a:    4850        PH      LDR      r0,[pc,#320] ; [0x10039cc] = 0xe000e000
+        0x0100388c:    6900        .i      LDR      r0,[r0,#0x10]
+        0x0100388e:    0c00        ..      LSRS     r0,r0,#16
+        0x01003890:    2800        .(      CMP      r0,#0
+        0x01003892:    d101        ..      BNE      0x1003898 ; SysTick_Delay_Us + 100
+        0x01003894:    2001        .       MOVS     r0,#1
+        0x01003896:    e000        ..      B        0x100389a ; SysTick_Delay_Us + 102
+        0x01003898:    2000        .       MOVS     r0,#0
+        0x0100389a:    07c0        ..      LSLS     r0,r0,#31
+        0x0100389c:    0fc0        ..      LSRS     r0,r0,#31
+        0x0100389e:    2800        .(      CMP      r0,#0
+        0x010038a0:    d1f3        ..      BNE      0x100388a ; SysTick_Delay_Us + 86
+        0x010038a2:    484a        JH      LDR      r0,[pc,#296] ; [0x10039cc] = 0xe000e000
+        0x010038a4:    6900        .i      LDR      r0,[r0,#0x10]
+        0x010038a6:    4949        II      LDR      r1,[pc,#292] ; [0x10039cc] = 0xe000e000
+        0x010038a8:    6108        .a      STR      r0,[r1,#0x10]
+        0x010038aa:    bd70        p.      POP      {r4-r6,pc}
+    SysTick_Config
+        0x010038ac:    b510        ..      PUSH     {r4,lr}
+        0x010038ae:    4604        .F      MOV      r4,r0
+        0x010038b0:    484a        JH      LDR      r0,[pc,#296] ; [0x10039dc] = 0xffffff
+        0x010038b2:    4284        .B      CMP      r4,r0
+        0x010038b4:    d904        ..      BLS      0x10038c0 ; SysTick_Config + 20
+        0x010038b6:    4a4a        JJ      LDR      r2,[pc,#296] ; [0x10039e0] = 0x100636c
+        0x010038b8:    2142        B!      MOVS     r1,#0x42
+        0x010038ba:    a037        7.      ADR      r0,{pc}+0xde ; 0x1003998
+        0x010038bc:    f7fcffa4    ....    BL       _assert_handler ; 0x1000808
+        0x010038c0:    1e64        d.      SUBS     r4,r4,#1
+        0x010038c2:    4842        BH      LDR      r0,[pc,#264] ; [0x10039cc] = 0xe000e000
+        0x010038c4:    6900        .i      LDR      r0,[r0,#0x10]
+        0x010038c6:    0840        @.      LSRS     r0,r0,#1
+        0x010038c8:    0040        @.      LSLS     r0,r0,#1
+        0x010038ca:    4940        @I      LDR      r1,[pc,#256] ; [0x10039cc] = 0xe000e000
+        0x010038cc:    6108        .a      STR      r0,[r1,#0x10]
+        0x010038ce:    4608        .F      MOV      r0,r1
+        0x010038d0:    6144        Da      STR      r4,[r0,#0x14]
+        0x010038d2:    2000        .       MOVS     r0,#0
+        0x010038d4:    6188        .a      STR      r0,[r1,#0x18]
+        0x010038d6:    4943        CI      LDR      r1,[pc,#268] ; [0x10039e4] = 0x2003c
+        0x010038d8:    6008        .`      STR      r0,[r1,#0]
+        0x010038da:    483c        <H      LDR      r0,[pc,#240] ; [0x10039cc] = 0xe000e000
+        0x010038dc:    6900        .i      LDR      r0,[r0,#0x10]
+        0x010038de:    2107        .!      MOVS     r1,#7
+        0x010038e0:    4308        .C      ORRS     r0,r0,r1
+        0x010038e2:    493a        :I      LDR      r1,[pc,#232] ; [0x10039cc] = 0xe000e000
+        0x010038e4:    6108        .a      STR      r0,[r1,#0x10]
+        0x010038e6:    bd10        ..      POP      {r4,pc}
+    SysTick_disable
+        0x010038e8:    4838        8H      LDR      r0,[pc,#224] ; [0x10039cc] = 0xe000e000
+        0x010038ea:    6900        .i      LDR      r0,[r0,#0x10]
+        0x010038ec:    0840        @.      LSRS     r0,r0,#1
+        0x010038ee:    0040        @.      LSLS     r0,r0,#1
+        0x010038f0:    4936        6I      LDR      r1,[pc,#216] ; [0x10039cc] = 0xe000e000
+        0x010038f2:    6108        .a      STR      r0,[r1,#0x10]
+        0x010038f4:    2000        .       MOVS     r0,#0
+        0x010038f6:    6148        Ha      STR      r0,[r1,#0x14]
+        0x010038f8:    6188        .a      STR      r0,[r1,#0x18]
+        0x010038fa:    493a        :I      LDR      r1,[pc,#232] ; [0x10039e4] = 0x2003c
+        0x010038fc:    6008        .`      STR      r0,[r1,#0]
+        0x010038fe:    4933        3I      LDR      r1,[pc,#204] ; [0x10039cc] = 0xe000e000
+        0x01003900:    6108        .a      STR      r0,[r1,#0x10]
+        0x01003902:    4770        pG      BX       lr
+    SysTick_GetTick
+        0x01003904:    4837        7H      LDR      r0,[pc,#220] ; [0x10039e4] = 0x2003c
+        0x01003906:    6800        .h      LDR      r0,[r0,#0]
+        0x01003908:    4770        pG      BX       lr
+    SysTick_IsTimeOut
+        0x0100390a:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x0100390c:    4604        .F      MOV      r4,r0
+        0x0100390e:    460d        .F      MOV      r5,r1
+        0x01003910:    f7fffff8    ....    BL       SysTick_GetTick ; 0x1003904
+        0x01003914:    1b04        ..      SUBS     r4,r0,r4
+        0x01003916:    2c00        .,      CMP      r4,#0
+        0x01003918:    da01        ..      BGE      0x100391e ; SysTick_IsTimeOut + 20
+        0x0100391a:    4833        3H      LDR      r0,[pc,#204] ; [0x10039e8] = 0x7fffffff
+        0x0100391c:    1824        $.      ADDS     r4,r4,r0
+        0x0100391e:    4829        )H      LDR      r0,[pc,#164] ; [0x10039c4] = 0xf8540
+        0x01003920:    6a00        .j      LDR      r0,[r0,#0x20]
+        0x01003922:    0700        ..      LSLS     r0,r0,#28
+        0x01003924:    0f00        ..      LSRS     r0,r0,#28
+        0x01003926:    1c81        ..      ADDS     r1,r0,#2
+        0x01003928:    4827        'H      LDR      r0,[pc,#156] ; [0x10039c8] = 0xb71b000
+        0x0100392a:    f000ffcb    ....    BL       __aeabi_idiv ; 0x10048c4
+        0x0100392e:    4607        .F      MOV      r7,r0
+        0x01003930:    217d        }!      MOVS     r1,#0x7d
+        0x01003932:    00c9        ..      LSLS     r1,r1,#3
+        0x01003934:    f000ffc6    ....    BL       __aeabi_idiv ; 0x10048c4
+        0x01003938:    4606        .F      MOV      r6,r0
+        0x0100393a:    4924        $I      LDR      r1,[pc,#144] ; [0x10039cc] = 0xe000e000
+        0x0100393c:    6949        Ii      LDR      r1,[r1,#0x14]
+        0x0100393e:    4361        aC      MULS     r1,r4,r1
+        0x01003940:    4608        .F      MOV      r0,r1
+        0x01003942:    4631        1F      MOV      r1,r6
+        0x01003944:    f000ffa8    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x01003948:    42a8        .B      CMP      r0,r5
+        0x0100394a:    d301        ..      BCC      0x1003950 ; SysTick_IsTimeOut + 70
+        0x0100394c:    2001        .       MOVS     r0,#1
+        0x0100394e:    bdf8        ..      POP      {r3-r7,pc}
+        0x01003950:    2000        .       MOVS     r0,#0
+        0x01003952:    e7fc        ..      B        0x100394e ; SysTick_IsTimeOut + 68
+    SysTick_GetRelativeTime
+        0x01003954:    b570        p.      PUSH     {r4-r6,lr}
+        0x01003956:    4604        .F      MOV      r4,r0
+        0x01003958:    f7ffffd4    ....    BL       SysTick_GetTick ; 0x1003904
+        0x0100395c:    1b04        ..      SUBS     r4,r0,r4
+        0x0100395e:    2c00        .,      CMP      r4,#0
+        0x01003960:    da01        ..      BGE      0x1003966 ; SysTick_GetRelativeTime + 18
+        0x01003962:    4821        !H      LDR      r0,[pc,#132] ; [0x10039e8] = 0x7fffffff
+        0x01003964:    1824        $.      ADDS     r4,r4,r0
+        0x01003966:    4817        .H      LDR      r0,[pc,#92] ; [0x10039c4] = 0xf8540
+        0x01003968:    6a00        .j      LDR      r0,[r0,#0x20]
+        0x0100396a:    0700        ..      LSLS     r0,r0,#28
+        0x0100396c:    0f00        ..      LSRS     r0,r0,#28
+        0x0100396e:    1c81        ..      ADDS     r1,r0,#2
+        0x01003970:    4815        .H      LDR      r0,[pc,#84] ; [0x10039c8] = 0xb71b000
+        0x01003972:    f000ffa7    ....    BL       __aeabi_idiv ; 0x10048c4
+        0x01003976:    4606        .F      MOV      r6,r0
+        0x01003978:    217d        }!      MOVS     r1,#0x7d
+        0x0100397a:    00c9        ..      LSLS     r1,r1,#3
+        0x0100397c:    f000ffa2    ....    BL       __aeabi_idiv ; 0x10048c4
+        0x01003980:    4605        .F      MOV      r5,r0
+        0x01003982:    4912        .I      LDR      r1,[pc,#72] ; [0x10039cc] = 0xe000e000
+        0x01003984:    6949        Ii      LDR      r1,[r1,#0x14]
+        0x01003986:    4361        aC      MULS     r1,r4,r1
+        0x01003988:    4608        .F      MOV      r0,r1
+        0x0100398a:    4629        )F      MOV      r1,r5
+        0x0100398c:    f000ff84    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x01003990:    bd70        p.      POP      {r4-r6,pc}
+    $d
+        0x01003992:    0000        ..      DCW    0
+        0x01003994:    0100634a    Jc..    DCD    16802634
+        0x01003998:    2e5c2e2e    ..\.    DCD    777793070
+        0x0100399c:    2e2e5c2e    .\..    DCD    774790190
+        0x010039a0:    5c2e2e5c    \..\    DCD    1546530396
+        0x010039a4:    4c5c2e2e    ..\L    DCD    1281109550
+        0x010039a8:    61726269    ibra    DCD    1634886249
+        0x010039ac:    72656972    rier    DCD    1919248754
+        0x010039b0:    6b64735c    \sdk    DCD    1801745244
+        0x010039b4:    5f63795c    \yc_    DCD    1600354652
+        0x010039b8:    74737973    syst    DCD    1953724787
+        0x010039bc:    2e6b6369    ick.    DCD    778789737
+        0x010039c0:    00000063    c...    DCD    99
+        0x010039c4:    000f8540    @...    DCD    1017152
+        0x010039c8:    0b71b000    ..q.    DCD    192000000
+        0x010039cc:    e000e000    ....    DCD    3758153728
+        0x010039d0:    00055348    HS..    DCD    349000
+        0x010039d4:    0100635b    [c..    DCD    16802651
+        0x010039d8:    000f4240    @B..    DCD    1000000
+        0x010039dc:    00ffffff    ....    DCD    16777215
+        0x010039e0:    0100636c    lc..    DCD    16802668
+        0x010039e4:    0002003c    <...    DCD    131132
+        0x010039e8:    7fffffff    ....    DCD    2147483647
+    $t
+    .text
+    _dma_start
+    __tagsym$$noinline
+        0x010039ec:    b5f0        ..      PUSH     {r4-r7,lr}
+        0x010039ee:    9c05        ..      LDR      r4,[sp,#0x14]
+        0x010039f0:    0205        ..      LSLS     r5,r0,#8
+        0x010039f2:    4ef7        .N      LDR      r6,[pc,#988] ; [0x1003dd0] = 0xf8800
+        0x010039f4:    19ad        ..      ADDS     r5,r5,r6
+        0x010039f6:    6029        )`      STR      r1,[r5,#0]
+        0x010039f8:    0205        ..      LSLS     r5,r0,#8
+        0x010039fa:    19ad        ..      ADDS     r5,r5,r6
+        0x010039fc:    606b        k`      STR      r3,[r5,#4]
+        0x010039fe:    0415        ..      LSLS     r5,r2,#16
+        0x01003a00:    4325        %C      ORRS     r5,r5,r4
+        0x01003a02:    0206        ..      LSLS     r6,r0,#8
+        0x01003a04:    4ff2        .O      LDR      r7,[pc,#968] ; [0x1003dd0] = 0xf8800
+        0x01003a06:    19f6        ..      ADDS     r6,r6,r7
+        0x01003a08:    60b5        .`      STR      r5,[r6,#8]
+        0x01003a0a:    2580        .%      MOVS     r5,#0x80
+        0x01003a0c:    0206        ..      LSLS     r6,r0,#8
+        0x01003a0e:    19f6        ..      ADDS     r6,r6,r7
+        0x01003a10:    73f5        .s      STRB     r5,[r6,#0xf]
+        0x01003a12:    bdf0        ..      POP      {r4-r7,pc}
+    _dma_wait
+    __tagsym$$noinline
+        0x01003a14:    bf00        ..      NOP      
+        0x01003a16:    0201        ..      LSLS     r1,r0,#8
+        0x01003a18:    4aed        .J      LDR      r2,[pc,#948] ; [0x1003dd0] = 0xf8800
+        0x01003a1a:    1889        ..      ADDS     r1,r1,r2
+        0x01003a1c:    6909        .i      LDR      r1,[r1,#0x10]
+        0x01003a1e:    07c9        ..      LSLS     r1,r1,#31
+        0x01003a20:    0fc9        ..      LSRS     r1,r1,#31
+        0x01003a22:    2900        .)      CMP      r1,#0
+        0x01003a24:    d0f7        ..      BEQ      0x1003a16 ; _dma_wait + 2
+        0x01003a26:    4770        pG      BX       lr
+    _dmacopy
+        0x01003a28:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x01003a2a:    4604        .F      MOV      r4,r0
+        0x01003a2c:    460e        .F      MOV      r6,r1
+        0x01003a2e:    4615        .F      MOV      r5,r2
+        0x01003a30:    4623        #F      MOV      r3,r4
+        0x01003a32:    462a        *F      MOV      r2,r5
+        0x01003a34:    4631        1F      MOV      r1,r6
+        0x01003a36:    2006        .       MOVS     r0,#6
+        0x01003a38:    9500        ..      STR      r5,[sp,#0]
+        0x01003a3a:    f7ffffd7    ....    BL       _dma_start ; 0x10039ec
+        0x01003a3e:    2006        .       MOVS     r0,#6
+        0x01003a40:    f7ffffe8    ....    BL       _dma_wait ; 0x1003a14
+        0x01003a44:    bdf8        ..      POP      {r3-r7,pc}
+    IPC_have_data
+        0x01003a46:    48e3        .H      LDR      r0,[pc,#908] ; [0x1003dd4] = 0x20040
+        0x01003a48:    6800        .h      LDR      r0,[r0,#0]
+        0x01003a4a:    7900        .y      LDRB     r0,[r0,#4]
+        0x01003a4c:    49e1        .I      LDR      r1,[pc,#900] ; [0x1003dd4] = 0x20040
+        0x01003a4e:    6809        .h      LDR      r1,[r1,#0]
+        0x01003a50:    7949        Iy      LDRB     r1,[r1,#5]
+        0x01003a52:    0209        ..      LSLS     r1,r1,#8
+        0x01003a54:    22ff        ."      MOVS     r2,#0xff
+        0x01003a56:    0212        ..      LSLS     r2,r2,#8
+        0x01003a58:    4011        .@      ANDS     r1,r1,r2
+        0x01003a5a:    4308        .C      ORRS     r0,r0,r1
+        0x01003a5c:    49dd        .I      LDR      r1,[pc,#884] ; [0x1003dd4] = 0x20040
+        0x01003a5e:    6809        .h      LDR      r1,[r1,#0]
+        0x01003a60:    7989        .y      LDRB     r1,[r1,#6]
+        0x01003a62:    4adc        .J      LDR      r2,[pc,#880] ; [0x1003dd4] = 0x20040
+        0x01003a64:    6812        .h      LDR      r2,[r2,#0]
+        0x01003a66:    79d2        .y      LDRB     r2,[r2,#7]
+        0x01003a68:    0212        ..      LSLS     r2,r2,#8
+        0x01003a6a:    23ff        .#      MOVS     r3,#0xff
+        0x01003a6c:    021b        ..      LSLS     r3,r3,#8
+        0x01003a6e:    401a        .@      ANDS     r2,r2,r3
+        0x01003a70:    4311        .C      ORRS     r1,r1,r2
+        0x01003a72:    4288        .B      CMP      r0,r1
+        0x01003a74:    d001        ..      BEQ      0x1003a7a ; IPC_have_data + 52
+        0x01003a76:    2001        .       MOVS     r0,#1
+        0x01003a78:    4770        pG      BX       lr
+        0x01003a7a:    2000        .       MOVS     r0,#0
+        0x01003a7c:    e7fc        ..      B        0x1003a78 ; IPC_have_data + 50
+    IPC_get_available_size
+        0x01003a7e:    b570        p.      PUSH     {r4-r6,lr}
+        0x01003a80:    48d5        .H      LDR      r0,[pc,#852] ; [0x1003dd8] = 0x20044
+        0x01003a82:    6800        .h      LDR      r0,[r0,#0]
+        0x01003a84:    7900        .y      LDRB     r0,[r0,#4]
+        0x01003a86:    4dd4        .M      LDR      r5,[pc,#848] ; [0x1003dd8] = 0x20044
+        0x01003a88:    682d        -h      LDR      r5,[r5,#0]
+        0x01003a8a:    796d        my      LDRB     r5,[r5,#5]
+        0x01003a8c:    022d        -.      LSLS     r5,r5,#8
+        0x01003a8e:    26ff        .&      MOVS     r6,#0xff
+        0x01003a90:    0236        6.      LSLS     r6,r6,#8
+        0x01003a92:    4035        5@      ANDS     r5,r5,r6
+        0x01003a94:    4328        (C      ORRS     r0,r0,r5
+        0x01003a96:    4601        .F      MOV      r1,r0
+        0x01003a98:    48cf        .H      LDR      r0,[pc,#828] ; [0x1003dd8] = 0x20044
+        0x01003a9a:    6800        .h      LDR      r0,[r0,#0]
+        0x01003a9c:    7980        .y      LDRB     r0,[r0,#6]
+        0x01003a9e:    4dce        .M      LDR      r5,[pc,#824] ; [0x1003dd8] = 0x20044
+        0x01003aa0:    682d        -h      LDR      r5,[r5,#0]
+        0x01003aa2:    79ed        .y      LDRB     r5,[r5,#7]
+        0x01003aa4:    022d        -.      LSLS     r5,r5,#8
+        0x01003aa6:    4035        5@      ANDS     r5,r5,r6
+        0x01003aa8:    4328        (C      ORRS     r0,r0,r5
+        0x01003aaa:    4602        .F      MOV      r2,r0
+        0x01003aac:    48ca        .H      LDR      r0,[pc,#808] ; [0x1003dd8] = 0x20044
+        0x01003aae:    6800        .h      LDR      r0,[r0,#0]
+        0x01003ab0:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003ab2:    4dc9        .M      LDR      r5,[pc,#804] ; [0x1003dd8] = 0x20044
+        0x01003ab4:    682d        -h      LDR      r5,[r5,#0]
+        0x01003ab6:    78ed        .x      LDRB     r5,[r5,#3]
+        0x01003ab8:    022d        -.      LSLS     r5,r5,#8
+        0x01003aba:    4035        5@      ANDS     r5,r5,r6
+        0x01003abc:    4328        (C      ORRS     r0,r0,r5
+        0x01003abe:    4603        .F      MOV      r3,r0
+        0x01003ac0:    48c5        .H      LDR      r0,[pc,#788] ; [0x1003dd8] = 0x20044
+        0x01003ac2:    6800        .h      LDR      r0,[r0,#0]
+        0x01003ac4:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003ac6:    4dc4        .M      LDR      r5,[pc,#784] ; [0x1003dd8] = 0x20044
+        0x01003ac8:    682d        -h      LDR      r5,[r5,#0]
+        0x01003aca:    786d        mx      LDRB     r5,[r5,#1]
+        0x01003acc:    022d        -.      LSLS     r5,r5,#8
+        0x01003ace:    4035        5@      ANDS     r5,r5,r6
+        0x01003ad0:    4328        (C      ORRS     r0,r0,r5
+        0x01003ad2:    4604        .F      MOV      r4,r0
+        0x01003ad4:    4291        .B      CMP      r1,r2
+        0x01003ad6:    dd02        ..      BLE      0x1003ade ; IPC_get_available_size + 96
+        0x01003ad8:    1a88        ..      SUBS     r0,r1,r2
+        0x01003ada:    b280        ..      UXTH     r0,r0
+        0x01003adc:    bd70        p.      POP      {r4-r6,pc}
+        0x01003ade:    1b18        ..      SUBS     r0,r3,r4
+        0x01003ae0:    1c40        @.      ADDS     r0,r0,#1
+        0x01003ae2:    1a8d        ..      SUBS     r5,r1,r2
+        0x01003ae4:    1b40        @.      SUBS     r0,r0,r5
+        0x01003ae6:    b280        ..      UXTH     r0,r0
+        0x01003ae8:    e7f8        ..      B        0x1003adc ; IPC_get_available_size + 94
+    IPC_TxData
+        0x01003aea:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x01003aec:    4604        .F      MOV      r4,r0
+        0x01003aee:    48bb        .H      LDR      r0,[pc,#748] ; [0x1003ddc] = 0xf8520
+        0x01003af0:    7f00        ..      LDRB     r0,[r0,#0x1c]
+        0x01003af2:    2104        .!      MOVS     r1,#4
+        0x01003af4:    4308        .C      ORRS     r0,r0,r1
+        0x01003af6:    49b9        .I      LDR      r1,[pc,#740] ; [0x1003ddc] = 0xf8520
+        0x01003af8:    7708        .w      STRB     r0,[r1,#0x1c]
+        0x01003afa:    2001        .       MOVS     r0,#1
+        0x01003afc:    49b8        .I      LDR      r1,[pc,#736] ; [0x1003de0] = 0xc4fe0
+        0x01003afe:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01003b00:    48b5        .H      LDR      r0,[pc,#724] ; [0x1003dd8] = 0x20044
+        0x01003b02:    6800        .h      LDR      r0,[r0,#0]
+        0x01003b04:    7980        .y      LDRB     r0,[r0,#6]
+        0x01003b06:    49b4        .I      LDR      r1,[pc,#720] ; [0x1003dd8] = 0x20044
+        0x01003b08:    6809        .h      LDR      r1,[r1,#0]
+        0x01003b0a:    79c9        .y      LDRB     r1,[r1,#7]
+        0x01003b0c:    0209        ..      LSLS     r1,r1,#8
+        0x01003b0e:    22ff        ."      MOVS     r2,#0xff
+        0x01003b10:    0212        ..      LSLS     r2,r2,#8
+        0x01003b12:    4011        .@      ANDS     r1,r1,r2
+        0x01003b14:    4308        .C      ORRS     r0,r0,r1
+        0x01003b16:    4605        .F      MOV      r5,r0
+        0x01003b18:    78e0        .x      LDRB     r0,[r4,#3]
+        0x01003b1a:    78a1        .x      LDRB     r1,[r4,#2]
+        0x01003b1c:    0200        ..      LSLS     r0,r0,#8
+        0x01003b1e:    4308        .C      ORRS     r0,r0,r1
+        0x01003b20:    1cc0        ..      ADDS     r0,r0,#3
+        0x01003b22:    b286        ..      UXTH     r6,r0
+        0x01003b24:    4627        'F      MOV      r7,r4
+        0x01003b26:    e029        ).      B        0x1003b7c ; IPC_TxData + 146
+        0x01003b28:    7838        8x      LDRB     r0,[r7,#0]
+        0x01003b2a:    2103        .!      MOVS     r1,#3
+        0x01003b2c:    0489        ..      LSLS     r1,r1,#18
+        0x01003b2e:    1869        i.      ADDS     r1,r5,r1
+        0x01003b30:    7008        .p      STRB     r0,[r1,#0]
+        0x01003b32:    1c7f        ..      ADDS     r7,r7,#1
+        0x01003b34:    48a8        .H      LDR      r0,[pc,#672] ; [0x1003dd8] = 0x20044
+        0x01003b36:    6800        .h      LDR      r0,[r0,#0]
+        0x01003b38:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003b3a:    49a7        .I      LDR      r1,[pc,#668] ; [0x1003dd8] = 0x20044
+        0x01003b3c:    6809        .h      LDR      r1,[r1,#0]
+        0x01003b3e:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003b40:    0209        ..      LSLS     r1,r1,#8
+        0x01003b42:    22ff        ."      MOVS     r2,#0xff
+        0x01003b44:    0212        ..      LSLS     r2,r2,#8
+        0x01003b46:    4011        .@      ANDS     r1,r1,r2
+        0x01003b48:    4308        .C      ORRS     r0,r0,r1
+        0x01003b4a:    42a8        .B      CMP      r0,r5
+        0x01003b4c:    d10a        ..      BNE      0x1003b64 ; IPC_TxData + 122
+        0x01003b4e:    48a2        .H      LDR      r0,[pc,#648] ; [0x1003dd8] = 0x20044
+        0x01003b50:    6800        .h      LDR      r0,[r0,#0]
+        0x01003b52:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003b54:    49a0        .I      LDR      r1,[pc,#640] ; [0x1003dd8] = 0x20044
+        0x01003b56:    6809        .h      LDR      r1,[r1,#0]
+        0x01003b58:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003b5a:    0209        ..      LSLS     r1,r1,#8
+        0x01003b5c:    4011        .@      ANDS     r1,r1,r2
+        0x01003b5e:    4308        .C      ORRS     r0,r0,r1
+        0x01003b60:    4605        .F      MOV      r5,r0
+        0x01003b62:    e001        ..      B        0x1003b68 ; IPC_TxData + 126
+        0x01003b64:    1c68        h.      ADDS     r0,r5,#1
+        0x01003b66:    b285        ..      UXTH     r5,r0
+        0x01003b68:    78e0        .x      LDRB     r0,[r4,#3]
+        0x01003b6a:    78a1        .x      LDRB     r1,[r4,#2]
+        0x01003b6c:    0200        ..      LSLS     r0,r0,#8
+        0x01003b6e:    4308        .C      ORRS     r0,r0,r1
+        0x01003b70:    42b0        .B      CMP      r0,r6
+        0x01003b72:    d103        ..      BNE      0x1003b7c ; IPC_TxData + 146
+        0x01003b74:    1d20         .      ADDS     r0,r4,#4
+        0x01003b76:    f000fedd    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003b7a:    4607        .F      MOV      r7,r0
+        0x01003b7c:    4630        0F      MOV      r0,r6
+        0x01003b7e:    1e71        q.      SUBS     r1,r6,#1
+        0x01003b80:    b28e        ..      UXTH     r6,r1
+        0x01003b82:    2800        .(      CMP      r0,#0
+        0x01003b84:    d1d0        ..      BNE      0x1003b28 ; IPC_TxData + 62
+        0x01003b86:    bf00        ..      NOP      
+        0x01003b88:    4993        .I      LDR      r1,[pc,#588] ; [0x1003dd8] = 0x20044
+        0x01003b8a:    6809        .h      LDR      r1,[r1,#0]
+        0x01003b8c:    718d        .q      STRB     r5,[r1,#6]
+        0x01003b8e:    0a29        ).      LSRS     r1,r5,#8
+        0x01003b90:    4891        .H      LDR      r0,[pc,#580] ; [0x1003dd8] = 0x20044
+        0x01003b92:    6800        .h      LDR      r0,[r0,#0]
+        0x01003b94:    71c1        .q      STRB     r1,[r0,#7]
+        0x01003b96:    bf00        ..      NOP      
+        0x01003b98:    2000        .       MOVS     r0,#0
+        0x01003b9a:    4991        .I      LDR      r1,[pc,#580] ; [0x1003de0] = 0xc4fe0
+        0x01003b9c:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01003b9e:    488f        .H      LDR      r0,[pc,#572] ; [0x1003ddc] = 0xf8520
+        0x01003ba0:    7f00        ..      LDRB     r0,[r0,#0x1c]
+        0x01003ba2:    2104        .!      MOVS     r1,#4
+        0x01003ba4:    4388        .C      BICS     r0,r0,r1
+        0x01003ba6:    498d        .I      LDR      r1,[pc,#564] ; [0x1003ddc] = 0xf8520
+        0x01003ba8:    7708        .w      STRB     r0,[r1,#0x1c]
+        0x01003baa:    bdf8        ..      POP      {r3-r7,pc}
+    IPC_PutBtData
+        0x01003bac:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x01003bae:    4607        .F      MOV      r7,r0
+        0x01003bb0:    460d        .F      MOV      r5,r1
+        0x01003bb2:    2d00        .-      CMP      r5,#0
+        0x01003bb4:    d003        ..      BEQ      0x1003bbe ; IPC_PutBtData + 18
+        0x01003bb6:    20ff        .       MOVS     r0,#0xff
+        0x01003bb8:    3003        .0      ADDS     r0,#3
+        0x01003bba:    4285        .B      CMP      r5,r0
+        0x01003bbc:    d901        ..      BLS      0x1003bc2 ; IPC_PutBtData + 22
+        0x01003bbe:    2000        .       MOVS     r0,#0
+        0x01003bc0:    bdf8        ..      POP      {r3-r7,pc}
+        0x01003bc2:    4886        .H      LDR      r0,[pc,#536] ; [0x1003ddc] = 0xf8520
+        0x01003bc4:    7f00        ..      LDRB     r0,[r0,#0x1c]
+        0x01003bc6:    2104        .!      MOVS     r1,#4
+        0x01003bc8:    4308        .C      ORRS     r0,r0,r1
+        0x01003bca:    4984        .I      LDR      r1,[pc,#528] ; [0x1003ddc] = 0xf8520
+        0x01003bcc:    7708        .w      STRB     r0,[r1,#0x1c]
+        0x01003bce:    2001        .       MOVS     r0,#1
+        0x01003bd0:    4983        .I      LDR      r1,[pc,#524] ; [0x1003de0] = 0xc4fe0
+        0x01003bd2:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01003bd4:    200a        .       MOVS     r0,#0xa
+        0x01003bd6:    f000fc09    ....    BL       delay_ms ; 0x10043ec
+        0x01003bda:    487f        .H      LDR      r0,[pc,#508] ; [0x1003dd8] = 0x20044
+        0x01003bdc:    6800        .h      LDR      r0,[r0,#0]
+        0x01003bde:    7984        .y      LDRB     r4,[r0,#6]
+        0x01003be0:    497d        }I      LDR      r1,[pc,#500] ; [0x1003dd8] = 0x20044
+        0x01003be2:    6809        .h      LDR      r1,[r1,#0]
+        0x01003be4:    79c9        .y      LDRB     r1,[r1,#7]
+        0x01003be6:    0209        ..      LSLS     r1,r1,#8
+        0x01003be8:    22ff        ."      MOVS     r2,#0xff
+        0x01003bea:    0212        ..      LSLS     r2,r2,#8
+        0x01003bec:    4011        .@      ANDS     r1,r1,r2
+        0x01003bee:    430c        .C      ORRS     r4,r4,r1
+        0x01003bf0:    463e        >F      MOV      r6,r7
+        0x01003bf2:    e01f        ..      B        0x1003c34 ; IPC_PutBtData + 136
+        0x01003bf4:    7830        0x      LDRB     r0,[r6,#0]
+        0x01003bf6:    2103        .!      MOVS     r1,#3
+        0x01003bf8:    0489        ..      LSLS     r1,r1,#18
+        0x01003bfa:    1861        a.      ADDS     r1,r4,r1
+        0x01003bfc:    7008        .p      STRB     r0,[r1,#0]
+        0x01003bfe:    1c76        v.      ADDS     r6,r6,#1
+        0x01003c00:    4875        uH      LDR      r0,[pc,#468] ; [0x1003dd8] = 0x20044
+        0x01003c02:    6800        .h      LDR      r0,[r0,#0]
+        0x01003c04:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003c06:    4974        tI      LDR      r1,[pc,#464] ; [0x1003dd8] = 0x20044
+        0x01003c08:    6809        .h      LDR      r1,[r1,#0]
+        0x01003c0a:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003c0c:    0209        ..      LSLS     r1,r1,#8
+        0x01003c0e:    22ff        ."      MOVS     r2,#0xff
+        0x01003c10:    0212        ..      LSLS     r2,r2,#8
+        0x01003c12:    4011        .@      ANDS     r1,r1,r2
+        0x01003c14:    4308        .C      ORRS     r0,r0,r1
+        0x01003c16:    42a0        .B      CMP      r0,r4
+        0x01003c18:    d10a        ..      BNE      0x1003c30 ; IPC_PutBtData + 132
+        0x01003c1a:    486f        oH      LDR      r0,[pc,#444] ; [0x1003dd8] = 0x20044
+        0x01003c1c:    6800        .h      LDR      r0,[r0,#0]
+        0x01003c1e:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003c20:    496d        mI      LDR      r1,[pc,#436] ; [0x1003dd8] = 0x20044
+        0x01003c22:    6809        .h      LDR      r1,[r1,#0]
+        0x01003c24:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003c26:    0209        ..      LSLS     r1,r1,#8
+        0x01003c28:    4011        .@      ANDS     r1,r1,r2
+        0x01003c2a:    4308        .C      ORRS     r0,r0,r1
+        0x01003c2c:    4604        .F      MOV      r4,r0
+        0x01003c2e:    e001        ..      B        0x1003c34 ; IPC_PutBtData + 136
+        0x01003c30:    1c60        `.      ADDS     r0,r4,#1
+        0x01003c32:    b284        ..      UXTH     r4,r0
+        0x01003c34:    4628        (F      MOV      r0,r5
+        0x01003c36:    1e6d        m.      SUBS     r5,r5,#1
+        0x01003c38:    2800        .(      CMP      r0,#0
+        0x01003c3a:    d1db        ..      BNE      0x1003bf4 ; IPC_PutBtData + 72
+        0x01003c3c:    bf00        ..      NOP      
+        0x01003c3e:    4966        fI      LDR      r1,[pc,#408] ; [0x1003dd8] = 0x20044
+        0x01003c40:    6809        .h      LDR      r1,[r1,#0]
+        0x01003c42:    718c        .q      STRB     r4,[r1,#6]
+        0x01003c44:    0a21        !.      LSRS     r1,r4,#8
+        0x01003c46:    4864        dH      LDR      r0,[pc,#400] ; [0x1003dd8] = 0x20044
+        0x01003c48:    6800        .h      LDR      r0,[r0,#0]
+        0x01003c4a:    71c1        .q      STRB     r1,[r0,#7]
+        0x01003c4c:    bf00        ..      NOP      
+        0x01003c4e:    2000        .       MOVS     r0,#0
+        0x01003c50:    4963        cI      LDR      r1,[pc,#396] ; [0x1003de0] = 0xc4fe0
+        0x01003c52:    73c8        .s      STRB     r0,[r1,#0xf]
+        0x01003c54:    4861        aH      LDR      r0,[pc,#388] ; [0x1003ddc] = 0xf8520
+        0x01003c56:    7f00        ..      LDRB     r0,[r0,#0x1c]
+        0x01003c58:    2104        .!      MOVS     r1,#4
+        0x01003c5a:    4388        .C      BICS     r0,r0,r1
+        0x01003c5c:    495f        _I      LDR      r1,[pc,#380] ; [0x1003ddc] = 0xf8520
+        0x01003c5e:    7708        .w      STRB     r0,[r1,#0x1c]
+        0x01003c60:    2001        .       MOVS     r0,#1
+        0x01003c62:    e7ad        ..      B        0x1003bc0 ; IPC_PutBtData + 20
+    IPC_ReadBtData
+        0x01003c64:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x01003c66:    4605        .F      MOV      r5,r0
+        0x01003c68:    485a        ZH      LDR      r0,[pc,#360] ; [0x1003dd4] = 0x20040
+        0x01003c6a:    6800        .h      LDR      r0,[r0,#0]
+        0x01003c6c:    7900        .y      LDRB     r0,[r0,#4]
+        0x01003c6e:    4959        YI      LDR      r1,[pc,#356] ; [0x1003dd4] = 0x20040
+        0x01003c70:    6809        .h      LDR      r1,[r1,#0]
+        0x01003c72:    7949        Iy      LDRB     r1,[r1,#5]
+        0x01003c74:    0209        ..      LSLS     r1,r1,#8
+        0x01003c76:    22ff        ."      MOVS     r2,#0xff
+        0x01003c78:    0212        ..      LSLS     r2,r2,#8
+        0x01003c7a:    4011        .@      ANDS     r1,r1,r2
+        0x01003c7c:    4308        .C      ORRS     r0,r0,r1
+        0x01003c7e:    4955        UI      LDR      r1,[pc,#340] ; [0x1003dd4] = 0x20040
+        0x01003c80:    6809        .h      LDR      r1,[r1,#0]
+        0x01003c82:    7989        .y      LDRB     r1,[r1,#6]
+        0x01003c84:    4a53        SJ      LDR      r2,[pc,#332] ; [0x1003dd4] = 0x20040
+        0x01003c86:    6812        .h      LDR      r2,[r2,#0]
+        0x01003c88:    79d2        .y      LDRB     r2,[r2,#7]
+        0x01003c8a:    0212        ..      LSLS     r2,r2,#8
+        0x01003c8c:    23ff        .#      MOVS     r3,#0xff
+        0x01003c8e:    021b        ..      LSLS     r3,r3,#8
+        0x01003c90:    401a        .@      ANDS     r2,r2,r3
+        0x01003c92:    4311        .C      ORRS     r1,r1,r2
+        0x01003c94:    4288        .B      CMP      r0,r1
+        0x01003c96:    d07d        }.      BEQ      0x1003d94 ; IPC_ReadBtData + 304
+        0x01003c98:    484e        NH      LDR      r0,[pc,#312] ; [0x1003dd4] = 0x20040
+        0x01003c9a:    6800        .h      LDR      r0,[r0,#0]
+        0x01003c9c:    7900        .y      LDRB     r0,[r0,#4]
+        0x01003c9e:    494d        MI      LDR      r1,[pc,#308] ; [0x1003dd4] = 0x20040
+        0x01003ca0:    6809        .h      LDR      r1,[r1,#0]
+        0x01003ca2:    7949        Iy      LDRB     r1,[r1,#5]
+        0x01003ca4:    0209        ..      LSLS     r1,r1,#8
+        0x01003ca6:    461a        .F      MOV      r2,r3
+        0x01003ca8:    4011        .@      ANDS     r1,r1,r2
+        0x01003caa:    4308        .C      ORRS     r0,r0,r1
+        0x01003cac:    4604        .F      MOV      r4,r0
+        0x01003cae:    2003        .       MOVS     r0,#3
+        0x01003cb0:    0480        ..      LSLS     r0,r0,#18
+        0x01003cb2:    1820         .      ADDS     r0,r4,r0
+        0x01003cb4:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003cb6:    7028        (p      STRB     r0,[r5,#0]
+        0x01003cb8:    4846        FH      LDR      r0,[pc,#280] ; [0x1003dd4] = 0x20040
+        0x01003cba:    6800        .h      LDR      r0,[r0,#0]
+        0x01003cbc:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003cbe:    4945        EI      LDR      r1,[pc,#276] ; [0x1003dd4] = 0x20040
+        0x01003cc0:    6809        .h      LDR      r1,[r1,#0]
+        0x01003cc2:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003cc4:    0209        ..      LSLS     r1,r1,#8
+        0x01003cc6:    4011        .@      ANDS     r1,r1,r2
+        0x01003cc8:    4308        .C      ORRS     r0,r0,r1
+        0x01003cca:    42a0        .B      CMP      r0,r4
+        0x01003ccc:    d10a        ..      BNE      0x1003ce4 ; IPC_ReadBtData + 128
+        0x01003cce:    4841        AH      LDR      r0,[pc,#260] ; [0x1003dd4] = 0x20040
+        0x01003cd0:    6800        .h      LDR      r0,[r0,#0]
+        0x01003cd2:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003cd4:    493f        ?I      LDR      r1,[pc,#252] ; [0x1003dd4] = 0x20040
+        0x01003cd6:    6809        .h      LDR      r1,[r1,#0]
+        0x01003cd8:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003cda:    0209        ..      LSLS     r1,r1,#8
+        0x01003cdc:    4011        .@      ANDS     r1,r1,r2
+        0x01003cde:    4308        .C      ORRS     r0,r0,r1
+        0x01003ce0:    4604        .F      MOV      r4,r0
+        0x01003ce2:    e001        ..      B        0x1003ce8 ; IPC_ReadBtData + 132
+        0x01003ce4:    1c60        `.      ADDS     r0,r4,#1
+        0x01003ce6:    b284        ..      UXTH     r4,r0
+        0x01003ce8:    2003        .       MOVS     r0,#3
+        0x01003cea:    0480        ..      LSLS     r0,r0,#18
+        0x01003cec:    1820         .      ADDS     r0,r4,r0
+        0x01003cee:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003cf0:    7068        hp      STRB     r0,[r5,#1]
+        0x01003cf2:    4838        8H      LDR      r0,[pc,#224] ; [0x1003dd4] = 0x20040
+        0x01003cf4:    6800        .h      LDR      r0,[r0,#0]
+        0x01003cf6:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003cf8:    4936        6I      LDR      r1,[pc,#216] ; [0x1003dd4] = 0x20040
+        0x01003cfa:    6809        .h      LDR      r1,[r1,#0]
+        0x01003cfc:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003cfe:    0209        ..      LSLS     r1,r1,#8
+        0x01003d00:    22ff        ."      MOVS     r2,#0xff
+        0x01003d02:    0212        ..      LSLS     r2,r2,#8
+        0x01003d04:    4011        .@      ANDS     r1,r1,r2
+        0x01003d06:    4308        .C      ORRS     r0,r0,r1
+        0x01003d08:    42a0        .B      CMP      r0,r4
+        0x01003d0a:    d10a        ..      BNE      0x1003d22 ; IPC_ReadBtData + 190
+        0x01003d0c:    4831        1H      LDR      r0,[pc,#196] ; [0x1003dd4] = 0x20040
+        0x01003d0e:    6800        .h      LDR      r0,[r0,#0]
+        0x01003d10:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003d12:    4930        0I      LDR      r1,[pc,#192] ; [0x1003dd4] = 0x20040
+        0x01003d14:    6809        .h      LDR      r1,[r1,#0]
+        0x01003d16:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003d18:    0209        ..      LSLS     r1,r1,#8
+        0x01003d1a:    4011        .@      ANDS     r1,r1,r2
+        0x01003d1c:    4308        .C      ORRS     r0,r0,r1
+        0x01003d1e:    4604        .F      MOV      r4,r0
+        0x01003d20:    e001        ..      B        0x1003d26 ; IPC_ReadBtData + 194
+        0x01003d22:    1c60        `.      ADDS     r0,r4,#1
+        0x01003d24:    b284        ..      UXTH     r4,r0
+        0x01003d26:    2003        .       MOVS     r0,#3
+        0x01003d28:    0480        ..      LSLS     r0,r0,#18
+        0x01003d2a:    1820         .      ADDS     r0,r4,r0
+        0x01003d2c:    7807        .x      LDRB     r7,[r0,#0]
+        0x01003d2e:    4829        )H      LDR      r0,[pc,#164] ; [0x1003dd4] = 0x20040
+        0x01003d30:    6800        .h      LDR      r0,[r0,#0]
+        0x01003d32:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003d34:    4927        'I      LDR      r1,[pc,#156] ; [0x1003dd4] = 0x20040
+        0x01003d36:    6809        .h      LDR      r1,[r1,#0]
+        0x01003d38:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003d3a:    0209        ..      LSLS     r1,r1,#8
+        0x01003d3c:    22ff        ."      MOVS     r2,#0xff
+        0x01003d3e:    0212        ..      LSLS     r2,r2,#8
+        0x01003d40:    4011        .@      ANDS     r1,r1,r2
+        0x01003d42:    4308        .C      ORRS     r0,r0,r1
+        0x01003d44:    42a0        .B      CMP      r0,r4
+        0x01003d46:    d10a        ..      BNE      0x1003d5e ; IPC_ReadBtData + 250
+        0x01003d48:    4822        "H      LDR      r0,[pc,#136] ; [0x1003dd4] = 0x20040
+        0x01003d4a:    6800        .h      LDR      r0,[r0,#0]
+        0x01003d4c:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003d4e:    4921        !I      LDR      r1,[pc,#132] ; [0x1003dd4] = 0x20040
+        0x01003d50:    6809        .h      LDR      r1,[r1,#0]
+        0x01003d52:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003d54:    0209        ..      LSLS     r1,r1,#8
+        0x01003d56:    4011        .@      ANDS     r1,r1,r2
+        0x01003d58:    4308        .C      ORRS     r0,r0,r1
+        0x01003d5a:    4604        .F      MOV      r4,r0
+        0x01003d5c:    e001        ..      B        0x1003d62 ; IPC_ReadBtData + 254
+        0x01003d5e:    1c60        `.      ADDS     r0,r4,#1
+        0x01003d60:    b284        ..      UXTH     r4,r0
+        0x01003d62:    2003        .       MOVS     r0,#3
+        0x01003d64:    0480        ..      LSLS     r0,r0,#18
+        0x01003d66:    1820         .      ADDS     r0,r4,r0
+        0x01003d68:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003d6a:    70a8        .p      STRB     r0,[r5,#2]
+        0x01003d6c:    0a00        ..      LSRS     r0,r0,#8
+        0x01003d6e:    70e8        .p      STRB     r0,[r5,#3]
+        0x01003d70:    4818        .H      LDR      r0,[pc,#96] ; [0x1003dd4] = 0x20040
+        0x01003d72:    6800        .h      LDR      r0,[r0,#0]
+        0x01003d74:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003d76:    4917        .I      LDR      r1,[pc,#92] ; [0x1003dd4] = 0x20040
+        0x01003d78:    6809        .h      LDR      r1,[r1,#0]
+        0x01003d7a:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003d7c:    0209        ..      LSLS     r1,r1,#8
+        0x01003d7e:    22ff        ."      MOVS     r2,#0xff
+        0x01003d80:    0212        ..      LSLS     r2,r2,#8
+        0x01003d82:    4011        .@      ANDS     r1,r1,r2
+        0x01003d84:    4308        .C      ORRS     r0,r0,r1
+        0x01003d86:    42a0        .B      CMP      r0,r4
+        0x01003d88:    d10c        ..      BNE      0x1003da4 ; IPC_ReadBtData + 320
+        0x01003d8a:    4812        .H      LDR      r0,[pc,#72] ; [0x1003dd4] = 0x20040
+        0x01003d8c:    6800        .h      LDR      r0,[r0,#0]
+        0x01003d8e:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003d90:    4910        .I      LDR      r1,[pc,#64] ; [0x1003dd4] = 0x20040
+        0x01003d92:    e000        ..      B        0x1003d96 ; IPC_ReadBtData + 306
+        0x01003d94:    e05b        [.      B        0x1003e4e ; IPC_ReadBtData + 490
+        0x01003d96:    6809        .h      LDR      r1,[r1,#0]
+        0x01003d98:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003d9a:    0209        ..      LSLS     r1,r1,#8
+        0x01003d9c:    4011        .@      ANDS     r1,r1,r2
+        0x01003d9e:    4308        .C      ORRS     r0,r0,r1
+        0x01003da0:    4604        .F      MOV      r4,r0
+        0x01003da2:    e001        ..      B        0x1003da8 ; IPC_ReadBtData + 324
+        0x01003da4:    1c60        `.      ADDS     r0,r4,#1
+        0x01003da6:    b284        ..      UXTH     r4,r0
+        0x01003da8:    78e8        .x      LDRB     r0,[r5,#3]
+        0x01003daa:    78a9        .x      LDRB     r1,[r5,#2]
+        0x01003dac:    0200        ..      LSLS     r0,r0,#8
+        0x01003dae:    4308        .C      ORRS     r0,r0,r1
+        0x01003db0:    0600        ..      LSLS     r0,r0,#24
+        0x01003db2:    0c00        ..      LSRS     r0,r0,#16
+        0x01003db4:    70a8        .p      STRB     r0,[r5,#2]
+        0x01003db6:    0a00        ..      LSRS     r0,r0,#8
+        0x01003db8:    70e8        .p      STRB     r0,[r5,#3]
+        0x01003dba:    78e8        .x      LDRB     r0,[r5,#3]
+        0x01003dbc:    78a9        .x      LDRB     r1,[r5,#2]
+        0x01003dbe:    0200        ..      LSLS     r0,r0,#8
+        0x01003dc0:    4308        .C      ORRS     r0,r0,r1
+        0x01003dc2:    19c0        ..      ADDS     r0,r0,r7
+        0x01003dc4:    b280        ..      UXTH     r0,r0
+        0x01003dc6:    70a8        .p      STRB     r0,[r5,#2]
+        0x01003dc8:    0a00        ..      LSRS     r0,r0,#8
+        0x01003dca:    70e8        .p      STRB     r0,[r5,#3]
+        0x01003dcc:    2600        .&      MOVS     r6,#0
+        0x01003dce:    e02d        -.      B        0x1003e2c ; IPC_ReadBtData + 456
+    $d
+        0x01003dd0:    000f8800    ....    DCD    1017856
+        0x01003dd4:    00020040    @...    DCD    131136
+        0x01003dd8:    00020044    D...    DCD    131140
+        0x01003ddc:    000f8520     ...    DCD    1017120
+        0x01003de0:    000c4fe0    .O..    DCD    806880
+    $t
+        0x01003de4:    1d28        (.      ADDS     r0,r5,#4
+        0x01003de6:    f000fda5    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01003dea:    2103        .!      MOVS     r1,#3
+        0x01003dec:    0489        ..      LSLS     r1,r1,#18
+        0x01003dee:    1861        a.      ADDS     r1,r4,r1
+        0x01003df0:    7809        .x      LDRB     r1,[r1,#0]
+        0x01003df2:    5581        .U      STRB     r1,[r0,r6]
+        0x01003df4:    48fe        .H      LDR      r0,[pc,#1016] ; [0x10041f0] = 0x20040
+        0x01003df6:    6800        .h      LDR      r0,[r0,#0]
+        0x01003df8:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003dfa:    49fd        .I      LDR      r1,[pc,#1012] ; [0x10041f0] = 0x20040
+        0x01003dfc:    6809        .h      LDR      r1,[r1,#0]
+        0x01003dfe:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003e00:    0209        ..      LSLS     r1,r1,#8
+        0x01003e02:    22ff        ."      MOVS     r2,#0xff
+        0x01003e04:    0212        ..      LSLS     r2,r2,#8
+        0x01003e06:    4011        .@      ANDS     r1,r1,r2
+        0x01003e08:    4308        .C      ORRS     r0,r0,r1
+        0x01003e0a:    42a0        .B      CMP      r0,r4
+        0x01003e0c:    d10a        ..      BNE      0x1003e24 ; IPC_ReadBtData + 448
+        0x01003e0e:    48f8        .H      LDR      r0,[pc,#992] ; [0x10041f0] = 0x20040
+        0x01003e10:    6800        .h      LDR      r0,[r0,#0]
+        0x01003e12:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003e14:    49f6        .I      LDR      r1,[pc,#984] ; [0x10041f0] = 0x20040
+        0x01003e16:    6809        .h      LDR      r1,[r1,#0]
+        0x01003e18:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003e1a:    0209        ..      LSLS     r1,r1,#8
+        0x01003e1c:    4011        .@      ANDS     r1,r1,r2
+        0x01003e1e:    4308        .C      ORRS     r0,r0,r1
+        0x01003e20:    4604        .F      MOV      r4,r0
+        0x01003e22:    e001        ..      B        0x1003e28 ; IPC_ReadBtData + 452
+        0x01003e24:    1c60        `.      ADDS     r0,r4,#1
+        0x01003e26:    b284        ..      UXTH     r4,r0
+        0x01003e28:    1c70        p.      ADDS     r0,r6,#1
+        0x01003e2a:    b286        ..      UXTH     r6,r0
+        0x01003e2c:    78e8        .x      LDRB     r0,[r5,#3]
+        0x01003e2e:    78a9        .x      LDRB     r1,[r5,#2]
+        0x01003e30:    0200        ..      LSLS     r0,r0,#8
+        0x01003e32:    4308        .C      ORRS     r0,r0,r1
+        0x01003e34:    42b0        .B      CMP      r0,r6
+        0x01003e36:    dcd5        ..      BGT      0x1003de4 ; IPC_ReadBtData + 384
+        0x01003e38:    bf00        ..      NOP      
+        0x01003e3a:    49ed        .I      LDR      r1,[pc,#948] ; [0x10041f0] = 0x20040
+        0x01003e3c:    6809        .h      LDR      r1,[r1,#0]
+        0x01003e3e:    710c        .q      STRB     r4,[r1,#4]
+        0x01003e40:    0a21        !.      LSRS     r1,r4,#8
+        0x01003e42:    48eb        .H      LDR      r0,[pc,#940] ; [0x10041f0] = 0x20040
+        0x01003e44:    6800        .h      LDR      r0,[r0,#0]
+        0x01003e46:    7141        Aq      STRB     r1,[r0,#5]
+        0x01003e48:    bf00        ..      NOP      
+        0x01003e4a:    2001        .       MOVS     r0,#1
+        0x01003e4c:    bdf8        ..      POP      {r3-r7,pc}
+        0x01003e4e:    2000        .       MOVS     r0,#0
+        0x01003e50:    e7fc        ..      B        0x1003e4c ; IPC_ReadBtData + 488
+    IPC_ReadBtData_DMA
+        0x01003e52:    b5f0        ..      PUSH     {r4-r7,lr}
+        0x01003e54:    b085        ..      SUB      sp,sp,#0x14
+        0x01003e56:    4605        .F      MOV      r5,r0
+        0x01003e58:    2000        .       MOVS     r0,#0
+        0x01003e5a:    9003        ..      STR      r0,[sp,#0xc]
+        0x01003e5c:    2700        .'      MOVS     r7,#0
+        0x01003e5e:    9002        ..      STR      r0,[sp,#8]
+        0x01003e60:    48e3        .H      LDR      r0,[pc,#908] ; [0x10041f0] = 0x20040
+        0x01003e62:    6800        .h      LDR      r0,[r0,#0]
+        0x01003e64:    7900        .y      LDRB     r0,[r0,#4]
+        0x01003e66:    49e2        .I      LDR      r1,[pc,#904] ; [0x10041f0] = 0x20040
+        0x01003e68:    6809        .h      LDR      r1,[r1,#0]
+        0x01003e6a:    7949        Iy      LDRB     r1,[r1,#5]
+        0x01003e6c:    0209        ..      LSLS     r1,r1,#8
+        0x01003e6e:    22ff        ."      MOVS     r2,#0xff
+        0x01003e70:    0212        ..      LSLS     r2,r2,#8
+        0x01003e72:    4011        .@      ANDS     r1,r1,r2
+        0x01003e74:    4308        .C      ORRS     r0,r0,r1
+        0x01003e76:    49de        .I      LDR      r1,[pc,#888] ; [0x10041f0] = 0x20040
+        0x01003e78:    6809        .h      LDR      r1,[r1,#0]
+        0x01003e7a:    7989        .y      LDRB     r1,[r1,#6]
+        0x01003e7c:    4adc        .J      LDR      r2,[pc,#880] ; [0x10041f0] = 0x20040
+        0x01003e7e:    6812        .h      LDR      r2,[r2,#0]
+        0x01003e80:    79d2        .y      LDRB     r2,[r2,#7]
+        0x01003e82:    0212        ..      LSLS     r2,r2,#8
+        0x01003e84:    23ff        .#      MOVS     r3,#0xff
+        0x01003e86:    021b        ..      LSLS     r3,r3,#8
+        0x01003e88:    401a        .@      ANDS     r2,r2,r3
+        0x01003e8a:    4311        .C      ORRS     r1,r1,r2
+        0x01003e8c:    4288        .B      CMP      r0,r1
+        0x01003e8e:    d07d        }.      BEQ      0x1003f8c ; IPC_ReadBtData_DMA + 314
+        0x01003e90:    48d7        .H      LDR      r0,[pc,#860] ; [0x10041f0] = 0x20040
+        0x01003e92:    6800        .h      LDR      r0,[r0,#0]
+        0x01003e94:    7900        .y      LDRB     r0,[r0,#4]
+        0x01003e96:    49d6        .I      LDR      r1,[pc,#856] ; [0x10041f0] = 0x20040
+        0x01003e98:    6809        .h      LDR      r1,[r1,#0]
+        0x01003e9a:    7949        Iy      LDRB     r1,[r1,#5]
+        0x01003e9c:    0209        ..      LSLS     r1,r1,#8
+        0x01003e9e:    461a        .F      MOV      r2,r3
+        0x01003ea0:    4011        .@      ANDS     r1,r1,r2
+        0x01003ea2:    4308        .C      ORRS     r0,r0,r1
+        0x01003ea4:    4604        .F      MOV      r4,r0
+        0x01003ea6:    48d3        .H      LDR      r0,[pc,#844] ; [0x10041f4] = 0x1ffb
+        0x01003ea8:    4284        .B      CMP      r4,r0
+        0x01003eaa:    d820         .      BHI      0x1003eee ; IPC_ReadBtData_DMA + 156
+        0x01003eac:    4620         F      MOV      r0,r4
+        0x01003eae:    1c64        d.      ADDS     r4,r4,#1
+        0x01003eb0:    2103        .!      MOVS     r1,#3
+        0x01003eb2:    0489        ..      LSLS     r1,r1,#18
+        0x01003eb4:    4308        .C      ORRS     r0,r0,r1
+        0x01003eb6:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003eb8:    7028        (p      STRB     r0,[r5,#0]
+        0x01003eba:    4620         F      MOV      r0,r4
+        0x01003ebc:    1c64        d.      ADDS     r4,r4,#1
+        0x01003ebe:    4308        .C      ORRS     r0,r0,r1
+        0x01003ec0:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003ec2:    7068        hp      STRB     r0,[r5,#1]
+        0x01003ec4:    4620         F      MOV      r0,r4
+        0x01003ec6:    1c64        d.      ADDS     r4,r4,#1
+        0x01003ec8:    4308        .C      ORRS     r0,r0,r1
+        0x01003eca:    7806        .x      LDRB     r6,[r0,#0]
+        0x01003ecc:    4620         F      MOV      r0,r4
+        0x01003ece:    1c64        d.      ADDS     r4,r4,#1
+        0x01003ed0:    4308        .C      ORRS     r0,r0,r1
+        0x01003ed2:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003ed4:    70a8        .p      STRB     r0,[r5,#2]
+        0x01003ed6:    0a00        ..      LSRS     r0,r0,#8
+        0x01003ed8:    70e8        .p      STRB     r0,[r5,#3]
+        0x01003eda:    bf00        ..      NOP      
+        0x01003edc:    49c4        .I      LDR      r1,[pc,#784] ; [0x10041f0] = 0x20040
+        0x01003ede:    6809        .h      LDR      r1,[r1,#0]
+        0x01003ee0:    710c        .q      STRB     r4,[r1,#4]
+        0x01003ee2:    0420         .      LSLS     r0,r4,#16
+        0x01003ee4:    0e01        ..      LSRS     r1,r0,#24
+        0x01003ee6:    48c2        .H      LDR      r0,[pc,#776] ; [0x10041f0] = 0x20040
+        0x01003ee8:    6800        .h      LDR      r0,[r0,#0]
+        0x01003eea:    7141        Aq      STRB     r1,[r0,#5]
+        0x01003eec:    e07a        z.      B        0x1003fe4 ; IPC_ReadBtData_DMA + 402
+        0x01003eee:    2003        .       MOVS     r0,#3
+        0x01003ef0:    0480        ..      LSLS     r0,r0,#18
+        0x01003ef2:    4320         C      ORRS     r0,r0,r4
+        0x01003ef4:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003ef6:    7028        (p      STRB     r0,[r5,#0]
+        0x01003ef8:    48bd        .H      LDR      r0,[pc,#756] ; [0x10041f0] = 0x20040
+        0x01003efa:    6800        .h      LDR      r0,[r0,#0]
+        0x01003efc:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003efe:    49bc        .I      LDR      r1,[pc,#752] ; [0x10041f0] = 0x20040
+        0x01003f00:    6809        .h      LDR      r1,[r1,#0]
+        0x01003f02:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003f04:    0209        ..      LSLS     r1,r1,#8
+        0x01003f06:    22ff        ."      MOVS     r2,#0xff
+        0x01003f08:    0212        ..      LSLS     r2,r2,#8
+        0x01003f0a:    4011        .@      ANDS     r1,r1,r2
+        0x01003f0c:    4308        .C      ORRS     r0,r0,r1
+        0x01003f0e:    42a0        .B      CMP      r0,r4
+        0x01003f10:    d10a        ..      BNE      0x1003f28 ; IPC_ReadBtData_DMA + 214
+        0x01003f12:    48b7        .H      LDR      r0,[pc,#732] ; [0x10041f0] = 0x20040
+        0x01003f14:    6800        .h      LDR      r0,[r0,#0]
+        0x01003f16:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003f18:    49b5        .I      LDR      r1,[pc,#724] ; [0x10041f0] = 0x20040
+        0x01003f1a:    6809        .h      LDR      r1,[r1,#0]
+        0x01003f1c:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003f1e:    0209        ..      LSLS     r1,r1,#8
+        0x01003f20:    4011        .@      ANDS     r1,r1,r2
+        0x01003f22:    4308        .C      ORRS     r0,r0,r1
+        0x01003f24:    4604        .F      MOV      r4,r0
+        0x01003f26:    e000        ..      B        0x1003f2a ; IPC_ReadBtData_DMA + 216
+        0x01003f28:    1c64        d.      ADDS     r4,r4,#1
+        0x01003f2a:    2003        .       MOVS     r0,#3
+        0x01003f2c:    0480        ..      LSLS     r0,r0,#18
+        0x01003f2e:    4320         C      ORRS     r0,r0,r4
+        0x01003f30:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003f32:    7068        hp      STRB     r0,[r5,#1]
+        0x01003f34:    48ae        .H      LDR      r0,[pc,#696] ; [0x10041f0] = 0x20040
+        0x01003f36:    6800        .h      LDR      r0,[r0,#0]
+        0x01003f38:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003f3a:    49ad        .I      LDR      r1,[pc,#692] ; [0x10041f0] = 0x20040
+        0x01003f3c:    6809        .h      LDR      r1,[r1,#0]
+        0x01003f3e:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003f40:    0209        ..      LSLS     r1,r1,#8
+        0x01003f42:    22ff        ."      MOVS     r2,#0xff
+        0x01003f44:    0212        ..      LSLS     r2,r2,#8
+        0x01003f46:    4011        .@      ANDS     r1,r1,r2
+        0x01003f48:    4308        .C      ORRS     r0,r0,r1
+        0x01003f4a:    42a0        .B      CMP      r0,r4
+        0x01003f4c:    d10a        ..      BNE      0x1003f64 ; IPC_ReadBtData_DMA + 274
+        0x01003f4e:    48a8        .H      LDR      r0,[pc,#672] ; [0x10041f0] = 0x20040
+        0x01003f50:    6800        .h      LDR      r0,[r0,#0]
+        0x01003f52:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003f54:    49a6        .I      LDR      r1,[pc,#664] ; [0x10041f0] = 0x20040
+        0x01003f56:    6809        .h      LDR      r1,[r1,#0]
+        0x01003f58:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003f5a:    0209        ..      LSLS     r1,r1,#8
+        0x01003f5c:    4011        .@      ANDS     r1,r1,r2
+        0x01003f5e:    4308        .C      ORRS     r0,r0,r1
+        0x01003f60:    4604        .F      MOV      r4,r0
+        0x01003f62:    e000        ..      B        0x1003f66 ; IPC_ReadBtData_DMA + 276
+        0x01003f64:    1c64        d.      ADDS     r4,r4,#1
+        0x01003f66:    2003        .       MOVS     r0,#3
+        0x01003f68:    0480        ..      LSLS     r0,r0,#18
+        0x01003f6a:    4320         C      ORRS     r0,r0,r4
+        0x01003f6c:    7806        .x      LDRB     r6,[r0,#0]
+        0x01003f6e:    48a0        .H      LDR      r0,[pc,#640] ; [0x10041f0] = 0x20040
+        0x01003f70:    6800        .h      LDR      r0,[r0,#0]
+        0x01003f72:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003f74:    499e        .I      LDR      r1,[pc,#632] ; [0x10041f0] = 0x20040
+        0x01003f76:    6809        .h      LDR      r1,[r1,#0]
+        0x01003f78:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003f7a:    0209        ..      LSLS     r1,r1,#8
+        0x01003f7c:    22ff        ."      MOVS     r2,#0xff
+        0x01003f7e:    0212        ..      LSLS     r2,r2,#8
+        0x01003f80:    4011        .@      ANDS     r1,r1,r2
+        0x01003f82:    4308        .C      ORRS     r0,r0,r1
+        0x01003f84:    42a0        .B      CMP      r0,r4
+        0x01003f86:    d10c        ..      BNE      0x1003fa2 ; IPC_ReadBtData_DMA + 336
+        0x01003f88:    4899        .H      LDR      r0,[pc,#612] ; [0x10041f0] = 0x20040
+        0x01003f8a:    e000        ..      B        0x1003f8e ; IPC_ReadBtData_DMA + 316
+        0x01003f8c:    e09f        ..      B        0x10040ce ; IPC_ReadBtData_DMA + 636
+        0x01003f8e:    6800        .h      LDR      r0,[r0,#0]
+        0x01003f90:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003f92:    4997        .I      LDR      r1,[pc,#604] ; [0x10041f0] = 0x20040
+        0x01003f94:    6809        .h      LDR      r1,[r1,#0]
+        0x01003f96:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003f98:    0209        ..      LSLS     r1,r1,#8
+        0x01003f9a:    4011        .@      ANDS     r1,r1,r2
+        0x01003f9c:    4308        .C      ORRS     r0,r0,r1
+        0x01003f9e:    4604        .F      MOV      r4,r0
+        0x01003fa0:    e000        ..      B        0x1003fa4 ; IPC_ReadBtData_DMA + 338
+        0x01003fa2:    1c64        d.      ADDS     r4,r4,#1
+        0x01003fa4:    2003        .       MOVS     r0,#3
+        0x01003fa6:    0480        ..      LSLS     r0,r0,#18
+        0x01003fa8:    4320         C      ORRS     r0,r0,r4
+        0x01003faa:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003fac:    70a8        .p      STRB     r0,[r5,#2]
+        0x01003fae:    0a00        ..      LSRS     r0,r0,#8
+        0x01003fb0:    70e8        .p      STRB     r0,[r5,#3]
+        0x01003fb2:    488f        .H      LDR      r0,[pc,#572] ; [0x10041f0] = 0x20040
+        0x01003fb4:    6800        .h      LDR      r0,[r0,#0]
+        0x01003fb6:    7880        .x      LDRB     r0,[r0,#2]
+        0x01003fb8:    498d        .I      LDR      r1,[pc,#564] ; [0x10041f0] = 0x20040
+        0x01003fba:    6809        .h      LDR      r1,[r1,#0]
+        0x01003fbc:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01003fbe:    0209        ..      LSLS     r1,r1,#8
+        0x01003fc0:    22ff        ."      MOVS     r2,#0xff
+        0x01003fc2:    0212        ..      LSLS     r2,r2,#8
+        0x01003fc4:    4011        .@      ANDS     r1,r1,r2
+        0x01003fc6:    4308        .C      ORRS     r0,r0,r1
+        0x01003fc8:    42a0        .B      CMP      r0,r4
+        0x01003fca:    d10a        ..      BNE      0x1003fe2 ; IPC_ReadBtData_DMA + 400
+        0x01003fcc:    4888        .H      LDR      r0,[pc,#544] ; [0x10041f0] = 0x20040
+        0x01003fce:    6800        .h      LDR      r0,[r0,#0]
+        0x01003fd0:    7800        .x      LDRB     r0,[r0,#0]
+        0x01003fd2:    4987        .I      LDR      r1,[pc,#540] ; [0x10041f0] = 0x20040
+        0x01003fd4:    6809        .h      LDR      r1,[r1,#0]
+        0x01003fd6:    7849        Ix      LDRB     r1,[r1,#1]
+        0x01003fd8:    0209        ..      LSLS     r1,r1,#8
+        0x01003fda:    4011        .@      ANDS     r1,r1,r2
+        0x01003fdc:    4308        .C      ORRS     r0,r0,r1
+        0x01003fde:    4604        .F      MOV      r4,r0
+        0x01003fe0:    e000        ..      B        0x1003fe4 ; IPC_ReadBtData_DMA + 402
+        0x01003fe2:    1c64        d.      ADDS     r4,r4,#1
+        0x01003fe4:    78e8        .x      LDRB     r0,[r5,#3]
+        0x01003fe6:    78a9        .x      LDRB     r1,[r5,#2]
+        0x01003fe8:    0200        ..      LSLS     r0,r0,#8
+        0x01003fea:    4308        .C      ORRS     r0,r0,r1
+        0x01003fec:    0600        ..      LSLS     r0,r0,#24
+        0x01003fee:    0c00        ..      LSRS     r0,r0,#16
+        0x01003ff0:    70a8        .p      STRB     r0,[r5,#2]
+        0x01003ff2:    0a00        ..      LSRS     r0,r0,#8
+        0x01003ff4:    70e8        .p      STRB     r0,[r5,#3]
+        0x01003ff6:    78e8        .x      LDRB     r0,[r5,#3]
+        0x01003ff8:    78a9        .x      LDRB     r1,[r5,#2]
+        0x01003ffa:    0200        ..      LSLS     r0,r0,#8
+        0x01003ffc:    4308        .C      ORRS     r0,r0,r1
+        0x01003ffe:    1980        ..      ADDS     r0,r0,r6
+        0x01004000:    b280        ..      UXTH     r0,r0
+        0x01004002:    70a8        .p      STRB     r0,[r5,#2]
+        0x01004004:    0a00        ..      LSRS     r0,r0,#8
+        0x01004006:    70e8        .p      STRB     r0,[r5,#3]
+        0x01004008:    78e8        .x      LDRB     r0,[r5,#3]
+        0x0100400a:    78a9        .x      LDRB     r1,[r5,#2]
+        0x0100400c:    0200        ..      LSLS     r0,r0,#8
+        0x0100400e:    4308        .C      ORRS     r0,r0,r1
+        0x01004010:    4606        .F      MOV      r6,r0
+        0x01004012:    4877        wH      LDR      r0,[pc,#476] ; [0x10041f0] = 0x20040
+        0x01004014:    6800        .h      LDR      r0,[r0,#0]
+        0x01004016:    7807        .x      LDRB     r7,[r0,#0]
+        0x01004018:    4975        uI      LDR      r1,[pc,#468] ; [0x10041f0] = 0x20040
+        0x0100401a:    6809        .h      LDR      r1,[r1,#0]
+        0x0100401c:    7849        Ix      LDRB     r1,[r1,#1]
+        0x0100401e:    0209        ..      LSLS     r1,r1,#8
+        0x01004020:    22ff        ."      MOVS     r2,#0xff
+        0x01004022:    0212        ..      LSLS     r2,r2,#8
+        0x01004024:    4011        .@      ANDS     r1,r1,r2
+        0x01004026:    430f        .C      ORRS     r7,r7,r1
+        0x01004028:    4871        qH      LDR      r0,[pc,#452] ; [0x10041f0] = 0x20040
+        0x0100402a:    6800        .h      LDR      r0,[r0,#0]
+        0x0100402c:    7880        .x      LDRB     r0,[r0,#2]
+        0x0100402e:    4970        pI      LDR      r1,[pc,#448] ; [0x10041f0] = 0x20040
+        0x01004030:    6809        .h      LDR      r1,[r1,#0]
+        0x01004032:    78c9        .x      LDRB     r1,[r1,#3]
+        0x01004034:    0209        ..      LSLS     r1,r1,#8
+        0x01004036:    4011        .@      ANDS     r1,r1,r2
+        0x01004038:    4308        .C      ORRS     r0,r0,r1
+        0x0100403a:    9002        ..      STR      r0,[sp,#8]
+        0x0100403c:    1930        0.      ADDS     r0,r6,r4
+        0x0100403e:    1e40        @.      SUBS     r0,r0,#1
+        0x01004040:    b280        ..      UXTH     r0,r0
+        0x01004042:    9004        ..      STR      r0,[sp,#0x10]
+        0x01004044:    9902        ..      LDR      r1,[sp,#8]
+        0x01004046:    9804        ..      LDR      r0,[sp,#0x10]
+        0x01004048:    4288        .B      CMP      r0,r1
+        0x0100404a:    db21        !.      BLT      0x1004090 ; IPC_ReadBtData_DMA + 574
+        0x0100404c:    9802        ..      LDR      r0,[sp,#8]
+        0x0100404e:    1b00        ..      SUBS     r0,r0,r4
+        0x01004050:    1c40        @.      ADDS     r0,r0,#1
+        0x01004052:    b286        ..      UXTH     r6,r0
+        0x01004054:    4620         F      MOV      r0,r4
+        0x01004056:    2103        .!      MOVS     r1,#3
+        0x01004058:    0489        ..      LSLS     r1,r1,#18
+        0x0100405a:    4308        .C      ORRS     r0,r0,r1
+        0x0100405c:    9001        ..      STR      r0,[sp,#4]
+        0x0100405e:    1d28        (.      ADDS     r0,r5,#4
+        0x01004060:    f000fc68    ..h.    BL       __aeabi_uread4 ; 0x1004934
+        0x01004064:    4632        2F      MOV      r2,r6
+        0x01004066:    9000        ..      STR      r0,[sp,#0]
+        0x01004068:    9901        ..      LDR      r1,[sp,#4]
+        0x0100406a:    f7fffcdd    ....    BL       _dmacopy ; 0x1003a28
+        0x0100406e:    bf00        ..      NOP      
+        0x01004070:    495f        _I      LDR      r1,[pc,#380] ; [0x10041f0] = 0x20040
+        0x01004072:    6809        .h      LDR      r1,[r1,#0]
+        0x01004074:    710f        .q      STRB     r7,[r1,#4]
+        0x01004076:    0a39        9.      LSRS     r1,r7,#8
+        0x01004078:    485d        ]H      LDR      r0,[pc,#372] ; [0x10041f0] = 0x20040
+        0x0100407a:    6800        .h      LDR      r0,[r0,#0]
+        0x0100407c:    7141        Aq      STRB     r1,[r0,#5]
+        0x0100407e:    bf00        ..      NOP      
+        0x01004080:    463c        <F      MOV      r4,r7
+        0x01004082:    9603        ..      STR      r6,[sp,#0xc]
+        0x01004084:    78e8        .x      LDRB     r0,[r5,#3]
+        0x01004086:    78a9        .x      LDRB     r1,[r5,#2]
+        0x01004088:    0200        ..      LSLS     r0,r0,#8
+        0x0100408a:    4308        .C      ORRS     r0,r0,r1
+        0x0100408c:    1b80        ..      SUBS     r0,r0,r6
+        0x0100408e:    b286        ..      UXTH     r6,r0
+        0x01004090:    2e00        ..      CMP      r6,#0
+        0x01004092:    dd19        ..      BLE      0x10040c8 ; IPC_ReadBtData_DMA + 630
+        0x01004094:    2003        .       MOVS     r0,#3
+        0x01004096:    0480        ..      LSLS     r0,r0,#18
+        0x01004098:    4320         C      ORRS     r0,r0,r4
+        0x0100409a:    9001        ..      STR      r0,[sp,#4]
+        0x0100409c:    1d28        (.      ADDS     r0,r5,#4
+        0x0100409e:    f000fc49    ..I.    BL       __aeabi_uread4 ; 0x1004934
+        0x010040a2:    9903        ..      LDR      r1,[sp,#0xc]
+        0x010040a4:    1840        @.      ADDS     r0,r0,r1
+        0x010040a6:    4632        2F      MOV      r2,r6
+        0x010040a8:    9000        ..      STR      r0,[sp,#0]
+        0x010040aa:    9901        ..      LDR      r1,[sp,#4]
+        0x010040ac:    f7fffcbc    ....    BL       _dmacopy ; 0x1003a28
+        0x010040b0:    bf00        ..      NOP      
+        0x010040b2:    19a0        ..      ADDS     r0,r4,r6
+        0x010040b4:    494e        NI      LDR      r1,[pc,#312] ; [0x10041f0] = 0x20040
+        0x010040b6:    6809        .h      LDR      r1,[r1,#0]
+        0x010040b8:    7108        .q      STRB     r0,[r1,#4]
+        0x010040ba:    19a0        ..      ADDS     r0,r4,r6
+        0x010040bc:    0400        ..      LSLS     r0,r0,#16
+        0x010040be:    0e01        ..      LSRS     r1,r0,#24
+        0x010040c0:    484b        KH      LDR      r0,[pc,#300] ; [0x10041f0] = 0x20040
+        0x010040c2:    6800        .h      LDR      r0,[r0,#0]
+        0x010040c4:    7141        Aq      STRB     r1,[r0,#5]
+        0x010040c6:    bf00        ..      NOP      
+        0x010040c8:    2001        .       MOVS     r0,#1
+        0x010040ca:    b005        ..      ADD      sp,sp,#0x14
+        0x010040cc:    bdf0        ..      POP      {r4-r7,pc}
+        0x010040ce:    2000        .       MOVS     r0,#0
+        0x010040d0:    e7fb        ..      B        0x10040ca ; IPC_ReadBtData_DMA + 632
+    IPC_ReadIPC_Opcode
+        0x010040d2:    b510        ..      PUSH     {r4,lr}
+        0x010040d4:    2000        .       MOVS     r0,#0
+        0x010040d6:    4a46        FJ      LDR      r2,[pc,#280] ; [0x10041f0] = 0x20040
+        0x010040d8:    6812        .h      LDR      r2,[r2,#0]
+        0x010040da:    7912        .y      LDRB     r2,[r2,#4]
+        0x010040dc:    4b44        DK      LDR      r3,[pc,#272] ; [0x10041f0] = 0x20040
+        0x010040de:    681b        .h      LDR      r3,[r3,#0]
+        0x010040e0:    795b        [y      LDRB     r3,[r3,#5]
+        0x010040e2:    021b        ..      LSLS     r3,r3,#8
+        0x010040e4:    24ff        .$      MOVS     r4,#0xff
+        0x010040e6:    0224        $.      LSLS     r4,r4,#8
+        0x010040e8:    4023        #@      ANDS     r3,r3,r4
+        0x010040ea:    431a        .C      ORRS     r2,r2,r3
+        0x010040ec:    4611        .F      MOV      r1,r2
+        0x010040ee:    4a41        AJ      LDR      r2,[pc,#260] ; [0x10041f4] = 0x1ffb
+        0x010040f0:    1d12        ..      ADDS     r2,r2,#4
+        0x010040f2:    4291        .B      CMP      r1,r2
+        0x010040f4:    d00a        ..      BEQ      0x100410c ; IPC_ReadIPC_Opcode + 58
+        0x010040f6:    460a        .F      MOV      r2,r1
+        0x010040f8:    1c4b        K.      ADDS     r3,r1,#1
+        0x010040fa:    b299        ..      UXTH     r1,r3
+        0x010040fc:    2303        .#      MOVS     r3,#3
+        0x010040fe:    049b        ..      LSLS     r3,r3,#18
+        0x01004100:    18d2        ..      ADDS     r2,r2,r3
+        0x01004102:    7810        .x      LDRB     r0,[r2,#0]
+        0x01004104:    461a        .F      MOV      r2,r3
+        0x01004106:    188a        ..      ADDS     r2,r1,r2
+        0x01004108:    7810        .x      LDRB     r0,[r2,#0]
+        0x0100410a:    e021        !.      B        0x1004150 ; IPC_ReadIPC_Opcode + 126
+        0x0100410c:    2203        ."      MOVS     r2,#3
+        0x0100410e:    0492        ..      LSLS     r2,r2,#18
+        0x01004110:    188a        ..      ADDS     r2,r1,r2
+        0x01004112:    7810        .x      LDRB     r0,[r2,#0]
+        0x01004114:    4a36        6J      LDR      r2,[pc,#216] ; [0x10041f0] = 0x20040
+        0x01004116:    6812        .h      LDR      r2,[r2,#0]
+        0x01004118:    7892        .x      LDRB     r2,[r2,#2]
+        0x0100411a:    4b35        5K      LDR      r3,[pc,#212] ; [0x10041f0] = 0x20040
+        0x0100411c:    681b        .h      LDR      r3,[r3,#0]
+        0x0100411e:    78db        .x      LDRB     r3,[r3,#3]
+        0x01004120:    021b        ..      LSLS     r3,r3,#8
+        0x01004122:    24ff        .$      MOVS     r4,#0xff
+        0x01004124:    0224        $.      LSLS     r4,r4,#8
+        0x01004126:    4023        #@      ANDS     r3,r3,r4
+        0x01004128:    431a        .C      ORRS     r2,r2,r3
+        0x0100412a:    428a        .B      CMP      r2,r1
+        0x0100412c:    d10a        ..      BNE      0x1004144 ; IPC_ReadIPC_Opcode + 114
+        0x0100412e:    4a30        0J      LDR      r2,[pc,#192] ; [0x10041f0] = 0x20040
+        0x01004130:    6812        .h      LDR      r2,[r2,#0]
+        0x01004132:    7812        .x      LDRB     r2,[r2,#0]
+        0x01004134:    4b2e        .K      LDR      r3,[pc,#184] ; [0x10041f0] = 0x20040
+        0x01004136:    681b        .h      LDR      r3,[r3,#0]
+        0x01004138:    785b        [x      LDRB     r3,[r3,#1]
+        0x0100413a:    021b        ..      LSLS     r3,r3,#8
+        0x0100413c:    4023        #@      ANDS     r3,r3,r4
+        0x0100413e:    431a        .C      ORRS     r2,r2,r3
+        0x01004140:    4611        .F      MOV      r1,r2
+        0x01004142:    e001        ..      B        0x1004148 ; IPC_ReadIPC_Opcode + 118
+        0x01004144:    1c4a        J.      ADDS     r2,r1,#1
+        0x01004146:    b291        ..      UXTH     r1,r2
+        0x01004148:    2203        ."      MOVS     r2,#3
+        0x0100414a:    0492        ..      LSLS     r2,r2,#18
+        0x0100414c:    188a        ..      ADDS     r2,r1,r2
+        0x0100414e:    7810        .x      LDRB     r0,[r2,#0]
+        0x01004150:    bd10        ..      POP      {r4,pc}
+    _download_btcode
+        0x01004152:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x01004154:    4604        .F      MOV      r4,r0
+        0x01004156:    1ca4        ..      ADDS     r4,r4,#2
+        0x01004158:    7820         x      LDRB     r0,[r4,#0]
+        0x0100415a:    7861        ax      LDRB     r1,[r4,#1]
+        0x0100415c:    0209        ..      LSLS     r1,r1,#8
+        0x0100415e:    22ff        ."      MOVS     r2,#0xff
+        0x01004160:    0212        ..      LSLS     r2,r2,#8
+        0x01004162:    4011        .@      ANDS     r1,r1,r2
+        0x01004164:    4308        .C      ORRS     r0,r0,r1
+        0x01004166:    4924        $I      LDR      r1,[pc,#144] ; [0x10041f8] = 0x55aa
+        0x01004168:    4288        .B      CMP      r0,r1
+        0x0100416a:    d000        ..      BEQ      0x100416e ; _download_btcode + 28
+        0x0100416c:    bdf8        ..      POP      {r3-r7,pc}
+        0x0100416e:    1ca4        ..      ADDS     r4,r4,#2
+        0x01004170:    200d        .       MOVS     r0,#0xd
+        0x01004172:    4922        "I      LDR      r1,[pc,#136] ; [0x10041fc] = 0xf8540
+        0x01004174:    6ac9        .j      LDR      r1,[r1,#0x2c]
+        0x01004176:    2201        ."      MOVS     r2,#1
+        0x01004178:    4082        .@      LSLS     r2,r2,r0
+        0x0100417a:    4391        .C      BICS     r1,r1,r2
+        0x0100417c:    4a1f        .J      LDR      r2,[pc,#124] ; [0x10041fc] = 0xf8540
+        0x0100417e:    62d1        .b      STR      r1,[r2,#0x2c]
+        0x01004180:    bf00        ..      NOP      
+        0x01004182:    7825        %x      LDRB     r5,[r4,#0]
+        0x01004184:    7861        ax      LDRB     r1,[r4,#1]
+        0x01004186:    0209        ..      LSLS     r1,r1,#8
+        0x01004188:    22ff        ."      MOVS     r2,#0xff
+        0x0100418a:    0212        ..      LSLS     r2,r2,#8
+        0x0100418c:    4011        .@      ANDS     r1,r1,r2
+        0x0100418e:    430d        .C      ORRS     r5,r5,r1
+        0x01004190:    1ca4        ..      ADDS     r4,r4,#2
+        0x01004192:    2000        .       MOVS     r0,#0
+        0x01004194:    491a        .I      LDR      r1,[pc,#104] ; [0x1004200] = 0xc8020
+        0x01004196:    7108        .q      STRB     r0,[r1,#4]
+        0x01004198:    7088        .p      STRB     r0,[r1,#2]
+        0x0100419a:    2080        .       MOVS     r0,#0x80
+        0x0100419c:    70c8        .p      STRB     r0,[r1,#3]
+        0x0100419e:    2008        .       MOVS     r0,#8
+        0x010041a0:    4918        .I      LDR      r1,[pc,#96] ; [0x1004204] = 0xf8e00
+        0x010041a2:    7308        .s      STRB     r0,[r1,#0xc]
+        0x010041a4:    462a        *F      MOV      r2,r5
+        0x010041a6:    4621        !F      MOV      r1,r4
+        0x010041a8:    4815        .H      LDR      r0,[pc,#84] ; [0x1004200] = 0xc8020
+        0x010041aa:    1d40        @.      ADDS     r0,r0,#5
+        0x010041ac:    f7fffc3c    ..<.    BL       _dmacopy ; 0x1003a28
+        0x010041b0:    2000        .       MOVS     r0,#0
+        0x010041b2:    4913        .I      LDR      r1,[pc,#76] ; [0x1004200] = 0xc8020
+        0x010041b4:    70c8        .p      STRB     r0,[r1,#3]
+        0x010041b6:    1964        d.      ADDS     r4,r4,r5
+        0x010041b8:    4912        .I      LDR      r1,[pc,#72] ; [0x1004204] = 0xf8e00
+        0x010041ba:    7308        .s      STRB     r0,[r1,#0xc]
+        0x010041bc:    e047        G.      B        0x100424e ; _download_btcode + 252
+        0x010041be:    1ca4        ..      ADDS     r4,r4,#2
+        0x010041c0:    7820         x      LDRB     r0,[r4,#0]
+        0x010041c2:    7861        ax      LDRB     r1,[r4,#1]
+        0x010041c4:    0209        ..      LSLS     r1,r1,#8
+        0x010041c6:    22ff        ."      MOVS     r2,#0xff
+        0x010041c8:    0212        ..      LSLS     r2,r2,#8
+        0x010041ca:    4011        .@      ANDS     r1,r1,r2
+        0x010041cc:    4308        .C      ORRS     r0,r0,r1
+        0x010041ce:    4605        .F      MOV      r5,r0
+        0x010041d0:    1ca4        ..      ADDS     r4,r4,#2
+        0x010041d2:    7820         x      LDRB     r0,[r4,#0]
+        0x010041d4:    7861        ax      LDRB     r1,[r4,#1]
+        0x010041d6:    0209        ..      LSLS     r1,r1,#8
+        0x010041d8:    4011        .@      ANDS     r1,r1,r2
+        0x010041da:    4308        .C      ORRS     r0,r0,r1
+        0x010041dc:    2103        .!      MOVS     r1,#3
+        0x010041de:    0489        ..      LSLS     r1,r1,#18
+        0x010041e0:    1846        F.      ADDS     r6,r0,r1
+        0x010041e2:    1ca4        ..      ADDS     r4,r4,#2
+        0x010041e4:    4808        .H      LDR      r0,[pc,#32] ; [0x1004208] = 0xc453d
+        0x010041e6:    4286        .B      CMP      r6,r0
+        0x010041e8:    d11e        ..      BNE      0x1004228 ; _download_btcode + 214
+        0x010041ea:    2d04        .-      CMP      r5,#4
+        0x010041ec:    d11c        ..      BNE      0x1004228 ; _download_btcode + 214
+        0x010041ee:    e00d        ..      B        0x100420c ; _download_btcode + 186
+    $d
+        0x010041f0:    00020040    @...    DCD    131136
+        0x010041f4:    00001ffb    ....    DCD    8187
+        0x010041f8:    000055aa    .U..    DCD    21930
+        0x010041fc:    000f8540    @...    DCD    1017152
+        0x01004200:    000c8020     ...    DCD    819232
+        0x01004204:    000f8e00    ....    DCD    1019392
+        0x01004208:    000c453d    =E..    DCD    804157
+    $t
+        0x0100420c:    2001        .       MOVS     r0,#1
+        0x0100420e:    4669        iF      MOV      r1,sp
+        0x01004210:    7008        .p      STRB     r0,[r1,#0]
+        0x01004212:    2203        ."      MOVS     r2,#3
+        0x01004214:    1c61        a.      ADDS     r1,r4,#1
+        0x01004216:    4468        hD      ADD      r0,sp,r0
+        0x01004218:    f000fb68    ..h.    BL       __aeabi_memcpy ; 0x10048ec
+        0x0100421c:    462a        *F      MOV      r2,r5
+        0x0100421e:    4669        iF      MOV      r1,sp
+        0x01004220:    4630        0F      MOV      r0,r6
+        0x01004222:    f7fffc01    ....    BL       _dmacopy ; 0x1003a28
+        0x01004226:    e011        ..      B        0x100424c ; _download_btcode + 250
+        0x01004228:    4851        QH      LDR      r0,[pc,#324] ; [0x1004370] = 0xc4acf
+        0x0100422a:    4286        .B      CMP      r6,r0
+        0x0100422c:    d109        ..      BNE      0x1004242 ; _download_btcode + 240
+        0x0100422e:    2d01        .-      CMP      r5,#1
+        0x01004230:    d107        ..      BNE      0x1004242 ; _download_btcode + 240
+        0x01004232:    2000        .       MOVS     r0,#0
+        0x01004234:    9000        ..      STR      r0,[sp,#0]
+        0x01004236:    462a        *F      MOV      r2,r5
+        0x01004238:    4669        iF      MOV      r1,sp
+        0x0100423a:    4630        0F      MOV      r0,r6
+        0x0100423c:    f7fffbf4    ....    BL       _dmacopy ; 0x1003a28
+        0x01004240:    e004        ..      B        0x100424c ; _download_btcode + 250
+        0x01004242:    462a        *F      MOV      r2,r5
+        0x01004244:    4621        !F      MOV      r1,r4
+        0x01004246:    4630        0F      MOV      r0,r6
+        0x01004248:    f7fffbee    ....    BL       _dmacopy ; 0x1003a28
+        0x0100424c:    1964        d.      ADDS     r4,r4,r5
+        0x0100424e:    7820         x      LDRB     r0,[r4,#0]
+        0x01004250:    7861        ax      LDRB     r1,[r4,#1]
+        0x01004252:    0209        ..      LSLS     r1,r1,#8
+        0x01004254:    22ff        ."      MOVS     r2,#0xff
+        0x01004256:    0212        ..      LSLS     r2,r2,#8
+        0x01004258:    4011        .@      ANDS     r1,r1,r2
+        0x0100425a:    4308        .C      ORRS     r0,r0,r1
+        0x0100425c:    4945        EI      LDR      r1,[pc,#276] ; [0x1004374] = 0x55aa
+        0x0100425e:    4288        .B      CMP      r0,r1
+        0x01004260:    d0ad        ..      BEQ      0x10041be ; _download_btcode + 108
+        0x01004262:    bf00        ..      NOP      
+        0x01004264:    e782        ..      B        0x100416c ; _download_btcode + 26
+    erase_memory
+        0x01004266:    2000        .       MOVS     r0,#0
+        0x01004268:    e009        ..      B        0x100427e ; erase_memory + 24
+        0x0100426a:    2100        .!      MOVS     r1,#0
+        0x0100426c:    2203        ."      MOVS     r2,#3
+        0x0100426e:    0492        ..      LSLS     r2,r2,#18
+        0x01004270:    1882        ..      ADDS     r2,r0,r2
+        0x01004272:    7011        .p      STRB     r1,[r2,#0]
+        0x01004274:    2231        1"      MOVS     r2,#0x31
+        0x01004276:    0392        ..      LSLS     r2,r2,#14
+        0x01004278:    1882        ..      ADDS     r2,r0,r2
+        0x0100427a:    7011        .p      STRB     r1,[r2,#0]
+        0x0100427c:    1c40        @.      ADDS     r0,r0,#1
+        0x0100427e:    2101        .!      MOVS     r1,#1
+        0x01004280:    0309        ..      LSLS     r1,r1,#12
+        0x01004282:    4288        .B      CMP      r0,r1
+        0x01004284:    d3f1        ..      BCC      0x100426a ; erase_memory + 4
+        0x01004286:    4770        pG      BX       lr
+    IpcInit
+        0x01004288:    b510        ..      PUSH     {r4,lr}
+        0x0100428a:    483b        ;H      LDR      r0,[pc,#236] ; [0x1004378] = 0x20048
+        0x0100428c:    7800        .x      LDRB     r0,[r0,#0]
+        0x0100428e:    2800        .(      CMP      r0,#0
+        0x01004290:    d12b        +.      BNE      0x10042ea ; IpcInit + 98
+        0x01004292:    200b        .       MOVS     r0,#0xb
+        0x01004294:    2101        .!      MOVS     r1,#1
+        0x01004296:    4081        .@      LSLS     r1,r1,r0
+        0x01004298:    4a38        8J      LDR      r2,[pc,#224] ; [0x100437c] = 0xe000e180
+        0x0100429a:    6011        .`      STR      r1,[r2,#0]
+        0x0100429c:    bf00        ..      NOP      
+        0x0100429e:    2001        .       MOVS     r0,#1
+        0x010042a0:    4935        5I      LDR      r1,[pc,#212] ; [0x1004378] = 0x20048
+        0x010042a2:    7008        .p      STRB     r0,[r1,#0]
+        0x010042a4:    209c        .       MOVS     r0,#0x9c
+        0x010042a6:    4936        6I      LDR      r1,[pc,#216] ; [0x1004380] = 0xf8520
+        0x010042a8:    7708        .w      STRB     r0,[r1,#0x1c]
+        0x010042aa:    2001        .       MOVS     r0,#1
+        0x010042ac:    f000f89e    ....    BL       delay_ms ; 0x10043ec
+        0x010042b0:    2001        .       MOVS     r0,#1
+        0x010042b2:    2119        .!      MOVS     r1,#0x19
+        0x010042b4:    03c9        ..      LSLS     r1,r1,#15
+        0x010042b6:    7408        .t      STRB     r0,[r1,#0x10]
+        0x010042b8:    f000f898    ....    BL       delay_ms ; 0x10043ec
+        0x010042bc:    bf00        ..      NOP      
+        0x010042be:    4831        1H      LDR      r0,[pc,#196] ; [0x1004384] = 0xc8040
+        0x010042c0:    78c0        .x      LDRB     r0,[r0,#3]
+        0x010042c2:    2180        .!      MOVS     r1,#0x80
+        0x010042c4:    4008        .@      ANDS     r0,r0,r1
+        0x010042c6:    2800        .(      CMP      r0,#0
+        0x010042c8:    d0f9        ..      BEQ      0x10042be ; IpcInit + 54
+        0x010042ca:    482e        .H      LDR      r0,[pc,#184] ; [0x1004384] = 0xc8040
+        0x010042cc:    78c0        .x      LDRB     r0,[r0,#3]
+        0x010042ce:    4388        .C      BICS     r0,r0,r1
+        0x010042d0:    492c        ,I      LDR      r1,[pc,#176] ; [0x1004384] = 0xc8040
+        0x010042d2:    70c8        .p      STRB     r0,[r1,#3]
+        0x010042d4:    f7ffffc7    ....    BL       erase_memory ; 0x1004266
+        0x010042d8:    482b        +H      LDR      r0,[pc,#172] ; [0x1004388] = 0x1004b40
+        0x010042da:    f7ffff3a    ..:.    BL       _download_btcode ; 0x1004152
+        0x010042de:    209c        .       MOVS     r0,#0x9c
+        0x010042e0:    4927        'I      LDR      r1,[pc,#156] ; [0x1004380] = 0xf8520
+        0x010042e2:    7708        .w      STRB     r0,[r1,#0x1c]
+        0x010042e4:    2064        d       MOVS     r0,#0x64
+        0x010042e6:    f000f881    ....    BL       delay_ms ; 0x10043ec
+        0x010042ea:    bd10        ..      POP      {r4,pc}
+    PrintHCIPack
+        0x010042ec:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x010042ee:    4605        .F      MOV      r5,r0
+        0x010042f0:    460e        .F      MOV      r6,r1
+        0x010042f2:    4631        1F      MOV      r1,r6
+        0x010042f4:    a025        %.      ADR      r0,{pc}+0x98 ; 0x100438c
+        0x010042f6:    f7fcf911    ....    BL       MyPrintf ; 0x100051c
+        0x010042fa:    782a        *x      LDRB     r2,[r5,#0]
+        0x010042fc:    4631        1F      MOV      r1,r6
+        0x010042fe:    a025        %.      ADR      r0,{pc}+0x96 ; 0x1004394
+        0x01004300:    f7fcf90c    ....    BL       MyPrintf ; 0x100051c
+        0x01004304:    786a        jx      LDRB     r2,[r5,#1]
+        0x01004306:    4631        1F      MOV      r1,r6
+        0x01004308:    a026        &.      ADR      r0,{pc}+0x9c ; 0x10043a4
+        0x0100430a:    f7fcf907    ....    BL       MyPrintf ; 0x100051c
+        0x0100430e:    78e8        .x      LDRB     r0,[r5,#3]
+        0x01004310:    78a9        .x      LDRB     r1,[r5,#2]
+        0x01004312:    0200        ..      LSLS     r0,r0,#8
+        0x01004314:    4308        .C      ORRS     r0,r0,r1
+        0x01004316:    4602        .F      MOV      r2,r0
+        0x01004318:    4631        1F      MOV      r1,r6
+        0x0100431a:    a027        '.      ADR      r0,{pc}+0x9e ; 0x10043b8
+        0x0100431c:    f7fcf8fe    ....    BL       MyPrintf ; 0x100051c
+        0x01004320:    4631        1F      MOV      r1,r6
+        0x01004322:    a02a        *.      ADR      r0,{pc}+0xaa ; 0x10043cc
+        0x01004324:    f7fcf8fa    ....    BL       MyPrintf ; 0x100051c
+        0x01004328:    2400        .$      MOVS     r4,#0
+        0x0100432a:    e016        ..      B        0x100435a ; PrintHCIPack + 110
+        0x0100432c:    1d28        (.      ADDS     r0,r5,#4
+        0x0100432e:    f000fb01    ....    BL       __aeabi_uread4 ; 0x1004934
+        0x01004332:    5d07        .]      LDRB     r7,[r0,r4]
+        0x01004334:    4639        9F      MOV      r1,r7
+        0x01004336:    a028        (.      ADR      r0,{pc}+0xa2 ; 0x10043d8
+        0x01004338:    f7fcf8f0    ....    BL       MyPrintf ; 0x100051c
+        0x0100433c:    4620         F      MOV      r0,r4
+        0x0100433e:    17e1        ..      ASRS     r1,r4,#31
+        0x01004340:    0f09        ..      LSRS     r1,r1,#28
+        0x01004342:    1809        ..      ADDS     r1,r1,r0
+        0x01004344:    1109        ..      ASRS     r1,r1,#4
+        0x01004346:    0109        ..      LSLS     r1,r1,#4
+        0x01004348:    1a61        a.      SUBS     r1,r4,r1
+        0x0100434a:    d104        ..      BNE      0x1004356 ; PrintHCIPack + 106
+        0x0100434c:    2c00        .,      CMP      r4,#0
+        0x0100434e:    d002        ..      BEQ      0x1004356 ; PrintHCIPack + 106
+        0x01004350:    a013        ..      ADR      r0,{pc}+0x50 ; 0x10043a0
+        0x01004352:    f7fcf8e3    ....    BL       MyPrintf ; 0x100051c
+        0x01004356:    1c60        `.      ADDS     r0,r4,#1
+        0x01004358:    b2c4        ..      UXTB     r4,r0
+        0x0100435a:    78e8        .x      LDRB     r0,[r5,#3]
+        0x0100435c:    78a9        .x      LDRB     r1,[r5,#2]
+        0x0100435e:    0200        ..      LSLS     r0,r0,#8
+        0x01004360:    4308        .C      ORRS     r0,r0,r1
+        0x01004362:    42a0        .B      CMP      r0,r4
+        0x01004364:    dce2        ..      BGT      0x100432c ; PrintHCIPack + 64
+        0x01004366:    a00e        ..      ADR      r0,{pc}+0x3a ; 0x10043a0
+        0x01004368:    f7fcf8d8    ....    BL       MyPrintf ; 0x100051c
+        0x0100436c:    bdf8        ..      POP      {r3-r7,pc}
+    $d
+        0x0100436e:    0000        ..      DCW    0
+        0x01004370:    000c4acf    .J..    DCD    805583
+        0x01004374:    000055aa    .U..    DCD    21930
+        0x01004378:    00020048    H...    DCD    131144
+        0x0100437c:    e000e180    ....    DCD    3758154112
+        0x01004380:    000f8520     ...    DCD    1017120
+        0x01004384:    000c8040    @...    DCD    819264
+        0x01004388:    01004b40    @K..    DCD    16796480
+        0x0100438c:    2520304d    M0 %    DCD    622866509
+        0x01004390:    000a3a73    s:..    DCD    670323
+        0x01004394:    54207325    %s T    DCD    1411412773
+        0x01004398:    3a657079    ype:    DCD    979726457
+        0x0100439c:    78323025    %02x    DCD    2016555045
+        0x010043a0:    0000000a    ....    DCD    10
+        0x010043a4:    4f207325    %s O    DCD    1327526693
+        0x010043a8:    646f4350    PCod    DCD    1685013328
+        0x010043ac:    25203a65    e: %    DCD    622869093
+        0x010043b0:    0a783230    02x.    DCD    175649328
+        0x010043b4:    00000000    ....    DCD    0
+        0x010043b8:    4c207325    %s L    DCD    1277195045
+        0x010043bc:    74676e65    engt    DCD    1952935525
+        0x010043c0:    25203a68    h: %    DCD    622869096
+        0x010043c4:    0a783230    02x.    DCD    175649328
+        0x010043c8:    00000000    ....    DCD    0
+        0x010043cc:    44207325    %s D    DCD    1142977317
+        0x010043d0:    3a617461    ata:    DCD    979465313
+        0x010043d4:    0000000a    ....    DCD    10
+        0x010043d8:    78323025    %02x    DCD    2016555045
+        0x010043dc:    00000020     ...    DCD    32
+    $t
+    .text
+    delay_us
+        0x010043e0:    b510        ..      PUSH     {r4,lr}
+        0x010043e2:    4604        .F      MOV      r4,r0
+        0x010043e4:    4620         F      MOV      r0,r4
+        0x010043e6:    49bb        .I      LDR      r1,[pc,#748] ; [0x10046d4] = 0x4239
+        0x010043e8:    4788        .G      BLX      r1
+        0x010043ea:    bd10        ..      POP      {r4,pc}
+    delay_ms
+        0x010043ec:    b510        ..      PUSH     {r4,lr}
+        0x010043ee:    4604        .F      MOV      r4,r0
+        0x010043f0:    4620         F      MOV      r0,r4
+        0x010043f2:    49b8        .I      LDR      r1,[pc,#736] ; [0x10046d4] = 0x4239
+        0x010043f4:    3124        $1      ADDS     r1,r1,#0x24
+        0x010043f6:    4788        .G      BLX      r1
+        0x010043f8:    bd10        ..      POP      {r4,pc}
+    TIM_Cmd
+        0x010043fa:    b570        p.      PUSH     {r4-r6,lr}
+        0x010043fc:    4604        .F      MOV      r4,r0
+        0x010043fe:    460d        .F      MOV      r5,r1
+        0x01004400:    2c09        .,      CMP      r4,#9
+        0x01004402:    db04        ..      BLT      0x100440e ; TIM_Cmd + 20
+        0x01004404:    4ab4        .J      LDR      r2,[pc,#720] ; [0x10046d8] = 0x1006384
+        0x01004406:    2121        !!      MOVS     r1,#0x21
+        0x01004408:    a0b4        ..      ADR      r0,{pc}+0x2d4 ; 0x10046dc
+        0x0100440a:    f7fcf9fd    ....    BL       _assert_handler ; 0x1000808
+        0x0100440e:    2d01        .-      CMP      r5,#1
+        0x01004410:    d111        ..      BNE      0x1004436 ; TIM_Cmd + 60
+        0x01004412:    2c08        .,      CMP      r4,#8
+        0x01004414:    da08        ..      BGE      0x1004428 ; TIM_Cmd + 46
+        0x01004416:    48bb        .H      LDR      r0,[pc,#748] ; [0x1004704] = 0xf0c40
+        0x01004418:    6880        .h      LDR      r0,[r0,#8]
+        0x0100441a:    00a2        ..      LSLS     r2,r4,#2
+        0x0100441c:    2101        .!      MOVS     r1,#1
+        0x0100441e:    4091        .@      LSLS     r1,r1,r2
+        0x01004420:    4308        .C      ORRS     r0,r0,r1
+        0x01004422:    49b8        .I      LDR      r1,[pc,#736] ; [0x1004704] = 0xf0c40
+        0x01004424:    6088        .`      STR      r0,[r1,#8]
+        0x01004426:    e017        ..      B        0x1004458 ; TIM_Cmd + 94
+        0x01004428:    48b6        .H      LDR      r0,[pc,#728] ; [0x1004704] = 0xf0c40
+        0x0100442a:    68c0        .h      LDR      r0,[r0,#0xc]
+        0x0100442c:    2101        .!      MOVS     r1,#1
+        0x0100442e:    4308        .C      ORRS     r0,r0,r1
+        0x01004430:    49b4        .I      LDR      r1,[pc,#720] ; [0x1004704] = 0xf0c40
+        0x01004432:    60c8        .`      STR      r0,[r1,#0xc]
+        0x01004434:    e010        ..      B        0x1004458 ; TIM_Cmd + 94
+        0x01004436:    2c08        .,      CMP      r4,#8
+        0x01004438:    da08        ..      BGE      0x100444c ; TIM_Cmd + 82
+        0x0100443a:    48b2        .H      LDR      r0,[pc,#712] ; [0x1004704] = 0xf0c40
+        0x0100443c:    6880        .h      LDR      r0,[r0,#8]
+        0x0100443e:    00a2        ..      LSLS     r2,r4,#2
+        0x01004440:    2101        .!      MOVS     r1,#1
+        0x01004442:    4091        .@      LSLS     r1,r1,r2
+        0x01004444:    4388        .C      BICS     r0,r0,r1
+        0x01004446:    49af        .I      LDR      r1,[pc,#700] ; [0x1004704] = 0xf0c40
+        0x01004448:    6088        .`      STR      r0,[r1,#8]
+        0x0100444a:    e005        ..      B        0x1004458 ; TIM_Cmd + 94
+        0x0100444c:    48ad        .H      LDR      r0,[pc,#692] ; [0x1004704] = 0xf0c40
+        0x0100444e:    68c0        .h      LDR      r0,[r0,#0xc]
+        0x01004450:    0840        @.      LSRS     r0,r0,#1
+        0x01004452:    0040        @.      LSLS     r0,r0,#1
+        0x01004454:    49ab        .I      LDR      r1,[pc,#684] ; [0x1004704] = 0xf0c40
+        0x01004456:    60c8        .`      STR      r0,[r1,#0xc]
+        0x01004458:    bd70        p.      POP      {r4-r6,pc}
+    TIM_Init
+        0x0100445a:    b510        ..      PUSH     {r4,lr}
+        0x0100445c:    4604        .F      MOV      r4,r0
+        0x0100445e:    7820         x      LDRB     r0,[r4,#0]
+        0x01004460:    2809        .(      CMP      r0,#9
+        0x01004462:    db04        ..      BLT      0x100446e ; TIM_Init + 20
+        0x01004464:    4aa8        .J      LDR      r2,[pc,#672] ; [0x1004708] = 0x100637b
+        0x01004466:    2110        .!      MOVS     r1,#0x10
+        0x01004468:    a09c        ..      ADR      r0,{pc}+0x274 ; 0x10046dc
+        0x0100446a:    f7fcf9cd    ....    BL       _assert_handler ; 0x1000808
+        0x0100446e:    7820         x      LDRB     r0,[r4,#0]
+        0x01004470:    2100        .!      MOVS     r1,#0
+        0x01004472:    f7ffffc2    ....    BL       TIM_Cmd ; 0x10043fa
+        0x01004476:    7821        !x      LDRB     r1,[r4,#0]
+        0x01004478:    00c9        ..      LSLS     r1,r1,#3
+        0x0100447a:    4aa2        .J      LDR      r2,[pc,#648] ; [0x1004704] = 0xf0c40
+        0x0100447c:    3a40        @:      SUBS     r2,r2,#0x40
+        0x0100447e:    1889        ..      ADDS     r1,r1,r2
+        0x01004480:    6860        `h      LDR      r0,[r4,#4]
+        0x01004482:    6008        .`      STR      r0,[r1,#0]
+        0x01004484:    7820         x      LDRB     r0,[r4,#0]
+        0x01004486:    2808        .(      CMP      r0,#8
+        0x01004488:    da09        ..      BGE      0x100449e ; TIM_Init + 68
+        0x0100448a:    489e        .H      LDR      r0,[pc,#632] ; [0x1004704] = 0xf0c40
+        0x0100448c:    6880        .h      LDR      r0,[r0,#8]
+        0x0100448e:    7821        !x      LDRB     r1,[r4,#0]
+        0x01004490:    008a        ..      LSLS     r2,r1,#2
+        0x01004492:    210c        .!      MOVS     r1,#0xc
+        0x01004494:    4091        .@      LSLS     r1,r1,r2
+        0x01004496:    4308        .C      ORRS     r0,r0,r1
+        0x01004498:    499a        .I      LDR      r1,[pc,#616] ; [0x1004704] = 0xf0c40
+        0x0100449a:    6088        .`      STR      r0,[r1,#8]
+        0x0100449c:    e005        ..      B        0x10044aa ; TIM_Init + 80
+        0x0100449e:    4899        .H      LDR      r0,[pc,#612] ; [0x1004704] = 0xf0c40
+        0x010044a0:    68c0        .h      LDR      r0,[r0,#0xc]
+        0x010044a2:    210c        .!      MOVS     r1,#0xc
+        0x010044a4:    4308        .C      ORRS     r0,r0,r1
+        0x010044a6:    4997        .I      LDR      r1,[pc,#604] ; [0x1004704] = 0xf0c40
+        0x010044a8:    60c8        .`      STR      r0,[r1,#0xc]
+        0x010044aa:    bd10        ..      POP      {r4,pc}
+    TIM_DeInit
+        0x010044ac:    2004        .       MOVS     r0,#4
+        0x010044ae:    4997        .I      LDR      r1,[pc,#604] ; [0x100470c] = 0xf8540
+        0x010044b0:    6ac9        .j      LDR      r1,[r1,#0x2c]
+        0x010044b2:    2201        ."      MOVS     r2,#1
+        0x010044b4:    4082        .@      LSLS     r2,r2,r0
+        0x010044b6:    4311        .C      ORRS     r1,r1,r2
+        0x010044b8:    4a94        .J      LDR      r2,[pc,#592] ; [0x100470c] = 0xf8540
+        0x010044ba:    62d1        .b      STR      r1,[r2,#0x2c]
+        0x010044bc:    bf00        ..      NOP      
+        0x010044be:    4770        pG      BX       lr
+    TIM_ModeConfig
+        0x010044c0:    b570        p.      PUSH     {r4-r6,lr}
+        0x010044c2:    4604        .F      MOV      r4,r0
+        0x010044c4:    460d        .F      MOV      r5,r1
+        0x010044c6:    2c09        .,      CMP      r4,#9
+        0x010044c8:    db04        ..      BLT      0x10044d4 ; TIM_ModeConfig + 20
+        0x010044ca:    4a91        .J      LDR      r2,[pc,#580] ; [0x1004710] = 0x100638c
+        0x010044cc:    2135        5!      MOVS     r1,#0x35
+        0x010044ce:    a083        ..      ADR      r0,{pc}+0x20e ; 0x10046dc
+        0x010044d0:    f7fcf99a    ....    BL       _assert_handler ; 0x1000808
+        0x010044d4:    2d01        .-      CMP      r5,#1
+        0x010044d6:    d006        ..      BEQ      0x10044e6 ; TIM_ModeConfig + 38
+        0x010044d8:    2d00        .-      CMP      r5,#0
+        0x010044da:    d004        ..      BEQ      0x10044e6 ; TIM_ModeConfig + 38
+        0x010044dc:    4a8c        .J      LDR      r2,[pc,#560] ; [0x1004710] = 0x100638c
+        0x010044de:    2136        6!      MOVS     r1,#0x36
+        0x010044e0:    a07e        ~.      ADR      r0,{pc}+0x1fc ; 0x10046dc
+        0x010044e2:    f7fcf991    ....    BL       _assert_handler ; 0x1000808
+        0x010044e6:    2d01        .-      CMP      r5,#1
+        0x010044e8:    d111        ..      BNE      0x100450e ; TIM_ModeConfig + 78
+        0x010044ea:    2c08        .,      CMP      r4,#8
+        0x010044ec:    da08        ..      BGE      0x1004500 ; TIM_ModeConfig + 64
+        0x010044ee:    4885        .H      LDR      r0,[pc,#532] ; [0x1004704] = 0xf0c40
+        0x010044f0:    6880        .h      LDR      r0,[r0,#8]
+        0x010044f2:    00a2        ..      LSLS     r2,r4,#2
+        0x010044f4:    2104        .!      MOVS     r1,#4
+        0x010044f6:    4091        .@      LSLS     r1,r1,r2
+        0x010044f8:    4308        .C      ORRS     r0,r0,r1
+        0x010044fa:    4982        .I      LDR      r1,[pc,#520] ; [0x1004704] = 0xf0c40
+        0x010044fc:    6088        .`      STR      r0,[r1,#8]
+        0x010044fe:    e017        ..      B        0x1004530 ; TIM_ModeConfig + 112
+        0x01004500:    4880        .H      LDR      r0,[pc,#512] ; [0x1004704] = 0xf0c40
+        0x01004502:    68c0        .h      LDR      r0,[r0,#0xc]
+        0x01004504:    2104        .!      MOVS     r1,#4
+        0x01004506:    4308        .C      ORRS     r0,r0,r1
+        0x01004508:    497e        ~I      LDR      r1,[pc,#504] ; [0x1004704] = 0xf0c40
+        0x0100450a:    60c8        .`      STR      r0,[r1,#0xc]
+        0x0100450c:    e010        ..      B        0x1004530 ; TIM_ModeConfig + 112
+        0x0100450e:    2c08        .,      CMP      r4,#8
+        0x01004510:    da08        ..      BGE      0x1004524 ; TIM_ModeConfig + 100
+        0x01004512:    487c        |H      LDR      r0,[pc,#496] ; [0x1004704] = 0xf0c40
+        0x01004514:    6880        .h      LDR      r0,[r0,#8]
+        0x01004516:    00a2        ..      LSLS     r2,r4,#2
+        0x01004518:    2104        .!      MOVS     r1,#4
+        0x0100451a:    4091        .@      LSLS     r1,r1,r2
+        0x0100451c:    4388        .C      BICS     r0,r0,r1
+        0x0100451e:    4979        yI      LDR      r1,[pc,#484] ; [0x1004704] = 0xf0c40
+        0x01004520:    6088        .`      STR      r0,[r1,#8]
+        0x01004522:    e005        ..      B        0x1004530 ; TIM_ModeConfig + 112
+        0x01004524:    4877        wH      LDR      r0,[pc,#476] ; [0x1004704] = 0xf0c40
+        0x01004526:    68c0        .h      LDR      r0,[r0,#0xc]
+        0x01004528:    2104        .!      MOVS     r1,#4
+        0x0100452a:    4388        .C      BICS     r0,r0,r1
+        0x0100452c:    4975        uI      LDR      r1,[pc,#468] ; [0x1004704] = 0xf0c40
+        0x0100452e:    60c8        .`      STR      r0,[r1,#0xc]
+        0x01004530:    bd70        p.      POP      {r4-r6,pc}
+    TIM_SetPeriod
+        0x01004532:    b570        p.      PUSH     {r4-r6,lr}
+        0x01004534:    4604        .F      MOV      r4,r0
+        0x01004536:    460d        .F      MOV      r5,r1
+        0x01004538:    2c09        .,      CMP      r4,#9
+        0x0100453a:    db04        ..      BLT      0x1004546 ; TIM_SetPeriod + 20
+        0x0100453c:    4a75        uJ      LDR      r2,[pc,#468] ; [0x1004714] = 0x100639b
+        0x0100453e:    214a        J!      MOVS     r1,#0x4a
+        0x01004540:    a066        f.      ADR      r0,{pc}+0x19c ; 0x10046dc
+        0x01004542:    f7fcf961    ..a.    BL       _assert_handler ; 0x1000808
+        0x01004546:    00e0        ..      LSLS     r0,r4,#3
+        0x01004548:    496e        nI      LDR      r1,[pc,#440] ; [0x1004704] = 0xf0c40
+        0x0100454a:    3940        @9      SUBS     r1,r1,#0x40
+        0x0100454c:    1840        @.      ADDS     r0,r0,r1
+        0x0100454e:    6005        .`      STR      r5,[r0,#0]
+        0x01004550:    bd70        p.      POP      {r4-r6,pc}
+    TIM_PWMInit
+        0x01004552:    b510        ..      PUSH     {r4,lr}
+        0x01004554:    4604        .F      MOV      r4,r0
+        0x01004556:    7820         x      LDRB     r0,[r4,#0]
+        0x01004558:    2809        .(      CMP      r0,#9
+        0x0100455a:    db04        ..      BLT      0x1004566 ; TIM_PWMInit + 20
+        0x0100455c:    4a6e        nJ      LDR      r2,[pc,#440] ; [0x1004718] = 0x10063a9
+        0x0100455e:    2151        Q!      MOVS     r1,#0x51
+        0x01004560:    a05e        ^.      ADR      r0,{pc}+0x17c ; 0x10046dc
+        0x01004562:    f7fcf951    ..Q.    BL       _assert_handler ; 0x1000808
+        0x01004566:    7820         x      LDRB     r0,[r4,#0]
+        0x01004568:    2100        .!      MOVS     r1,#0
+        0x0100456a:    f7ffff46    ..F.    BL       TIM_Cmd ; 0x10043fa
+        0x0100456e:    7821        !x      LDRB     r1,[r4,#0]
+        0x01004570:    00c9        ..      LSLS     r1,r1,#3
+        0x01004572:    4a64        dJ      LDR      r2,[pc,#400] ; [0x1004704] = 0xf0c40
+        0x01004574:    3a40        @:      SUBS     r2,r2,#0x40
+        0x01004576:    1889        ..      ADDS     r1,r1,r2
+        0x01004578:    68a0        .h      LDR      r0,[r4,#8]
+        0x0100457a:    6008        .`      STR      r0,[r1,#0]
+        0x0100457c:    7821        !x      LDRB     r1,[r4,#0]
+        0x0100457e:    00c9        ..      LSLS     r1,r1,#3
+        0x01004580:    1889        ..      ADDS     r1,r1,r2
+        0x01004582:    6860        `h      LDR      r0,[r4,#4]
+        0x01004584:    6048        H`      STR      r0,[r1,#4]
+        0x01004586:    7b20         {      LDRB     r0,[r4,#0xc]
+        0x01004588:    2801        .(      CMP      r0,#1
+        0x0100458a:    d113        ..      BNE      0x10045b4 ; TIM_PWMInit + 98
+        0x0100458c:    7820         x      LDRB     r0,[r4,#0]
+        0x0100458e:    2808        .(      CMP      r0,#8
+        0x01004590:    da09        ..      BGE      0x10045a6 ; TIM_PWMInit + 84
+        0x01004592:    485c        \H      LDR      r0,[pc,#368] ; [0x1004704] = 0xf0c40
+        0x01004594:    6880        .h      LDR      r0,[r0,#8]
+        0x01004596:    7821        !x      LDRB     r1,[r4,#0]
+        0x01004598:    008a        ..      LSLS     r2,r1,#2
+        0x0100459a:    2102        .!      MOVS     r1,#2
+        0x0100459c:    4091        .@      LSLS     r1,r1,r2
+        0x0100459e:    4308        .C      ORRS     r0,r0,r1
+        0x010045a0:    4958        XI      LDR      r1,[pc,#352] ; [0x1004704] = 0xf0c40
+        0x010045a2:    6088        .`      STR      r0,[r1,#8]
+        0x010045a4:    e019        ..      B        0x10045da ; TIM_PWMInit + 136
+        0x010045a6:    4857        WH      LDR      r0,[pc,#348] ; [0x1004704] = 0xf0c40
+        0x010045a8:    68c0        .h      LDR      r0,[r0,#0xc]
+        0x010045aa:    2102        .!      MOVS     r1,#2
+        0x010045ac:    4308        .C      ORRS     r0,r0,r1
+        0x010045ae:    4955        UI      LDR      r1,[pc,#340] ; [0x1004704] = 0xf0c40
+        0x010045b0:    60c8        .`      STR      r0,[r1,#0xc]
+        0x010045b2:    e012        ..      B        0x10045da ; TIM_PWMInit + 136
+        0x010045b4:    7820         x      LDRB     r0,[r4,#0]
+        0x010045b6:    2808        .(      CMP      r0,#8
+        0x010045b8:    da09        ..      BGE      0x10045ce ; TIM_PWMInit + 124
+        0x010045ba:    4852        RH      LDR      r0,[pc,#328] ; [0x1004704] = 0xf0c40
+        0x010045bc:    6880        .h      LDR      r0,[r0,#8]
+        0x010045be:    7821        !x      LDRB     r1,[r4,#0]
+        0x010045c0:    008a        ..      LSLS     r2,r1,#2
+        0x010045c2:    2102        .!      MOVS     r1,#2
+        0x010045c4:    4091        .@      LSLS     r1,r1,r2
+        0x010045c6:    4388        .C      BICS     r0,r0,r1
+        0x010045c8:    494e        NI      LDR      r1,[pc,#312] ; [0x1004704] = 0xf0c40
+        0x010045ca:    6088        .`      STR      r0,[r1,#8]
+        0x010045cc:    e005        ..      B        0x10045da ; TIM_PWMInit + 136
+        0x010045ce:    484d        MH      LDR      r0,[pc,#308] ; [0x1004704] = 0xf0c40
+        0x010045d0:    68c0        .h      LDR      r0,[r0,#0xc]
+        0x010045d2:    2102        .!      MOVS     r1,#2
+        0x010045d4:    4388        .C      BICS     r0,r0,r1
+        0x010045d6:    494b        KI      LDR      r1,[pc,#300] ; [0x1004704] = 0xf0c40
+        0x010045d8:    60c8        .`      STR      r0,[r1,#0xc]
+        0x010045da:    7820         x      LDRB     r0,[r4,#0]
+        0x010045dc:    2808        .(      CMP      r0,#8
+        0x010045de:    da09        ..      BGE      0x10045f4 ; TIM_PWMInit + 162
+        0x010045e0:    4848        HH      LDR      r0,[pc,#288] ; [0x1004704] = 0xf0c40
+        0x010045e2:    6880        .h      LDR      r0,[r0,#8]
+        0x010045e4:    7821        !x      LDRB     r1,[r4,#0]
+        0x010045e6:    008a        ..      LSLS     r2,r1,#2
+        0x010045e8:    2104        .!      MOVS     r1,#4
+        0x010045ea:    4091        .@      LSLS     r1,r1,r2
+        0x010045ec:    4388        .C      BICS     r0,r0,r1
+        0x010045ee:    4945        EI      LDR      r1,[pc,#276] ; [0x1004704] = 0xf0c40
+        0x010045f0:    6088        .`      STR      r0,[r1,#8]
+        0x010045f2:    e005        ..      B        0x1004600 ; TIM_PWMInit + 174
+        0x010045f4:    4843        CH      LDR      r0,[pc,#268] ; [0x1004704] = 0xf0c40
+        0x010045f6:    68c0        .h      LDR      r0,[r0,#0xc]
+        0x010045f8:    2104        .!      MOVS     r1,#4
+        0x010045fa:    4388        .C      BICS     r0,r0,r1
+        0x010045fc:    4941        AI      LDR      r1,[pc,#260] ; [0x1004704] = 0xf0c40
+        0x010045fe:    60c8        .`      STR      r0,[r1,#0xc]
+        0x01004600:    bd10        ..      POP      {r4,pc}
+    TIM_SetPWMPeriod
+        0x01004602:    b570        p.      PUSH     {r4-r6,lr}
+        0x01004604:    4604        .F      MOV      r4,r0
+        0x01004606:    460d        .F      MOV      r5,r1
+        0x01004608:    4616        .F      MOV      r6,r2
+        0x0100460a:    2c09        .,      CMP      r4,#9
+        0x0100460c:    db04        ..      BLT      0x1004618 ; TIM_SetPWMPeriod + 22
+        0x0100460e:    4a43        CJ      LDR      r2,[pc,#268] ; [0x100471c] = 0x10063b5
+        0x01004610:    216c        l!      MOVS     r1,#0x6c
+        0x01004612:    a032        2.      ADR      r0,{pc}+0xca ; 0x10046dc
+        0x01004614:    f7fcf8f8    ....    BL       _assert_handler ; 0x1000808
+        0x01004618:    00e0        ..      LSLS     r0,r4,#3
+        0x0100461a:    493a        :I      LDR      r1,[pc,#232] ; [0x1004704] = 0xf0c40
+        0x0100461c:    3940        @9      SUBS     r1,r1,#0x40
+        0x0100461e:    1840        @.      ADDS     r0,r0,r1
+        0x01004620:    6006        .`      STR      r6,[r0,#0]
+        0x01004622:    00e0        ..      LSLS     r0,r4,#3
+        0x01004624:    1840        @.      ADDS     r0,r0,r1
+        0x01004626:    6045        E`      STR      r5,[r0,#4]
+        0x01004628:    bd70        p.      POP      {r4-r6,pc}
+    TIM_PWMDifferential
+        0x0100462a:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x0100462c:    4604        .F      MOV      r4,r0
+        0x0100462e:    460d        .F      MOV      r5,r1
+        0x01004630:    4616        .F      MOV      r6,r2
+        0x01004632:    461f        .F      MOV      r7,r3
+        0x01004634:    2c09        .,      CMP      r4,#9
+        0x01004636:    db04        ..      BLT      0x1004642 ; TIM_PWMDifferential + 24
+        0x01004638:    4a39        9J      LDR      r2,[pc,#228] ; [0x1004720] = 0x10063c6
+        0x0100463a:    2174        t!      MOVS     r1,#0x74
+        0x0100463c:    a027        '.      ADR      r0,{pc}+0xa0 ; 0x10046dc
+        0x0100463e:    f7fcf8e3    ....    BL       _assert_handler ; 0x1000808
+        0x01004642:    2d09        .-      CMP      r5,#9
+        0x01004644:    db04        ..      BLT      0x1004650 ; TIM_PWMDifferential + 38
+        0x01004646:    4a36        6J      LDR      r2,[pc,#216] ; [0x1004720] = 0x10063c6
+        0x01004648:    2175        u!      MOVS     r1,#0x75
+        0x0100464a:    a024        $.      ADR      r0,{pc}+0x92 ; 0x10046dc
+        0x0100464c:    f7fcf8dc    ....    BL       _assert_handler ; 0x1000808
+        0x01004650:    00a9        ..      LSLS     r1,r5,#2
+        0x01004652:    2001        .       MOVS     r0,#1
+        0x01004654:    4088        .@      LSLS     r0,r0,r1
+        0x01004656:    00a2        ..      LSLS     r2,r4,#2
+        0x01004658:    2101        .!      MOVS     r1,#1
+        0x0100465a:    4091        .@      LSLS     r1,r1,r2
+        0x0100465c:    4308        .C      ORRS     r0,r0,r1
+        0x0100465e:    4929        )I      LDR      r1,[pc,#164] ; [0x1004704] = 0xf0c40
+        0x01004660:    6889        .h      LDR      r1,[r1,#8]
+        0x01004662:    4381        .C      BICS     r1,r1,r0
+        0x01004664:    4827        'H      LDR      r0,[pc,#156] ; [0x1004704] = 0xf0c40
+        0x01004666:    6081        .`      STR      r1,[r0,#8]
+        0x01004668:    00e0        ..      LSLS     r0,r4,#3
+        0x0100466a:    4926        &I      LDR      r1,[pc,#152] ; [0x1004704] = 0xf0c40
+        0x0100466c:    3940        @9      SUBS     r1,r1,#0x40
+        0x0100466e:    1840        @.      ADDS     r0,r0,r1
+        0x01004670:    6007        .`      STR      r7,[r0,#0]
+        0x01004672:    00e0        ..      LSLS     r0,r4,#3
+        0x01004674:    1840        @.      ADDS     r0,r0,r1
+        0x01004676:    6046        F`      STR      r6,[r0,#4]
+        0x01004678:    00e8        ..      LSLS     r0,r5,#3
+        0x0100467a:    1840        @.      ADDS     r0,r0,r1
+        0x0100467c:    6006        .`      STR      r6,[r0,#0]
+        0x0100467e:    00e8        ..      LSLS     r0,r5,#3
+        0x01004680:    1840        @.      ADDS     r0,r0,r1
+        0x01004682:    6047        G`      STR      r7,[r0,#4]
+        0x01004684:    481f        .H      LDR      r0,[pc,#124] ; [0x1004704] = 0xf0c40
+        0x01004686:    6880        .h      LDR      r0,[r0,#8]
+        0x01004688:    00a1        ..      LSLS     r1,r4,#2
+        0x0100468a:    1c49        I.      ADDS     r1,r1,#1
+        0x0100468c:    2201        ."      MOVS     r2,#1
+        0x0100468e:    408a        .@      LSLS     r2,r2,r1
+        0x01004690:    4390        .C      BICS     r0,r0,r2
+        0x01004692:    491c        .I      LDR      r1,[pc,#112] ; [0x1004704] = 0xf0c40
+        0x01004694:    6088        .`      STR      r0,[r1,#8]
+        0x01004696:    4608        .F      MOV      r0,r1
+        0x01004698:    6880        .h      LDR      r0,[r0,#8]
+        0x0100469a:    9000        ..      STR      r0,[sp,#0]
+        0x0100469c:    00a9        ..      LSLS     r1,r5,#2
+        0x0100469e:    2003        .       MOVS     r0,#3
+        0x010046a0:    4088        .@      LSLS     r0,r0,r1
+        0x010046a2:    00a2        ..      LSLS     r2,r4,#2
+        0x010046a4:    2101        .!      MOVS     r1,#1
+        0x010046a6:    4091        .@      LSLS     r1,r1,r2
+        0x010046a8:    4308        .C      ORRS     r0,r0,r1
+        0x010046aa:    9900        ..      LDR      r1,[sp,#0]
+        0x010046ac:    4308        .C      ORRS     r0,r0,r1
+        0x010046ae:    9000        ..      STR      r0,[sp,#0]
+        0x010046b0:    4814        .H      LDR      r0,[pc,#80] ; [0x1004704] = 0xf0c40
+        0x010046b2:    6880        .h      LDR      r0,[r0,#8]
+        0x010046b4:    00a9        ..      LSLS     r1,r5,#2
+        0x010046b6:    1c49        I.      ADDS     r1,r1,#1
+        0x010046b8:    2201        ."      MOVS     r2,#1
+        0x010046ba:    408a        .@      LSLS     r2,r2,r1
+        0x010046bc:    4310        .C      ORRS     r0,r0,r2
+        0x010046be:    4911        .I      LDR      r1,[pc,#68] ; [0x1004704] = 0xf0c40
+        0x010046c0:    6088        .`      STR      r0,[r1,#8]
+        0x010046c2:    4631        1F      MOV      r1,r6
+        0x010046c4:    3908        .9      SUBS     r1,r1,#8
+        0x010046c6:    0888        ..      LSRS     r0,r1,#2
+        0x010046c8:    f000f95a    ..Z.    BL       $Ven$TT$L$$delay ; 0x1004980
+        0x010046cc:    490d        .I      LDR      r1,[pc,#52] ; [0x1004704] = 0xf0c40
+        0x010046ce:    9800        ..      LDR      r0,[sp,#0]
+        0x010046d0:    6088        .`      STR      r0,[r1,#8]
+        0x010046d2:    bdf8        ..      POP      {r3-r7,pc}
+    $d
+        0x010046d4:    00004239    9B..    DCD    16953
+        0x010046d8:    01006384    .c..    DCD    16802692
+        0x010046dc:    2e5c2e2e    ..\.    DCD    777793070
+        0x010046e0:    2e2e5c2e    .\..    DCD    774790190
+        0x010046e4:    5c2e2e5c    \..\    DCD    1546530396
+        0x010046e8:    4c5c2e2e    ..\L    DCD    1281109550
+        0x010046ec:    61726269    ibra    DCD    1634886249
+        0x010046f0:    72656972    rier    DCD    1919248754
+        0x010046f4:    6b64735c    \sdk    DCD    1801745244
+        0x010046f8:    5f63795c    \yc_    DCD    1600354652
+        0x010046fc:    656d6974    time    DCD    1701669236
+        0x01004700:    00632e72    r.c.    DCD    6499954
+        0x01004704:    000f0c40    @...    DCD    986176
+        0x01004708:    0100637b    {c..    DCD    16802683
+        0x0100470c:    000f8540    @...    DCD    1017152
+        0x01004710:    0100638c    .c..    DCD    16802700
+        0x01004714:    0100639b    .c..    DCD    16802715
+        0x01004718:    010063a9    .c..    DCD    16802729
+        0x0100471c:    010063b5    .c..    DCD    16802741
+        0x01004720:    010063c6    .c..    DCD    16802758
+    $t
+    .text
+    SYSCTRL_AHBPeriphClockCmd
+        0x01004724:    b570        p.      PUSH     {r4-r6,lr}
+        0x01004726:    4604        .F      MOV      r4,r0
+        0x01004728:    460d        .F      MOV      r5,r1
+        0x0100472a:    4843        CH      LDR      r0,[pc,#268] ; [0x1004838] = 0x7fffe
+        0x0100472c:    4020         @      ANDS     r0,r0,r4
+        0x0100472e:    2800        .(      CMP      r0,#0
+        0x01004730:    d104        ..      BNE      0x100473c ; SYSCTRL_AHBPeriphClockCmd + 24
+        0x01004732:    4a42        BJ      LDR      r2,[pc,#264] ; [0x100483c] = 0x10063da
+        0x01004734:    2105        .!      MOVS     r1,#5
+        0x01004736:    a042        B.      ADR      r0,{pc}+0x10a ; 0x1004840
+        0x01004738:    f7fcf866    ..f.    BL       _assert_handler ; 0x1000808
+        0x0100473c:    2d00        .-      CMP      r5,#0
+        0x0100473e:    d105        ..      BNE      0x100474c ; SYSCTRL_AHBPeriphClockCmd + 40
+        0x01004740:    484a        JH      LDR      r0,[pc,#296] ; [0x100486c] = 0xf8540
+        0x01004742:    6ac0        .j      LDR      r0,[r0,#0x2c]
+        0x01004744:    4320         C      ORRS     r0,r0,r4
+        0x01004746:    4949        II      LDR      r1,[pc,#292] ; [0x100486c] = 0xf8540
+        0x01004748:    62c8        .b      STR      r0,[r1,#0x2c]
+        0x0100474a:    e004        ..      B        0x1004756 ; SYSCTRL_AHBPeriphClockCmd + 50
+        0x0100474c:    4847        GH      LDR      r0,[pc,#284] ; [0x100486c] = 0xf8540
+        0x0100474e:    6ac0        .j      LDR      r0,[r0,#0x2c]
+        0x01004750:    43a0        .C      BICS     r0,r0,r4
+        0x01004752:    4946        FI      LDR      r1,[pc,#280] ; [0x100486c] = 0xf8540
+        0x01004754:    62c8        .b      STR      r0,[r1,#0x2c]
+        0x01004756:    bd70        p.      POP      {r4-r6,pc}
+    SYSCTRL_EnterSleep
+        0x01004758:    b510        ..      PUSH     {r4,lr}
+        0x0100475a:    4604        .F      MOV      r4,r0
+        0x0100475c:    2c02        .,      CMP      r4,#2
+        0x0100475e:    d004        ..      BEQ      0x100476a ; SYSCTRL_EnterSleep + 18
+        0x01004760:    4a43        CJ      LDR      r2,[pc,#268] ; [0x1004870] = 0x10063f4
+        0x01004762:    2112        .!      MOVS     r1,#0x12
+        0x01004764:    a036        6.      ADR      r0,{pc}+0xdc ; 0x1004840
+        0x01004766:    f7fcf84f    ..O.    BL       _assert_handler ; 0x1000808
+        0x0100476a:    205a        Z       MOVS     r0,#0x5a
+        0x0100476c:    4941        AI      LDR      r1,[pc,#260] ; [0x1004874] = 0xf8400
+        0x0100476e:    6208        .b      STR      r0,[r1,#0x20]
+        0x01004770:    bd10        ..      POP      {r4,pc}
+    HCLKConfig_Div_None
+    __tagsym$$noinline
+        0x01004772:    4a41        AJ      LDR      r2,[pc,#260] ; [0x1004878] = 0xf8800
+        0x01004774:    69d2        .i      LDR      r2,[r2,#0x1c]
+        0x01004776:    2380        .#      MOVS     r3,#0x80
+        0x01004778:    431a        .C      ORRS     r2,r2,r3
+        0x0100477a:    4b3f        ?K      LDR      r3,[pc,#252] ; [0x1004878] = 0xf8800
+        0x0100477c:    61da        .a      STR      r2,[r3,#0x1c]
+        0x0100477e:    4a3b        ;J      LDR      r2,[pc,#236] ; [0x100486c] = 0xf8540
+        0x01004780:    6a12        .j      LDR      r2,[r2,#0x20]
+        0x01004782:    0912        ..      LSRS     r2,r2,#4
+        0x01004784:    0112        ..      LSLS     r2,r2,#4
+        0x01004786:    4302        .C      ORRS     r2,r2,r0
+        0x01004788:    4611        .F      MOV      r1,r2
+        0x0100478a:    4a38        8J      LDR      r2,[pc,#224] ; [0x100486c] = 0xf8540
+        0x0100478c:    6211        .b      STR      r1,[r2,#0x20]
+        0x0100478e:    4770        pG      BX       lr
+    SYSCTRL_HCLKConfig
+        0x01004790:    b570        p.      PUSH     {r4-r6,lr}
+        0x01004792:    4604        .F      MOV      r4,r0
+        0x01004794:    2c00        .,      CMP      r4,#0
+        0x01004796:    d00a        ..      BEQ      0x10047ae ; SYSCTRL_HCLKConfig + 30
+        0x01004798:    2c02        .,      CMP      r4,#2
+        0x0100479a:    d008        ..      BEQ      0x10047ae ; SYSCTRL_HCLKConfig + 30
+        0x0100479c:    2c06        .,      CMP      r4,#6
+        0x0100479e:    d006        ..      BEQ      0x10047ae ; SYSCTRL_HCLKConfig + 30
+        0x010047a0:    2c0e        .,      CMP      r4,#0xe
+        0x010047a2:    d004        ..      BEQ      0x10047ae ; SYSCTRL_HCLKConfig + 30
+        0x010047a4:    4a35        5J      LDR      r2,[pc,#212] ; [0x100487c] = 0x1006407
+        0x010047a6:    211f        .!      MOVS     r1,#0x1f
+        0x010047a8:    a025        %.      ADR      r0,{pc}+0x98 ; 0x1004840
+        0x010047aa:    f7fcf82d    ..-.    BL       _assert_handler ; 0x1000808
+        0x010047ae:    b672        r.      CPSID    i
+        0x010047b0:    2c00        .,      CMP      r4,#0
+        0x010047b2:    d109        ..      BNE      0x10047c8 ; SYSCTRL_HCLKConfig + 56
+        0x010047b4:    4d32        2M      LDR      r5,[pc,#200] ; [0x1004880] = 0x1004773
+        0x010047b6:    4629        )F      MOV      r1,r5
+        0x010047b8:    3140        @1      ADDS     r1,r1,#0x40
+        0x010047ba:    4628        (F      MOV      r0,r5
+        0x010047bc:    4a31        1J      LDR      r2,[pc,#196] ; [0x1004884] = 0x4405
+        0x010047be:    4790        .G      BLX      r2
+        0x010047c0:    4620         F      MOV      r0,r4
+        0x010047c2:    f7ffffd6    ....    BL       HCLKConfig_Div_None ; 0x1004772
+        0x010047c6:    e008        ..      B        0x10047da ; SYSCTRL_HCLKConfig + 74
+        0x010047c8:    4928        (I      LDR      r1,[pc,#160] ; [0x100486c] = 0xf8540
+        0x010047ca:    6a09        .j      LDR      r1,[r1,#0x20]
+        0x010047cc:    0909        ..      LSRS     r1,r1,#4
+        0x010047ce:    0109        ..      LSLS     r1,r1,#4
+        0x010047d0:    4321        !C      ORRS     r1,r1,r4
+        0x010047d2:    4608        .F      MOV      r0,r1
+        0x010047d4:    4925        %I      LDR      r1,[pc,#148] ; [0x100486c] = 0xf8540
+        0x010047d6:    6208        .b      STR      r0,[r1,#0x20]
+        0x010047d8:    bf00        ..      NOP      
+        0x010047da:    b662        b.      CPSIE    i
+        0x010047dc:    bd70        p.      POP      {r4-r6,pc}
+    SYSCTRL_GetClocksFreq
+        0x010047de:    b510        ..      PUSH     {r4,lr}
+        0x010047e0:    4604        .F      MOV      r4,r0
+        0x010047e2:    4822        "H      LDR      r0,[pc,#136] ; [0x100486c] = 0xf8540
+        0x010047e4:    6a00        .j      LDR      r0,[r0,#0x20]
+        0x010047e6:    0700        ..      LSLS     r0,r0,#28
+        0x010047e8:    0f00        ..      LSRS     r0,r0,#28
+        0x010047ea:    1c81        ..      ADDS     r1,r0,#2
+        0x010047ec:    4826        &H      LDR      r0,[pc,#152] ; [0x1004888] = 0xb71b000
+        0x010047ee:    f000f869    ..i.    BL       __aeabi_idiv ; 0x10048c4
+        0x010047f2:    6020         `      STR      r0,[r4,#0]
+        0x010047f4:    bd10        ..      POP      {r4,pc}
+    SYSCTRL_EnableDpllClk
+        0x010047f6:    b510        ..      PUSH     {r4,lr}
+        0x010047f8:    200d        .       MOVS     r0,#0xd
+        0x010047fa:    491c        .I      LDR      r1,[pc,#112] ; [0x100486c] = 0xf8540
+        0x010047fc:    6ac9        .j      LDR      r1,[r1,#0x2c]
+        0x010047fe:    2201        ."      MOVS     r2,#1
+        0x01004800:    4082        .@      LSLS     r2,r2,r0
+        0x01004802:    4391        .C      BICS     r1,r1,r2
+        0x01004804:    4a19        .J      LDR      r2,[pc,#100] ; [0x100486c] = 0xf8540
+        0x01004806:    62d1        .b      STR      r1,[r2,#0x2c]
+        0x01004808:    bf00        ..      NOP      
+        0x0100480a:    2094        .       MOVS     r0,#0x94
+        0x0100480c:    4917        .I      LDR      r1,[pc,#92] ; [0x100486c] = 0xf8540
+        0x0100480e:    3920         9      SUBS     r1,r1,#0x20
+        0x01004810:    7708        .w      STRB     r0,[r1,#0x1c]
+        0x01004812:    20ff        .       MOVS     r0,#0xff
+        0x01004814:    30f5        .0      ADDS     r0,r0,#0xf5
+        0x01004816:    f000f8b3    ....    BL       $Ven$TT$L$$delay ; 0x1004980
+        0x0100481a:    207f        .       MOVS     r0,#0x7f
+        0x0100481c:    491b        .I      LDR      r1,[pc,#108] ; [0x100488c] = 0xc4aa0
+        0x0100481e:    7448        Ht      STRB     r0,[r1,#0x11]
+        0x01004820:    20ff        .       MOVS     r0,#0xff
+        0x01004822:    7488        .t      STRB     r0,[r1,#0x12]
+        0x01004824:    74c8        .t      STRB     r0,[r1,#0x13]
+        0x01004826:    20b1        .       MOVS     r0,#0xb1
+        0x01004828:    4919        .I      LDR      r1,[pc,#100] ; [0x1004890] = 0xc40c0
+        0x0100482a:    70c8        .p      STRB     r0,[r1,#3]
+        0x0100482c:    204a        J       MOVS     r0,#0x4a
+        0x0100482e:    7108        .q      STRB     r0,[r1,#4]
+        0x01004830:    20ff        .       MOVS     r0,#0xff
+        0x01004832:    4918        .I      LDR      r1,[pc,#96] ; [0x1004894] = 0xc8900
+        0x01004834:    7148        Hq      STRB     r0,[r1,#5]
+        0x01004836:    bd10        ..      POP      {r4,pc}
+    $d
+        0x01004838:    0007fffe    ....    DCD    524286
+        0x0100483c:    010063da    .c..    DCD    16802778
+        0x01004840:    2e5c2e2e    ..\.    DCD    777793070
+        0x01004844:    2e2e5c2e    .\..    DCD    774790190
+        0x01004848:    5c2e2e5c    \..\    DCD    1546530396
+        0x0100484c:    4c5c2e2e    ..\L    DCD    1281109550
+        0x01004850:    61726269    ibra    DCD    1634886249
+        0x01004854:    72656972    rier    DCD    1919248754
+        0x01004858:    6b64735c    \sdk    DCD    1801745244
+        0x0100485c:    5f63795c    \yc_    DCD    1600354652
+        0x01004860:    63737973    sysc    DCD    1668512115
+        0x01004864:    2e6c7274    trl.    DCD    778859124
+        0x01004868:    00000063    c...    DCD    99
+        0x0100486c:    000f8540    @...    DCD    1017152
+        0x01004870:    010063f4    .c..    DCD    16802804
+        0x01004874:    000f8400    ....    DCD    1016832
+        0x01004878:    000f8800    ....    DCD    1017856
+        0x0100487c:    01006407    .d..    DCD    16802823
+        0x01004880:    01004773    sG..    DCD    16795507
+        0x01004884:    00004405    .D..    DCD    17413
+        0x01004888:    0b71b000    ..q.    DCD    192000000
+        0x0100488c:    000c4aa0    .J..    DCD    805536
+        0x01004890:    000c40c0    .@..    DCD    803008
+        0x01004894:    000c8900    ....    DCD    821504
+    $t
+    .text
+    __aeabi_uidiv
+    __aeabi_uidivmod
+        0x01004898:    b530        0.      PUSH     {r4,r5,lr}
+        0x0100489a:    460b        .F      MOV      r3,r1
+        0x0100489c:    4601        .F      MOV      r1,r0
+        0x0100489e:    2000        .       MOVS     r0,#0
+        0x010048a0:    2220         "      MOVS     r2,#0x20
+        0x010048a2:    2401        .$      MOVS     r4,#1
+        0x010048a4:    e009        ..      B        0x10048ba ; __aeabi_uidiv + 34
+        0x010048a6:    460d        .F      MOV      r5,r1
+        0x010048a8:    40d5        .@      LSRS     r5,r5,r2
+        0x010048aa:    429d        .B      CMP      r5,r3
+        0x010048ac:    d305        ..      BCC      0x10048ba ; __aeabi_uidiv + 34
+        0x010048ae:    461d        .F      MOV      r5,r3
+        0x010048b0:    4095        .@      LSLS     r5,r5,r2
+        0x010048b2:    1b49        I.      SUBS     r1,r1,r5
+        0x010048b4:    4625        %F      MOV      r5,r4
+        0x010048b6:    4095        .@      LSLS     r5,r5,r2
+        0x010048b8:    1940        @.      ADDS     r0,r0,r5
+        0x010048ba:    4615        .F      MOV      r5,r2
+        0x010048bc:    1e52        R.      SUBS     r2,r2,#1
+        0x010048be:    2d00        .-      CMP      r5,#0
+        0x010048c0:    dcf1        ..      BGT      0x10048a6 ; __aeabi_uidiv + 14
+        0x010048c2:    bd30        0.      POP      {r4,r5,pc}
+    .text
+    __aeabi_idiv
+    __aeabi_idivmod
+        0x010048c4:    b570        p.      PUSH     {r4-r6,lr}
+        0x010048c6:    2400        .$      MOVS     r4,#0
+        0x010048c8:    4625        %F      MOV      r5,r4
+        0x010048ca:    2800        .(      CMP      r0,#0
+        0x010048cc:    da01        ..      BGE      0x10048d2 ; __aeabi_idiv + 14
+        0x010048ce:    2401        .$      MOVS     r4,#1
+        0x010048d0:    4240        @B      RSBS     r0,r0,#0
+        0x010048d2:    2900        .)      CMP      r1,#0
+        0x010048d4:    da01        ..      BGE      0x10048da ; __aeabi_idiv + 22
+        0x010048d6:    2501        .%      MOVS     r5,#1
+        0x010048d8:    4249        IB      RSBS     r1,r1,#0
+        0x010048da:    f7ffffdd    ....    BL       __aeabi_uidiv ; 0x1004898
+        0x010048de:    42ac        .B      CMP      r4,r5
+        0x010048e0:    d000        ..      BEQ      0x10048e4 ; __aeabi_idiv + 32
+        0x010048e2:    4240        @B      RSBS     r0,r0,#0
+        0x010048e4:    2c00        .,      CMP      r4,#0
+        0x010048e6:    d000        ..      BEQ      0x10048ea ; __aeabi_idiv + 38
+        0x010048e8:    4249        IB      RSBS     r1,r1,#0
+        0x010048ea:    bd70        p.      POP      {r4-r6,pc}
+    .text
+    __aeabi_memcpy
+    __aeabi_memcpy4
+    __aeabi_memcpy8
+        0x010048ec:    4603        .F      MOV      r3,r0
+        0x010048ee:    430b        .C      ORRS     r3,r3,r1
+        0x010048f0:    079b        ..      LSLS     r3,r3,#30
+        0x010048f2:    d003        ..      BEQ      0x10048fc ; __aeabi_memcpy + 16
+        0x010048f4:    e009        ..      B        0x100490a ; __aeabi_memcpy + 30
+        0x010048f6:    c908        ..      LDM      r1!,{r3}
+        0x010048f8:    1f12        ..      SUBS     r2,r2,#4
+        0x010048fa:    c008        ..      STM      r0!,{r3}
+        0x010048fc:    2a04        .*      CMP      r2,#4
+        0x010048fe:    d2fa        ..      BCS      0x10048f6 ; __aeabi_memcpy + 10
+        0x01004900:    e003        ..      B        0x100490a ; __aeabi_memcpy + 30
+        0x01004902:    780b        .x      LDRB     r3,[r1,#0]
+        0x01004904:    7003        .p      STRB     r3,[r0,#0]
+        0x01004906:    1c40        @.      ADDS     r0,r0,#1
+        0x01004908:    1c49        I.      ADDS     r1,r1,#1
+        0x0100490a:    1e52        R.      SUBS     r2,r2,#1
+        0x0100490c:    d2f9        ..      BCS      0x1004902 ; __aeabi_memcpy + 22
+        0x0100490e:    4770        pG      BX       lr
+    .text
+    __aeabi_memset
+    __aeabi_memset4
+    __aeabi_memset8
+        0x01004910:    b2d2        ..      UXTB     r2,r2
+        0x01004912:    e001        ..      B        0x1004918 ; __aeabi_memset + 8
+        0x01004914:    7002        .p      STRB     r2,[r0,#0]
+        0x01004916:    1c40        @.      ADDS     r0,r0,#1
+        0x01004918:    1e49        I.      SUBS     r1,r1,#1
+        0x0100491a:    d2fb        ..      BCS      0x1004914 ; __aeabi_memset + 4
+        0x0100491c:    4770        pG      BX       lr
+    __aeabi_memclr
+    __aeabi_memclr4
+    __aeabi_memclr8
+        0x0100491e:    2200        ."      MOVS     r2,#0
+        0x01004920:    e7f6        ..      B        __aeabi_memset ; 0x1004910
+    _memset$wrapper
+        0x01004922:    b510        ..      PUSH     {r4,lr}
+        0x01004924:    4613        .F      MOV      r3,r2
+        0x01004926:    460a        .F      MOV      r2,r1
+        0x01004928:    4604        .F      MOV      r4,r0
+        0x0100492a:    4619        .F      MOV      r1,r3
+        0x0100492c:    f7fffff0    ....    BL       __aeabi_memset ; 0x1004910
+        0x01004930:    4620         F      MOV      r0,r4
+        0x01004932:    bd10        ..      POP      {r4,pc}
+    .text
+    __aeabi_uread4
+    __rt_uread4
+    _uread4
+        0x01004934:    2103        .!      MOVS     r1,#3
+        0x01004936:    1d00        ..      ADDS     r0,r0,#4
+        0x01004938:    1e40        @.      SUBS     r0,r0,#1
+        0x0100493a:    7803        .x      LDRB     r3,[r0,#0]
+        0x0100493c:    0212        ..      LSLS     r2,r2,#8
+        0x0100493e:    431a        .C      ORRS     r2,r2,r3
+        0x01004940:    1e49        I.      SUBS     r1,r1,#1
+        0x01004942:    d5f9        ..      BPL      0x1004938 ; __aeabi_uread4 + 4
+        0x01004944:    4610        .F      MOV      r0,r2
+        0x01004946:    4770        pG      BX       lr
+    .text
+    __aeabi_uwrite4
+    __rt_uwrite4
+    _uwrite4
+        0x01004948:    4603        .F      MOV      r3,r0
+        0x0100494a:    2203        ."      MOVS     r2,#3
+        0x0100494c:    7008        .p      STRB     r0,[r1,#0]
+        0x0100494e:    0a00        ..      LSRS     r0,r0,#8
+        0x01004950:    1c49        I.      ADDS     r1,r1,#1
+        0x01004952:    1e52        R.      SUBS     r2,r2,#1
+        0x01004954:    d5fa        ..      BPL      0x100494c ; __aeabi_uwrite4 + 4
+        0x01004956:    4618        .F      MOV      r0,r3
+        0x01004958:    4770        pG      BX       lr
+        0x0100495a:    0000        ..      MOVS     r0,r0
+    .text
+    __scatterload
+    __scatterload_rt2
+        0x0100495c:    4c06        .L      LDR      r4,[pc,#24] ; [0x1004978] = 0x1006444
+        0x0100495e:    2501        .%      MOVS     r5,#1
+        0x01004960:    4e06        .N      LDR      r6,[pc,#24] ; [0x100497c] = 0x1006464
+        0x01004962:    e005        ..      B        0x1004970 ; __scatterload + 20
+        0x01004964:    68e3        .h      LDR      r3,[r4,#0xc]
+        0x01004966:    cc07        ..      LDM      r4!,{r0-r2}
+        0x01004968:    432b        +C      ORRS     r3,r3,r5
+        0x0100496a:    3c0c        .<      SUBS     r4,r4,#0xc
+        0x0100496c:    4798        .G      BLX      r3
+        0x0100496e:    3410        .4      ADDS     r4,r4,#0x10
+        0x01004970:    42b4        .B      CMP      r4,r6
+        0x01004972:    d3f7        ..      BCC      0x1004964 ; __scatterload + 8
+        0x01004974:    f7fbfd48    ..H.    BL       __main_after_scatterload ; 0x1000408
+    $d
+        0x01004978:    01006444    Dd..    DCD    16802884
+        0x0100497c:    01006464    dd..    DCD    16802916
+    $t
+    $Ven$TT$L$$delay
+        0x01004980:    b403        ..      PUSH     {r0,r1}
+        0x01004982:    4801        .H      LDR      r0,[pc,#4] ; [0x1004988] = 0xc7
+        0x01004984:    9001        ..      STR      r0,[sp,#4]
+        0x01004986:    bd01        ..      POP      {r0,pc}
+    $d
+        0x01004988:    000000c7    ....    DCD    199
+    $t
+    i.__ARM_common_switch8
+    __ARM_common_switch8
+        0x0100498c:    b430        0.      PUSH     {r4,r5}
+        0x0100498e:    4674        tF      MOV      r4,lr
+        0x01004990:    1e64        d.      SUBS     r4,r4,#1
+        0x01004992:    7825        %x      LDRB     r5,[r4,#0]
+        0x01004994:    1c64        d.      ADDS     r4,r4,#1
+        0x01004996:    42ab        .B      CMP      r3,r5
+        0x01004998:    d304        ..      BCC      0x10049a4 ; __ARM_common_switch8 + 24
+        0x0100499a:    5d63        c]      LDRB     r3,[r4,r5]
+        0x0100499c:    005b        [.      LSLS     r3,r3,#1
+        0x0100499e:    18e3        ..      ADDS     r3,r4,r3
+        0x010049a0:    bc30        0.      POP      {r4,r5}
+        0x010049a2:    4718        .G      BX       r3
+        0x010049a4:    461d        .F      MOV      r5,r3
+        0x010049a6:    e7f8        ..      B        0x100499a ; __ARM_common_switch8 + 14
+    i.__scatterload_copy
+    __scatterload_copy
+        0x010049a8:    e002        ..      B        0x10049b0 ; __scatterload_copy + 8
+        0x010049aa:    c808        ..      LDM      r0!,{r3}
+        0x010049ac:    1f12        ..      SUBS     r2,r2,#4
+        0x010049ae:    c108        ..      STM      r1!,{r3}
+        0x010049b0:    2a00        .*      CMP      r2,#0
+        0x010049b2:    d1fa        ..      BNE      0x10049aa ; __scatterload_copy + 2
+        0x010049b4:    4770        pG      BX       lr
+    i.__scatterload_null
+    __scatterload_null
+        0x010049b6:    4770        pG      BX       lr
+    i.__scatterload_zeroinit
+    __scatterload_zeroinit
+        0x010049b8:    2000        .       MOVS     r0,#0
+        0x010049ba:    e001        ..      B        0x10049c0 ; __scatterload_zeroinit + 8
+        0x010049bc:    c101        ..      STM      r1!,{r0}
+        0x010049be:    1f12        ..      SUBS     r2,r2,#4
+        0x010049c0:    2a00        .*      CMP      r2,#0
+        0x010049c2:    d1fb        ..      BNE      0x10049bc ; __scatterload_zeroinit + 4
+        0x010049c4:    4770        pG      BX       lr
+        0x010049c6:    0000        ..      MOVS     r0,r0
+    i._qspi_flash_write
+    _qspi_flash_write
+    __tagsym$$noinline
+        0x010049c8:    b5f7        ..      PUSH     {r0-r2,r4-r7,lr}
+        0x010049ca:    460d        .F      MOV      r5,r1
+        0x010049cc:    b0c2        ..      SUB      sp,sp,#0x108
+        0x010049ce:    21ff        .!      MOVS     r1,#0xff
+        0x010049d0:    3105        .1      ADDS     r1,#5
+        0x010049d2:    a801        ..      ADD      r0,sp,#4
+        0x010049d4:    f7ffffa3    ....    BL       __aeabi_memclr ; 0x100491e
+        0x010049d8:    1de8        ..      ADDS     r0,r5,#7
+        0x010049da:    30f8        .0      ADDS     r0,r0,#0xf8
+        0x010049dc:    0a00        ..      LSRS     r0,r0,#8
+        0x010049de:    2600        .&      MOVS     r6,#0
+        0x010049e0:    9000        ..      STR      r0,[sp,#0]
+        0x010049e2:    e028        (.      B        0x1004a36 ; _qspi_flash_write + 110
+        0x010049e4:    24ff        .$      MOVS     r4,#0xff
+        0x010049e6:    3401        .4      ADDS     r4,#1
+        0x010049e8:    42a5        .B      CMP      r5,r4
+        0x010049ea:    d800        ..      BHI      0x10049ee ; _qspi_flash_write + 38
+        0x010049ec:    462c        ,F      MOV      r4,r5
+        0x010049ee:    9842        B.      LDR      r0,[sp,#0x108]
+        0x010049f0:    0237        7.      LSLS     r7,r6,#8
+        0x010049f2:    183a        :.      ADDS     r2,r7,r0
+        0x010049f4:    4b13        .K      LDR      r3,[pc,#76] ; [0x1004a44] = 0x47e5
+        0x010049f6:    2102        .!      MOVS     r1,#2
+        0x010049f8:    a801        ..      ADD      r0,sp,#4
+        0x010049fa:    4798        .G      BLX      r3
+        0x010049fc:    2000        .       MOVS     r0,#0
+        0x010049fe:    a901        ..      ADD      r1,sp,#4
+        0x01004a00:    e005        ..      B        0x1004a0e ; _qspi_flash_write + 70
+        0x01004a02:    9a44        D.      LDR      r2,[sp,#0x110]
+        0x01004a04:    183b        ;.      ADDS     r3,r7,r0
+        0x01004a06:    5cd2        .\      LDRB     r2,[r2,r3]
+        0x01004a08:    180b        ..      ADDS     r3,r1,r0
+        0x01004a0a:    711a        .q      STRB     r2,[r3,#4]
+        0x01004a0c:    1c40        @.      ADDS     r0,r0,#1
+        0x01004a0e:    42a0        .B      CMP      r0,r4
+        0x01004a10:    d3f7        ..      BCC      0x1004a02 ; _qspi_flash_write + 58
+        0x01004a12:    480c        .H      LDR      r0,[pc,#48] ; [0x1004a44] = 0x47e5
+        0x01004a14:    3814        .8      SUBS     r0,r0,#0x14
+        0x01004a16:    4780        .G      BLX      r0
+        0x01004a18:    2800        .(      CMP      r0,#0
+        0x01004a1a:    d010        ..      BEQ      0x1004a3e ; _qspi_flash_write + 118
+        0x01004a1c:    4a0a        .J      LDR      r2,[pc,#40] ; [0x1004a48] = 0x468d
+        0x01004a1e:    1d21        !.      ADDS     r1,r4,#4
+        0x01004a20:    a801        ..      ADD      r0,sp,#4
+        0x01004a22:    4790        .G      BLX      r2
+        0x01004a24:    2800        .(      CMP      r0,#0
+        0x01004a26:    d00a        ..      BEQ      0x1004a3e ; _qspi_flash_write + 118
+        0x01004a28:    4806        .H      LDR      r0,[pc,#24] ; [0x1004a44] = 0x47e5
+        0x01004a2a:    38a4        .8      SUBS     r0,r0,#0xa4
+        0x01004a2c:    4780        .G      BLX      r0
+        0x01004a2e:    2800        .(      CMP      r0,#0
+        0x01004a30:    d005        ..      BEQ      0x1004a3e ; _qspi_flash_write + 118
+        0x01004a32:    1b2d        -.      SUBS     r5,r5,r4
+        0x01004a34:    1c76        v.      ADDS     r6,r6,#1
+        0x01004a36:    9800        ..      LDR      r0,[sp,#0]
+        0x01004a38:    4286        .B      CMP      r6,r0
+        0x01004a3a:    d3d3        ..      BCC      0x10049e4 ; _qspi_flash_write + 28
+        0x01004a3c:    2001        .       MOVS     r0,#1
+        0x01004a3e:    b045        E.      ADD      sp,sp,#0x114
+        0x01004a40:    bdf0        ..      POP      {r4-r7,pc}
+    $d
+        0x01004a42:    0000        ..      DCW    0
+        0x01004a44:    000047e5    .G..    DCD    18405
+        0x01004a48:    0000468d    .F..    DCD    18061
+    $t
+    i.end_qspi
+    end_qspi
+    __tagsym$$noinline
+        0x01004a4c:    b510        ..      PUSH     {r4,lr}
+        0x01004a4e:    4906        .I      LDR      r1,[pc,#24] ; [0x1004a68] = 0x1004b0d
+        0x01004a50:    4604        .F      MOV      r4,r0
+        0x01004a52:    4608        .F      MOV      r0,r1
+        0x01004a54:    3140        @1      ADDS     r1,r1,#0x40
+        0x01004a56:    f000f82b    ..+.    BL       prefetch ; 0x1004ab0
+        0x01004a5a:    0721        !.      LSLS     r1,r4,#28
+        0x01004a5c:    09e0        ..      LSRS     r0,r4,#7
+        0x01004a5e:    0f09        ..      LSRS     r1,r1,#28
+        0x01004a60:    01c0        ..      LSLS     r0,r0,#7
+        0x01004a62:    f000f853    ..S.    BL       setqspi ; 0x1004b0c
+        0x01004a66:    bd10        ..      POP      {r4,pc}
+    $d
+        0x01004a68:    01004b0d    .K..    DCD    16796429
+    $t
+    i.pre_qspi
+    pre_qspi
+    __tagsym$$noinline
+        0x01004a6c:    b570        p.      PUSH     {r4-r6,lr}
+        0x01004a6e:    480d        .H      LDR      r0,[pc,#52] ; [0x1004aa4] = 0xf8800
+        0x01004a70:    2500        .%      MOVS     r5,#0
+        0x01004a72:    69c0        .i      LDR      r0,[r0,#0x1c]
+        0x01004a74:    2180        .!      MOVS     r1,#0x80
+        0x01004a76:    4008        .@      ANDS     r0,r0,r1
+        0x01004a78:    490b        .I      LDR      r1,[pc,#44] ; [0x1004aa8] = 0xf8540
+        0x01004a7a:    6a09        .j      LDR      r1,[r1,#0x20]
+        0x01004a7c:    070c        ..      LSLS     r4,r1,#28
+        0x01004a7e:    0f24        $.      LSRS     r4,r4,#28
+        0x01004a80:    2800        .(      CMP      r0,#0
+        0x01004a82:    d000        ..      BEQ      0x1004a86 ; pre_qspi + 26
+        0x01004a84:    2580        .%      MOVS     r5,#0x80
+        0x01004a86:    4909        .I      LDR      r1,[pc,#36] ; [0x1004aac] = 0x1004b0d
+        0x01004a88:    4325        %C      ORRS     r5,r5,r4
+        0x01004a8a:    4608        .F      MOV      r0,r1
+        0x01004a8c:    3140        @1      ADDS     r1,r1,#0x40
+        0x01004a8e:    f000f80f    ....    BL       prefetch ; 0x1004ab0
+        0x01004a92:    2c00        .,      CMP      r4,#0
+        0x01004a94:    d100        ..      BNE      0x1004a98 ; pre_qspi + 44
+        0x01004a96:    2402        .$      MOVS     r4,#2
+        0x01004a98:    4621        !F      MOV      r1,r4
+        0x01004a9a:    2000        .       MOVS     r0,#0
+        0x01004a9c:    f000f836    ..6.    BL       setqspi ; 0x1004b0c
+        0x01004aa0:    4628        (F      MOV      r0,r5
+        0x01004aa2:    bd70        p.      POP      {r4-r6,pc}
+    $d
+        0x01004aa4:    000f8800    ....    DCD    1017856
+        0x01004aa8:    000f8540    @...    DCD    1017152
+        0x01004aac:    01004b0d    .K..    DCD    16796429
+    $t
+    i.prefetch
+    prefetch
+        0x01004ab0:    4a00        .J      LDR      r2,[pc,#0] ; [0x1004ab4] = 0x4405
+        0x01004ab2:    4710        .G      BX       r2
+    $d
+        0x01004ab4:    00004405    .D..    DCD    17413
+    $t
+    i.qspi_flash_sectorerase
+    qspi_flash_sectorerase
+        0x01004ab8:    b570        p.      PUSH     {r4-r6,lr}
+        0x01004aba:    4605        .F      MOV      r5,r0
+        0x01004abc:    f7fbfd09    ....    BL       get_primask ; 0x10004d2
+        0x01004ac0:    b672        r.      CPSID    i
+        0x01004ac2:    f7ffffd3    ....    BL       pre_qspi ; 0x1004a6c
+        0x01004ac6:    4604        .F      MOV      r4,r0
+        0x01004ac8:    4904        .I      LDR      r1,[pc,#16] ; [0x1004adc] = 0x48b5
+        0x01004aca:    4628        (F      MOV      r0,r5
+        0x01004acc:    4788        .G      BLX      r1
+        0x01004ace:    4605        .F      MOV      r5,r0
+        0x01004ad0:    4620         F      MOV      r0,r4
+        0x01004ad2:    f7ffffbb    ....    BL       end_qspi ; 0x1004a4c
+        0x01004ad6:    b662        b.      CPSIE    i
+        0x01004ad8:    4628        (F      MOV      r0,r5
+        0x01004ada:    bd70        p.      POP      {r4-r6,pc}
+    $d
+        0x01004adc:    000048b5    .H..    DCD    18613
+    $t
+    i.qspi_flash_write
+    qspi_flash_write
+        0x01004ae0:    b5f8        ..      PUSH     {r3-r7,lr}
+        0x01004ae2:    4616        .F      MOV      r6,r2
+        0x01004ae4:    460c        .F      MOV      r4,r1
+        0x01004ae6:    4605        .F      MOV      r5,r0
+        0x01004ae8:    f7fbfcf3    ....    BL       get_primask ; 0x10004d2
+        0x01004aec:    b672        r.      CPSID    i
+        0x01004aee:    f7ffffbd    ....    BL       pre_qspi ; 0x1004a6c
+        0x01004af2:    4607        .F      MOV      r7,r0
+        0x01004af4:    4622        "F      MOV      r2,r4
+        0x01004af6:    4631        1F      MOV      r1,r6
+        0x01004af8:    4628        (F      MOV      r0,r5
+        0x01004afa:    f7ffff65    ..e.    BL       _qspi_flash_write ; 0x10049c8
+        0x01004afe:    4604        .F      MOV      r4,r0
+        0x01004b00:    4638        8F      MOV      r0,r7
+        0x01004b02:    f7ffffa3    ....    BL       end_qspi ; 0x1004a4c
+        0x01004b06:    b662        b.      CPSIE    i
+        0x01004b08:    4620         F      MOV      r0,r4
+        0x01004b0a:    bdf8        ..      POP      {r3-r7,pc}
+    i.setqspi
+    setqspi
+    __tagsym$$noinline
+        0x01004b0c:    4a08        .J      LDR      r2,[pc,#32] ; [0x1004b30] = 0xf8800
+        0x01004b0e:    2380        .#      MOVS     r3,#0x80
+        0x01004b10:    2800        .(      CMP      r0,#0
+        0x01004b12:    69d0        .i      LDR      r0,[r2,#0x1c]
+        0x01004b14:    d001        ..      BEQ      0x1004b1a ; setqspi + 14
+        0x01004b16:    4318        .C      ORRS     r0,r0,r3
+        0x01004b18:    e000        ..      B        0x1004b1c ; setqspi + 16
+        0x01004b1a:    4398        .C      BICS     r0,r0,r3
+        0x01004b1c:    61d0        .a      STR      r0,[r2,#0x1c]
+        0x01004b1e:    4805        .H      LDR      r0,[pc,#20] ; [0x1004b34] = 0xf8540
+        0x01004b20:    6a02        .j      LDR      r2,[r0,#0x20]
+        0x01004b22:    0709        ..      LSLS     r1,r1,#28
+        0x01004b24:    0912        ..      LSRS     r2,r2,#4
+        0x01004b26:    0112        ..      LSLS     r2,r2,#4
+        0x01004b28:    0f09        ..      LSRS     r1,r1,#28
+        0x01004b2a:    430a        .C      ORRS     r2,r2,r1
+        0x01004b2c:    6202        .b      STR      r2,[r0,#0x20]
+        0x01004b2e:    4770        pG      BX       lr
+    $d
+        0x01004b30:    000f8800    ....    DCD    1017856
+        0x01004b34:    000f8540    @...    DCD    1017152
+    $d.realdata
+    .constdata
+    g_pcHex1
+        0x01004b38:    01006430    0d..    DCD    16802864
+    g_pcHex2
+        0x01004b3c:    0100641c    .d..    DCD    16802844
+    .constdata
+    bt_code
+        0x01004b40:    55aa0200    ...U    DCD    1437204992
+        0x01004b44:    84c211b6    ....    DCD    2227311030
+        0x01004b48:    00c01800    ....    DCD    12589056
+        0x01004b4c:    00c05a00    .Z..    DCD    12605952
+        0x01004b50:    1ac0be80    ....    DCD    448839296
+        0x01004b54:    1ec05600    .V..    DCD    515921408
+        0x01004b58:    2ac04380    .C.*    DCD    717243264
+        0x01004b5c:    30c02d80    .-.0    DCD    817900928
+        0x01004b60:    42c06d00    .m.B    DCD    1119907072
+        0x01004b64:    44c0c480    ...D    DCD    1153483904
+        0x01004b68:    46c0e580    ...F    DCD    1187046784
+        0x01004b6c:    4ac06280    .b.J    DCD    1254122112
+        0x01004b70:    51c0a400    ...Q    DCD    1371579392
+        0x01004b74:    51c0ee00    ...Q    DCD    1371598336
+        0x01004b78:    54c0af80    ...T    DCD    1421913984
+        0x01004b7c:    56c0b280    ...V    DCD    1455469184
+        0x01004b80:    5cc0f500    ...\    DCD    1556149504
+        0x01004b84:    5dc0f600    ...]    DCD    1572926976
+        0x01004b88:    5ec08681    ...^    DCD    1589675649
+        0x01004b8c:    5ec0fa01    ...^    DCD    1589705217
+        0x01004b90:    6dc01b82    ...m    DCD    1841306498
+        0x01004b94:    75c03082    .0.u    DCD    1975529602
+        0x01004b98:    78c03782    .7.x    DCD    2025863042
+        0x01004b9c:    7ac08780    ...z    DCD    2059437952
+        0x01004ba0:    20209c80    ..      DCD    539008128
+        0x01004ba4:    01c08b4a    J...    DCD    29395786
+        0x01004ba8:    02c04182    .A..    DCD    46154114
+        0x01004bac:    03c04d82    .M..    DCD    62934402
+        0x01004bb0:    03c05602    .V..    DCD    62936578
+        0x01004bb4:    04c05c82    .\..    DCD    79715458
+        0x01004bb8:    05c06502    .e..    DCD    96494850
+        0x01004bbc:    09c07682    .v..    DCD    163608194
+        0x01004bc0:    0ac08682    ....    DCD    180389506
+        0x01004bc4:    0ec02103    .!..    DCD    247472387
+        0x01004bc8:    0fc03603    .6..    DCD    264254979
+        0x01004bcc:    0fc05f03    ._..    DCD    264265475
+        0x01004bd0:    11c08d83    ....    DCD    297831811
+        0x01004bd4:    19c0ef03    ....    DCD    432074499
+        0x01004bd8:    1dc01704    ....    DCD    499128068
+        0x01004bdc:    1fc02a04    .*..    DCD    532687364
+        0x01004be0:    20c03504    .5.     DCD    549467396
+        0x01004be4:    28c04784    .G.(    DCD    683689860
+        0x01004be8:    29c04d04    .M.)    DCD    700468484
+        0x01004bec:    46c05504    .U.F    DCD    1187009796
+        0x01004bf0:    4cc07483    .t.L    DCD    1287681155
+        0x01004bf4:    20206984    .i      DCD    538995076
+        0x01004bf8:    e26f8b4a    J.o.    DCD    3798960970
+        0x01004bfc:    e21f1900    ....    DCD    3793688832
+        0x01004c00:    05c50002    ....    DCD    96796674
+        0x01004c04:    42685745    EWhB    DCD    1114134341
+        0x01004c08:    e26f5c01    .\o.    DCD    3798948865
+        0x01004c0c:    3f794700    .Gy?    DCD    1064912640
+        0x01004c10:    4f2800fe    ..(O    DCD    1328021758
+        0x01004c14:    207900fe    ..y     DCD    544801022
+        0x01004c18:    4f2800fe    ..(O    DCD    1328021758
+        0x01004c1c:    207901fe    ..y     DCD    544801278
+        0x01004c20:    e26701fe    ..g.    DCD    3798401534
+        0x01004c24:    4c284700    .G(L    DCD    1277708032
+        0x01004c28:    20200100    ..      DCD    538968320
+        0x01004c2c:    402057c5    .W @    DCD    1075861445
+        0x01004c30:    20203c00    .<      DCD    538983424
+        0x01004c34:    e26f5745    EWo.    DCD    3798947653
+        0x01004c38:    01c44700    .G..    DCD    29640448
+        0x01004c3c:    3f790080    ..y?    DCD    1064894592
+        0x01004c40:    407903fe    ..y@    DCD    1081672702
+        0x01004c44:    e267067e    ~.g.    DCD    3798402686
+        0x01004c48:    4b704700    .GpK    DCD    1265649408
+        0x01004c4c:    602001ee    .. `    DCD    1612710382
+        0x01004c50:    40200000    .. @    DCD    1075838976
+        0x01004c54:    4020244c    L$ @    DCD    1075848268
+        0x01004c58:    4020696b    ki @    DCD    1075865963
+        0x01004c5c:    e26f1045    E.o.    DCD    3798929477
+        0x01004c60:    5a24ee4b    K.$Z    DCD    1512369739
+        0x01004c64:    36245400    .T$6    DCD    908350464
+        0x01004c68:    4020dec3    .. @    DCD    1075896003
+        0x01004c6c:    4020874a    J. @    DCD    1075873610
+        0x01004c70:    4020816b    k. @    DCD    1075872107
+        0x01004c74:    40208544    D. @    DCD    1075873092
+        0x01004c78:    40205347    GS @    DCD    1075860295
+        0x01004c7c:    40202447    G$ @    DCD    1075848263
+        0x01004c80:    e26fe960    `.o.    DCD    3798985056
+        0x01004c84:    e01f0b00    ....    DCD    3760130816
+        0x01004c88:    e26701fe    ..g.    DCD    3798401534
+        0x01004c8c:    40200b00    .. @    DCD    1075841792
+        0x01004c90:    20203d48    H=      DCD    538983752
+        0x01004c94:    4b70de43    C.pK    DCD    1265688131
+        0x01004c98:    202000ee    ..      DCD    538968302
+        0x01004c9c:    e26f8946    F.o.    DCD    3798960454
+        0x01004ca0:    3f794c00    .Ly?    DCD    1064913920
+        0x01004ca4:    e26702fe    ..g.    DCD    3798401790
+        0x01004ca8:    20204c00    .L      DCD    538987520
+        0x01004cac:    e26f2f43    C/o.    DCD    3798937411
+        0x01004cb0:    20797389    .sy     DCD    544830345
+        0x01004cb4:    e267067e    ~.g.    DCD    3798402686
+        0x01004cb8:    4b707389    .spK    DCD    1265660809
+        0x01004cbc:    e21c01f3    ....    DCD    3793486323
+        0x01004cc0:    3a24007e    ~.$:    DCD    975437950
+        0x01004cc4:    4b700240    @.pK    DCD    1265631808
+        0x01004cc8:    202000f3    ..      DCD    538968307
+        0x01004ccc:    e26f0240    @.o.    DCD    3798925888
+        0x01004cd0:    3f79ce40    @.y?    DCD    1064947264
+        0x01004cd4:    e61f05fe    ....    DCD    3860792830
+        0x01004cd8:    2120097c    |. !    DCD    555747708
+        0x01004cdc:    e61f6900    .i..    DCD    3860818176
+        0x01004ce0:    21240f7c    |.$!    DCD    556011388
+        0x01004ce4:    20206b00    .k      DCD    538995456
+        0x01004ce8:    4070ab49    I.p@    DCD    1081125705
+        0x01004cec:    202009ce    ..      DCD    538970574
+        0x01004cf0:    4070ab49    I.p@    DCD    1081125705
+        0x01004cf4:    20200fce    ..      DCD    538972110
+        0x01004cf8:    e26fab49    I.o.    DCD    3798969161
+        0x01004cfc:    00c05d02    .]..    DCD    12606722
+        0x01004d00:    01c07180    .q..    DCD    29389184
+        0x01004d04:    20207c00    .|      DCD    538999808
+        0x01004d08:    e46f8b4a    J.o.    DCD    3832515402
+        0x01004d0c:    44685902    .YhD    DCD    1147689218
+        0x01004d10:    40985d01    .].@    DCD    1083727105
+        0x01004d14:    e46700fe    ..g.    DCD    3831955710
+        0x01004d18:    e61f5902    .Y..    DCD    3860814082
+        0x01004d1c:    2220007c    |. "    DCD    572522620
+        0x01004d20:    44688bca    ..hD    DCD    1147702218
+        0x01004d24:    40180010    ...@    DCD    1075314704
+        0x01004d28:    46980484    ...F    DCD    1184367748
+        0x01004d2c:    4220007c    |. B    DCD    1109393532
+        0x01004d30:    202043c7    .C      DCD    538985415
+        0x01004d34:    e46f0946    F.o.    DCD    3832482118
+        0x01004d38:    44685b02    .[hD    DCD    1147689730
+        0x01004d3c:    40985d01    .].@    DCD    1083727105
+        0x01004d40:    e46700fe    ..g.    DCD    3831955710
+        0x01004d44:    e61f5b02    .[..    DCD    3860814594
+        0x01004d48:    2220007c    |. "    DCD    572522620
+        0x01004d4c:    44688bca    ..hD    DCD    1147702218
+        0x01004d50:    40180014    ...@    DCD    1075314708
+        0x01004d54:    46980484    ...F    DCD    1184367748
+        0x01004d58:    4220007c    |. B    DCD    1109393532
+        0x01004d5c:    202047c7    .G      DCD    538986439
+        0x01004d60:    3f790946    F.y?    DCD    1064896838
+        0x01004d64:    44702c80    .,pD    DCD    1148202112
+        0x01004d68:    402000e1    .. @    DCD    1075839201
+        0x01004d6c:    40206479    yd @    DCD    1075864697
+        0x01004d70:    5778f85f    _.xW    DCD    1467545695
+        0x01004d74:    4020007c    |. @    DCD    1075839100
+        0x01004d78:    2120c05a    Z. !    DCD    555794522
+        0x01004d7c:    40208357    W. @    DCD    1075872599
+        0x01004d80:    4020274c    L' @    DCD    1075849036
+        0x01004d84:    4020ed57    W. @    DCD    1075899735
+        0x01004d88:    2c246358    Xc$,    DCD    740582232
+        0x01004d8c:    56207557    Wu V    DCD    1444967767
+        0x01004d90:    e26f0c83    ..o.    DCD    3798928515
+        0x01004d94:    5a24f44b    K.$Z    DCD    1512371275
+        0x01004d98:    40209900    .. @    DCD    1075878144
+        0x01004d9c:    36209157    W. 6    DCD    908104023
+        0x01004da0:    16c562d7    .b..    DCD    382034647
+        0x01004da4:    20206257    Wb      DCD    538993239
+        0x01004da8:    20796f57    Woy     DCD    544829271
+        0x01004dac:    56782c00    .,xV    DCD    1450716160
+        0x01004db0:    602000fc    .. `    DCD    1612710140
+        0x01004db4:    37780000    ..x7    DCD    930611200
+        0x01004db8:    4020007c    |. @    DCD    1075839100
+        0x01004dbc:    56209b58    X. V    DCD    1444977496
+        0x01004dc0:    e26f0c83    ..o.    DCD    3798928515
+        0x01004dc4:    5a24f44b    K.$Z    DCD    1512371275
+        0x01004dc8:    36209900    .. 6    DCD    908105984
+        0x01004dcc:    16c562d7    .b..    DCD    382034647
+        0x01004dd0:    20206257    Wb      DCD    538993239
+        0x01004dd4:    42186f57    Wo.B    DCD    1108897623
+        0x01004dd8:    4020007e    ~. @    DCD    1075839102
+        0x01004ddc:    301c2b7d    }+.0    DCD    807152509
+        0x01004de0:    2079007e    ~.y     DCD    544800894
+        0x01004de4:    40202c7e    ~, @    DCD    1075850366
+        0x01004de8:    3f79147d    }.y?    DCD    1064899709
+        0x01004dec:    40202cfe    ., @    DCD    1075850494
+        0x01004df0:    4020764a    Jv @    DCD    1075869258
+        0x01004df4:    7420147d    }. t    DCD    1948259453
+        0x01004df8:    40200000    .. @    DCD    1075838976
+        0x01004dfc:    2020bb00    ..      DCD    539015936
+        0x01004e00:    421b2f4a    J/.B    DCD    1109077834
+        0x01004e04:    4020007e    ~. @    DCD    1075839102
+        0x01004e08:    2020ba00    ..      DCD    539015680
+        0x01004e0c:    e46fe94a    J.o.    DCD    3832539466
+        0x01004e10:    e31f4e40    @N..    DCD    3810479680
+        0x01004e14:    4020007e    ~. @    DCD    1075839102
+        0x01004e18:    021e2b7d    }+..    DCD    35531645
+        0x01004e1c:    4020007e    ~. @    DCD    1075839102
+        0x01004e20:    421b147d    }..B    DCD    1109070973
+        0x01004e24:    40200004    .. @    DCD    1075838980
+        0x01004e28:    2020ba00    ..      DCD    539015680
+        0x01004e2c:    4020674b    Kg @    DCD    1075865419
+        0x01004e30:    0098147d    }...    DCD    9966717
+        0x01004e34:    3f79000c    ..y?    DCD    1064894476
+        0x01004e38:    2020108c    ..      DCD    538972300
+        0x01004e3c:    40201f7d    }. @    DCD    1075847037
+        0x01004e40:    4020c468    h. @    DCD    1075889256
+        0x01004e44:    4020d760    `. @    DCD    1075894112
+        0x01004e48:    2020c200    ..      DCD    539017728
+        0x01004e4c:    75200a40    @. u    DCD    1965034048
+        0x01004e50:    20200080    ..      DCD    538968192
+        0x01004e54:    30209a7b    {. 0    DCD    807443067
+        0x01004e58:    8970d480    ..p.    DCD    2305873024
+        0x01004e5c:    0020d455    U. .    DCD    2151509
+        0x01004e60:    89700400    ..p.    DCD    2305819648
+        0x01004e64:    0020d255    U. .    DCD    2150997
+        0x01004e68:    89700400    ..p.    DCD    2305819648
+        0x01004e6c:    0020d155    U. .    DCD    2150741
+        0x01004e70:    e26f0400    ..o.    DCD    3798926336
+        0x01004e74:    00c0df41    A...    DCD    12640065
+        0x01004e78:    00c0d200    ....    DCD    12636672
+        0x01004e7c:    01c0e280    ....    DCD    29418112
+        0x01004e80:    01c0d200    ....    DCD    29413888
+        0x01004e84:    02c0e280    ....    DCD    46195328
+        0x01004e88:    10c0e200    ....    DCD    281076224
+        0x01004e8c:    8970e200    ..p.    DCD    2305876480
+        0x01004e90:    8970d055    U.p.    DCD    2305871957
+        0x01004e94:    0018e056    V...    DCD    1630294
+        0x01004e98:    0018082a    *...    DCD    1574954
+        0x01004e9c:    5078002a    *.xP    DCD    1350041642
+        0x01004ea0:    507800fc    ..xP    DCD    1350041852
+        0x01004ea4:    2f78007c    |.x/    DCD    796393596
+        0x01004ea8:    8970007c    |.p.    DCD    2305818748
+        0x01004eac:    89700002    ..p.    DCD    2305818626
+        0x01004eb0:    89700001    ..p.    DCD    2305818625
+        0x01004eb4:    89700000    ..p.    DCD    2305818624
+        0x01004eb8:    89700003    ..p.    DCD    2305818627
+        0x01004ebc:    e26f7004    .po.    DCD    3798953988
+        0x01004ec0:    20790689    ..y     DCD    544802441
+        0x01004ec4:    e267007e    ~.g.    DCD    3798401150
+        0x01004ec8:    60200689    .. `    DCD    1612711561
+        0x01004ecc:    89700000    ..p.    DCD    2305818624
+        0x01004ed0:    8970d055    U.p.    DCD    2305871957
+        0x01004ed4:    2020c056    V.      DCD    539017302
+        0x01004ed8:    4260d400    ..`B    DCD    1113641984
+        0x01004edc:    40201700    .. @    DCD    1075844864
+        0x01004ee0:    40202a49    I* @    DCD    1075849801
+        0x01004ee4:    00588049    I.X.    DCD    5800009
+        0x01004ee8:    40200005    .. @    DCD    1075838981
+        0x01004eec:    e26f8e4a    J.o.    DCD    3798961738
+        0x01004ef0:    20790689    ..y     DCD    544802441
+        0x01004ef4:    e267007e    ~.g.    DCD    3798401150
+        0x01004ef8:    20200689    ..      DCD    538969737
+        0x01004efc:    89703749    I7p.    DCD    2305832777
+        0x01004f00:    75207c06    .| u    DCD    1965063174
+        0x01004f04:    00580080    ..X.    DCD    5767296
+        0x01004f08:    e4670000    ..g.    DCD    3831955456
+        0x01004f0c:    431cdd41    A..C    DCD    1125965121
+        0x01004f10:    e867007e    ~.g.    DCD    3899064446
+        0x01004f14:    60209440    @. `    DCD    1612747840
+        0x01004f18:    20200000    ..      DCD    538968064
+        0x01004f1c:    00587f4b    K.X.    DCD    5799755
+        0x01004f20:    e4670801    ..g.    DCD    3831957505
+        0x01004f24:    0058f441    A.X.    DCD    5829697
+        0x01004f28:    e4672701    .'g.    DCD    3831965441
+        0x01004f2c:    0058f641    A.X.    DCD    5830209
+        0x01004f30:    e4673b01    .;g.    DCD    3831970561
+        0x01004f34:    0058fe41    A.X.    DCD    5832257
+        0x01004f38:    e4674501    .Eg.    DCD    3831973121
+        0x01004f3c:    0058fa41    A.X.    DCD    5831233
+        0x01004f40:    e4675a01    .Zg.    DCD    3831978497
+        0x01004f44:    0058ea41    A.X.    DCD    5827137
+        0x01004f48:    e4676c01    .lg.    DCD    3831983105
+        0x01004f4c:    0058f241    A.X.    DCD    5829185
+        0x01004f50:    e4677501    .ug.    DCD    3831985409
+        0x01004f54:    40204145    EA @    DCD    1075855685
+        0x01004f58:    4020af4d    M. @    DCD    1075883853
+        0x01004f5c:    4020bc4d    M. @    DCD    1075887181
+        0x01004f60:    20202a4c    L*      DCD    538978892
+        0x01004f64:    40204d50    PM @    DCD    1075858768
+        0x01004f68:    40207101    .q @    DCD    1075867905
+        0x01004f6c:    7a244856    VH$z    DCD    2049198166
+        0x01004f70:    20200000    ..      DCD    538968064
+        0x01004f74:    44683d4e    N=hD    DCD    1147682126
+        0x01004f78:    e46ff44f    O.o.    DCD    3832542287
+        0x01004f7c:    4698f64f    O..F    DCD    1184429647
+        0x01004f80:    6220007e    ~. b    DCD    1646264446
+        0x01004f84:    20200080    ..      DCD    538968192
+        0x01004f88:    40200c01    .. @    DCD    1075842049
+        0x01004f8c:    00580c01    ..X.    DCD    5770241
+        0x01004f90:    e4670018    ..g.    DCD    3831955480
+        0x01004f94:    e467f04f    O.g.    DCD    3832016975
+        0x01004f98:    e467f44f    O.g.    DCD    3832017999
+        0x01004f9c:    e46ff64f    O.o.    DCD    3832542799
+        0x01004fa0:    e467f24f    O.g.    DCD    3832017487
+        0x01004fa4:    e46f4a80    .Jo.    DCD    3832498816
+        0x01004fa8:    e467f04f    O.g.    DCD    3832016975
+        0x01004fac:    e21f4880    .H..    DCD    3793700992
+        0x01004fb0:    60200014    .. `    DCD    1612709908
+        0x01004fb4:    40200000    .. @    DCD    1075838976
+        0x01004fb8:    00580c01    ..X.    DCD    5770241
+        0x01004fbc:    e467001c    ..g.    DCD    3831955484
+        0x01004fc0:    e467f04f    O.g.    DCD    3832016975
+        0x01004fc4:    e467f44f    O.g.    DCD    3832017999
+        0x01004fc8:    e46ff64f    O.o.    DCD    3832542799
+        0x01004fcc:    e467f24f    O.g.    DCD    3832017487
+        0x01004fd0:    e46f4a80    .Jo.    DCD    3832498816
+        0x01004fd4:    e467f04f    O.g.    DCD    3832016975
+        0x01004fd8:    e21f4880    .H..    DCD    3793700992
+        0x01004fdc:    60200014    .. `    DCD    1612709908
+        0x01004fe0:    621a0000    ...b    DCD    1645871104
+        0x01004fe4:    04c0007e    ~...    DCD    79691902
+        0x01004fe8:    01c03181    .1..    DCD    29372801
+        0x01004fec:    0ac02f01    ./..    DCD    180367105
+        0x01004ff0:    04c03801    .8..    DCD    79706113
+        0x01004ff4:    20202d01    .-      DCD    538979585
+        0x01004ff8:    4020df4d    M. @    DCD    1075896141
+        0x01004ffc:    20201101    ..      DCD    538972417
+        0x01005000:    4a70024e    N.pJ    DCD    1248854606
+        0x01005004:    202000d0    ..      DCD    538968272
+        0x01005008:    e26ffb4d    M.o.    DCD    3798989645
+        0x0100500c:    5a24cf4a    J.$Z    DCD    1512361802
+        0x01005010:    40203601    .6 @    DCD    1075852801
+        0x01005014:    4a701c01    ..pJ    DCD    1248861185
+        0x01005018:    202006d0    ..      DCD    538969808
+        0x0100501c:    4a70084e    N.pJ    DCD    1248856142
+        0x01005020:    602006d0    .. `    DCD    1612711632
+        0x01005024:    40200000    .. @    DCD    1075838976
+        0x01005028:    40201c01    .. @    DCD    1075846145
+        0x0100502c:    2020f903    ..      DCD    539031811
+        0x01005030:    4020284e    N( @    DCD    1075849294
+        0x01005034:    20203d01    .=      DCD    538983681
+        0x01005038:    e26fc350    P.o.    DCD    3798975312
+        0x0100503c:    7a20d04a    J. z    DCD    2048970826
+        0x01005040:    e01f0000    ....    DCD    3760128000
+        0x01005044:    e267ffff    ..g.    DCD    3798466559
+        0x01005048:    7a24d04a    J.$z    DCD    2049232970
+        0x0100504c:    e46f0000    ..o.    DCD    3832479744
+        0x01005050:    80c25246    FR..    DCD    2160218694
+        0x01005054:    6020644d    Md `    DCD    1612735565
+        0x01005058:    40200000    .. @    DCD    1075838976
+        0x0100505c:    7420114f    O. t    DCD    1948258639
+        0x01005060:    221a0000    ..."    DCD    572129280
+        0x01005064:    e467007e    ~.g.    DCD    3831955582
+        0x01005068:    40207146    Fq @    DCD    1075867974
+        0x0100506c:    e2675101    .Qg.    DCD    3798421761
+        0x01005070:    44687046    FphD    DCD    1147695174
+        0x01005074:    44607404    .t`D    DCD    1147171844
+        0x01005078:    40207346    Fs @    DCD    1075868486
+        0x0100507c:    3a246c5b    [l$:    DCD    975465563
+        0x01005080:    e26f8b4a    J.o.    DCD    3798960970
+        0x01005084:    20209e04    ..      DCD    539008516
+        0x01005088:    e26f4250    PBo.    DCD    3798942288
+        0x0100508c:    3a24ed4b    K.$:    DCD    975498571
+        0x01005090:    221f5501    .U."    DCD    572478721
+        0x01005094:    6020007e    ~. `    DCD    1612710014
+        0x01005098:    421a0000    ...B    DCD    1109000192
+        0x0100509c:    6020007e    ~. `    DCD    1612710014
+        0x010050a0:    e2ef0000    ....    DCD    3807313920
+        0x010050a4:    e2670300    ..g.    DCD    3798401792
+        0x010050a8:    2020f24b    K.      DCD    539030091
+        0x010050ac:    40201f50    P. @    DCD    1075846992
+        0x010050b0:    3424da02    ..$4    DCD    874830338
+        0x010050b4:    e26f6a01    .jo.    DCD    3798952449
+        0x010050b8:    e21ff24b    K...    DCD    3793744459
+        0x010050bc:    ec6f000e    ..o.    DCD    3966697486
+        0x010050c0:    efaf0e81    ....    DCD    4021227137
+        0x010050c4:    2020ffff    ..      DCD    539033599
+        0x010050c8:    e26f6a81    .jo.    DCD    3798952577
+        0x010050cc:    3a24f34b    K.$:    DCD    975500107
+        0x010050d0:    e26f6a01    .jo.    DCD    3798952449
+        0x010050d4:    00c0ef4f    O...    DCD    12644175
+        0x010050d8:    e26f6a81    .jo.    DCD    3798952577
+        0x010050dc:    80c09644    D...    DCD    2160105028
+        0x010050e0:    20206801    .h      DCD    538994689
+        0x010050e4:    7fc04d4d    MM..    DCD    2143309133
+        0x010050e8:    20204dcd    .M      DCD    538987981
+        0x010050ec:    40206a01    .j @    DCD    1075866113
+        0x010050f0:    2020bc67    g.      DCD    539016295
+        0x010050f4:    40204b4d    MK @    DCD    1075858253
+        0x010050f8:    40207401    .t @    DCD    1075868673
+        0x010050fc:    40207101    .q @    DCD    1075867905
+        0x01005100:    7a244856    VH$z    DCD    2049198166
+        0x01005104:    20200000    ..      DCD    538968064
+        0x01005108:    40203d4e    N= @    DCD    1075854670
+        0x0100510c:    21200c03    .. !    DCD    555748355
+        0x01005110:    2020544d    MT      DCD    538989645
+        0x01005114:    6020564d    MV `    DCD    1612731981
+        0x01005118:    40200000    .. @    DCD    1075838976
+        0x0100511c:    0a70d74d    M.p.    DCD    175167309
+        0x01005120:    e46f07ff    ..o.    DCD    3832481791
+        0x01005124:    7a20fb04    .. z    DCD    2048981764
+        0x01005128:    e21f0000    ....    DCD    3793682432
+        0x0100512c:    e46f0072    r.o.    DCD    3832479858
+        0x01005130:    269ffb04    ...&    DCD    648018692
+        0x01005134:    e467007e    ~.g.    DCD    3831955582
+        0x01005138:    221ffb04    ..."    DCD    572521220
+        0x0100513c:    4020007e    ~. @    DCD    1075839102
+        0x01005140:    e46f2602    .&o.    DCD    3832489474
+        0x01005144:    e21ffd04    ....    DCD    3793747204
+        0x01005148:    4020000c    .. @    DCD    1075838988
+        0x0100514c:    c218c167    g...    DCD    3256402279
+        0x01005150:    e467007e    ~.g.    DCD    3831955582
+        0x01005154:    4020fd04    .. @    DCD    1075903748
+        0x01005158:    2020b967    g.      DCD    539015527
+        0x0100515c:    e26f7601    .vo.    DCD    3798955521
+        0x01005160:    13c0ff0a    ....    DCD    331415306
+        0x01005164:    06c0f881    ....    DCD    113309825
+        0x01005168:    3bc09301    ...;    DCD    1002476289
+        0x0100516c:    3bc09c01    ...;    DCD    1002478593
+        0x01005170:    3cc0a281    ...<    DCD    1019257473
+        0x01005174:    0ac0a701    ....    DCD    180397825
+        0x01005178:    7fc0e181    ....    DCD    2143347073
+        0x0100517c:    20c0e401    ...     DCD    549512193
+        0x01005180:    7fc05701    .W..    DCD    2143311617
+        0x01005184:    20209181    ..      DCD    539005313
+        0x01005188:    4b705c4e    N\pK    DCD    1265654862
+        0x0100518c:    202000f3    ..      DCD    538968307
+        0x01005190:    221a0c50    P.."    DCD    572132432
+        0x01005194:    e2ef0006    ....    DCD    3807313926
+        0x01005198:    00c00300    ....    DCD    12583680
+        0x0100519c:    00c01c4f    O...    DCD    12590159
+        0x010051a0:    01c01fcf    ....    DCD    29368271
+        0x010051a4:    01c0254f    O%..    DCD    29369679
+        0x010051a8:    20209a81    ..      DCD    539007617
+        0x010051ac:    00581c50    P.X.    DCD    5774416
+        0x010051b0:    20200100    ..      DCD    538968320
+        0x010051b4:    40d8204f    O .@    DCD    1087905871
+        0x010051b8:    40200c00    .. @    DCD    1075842048
+        0x010051bc:    c0184d5b    [M..    DCD    3222818139
+        0x010051c0:    0058fe8b    ..X.    DCD    5832331
+        0x010051c4:    e4e70000    ....    DCD    3840344064
+        0x010051c8:    20200500    ..      DCD    538969344
+        0x010051cc:    40201f50    P. @    DCD    1075846992
+        0x010051d0:    4020ab01    .. @    DCD    1075882753
+        0x010051d4:    0058c801    ..X.    DCD    5818369
+        0x010051d8:    e4e70000    ....    DCD    3840344064
+        0x010051dc:    20200500    ..      DCD    538969344
+        0x010051e0:    e2efda01    ....    DCD    3807369729
+        0x010051e4:    40200300    .. @    DCD    1075839744
+        0x010051e8:    4020af01    .. @    DCD    1075883777
+        0x010051ec:    2020b601    ..      DCD    539014657
+        0x010051f0:    4020da01    .. @    DCD    1075894785
+        0x010051f4:    2858cc01    ..X(    DCD    676908033
+        0x010051f8:    e6e70200    ....    DCD    3873899008
+        0x010051fc:    60200500    .. `    DCD    1612711168
+        0x01005200:    e2670000    ..g.    DCD    3798401024
+        0x01005204:    4020960a    .. @    DCD    1075877386
+        0x01005208:    2859cc01    ..Y(    DCD    676973569
+        0x0100520c:    e8e70203    ....    DCD    3907453443
+        0x01005210:    e26f0500    ..o.    DCD    3798926592
+        0x01005214:    e6e7960a    ....    DCD    3873936906
+        0x01005218:    60200500    .. `    DCD    1612711168
+        0x0100521c:    40200000    .. @    DCD    1075838976
+        0x01005220:    4020cc01    .. @    DCD    1075891201
+        0x01005224:    4020c801    .. @    DCD    1075890177
+        0x01005228:    0058c801    ..X.    DCD    5818369
+        0x0100522c:    e4e70000    ....    DCD    3840344064
+        0x01005230:    40180500    ...@    DCD    1075315968
+        0x01005234:    4020ff85    .. @    DCD    1075904389
+        0x01005238:    c0184d5b    [M..    DCD    3222818139
+        0x0100523c:    e2ef048c    ....    DCD    3807315084
+        0x01005240:    82c20600    ....    DCD    2193753600
+        0x01005244:    82c2c301    ....    DCD    2193801985
+        0x01005248:    4018c381    ...@    DCD    1075364737
+        0x0100524c:    60200184    .. `    DCD    1612710276
+        0x01005250:    40200000    .. @    DCD    1075838976
+        0x01005254:    295acc01    ..Z)    DCD    693816321
+        0x01005258:    f0e70202    ....    DCD    4041671170
+        0x0100525c:    40180500    ...@    DCD    1075315968
+        0x01005260:    6020ff85    .. `    DCD    1612775301
+        0x01005264:    e2ef0000    ....    DCD    3807313920
+        0x01005268:    e21f0300    ....    DCD    3793683200
+        0x0100526c:    e2e70072    r...    DCD    3806789746
+        0x01005270:    20200500    ..      DCD    538969344
+        0x01005274:    4020ed67    g. @    DCD    1075899751
+        0x01005278:    44e0cf01    ...D    DCD    1155583745
+        0x0100527c:    60200500    .. `    DCD    1612711168
+        0x01005280:    e46f0000    ..o.    DCD    3832479744
+        0x01005284:    00988e44    D...    DCD    9997892
+        0x01005288:    e4ef000c    ....    DCD    3840868364
+        0x0100528c:    7a200600    .. z    DCD    2048919040
+        0x01005290:    e01f0000    ....    DCD    3760128000
+        0x01005294:    e2ef0184    ....    DCD    3807314308
+        0x01005298:    c0980600    ....    DCD    3231188480
+        0x0100529c:    e2ef008c    ....    DCD    3807314060
+        0x010052a0:    c0980600    ....    DCD    3231188480
+        0x010052a4:    c218008c    ....    DCD    3256352908
+        0x010052a8:    2020000a    ..      DCD    538968074
+        0x010052ac:    4460d101    ..`D    DCD    1147195649
+        0x010052b0:    0a709e0a    ..p.    DCD    175152650
+        0x010052b4:    005829ff    .)X.    DCD    5777919
+        0x010052b8:    40200200    .. @    DCD    1075839488
+        0x010052bc:    4468a550    P.hD    DCD    1147708752
+        0x010052c0:    44e09e0a    ...D    DCD    1155571210
+        0x010052c4:    20200a00    ..      DCD    538970624
+        0x010052c8:    e6efb967    g...    DCD    3874470247
+        0x010052cc:    e6670300    ..g.    DCD    3865510656
+        0x010052d0:    2020aa40    @.      DCD    539011648
+        0x010052d4:    e2ef1f50    P...    DCD    3807321936
+        0x010052d8:    00c00300    ....    DCD    12583680
+        0x010052dc:    00c0ef01    ....    DCD    12644097
+        0x010052e0:    01c0e981    ....    DCD    29419905
+        0x010052e4:    2020f501    ..      DCD    539030785
+        0x010052e8:    e4ef1c50    P...    DCD    3840875600
+        0x010052ec:    e21f0300    ....    DCD    3793683200
+        0x010052f0:    e2ef0024    $...    DCD    3807313956
+        0x010052f4:    e21f0300    ....    DCD    3793683200
+        0x010052f8:    40d80022    "..@    DCD    1087897634
+        0x010052fc:    20200000    ..      DCD    538968064
+        0x01005300:    e4ef2a50    P*..    DCD    3840879184
+        0x01005304:    e21f0300    ....    DCD    3793683200
+        0x01005308:    e2ef000a    ....    DCD    3807313930
+        0x0100530c:    e21f0300    ....    DCD    3793683200
+        0x01005310:    40200072    r. @    DCD    1075839090
+        0x01005314:    2020da67    g.      DCD    539023975
+        0x01005318:    e2ef1f50    P...    DCD    3807321936
+        0x0100531c:    e21f0300    ....    DCD    3793683200
+        0x01005320:    2020002c    ,.      DCD    538968108
+        0x01005324:    40201f50    P. @    DCD    1075846992
+        0x01005328:    20201f50    P.      DCD    538976080
+        0x0100532c:    e26f854d    M.o.    DCD    3798959437
+        0x01005330:    81c27946    Fy..    DCD    2177005894
+        0x01005334:    e26fec82    ..o.    DCD    3798985858
+        0x01005338:    83c37946    Fy..    DCD    2210625862
+        0x0100533c:    40180080    ...@    DCD    1075314816
+        0x01005340:    40d8fdff    ...@    DCD    1087962623
+        0x01005344:    4020c800    .. @    DCD    1075890176
+        0x01005348:    4268b57d    }.hB    DCD    1114158461
+        0x0100534c:    40207a46    Fz @    DCD    1075870278
+        0x01005350:    e21fb57d    }...    DCD    3793728893
+        0x01005354:    42180022    "..B    DCD    1108869154
+        0x01005358:    269a007e    ~..&    DCD    647626878
+        0x0100535c:    e267007e    ~.g.    DCD    3798401150
+        0x01005360:    44687a46    FzhD    DCD    1147697734
+        0x01005364:    40187b46    F{.@    DCD    1075346246
+        0x01005368:    4020ff85    .. @    DCD    1075904389
+        0x0100536c:    3a204d5b    [M :    DCD    975195483
+        0x01005370:    48e81702    ...H    DCD    1223169794
+        0x01005374:    28590600    ..Y(    DCD    676922880
+        0x01005378:    46980203    ...F    DCD    1184367107
+        0x0100537c:    2224007c    |.$"    DCD    572784764
+        0x01005380:    e2ef1782    ....    DCD    3807319938
+        0x01005384:    82c20600    ....    DCD    2193753600
+        0x01005388:    82c21382    ....    DCD    2193757058
+        0x0100538c:    2020014f    O.      DCD    538968399
+        0x01005390:    40201702    .. @    DCD    1075844866
+        0x01005394:    4468ff03    ..hD    DCD    1147731715
+        0x01005398:    40207b46    F{ @    DCD    1075870534
+        0x0100539c:    20204d5e    ^M      DCD    538987870
+        0x010053a0:    4670034f    O.pF    DCD    1181745999
+        0x010053a4:    0b70007a    z.p.    DCD    191889530
+        0x010053a8:    40200101    .. @    DCD    1075839233
+        0x010053ac:    2020e050    P.      DCD    539025488
+        0x010053b0:    e26f1c50    P.o.    DCD    3798932560
+        0x010053b4:    e467ff0a    ..g.    DCD    3832020746
+        0x010053b8:    4b70fa4b    K.pK    DCD    1265695307
+        0x010053bc:    e26f02f9    ..o.    DCD    3798926073
+        0x010053c0:    e467000b    ..g.    DCD    3831955467
+        0x010053c4:    5060fb4b    K.`P    DCD    1348533067
+        0x010053c8:    50689e0a    ..hP    DCD    1349033482
+        0x010053cc:    40209e0a    .. @    DCD    1075879434
+        0x010053d0:    e86fb567    g.o.    DCD    3899635047
+        0x010053d4:    e8e7f94b    K...    DCD    3907516747
+        0x010053d8:    60200a00    .. `    DCD    1612712448
+        0x010053dc:    e4670000    ..g.    DCD    3831955456
+        0x010053e0:    e26ffb4b    K.o.    DCD    3798989643
+        0x010053e4:    e267ff0a    ..g.    DCD    3798466314
+        0x010053e8:    4b70fa4b    K.pK    DCD    1265695307
+        0x010053ec:    506002f9    ..`P    DCD    1348469497
+        0x010053f0:    50689e0a    ..hP    DCD    1349033482
+        0x010053f4:    40209e0a    .. @    DCD    1075879434
+        0x010053f8:    e86fb567    g.o.    DCD    3899635047
+        0x010053fc:    e8e7f94b    K...    DCD    3907516747
+        0x01005400:    60200a00    .. `    DCD    1612712448
+        0x01005404:    40da0000    ...@    DCD    1088028672
+        0x01005408:    40200000    .. @    DCD    1075838976
+        0x0100540c:    3a244856    VH$:    DCD    975456342
+        0x01005410:    40208b4a    J. @    DCD    1075874634
+        0x01005414:    40da5856    VX.@    DCD    1088051286
+        0x01005418:    e0d8000c    ....    DCD    3772252172
+        0x0100541c:    20200000    ..      DCD    538968064
+        0x01005420:    e26f2156    V!o.    DCD    3798933846
+        0x01005424:    3a24ed4b    K.$:    DCD    975498571
+        0x01005428:    40200957    W. @    DCD    1075841367
+        0x0100542c:    4a700957    W.pJ    DCD    1248856407
+        0x01005430:    4a7001db    ..pJ    DCD    1248854491
+        0x01005434:    005800dc    ..X.    DCD    5767388
+        0x01005438:    f0670000    ..g.    DCD    4033282048
+        0x0100543c:    0058d14a    J.X.    DCD    5820746
+        0x01005440:    e4671b00    ..g.    DCD    3831962368
+        0x01005444:    6020d94a    J. `    DCD    1612765514
+        0x01005448:    40200000    .. @    DCD    1075838976
+        0x0100544c:    2378ba49    I.x#    DCD    595114569
+        0x01005450:    247800fc    ..x$    DCD    611844348
+        0x01005454:    800900fc    ....    DCD    2148073724
+        0x01005458:    89190800    ....    DCD    2300119040
+        0x0100545c:    e267007e    ~.g.    DCD    3798401150
+        0x01005460:    8009d502    ....    DCD    2148128002
+        0x01005464:    89190800    ....    DCD    2300119040
+        0x01005468:    e2e7007e    ~...    DCD    3806789758
+        0x0100546c:    e21f0500    ....    DCD    3793683712
+        0x01005470:    3a200072    r. :    DCD    975175794
+        0x01005474:    20208b58    X.      DCD    539003736
+        0x01005478:    40208758    X. @    DCD    1075873624
+        0x0100547c:    4020a358    X. @    DCD    1075880792
+        0x01005480:    42681549    I.hB    DCD    1114117449
+        0x01005484:    40201700    .. @    DCD    1075844864
+        0x01005488:    00201c49    I. .    DCD    2104393
+        0x0100548c:    4020dc05    .. @    DCD    1075895301
+        0x01005490:    28782149    I!x(    DCD    678961481
+        0x01005494:    60d9007c    |..`    DCD    1624834172
+        0x01005498:    20207c15    .|      DCD    538999829
+        0x0100549c:    40206958    Xi @    DCD    1075865944
+        0x010054a0:    4020af57    W. @    DCD    1075883863
+        0x010054a4:    20205902    .Y      DCD    538990850
+        0x010054a8:    3620a758    X. 6    DCD    908109656
+        0x010054ac:    16c5ea80    ....    DCD    382069376
+        0x010054b0:    2020ea00    ..      DCD    539027968
+        0x010054b4:    e26fbe57    W.o.    DCD    3798974039
+        0x010054b8:    3a24ed4b    K.$:    DCD    975498571
+        0x010054bc:    e26fb358    X.o.    DCD    3798971224
+        0x010054c0:    0008db4a    J...    DCD    580426
+        0x010054c4:    e2ef0886    ....    DCD    3807316102
+        0x010054c8:    e21f0600    ....    DCD    3793683968
+        0x010054cc:    00080072    r...    DCD    524402
+        0x010054d0:    22200886    .. "    DCD    572524678
+        0x010054d4:    2020bcd8    ..      DCD    539016408
+        0x010054d8:    e26fb958    X.o.    DCD    3798972760
+        0x010054dc:    3a24ed4b    K.$:    DCD    975498571
+        0x010054e0:    e26fc458    X.o.    DCD    3798975576
+        0x010054e4:    00c05644    DV..    DCD    12604996
+        0x010054e8:    e26fd3d8    ..o.    DCD    3798979544
+        0x010054ec:    f21f5744    DW..    DCD    4062140228
+        0x010054f0:    eb1f007e    ~...    DCD    3944677502
+        0x010054f4:    e26700fe    ..g.    DCD    3798401278
+        0x010054f8:    4268db4a    J.hB    DCD    1114168138
+        0x010054fc:    40184143    CA.@    DCD    1075331395
+        0x01005500:    e26706fe    ..g.    DCD    3798402814
+        0x01005504:    ec6fdc4a    J.o.    DCD    3966753866
+        0x01005508:    ec677244    Drg.    DCD    3966202436
+        0x0100550c:    4218dd4a    J..B    DCD    1108925770
+        0x01005510:    c0d80072    r...    DCD    3235381362
+        0x01005514:    40204243    CB @    DCD    1075855939
+        0x01005518:    2020cf7c    |.      DCD    539021180
+        0x0100551c:    e26fde58    X.o.    DCD    3798982232
+        0x01005520:    3a24ed4b    K.$:    DCD    975498571
+        0x01005524:    40d8f758    X..@    DCD    1087960920
+        0x01005528:    e26f0400    ..o.    DCD    3798926336
+        0x0100552c:    3a7d5744    DW}:    DCD    981292868
+        0x01005530:    42600604    ..`B    DCD    1113589252
+        0x01005534:    4268db4a    J.hB    DCD    1114168138
+        0x01005538:    40186143    Ca.@    DCD    1075339587
+        0x0100553c:    e26706fe    ..g.    DCD    3798402814
+        0x01005540:    ec6fdc4a    J.o.    DCD    3966753866
+        0x01005544:    ec677244    Drg.    DCD    3966202436
+        0x01005548:    c0d8dd4a    J...    DCD    3235437898
+        0x0100554c:    42186243    Cb.B    DCD    1108894275
+        0x01005550:    40200072    r. @    DCD    1075839090
+        0x01005554:    4020cf7c    |. @    DCD    1075892092
+        0x01005558:    2020a158    X.      DCD    539009368
+        0x0100555c:    4020e25a    Z. @    DCD    1075896922
+        0x01005560:    16c6c95a    Z...    DCD    382126426
+        0x01005564:    40200000    .. @    DCD    1075838976
+        0x01005568:    e26f9a59    Y.o.    DCD    3798964825
+        0x0100556c:    ef2fd502    ../.    DCD    4012889346
+        0x01005570:    207904fe    ..y     DCD    544802046
+        0x01005574:    e31f2a80    .*..    DCD    3810470528
+        0x01005578:    4298007e    ~..B    DCD    1117257854
+        0x0100557c:    ef2f00fe    ../.    DCD    4012835070
+        0x01005580:    207902fe    ..y     DCD    544801534
+        0x01005584:    07c60f80    ....    DCD    130420608
+        0x01005588:    e26f0080    ..o.    DCD    3798925440
+        0x0100558c:    3a20d602    .. :    DCD    975230466
+        0x01005590:    e26f9902    ..o.    DCD    3798964482
+        0x01005594:    02c33b04    .;..    DCD    46349060
+        0x01005598:    40209902    .. @    DCD    1075878146
+        0x0100559c:    40204273    sB @    DCD    1075855987
+        0x010055a0:    3a7db272    r.}:    DCD    981316210
+        0x010055a4:    7a240f00    ..$z    DCD    2049183488
+        0x010055a8:    42680000    ..hB    DCD    1114112000
+        0x010055ac:    40795204    .Ry@    DCD    1081692676
+        0x010055b0:    42600204    ..`B    DCD    1113588228
+        0x010055b4:    e26f5204    .Ro.    DCD    3798946308
+        0x010055b8:    7a24ed4b    K.$z    DCD    2049240395
+        0x010055bc:    20200000    ..      DCD    538968064
+        0x010055c0:    e26f9f02    ..o.    DCD    3798966018
+        0x010055c4:    7a20d602    .. z    DCD    2048972290
+        0x010055c8:    e26f0000    ..o.    DCD    3798925312
+        0x010055cc:    e02fd502    ../.    DCD    3761231106
+        0x010055d0:    20200106    ..      DCD    538968326
+        0x010055d4:    e02fc782    ../.    DCD    3761227650
+        0x010055d8:    20200206    ..      DCD    538968582
+        0x010055dc:    6020a782    .. `    DCD    1612752770
+        0x010055e0:    e46f0000    ..o.    DCD    3832479744
+        0x010055e4:    82c1d902    ....    DCD    2193742082
+        0x010055e8:    e6ef0000    ....    DCD    3874422784
+        0x010055ec:    e6670600    ..g.    DCD    3865511424
+        0x010055f0:    20797304    .sy     DCD    544830212
+        0x010055f4:    09c00f00    ....    DCD    163581696
+        0x010055f8:    29c0bb02    ...)    DCD    700496642
+        0x010055fc:    0bc0bd02    ....    DCD    197180674
+        0x01005600:    0cc0b402    ....    DCD    213955586
+        0x01005604:    01c03b5e    ^;..    DCD    29375326
+        0x01005608:    0fc0a15c    \...    DCD    264282460
+        0x0100560c:    3f79f903    ..y?    DCD    1064958211
+        0x01005610:    60200f80    .. `    DCD    1612713856
+        0x01005614:    00580000    ..X.    DCD    5767168
+        0x01005618:    e4671e0b    ..g.    DCD    3831963147
+        0x0100561c:    4020d54a    J. @    DCD    1075893578
+        0x01005620:    201fc002    ...     DCD    538951682
+        0x01005624:    20dafef3    ...     DCD    551223027
+        0x01005628:    4020e002    .. @    DCD    1075896322
+        0x0100562c:    2020be5a    Z.      DCD    539016794
+        0x01005630:    4020e002    .. @    DCD    1075896322
+        0x01005634:    2020bd02    ..      DCD    539016450
+        0x01005638:    4020d702    .. @    DCD    1075894018
+        0x0100563c:    20dac002    ...     DCD    551206914
+        0x01005640:    2020de02    ..      DCD    539024898
+        0x01005644:    e26fbe5a    Z.o.    DCD    3798974042
+        0x01005648:    e01fd602    ....    DCD    3760182786
+        0x0100564c:    e01ff9f3    ....    DCD    3760191987
+        0x01005650:    e467fcff    ..g.    DCD    3832020223
+        0x01005654:    44e8d14a    J..D    DCD    1156108618
+        0x01005658:    44600600    ..`D    DCD    1147143680
+        0x0100565c:    6020d34a    J. `    DCD    1612763978
+        0x01005660:    20790000    ..y     DCD    544800768
+        0x01005664:    40200f00    .. @    DCD    1075842816
+        0x01005668:    e26fcf02    ..o.    DCD    3798978306
+        0x0100566c:    09c07304    .s..    DCD    163607300
+        0x01005670:    0bc0d702    ....    DCD    197187330
+        0x01005674:    29c1d602    ...)    DCD    700569090
+        0x01005678:    3f790000    ..y?    DCD    1064894464
+        0x0100567c:    60200f80    .. `    DCD    1612713856
+        0x01005680:    e26f0000    ..o.    DCD    3798925312
+        0x01005684:    4468d602    ..hD    DCD    1147721218
+        0x01005688:    4098d14a    J..@    DCD    1083756874
+        0x0100568c:    44600084    ..`D    DCD    1147142276
+        0x01005690:    e21fd14a    J...    DCD    3793736010
+        0x01005694:    20da0072    r..     DCD    551157874
+        0x01005698:    2020d702    ..      DCD    539023106
+        0x0100569c:    2020be5a    Z.      DCD    539016794
+        0x010056a0:    4020e002    .. @    DCD    1075896322
+        0x010056a4:    7424da02    ..$t    DCD    1948572162
+        0x010056a8:    20200000    ..      DCD    538968064
+        0x010056ac:    4020135e    ^. @    DCD    1075843934
+        0x010056b0:    e46fc17d    }.o.    DCD    3832529277
+        0x010056b4:    4468d34a    J.hD    DCD    1147720522
+        0x010056b8:    4698d14a    J..F    DCD    1184420170
+        0x010056bc:    6224007c    |.$b    DCD    1646526588
+        0x010056c0:    20200080    ..      DCD    538968192
+        0x010056c4:    e46fbf7d    }.o.    DCD    3832528765
+        0x010056c8:    e21fd54a    J...    DCD    3793737034
+        0x010056cc:    e26f000a    ..o.    DCD    3798925322
+        0x010056d0:    e21fd602    ....    DCD    3793737218
+        0x010056d4:    40200072    r. @    DCD    1075839090
+        0x010056d8:    a218dc7c    |...    DCD    2719538300
+        0x010056dc:    e467007e    ~.g.    DCD    3831955582
+        0x010056e0:    4020d54a    J. @    DCD    1075893578
+        0x010056e4:    7424da02    ..$t    DCD    1948572162
+        0x010056e8:    e0d80000    ....    DCD    3772252160
+        0x010056ec:    40200300    .. @    DCD    1075839744
+        0x010056f0:    2020e650    P.      DCD    539027024
+        0x010056f4:    4020ec02    .. @    DCD    1075899394
+        0x010056f8:    7a24745c    \t$z    DCD    2049209436
+        0x010056fc:    0b700000    ..p.    DCD    191889408
+        0x01005700:    00581722    ".X.    DCD    5773090
+        0x01005704:    e4671e0b    ..g.    DCD    3831963147
+        0x01005708:    4468d74a    J.hD    DCD    1147721546
+        0x0100570c:    40181e0b    ...@    DCD    1075322379
+        0x01005710:    00580484    ..X.    DCD    5768324
+        0x01005714:    4020f900    .. @    DCD    1075902720
+        0x01005718:    e01fb57d    }...    DCD    3760174461
+        0x0100571c:    0018fca5    ....    DCD    1637541
+        0x01005720:    e21f0202    ....    DCD    3793682946
+        0x01005724:    40200022    ". @    DCD    1075839010
+        0x01005728:    e46f325c    \2o.    DCD    3832492636
+        0x0100572c:    e21fd74a    J...    DCD    3793737546
+        0x01005730:    221a000c    ..."    DCD    572129292
+        0x01005734:    40200072    r. @    DCD    1075839090
+        0x01005738:    c218cf7c    |...    DCD    3256405884
+        0x0100573c:    e467007e    ~.g.    DCD    3831955582
+        0x01005740:    e46fd74a    J.o.    DCD    3832534858
+        0x01005744:    469a1e0b    ...F    DCD    1184505355
+        0x01005748:    e467007e    ~.g.    DCD    3831955582
+        0x0100574c:    3a201e0b    .. :    DCD    975183371
+        0x01005750:    40d80803    ...@    DCD    1087899651
+        0x01005754:    4020f900    .. @    DCD    1075902720
+        0x01005758:    e21fb57d    }...    DCD    3793728893
+        0x0100575c:    00180024    $...    DCD    1572900
+        0x01005760:    20200102    ..      DCD    538968322
+        0x01005764:    0058f702    ..X.    DCD    5830402
+        0x01005768:    e4670000    ..g.    DCD    3831955456
+        0x0100576c:    e0d8d54a    J...    DCD    3772306762
+        0x01005770:    20200300    ..      DCD    538968832
+        0x01005774:    4b70e250    P.pK    DCD    1265689168
+        0x01005778:    446800f4    ..hD    DCD    1147666676
+        0x0100577c:    e46ff04f    O.o.    DCD    3832541263
+        0x01005780:    4698f24f    O..F    DCD    1184428623
+        0x01005784:    44680022    ".hD    DCD    1147666466
+        0x01005788:    e46ff44f    O.o.    DCD    3832542287
+        0x0100578c:    4460f64f    O.`D    DCD    1147205199
+        0x01005790:    e467f74b    K.g.    DCD    3832018763
+        0x01005794:    4698f54b    K..F    DCD    1184429387
+        0x01005798:    2120007e    ~. !    DCD    555745406
+        0x0100579c:    22201c03    .. "    DCD    572529667
+        0x010057a0:    221a1c83    ..."    DCD    572136579
+        0x010057a4:    e46f0004    ..o.    DCD    3832479748
+        0x010057a8:    4098f54b    K..@    DCD    1083766091
+        0x010057ac:    446800fe    ..hD    DCD    1147666686
+        0x010057b0:    4698f74b    K..F    DCD    1184429899
+        0x010057b4:    40d8007e    ~..@    DCD    1087897726
+        0x010057b8:    4698c002    ...F    DCD    1184415746
+        0x010057bc:    6124007c    |.$a    DCD    1629749372
+        0x010057c0:    4b700000    ..pK    DCD    1265631232
+        0x010057c4:    602001f4    .. `    DCD    1612710388
+        0x010057c8:    42680000    ..hB    DCD    1114112000
+        0x010057cc:    4c285204    .R(L    DCD    1277710852
+        0x010057d0:    60200500    .. `    DCD    1612711168
+        0x010057d4:    e26f0080    ..o.    DCD    3798925440
+        0x010057d8:    e31fd502    ....    DCD    3810514178
+        0x010057dc:    429800fe    ...B    DCD    1117257982
+        0x010057e0:    01c400fe    ....    DCD    29622526
+        0x010057e4:    3f790080    ..y?    DCD    1064894592
+        0x010057e8:    40790584    ..y@    DCD    1081673092
+        0x010057ec:    42600304    ..`B    DCD    1113588484
+        0x010057f0:    40285204    .R(@    DCD    1076384260
+        0x010057f4:    60240306    ..$`    DCD    1612972806
+        0x010057f8:    e26f0080    ..o.    DCD    3798925440
+        0x010057fc:    3a24ed4b    K.$:    DCD    975498571
+        0x01005800:    e26f3103    .1o.    DCD    3798937859
+        0x01005804:    2020dd4a    J.      DCD    539024714
+        0x01005808:    e26f3203    .2o.    DCD    3798938115
+        0x0100580c:    02c0b043    C...    DCD    46182467
+        0x01005810:    e26facd9    ..o.    DCD    3798969561
+        0x01005814:    01c09744    D...    DCD    29398852
+        0x01005818:    6020b059    Y. `    DCD    1612755033
+        0x0100581c:    e26f0000    ..o.    DCD    3798925312
+        0x01005820:    82c35204    .R..    DCD    2193838596
+        0x01005824:    40200080    .. @    DCD    1075839104
+        0x01005828:    e26f1c5a    Z.o.    DCD    3798932570
+        0x0100582c:    3a24ed4b    K.$:    DCD    975498571
+        0x01005830:    4020fc59    Y. @    DCD    1075903577
+        0x01005834:    3a20535c    \S :    DCD    975197020
+        0x01005838:    e2ef3e5a    Z>..    DCD    3807329882
+        0x0100583c:    42e80600    ...B    DCD    1122502144
+        0x01005840:    42180600    ...B    DCD    1108870656
+        0x01005844:    269a0022    "..&    DCD    647626786
+        0x01005848:    4020007e    ~. @    DCD    1075839102
+        0x0100584c:    40205b03    .[ @    DCD    1075862275
+        0x01005850:    e21fb57d    }...    DCD    3793728893
+        0x01005854:    e2ef0004    ....    DCD    3807313924
+        0x01005858:    e21f0600    ....    DCD    3793683968
+        0x0100585c:    221a0002    ..."    DCD    572129282
+        0x01005860:    c098007e    ~...    DCD    3231187070
+        0x01005864:    a0d8008c    ....    DCD    2698510476
+        0x01005868:    4218dd4a    J..B    DCD    1108925770
+        0x0100586c:    40200072    r. @    DCD    1075839090
+        0x01005870:    4020cf7c    |. @    DCD    1075892092
+        0x01005874:    40202e5a    Z. @    DCD    1075850842
+        0x01005878:    4020405a    Z@ @    DCD    1075855450
+        0x0100587c:    e2ef535c    \S..    DCD    3807335260
+        0x01005880:    e21f0600    ....    DCD    3793683968
+        0x01005884:    c2180022    "...    DCD    3256352802
+        0x01005888:    42e80026    &..B    DCD    1122500646
+        0x0100588c:    42180600    ...B    DCD    1108870656
+        0x01005890:    469a0024    $..F    DCD    1184497700
+        0x01005894:    4020007e    ~. @    DCD    1075839102
+        0x01005898:    40205b03    .[ @    DCD    1075862275
+        0x0100589c:    409ab57d    }..@    DCD    1083880829
+        0x010058a0:    e2e700fe    ....    DCD    3806789886
+        0x010058a4:    269a1300    ...&    DCD    647631616
+        0x010058a8:    6224007c    |.$b    DCD    1646526588
+        0x010058ac:    20200080    ..      DCD    538968192
+        0x010058b0:    c218765c    \v..    DCD    3256383068
+        0x010058b4:    4468000a    ..hD    DCD    1147666442
+        0x010058b8:    a218d94a    J...    DCD    2719537482
+        0x010058bc:    6020000c    .. `    DCD    1612709900
+        0x010058c0:    e26f0000    ..o.    DCD    3798925312
+        0x010058c4:    3a24ed4b    K.$:    DCD    975498571
+        0x010058c8:    4260415a    ZA`B    DCD    1113604442
+        0x010058cc:    4268dc4a    J.hB    DCD    1114168394
+        0x010058d0:    20795204    .Ry     DCD    544821764
+        0x010058d4:    41180504    ...A    DCD    1092093188
+        0x010058d8:    2198fc7e    ~..!    DCD    563674238
+        0x010058dc:    e26700fe    ..g.    DCD    3798401278
+        0x010058e0:    e11f5204    .R..    DCD    3776926212
+        0x010058e4:    0f281f7e    ~.(.    DCD    254287742
+        0x010058e8:    207929fe    .)y     DCD    544811518
+        0x010058ec:    e26704fe    ..g.    DCD    3798402302
+        0x010058f0:    e26fdb4a    J.o.    DCD    3798981450
+        0x010058f4:    2028db4a    J.(     DCD    539548490
+        0x010058f8:    20240106    ..$     DCD    539230470
+        0x010058fc:    e26f7083    .po.    DCD    3798954115
+        0x01005900:    7a20dc4a    J. z    DCD    2048973898
+        0x01005904:    e26f0000    ..o.    DCD    3798925312
+        0x01005908:    02c43b04    .;..    DCD    46414596
+        0x0100590c:    40200000    .. @    DCD    1075838976
+        0x01005910:    20204273    sB      DCD    538985075
+        0x01005914:    e26f9972    r.o.    DCD    3798964594
+        0x01005918:    3a24ed4b    K.$:    DCD    975498571
+        0x0100591c:    60da9a72    r..`    DCD    1624939122
+        0x01005920:    4a68db4a    J.hJ    DCD    1248385866
+        0x01005924:    4020d543    C. @    DCD    1075893571
+        0x01005928:    00187772    rw..    DCD    1603442
+        0x0100592c:    00980870    p...    DCD    9963632
+        0x01005930:    0018005e    ^...    DCD    1572958
+        0x01005934:    40200022    ". @    DCD    1075839010
+        0x01005938:    40206372    rc @    DCD    1075864434
+        0x0100593c:    60dae872    r..`    DCD    1624959090
+        0x01005940:    e26fdd4a    J.o.    DCD    3798981962
+        0x01005944:    e01fdc4a    J...    DCD    3760184394
+        0x01005948:    609affa5    ...`    DCD    1620770725
+        0x0100594c:    0018008a    ....    DCD    1573002
+        0x01005950:    e21d0c70    p...    DCD    3793554544
+        0x01005954:    e8e7007e    ~...    DCD    3907453054
+        0x01005958:    40200500    .. @    DCD    1075840256
+        0x0100595c:    e26f8e72    r.o.    DCD    3798961778
+        0x01005960:    e01fdc4a    J...    DCD    3760184394
+        0x01005964:    e26704fe    ..g.    DCD    3798402302
+        0x01005968:    4a68dc4a    J.hJ    DCD    1248386122
+        0x0100596c:    4018d543    C..@    DCD    1075369283
+        0x01005970:    4a600184    ..`J    DCD    1247805828
+        0x01005974:    6020d543    C. `    DCD    1612764483
+        0x01005978:    07c60000    ....    DCD    130416640
+        0x0100597c:    16c60080    ....    DCD    382075008
+        0x01005980:    40200000    .. @    DCD    1075838976
+        0x01005984:    7a24705c    \p$z    DCD    2049208412
+        0x01005988:    e26f0000    ..o.    DCD    3798925312
+        0x0100598c:    e11fd502    ....    DCD    3776959746
+        0x01005990:    e267037e    ~.g.    DCD    3798401918
+        0x01005994:    e2efde44    D...    DCD    3807370820
+        0x01005998:    e2670600    ..g.    DCD    3798402560
+        0x0100599c:    7a20dd44    D. z    DCD    2048974148
+        0x010059a0:    c2180000    ....    DCD    3256352768
+        0x010059a4:    e467007e    ~.g.    DCD    3831955582
+        0x010059a8:    e26fdf44    D.o.    DCD    3798982468
+        0x010059ac:    01c0de44    D...    DCD    29417028
+        0x010059b0:    4020ce83    .. @    DCD    1075891843
+        0x010059b4:    e0d8a003    ....    DCD    3772293123
+        0x010059b8:    34240300    ..$4    DCD    874775296
+        0x010059bc:    4020ec4b    K. @    DCD    1075899467
+        0x010059c0:    2020f04b    K.      DCD    539029579
+        0x010059c4:    e26f6b5a    Zko.    DCD    3798952794
+        0x010059c8:    01c0de44    D...    DCD    29417028
+        0x010059cc:    00c0a403    ....    DCD    12624899
+        0x010059d0:    6020b883    .. `    DCD    1612757123
+        0x010059d4:    e46f0000    ..o.    DCD    3832479744
+        0x010059d8:    e21fdf44    D...    DCD    3793739588
+        0x010059dc:    e4ef000c    ....    DCD    3840868364
+        0x010059e0:    e4670600    ..g.    DCD    3831956992
+        0x010059e4:    e4efce44    D...    DCD    3840921156
+        0x010059e8:    40200600    .. @    DCD    1075840512
+        0x010059ec:    74247a5a    Zz$t    DCD    1948547674
+        0x010059f0:    42680000    ..hB    DCD    1114112000
+        0x010059f4:    4260dd44    D.`B    DCD    1113644356
+        0x010059f8:    e46fd044    D.o.    DCD    3832533060
+        0x010059fc:    e01fce44    D...    DCD    3760180804
+        0x01005a00:    469804fe    ...F    DCD    1184367870
+        0x01005a04:    2220007c    |. "    DCD    572522620
+        0x01005a08:    e26fbffd    ..o.    DCD    3798974461
+        0x01005a0c:    e21fdd44    D...    DCD    3793739076
+        0x01005a10:    a0d80072    r...    DCD    2698510450
+        0x01005a14:    e46f7d0d    .}o.    DCD    3832511757
+        0x01005a18:    e21fdf44    D...    DCD    3793739588
+        0x01005a1c:    4020000c    .. @    DCD    1075838988
+        0x01005a20:    2020dc7c    |.      DCD    539024508
+        0x01005a24:    4020c17d    }. @    DCD    1075888509
+        0x01005a28:    7424995a    Z.$t    DCD    1948555610
+        0x01005a2c:    e26f0000    ..o.    DCD    3798925312
+        0x01005a30:    a0d8d044    D...    DCD    2698563652
+        0x01005a34:    a0987d0d    .}..    DCD    2694348045
+        0x01005a38:    426800a2    ..hB    DCD    1114112162
+        0x01005a3c:    4098dd44    D..@    DCD    1083759940
+        0x01005a40:    e26700fe    ..g.    DCD    3798401278
+        0x01005a44:    e26fd044    D.o.    DCD    3798978628
+        0x01005a48:    e21fdd44    D...    DCD    3793739076
+        0x01005a4c:    221a0072    r.."    DCD    572129394
+        0x01005a50:    e46f000a    ..o.    DCD    3832479754
+        0x01005a54:    e21fdf44    D...    DCD    3793739588
+        0x01005a58:    4020000c    .. @    DCD    1075838988
+        0x01005a5c:    0058cf7c    |.X.    DCD    5820284
+        0x01005a60:    e4677d0d    .}g.    DCD    3831987469
+        0x01005a64:    e46fdf44    D.o.    DCD    3832536900
+        0x01005a68:    e01fce44    D...    DCD    3760180804
+        0x01005a6c:    426804fe    ..hB    DCD    1114113278
+        0x01005a70:    4698d044    D..F    DCD    1184419908
+        0x01005a74:    2220007c    |. "    DCD    572522620
+        0x01005a78:    2020bffd    ..      DCD    539017213
+        0x01005a7c:    e26fc17d    }.o.    DCD    3798974845
+        0x01005a80:    04c0d702    ....    DCD    79746818
+        0x01005a84:    0ac0d203    ....    DCD    180408835
+        0x01005a88:    2020e003    ..      DCD    539025411
+        0x01005a8c:    20da4560    `E.     DCD    551175520
+        0x01005a90:    40da0900    ...@    DCD    1088030976
+        0x01005a94:    40200900    .. @    DCD    1075841280
+        0x01005a98:    0058225c    \"X.    DCD    5775964
+        0x01005a9c:    f0e72100    .!..    DCD    4041679104
+        0x01005aa0:    40200500    .. @    DCD    1075840256
+        0x01005aa4:    6020d903    .. `    DCD    1612765443
+        0x01005aa8:    e26f0000    ..o.    DCD    3798925312
+        0x01005aac:    e11fd802    ....    DCD    3776960514
+        0x01005ab0:    3a20207e    ~  :    DCD    975183998
+        0x01005ab4:    4b70de03    ..pK    DCD    1265688067
+        0x01005ab8:    602000ed    .. `    DCD    1612710125
+        0x01005abc:    4b700000    ..pK    DCD    1265631232
+        0x01005ac0:    602001ed    .. `    DCD    1612710381
+        0x01005ac4:    e4ef0000    ....    DCD    3840868352
+        0x01005ac8:    e4670600    ..g.    DCD    3831956992
+        0x01005acc:    2020d94a    J.      DCD    539023690
+        0x01005ad0:    20dae303    ...     DCD    551215875
+        0x01005ad4:    40da0900    ...@    DCD    1088030976
+        0x01005ad8:    40201500    .. @    DCD    1075844352
+        0x01005adc:    0058225c    \"X.    DCD    5775964
+        0x01005ae0:    e4e7fb00    ....    DCD    3840408320
+        0x01005ae4:    00580500    ..X.    DCD    5768448
+        0x01005ae8:    e4e74808    .H..    DCD    3840362504
+        0x01005aec:    00580500    ..X.    DCD    5768448
+        0x01005af0:    e4e7fb00    ....    DCD    3840408320
+        0x01005af4:    00580500    ..X.    DCD    5768448
+        0x01005af8:    e4e74808    .H..    DCD    3840362504
+        0x01005afc:    60200500    .. `    DCD    1612711168
+        0x01005b00:    e4ef0000    ....    DCD    3840868352
+        0x01005b04:    02c00600    ....    DCD    46138880
+        0x01005b08:    03c0f403    ....    DCD    62977027
+        0x01005b0c:    02c0d45e    ^...    DCD    46191710
+        0x01005b10:    602096de    .. `    DCD    1612748510
+        0x01005b14:    e6ef0000    ....    DCD    3874422784
+        0x01005b18:    e6670600    ..g.    DCD    3865511424
+        0x01005b1c:    08c07304    .s..    DCD    146830084
+        0x01005b20:    04c0fb03    ....    DCD    79756035
+        0x01005b24:    20200404    ..      DCD    538969092
+        0x01005b28:    e0d88d5c    \...    DCD    3772288348
+        0x01005b2c:    20200700    ..      DCD    538969856
+        0x01005b30:    4020e250    P. @    DCD    1075896912
+        0x01005b34:    4020915e    ^. @    DCD    1075876190
+        0x01005b38:    60d9b35a    Z..`    DCD    1624879962
+        0x01005b3c:    20200100    ..      DCD    538968320
+        0x01005b40:    e0d8de5d    ]...    DCD    3772309085
+        0x01005b44:    20200700    ..      DCD    538969856
+        0x01005b48:    4020e650    P. @    DCD    1075897936
+        0x01005b4c:    e467a95c    \.g.    DCD    3831998812
+        0x01005b50:    20207844    Dx      DCD    538998852
+        0x01005b54:    4020a25c    \. @    DCD    1075880540
+        0x01005b58:    4020915e    ^. @    DCD    1075876190
+        0x01005b5c:    2020bb5a    Z.      DCD    539016026
+        0x01005b60:    44680704    ..hD    DCD    1147668228
+        0x01005b64:    44602c44    D,`D    DCD    1147153476
+        0x01005b68:    40209e0a    .. @    DCD    1075879434
+        0x01005b6c:    4020365b    [6 @    DCD    1075852891
+        0x01005b70:    c0184d5b    [M..    DCD    3222818139
+        0x01005b74:    c218fe8d    ....    DCD    3256417933
+        0x01005b78:    e467007e    ~.g.    DCD    3831955582
+        0x01005b7c:    44689804    ..hD    DCD    1147705348
+        0x01005b80:    00584444    DDX.    DCD    5784644
+        0x01005b84:    4698002a    *..F    DCD    1184366634
+        0x01005b88:    2220007c    |. "    DCD    572522620
+        0x01005b8c:    20201384    ..      DCD    538973060
+        0x01005b90:    40d82d5d    ]-.@    DCD    1087909213
+        0x01005b94:    4020002a    *. @    DCD    1075839018
+        0x01005b98:    3a205c5b    [\ :    DCD    975199323
+        0x01005b9c:    2020565e    ^V      DCD    538990174
+        0x01005ba0:    e26f8b5d    ].o.    DCD    3798960989
+        0x01005ba4:    3a24ed4b    K.$:    DCD    975498571
+        0x01005ba8:    5578d55b    [.xU    DCD    1433982299
+        0x01005bac:    372000fc    .. 7    DCD    924844284
+        0x01005bb0:    36241c04    ..$6    DCD    908336132
+        0x01005bb4:    4020e6db    .. @    DCD    1075898075
+        0x01005bb8:    e46fa04b    K.o.    DCD    3832520779
+        0x01005bbc:    e467c140    @.g.    DCD    3832004928
+        0x01005bc0:    36244904    .I$6    DCD    908347652
+        0x01005bc4:    07c5b3cb    ....    DCD    130397131
+        0x01005bc8:    e26fb3cb    ..o.    DCD    3798971339
+        0x01005bcc:    3a24dd44    D.$:    DCD    975494468
+        0x01005bd0:    e26fb34b    K.o.    DCD    3798971211
+        0x01005bd4:    3a24dc4a    J.$:    DCD    975494218
+        0x01005bd8:    e26fb34b    K.o.    DCD    3798971211
+        0x01005bdc:    82c2bb44    D...    DCD    2193800004
+        0x01005be0:    e26fb3cb    ..o.    DCD    3798971339
+        0x01005be4:    82c23b04    .;..    DCD    2193767172
+        0x01005be8:    2020b3cb    ..      DCD    539014091
+        0x01005bec:    e26f954b    K.o.    DCD    3798963531
+        0x01005bf0:    08c07d00    .}..    DCD    146832640
+        0x01005bf4:    0bc02e04    ....    DCD    197144068
+        0x01005bf8:    20203484    .4      DCD    538981508
+        0x01005bfc:    4268fe60    `.hB    DCD    1114177120
+        0x01005c00:    46184e05    .N.F    DCD    1175997957
+        0x01005c04:    2120067c    |. !    DCD    555746940
+        0x01005c08:    20203204    .2      DCD    538980868
+        0x01005c0c:    00700662    b.p.    DCD    7341666
+        0x01005c10:    2020247e    ~$      DCD    538977406
+        0x01005c14:    20203461    a4      DCD    538981473
+        0x01005c18:    5478b862    b.xT    DCD    1417197666
+        0x01005c1c:    4020007c    |. @    DCD    1075839100
+        0x01005c20:    e26fa366    f.o.    DCD    3798967142
+        0x01005c24:    7a204800    .H z    DCD    2048935936
+        0x01005c28:    83c20000    ....    DCD    2210529280
+        0x01005c2c:    20203b84    .;      DCD    538983300
+        0x01005c30:    42c0f263    c..B    DCD    1119941219
+        0x01005c34:    41c03e04    .>.A    DCD    1103117828
+        0x01005c38:    20204184    .A      DCD    538984836
+        0x01005c3c:    40202164    d! @    DCD    1075847524
+        0x01005c40:    e26f4404    .Do.    DCD    3798942724
+        0x01005c44:    20204800    .H      DCD    538986496
+        0x01005c48:    40207b64    d{ @    DCD    1075870564
+        0x01005c4c:    e26f4404    .Do.    DCD    3798942724
+        0x01005c50:    20204800    .H      DCD    538986496
+        0x01005c54:    e26fef64    d.o.    DCD    3798986596
+        0x01005c58:    3a202c46    F, :    DCD    975187014
+        0x01005c5c:    20200d65    e.      DCD    538971493
+        0x01005c60:    e26f0665    e.o.    DCD    3798926949
+        0x01005c64:    3f799e40    @.y?    DCD    1064934976
+        0x01005c68:    e26703fe    ..g.    DCD    3798402046
+        0x01005c6c:    00589e40    @.X.    DCD    5807680
+        0x01005c70:    e4670100    ..g.    DCD    3831955712
+        0x01005c74:    6020ca04    .. `    DCD    1612761604
+        0x01005c78:    00580000    ..X.    DCD    5767168
+        0x01005c7c:    e2670000    ..g.    DCD    3798401024
+        0x01005c80:    e2672642    B&g.    DCD    3798410818
+        0x01005c84:    e2673645    E6g.    DCD    3798414917
+        0x01005c88:    e26f2f45    E/o.    DCD    3798937413
+        0x01005c8c:    00c03d45    E=..    DCD    12598597
+        0x01005c90:    4570d7e8    ..pE    DCD    1165023208
+        0x01005c94:    6020853b    ;. `    DCD    1612743995
+        0x01005c98:    e26f0000    ..o.    DCD    3798925312
+        0x01005c9c:    1fc0f904    ....    DCD    532740356
+        0x01005ca0:    39c03ee9    .>.9    DCD    968900329
+        0x01005ca4:    77c047e9    .G.w    DCD    2009090025
+        0x01005ca8:    29c05b84    .[.)    DCD    700472196
+        0x01005cac:    602005ea    .. `    DCD    1612711402
+        0x01005cb0:    e46f0000    ..o.    DCD    3832479744
+        0x01005cb4:    e21ffd04    ....    DCD    3793747204
+        0x01005cb8:    4020000c    .. @    DCD    1075838988
+        0x01005cbc:    e26f8469    i.o.    DCD    3798959209
+        0x01005cc0:    20c0ff04    ...     DCD    549519108
+        0x01005cc4:    20c066e9    .f.     DCD    549480169
+        0x01005cc8:    38c06e69    in.8    DCD    952135273
+        0x01005ccc:    38c0a7e9    ...8    DCD    952149993
+        0x01005cd0:    24c06504    .e.$    DCD    616588548
+        0x01005cd4:    2020bee9    ..      DCD    539016937
+        0x01005cd8:    0a70586a    jXp.    DCD    175134826
+        0x01005cdc:    40200895    .. @    DCD    1075841173
+        0x01005ce0:    4020ab7b    {. @    DCD    1075882875
+        0x01005ce4:    20207269    ir      DCD    538997353
+        0x01005ce8:    e26fba69    i.o.    DCD    3798973033
+        0x01005cec:    3a209044    D. :    DCD    975212612
+        0x01005cf0:    4020d05e    ^. @    DCD    1075892318
+        0x01005cf4:    20203874    t8      DCD    538982516
+        0x01005cf8:    ad923279    y2..    DCD    2912039545
+        0x01005cfc:    004055aa    .U@.    DCD    4216234
+        0x01005d00:    00034000    .@..    DCD    212992
+        0x01005d04:    00000000    ....    DCD    0
+        0x01005d08:    00002010    . ..    DCD    8208
+        0x01005d0c:    00010020     ...    DCD    65568
+        0x01005d10:    22200000    .. "    DCD    572522496
+        0x01005d14:    120c0010    ....    DCD    302776336
+        0x01005d18:    00003900    .9..    DCD    14592
+        0x01005d1c:    08000800    ....    DCD    134219776
+        0x01005d20:    09e80022    "...    DCD    166199330
+        0x01005d24:    0004d018    ....    DCD    315416
+        0x01005d28:    00024404    .D..    DCD    148484
+        0x01005d2c:    00000005    ....    DCD    5
+        0x01005d30:    20000000    ...     DCD    536870912
+        0x01005d34:    00000200    ....    DCD    512
+        0x01005d38:    00000000    ....    DCD    0
+        0x01005d3c:    00000000    ....    DCD    0
+        0x01005d40:    55aa0000    ...U    DCD    1437204480
+        0x01005d44:    40920001    ...@    DCD    1083310081
+        0x01005d48:    0155aa0a    ..U.    DCD    22391306
+        0x01005d4c:    40465400    .TF@    DCD    1078350848
+        0x01005d50:    000155aa    .U..    DCD    87466
+        0x01005d54:    aa134206    .B..    DCD    2853388806
+        0x01005d58:    5b000155    U..[    DCD    1526726997
+        0x01005d5c:    55aa0141    A..U    DCD    1437204801
+        0x01005d60:    40980008    ...@    DCD    1083703304
+        0x01005d64:    fa8ffbff    ....    DCD    4203740159
+        0x01005d68:    8359858b    ..Y.    DCD    2203682187
+        0x01005d6c:    000355aa    .U..    DCD    218538
+        0x01005d70:    4a254214    .B%J    DCD    1243955732
+        0x01005d74:    0455aa05    ..U.    DCD    72722949
+        0x01005d78:    00453d00    .=E.    DCD    4537600
+        0x01005d7c:    aa0701f7    ....    DCD    2852585975
+        0x01005d80:    2d000355    U..-    DCD    754975573
+        0x01005d84:    04000346    F...    DCD    67109702
+        0x01005d88:    000155aa    .U..    DCD    87466
+        0x01005d8c:    aa01462c    ,F..    DCD    2852210220
+        0x01005d90:    57000655    U..W    DCD    1459619413
+        0x01005d94:    30300446    F.00    DCD    808453190
+        0x01005d98:    aa303030    000.    DCD    2855284784
+        0x01005d9c:    f0001055    U...    DCD    4026536021
+        0x01005da0:    ff1c004f    O...    DCD    4280025167
+        0x01005da4:    001c001f    ....    DCD    1835039
+        0x01005da8:    e04c001c    ..L.    DCD    3763077148
+        0x01005dac:    004c004f    O.L.    DCD    4980815
+        0x01005db0:    0355aa4c    L.U.    DCD    55945804
+        0x01005db4:    004bef00    ..K.    DCD    4976384
+        0x01005db8:    55aa0280    ...U    DCD    1437205120
+        0x01005dbc:    46680002    ..hF    DCD    1181220866
+        0x01005dc0:    55aa0f10    ...U    DCD    1437208336
+        0x01005dc4:    466c0001    ..lF    DCD    1181483009
+        0x01005dc8:    0155aa03    ..U.    DCD    22391299
+        0x01005dcc:    07466f00    .oF.    DCD    122056448
+        0x01005dd0:    000355aa    .U..    DCD    218538
+        0x01005dd4:    042440aa    .@$.    DCD    69484714
+        0x01005dd8:    0155aa04    ..U.    DCD    22391300
+        0x01005ddc:    00467900    .yF.    DCD    4618496
+        0x01005de0:    000155aa    .U..    DCD    87466
+        0x01005de4:    aa004acf    .J..    DCD    2852145871
+        0x01005de8:    91000155    U...    DCD    2432696661
+        0x01005dec:    55aa0040    @..U    DCD    1437204544
+        0x01005df0:    41540003    ..TA    DCD    1096024067
+        0x01005df4:    aa080100    ....    DCD    2852651264
+        0x01005df8:    74000155    U..t    DCD    1946157397
+        0x01005dfc:    55aa0241    A..U    DCD    1437205057
+        0x01005e00:    40930001    ...@    DCD    1083375617
+        0x01005e04:    0155aa00    ..U.    DCD    22391296
+        0x01005e08:    28466d00    .mF(    DCD    675704064
+        0x01005e0c:    000655aa    .U..    DCD    415146
+        0x01005e10:    2aa740a0    .@.*    DCD    715604128
+        0x01005e14:    5510212a    *!.U    DCD    1427120426
+        0x01005e18:    000f55aa    .U..    DCD    1004970
+        0x01005e1c:    330e44e7    .D.3    DCD    856573159
+        0x01005e20:    20313231    121     DCD    540095025
+        0x01005e24:    20756f4d    Mou     DCD    544567117
+        0x01005e28:    32317442    Bt12    DCD    842101826
+        0x01005e2c:    0355aa31    1.U.    DCD    55945777
+        0x01005e30:    2041e400    ..A     DCD    541189120
+        0x01005e34:    55aa0200    ...U    DCD    1437204992
+        0x01005e38:    41e80001    ...A    DCD    1105723393
+        0x01005e3c:    0155aa01    ..U.    DCD    22391297
+        0x01005e40:    00449000    ..D.    DCD    4493312
+        0x01005e44:    000155aa    .U..    DCD    87466
+        0x01005e48:    aa07445f    _D..    DCD    2852602975
+        0x01005e4c:    98000155    U...    DCD    2550137173
+        0x01005e50:    55aa0044    D..U    DCD    1437204548
+        0x01005e54:    46750004    ..uF    DCD    1182072836
+        0x01005e58:    002f002d    -./.    DCD    3080237
+        0x01005e5c:    000155aa    .U..    DCD    87466
+        0x01005e60:    aa004340    @C..    DCD    2852143936
+        0x01005e64:    54000255    U..T    DCD    1409286741
+        0x01005e68:    aa004044    D@..    DCD    2852143172
+        0x01005e6c:    6e000155    U..n    DCD    1845494101
+        0x01005e70:    55aa0546    F..U    DCD    1437205830
+        0x01005e74:    44720006    ..rD    DCD    1148321798
+        0x01005e78:    33012221    !".3    DCD    855712289
+        0x01005e7c:    55aa3a02    .:.U    DCD    1437219330
+        0x01005e80:    4381000d    ...C    DCD    1132527629
+        0x01005e84:    3231330c    .312    DCD    842085132
+        0x01005e88:    6f4d2031    1 Mo    DCD    1867325489
+        0x01005e8c:    6c422075    u Bl    DCD    1816273013
+        0x01005e90:    0455aa65    e.U.    DCD    72723045
+        0x01005e94:    03434100    .AC.    DCD    54739200
+        0x01005e98:    aa020102    ....    DCD    2852258050
+        0x01005e9c:    61001255    U..a    DCD    1627394645
+        0x01005ea0:    01020e43    C...    DCD    16911939
+        0x01005ea4:    33090d02    ...3    DCD    856231170
+        0x01005ea8:    20313231    121     DCD    540095025
+        0x01005eac:    20756f4d    Mou     DCD    544567117
+        0x01005eb0:    aa656c42    Ble.    DCD    2858773570
+        0x01005eb4:    25000755    U..%    DCD    620758869
+        0x01005eb8:    00030244    D...    DCD    197188
+        0x01005ebc:    03021005    ....    DCD    50466821
+        0x01005ec0:    000855aa    .U..    DCD    546218
+        0x01005ec4:    00084468    hD..    DCD    541800
+        0x01005ec8:    00000010    ....    DCD    16
+        0x01005ecc:    55aa012c    ,..U    DCD    1437204780
+        0x01005ed0:    44780001    ..xD    DCD    1148715009
+        0x01005ed4:    0155aaf0    ..U.    DCD    22391536
+        0x01005ed8:    17447a00    .zD.    DCD    390363648
+        0x01005edc:    000255aa    .U..    DCD    153002
+        0x01005ee0:    003144cc    .D1.    DCD    3228876
+        0x01005ee4:    000155aa    .U..    DCD    87466
+        0x01005ee8:    aa0140d1    .@..    DCD    2852208849
+        0x01005eec:    49000c55    U..I    DCD    1224739925
+        0x01005ef0:    00030545    E...    DCD    197957
+        0x01005ef4:    01010012    ....    DCD    16842770
+        0x01005ef8:    03110100    ....    DCD    51446016
+        0x01005efc:    1255aa00    ..U.    DCD    307603968
+        0x01005f00:    01455f00    ._E.    DCD    21323520
+        0x01005f04:    00000007    ....    DCD    7
+        0x01005f08:    facade00    ....    DCD    4207599104
+        0x01005f0c:    decadede    ....    DCD    3737837278
+        0x01005f10:    cacadeaf    ....    DCD    3402292911
+        0x01005f14:    0255aaff    ..U.    DCD    39168767
+        0x01005f18:    83454700    .GE.    DCD    2202355456
+        0x01005f1c:    b855aa46    F.U.    DCD    3092621894
+        0x01005f20:    03468300    ..F.    DCD    54952704
+        0x01005f24:    00010012    ....    DCD    65554
+        0x01005f28:    01000100    ....    DCD    16777472
+        0x01005f2c:    00360100    ..6.    DCD    3539200
+        0x01005f30:    00000952    R...    DCD    2386
+        0x01005f34:    0001000a    ....    DCD    65546
+        0x01005f38:    01000901    ....    DCD    16779521
+        0x01005f3c:    12190335    5...    DCD    303629109
+        0x01005f40:    04000900    ....    DCD    67111168
+        0x01005f44:    06350d35    5.5.    DCD    104140085
+        0x01005f48:    09000119    ....    DCD    150995225
+        0x01005f4c:    03350100    ..5.    DCD    53805312
+        0x01005f50:    09010019    ....    DCD    151060505
+        0x01005f54:    08350900    ..5.    DCD    137693440
+        0x01005f58:    12190635    5...    DCD    303629877
+        0x01005f5c:    00010900    ....    DCD    67840
+        0x01005f60:    09000209    ....    DCD    150995465
+        0x01005f64:    02090301    ....    DCD    34145025
+        0x01005f68:    ac050901    ....    DCD    2886011137
+        0x01005f6c:    09020209    ....    DCD    151126537
+        0x01005f70:    02093902    .9..    DCD    34158850
+        0x01005f74:    44060903    ...D    DCD    1141246211
+        0x01005f78:    28040209    ...(    DCD    671351305
+        0x01005f7c:    05020901    ....    DCD    84019457
+        0x01005f80:    03020009    ....    DCD    50462729
+        0x01005f84:    03000111    ....    DCD    50331921
+        0x01005f88:    01000001    ....    DCD    16777217
+        0x01005f8c:    00360300    ..6.    DCD    3539712
+        0x01005f90:    00000946    F...    DCD    2374
+        0x01005f94:    0001000a    ....    DCD    65546
+        0x01005f98:    01000903    ....    DCD    16779523
+        0x01005f9c:    11190335    5...    DCD    286851893
+        0x01005fa0:    02000901    ....    DCD    33556737
+        0x01005fa4:    0000000a    ....    DCD    10
+        0x01005fa8:    04000900    ....    DCD    67111168
+        0x01005fac:    03350c35    5.5.    DCD    53808181
+        0x01005fb0:    35000119    ...5    DCD    889192729
+        0x01005fb4:    03001905    ....    DCD    50338053
+        0x01005fb8:    00090108    ....    DCD    590088
+        0x01005fbc:    09093506    .5..    DCD    151598342
+        0x01005fc0:    00096e65    en..    DCD    618085
+        0x01005fc4:    0001096a    j...    DCD    67946
+        0x01005fc8:    25000109    ...%    DCD    620757257
+        0x01005fcc:    5050530a    .SPP    DCD    1347441418
+        0x01005fd0:    616c7320     sla    DCD    1634497312
+        0x01005fd4:    00006576    ve..    DCD    25974
+        0x01005fd8:    aa000100    ....    DCD    2852126976
+        0x01005fdc:    8e000255    U...    DCD    2382365269
+        0x01005fe0:    aa47af44    D.G.    DCD    2856824644
+        0x01005fe4:    af014e55    UN..    DCD    2936098389
+        0x01005fe8:    02000147    G...    DCD    33554759
+        0x01005fec:    01022800    .(..    DCD    16918528
+        0x01005ff0:    02000218    ....    DCD    33554968
+        0x01005ff4:    20012803    .(.     DCD    536946691
+        0x01005ff8:    05020003    ....    DCD    84017155
+        0x01005ffc:    0400012a    *...    DCD    67109162
+        0x01006000:    29020200    ...)    DCD    687997440
+        0x01006004:    05000102    ....    DCD    83886338
+        0x01006008:    28000200    ...(    DCD    671089152
+        0x0100600c:    06180002    ....    DCD    102236162
+        0x01006010:    28030200    ...(    DCD    671285760
+        0x01006014:    00074e01    .N..    DCD    478721
+        0x01006018:    132a0002    ..*.    DCD    321519618
+        0x0100601c:    20747341    Ast     DCD    544502593
+        0x01006020:    4d20454c    LE M    DCD    1293960524
+        0x01006024:    6573756f    ouse    DCD    1702065519
+        0x01006028:    20202020            DCD    538976288
+        0x0100602c:    08202020       .    DCD    136323104
+        0x01006030:    28030200    ...(    DCD    671285760
+        0x01006034:    00094e01    .N..    DCD    609793
+        0x01006038:    022a0102    ..*.    DCD    36307202
+        0x0100603c:    000a0000    ....    DCD    655360
+        0x01006040:    01280302    ..(.    DCD    19399426
+        0x01006044:    02000b02    ....    DCD    33557250
+        0x01006048:    10082a04    .*..    DCD    268970500
+        0x0100604c:    05002000    . ..    DCD    83894272
+        0x01006050:    0c012c00    .,..    DCD    201403392
+        0x01006054:    28000200    ...(    DCD    671089152
+        0x01006058:    05e45510    .U..    DCD    98850064
+        0x0100605c:    a99fafd2    ....    DCD    2845814738
+        0x01006060:    7d4ae58f    ..J}    DCD    2102060431
+        0x01006064:    535343fe    .CSS    DCD    1397965822
+        0x01006068:    02000d49    I...    DCD    33557833
+        0x0100606c:    12012803    .(..    DCD    302065667
+        0x01006070:    1610000e    ....    DCD    370147342
+        0x01006074:    c6472496    .$G.    DCD    3326551190
+        0x01006078:    d9ba6123    #a..    DCD    3652870435
+        0x0100607c:    431e4d4b    KM.C    DCD    1126059339
+        0x01006080:    14495353    SSI.    DCD    340349779
+        0x01006084:    00000000    ....    DCD    0
+        0x01006088:    00000000    ....    DCD    0
+        0x0100608c:    00000000    ....    DCD    0
+        0x01006090:    00000000    ....    DCD    0
+        0x01006094:    00000000    ....    DCD    0
+        0x01006098:    0202000f    ....    DCD    33685519
+        0x0100609c:    00000229    )...    DCD    553
+        0x010060a0:    03020010    ....    DCD    50462736
+        0x010060a4:    11080128    (...    DCD    285737256
+        0x010060a8:    9bb31000    ....    DCD    2612203520
+        0x010060ac:    ecbe3472    r4..    DCD    3971888242
+        0x010060b0:    43f4a8d4    ...C    DCD    1140107476
+        0x010060b4:    53438841    A.CS    DCD    1396934721
+        0x010060b8:    00144953    SI..    DCD    1329491
+        0x010060bc:    00000000    ....    DCD    0
+        0x010060c0:    00000000    ....    DCD    0
+        0x010060c4:    00000000    ....    DCD    0
+        0x010060c8:    00000000    ....    DCD    0
+        0x010060cc:    12000000    ....    DCD    301989888
+        0x010060d0:    28030200    ...(    DCD    671285760
+        0x010060d4:    00130401    ....    DCD    1246209
+        0x010060d8:    ca69fe10    ..i.    DCD    3395943952
+        0x010060dc:    f619569a    .V..    DCD    4128855706
+        0x010060e0:    aa4d02ab    ..M.    DCD    2857173675
+        0x010060e4:    5353436d    mCSS    DCD    1397965677
+        0x010060e8:    00001449    I...    DCD    5193
+        0x010060ec:    00000000    ....    DCD    0
+        0x010060f0:    00000000    ....    DCD    0
+        0x010060f4:    00000000    ....    DCD    0
+        0x010060f8:    00000000    ....    DCD    0
+        0x010060fc:    00140000    ....    DCD    1310720
+        0x01006100:    01280302    ..(.    DCD    19399426
+        0x01006104:    1000151a    ....    DCD    268440858
+        0x01006108:    28a60318    ...(    DCD    681968408
+        0x0100610c:    91ecd85e    ^...    DCD    2448218206
+        0x01006110:    aca3481c    .H..    DCD    2896381980
+        0x01006114:    49535343    CSSI    DCD    1230197571
+        0x01006118:    00000014    ....    DCD    20
+        0x0100611c:    00000000    ....    DCD    0
+        0x01006120:    00000000    ....    DCD    0
+        0x01006124:    00000000    ....    DCD    0
+        0x01006128:    00000000    ....    DCD    0
+        0x0100612c:    02001600    ....    DCD    33560064
+        0x01006130:    00022902    .)..    DCD    141570
+        0x01006134:    aa000000    ....    DCD    2852126720
+        0x01006138:    76000755    U..v    DCD    1979713365
+        0x0100613c:    f0840f41    A...    DCD    4035186497
+        0x01006140:    32b20b0a    ...2    DCD    850529034
+        0x01006144:    000255aa    .U..    DCD    153002
+        0x01006148:    0b8b4157    WA..    DCD    193675607
+        0x0100614c:    000855aa    .U..    DCD    546218
+        0x01006150:    000000a1    ....    DCD    161
+        0x01006154:    00000000    ....    DCD    0
+        0x01006158:    55aa0000    ...U    DCD    1437204480
+        0x0100615c:    40bd0002    ...@    DCD    1086128130
+        0x01006160:    55aa2402    .$.U    DCD    1437213698
+        0x01006164:    40ad0008    ...@    DCD    1085079560
+        0x01006168:    02000040    @...    DCD    33554496
+        0x0100616c:    02000032    2...    DCD    33554482
+        0x01006170:    000255aa    .U..    DCD    153002
+        0x01006174:    002040bb    .@ .    DCD    2113723
+        0x01006178:    000455aa    .U..    DCD    284074
+        0x0100617c:    002040b7    .@ .    DCD    2113719
+        0x01006180:    55aa2000    . .U    DCD    1437212672
+        0x01006184:    40bf0004    ...@    DCD    1086259204
+        0x01006188:    10000480    ....    DCD    268436608
+        0x0100618c:    000555aa    .U..    DCD    349610
+        0x01006190:    0e0844e2    .D..    DCD    235422946
+        0x01006194:    aa000405    ....    DCD    2852127749
+        0x01006198:    02000255    U...    DCD    33555029
+        0x0100619c:    aa1f3042    B0..    DCD    2854170690
+        0x010061a0:    10000155    U...    DCD    268435797
+        0x010061a4:    55aa2042    B .U    DCD    1437212738
+        0x010061a8:    41e00001    ...A    DCD    1105199105
+        0x010061ac:    0f55aa01    ..U.    DCD    257272321
+        0x010061b0:    4b4bde00    ..KK    DCD    1263263232
+        0x010061b4:    56d055ba    .U.V    DCD    1456494010
+        0x010061b8:    588857e0    .W.X    DCD    1485330400
+        0x010061bc:    0710596c    lY..    DCD    118511980
+        0x010061c0:    55aaffff    ...U    DCD    1437270015
+        0x010061c4:    40c30002    ...@    DCD    1086521346
+        0x010061c8:    5ab24bde    .K.Z    DCD    1521634270
+    .constdata
+    __FUNCTION__
+        0x010061cc:    4f495047    GPIO    DCD    1330204743
+        0x010061d0:    6e6f435f    _Con    DCD    1852785503
+        0x010061d4:    00676966    fig.    DCD    6777190
+    __FUNCTION__
+        0x010061d8:    4f495047    GPIO    DCD    1330204743
+        0x010061dc:    696e495f    _Ini    DCD    1768835423
+        0x010061e0:    0074        t.      DCW    116
+    __FUNCTION__
+        0x010061e2:    5047        GP      DCW    20551
+        0x010061e4:    505f4f49    IO_P    DCD    1348423497
+        0x010061e8:    556c6c75    ullU    DCD    1433169013
+        0x010061ec:    646d4370    pCmd    DCD    1684882288
+        0x010061f0:    00          .       DCB    0
+    __FUNCTION__
+        0x010061f1:    475049      GPI     DCB    71,80,73
+        0x010061f4:    65525f4f    O_Re    DCD    1699897167
+        0x010061f8:    6e496461    adIn    DCD    1850303585
+        0x010061fc:    44747570    putD    DCD    1148482928
+        0x01006200:    00617461    ata.    DCD    6386785
+    __FUNCTION__
+        0x01006204:    4f495047    GPIO    DCD    1330204743
+        0x01006208:    6165525f    _Rea    DCD    1634030175
+        0x0100620c:    706e4964    dInp    DCD    1886275940
+        0x01006210:    61447475    utDa    DCD    1631876213
+        0x01006214:    69426174    taBi    DCD    1765958004
+        0x01006218:    0074        t.      DCW    116
+    __FUNCTION__
+        0x0100621a:    5047        GP      DCW    20551
+        0x0100621c:    525f4f49    IO_R    DCD    1381977929
+        0x01006220:    4f646165    eadO    DCD    1331978597
+        0x01006224:    75707475    utpu    DCD    1970304117
+        0x01006228:    74614474    tDat    DCD    1952531572
+        0x0100622c:    0061        a.      DCW    97
+    __FUNCTION__
+        0x0100622e:    5047        GP      DCW    20551
+        0x01006230:    525f4f49    IO_R    DCD    1381977929
+        0x01006234:    4f646165    eadO    DCD    1331978597
+        0x01006238:    75707475    utpu    DCD    1970304117
+        0x0100623c:    74614474    tDat    DCD    1952531572
+        0x01006240:    74694261    aBit    DCD    1953055329
+        0x01006244:    00          .       DCB    0
+    __FUNCTION__
+        0x01006245:    475049      GPI     DCB    71,80,73
+        0x01006248:    65525f4f    O_Re    DCD    1699897167
+        0x0100624c:    42746573    setB    DCD    1114924403
+        0x01006250:    00737469    its.    DCD    7566441
+    __FUNCTION__
+        0x01006254:    4f495047    GPIO    DCD    1330204743
+        0x01006258:    7465535f    _Set    DCD    1952797535
+        0x0100625c:    73746942    Bits    DCD    1937008962
+        0x01006260:    00          .       DCB    0
+    __FUNCTION__
+        0x01006261:    475049      GPI     DCB    71,80,73
+        0x01006264:    72575f4f    O_Wr    DCD    1918328655
+        0x01006268:    00657469    ite.    DCD    6648937
+    __FUNCTION__
+        0x0100626c:    4f495047    GPIO    DCD    1330204743
+        0x01006270:    6972575f    _Wri    DCD    1769101151
+        0x01006274:    69426574    teBi    DCD    1765959028
+        0x01006278:    0074        t.      DCW    116
+    .constdata
+    __FUNCTION__
+        0x0100627a:    4155        UA      DCW    16725
+        0x0100627c:    415f5452    RT_A    DCD    1096766546
+        0x01006280:    466f7475    utoF    DCD    1181709429
+        0x01006284:    43776f6c    lowC    DCD    1131900780
+        0x01006288:    436c7274    trlC    DCD    1131180660
+        0x0100628c:    646d        md      DCW    25709
+        0x0100628e:    00          .       DCB    0
+    __FUNCTION__
+        0x0100628f:    55          U       DCB    85
+        0x01006290:    5f545241    ART_    DCD    1599361601
+        0x01006294:    6e496544    DeIn    DCD    1850303812
+        0x01006298:    7469        it      DCW    29801
+        0x0100629a:    00          .       DCB    0
+    __FUNCTION__
+        0x0100629b:    55          U       DCB    85
+        0x0100629c:    5f545241    ART_    DCD    1599361601
+        0x010062a0:    53414d44    DMAS    DCD    1396788548
+        0x010062a4:    42646e65    endB    DCD    1113878117
+        0x010062a8:    6675        uf      DCW    26229
+        0x010062aa:    00          .       DCB    0
+    __FUNCTION__
+        0x010062ab:    55          U       DCB    85
+        0x010062ac:    5f545241    ART_    DCD    1599361601
+        0x010062b0:    74696e49    Init    DCD    1953066569
+        0x010062b4:    00          .       DCB    0
+    __FUNCTION__
+        0x010062b5:    554152      UAR     DCB    85,65,82
+        0x010062b8:    73495f54    T_Is    DCD    1934188372
+        0x010062bc:    49465852    RXFI    DCD    1229346898
+        0x010062c0:    75464f46    FOFu    DCD    1967542086
+        0x010062c4:    6c6c        ll      DCW    27756
+        0x010062c6:    00          .       DCB    0
+    __FUNCTION__
+        0x010062c7:    55          U       DCB    85
+        0x010062c8:    5f545241    ART_    DCD    1599361601
+        0x010062cc:    58527349    IsRX    DCD    1481798473
+        0x010062d0:    4f464946    FIFO    DCD    1330006342
+        0x010062d4:    45746f4e    NotE    DCD    1165258574
+        0x010062d8:    7974706d    mpty    DCD    2037674093
+        0x010062dc:    00          .       DCB    0
+    __FUNCTION__
+        0x010062dd:    554152      UAR     DCB    85,65,82
+        0x010062e0:    73495f54    T_Is    DCD    1934188372
+        0x010062e4:    54524155    UART    DCD    1414676821
+        0x010062e8:    79737542    Busy    DCD    2037609794
+        0x010062ec:    00          .       DCB    0
+    __FUNCTION__
+        0x010062ed:    554152      UAR     DCB    85,65,82
+        0x010062f0:    54495f54    T_IT    DCD    1414094676
+        0x010062f4:    666e6f43    Conf    DCD    1718513475
+        0x010062f8:    6769        ig      DCW    26473
+        0x010062fa:    00          .       DCB    0
+    __FUNCTION__
+        0x010062fb:    55          U       DCB    85
+        0x010062fc:    5f545241    ART_    DCD    1599361601
+        0x01006300:    65636552    Rece    DCD    1701012818
+        0x01006304:    44657669    iveD    DCD    1147500137
+        0x01006308:    00617461    ata.    DCD    6386785
+    __FUNCTION__
+        0x0100630c:    54524155    UART    DCD    1414676821
+        0x01006310:    6365525f    _Rec    DCD    1667584607
+        0x01006314:    66754276    vBuf    DCD    1718960758
+        0x01006318:    00          .       DCB    0
+    __FUNCTION__
+        0x01006319:    554152      UAR     DCB    85,65,82
+        0x0100631c:    65535f54    T_Se    DCD    1699962708
+        0x01006320:    7542646e    ndBu    DCD    1967285358
+        0x01006324:    0066        f.      DCW    102
+    __FUNCTION__
+        0x01006326:    4155        UA      DCW    16725
+        0x01006328:    535f5452    RT_S    DCD    1398756434
+        0x0100632c:    78527465    etRx    DCD    2018669669
+        0x01006330:    754e5449    ITNu    DCD    1968067657
+        0x01006334:    006d        m.      DCW    109
+    __FUNCTION__
+        0x01006336:    4155        UA      DCW    16725
+        0x01006338:    525f5452    RT_R    DCD    1381979218
+        0x0100633c:    69656365    ecei    DCD    1768252261
+        0x01006340:    61446576    veDa    DCD    1631872374
+        0x01006344:    654c6174    taLe    DCD    1699504500
+        0x01006348:    006e        n.      DCW    110
+    .constdata
+    __FUNCTION__
+        0x0100634a:    7973        sy      DCW    31091
+        0x0100634c:    63695473    sTic    DCD    1667847283
+        0x01006350:    65645f6b    k_de    DCD    1701076843
+        0x01006354:    5f79616c    lay_    DCD    1601790316
+        0x01006358:    736d        ms      DCW    29549
+        0x0100635a:    00          .       DCB    0
+    __FUNCTION__
+        0x0100635b:    53          S       DCB    83
+        0x0100635c:    69547379    ysTi    DCD    1767142265
+        0x01006360:    445f6b63    ck_D    DCD    1147104099
+        0x01006364:    79616c65    elay    DCD    2036427877
+        0x01006368:    0073555f    _Us.    DCD    7558495
+    __FUNCTION__
+        0x0100636c:    54737953    SysT    DCD    1416853843
+        0x01006370:    5f6b6369    ick_    DCD    1600873321
+        0x01006374:    666e6f43    Conf    DCD    1718513475
+        0x01006378:    6769        ig      DCW    26473
+        0x0100637a:    00          .       DCB    0
+    .constdata
+    __FUNCTION__
+        0x0100637b:    54          T       DCB    84
+        0x0100637c:    495f4d49    IM_I    DCD    1230982473
+        0x01006380:    0074696e    nit.    DCD    7629166
+    __FUNCTION__
+        0x01006384:    5f4d4954    TIM_    DCD    1598900564
+        0x01006388:    00646d43    Cmd.    DCD    6581571
+    __FUNCTION__
+        0x0100638c:    5f4d4954    TIM_    DCD    1598900564
+        0x01006390:    65646f4d    Mode    DCD    1701080909
+        0x01006394:    666e6f43    Conf    DCD    1718513475
+        0x01006398:    6769        ig      DCW    26473
+        0x0100639a:    00          .       DCB    0
+    __FUNCTION__
+        0x0100639b:    54          T       DCB    84
+        0x0100639c:    535f4d49    IM_S    DCD    1398754633
+        0x010063a0:    65507465    etPe    DCD    1699771493
+        0x010063a4:    646f6972    riod    DCD    1685023090
+        0x010063a8:    00          .       DCB    0
+    __FUNCTION__
+        0x010063a9:    54494d      TIM     DCB    84,73,77
+        0x010063ac:    4d57505f    _PWM    DCD    1297567839
+        0x010063b0:    74696e49    Init    DCD    1953066569
+        0x010063b4:    00          .       DCB    0
+    __FUNCTION__
+        0x010063b5:    54494d      TIM     DCB    84,73,77
+        0x010063b8:    7465535f    _Set    DCD    1952797535
+        0x010063bc:    504d5750    PWMP    DCD    1347245904
+        0x010063c0:    6f697265    erio    DCD    1869181541
+        0x010063c4:    0064        d.      DCW    100
+    __FUNCTION__
+        0x010063c6:    4954        TI      DCW    18772
+        0x010063c8:    57505f4d    M_PW    DCD    1464885069
+        0x010063cc:    6669444d    MDif    DCD    1718174797
+        0x010063d0:    65726566    fere    DCD    1701995878
+        0x010063d4:    6169746e    ntia    DCD    1634301038
+        0x010063d8:    006c        l.      DCW    108
+    .constdata
+    __FUNCTION__
+        0x010063da:    5953        SY      DCW    22867
+        0x010063dc:    52544353    SCTR    DCD    1381253971
+        0x010063e0:    48415f4c    L_AH    DCD    1212243788
+        0x010063e4:    72655042    BPer    DCD    1919242306
+        0x010063e8:    43687069    iphC    DCD    1130917993
+        0x010063ec:    6b636f6c    lock    DCD    1801678700
+        0x010063f0:    00646d43    Cmd.    DCD    6581571
+    __FUNCTION__
+        0x010063f4:    43535953    SYSC    DCD    1129535827
+        0x010063f8:    5f4c5254    TRL_    DCD    1598837332
+        0x010063fc:    65746e45    Ente    DCD    1702129221
+        0x01006400:    656c5372    rSle    DCD    1701598066
+        0x01006404:    7065        ep      DCW    28773
+        0x01006406:    00          .       DCB    0
+    __FUNCTION__
+        0x01006407:    53          S       DCB    83
+        0x01006408:    54435359    YSCT    DCD    1413698393
+        0x0100640c:    485f4c52    RL_H    DCD    1214205010
+        0x01006410:    434b4c43    CLKC    DCD    1129008195
+        0x01006414:    69666e6f    onfi    DCD    1768320623
+        0x01006418:    00000067    g...    DCD    103
+    .conststring
+        0x0100641c:    33323130    0123    DCD    858927408
+        0x01006420:    37363534    4567    DCD    926299444
+        0x01006424:    42413938    89AB    DCD    1111570744
+        0x01006428:    46454443    CDEF    DCD    1178944579
+        0x0100642c:    00000000    ....    DCD    0
+        0x01006430:    33323130    0123    DCD    858927408
+        0x01006434:    37363534    4567    DCD    926299444
+        0x01006438:    62613938    89ab    DCD    1650538808
+        0x0100643c:    66656463    cdef    DCD    1717920867
+        0x01006440:    00000000    ....    DCD    0
+    Region$$Table$$Base
+        0x01006444:    01006464    dd..    DCD    16802916
+        0x01006448:    00020000    ....    DCD    131072
+        0x0100644c:    0000004c    L...    DCD    76
+        0x01006450:    010049a8    .I..    DCD    16796072
+        0x01006454:    010064b0    .d..    DCD    16802992
+        0x01006458:    0002004c    L...    DCD    131148
+        0x0100645c:    000035d4    .5..    DCD    13780
+        0x01006460:    010049b8    .I..    DCD    16796088
+    Region$$Table$$Limit
+
+** Section #4 'RW_IRAM2' (SHT_PROGBITS) [SHF_ALLOC + SHF_WRITE]
+    Size   : 76 bytes (alignment 4)
+    Address: 0x00020000
+
+
+** Section #5 'RW_IRAM2' (SHT_NOBITS) [SHF_ALLOC + SHF_WRITE]
+    Size   : 13780 bytes (alignment 4)
+    Address: 0x0002004c
+
+
+** Section #6 '.debug_abbrev' (SHT_PROGBITS)
+    Size   : 1476 bytes
+
+
+** Section #7 '.debug_frame' (SHT_PROGBITS)
+    Size   : 5444 bytes
+
+
+** Section #8 '.debug_info' (SHT_PROGBITS)
+    Size   : 32788 bytes
+
+
+** Section #9 '.debug_line' (SHT_PROGBITS)
+    Size   : 14568 bytes
+
+
+** Section #10 '.debug_loc' (SHT_PROGBITS)
+    Size   : 12716 bytes
+
+
+** Section #11 '.debug_macinfo' (SHT_PROGBITS)
+    Size   : 90676 bytes
+
+
+** Section #12 '.debug_pubnames' (SHT_PROGBITS)
+    Size   : 3740 bytes
+
+
+** Section #13 '.symtab' (SHT_SYMTAB)
+    Size   : 8400 bytes (alignment 4)
+    String table #14 '.strtab'
+    Last local symbol no. 238
+
+
+** Section #14 '.strtab' (SHT_STRTAB)
+    Size   : 5704 bytes
+
+
+** Section #15 '.note' (SHT_NOTE)
+    Size   : 36 bytes (alignment 4)
+
+
+** Section #16 '.comment' (SHT_PROGBITS)
+    Size   : 9120 bytes
+
+
+** Section #17 '.shstrtab' (SHT_STRTAB)
+    Size   : 172 bytes
+
+
+address     size       variable name                            type
+0x00020040  0x4        IpcRx                                    pointer to IPC_TypeDef
+
+address     size       variable name                            type
+0x00020044  0x4        IpcTx                                    pointer to IPC_TypeDef
+
+address     size       variable name                            type
+0x00020048  0x1        ipc_inited                               Boolean
+
+address     size       variable name                            type
+0x0002003c  0x4        SystickCount                             tick
+
+address     size       variable name                            type
+0x00020028  0x5        CmdRepData                               array[5] of uint8_t
+
+address     size       variable name                            type
+0x00020020  0x8        HCI_CMD_BIT_FLAG                         array[2] of uint32_t
+
+address     size       variable name                            type
+0x0002001c  0x4        StartTick                                tick
+
+address     size       variable name                            type
+0x0002002e  0x1        bt_con_sta                               uint8_t
+
+address     size       variable name                            type
+0x0002002d  0x1        bt_con_type                              uint8_t
+
+address     size       variable name                            type
+0x00020039  0x1        credit_num                               uint8_t
+
+address     size       variable name                            type
+0x0002167c  0x1f40     hci_btble_data                           array[10] of array[800] of uint8_t
+
+address     size       variable name                            type
+0x00020030  0x1        hci_buf_read_index                       uint8_t
+
+address     size       variable name                            type
+0x0002002f  0x1        hci_buf_write_index                      uint8_t
+
+address     size       variable name                            type
+0x000235bc  0x64       hci_rec_state                            array[100] of uint8_t
+
+address     size       variable name                            type
+0x00020031  0x8        hci_rec_state_event                      HCI_TypeDef
+0x00020031  0x1        hci_rec_state_event.type                 uint8_t
+0x00020032  0x1        hci_rec_state_event.opcode               uint8_t
+0x00020033  0x2        hci_rec_state_event.DataLen              uint16_t
+0x00020035  0x4        hci_rec_state_event.p_data               pointer to uint8_t
+
+address     size       variable name                            type
+0x0002162c  0x50       hci_recappdata                           array[10] of HCI_TypeDef
+
+address     size       variable name                            type
+0x00020e2c  0x400      uart0_DMA_buf                            array[1024] of uint8_t
+
+address     size       variable name                            type
+0x0002122c  0x400      uart1_DMA_buf                            array[1024] of uint8_t
+
+address     size       variable name                            type
+0x0002004c  0xaa       NvramData                                array[170] of uint8_t
+
+address     size       variable name                            type
+0x00020000  0x2        ble_send_handle                          uint16_t
+
+address     size       variable name                            type
+0x00020005  0x1        bt2m0buf_full_flag                       uint8_t
+
+address     size       variable name                            type
+0x00020002  0x3        bt_cod                                   array[3] of uint8_t
+
+address     size       variable name                            type
+0x000200f8  0x34       bt_handler                               prt_yc3121_bt_handler_t
+0x000200f8  0x2      * bt_handler.rx_len                        uint16_t
+0x000200fc  0x4        bt_handler.rx_buf                        pointer to uint8_t
+0x00020100  0x4        bt_handler.tx_buf                        pointer to uint8_t
+0x00020104  0x10       bt_handler.bt_name                       array[16] of uint8_t
+0x00020114  0x4        bt_handler.pwd                           array[4] of uint8_t
+0x00020118  0x6        bt_handler.mac                           array[6] of uint8_t
+0x0002011e  0x1      * bt_handler.pair                          uint8_t
+0x00020120  0x4        bt_handler.version                       uint32_t
+0x00020124  0x2        bt_handler.ble_tx_handler                uint16_t
+0x00020126  0x2        bt_handler.ble_rx_handler                uint16_t
+0x00020128  0x2        bt_handler.ble_flow_handler              uint16_t
+0x0002012a  0x1        bt_handler.ble_first                     uint8_t
+
+address     size       variable name                            type
+0x00020006  0x10       hex_lookup                               array[16] of uint8_t
+
+address     size       variable name                            type
+0x00020017  0x1        parse_ch                                 uint8_t
+
+address     size       variable name                            type
+0x00020016  0x1        parse_flag                               uint8_t
+
+address     size       variable name                            type
+0x00020018  0x1        parse_pt                                 uint8_t
+
+address     size       variable name                            type
+0x00020a2c  0x400      read                                     array[1024] of uint8_t
+
+address     size       variable name                            type
+0x0002022c  0x800      rxbuf                                    array[2048] of uint8_t
+
+address     size       variable name                            type
+0x0002012c  0x100      txbuf                                    array[256] of uint8_t
+
+address     size       variable name                            type
+0x01004b40  0x168c     bt_code                                  array[5772] of const unsigned char
+
+address     size       variable name                            type
+0x01004b38  0x4        g_pcHex1                                 const pointer to const int8_t
+
+address     size       variable name                            type
+0x01004b3c  0x4        g_pcHex2                                 const pointer to const int8_t
+
Index: BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/user/main.c
===================================================================
--- /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/user/main.c	(nonexistent)
+++ /YC3121_demo/ModuleDemo/BlueTooth/BT_doublebyte/sdk/ModuleDemo/BlueTooth/BT_BLE2/user/main.c	(working copy)
@@ -0,0 +1,666 @@
+/**
+  ******************************************************************************
+  * @file    3121Demo\ModuleDemo\BlueTooth\BT&BLE\user\main.c
+  * @author  Yichip Application Team
+  * @version V1.0.0
+  * @date    18-Feb-2020
+  * @brief   BT&BLE test program.
+  ******************************************************************************
+  * @attention
+  *
+  * COPYRIGHT 2019 Yichip Microelectronics
+  *
+  * The purpose of this firmware is to provide guidance to customers engaged in
+	* programming work to guide them smoothly to product development,
+	* so as to save their time.
+	*
+	* Therefore, Yichip microelectronics shall not be responsible for any direct,
+	* indirect or consequential damages caused by any content of this gu jiang
+	* and/or contained in this code used by the customer in its products.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "yc3121.h"
+#include "yc_gpio.h"
+#include "yc_uart.h"
+#include "yc_bt.h"
+#include "yc_systick.h"
+#include "yc_qspi.h"
+#include "yc_ipc.h"
+#include "board_config.h"
+
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+#define IPC_UART UART0
+#define UART_TO_IPC_BAUDRATE	921600
+
+
+#define YCBTDBG(...)     MyPrintf(__VA_ARGS__)
+#define E_OK                     (0x00000000)
+#define E_FAIL                  (0x00000001)
+
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+void UART_Configuration(void);
+
+
+typedef struct {
+
+    uint16_t            rx_len;
+    uint8_t *           rx_buf;
+    uint8_t *           tx_buf;
+    uint8_t             bt_name[16];
+    uint8_t             pwd[4];
+    uint8_t             mac[6];
+    uint8_t             pair;
+    uint32_t            version;
+    uint16_t            ble_tx_handler;
+    uint16_t            ble_rx_handler;
+    uint16_t            ble_flow_handler;
+    uint8_t             ble_first;
+    
+}prt_yc3121_bt_handler_t;
+
+
+#define IFLASH_NVRAM_ADDR 0x1000000+((512-4)*1024)
+#define NVRAM_LEN 170//Nvram 闀垮害170bytes,姣忕粍Nvram闀垮害涓?34bytes,鏈?澶氬彲瀛樺偍5缁勯厤瀵逛俊鎭?
+
+uint16_t ble_send_handle=0x2a;
+uint8_t bt_cod[3] = {0x24,0x04,0x04};
+uint8_t NvramData[NVRAM_LEN]={0};
+
+
+//write flash
+uint8_t   ReserveNV(uint8_t* nvram);
+extern tick SystickCount;
+//#define UART_TO_IPC
+#ifdef UART_TO_IPC
+HCI_TypeDef HCI_Tx;
+HCI_TypeDef HCI_Rx;
+uint8_t ipc_tx_buf[256];
+uint8_t ipc_rx_buf[1024];
+#endif
+
+uint8_t bt2m0buf_full_flag = 0;
+
+extern uint8_t hci_buf_write_index;
+extern uint8_t hci_buf_read_index;
+
+void BT_IRQHandler()
+{
+    uint8_t ret = 0;
+    while (IPC_have_data())
+    {
+        #ifdef UART_TO_IPC
+		if(TRUE==IPC_ReadBtData(&HCI_Rx))
+		{
+			UART_SendBuf(IPC_UART,(uint8_t*)&HCI_Rx,4);
+			UART_SendBuf(IPC_UART,HCI_Rx.p_data,HCI_Rx.DataLen);
+		}
+        #else
+        if (hci_buf_write_index >= hci_buf_read_index)
+        {
+            ret = hci_buf_write_index - hci_buf_read_index;
+        }
+        else 
+        {
+            ret = hci_buf_write_index + HCI_BT_NUM - hci_buf_read_index;
+        }
+        //此判断用于防止接收包buf full
+        if(ret >= (HCI_BT_NUM-1))
+        {
+            #if BT_LOG
+            MyPrintf("Buf full");
+            #endif
+            NVIC_DisableIRQ(BT_IRQn);
+            BT_CONFIG &= (~(1<<BT_INIT_FLAG));
+            bt2m0buf_full_flag = 1;
+            return;
+        }
+    
+        bt2m0buf_full_flag = 0;
+        
+        hci_buf_write_index++;
+        if (hci_buf_write_index >= HCI_BT_NUM)
+        {
+            hci_buf_write_index = 0;
+        }
+        
+        BT_ParseBTData();
+        #endif
+    }
+
+    BT_CONFIG &= (~(1 << BT_INIT_FLAG));
+}
+
+
+void SYSTICK_IRQHandler()
+{
+	SystickCount++;
+	if(SystickCount>=TICK_MAX_VALUE)	SystickCount=0;
+}
+
+
+
+static uint8_t hex_lookup[16] = { '0', '1', '2', '3', '4', '5', '6', '7','8','9', 'a', 'b', 'c', 'd', 'e', 'f' };
+static void array2hex(uint8_t* in, int inlen, uint8_t* out)
+{
+	int i;
+	for (i = 0; i < inlen; ++i)
+	{
+		out[2 * i] = hex_lookup[in[inlen-1-i] >> 4];
+		out[2 * i + 1] = hex_lookup[in[inlen-1-i] & 0x0f];
+	}
+}
+
+static prt_yc3121_bt_handler_t bt_handler;
+
+extern Boolean prt_ble_first_get(void)
+{
+    if (bt_handler.ble_first) {
+        return TRUE ;
+    } else {
+        return FALSE;
+    }
+}
+
+
+extern Boolean prt_is_ble_data(uint16_t handler)
+{
+    if (bt_handler.ble_tx_handler == handler) {
+        return TRUE;
+    } else {
+        return FALSE;
+    }
+}
+
+extern void prt_ble_first_set(Boolean need)
+{
+    bt_handler.ble_first = need;
+}
+
+extern void prt_yc3121_bt_post_event(uint16_t event)
+{
+    switch(event) 
+    {
+        case HCI_EVENT_BT_CONNECTED:
+            YCBTDBG("evtBTSPPConected\n");
+						BT_SetSppFlowcontrol(2);
+            break;
+        case HCI_EVENT_BT_DISCONNECTED:
+            YCBTDBG("evtBTSPPDisconected\n");
+            break;
+        case HCI_EVENT_BLE_CONNECTED:
+            YCBTDBG("evtBTBLEConected\n");
+            break;
+        case HCI_EVENT_BLE_DISCONNECTED:
+            YCBTDBG("evtBTBLEDisconected\n");
+            break;
+    }
+}
+
+extern void prt_bt_ble_set_mtu(void)
+{
+    uint8_t buf[10], len = 0;
+    len = 0;
+    memset(buf, 0, sizeof(buf));
+    buf[len++] = bt_handler.ble_flow_handler & 0xFF;
+    buf[len++] = (bt_handler.ble_flow_handler >> 8) & 0xFF;
+    buf[len++] = 0x02;
+    buf[len++] = 127;    //127
+    buf[len++] = 0x00;
+    BT_SendBleData(buf, len);
+}
+extern Boolean prt_bt_ble_flow_proc(uint8_t pack_num)
+{
+    uint8_t buf[10], len = 0;
+
+    buf[len++] = bt_handler.ble_flow_handler & 0xFF;
+    buf[len++] = (bt_handler.ble_flow_handler >> 8) & 0xFF;
+    buf[len++] = 0x01;
+    buf[len++] = pack_num;
+    BT_SendBleData(buf, len);
+    return TRUE;
+}
+
+
+
+void genBleAdvData(uint8_t *ble_name,int ble_name_len,uint8_t *ble_mac,uint8_t *ble_adv_data)
+{
+    int index=0;
+    //property
+    ble_adv_data[index++]=0x02;
+    ble_adv_data[index++]=0x01;
+    ble_adv_data[index++]=0x02;
+    //name
+    ble_adv_data[index++]=(ble_name_len+1);
+    ble_adv_data[index++]=0x09;//name flag
+    for(int i=0;i<ble_name_len;i++)
+    {
+        ble_adv_data[index++]=ble_name[i];
+    }
+    //manufacturer info
+    ble_adv_data[index++]=0x09;
+    ble_adv_data[index++]=0xff;//manufacturer info flag
+    ble_adv_data[index++]=0x00;
+    ble_adv_data[index++]=0x00;
+    for(int i=0;i<6;i++)
+    {
+        ble_adv_data[index++]=ble_mac[5-i];
+    }
+    //fill
+    while(index<31)
+    {
+        ble_adv_data[index++]=0x00;
+    }
+}
+
+static uint32_t bt_init_proc(void)
+{
+    uint8_t bt_cod[3] = {0x80, 0x06, 0x04,};
+    uint32_t ret = E_OK;
+
+    uint8_t ble_service_uuid_lsps[] =
+    {
+        0x02,
+        0x00, 0xFF,
+    };
+
+
+    uint8_t ble_Characteristic_uuid_lsps_tx[] =
+    {
+        0x0c, 0x02,
+        0x02, 0xff,
+        0x01, 0x00,
+    };
+
+    uint8_t ble_Characteristic_uuid_lsps_rx[] =
+    {
+        0x10,0x02,
+
+        0x01, 0xff,
+        0x01, 0x00,
+    };
+
+    uint8_t ble_Characteristic_uuid_flow_ctrl[] =
+    {
+        0x10, 0x02,
+        0x03, 0xff,
+        0x01, 0x00,
+    };
+uint8_t ble_ota_service_uuid_lsps[] = {0x10,0x55,0xe4,0x05,0xd2,0xaf,0x9f,0xa9,0x8f,0xe5,0x4a,0x7d,0xfe,0x55,0x49,0x55,0x4D};
+//49535343-1E4D-4BD9-BA61-23C647249616
+uint8_t ble_ota_Characteristic_uuid_lsps_tx[] = {0x10,0x10,0x16,0x96,0x24,0x47,0xc6,0x23,0x61,0xba,0xd9,0x4b,0x4d,0x1e,0x55,0x49,0x55,0x4D,0x01,0x00};
+//49535343-8841-43F4-A8D4-ECBE34729BB3
+uint8_t ble_ota_Characteristic_uuid_lsps_rx[] = {0x0c,0x10,0xb3,0x9b,0x72,0x34,0xbe,0xec,0xd4,0xa8,0xf4,0x43,0x41,0x88,0x55,0x49,0x55,0x4D,0x01,0x00};
+//49535343-aca3-481c-91ec-d85e28a60318
+uint8_t ble_ota_Characteristic_uuid_flow_ctrl[] = {0x18,0x10,0x18,0x03,0xa6,0x28,0x5e,0xd8,0xec,0x91,0x1c,0x48,0xa3,0xac,0x55,0x49,0x55,0x4D,0x01,0x00};
+
+    uint8_t ble_adv_data[31];
+    memset(ble_adv_data, 0, sizeof(ble_adv_data));
+#if !(defined(PRT_RTOS_FREE_RTOS) || defined(UCOSVERSION) ) // config systick when no RTOS is running
+	SysTick_Config(CPU_MHZ/1000);
+#endif
+    MyPrintf("xx1\n");
+    BT_Init(bt_handler.rx_buf, bt_handler.rx_len);    
+    MyPrintf("xx2\n");
+
+    NVIC_EnableIRQ(BT_IRQn);   
+    MyPrintf("xx3\n");
+
+    NVIC_SetPriority(BT_IRQn, 2);
+
+    if (BT_SetBleName(bt_handler.bt_name, sizeof(bt_handler.bt_name) - 1) == TRUE) {
+        YCBTDBG("SetBleName_suc ble name:%s\n", bt_handler.bt_name);
+    } else {
+        YCBTDBG("SetBleName_failed\n");
+        ret = E_FAIL;
+    }
+
+    if (BT_SetBtName(bt_handler.bt_name, sizeof(bt_handler.bt_name) - 1) == TRUE) {//bt与ble名字地址可以设置成一�?
+        YCBTDBG("SetbtName_suc spp name:%s\n", bt_handler.bt_name);
+    } else {
+        YCBTDBG("SetbtName_fail\n");
+        ret = E_FAIL;
+    }
+
+    if (BT_SetBleAddr(bt_handler.mac) == TRUE){
+        YCBTDBG("SetBleAddr_suc:%02x %02x %02x %02x %02x %02x \n",
+            bt_handler.mac[0],
+            bt_handler.mac[1],
+            bt_handler.mac[2],
+            bt_handler.mac[3],
+            bt_handler.mac[4],
+            bt_handler.mac[5]);
+    } else {
+        YCBTDBG("SetBleAddr_fail\n");
+        ret = E_FAIL;
+    }
+
+    if (BT_SetBtAddr(bt_handler.mac) == TRUE){
+        YCBTDBG("SetBtAddr_suc:%02x %02x %02x %02x %02x %02x\n",
+            bt_handler.mac[0],
+            bt_handler.mac[1],
+            bt_handler.mac[2],
+            bt_handler.mac[3],
+            bt_handler.mac[4],
+            bt_handler.mac[5]);
+    } else {
+        YCBTDBG("SetBleName_failed\n");
+        ret = E_FAIL;
+    }
+
+
+    if (BT_SetParingMode(bt_handler.pair) == TRUE) {//设置配对模式为confirmkey
+        YCBTDBG("set pair mode success:%d\n", bt_handler.pair);
+    } else {
+        YCBTDBG("set pair mode failed\n");
+        ret = E_FAIL;
+    }
+
+    if (BT_SetCOD(bt_cod) == TRUE) { //设置COD
+        YCBTDBG("set COD sucess\n");
+    } else {
+        YCBTDBG("set COD failed\n");
+        ret = E_FAIL;
+    }
+
+    if (BT_DeleteService() == TRUE) { //  删除用户自定义服�?
+        YCBTDBG("delete service sucess\n");
+    } else {
+        YCBTDBG("delete service failed\n");
+        ret = E_FAIL;
+    }
+
+
+    uint16_t temp_handle = BT_AddBleService(ble_service_uuid_lsps, sizeof(ble_service_uuid_lsps));
+    if (temp_handle != 0)  {//增加服务 返回handle无需保存
+        YCBTDBG("add service sucess,handle=%04x\n", temp_handle);
+    } else  {
+        YCBTDBG("add service failed,return=%04x\n", temp_handle);
+        ret = E_FAIL;
+    }
+
+    bt_handler.ble_tx_handler = BT_AddBleCharacteristic(ble_Characteristic_uuid_lsps_tx,
+         sizeof(ble_Characteristic_uuid_lsps_tx));
+    if (bt_handler.ble_tx_handler != 0) {  //增加服务特征  write返回的handle�?要保存，发数据使�?
+        YCBTDBG("add Characteristic tx sucess,handle=%04x\n", bt_handler.ble_tx_handler);
+    } else {
+        YCBTDBG("add Characteristic tx failed,return=%04x\n", bt_handler.ble_tx_handler);
+        ret = E_FAIL;
+    }
+
+    bt_handler.ble_rx_handler = BT_AddBleCharacteristic(ble_Characteristic_uuid_lsps_rx, 
+        sizeof(ble_Characteristic_uuid_lsps_rx));
+    if (bt_handler.ble_rx_handler != 0) {
+        YCBTDBG("add Characteristic rx sucess;handle=%04x\n", bt_handler.ble_rx_handler);
+    } else {
+        YCBTDBG("add Characteristic rx failed,return=%04x\n", bt_handler.ble_rx_handler);
+        ret = E_FAIL;
+    }
+
+    bt_handler.ble_flow_handler = BT_AddBleCharacteristic(ble_Characteristic_uuid_flow_ctrl,
+         sizeof(ble_Characteristic_uuid_flow_ctrl));
+    if (bt_handler.ble_flow_handler != 0) {
+        YCBTDBG("add Characteristic flow_ctrl sucess;handle=%04x\n", bt_handler.ble_flow_handler);
+    } else  {
+        YCBTDBG("add Characteristic flow_ctrl failed,return=%04x\n", bt_handler.ble_flow_handler);
+        ret = E_FAIL;
+		
+    }		
+		
+    bt_handler.ble_flow_handler = BT_AddBleCharacteristic(ble_Characteristic_uuid_flow_ctrl,
+         sizeof(ble_Characteristic_uuid_flow_ctrl));
+    if (bt_handler.ble_flow_handler != 0) {
+        YCBTDBG("add Characteristic flow_ctrl sucess;handle=%04x\n", bt_handler.ble_flow_handler);
+    } else  {
+        YCBTDBG("add Characteristic flow_ctrl failed,return=%04x\n", bt_handler.ble_flow_handler);
+        ret = E_FAIL;
+    }
+		
+		
+		
+    genBleAdvData(bt_handler.bt_name, sizeof(bt_handler.bt_name)-1, bt_handler.mac, ble_adv_data);
+    if(BT_SetLEAdvData(ble_adv_data,sizeof(ble_adv_data)) == TRUE){
+		YCBTDBG("BT_SetLEAdvData sucess\n");
+	} else {
+		YCBTDBG("BT_SetLEAdvData failed\n");
+        ret = E_FAIL;
+    }
+
+    if(BT_SetLEScanData(ble_adv_data,sizeof(ble_adv_data)) == TRUE) {
+		YCBTDBG("BT_SetLEScanData sucess\n");
+    } else {
+		YCBTDBG("BT_SetLEScanData failed\n");
+        ret = E_FAIL;
+    }
+
+
+    if (BT_SetVisibility(TRUE, TRUE, TRUE) == TRUE) {//设置可发现?
+        YCBTDBG("SetVisibility sucess\n");
+    } else {
+        YCBTDBG("SetVisibility failed\n");
+        ret = E_FAIL;
+    }
+
+    bt_handler.version = BT_GetVersion();
+    YCBTDBG("bt version=%x\n", bt_handler.version);
+    
+    return ret;
+}
+
+
+static void bt_write(uint8_t *buf, uint32_t len)
+{
+    memset(bt_handler.tx_buf, 0, 256);
+    if (prt_get_bt_type() == HCI_EVENT_BLE_DATA_RECEIVED) {
+
+        memcpy(&bt_handler.tx_buf[2], buf, len);
+
+        bt_handler.tx_buf[0] = (bt_handler.ble_rx_handler & 0xff);
+        bt_handler.tx_buf[1] = ((bt_handler.ble_rx_handler >> 8) & 0xff);
+        BT_SendBleData((uint8_t *)bt_handler.tx_buf, len+2);
+    } else {
+        memcpy(bt_handler.tx_buf, buf, len);
+        BT_SendSppData(bt_handler.tx_buf, len);
+    }
+
+}
+
+
+static uint8_t parse_flag = 0, parse_ch = 0, parse_pt;
+
+static uint8_t prt_printbuf_data_parse(uint8_t * ch)
+{
+    if (parse_flag == 1) {
+        *ch ^= parse_ch;
+//        MyPrintf("%c", *ch);  // output received data after handshake  
+        return 0;
+    }
+
+    switch (parse_pt) {
+        case 0:
+            if (*ch == 0x1b) {
+                parse_pt++;
+            }
+            break;
+        case 1:
+            if (*ch == 0x1c) {
+                parse_pt++;
+            } else {
+                parse_pt = 0;
+            }
+            break;
+        case 2:
+            if (*ch == 0x73) {
+                parse_pt++;
+            } else {
+                parse_pt = 0;
+            }
+            break;
+        case 3:
+            if (*ch == 0x65) {
+                parse_pt++;
+            } else {
+                parse_pt = 0;
+            }
+            break;
+        case 4:
+            if (*ch == 0x74) {
+                parse_pt++;
+            } else {
+                parse_pt = 0;
+            }
+            break;
+        case 5:
+            if (*ch == 0x20) {
+                parse_pt++;
+            } else {
+                parse_pt = 0;
+            }
+            break;
+        case 6:
+            if (*ch == 0x6d) {
+                parse_pt++;
+            } else {
+                parse_pt = 0;
+            }
+            break;
+        case 7:
+            if (*ch == 0x6d) {
+                parse_pt++;
+            } else {
+                parse_pt = 0;
+            }
+            break;
+        case 8:
+            parse_ch = *ch;
+            parse_pt++;
+            break;
+        case 9:
+            parse_ch += *ch;
+            parse_flag = 1;
+            parse_pt = 0;
+
+            #ifndef N8
+            bt_write( "OK", 2);
+//            printf("hand shake ok\n");
+            #else
+            prt_uart_write(port, "GLB", 3);
+            #endif
+//            printf("parse success\n");
+            return 0;
+
+         default:
+            parse_pt = 0;
+            break;
+    }
+
+    return parse_flag;
+}
+
+
+/**
+  * @brief  Main program
+  * @param  None
+  * @retval None
+  */
+
+uint8_t txbuf[256];
+uint8_t rxbuf[2048];
+uint8_t read[1024];
+int main(void)
+{
+    
+    int rlen = 0;
+    int i ;
+    SYSCTRL_HCLKConfig(SYSCTRL_HCLK_Div_None);
+	UART_Configuration();
+	MyPrintf("bt ble demo\n");
+    memcpy(bt_handler.bt_name, "Poooli_L5S", sizeof("Poooli_L5S"));
+    memcpy(bt_handler.pwd, "1234", sizeof("1234")-1);
+    memcpy(bt_handler.mac, "\x58\x68\x00\x7a\x67\x86", 6);
+    bt_handler.pair = 1;
+    bt_handler.tx_buf = txbuf;
+    bt_handler.rx_buf = rxbuf;
+    bt_handler.rx_len = 2048;	
+    MyPrintf("x1\n");
+
+    #ifdef UART_TO_IPC
+	HCI_Tx.p_data=ipc_tx_buf;
+	HCI_Rx.p_data=ipc_rx_buf;
+	#endif
+    
+    bt_init_proc();
+	MyPrintf("bt init ok\n");
+	while (1)
+	{
+        #ifdef UART_TO_IPC
+		if(UART_IsRXFIFONotEmpty(IPC_UART))
+		{
+			HCI_Tx.type = UART_ReceiveData(IPC_UART);
+			while(!UART_IsRXFIFONotEmpty(IPC_UART));
+			HCI_Tx.opcode = UART_ReceiveData(IPC_UART);
+			while(!UART_IsRXFIFONotEmpty(IPC_UART));
+			HCI_Tx.DataLen = UART_ReceiveData(IPC_UART);
+			i=0;
+			while(i<HCI_Tx.DataLen)
+			{
+				while(!UART_IsRXFIFONotEmpty(IPC_UART));
+				HCI_Tx.p_data[i++] = UART_ReceiveData(IPC_UART);
+			}
+			IPC_TxData(&HCI_Tx);
+		}
+		#else
+        rlen = prt_get_bt_data(read, 1024);
+        #endif
+    }
+}
+
+/**
+  * @brief  Serial port 0 initialization function.
+  * @param  None
+  * @retval None
+  */
+void UART_Configuration(void)
+{
+	UART_InitTypeDef UART_InitStruct;
+
+	/* Configure serial ports 0 RX and TX for IO. */
+	GPIO_Config(UART0_TX_PORT, UART0_TX_PIN, UART0_TXD);
+	GPIO_Config(UART0_RX_PORT, UART0_RX_PIN, UART0_RXD);
+
+	/* USARTx configured as follow:
+  - BaudRate = 115200 baud
+  - Word Length = 8 Bits
+  - Stop Bit = 1 Stop Bit
+  - Parity = No Parity
+  - Hardware flow control disabled (RTS and CTS signals)
+  - Receive and transmit enabled
+  */
+	#ifdef UART_TO_IPC
+	UART_InitStruct.BaudRate = UART_TO_IPC_BAUDRATE;			//Configure serial port baud rate, the baud rate defaults to 128000.
+	#else
+	UART_InitStruct.BaudRate = UARTBAUD;
+	#endif
+	UART_InitStruct.DataBits = Databits_8b;
+	UART_InitStruct.StopBits = StopBits_1;
+	UART_InitStruct.Parity = Parity_None;
+	UART_InitStruct.FlowCtrl = FlowCtrl_None;
+	UART_InitStruct.Mode = Mode_duplex;
+
+	UART_Init(UART0, &UART_InitStruct);
+}
+
+uint8_t   ReserveNV(uint8_t* nvram)
+{
+	MyPrintf("new nvram data,updata to flash\r\n");
+	qspi_flash_sectorerase(IFLASH_NVRAM_ADDR);
+	return qspi_flash_write(IFLASH_NVRAM_ADDR,nvram,NVRAM_LEN);
+}
+
+/************************ (C) COPYRIGHT Yichip Microelectronics *****END OF FILE****/
+
