Index: core/bt_code.c
===================================================================
--- /YC3121_SDK/fw/core/bt_code.c	(revision 843)
+++ /YC3121_SDK/fw/core/bt_code.c	(working copy)
@@ -1,284 +1,283 @@
 const unsigned char bt_code[] = {
-0x00,0x02,0xaa,0x55,0xf6,0x0b,0xc2,0x84,0x00,0x0e,0xc0,0x00,0x80,0x3c,0xc0,0x42,
-0x80,0x42,0xc0,0x44,0x80,0x63,0xc0,0x4a,0x00,0x22,0xc0,0x51,0x00,0x6c,0xc0,0x51,
-0x80,0x2d,0xc0,0x54,0x80,0x30,0xc0,0x56,0x00,0x73,0xc0,0x5c,0x00,0x74,0xc0,0x5d,
-0x80,0xb3,0xc0,0x5e,0x01,0x0e,0xc0,0x75,0x81,0x2f,0x20,0x20,0x4a,0x8b,0xc0,0x01,
-0x81,0x39,0xc0,0x02,0x81,0x45,0xc0,0x03,0x01,0x4e,0xc0,0x03,0x81,0x53,0xc0,0x04,
-0x01,0x5c,0xc0,0x05,0x81,0x6d,0xc0,0x09,0x81,0x7d,0xc0,0x0a,0x02,0x02,0xc0,0x0e,
-0x02,0x15,0xc0,0x0f,0x02,0x3e,0xc0,0x0f,0x82,0x6c,0xc0,0x10,0x82,0xa0,0xc0,0x19,
-0x02,0xaf,0xc0,0x1d,0x02,0xc2,0xc0,0x1f,0x02,0xcd,0xc0,0x20,0x82,0xdf,0xc0,0x29,
-0x02,0xe5,0xc0,0x46,0x82,0x53,0xc0,0x4c,0x82,0xf9,0x20,0x20,0x4a,0x8b,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,0x39,0x20,0x20,0x4a,0x2f,0x1b,0x42,0x7e,0x00,0x20,0x40,
-0x00,0x38,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,0x38,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,0x40,0x20,0x20,0x40,0x0a,0x20,0x75,0x80,0x00,0x20,0x20,0x7b,0x9a,0x20,0x30,
-0x80,0x52,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,0x50,0xc0,0x00,0x80,0x60,0xc0,0x01,0x00,0x50,0xc0,0x01,0x80,0x60,0xc0,0x02,
-0x00,0x60,0xc0,0x10,0x00,0x60,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,0x52,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,0x00,0x82,0x67,0xe4,0x41,0xf6,0x58,0x00,
-0x00,0x90,0x67,0xe4,0x41,0xfe,0x58,0x00,0x00,0x9a,0x67,0xe4,0x41,0xfa,0x58,0x00,
-0x00,0xad,0x67,0xe4,0x41,0xea,0x58,0x00,0x00,0xb0,0x67,0xe4,0x41,0xf2,0x20,0x40,
-0x4d,0xaf,0x20,0x40,0x4d,0xbc,0x20,0x40,0x4c,0x2a,0x20,0x20,0x50,0x4d,0x1a,0x62,
-0x7e,0x00,0xc0,0x04,0x80,0x89,0xc0,0x01,0x00,0x87,0xc0,0x0a,0x00,0x8e,0x20,0x20,
-0x4d,0xdf,0x70,0x4a,0xd0,0x00,0x20,0x20,0x4d,0xfb,0x6f,0xe2,0x4a,0xcf,0x24,0x5a,
-0x00,0x8c,0x20,0x20,0x4e,0x08,0x70,0x4a,0xd0,0x06,0x20,0x60,0x00,0x00,0x20,0x40,
-0x02,0xa8,0x20,0x20,0x4e,0x28,0x20,0x40,0x00,0x92,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,
-0x00,0xa7,0x67,0xe2,0x46,0x70,0x68,0x44,0x04,0x74,0x60,0x44,0x46,0x73,0x20,0x40,
-0x5b,0x6c,0x24,0x3a,0x4a,0x8b,0x6f,0xe2,0x04,0x9e,0xc0,0x81,0x50,0x42,0x20,0x20,
-0x50,0x42,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x00,0xab,0x1f,0x22,0x7e,0x00,0x20,0x60,
-0x00,0x00,0x1a,0x42,0x7e,0x00,0x20,0x60,0x00,0x00,0x20,0x40,0x01,0xd0,0x24,0x34,
-0x4d,0x4b,0x20,0x20,0x4d,0xbd,0x20,0x40,0x00,0xb2,0x20,0x20,0x50,0xd3,0x20,0x20,
-0x4d,0xc8,0x6f,0xe2,0x0a,0xff,0xc0,0x13,0x81,0x0c,0xc0,0x06,0x00,0xbb,0xc0,0x3b,
-0x00,0xc4,0xc0,0x3b,0x80,0xca,0xc0,0x3c,0x00,0xcf,0xc0,0x0a,0x81,0x09,0x20,0x20,
-0x4e,0x5c,0x1a,0x22,0x06,0x00,0xef,0xe2,0x00,0x03,0xc0,0x00,0x4f,0x1c,0xc0,0x00,
-0xcf,0x1f,0xc0,0x01,0x4f,0x25,0xc0,0x01,0x80,0xc2,0x20,0x20,0x50,0x1c,0x58,0x00,
-0x00,0x01,0x20,0x20,0x4f,0x20,0xd8,0x40,0x00,0x28,0x20,0x40,0x5b,0x4d,0x18,0xc0,
-0x8b,0xfe,0x58,0x00,0x00,0x00,0xe7,0xe4,0x00,0x05,0x20,0x20,0x50,0x1f,0x20,0x40,
-0x00,0xd3,0x20,0x40,0x00,0xf0,0x58,0x00,0x00,0x00,0xe7,0xe4,0x00,0x05,0x20,0x20,
-0x01,0x02,0xef,0xe2,0x00,0x03,0x20,0x40,0x00,0xd7,0x20,0x40,0x00,0xde,0x20,0x20,
-0x01,0x02,0x20,0x40,0x00,0xf4,0x58,0x28,0x00,0x02,0xe7,0xe6,0x00,0x05,0x20,0x60,
-0x00,0x00,0x67,0xe2,0x0a,0x96,0x20,0x40,0x00,0xf4,0x59,0x28,0x03,0x02,0xe7,0xe8,
-0x00,0x05,0x6f,0xe2,0x0a,0x96,0xe7,0xe6,0x00,0x05,0x20,0x60,0x00,0x00,0x20,0x40,
-0x00,0xf4,0x20,0x40,0x00,0xf0,0x20,0x40,0x00,0xf0,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,0x00,0xeb,0xc2,0x82,0x80,0xeb,0x18,0x40,0x84,0x01,0x20,0x60,
-0x00,0x00,0x20,0x40,0x00,0xf4,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,0x00,0xf7,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,0x00,0xf9,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,0x20,0x40,0x50,0x1f,0x20,0x20,0x4d,0x85,0x6f,0xe2,
-0x46,0x79,0xc2,0x81,0x81,0xe2,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,
-0x01,0x2b,0xe8,0x48,0x00,0x06,0x59,0x28,0x03,0x02,0x98,0x46,0x7c,0x00,0x24,0x22,
-0x81,0x2b,0xef,0xe2,0x00,0x06,0xc2,0x82,0x81,0x27,0xc2,0x82,0x4f,0x01,0x20,0x20,
-0x01,0x2b,0x20,0x40,0x02,0xaa,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,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,0x01,0x51,0x20,0x20,0x58,0xa7,0x20,0x36,0x80,0x68,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,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,0x01,0x8f,0x6f,0xe2,0x04,0x3b,0xc3,0x02,
-0x01,0x8f,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,0x01,0x95,0x6f,0xe2,0x02,0xd6,0x20,0x7a,
-0x00,0x00,0x6f,0xe2,0x02,0xd5,0x2f,0xe0,0x06,0x01,0x20,0x20,0x81,0xbd,0x2f,0xe0,
-0x06,0x02,0x20,0x20,0x81,0x9d,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,
-0x01,0xb1,0xc0,0x29,0x01,0xb3,0xc0,0x0b,0x01,0xaa,0xc0,0x0c,0x5e,0x3b,0xc0,0x01,
-0x02,0xac,0xc0,0x0f,0x02,0xa8,0x79,0x3f,0x80,0x0f,0x20,0x60,0x00,0x00,0x58,0x00,
-0x0b,0x1e,0x67,0xe4,0x4a,0xd5,0x20,0x40,0x01,0xb6,0x1f,0x20,0xf3,0xfe,0xda,0x20,
-0x02,0xe0,0x20,0x40,0x5a,0xbe,0x20,0x20,0x01,0xd6,0x20,0x40,0x01,0xb3,0x20,0x20,
-0x01,0xcd,0x20,0x40,0x01,0xb6,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,
-0x01,0xc5,0x6f,0xe2,0x04,0x73,0xc0,0x09,0x01,0xcd,0xc0,0x0b,0x01,0xcc,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,0x01,0xd6,0x20,0x40,0x01,0xd0,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,0x01,0xd0,0x24,0x74,
-0x00,0x00,0xd8,0xe0,0x00,0x03,0x20,0x40,0x50,0xe6,0x20,0x20,0x01,0xe2,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,0x01,0xfe,0xd8,0x40,0x00,0xf9,0x20,0x40,
-0x7d,0xb5,0x1f,0xe2,0x24,0x00,0x18,0x00,0x02,0x01,0x20,0x20,0x01,0xed,0x58,0x00,
-0x00,0x00,0x67,0xe4,0x4a,0xd5,0xd8,0xe0,0x00,0x03,0x20,0x20,0x50,0xe2,0x6f,0xe2,
-0x4b,0xed,0x24,0x3a,0x59,0x9b,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,0x4a,0xdd,0xc0,0x02,0xd9,0xac,0x6f,0xe2,
-0x44,0x97,0xc0,0x01,0x59,0xb0,0x20,0x60,0x00,0x00,0x6f,0xe2,0x4b,0xed,0x24,0x3a,
-0x59,0xf9,0x6f,0xe2,0x04,0x52,0xc3,0x82,0x80,0x00,0x20,0x40,0x5a,0x1c,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,0x02,0x3a,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,0x02,0x3a,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,0x82,0x4f,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,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,0x82,0x7e,0x20,0x40,0x5a,0x76,0xd8,0xe0,
-0x00,0x03,0x24,0x34,0x4b,0xec,0x20,0x40,0x4b,0xf0,0x20,0x20,0x5a,0x6b,0x6f,0xe2,
-0x4b,0xed,0x24,0x3a,0x60,0x44,0x6f,0xe2,0x02,0xd7,0xc0,0x04,0x02,0x84,0xc0,0x0a,
-0x02,0x91,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,0x02,0x8b,0x20,0x60,
-0x00,0x00,0x6f,0xe2,0x02,0xd8,0x1f,0xe1,0x7e,0x20,0x20,0x3a,0x02,0x8f,0x20,0x60,
-0x00,0x00,0x70,0x4b,0xed,0x01,0x20,0x60,0x00,0x00,0xef,0xe4,0x00,0x06,0x67,0xe4,
-0x4a,0xd9,0x20,0x20,0x02,0x94,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,0x02,0xa5,0xc0,0x03,
-0x5e,0xd4,0xc0,0x02,0xde,0x96,0x20,0x60,0x00,0x00,0xef,0xe6,0x00,0x06,0x67,0xe6,
-0x04,0x73,0x20,0x20,0x5c,0x8d,0xd8,0xe0,0x00,0x07,0x20,0x20,0x50,0xe2,0xd8,0xe0,
-0x00,0x07,0x20,0x20,0x50,0xe6,0x20,0x40,0x5c,0xa9,0x67,0xe4,0x44,0x78,0x20,0x20,
-0x5c,0xa2,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x5b,0xd5,0x78,0x55,0xfc,0x00,0x20,0x37,
-0x02,0xb4,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,0x02,0xc6,0xc0,0x0b,0x82,0xcc,0x20,0x20,0x60,0xfe,0x68,0x42,
-0x05,0x4e,0x18,0x46,0x7c,0x06,0x20,0x21,0x02,0xca,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,0x82,0xd3,0x20,0x20,
-0x63,0xf2,0xc0,0x42,0x02,0xd6,0xc0,0x41,0x82,0xd9,0x20,0x20,0x64,0x21,0x20,0x40,
-0x02,0xdc,0x6f,0xe2,0x00,0x48,0x20,0x20,0x64,0x7b,0x20,0x40,0x02,0xdc,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,0x6f,0xe2,0x04,0xf9,0xc0,0x1f,
-0xe9,0x3e,0xc0,0x39,0xe9,0x47,0xc0,0x77,0x82,0xeb,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,
-0x02,0xf5,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,0xc1,0x33,0xaa,0x55,0x40,0x00,
-0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x20,0x02,0x10,0x00,0x0c,0x12,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x08,
-0x00,0x00,0xe8,0x09,0x18,0xd0,0x02,0x00,0x04,0x44,0x02,0x00,0x04,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,0x08,0x00,0x98,0x40,0xff,0xfb,0x8f,
-0xf8,0x8b,0x85,0x59,0x83,0xaa,0x55,0x03,0x00,0x14,0x42,0x25,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,0x07,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,0x01,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,0x16,0x00,0x61,
-0x43,0x0e,0x02,0x01,0x02,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,0xb9,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,0x35,0x02,0xaf,0x47,0x01,0x00,0x02,0x00,
-0x28,0x02,0x00,0x18,0x02,0x00,0x02,0x03,0x28,0x01,0x02,0x03,0x00,0x02,0x01,0x2a,
-0x02,0xc8,0x00,0x04,0x00,0x02,0x03,0x28,0x01,0x0a,0x05,0x00,0x02,0x00,0x2a,0x14,
-0x41,0x73,0x74,0x20,0x4c,0x45,0x20,0x4d,0x6f,0x75,0x73,0x65,0x20,0x20,0x20,0x20,
-0x20,0x20,0x20,0x20,0x06,0x00,0x02,0x03,0x28,0x01,0x02,0x07,0x00,0x02,0x04,0x2a,
-0x08,0x06,0x00,0x06,0x00,0x64,0x00,0x2c,0x01,0x08,0x00,0x02,0x03,0x28,0x01,0x02,
-0x09,0x00,0x02,0x02,0x2a,0x01,0x01,0x0a,0x00,0x02,0x03,0x28,0x01,0x08,0x0b,0x00,
-0x02,0x03,0x2a,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x02,0x00,0x28,0x02,
-0x01,0x18,0x0d,0x00,0x02,0x03,0x28,0x01,0x20,0x0e,0x00,0x02,0x05,0x2a,0x00,0x0f,
-0x00,0x02,0x02,0x29,0x02,0x00,0x00,0x10,0x00,0x02,0x00,0x28,0x02,0x04,0x18,0x11,
-0x00,0x02,0x03,0x28,0x01,0x16,0x12,0x00,0x02,0x07,0x2a,0x01,0x00,0x13,0x00,0x02,
-0x02,0x29,0x02,0x00,0x00,0x14,0x00,0x02,0x00,0x28,0x02,0x0f,0x18,0x15,0x00,0x02,
-0x03,0x28,0x01,0x12,0x16,0x00,0x02,0x19,0x2a,0x01,0x38,0x17,0x00,0x02,0x00,0x28,
-0x02,0x0a,0x18,0x18,0x00,0x02,0x03,0x28,0x01,0x02,0x19,0x00,0x02,0x23,0x2a,0x03,
-0x00,0x00,0x00,0x1a,0x00,0x02,0x03,0x28,0x01,0x02,0x1b,0x00,0x02,0x29,0x2a,0x08,
-0x46,0x6c,0x61,0x67,0x74,0x72,0x69,0x70,0x1c,0x00,0x02,0x03,0x28,0x01,0x02,0x1d,
-0x00,0x02,0x24,0x2a,0x06,0x79,0x69,0x63,0x68,0x69,0x70,0x1e,0x00,0x02,0x03,0x28,
-0x01,0x02,0x1f,0x00,0x02,0x25,0x2a,0x04,0x63,0x6f,0x6d,0x33,0x20,0x00,0x02,0x03,
-0x28,0x01,0x02,0x21,0x00,0x02,0x26,0x2a,0x03,0x31,0x2e,0x30,0x22,0x00,0x02,0x03,
-0x28,0x01,0x02,0x23,0x00,0x02,0x28,0x2a,0x03,0x31,0x2e,0x30,0x24,0x00,0x02,0x03,
-0x28,0x01,0x02,0x25,0x00,0x02,0x2a,0x2a,0x03,0x31,0x2e,0x30,0x26,0x00,0x02,0x03,
-0x28,0x01,0x02,0x27,0x00,0x02,0x25,0x2a,0x04,0x63,0x6f,0x6d,0x33,0x28,0x00,0x02,
-0x00,0x28,0x10,0x55,0xe4,0x05,0xd2,0xaf,0x9f,0xa9,0x8f,0xe5,0x4a,0x7d,0xfe,0x43,
-0x53,0x53,0x49,0x29,0x00,0x02,0x03,0x28,0x01,0x12,0x2a,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,0x2b,0x00,0x02,0x02,0x29,0x02,0x00,0x00,0x2c,0x00,0x02,0x03,0x28,0x01,
-0x08,0x2d,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,0x2e,0x00,0x02,0x03,0x28,0x01,0x04,
-0x2f,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,0x30,0x00,0x02,0x03,0x28,0x01,0x1a,0x31,
-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,0x32,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,0x64,0x8d
+    0x00,0x02,0xaa,0x55,0x5e,0x0d,0xc2,0x84,0x00,0x0f,0xc0,0x00,0x00,0x24,0xc0,0x00,
+    0x80,0x61,0xc0,0x42,0x80,0x67,0xc0,0x44,0x80,0x88,0xc0,0x4a,0x00,0x47,0xc0,0x51,
+    0x00,0x91,0xc0,0x51,0x80,0x52,0xc0,0x54,0x80,0x55,0xc0,0x56,0x00,0x98,0xc0,0x5c,
+    0x00,0x9d,0xc0,0x5d,0x80,0xec,0xc0,0x5e,0x01,0x5c,0xc0,0x75,0x81,0x80,0x20,0x20,
+    0x4a,0x8b,0xc0,0x01,0x81,0x8a,0xc0,0x02,0x81,0x96,0xc0,0x03,0x01,0x9f,0xc0,0x03,
+    0x81,0xa4,0xc0,0x04,0x01,0xad,0xc0,0x05,0x81,0xbe,0xc0,0x09,0x81,0xce,0xc0,0x0a,
+    0x02,0x53,0xc0,0x0e,0x02,0x66,0xc0,0x0f,0x02,0x8f,0xc0,0x0f,0x82,0xbd,0xc0,0x10,
+    0x82,0xf1,0xc0,0x19,0x03,0x00,0xc0,0x1d,0x03,0x13,0xc0,0x1f,0x03,0x1e,0xc0,0x20,
+    0x83,0x30,0xc0,0x24,0x83,0x36,0xc0,0x29,0x03,0x3f,0xc0,0x46,0x82,0xa4,0xc0,0x4c,
+    0x83,0x53,0x20,0x20,0x4a,0x8b,0x6f,0xec,0x4b,0xf2,0x67,0xec,0x00,0xa1,0x1c,0xe2,
+    0x7e,0x00,0x20,0x3a,0x00,0x31,0x20,0x40,0x00,0x2a,0x20,0x20,0x40,0x02,0x70,0x40,
+    0x91,0x00,0x20,0x40,0x00,0x2d,0x20,0x20,0x67,0xbc,0x6f,0xe2,0x89,0x73,0x79,0x20,
+    0x7e,0x06,0x67,0xe2,0x89,0x73,0x20,0x60,0x00,0x00,0x6f,0xe2,0x81,0x26,0xc2,0x80,
+    0x00,0x38,0x6f,0xec,0x00,0xa1,0x68,0x4c,0x81,0x0e,0x98,0x41,0x7e,0x00,0x24,0x5a,
+    0x00,0x2a,0x20,0x20,0x40,0x02,0x20,0x40,0x00,0x3a,0x20,0x20,0x40,0x02,0x58,0xff,
+    0xff,0xff,0x68,0x46,0x81,0x0e,0x98,0x42,0xfe,0x00,0x68,0x46,0x00,0xa1,0x98,0x41,
+    0x7e,0x00,0x24,0x3a,0x00,0x2a,0x58,0xff,0xff,0xff,0x68,0x46,0x81,0x11,0x98,0x42,
+    0xfe,0x00,0x68,0x46,0x00,0xa4,0x98,0x41,0x7e,0x00,0x24,0x3a,0x00,0x2a,0x20,0x60,
+    0x00,0x00,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,0x5e,0x20,0x20,0x4a,0x2f,0x1b,0x42,
+    0x7e,0x00,0x20,0x40,0x00,0x5d,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,0x5d,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,0x65,0x20,0x20,0x40,0x0a,0x20,0x75,0x80,0x00,0x20,0x20,
+    0x7b,0x9a,0x20,0x30,0x80,0x77,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,0x75,0xc0,0x00,0x80,0x85,0xc0,0x01,0x00,0x75,0xc0,0x01,
+    0x80,0x85,0xc0,0x02,0x00,0x85,0xc0,0x10,0x00,0x85,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,0x77,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,0x6f,0xe2,0x80,0x42,0x79,0x20,
+    0x7e,0x03,0x67,0xe2,0x80,0x42,0x20,0x60,0x00,0x00,0x58,0x00,0x00,0xab,0x67,0xe4,
+    0x41,0xf6,0x58,0x00,0x00,0xb9,0x67,0xe4,0x41,0xfe,0x58,0x00,0x00,0xca,0x67,0xe4,
+    0x41,0xfa,0x58,0x00,0x00,0xdd,0x67,0xe4,0x41,0xea,0x58,0x00,0x00,0xe9,0x67,0xe4,
+    0x41,0xf2,0x20,0x40,0x4d,0xaf,0x20,0x40,0x4d,0xbc,0x20,0x40,0x4c,0x2a,0x20,0x20,
+    0x50,0x4d,0x1a,0x62,0x7e,0x00,0xc0,0x04,0x80,0xb2,0xc0,0x01,0x00,0xb0,0xc0,0x0a,
+    0x00,0xb7,0x20,0x20,0x4d,0xdf,0x70,0x4a,0xd0,0x00,0x20,0x20,0x4d,0xfb,0x6f,0xe2,
+    0x4a,0xcf,0x24,0x5a,0x00,0xb5,0x20,0x20,0x4e,0x08,0x70,0x4a,0xd0,0x06,0x20,0x60,
+    0x00,0x00,0x20,0x40,0x02,0xf9,0x20,0x20,0x4e,0x28,0x20,0x40,0x00,0xc4,0x20,0x40,
+    0x00,0xbc,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,0x6f,0xe8,0x4b,0xee,0x20,0x7a,0x00,0x00,0x1f,0xe0,
+    0xff,0xff,0x67,0xe8,0x4b,0xee,0x24,0x7a,0x00,0x00,0x20,0x20,0x00,0x2a,0x20,0x40,
+    0x4f,0x11,0x20,0x74,0x00,0x00,0x1a,0x22,0x7e,0x00,0x67,0xe4,0x46,0x71,0x20,0x40,
+    0x00,0xd7,0x67,0xe2,0x46,0x70,0x68,0x44,0x04,0x74,0x60,0x44,0x46,0x73,0x20,0x40,
+    0x5b,0x6c,0x24,0x3a,0x4a,0x8b,0x6f,0xe2,0x04,0x9e,0xc0,0x81,0x50,0x42,0x20,0x20,
+    0x50,0x42,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x00,0xdb,0x1f,0x22,0x7e,0x00,0x20,0x60,
+    0x00,0x00,0x1a,0x42,0x7e,0x00,0x20,0x60,0x00,0x00,0x20,0x40,0x02,0x21,0x24,0x34,
+    0x00,0xe6,0x6f,0xe2,0x4f,0xef,0xc0,0x00,0x80,0xe6,0x6f,0xe2,0x44,0x96,0xc0,0x80,
+    0x00,0xe4,0x20,0x20,0x4d,0x4d,0xc0,0x7f,0xcd,0x4d,0x20,0x20,0x00,0xe6,0x20,0x40,
+    0x00,0x2d,0x20,0x40,0x67,0xbc,0x20,0x20,0x4d,0x4b,0x20,0x40,0x00,0xeb,0x20,0x20,
+    0x50,0xd3,0x20,0x20,0x4d,0xc8,0x6f,0xe2,0x0a,0xff,0xc0,0x13,0x81,0x4b,0xc0,0x06,
+    0x00,0xfa,0xc0,0x3b,0x01,0x03,0xc0,0x3b,0x81,0x09,0xc0,0x3c,0x01,0x0e,0xc0,0x0a,
+    0x81,0x48,0xc0,0x20,0x01,0x4c,0xc0,0x7f,0x80,0xf7,0xc0,0x3c,0x81,0x59,0x20,0x20,
+    0x4e,0x5c,0xef,0xe2,0x00,0x03,0x67,0xe2,0x40,0x91,0x20,0x60,0x00,0x00,0x1a,0x22,
+    0x06,0x00,0xef,0xe2,0x00,0x03,0xc0,0x00,0x4f,0x1c,0xc0,0x00,0xcf,0x1f,0xc0,0x01,
+    0x4f,0x25,0xc0,0x01,0x81,0x01,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,0x12,0x20,0x40,
+    0x01,0x2f,0x58,0x00,0x00,0x00,0xe7,0xe4,0x00,0x05,0x20,0x20,0x01,0x41,0xef,0xe2,
+    0x00,0x03,0x20,0x40,0x01,0x16,0x20,0x40,0x01,0x1d,0x20,0x20,0x01,0x41,0x20,0x40,
+    0x01,0x33,0x58,0x28,0x00,0x02,0xe7,0xe6,0x00,0x05,0x20,0x60,0x00,0x00,0x67,0xe2,
+    0x0a,0x96,0x20,0x40,0x01,0x33,0x59,0x28,0x03,0x02,0xe7,0xe8,0x00,0x05,0x6f,0xe2,
+    0x0a,0x96,0xe7,0xe6,0x00,0x05,0x20,0x60,0x00,0x00,0x20,0x40,0x01,0x33,0x20,0x40,
+    0x01,0x2f,0x20,0x40,0x01,0x2f,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,0x2a,0xc2,0x82,0x81,0x2a,0x18,0x40,0x84,0x01,0x20,0x60,0x00,0x00,0x20,0x40,
+    0x01,0x33,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,0x36,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,0x38,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,0x20,0x20,0x4d,0x85,0xef,0xe2,0x00,0x03,0x68,0x48,0x41,0x79,0x79,0x3a,
+    0x04,0x10,0x79,0x3a,0x04,0x18,0x60,0x48,0x41,0x79,0x68,0x42,0x41,0x57,0x79,0x3a,
+    0x04,0x00,0x60,0x42,0x41,0x57,0xef,0xec,0x00,0x03,0x67,0xec,0x00,0xa1,0x67,0xec,
+    0x4b,0xf2,0x20,0x40,0x4b,0xe3,0x20,0x20,0x50,0x1f,0xef,0xe8,0x00,0x03,0x67,0xe8,
+    0x4b,0xee,0x20,0x20,0x50,0x1f,0x6f,0xe2,0x46,0x79,0xc2,0x81,0x82,0x33,0x6f,0xe2,
+    0x46,0x79,0xc3,0x83,0x80,0x00,0x6f,0xe4,0x44,0x78,0x20,0x40,0x7d,0xb5,0x1f,0xe2,
+    0x04,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,0x01,0x7c,0xe8,0x48,0x00,0x06,0x59,0x28,0x03,0x02,0x98,0x46,
+    0x7c,0x00,0x24,0x22,0x81,0x7c,0xef,0xe2,0x00,0x06,0xc2,0x82,0x81,0x78,0xc2,0x82,
+    0x4f,0x01,0x20,0x20,0x01,0x7c,0x20,0x40,0x02,0xfb,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,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,0x01,0xa2,0x20,0x20,0x58,0xa7,0x20,0x36,
+    0x80,0x8d,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,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,0x01,0xe0,0x6f,0xe2,
+    0x04,0x3b,0xc3,0x02,0x01,0xe0,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,0x01,0xe6,0x6f,0xe2,
+    0x02,0xd6,0x20,0x7a,0x00,0x00,0x6f,0xe2,0x02,0xd5,0x2f,0xe0,0x06,0x01,0x20,0x20,
+    0x82,0x0e,0x2f,0xe0,0x06,0x02,0x20,0x20,0x81,0xee,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,0x02,0xc0,0x29,0x02,0x04,0xc0,0x0b,0x01,0xfb,0xc0,0x0c,
+    0x5e,0x3b,0xc0,0x01,0x02,0xfd,0xc0,0x0f,0x02,0xf9,0x79,0x3f,0x80,0x0f,0x20,0x60,
+    0x00,0x00,0x58,0x00,0x0b,0x1e,0x67,0xe4,0x4a,0xd5,0x20,0x40,0x02,0x07,0x1f,0x20,
+    0xf3,0xfe,0xda,0x20,0x02,0xe0,0x20,0x40,0x5a,0xbe,0x20,0x20,0x02,0x27,0x20,0x40,
+    0x02,0x04,0x20,0x20,0x02,0x1e,0x20,0x40,0x02,0x07,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,0x16,0x6f,0xe2,0x04,0x73,0xc0,0x09,0x02,0x1e,0xc0,0x0b,
+    0x02,0x1d,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,0x27,0x20,0x40,
+    0x02,0x21,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,0x21,0x24,0x74,0x00,0x00,0xd8,0xe0,0x00,0x03,0x20,0x40,0x50,0xe6,0x20,0x20,
+    0x02,0x33,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,0x02,0x4f,0xd8,0x40,
+    0x00,0xf9,0x20,0x40,0x7d,0xb5,0x1f,0xe2,0x24,0x00,0x18,0x00,0x02,0x01,0x20,0x20,
+    0x02,0x3e,0x58,0x00,0x00,0x00,0x67,0xe4,0x4a,0xd5,0xd8,0xe0,0x00,0x03,0x20,0x20,
+    0x50,0xe2,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x59,0x9b,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,0x4a,0xdd,0xc0,0x02,
+    0xd9,0xac,0x6f,0xe2,0x44,0x97,0xc0,0x01,0x59,0xb0,0x20,0x60,0x00,0x00,0x6f,0xe2,
+    0x4b,0xed,0x24,0x3a,0x59,0xf9,0x6f,0xe2,0x04,0x52,0xc3,0x82,0x80,0x00,0x20,0x40,
+    0x5a,0x1c,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,0x02,0x8b,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,0x02,0x8b,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,0x82,0xa0,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,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,0x82,0xcf,0x20,0x40,
+    0x5a,0x76,0xd8,0xe0,0x00,0x03,0x24,0x34,0x4b,0xec,0x20,0x40,0x4b,0xf0,0x20,0x20,
+    0x5a,0x6b,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x60,0x44,0x6f,0xe2,0x02,0xd7,0xc0,0x04,
+    0x02,0xd5,0xc0,0x0a,0x02,0xe2,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,
+    0x02,0xdc,0x20,0x60,0x00,0x00,0x6f,0xe2,0x02,0xd8,0x1f,0xe1,0x7e,0x20,0x20,0x3a,
+    0x02,0xe0,0x20,0x60,0x00,0x00,0x70,0x4b,0xed,0x01,0x20,0x60,0x00,0x00,0xef,0xe4,
+    0x00,0x06,0x67,0xe4,0x4a,0xd9,0x20,0x20,0x02,0xe5,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,
+    0x02,0xf6,0xc0,0x03,0x5e,0xd4,0xc0,0x02,0xde,0x96,0x20,0x60,0x00,0x00,0xef,0xe6,
+    0x00,0x06,0x67,0xe6,0x04,0x73,0x20,0x20,0x5c,0x8d,0xd8,0xe0,0x00,0x07,0x20,0x20,
+    0x50,0xe2,0xd8,0xe0,0x00,0x07,0x20,0x20,0x50,0xe6,0x20,0x40,0x5c,0xa9,0x67,0xe4,
+    0x44,0x78,0x20,0x20,0x5c,0xa2,0x6f,0xe2,0x4b,0xed,0x24,0x3a,0x5b,0xd5,0x78,0x55,
+    0xfc,0x00,0x20,0x37,0x03,0x05,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,0x03,0x17,0xc0,0x0b,0x83,0x1d,0x20,0x20,
+    0x60,0xfe,0x68,0x42,0x05,0x4e,0x18,0x46,0x7c,0x06,0x20,0x21,0x03,0x1b,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,
+    0x83,0x24,0x20,0x20,0x63,0xf2,0xc0,0x42,0x03,0x27,0xc0,0x41,0x83,0x2a,0x20,0x20,
+    0x64,0x21,0x20,0x40,0x03,0x2d,0x6f,0xe2,0x00,0x48,0x20,0x20,0x64,0x7b,0x20,0x40,
+    0x03,0x2d,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,0x19,0x42,
+    0x7e,0x00,0x67,0xe4,0x4f,0xf6,0x70,0x40,0x91,0x00,0x20,0x40,0x00,0x2d,0x6f,0xe2,
+    0x80,0x43,0xc3,0x83,0x80,0x00,0x79,0x20,0x7e,0x07,0x67,0xe2,0x80,0x43,0x20,0x60,
+    0x00,0x00,0x6f,0xe2,0x04,0xf9,0xc0,0x1f,0xe9,0x3e,0xc0,0x39,0xe9,0x47,0xc0,0x77,
+    0x83,0x45,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,0x03,0x4f,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,0xc4,0x8c,0xaa,0x55,0x40,0x00,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x02,0x10,0x00,0x0c,0x12,
+    0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0xe8,0x09,0x18,0xd0,0x02,0x00,
+    0x04,0x44,0x02,0x02,0x04,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,0x08,0x00,0x98,0x40,0xff,0xfb,0x8f,0xf8,0x8b,0x85,0x59,0x83,0xaa,0x55,0x03,
+    0x00,0x14,0x42,0x25,0x4a,0x05,0xaa,0x55,0x04,0x00,0x3d,0x45,0x01,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,0x0b,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,0x01,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,0x01,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,0x16,0x00,0x61,0x43,0x0e,0x02,0x01,0x02,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,
+    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,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,
+    0xc2,0x00,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,0x10,0x0e,0x00,0x10,0x16,0x96,
+    0x24,0x47,0xc6,0x23,0x61,0xba,0xd9,0x4b,0x4d,0x1e,0x43,0x53,0x53,0x49,0x01,0x00,
+    0x0f,0x00,0x02,0x02,0x29,0x02,0x00,0x00,0x10,0x00,0x02,0x03,0x28,0x01,0x0c,0x11,
+    0x00,0x10,0xb3,0x9b,0x72,0x34,0xbe,0xec,0xd4,0xa8,0xf4,0x43,0x41,0x88,0x43,0x53,
+    0x53,0x49,0x01,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,0x2d,0xbf
 };
Index: sdk/yc_bt.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_bt.h	(revision 843)
+++ /YC3121_SDK/fw/sdk/yc_bt.h	(working copy)
@@ -68,7 +68,8 @@
 #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
+#define BIT_SET_GPIO_WAKEUPE              43
+#define BIT_SET_RTC_WAKEUP                44
 /*CMD*/
 #define HCI_CMD_SET_BT_ADDR               0x00  //设置 BT3.0 地址
 #define HCI_CMD_SET_BLE_ADDR              0x01  //设置 BLE 地址
@@ -83,6 +84,7 @@
 #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_COD                   0x15  //设置 COD
 #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注释）
@@ -93,13 +95,15 @@
 #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_GPIO_WAKEUP           0x40
 #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_SET_RTC_WAKEUP            0x79
+
 #define HCI_CMD_CONNECT_BNEP              0x7e //建立BNEP连接
 #define HCI_CMD_CONNECT_TCP               0x7f //建立TCP连接
 #define HCI_CMD_DISCONNECT_TCP            0x80 //断开TCP连接
@@ -150,43 +154,43 @@
   */
 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_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;
+} BT_EventCodeEnum;
 
 
 
 typedef struct
 {
-	uint8_t* pBuf;
-    	int BufSize;
-    	int count;		 /*!< count of valid data */
-    	int ReadIndex;
-    	int WriteIndex;
+    uint8_t* pBuf;
+    int BufSize;
+    int count;		 /*!< count of valid data */
+    int ReadIndex;
+    int WriteIndex;
 } BT_BufTypeDef;
 
 /**
@@ -255,7 +259,7 @@
   * @retval TRUE:send ble data success.
   *         FALSE:send ble data failed
   */
-  Boolean BT_SendBleData(uint8_t * ble_data, uint16_t len);
+Boolean BT_SendBleData(uint8_t * ble_data, uint16_t len);
 
 
 /**
@@ -281,7 +285,7 @@
                 0x03:confirm
   * @retval	   ture or FALSE
   */
-  Boolean BT_SetParingMode(uint8_t mode);
+Boolean BT_SetParingMode(uint8_t mode);
 
 
 
@@ -340,6 +344,16 @@
 Boolean BT_SetLpmMode(uint8_t mode);
 
 
+/**
+  * @brief  Set M0 Wakeup bt Gpio
+  * @param  GPIOx: where x can be (GPIOA...GPIOF) to select the GPIO group.
+  * @param  GPIO_Pin: GPIO_Pin_0...GPIO_Pin_15
+  * @retval TRUE or FALSE
+  *
+  */
+Boolean BT_SetM0WakeupBtGpio(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin);
+
+
 
 /**
   * @brief  Numeric Comparison key matching in paring mode
@@ -404,13 +418,16 @@
 Boolean BT_SetLEScanData(uint8_t* scan_data, int DataLen);
 
 /**
-  * @brief  ble send update ble connect parameter data
+  * @brief  ble send update ble connect parameter data(must be connected ble before call this function)
   * @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
+  *             byte0-byte1:min connect interval[6~3200],minConnectionInterval=(byte0+(byte1<<8))*1.25ms
+  *             byte2-byte3:max connect interval[6~3200],maxConnectionInterval=(byte2+(byte3<<8))*1.25ms
+  *             byte4-byte5:slaveLatency[0 ~ 499]
+  *             byte6-byte7:Connection Supervision Timeout[10 ~ 3200],SupervisionTimeout=(byte6+(byte7<<8))*10ms
+  *
+  *             SupervisionTimeout >(1+slaveLatency)*(maxConnectionInterval)
+  *
+  *         len:len must be 8 bytes
   * @retval TRUE:success.
   *         FALSE:failed
   */
@@ -604,7 +621,7 @@
   * @retval TRUE:success
   *         FALSE:fail
   */
-Boolean BT_disconnectBnep();
+Boolean BT_disconnectBnep(void);
 
 
 
@@ -671,9 +688,32 @@
 
 
 
+/**
+  * @brief  Check if you need to init bt
+  * @param  None
+  * @retval TRUE is need init bt,FALSE is not need init bt
+  */
+Boolean BT_IsNeedInitBt(void);
+
+
+
+/**
+  * @brief  Set the scheduled wake up time
+  * @param  time: wakeup_time = time * 100ms
+  * @retval TRUE is BT RTC wakeup succeeded. FALSE is BT failed to set RTC wake up.
+  */
+Boolean BT_SetWakeupRtc(uint32_t time);
 
 
 
+/**
+  * @brief  Set wake up gpio
+  * @param  islow_wakeup: 0:High level wakeup, 1:LOW  level wakeup
+  * @param  GPIO_Pin0_Pin31      Bit0 to bit31 correspond to wake GPIO0 to GPIO31 respectively
+  * @param:  GPIO_Pin32_Pin47    Bit0 to bit15 correspond to wake GPIO32 to GPIO47 respectively
+  * @retval TRUE is BT wakeup gpio succeeded. FALSE is BT failed to set gpio wake up.
+  */
+Boolean BT_SetWakeupGpio(uint8_t islow_wakeup, uint32_t GPIO_Pin0_Pin31, uint16_t GPIO_Pin32_Pin47);
 
 #endif
 
Index: sdk/yc_bt.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_bt.c	(revision 843)
+++ /YC3121_SDK/fw/sdk/yc_bt.c	(working copy)
@@ -9,10 +9,10 @@
 
 
 static tick StartTick;
-static uint32_t HCI_CMD_BIT_FLAG[2]={0};
+static uint32_t HCI_CMD_BIT_FLAG[2]= {0};
 #define BTTIMEOUT 500
 #define BT_BUFSIZE 2048
-uint8_t rcvbuf[BT_BUFSIZE]={0};
+uint8_t rcvbuf[BT_BUFSIZE]= {0};
 extern uint8_t ipcrecbuf[IPCREVSIZE];
 
 static BT_BufTypeDef BluetoothBuf;
@@ -27,116 +27,116 @@
 
 void BT_BIT_SET(uint32_t* a,int b)
 {
-	if(b<32)
-	{
-		a[0] |= (1<<b);
-	}
-	else
-	{
-		a[1] |= (1<<(b-32));
-	}
+    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));
-	}
+    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));
-	}
+    if(b<32)
+    {
+        return (Boolean)((a[0]&(1<<b))>>b);
+    }
+    else
+    {
+        return (Boolean)((a[1]&(1<<(b-32)))>>(b-32));
+    }
 }
 
 static void SkipData(int Num)
 {
-	BluetoothBuf.ReadIndex+=Num;
-	if(BluetoothBuf.ReadIndex>=BluetoothBuf.BufSize)	BluetoothBuf.ReadIndex-=BluetoothBuf.BufSize;
-	NVIC_DisableIRQ(BT_IRQn);
-	BluetoothBuf.count-=Num;
-	NVIC_EnableIRQ(BT_IRQn);
+    BluetoothBuf.ReadIndex+=Num;
+    if(BluetoothBuf.ReadIndex>=BluetoothBuf.BufSize)	BluetoothBuf.ReadIndex-=BluetoothBuf.BufSize;
+    NVIC_DisableIRQ(BT_IRQn);
+    BluetoothBuf.count-=Num;
+    NVIC_EnableIRQ(BT_IRQn);
 }
 
 static void SaveData(uint8_t* data,int len)
 {
-	int i;
-	if(BluetoothBuf.count+len>BluetoothBuf.BufSize)
-	{
-		#ifdef BT_ERROR_LOG
-		MyPrintf("BluetoothBuf full\r\n");
-		#endif
-		return;
-	}
-	for(i=0;i<len;i++)
-	{
-		BluetoothBuf.pBuf[BluetoothBuf.WriteIndex]=data[i];
-		BluetoothBuf.count++;
-		BluetoothBuf.WriteIndex++;
-		if(BluetoothBuf.WriteIndex>=BluetoothBuf.BufSize)	BluetoothBuf.WriteIndex=0;
-	}
+    int i;
+    if(BluetoothBuf.count+len>BluetoothBuf.BufSize)
+    {
+#ifdef BT_ERROR_LOG
+        MyPrintf("BluetoothBuf full\r\n");
+#endif
+        return;
+    }
+    for(i=0; i<len; i++)
+    {
+        BluetoothBuf.pBuf[BluetoothBuf.WriteIndex]=data[i];
+        BluetoothBuf.count++;
+        BluetoothBuf.WriteIndex++;
+        if(BluetoothBuf.WriteIndex>=BluetoothBuf.BufSize)	BluetoothBuf.WriteIndex=0;
+    }
 }
 
 //#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;
+#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()
@@ -151,16 +151,17 @@
     StartTick=0;
     PacketNum=0;
     int i;
-    for(i=0;i<5;i++)	CmdRepData[i]=0;
-    for(i=0;i<BT_BUFSIZE;i++)	rcvbuf[i]=0;
-    hci_bt.p_data =  ipcrecbuf;
+    for(i=0; i<5; i++)	CmdRepData[i]=0;
+    for(i=0; i<BT_BUFSIZE; i++)	rcvbuf[i]=0;
+    hci_bt.p_data = ipcrecbuf;
     IpcInit();
-    #ifdef BT_ERROR_LOG
+#ifdef BT_ERROR_LOG
     MyPrintf("BT_Init end\n");
-    #endif
+#endif
     return TRUE;
 }
 
+extern Boolean ipc_inited;
 Boolean BT_WakeupInit()
 {
     BluetoothBuf.BufSize =  BT_BUFSIZE;
@@ -170,11 +171,10 @@
     BluetoothBuf.WriteIndex =0;
     hci_bt.p_data =  ipcrecbuf;
     enable_intr(INTR_BT);
-    bt_lpm_mode = 1;
-    BT_SetLpmMode(0x00);
-    #ifdef BT_ERROR_LOG
+    ipc_inited=TRUE;
+#ifdef BT_ERROR_LOG
     MyPrintf("BT_Wakeup Init end\n");
-    #endif
+#endif
     return TRUE;
 }
 
@@ -196,20 +196,20 @@
 
 static Boolean  SendCMD(HCI_TypeDef* msg)
 {
-	if((msg->DataLen+3) > IPC_get_available_size())
-	{
-		#ifdef BT_ERROR_LOG
-		MyPrintf("IPC BT Tx FULL\n");
-		#endif
-		return FALSE;
-	}
-	msg->type=HCI_CMD;
+    if((msg->DataLen+3) > IPC_get_available_size())
+    {
+#ifdef BT_ERROR_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");//打印发送包
+    MyPrintf("Print Send Data Pack:\n");
+    PrintHCIPack(msg, "Send");//打印发送包
 #endif
-	IPC_TxData(msg);
-return TRUE;
+    IPC_TxData(msg);
+    return TRUE;
 }
 Boolean BT_SetBtAddr(uint8_t *bt_addr)
 {
@@ -222,11 +222,11 @@
     StartTick=SysTick_GetTick();
     do
     {
-		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_BT_ADDR))
-		{
-			return TRUE;
-		}
-    }while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms
+        if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_BT_ADDR))
+        {
+            return TRUE;
+        }
+    } while(!SysTick_IsTimeOut(StartTick,BTTIMEOUT));//ms
     return FALSE;
 }
 
@@ -287,7 +287,7 @@
     SendCMD(&msg);
     StartTick=SysTick_GetTick();
     do
-	{
+    {
         if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_BT_NAME))
         {
             return TRUE;
@@ -361,448 +361,493 @@
 
 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;
+    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;
+    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;
+    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;
+    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;
+    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;
+    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;
+    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;
+    HCI_TypeDef msg;
+    msg.opcode = HCI_CMD_ENTER_SLEEP_MODE;
+    msg.DataLen = 0;
+    msg.p_data = NULL;
+    SendCMD(&msg);
+    return TRUE;
 }
 
 Boolean BT_SetLpmMode(uint8_t mode)
 {
-	HCI_TypeDef msg;
-	uint8_t temp_mode=mode;
-	msg.opcode = HCI_CMD_SET_LPM_MODE;
-	msg.DataLen =1;
-	msg.p_data = &temp_mode;
-	BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_LPM_MODE);
-	SendCMD(&msg);
-	StartTick=SysTick_GetTick();
-	do
-	{
-		if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_LPM_MODE))
-		{
-			bt_lpm_mode = mode;
-			return TRUE;
-		}
-	}  while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
-	return FALSE;
+    HCI_TypeDef msg;
+    uint8_t temp_mode=mode;
+    msg.opcode = HCI_CMD_SET_LPM_MODE;
+    msg.DataLen =1;
+    msg.p_data = &temp_mode;
+    SendCMD(&msg);
+    return TRUE;
+}
+
+Boolean BT_SetWakeupGpio(uint8_t islow_wakeup, uint32_t GPIO_Pin0_Pin31, uint16_t GPIO_Pin32_Pin47)
+{
+    HCI_TypeDef msg;
+    msg.opcode = HCI_CMD_SET_GPIO_WAKEUP;
+    msg.DataLen = 7;
+    uint8_t wake_gpio[7]= {0};
+
+    if(islow_wakeup == 1)
+    {
+        wake_gpio[0] = 0;
+    }
+    else
+    {
+        wake_gpio[0] = 1;
+    }
+    wake_gpio[1] = GPIO_Pin0_Pin31 & 0xff;
+    wake_gpio[2] = (GPIO_Pin0_Pin31 >> 8) & 0xff;
+    wake_gpio[3] = (GPIO_Pin0_Pin31 >> 16) & 0xff;
+    wake_gpio[4] = (GPIO_Pin0_Pin31 >> 24) & 0xff;
+    wake_gpio[5] = GPIO_Pin32_Pin47 & 0xff;
+    wake_gpio[6] = (GPIO_Pin32_Pin47 >> 8) & 0xff;
+    msg.p_data = wake_gpio;
+    BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_GPIO_WAKEUPE);
+    SendCMD(&msg);
+    StartTick=SysTick_GetTick();
+    do
+    {
+        if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_GPIO_WAKEUPE))
+        {
+            return TRUE;
+        }
+    }  while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
+    return FALSE;
+}
+
+Boolean BT_SetWakeupRtc(uint32_t time)
+{
+    HCI_TypeDef msg;
+    msg.opcode = HCI_CMD_SET_RTC_WAKEUP;
+    msg.DataLen = 4;
+    uint32_t bt_rtc_wakeup = time;
+    msg.p_data = (uint8_t *)&bt_rtc_wakeup;
+    BT_BIT_CLEAR(HCI_CMD_BIT_FLAG,BIT_SET_RTC_WAKEUP);
+    SendCMD(&msg);
+    StartTick=SysTick_GetTick();
+    do
+    {
+        if(BT_BIT_GET(HCI_CMD_BIT_FLAG,BIT_SET_RTC_WAKEUP))
+        {
+            return TRUE;
+        }
+    }  while(!SysTick_IsTimeOut(StartTick, BTTIMEOUT));
+    return FALSE;
 }
 
 
 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;
+    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
+    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;
+    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;
+    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;
+    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;
+    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;
+    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_SetLEAdvInterval(uint16_t ble_adv_interval)
 {
-	HCI_TypeDef msg;
-	msg.opcode = HCI_CMD_LE_SET_ADV_PARM;
-	msg.DataLen = 2;
+    HCI_TypeDef msg;
+    msg.opcode = HCI_CMD_LE_SET_ADV_PARM;
+    msg.DataLen = 2;
     uint8_t ble_adv_interval_buf[2];
     ble_adv_interval_buf[0]=(ble_adv_interval&0xff);
     ble_adv_interval_buf[1]=((ble_adv_interval>>8)&0xff);
-	msg.p_data = ble_adv_interval_buf;
-	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;
+    msg.p_data = ble_adv_interval_buf;
+    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;
+    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;
+    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;
+    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;
+    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;
+    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;
+    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;
 }
 
 
@@ -810,646 +855,669 @@
 
 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;
+    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;
+    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;
+    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();
+    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;
+    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;
+    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;
+    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;
+    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;
+    HCI_TypeDef msg;
+    msg.opcode = HCI_CMD_DISCONNECT_TCP;
+    msg.DataLen = 1;
     uint8_t temp_tcp_handle=tcp_handle;
-	msg.p_data = &temp_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;
+    msg.p_data = &temp_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;
+}
+
+
+Boolean BT_IsNeedInitBt()
+{
+    Boolean ret=TRUE;
+    IPC_hold_bt();
+
+    if((*(volatile byte*)0xc4000)!=0)
+    {
+        ret=FALSE;
+    }
+    IPC_dishold_bt();
+    return ret;
 }
 
+
+
 void BT_ParseBTData()
 {
-	//此判断用于防止接收包buf满
-	if(BluetoothBuf.BufSize - BluetoothBuf.count < 258)
-	{
-		#if BT_LOG
-		MyPrintf("BluetoothBuf full2");
-		MyPrintf("BluetoothBuf.BufSize: %d,BluetoothBuf.count: %d\n",BluetoothBuf.BufSize,BluetoothBuf.count);
-		#endif
-		return;
-	}
-
-	if(TRUE==IPC_ReadBtData(&hci_bt))//The packet header has been receive
-	{
-		#ifdef SDK_DEBUG
-	//	PrintHCIPack(&hci_bt, "Receive");
-		#endif
-		if(hci_bt.type==HCI_EVENT)
-		{
-
-			StartTick=SysTick_GetTick();//处理tx被rx阻塞时的timeout
-			switch(hci_bt.opcode)
-			{
-				case HCI_EVENT_SPP_DATA_RECEIVED:
+    //此判断用于防止接收包buf满
+    if(BluetoothBuf.BufSize - BluetoothBuf.count < 258)
+    {
+#if BT_LOG
+        MyPrintf("BluetoothBuf full2");
+        MyPrintf("BluetoothBuf.BufSize: %d,BluetoothBuf.count: %d\n",BluetoothBuf.BufSize,BluetoothBuf.count);
+#endif
+        return;
+    }
+
+    if(TRUE==IPC_ReadBtData(&hci_bt))//The packet header has been receive
+    {
+#ifdef SDK_DEBUG
+        //	PrintHCIPack(&hci_bt, "Receive");
+#endif
+        if(hci_bt.type==HCI_EVENT)
+        {
+
+            StartTick=SysTick_GetTick();//处理tx被rx阻塞时的timeout
+            switch(hci_bt.opcode)
+            {
+            case HCI_EVENT_SPP_DATA_RECEIVED:
 //					SaveData((uint8_t *)&hci_bt,hci_bt.DataLen+3);
-					SaveData((uint8_t*)&hci_bt,3);
-					SaveData(hci_bt.p_data,hci_bt.DataLen);
-					PacketNum++;
-					break;
+                SaveData((uint8_t*)&hci_bt,3);
+                SaveData(hci_bt.p_data,hci_bt.DataLen);
+                PacketNum++;
+                break;
 
-				case HCI_EVENT_BLE_DATA_RECEIVED:
+            case HCI_EVENT_BLE_DATA_RECEIVED:
 //					SaveData((uint8_t *)&hci_bt,hci_bt.DataLen+3);
-					SaveData((uint8_t*)&hci_bt,3);
-					SaveData(hci_bt.p_data,hci_bt.DataLen);
-					PacketNum++;
-					break;
+                SaveData((uint8_t*)&hci_bt,3);
+                SaveData(hci_bt.p_data,hci_bt.DataLen);
+                PacketNum++;
+                break;
 
-				case HCI_EVENT_BNEP_RECEIVE_TCP_DATA:
+            case HCI_EVENT_BNEP_RECEIVE_TCP_DATA:
 //					SaveData((uint8_t *)&hci_bt,hci_bt.DataLen+3);
-					SaveData((uint8_t*)&hci_bt,3);
-					SaveData(hci_bt.p_data,hci_bt.DataLen);
-					PacketNum++;
-					break;
+                SaveData((uint8_t*)&hci_bt,3);
+                SaveData(hci_bt.p_data,hci_bt.DataLen);
+                PacketNum++;
+                break;
 
-				case HCI_EVENT_BNEP_RECEIVE_UDP_DATA:
+            case HCI_EVENT_BNEP_RECEIVE_UDP_DATA:
 //					SaveData((uint8_t *)&hci_bt,hci_bt.DataLen+3);
-					SaveData((uint8_t*)&hci_bt,3);
-					SaveData(hci_bt.p_data,hci_bt.DataLen);
-					PacketNum++;
-					break;
-
-				case HCI_EVENT_BT_CONNECTED:
-				case HCI_EVENT_BLE_CONNECTED:
-				case HCI_EVENT_GKEY:
-				case HCI_EVENT_BT_DISCONNECTED:
-				case HCI_EVENT_BLE_DISCONNECTED:
-				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:
-
-
-			//		SaveData((uint8_t *)&hci_bt,hci_bt.DataLen+3);
-					SaveData((uint8_t*)&hci_bt,3);
-					SaveData(hci_bt.p_data,hci_bt.DataLen);
-					PacketNum++;
-					break;
-
-				case HCI_EVENT_CMD_COMPLETE:
-
-					switch(hci_bt.p_data[0])
-					{
-						case HCI_CMD_SET_BT_ADDR:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BT_ADDR);
-							}
-							break;
-
-						case HCI_CMD_SET_BLE_ADDR:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BLE_ADDR);
-							}
-							break;
-
-						case HCI_CMD_SET_VISIBILITY:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_VISIBILITY);
-							}
-							break;
-
-						case HCI_CMD_SET_BT_NAME:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BT_NAME);
-							}
-							break;
-						case HCI_CMD_SET_BLE_NAME:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BLE_NAME);
-							}
-							break;
-
-						case HCI_CMD_SEND_SPP_DATA:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SEND_SPP_DATA);
-							}
-							break;
-
-						case HCI_CMD_SEND_BLE_DATA:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SEND_BLE_DATA);
-							}
-							break;
-
-						case HCI_CMD_SET_PAIRING_MODE:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_PAIRING_MODE);
-							}
-							break;
-
-						case HCI_CMD_SET_PINCODE:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_PINCODE);
-							}
-							break;
-
-						case HCI_CMD_VERSION_REQUEST:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_GET_VERSION);
-								CmdRepData[0] = hci_bt.p_data[2];
-								CmdRepData[1] = hci_bt.p_data[3];
-							}
-							break;
-
-						case HCI_CMD_LE_SET_PAIRING:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_PARING);
-							}
-							break;
-
-						case HCI_CMD_BT_DISCONNECT:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BT_DISCONNECT);
-							}
-							break;
-
-						case HCI_CMD_BLE_DISCONNECT:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BLE_DISCONNECT);
-							}
-							break;
-						case HCI_CMD_SET_NVRAM:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_NVRAM);
-							}
-							break;
-
-						case HCI_CMD_CONFIRM_GKEY:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_CONFIRM_GKEY);
-							}
-							break;
-
-						case HCI_CMD_SET_LPM_MODE:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_LPM_MODE);
-							}
-							break;
-
-						case HCI_CMD_PASSKEY_ENTRY:
-							if(!hci_bt.p_data[1])
-							{
-								BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_PASSKEY_ENTRY);
-							}
-							break;
-
-						case HCI_CMD_LE_SET_ADV_DATA:
-							if(!hci_bt.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_bt.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_bt.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_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_ADV_PARM);
-						}
-						break;
-
-					case HCI_CMD_SET_TX_POWER:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_TXPOWER);
-						}
-						break;
-
-						case HCI_CMD_REJECT_JUSTWORK:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_REJECT_JUSTWORK);
-						}
-						break;
-
-						case HCI_CMD_SET_COD:
-						if(!hci_bt.p_data[1])
-						{
-							BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_COD);
-						}
-						break;
-
-						case HCI_CMD_DELETE_CUSTOMIZE_SERVICE:
-						if(!hci_bt.p_data[1])
-						{
-							BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_DELETE_SERVICE);
-						}
-						break;
-
-						case HCI_CMD_LE_SET_FIXED_PASSKEY:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_FIXED_PASSKEY);
-						}
-						break;
-
-						case HCI_CMD_CONNECT_BNEP:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_CONNECT_BNEP);
-						}
-						break;
-
-						case HCI_CMD_CONNECT_TCP:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_CONNECT_TCP);
-						}
-						break;
-
-						case HCI_CMD_DISCONNECT_TCP:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_DISCONNECT_TCP);
-						}
-						break;
-
-						case HCI_CMD_BNEP_SEND_TCP_DATA:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_DATA);
-						}
-						break;
-
-						case HCI_CMD_SEND_UDP_DATA:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_UDP_DATA);
-						}
-						break;
-
-						case HCI_CMD_SEND_BIG_DATA:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA);
-						}
-						break;
-
-						case HCI_CMD_DNS_REQ:
-						if(!hci_bt.p_data[1])
-						{
-							 BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_DNS_REQ);
-						}
-						break;
-
-						default:
-						#ifdef BT_ERROR_LOG
-						MyPrintf("bt 06 cmd err\n");
-						#endif
-							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_bt.p_data[0];
-					break;
-
-				case HCI_EVENT_UUID_HANDLE:
-					BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_ADD_UUID);
-					CmdRepData[0] = hci_bt.p_data[0];
-					CmdRepData[1] = hci_bt.p_data[1];
-					break;
-
-				case HCI_EVENT_BIG_DATA_FINISH:
-					if(hci_bt.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_bt.p_data[0]==0x03||hci_bt.p_data[0]==0x04)
-					{
-						BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA_STATUS);
-					}
-					break;
-
-				default:
-				#ifdef BT_ERROR_LOG
-				MyPrintf("bt event err");
-				#endif
-					break;
-			}
-			IPC_HOLD_BT = 0;
-			WAKEUP_BT &= ~(1<<WAKEUP_BT_FLAG);
-		}
-		else
-		{
-			#ifdef BT_ERROR_LOG
-			MyPrintf("bt 02 err");
-			#endif
-		}
-	}
-	else
-	{
-		#ifdef BT_ERROR_LOG
-		MyPrintf("receive bt data err");
-		#endif
-	}
+                SaveData((uint8_t*)&hci_bt,3);
+                SaveData(hci_bt.p_data,hci_bt.DataLen);
+                PacketNum++;
+                break;
+
+            case HCI_EVENT_BT_CONNECTED:
+            case HCI_EVENT_BLE_CONNECTED:
+            case HCI_EVENT_GKEY:
+            case HCI_EVENT_BT_DISCONNECTED:
+            case HCI_EVENT_BLE_DISCONNECTED:
+            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:
+
+
+                //		SaveData((uint8_t *)&hci_bt,hci_bt.DataLen+3);
+                SaveData((uint8_t*)&hci_bt,3);
+                SaveData(hci_bt.p_data,hci_bt.DataLen);
+                PacketNum++;
+                break;
+
+            case HCI_EVENT_CMD_COMPLETE:
+
+                switch(hci_bt.p_data[0])
+                {
+                case HCI_CMD_SET_BT_ADDR:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BT_ADDR);
+                    }
+                    break;
+
+                case HCI_CMD_SET_BLE_ADDR:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BLE_ADDR);
+                    }
+                    break;
+
+                case HCI_CMD_SET_VISIBILITY:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_VISIBILITY);
+                    }
+                    break;
+
+                case HCI_CMD_SET_BT_NAME:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BT_NAME);
+                    }
+                    break;
+                case HCI_CMD_SET_BLE_NAME:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_BLE_NAME);
+                    }
+                    break;
+
+                case HCI_CMD_SEND_SPP_DATA:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SEND_SPP_DATA);
+                    }
+                    break;
+
+                case HCI_CMD_SEND_BLE_DATA:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SEND_BLE_DATA);
+                    }
+                    break;
+
+                case HCI_CMD_SET_PAIRING_MODE:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_PAIRING_MODE);
+                    }
+                    break;
+
+                case HCI_CMD_SET_PINCODE:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_PINCODE);
+                    }
+                    break;
+
+                case HCI_CMD_VERSION_REQUEST:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_GET_VERSION);
+                        CmdRepData[0] = hci_bt.p_data[2];
+                        CmdRepData[1] = hci_bt.p_data[3];
+                    }
+                    break;
+
+                case HCI_CMD_LE_SET_PAIRING:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_PARING);
+                    }
+                    break;
+
+                case HCI_CMD_BT_DISCONNECT:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BT_DISCONNECT);
+                    }
+                    break;
+
+                case HCI_CMD_BLE_DISCONNECT:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BLE_DISCONNECT);
+                    }
+                    break;
+                case HCI_CMD_SET_NVRAM:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_NVRAM);
+                    }
+                    break;
+
+                case HCI_CMD_CONFIRM_GKEY:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_CONFIRM_GKEY);
+                    }
+                    break;
+
+                case HCI_CMD_SET_GPIO_WAKEUP:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_GPIO_WAKEUPE);
+                    }
+                    break;
+
+                case HCI_CMD_SET_RTC_WAKEUP:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_RTC_WAKEUP);
+                    }
+                    break;
+
+                case HCI_CMD_PASSKEY_ENTRY:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_PASSKEY_ENTRY);
+                    }
+                    break;
+
+                case HCI_CMD_LE_SET_ADV_DATA:
+                    if(!hci_bt.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_bt.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_bt.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_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_ADV_PARM);
+                    }
+                    break;
+
+                case HCI_CMD_SET_TX_POWER:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_TXPOWER);
+                    }
+                    break;
+
+                case HCI_CMD_REJECT_JUSTWORK:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_REJECT_JUSTWORK);
+                    }
+                    break;
+
+                case HCI_CMD_SET_COD:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_SET_COD);
+                    }
+                    break;
+
+                case HCI_CMD_DELETE_CUSTOMIZE_SERVICE:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_DELETE_SERVICE);
+                    }
+                    break;
+
+                case HCI_CMD_LE_SET_FIXED_PASSKEY:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_LE_SET_FIXED_PASSKEY);
+                    }
+                    break;
+
+                case HCI_CMD_CONNECT_BNEP:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_CONNECT_BNEP);
+                    }
+                    break;
+
+                case HCI_CMD_CONNECT_TCP:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_CONNECT_TCP);
+                    }
+                    break;
+
+                case HCI_CMD_DISCONNECT_TCP:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_DISCONNECT_TCP);
+                    }
+                    break;
+
+                case HCI_CMD_BNEP_SEND_TCP_DATA:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_DATA);
+                    }
+                    break;
+
+                case HCI_CMD_SEND_UDP_DATA:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_UDP_DATA);
+                    }
+                    break;
+
+                case HCI_CMD_SEND_BIG_DATA:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA);
+                    }
+                    break;
+
+                case HCI_CMD_DNS_REQ:
+                    if(!hci_bt.p_data[1])
+                    {
+                        BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_DNS_REQ);
+                    }
+                    break;
+
+                default:
+#ifdef BT_ERROR_LOG
+                    MyPrintf("bt 06 cmd err\n");
+#endif
+                    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_bt.p_data[0];
+                break;
+
+            case HCI_EVENT_UUID_HANDLE:
+                BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_ADD_UUID);
+                CmdRepData[0] = hci_bt.p_data[0];
+                CmdRepData[1] = hci_bt.p_data[1];
+                break;
+
+            case HCI_EVENT_BIG_DATA_FINISH:
+                if(hci_bt.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_bt.p_data[0]==0x03||hci_bt.p_data[0]==0x04)
+                {
+                    BT_BIT_SET(HCI_CMD_BIT_FLAG,BIT_BNEP_SEND_TCP_BIG_DATA_STATUS);
+                }
+                break;
+
+            default:
+#ifdef BT_ERROR_LOG
+                MyPrintf("bt event err");
+#endif
+                break;
+            }
+            IPC_HOLD_BT = 0;
+            WAKEUP_BT &= ~(1<<WAKEUP_BT_FLAG);
+        }
+        else
+        {
+#ifdef BT_ERROR_LOG
+            MyPrintf("bt 02 err");
+#endif
+        }
+    }
+    else
+    {
+#ifdef BT_ERROR_LOG
+        MyPrintf("receive bt data err");
+#endif
+    }
 }
 
 int BT_GetEventOpcode()
 {
-	if(PacketNum<=0)	return -1;
-	uint8_t TempOpcode;
-	int TempIndex=BluetoothBuf.ReadIndex+1;
-	if(TempIndex==BluetoothBuf.BufSize)	TempIndex=0;
-	TempOpcode=BluetoothBuf.pBuf[TempIndex];
-
-	/*这几个事件用户不用取数据，所以跳过数据包，维护读指针，
-	其他需要用户获取数据的事件则在BT_ReadBTData中维护指针*/
-	if(	TempOpcode==BT_CONNECTED||\
-		TempOpcode==BLE_CONNECTED||\
-		TempOpcode==BT_DISCONNECTED||\
-		TempOpcode==BLE_DISCONNECTED||\
-	  TempOpcode==BNEP_CONNECT||\
-	  TempOpcode==BNEP_DISCONNECT||\
-	  TempOpcode==BNEP_CHIP_ERROR||\
-		TempOpcode==HCI_EVENT_BB_DISCONNECT||\
-		TempOpcode==PASSKEY)
-	{
-		SkipData(3);
-	}
-	NVIC_DisableIRQ(BT_IRQn);
-	PacketNum--;
-	NVIC_EnableIRQ(BT_IRQn);
-	return TempOpcode;
+    if(PacketNum<=0)	return -1;
+    uint8_t TempOpcode;
+    int TempIndex=BluetoothBuf.ReadIndex+1;
+    if(TempIndex==BluetoothBuf.BufSize)	TempIndex=0;
+    TempOpcode=BluetoothBuf.pBuf[TempIndex];
+
+    /*这几个事件用户不用取数据，所以跳过数据包，维护读指针，
+    其他需要用户获取数据的事件则在BT_ReadBTData中维护指针*/
+    if(	TempOpcode==BT_CONNECTED||\
+            TempOpcode==BLE_CONNECTED||\
+            TempOpcode==BT_DISCONNECTED||\
+            TempOpcode==BLE_DISCONNECTED||\
+            TempOpcode==BNEP_CONNECT||\
+            TempOpcode==BNEP_DISCONNECT||\
+            TempOpcode==BNEP_CHIP_ERROR||\
+            TempOpcode==HCI_EVENT_BB_DISCONNECT||\
+            TempOpcode==PASSKEY)
+    {
+        SkipData(3);
+    }
+    NVIC_DisableIRQ(BT_IRQn);
+    PacketNum--;
+    NVIC_EnableIRQ(BT_IRQn);
+    return TempOpcode;
 }
 
 
 
 int BT_ReadBTData(uint8_t* pbuf)
 {
-	uint8_t OpCode;
-	int len=0;
-	int i=0;
-	if(BluetoothBuf.count<3)	return 0;
-	SkipData(1);
-	OpCode=GetData(TRUE);
-	len=GetData(TRUE);
+    uint8_t OpCode;
+    int len=0;
+    int i=0;
+    if(BluetoothBuf.count<3)	return 0;
+    SkipData(1);
+    OpCode=GetData(TRUE);
+    len=GetData(TRUE);
 //	if(OpCode==BLE_DATA)
 //	{
 //		len-=2;//ble handle 处理
 //		SkipData(2);
 //	}
-	for(i=0;i<len;i++)
-	{
-		pbuf[i]=GetData(TRUE);
-	}
-	return len;
+    for(i=0; i<len; i++)
+    {
+        pbuf[i]=GetData(TRUE);
+    }
+    return len;
 }
 
 
Index: sdk/yc_ipc.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_ipc.h	(revision 843)
+++ /YC3121_SDK/fw/sdk/yc_ipc.h	(working copy)
@@ -108,8 +108,32 @@
   */
 Boolean IPC_have_data(void);
 
+/**
+  * @brief   BT disable low power consumption
+  * @param   none
+  * @retval	 none
+  */
+void IPC_hold_bt(void);
+
+/**
+  * @brief   BT enable low power consumption
+  * @param   none
+  * @retval	 none
+  */
+void IPC_dishold_bt(void);
+
+/**
+  * @brief   ipc init
+  * @param   none
+  * @retval	 none
+  */
 void IpcInit(void);
 
+/**
+  * @brief   Print IPC data
+  * @param   msg: The ipc packets, str: Ipc packet member
+  * @retval	 none
+  */
 void PrintHCIPack(HCI_TypeDef *msg, const char *str);
 
 #endif
Index: sdk/yc_ipc.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_ipc.c	(revision 843)
+++ /YC3121_SDK/fw/sdk/yc_ipc.c	(working copy)
@@ -15,12 +15,10 @@
 
 uint16_t IPC_get_available_size()
 {
-	uint16_t retLen=0;
+    uint16_t retLen=0;
     if(bt_lpm_mode==1)
     {
-        WAKEUP_BT |= (1 << WAKEUP_BT_FLAG);
-        IPC_HOLD_BT  = 1;
-        delay_ms(10);
+        IPC_hold_bt();
     }
     uint16_t readtx = HR_REG_16BIT(&IpcTx->ReadPtr);
     uint16_t wrtptr = HR_REG_16BIT(&IpcTx->WrtiePtr);
@@ -37,22 +35,19 @@
     }
     if(bt_lpm_mode==1)
     {
-        IPC_HOLD_BT = 0;
-        WAKEUP_BT &= ~(1 << WAKEUP_BT_FLAG);
+        IPC_dishold_bt();
     }
     return retLen;
 }
 
 void IPC_TxData(HCI_TypeDef *IpcData)
 {
-	#ifdef IPC_DEBUG
-	PrintHCIPack(IpcData,"tx");
-	#endif
+#ifdef IPC_DEBUG
+    PrintHCIPack(IpcData,"tx");
+#endif
     if(bt_lpm_mode==1)
     {
-        WAKEUP_BT |= (1 << WAKEUP_BT_FLAG);
-        IPC_HOLD_BT  = 1;
-        delay_ms(10);
+        IPC_hold_bt();
     }
     uint16_t Wptr  = HR_REG_16BIT(&IpcTx->WrtiePtr);
     uint16_t Len   = IpcData->DataLen + 3;
@@ -62,14 +57,13 @@
         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;
+            Rptr = IpcData->p_data;
     }
 
     HW_REG_16BIT(&IpcTx->WrtiePtr, (uint32_t)Wptr);
     if(bt_lpm_mode==1)
     {
-        IPC_HOLD_BT = 0;
-        WAKEUP_BT &= ~(1 << WAKEUP_BT_FLAG);
+        IPC_dishold_bt();
     }
 }
 
@@ -81,9 +75,7 @@
     }
     if(bt_lpm_mode==1)
     {
-        WAKEUP_BT |= (1 << WAKEUP_BT_FLAG);
-        IPC_HOLD_BT  = 1;
-        delay_ms(10);
+        IPC_hold_bt();
     }
     uint16_t Wptr  = HR_REG_16BIT(&IpcTx->WrtiePtr);
     uint8_t *Rptr = (uint8_t *)buf;
@@ -96,8 +88,7 @@
     HW_REG_16BIT(&IpcTx->WrtiePtr, (uint32_t)Wptr);
     if(bt_lpm_mode==1)
     {
-        IPC_HOLD_BT = 0;
-        WAKEUP_BT &= ~(1 << WAKEUP_BT_FLAG);
+        IPC_dishold_bt();
     }
     return TRUE;
 }
@@ -119,9 +110,9 @@
             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
+#ifdef IPC_DEBUG
+        PrintHCIPack(IpcData,"rx");
+#endif
         return TRUE;
     }
     else
@@ -217,7 +208,7 @@
         }
         else
         {
-          _dmacopy((byte *)addr, (byte *)btcode, len);
+            _dmacopy((byte *)addr, (byte *)btcode, len);
         }
         btcode += len;
     }
@@ -308,7 +299,7 @@
         delay_ms(1);
         while (!(BT_CONFIG & (1 << BT_INIT_FLAG)));
         BT_CONFIG &= (~(1 << BT_INIT_FLAG));
-		lpm_bt_write(1, 0xd00000);
+        lpm_bt_write(1, 0xd00000);
         lpm_bt_write(0, 0x3084cf0f);
         erase_memory();
         *(volatile uint8_t *)0xC4176 = 0x0f;
@@ -337,12 +328,25 @@
         delay_ms(1); //wait for reset ok
         while (!(BT_CONFIG & (1 << BT_INIT_FLAG)));
         BT_CONFIG &= (~(1 << BT_INIT_FLAG));
-		lpm_bt_write(1, 0xd00000);
+        lpm_bt_write(1, 0xd00000);
         lpm_bt_write(0, 0x3084cf0f);
     }
 #endif
 }
 
+void IPC_hold_bt()
+{
+    WAKEUP_BT |= (1 << WAKEUP_BT_FLAG);
+    IPC_HOLD_BT  = 1;
+    delay_ms(10);
+}
+
+void IPC_dishold_bt()
+{
+    IPC_HOLD_BT = 0;
+    WAKEUP_BT &= ~(1 << WAKEUP_BT_FLAG);
+}
+
 //打印HCI数据包
 void PrintHCIPack(HCI_TypeDef *msg, const char *str)
 {
Index: sdk/yc_lpm.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_lpm.h	(revision 843)
+++ /YC3121_SDK/fw/sdk/yc_lpm.h	(working copy)
@@ -55,17 +55,17 @@
 
 /*
  * @brief:  lpm_sleep config
- * @param:  time: RTC wakeup time (unit:second)
- * @param:  GPIO_Pin0_Pin31      GPIOGROUPA&GPIOGROUPB
- * @param:  GPIO_Pin32_Pin47     GPIOGROUPC
+ * @param:  time: RTC wakeup time (unit:100ms  wakeup_time = time * unit)
+ * @param  GPIO_Pin0_Pin31      Set bit0 to bit31 to enable GPIO0 ~ GPIO31 wake up
+ * @param:  GPIO_Pin32_Pin47    Set bit0 to bit15 to enable GPIO32 ~ GPIO47 wake up
  * @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
+ * @param:  bt_status:	0:bt not sleep
+ *                      1:bt into LPM mode
+ *                      2:bt into Hibernate
  * @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);
+void CM0_Sleep(uint32_t time, uint32_t GPIO_Pin0_Pin31, uint16_t GPIO_Pin32_Pin47, uint8_t islow_wakeup, uint8_t bt_status);
 
 /*
  * @brief: GPIO32(GPIOC GPIO_Pin_0) enable
Index: sdk/yc_lpm.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_lpm.c	(revision 843)
+++ /YC3121_SDK/fw/sdk/yc_lpm.c	(working copy)
@@ -1,4 +1,6 @@
 #include "yc_lpm.h"
+#include "yc_bt.h"
+#include "yc_rtc.h"
 
 uint32_t lpm_read(volatile int *addr)
 {
@@ -106,23 +108,19 @@
 
         BT_CONFIG &= ~(1 << BT_INIT_FLAG);
 
-        NVIC_DisableIRQ(BT_IRQn);
         SYSCTRL_ROM_SWITCH = 0x90;
-
+        IPC_dishold_bt();
         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);
@@ -143,29 +141,16 @@
     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)
+void CM0_Sleep(uint32_t time, uint32_t GPIO_Pin0_Pin31, uint16_t GPIO_Pin32_Pin47, uint8_t islow_wakeup, uint8_t bt_status)
 {
-    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);
+    if(time)
+    {
+        BT_SetWakeupRtc(time);
+    }
 
-    //set gpio num
-    if(GPIO_Pin0_Pin31!=0 || GPIO_Pin32_Pin47!=0)
+    if(bt_status)
     {
-        for(int i = 0;i < 32;i++)
+        for(int i = 0; i < 32; i++)
         {
             if((GPIO_Pin0_Pin31 & (1<<i)) != 0)
             {
@@ -175,7 +160,7 @@
                     GPIO_CONFIG(i) = PULL_DOWN;
             }
         }
-        for(int i = 0;i<16;i++)
+        for(int i = 0; i<16; i++)
         {
             if((GPIO_Pin32_Pin47 & (1<<i)) != 0)
             {
@@ -185,37 +170,71 @@
                     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
-    {
+
+        BT_SetWakeupGpio(islow_wakeup, GPIO_Pin0_Pin31, GPIO_Pin32_Pin47);
         setlpmval(LPM_GPIO_WKUP, 0, 32, 0);
         setlpmval(LPM_GPIO_WKHI, 0, 16, 0);
     }
+    else
+    {
+        //set gpio wakeup level
+        setlpmval(LPM_GPIO_WKHI, 18, 1, islow_wakeup ? 1 : 0);
 
-    temp = get_otp();
+        //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);
+        }
+    }
 
-    if (time)
+    if (bt_status == 1)
     {
-        //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);
-    }
+        BT_SetLpmMode(0x01);
+        IPC_dishold_bt();
 
-    if (is_powerdownbt == 1 && (temp >> 31) == 0)
+    }
+    else if (bt_status == 2)
     {
         BT_Hibernate();
     }
-
+    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);
     lpm_sleep();
 }
 
+
 void enable_gpio_32(void)
 {
     uint32_t value = lpm_bt_read(LPMBT_CONTROL1);
Index: sdk/yc_systick.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_systick.h	(revision 843)
+++ /YC3121_SDK/fw/sdk/yc_systick.h	(working copy)
@@ -48,7 +48,7 @@
  */
 void SysTick_Config(uint32_t ReloadValue);
 
-void SysTick_disable();
+void SysTick_disable(void);
 
 /**
  * @brief  get the current value of SystickCount(SystickCount plus one for every overflow interrupt)
