diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index 79227f7..600a0af 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -3,18 +3,20 @@
{
"name": "nrf52833_xxaa",
"includePath": [
- "libznordic\\include",
- "sdk/external/fatfs/src/",
- "sdk/external/fatfs/src/",
- "sdk/external/fatfs/port/",
- "sdk/components/libraries/block_dev/sdc/",
- "sdk/components/libraries/block_dev/",
- "sdk\\config",
- "app\\src",
+ "sdk\\components\\ble\\nrf_ble_gq\\",
+ "sdk\\components\\softdevice\\mbr\\headers\\",
+ "sdk\\components\\ble\\common\\",
+ "sdk\\components\\ble\\ble_db_discovery\\",
+ "sdk\\components\\toolchain\\cmsis\\include\\",
+ "ble_app_uart_c\\config",
+ "sdk\\components\\libraries\\util\\",
+ "sdk\\modules\\nrfx\\mdk\\",
+ "sdk\\components\\softdevice\\s140\\headers",
+ "ble_app_uart_c\\config",
"sdk\\components",
"sdk\\components\\ble\\ble_advertising",
+ "sdk\\components\\ble\\ble_db_discovery",
"sdk\\components\\ble\\ble_dtm",
- "sdk\\components\\ble\\ble_link_ctx_manager",
"sdk\\components\\ble\\ble_racp",
"sdk\\components\\ble\\ble_services\\ble_ancs_c",
"sdk\\components\\ble\\ble_services\\ble_ans_c",
@@ -41,12 +43,13 @@
"sdk\\components\\ble\\ble_services\\ble_tps",
"sdk\\components\\ble\\common",
"sdk\\components\\ble\\nrf_ble_gatt",
+ "sdk\\components\\ble\\nrf_ble_gq",
"sdk\\components\\ble\\nrf_ble_qwr",
+ "sdk\\components\\ble\\nrf_ble_scan",
"sdk\\components\\ble\\peer_manager",
"sdk\\components\\boards",
"sdk\\components\\libraries\\atomic",
"sdk\\components\\libraries\\atomic_fifo",
- "sdk\\components\\libraries\\atomic_flags",
"sdk\\components\\libraries\\balloc",
"sdk\\components\\libraries\\bootloader\\ble_dfu",
"sdk\\components\\libraries\\bsp",
@@ -130,8 +133,8 @@
"sdk\\components\\nfc\\t4t_parser\\hl_detection_procedure",
"sdk\\components\\nfc\\t4t_parser\\tlv",
"sdk\\components\\softdevice\\common",
- "sdk\\components\\softdevice\\s140\\headers",
- "sdk\\components\\softdevice\\s140\\headers\\nrf52",
+ "sdk\\components\\softdevice\\s122\\headers",
+ "sdk\\components\\softdevice\\s122\\headers\\nrf52",
"sdk\\external\\fprintf",
"sdk\\external\\segger_rtt",
"sdk\\external\\utf_converter",
@@ -140,24 +143,21 @@
"sdk\\modules\\nrfx",
"sdk\\modules\\nrfx\\drivers\\include",
"sdk\\modules\\nrfx\\hal",
- "app\\config\\",
- "app\\config",
- "app",
+ "config",
+ "ble_app_uart_c",
"sdk\\modules\\nrfx\\soc",
"sdk\\modules\\nrfx\\drivers\\src",
- "sdk\\modules\\nrfx\\drivers\\src\\prs",
- "sdk\\modules\\nrfx\\mdk\\",
- "sdk\\components\\toolchain\\cmsis\\include\\"
+ "sdk\\modules\\nrfx\\drivers\\src\\prs"
],
"defines": [
"APP_TIMER_V2",
"APP_TIMER_V2_RTC1_ENABLED",
- "BOARD_PCA10100",
+ "BOARD_QING_FENG_NRF52833",
"CONFIG_GPIO_AS_PINRESET",
"FLOAT_ABI_HARD",
"NRF52833_XXAA",
- "NRF_SD_BLE_API_VERSION=7",
- "S140",
+ "NRF_SD_BLE_API_VERSION=8",
+ "S122",
"SOFTDEVICE_PRESENT",
"__HEAP_SIZE=2048",
"__STACK_SIZE=2048",
@@ -235,6 +235,124 @@
"__vfp_status(x,y)=0"
],
"intelliSenseMode": "${default}"
+ },
+ {
+ "name": "flash_s122_nrf52_8.0.0_softdevice",
+ "includePath": [
+ "ble_app_uart_c\\config",
+ "config",
+ "ble_app_uart_c",
+ "sdk\\components\\boards",
+ "sdk\\components\\libraries\\bsp",
+ "sdk\\external\\utf_converter",
+ "sdk\\components\\ble\\common",
+ "sdk\\components\\ble\\ble_db_discovery",
+ "sdk\\components\\ble\\nrf_ble_gatt",
+ "sdk\\components\\ble\\nrf_ble_gq",
+ "sdk\\components\\ble\\nrf_ble_scan",
+ "sdk\\integration\\nrfx\\legacy",
+ "sdk\\modules\\nrfx\\soc",
+ "sdk\\modules\\nrfx\\drivers\\src",
+ "sdk\\modules\\nrfx\\drivers\\src\\prs",
+ "sdk\\components\\libraries\\button",
+ "sdk\\components\\libraries\\util",
+ "sdk\\components\\libraries\\fifo",
+ "sdk\\components\\libraries\\scheduler",
+ "sdk\\components\\libraries\\timer",
+ "sdk\\components\\libraries\\uart",
+ "sdk\\components\\libraries\\hardfault",
+ "sdk\\components\\libraries\\atomic_fifo",
+ "sdk\\components\\libraries\\atomic",
+ "sdk\\components\\libraries\\balloc",
+ "sdk\\external\\fprintf",
+ "sdk\\components\\libraries\\memobj",
+ "sdk\\components\\libraries\\pwr_mgmt",
+ "sdk\\components\\libraries\\queue",
+ "sdk\\components\\libraries\\ringbuf",
+ "sdk\\components\\libraries\\experimental_section_vars",
+ "sdk\\components\\libraries\\sortlist",
+ "sdk\\components\\libraries\\strerror",
+ "sdk\\components\\libraries\\log\\src",
+ "sdk\\external\\segger_rtt",
+ "sdk\\components\\softdevice\\common"
+ ],
+ "defines": [
+ "__HEAP_SIZE=2048",
+ "__STACK_SIZE=2048",
+ "__CC_ARM",
+ "__arm__",
+ "__align(x)=",
+ "__ALIGNOF__(x)=",
+ "__alignof__(x)=",
+ "__asm(x)=",
+ "__forceinline=",
+ "__restrict=",
+ "__global_reg(n)=",
+ "__inline=",
+ "__int64=long long",
+ "__INTADDR__(expr)=0",
+ "__irq=",
+ "__packed=",
+ "__pure=",
+ "__smc(n)=",
+ "__svc(n)=",
+ "__svc_indirect(n)=",
+ "__svc_indirect_r7(n)=",
+ "__value_in_regs=",
+ "__weak=",
+ "__writeonly=",
+ "__declspec(x)=",
+ "__attribute__(x)=",
+ "__nonnull__(x)=",
+ "__register=",
+ "__breakpoint(x)=",
+ "__cdp(x,y,z)=",
+ "__clrex()=",
+ "__clz(x)=0U",
+ "__current_pc()=0U",
+ "__current_sp()=0U",
+ "__disable_fiq()=",
+ "__disable_irq()=",
+ "__dmb(x)=",
+ "__dsb(x)=",
+ "__enable_fiq()=",
+ "__enable_irq()=",
+ "__fabs(x)=0.0",
+ "__fabsf(x)=0.0f",
+ "__force_loads()=",
+ "__force_stores()=",
+ "__isb(x)=",
+ "__ldrex(x)=0U",
+ "__ldrexd(x)=0U",
+ "__ldrt(x)=0U",
+ "__memory_changed()=",
+ "__nop()=",
+ "__pld(...)=",
+ "__pli(...)=",
+ "__qadd(x,y)=0",
+ "__qdbl(x)=0",
+ "__qsub(x,y)=0",
+ "__rbit(x)=0U",
+ "__rev(x)=0U",
+ "__return_address()=0U",
+ "__ror(x,y)=0U",
+ "__schedule_barrier()=",
+ "__semihost(x,y)=0",
+ "__sev()=",
+ "__sqrt(x)=0.0",
+ "__sqrtf(x)=0.0f",
+ "__ssat(x,y)=0",
+ "__strex(x,y)=0U",
+ "__strexd(x,y)=0",
+ "__strt(x,y)=",
+ "__swp(x,y)=0U",
+ "__usat(x,y)=0U",
+ "__wfe()=",
+ "__wfi()=",
+ "__yield()=",
+ "__vfp_status(x,y)=0"
+ ],
+ "intelliSenseMode": "${default}"
}
],
"version": 4
diff --git a/app/src/basic/zdatachannel_service.c b/app/src/basic/zdatachannel_service.c
index 9636926..0ab6a38 100644
--- a/app/src/basic/zdatachannel_service.c
+++ b/app/src/basic/zdatachannel_service.c
@@ -88,6 +88,7 @@ void zdatachannel_on_ble_evt(ble_evt_t const *p_ble_evt, void *p_context) {
case BLE_GAP_EVT_DISCONNECTED:
ZLOGI("BLE_GAP_EVT_DISCONNECTED");
p_nus->conn_handle = BLE_CONN_HANDLE_INVALID;
+ // ZLOGI("-----%d %d", p_datachannel->conn_handle, BLE_CONN_HANDLE_INVALID);
break;
case BLE_GATTS_EVT_WRITE:
on_write(p_nus, p_ble_evt);
@@ -98,10 +99,14 @@ void zdatachannel_on_ble_evt(ble_evt_t const *p_ble_evt, void *p_context) {
}
}
-bool zdatachannel_is_connected() { return p_datachannel->conn_handle != BLE_CONN_HANDLE_INVALID; }
+bool zdatachannel_is_connected() {
+ // ZLOGI("%d %d", p_datachannel->conn_handle, BLE_CONN_HANDLE_INVALID);
+ return p_datachannel->conn_handle != (int16_t)BLE_CONN_HANDLE_INVALID;
+}
uint32_t zdatachannel_init(zdatachannel_t *p_nus, zdatachannel_init_t const *p_nus_init) {
- p_datachannel = p_nus;
+ p_datachannel = p_nus;
+ p_datachannel->conn_handle = BLE_CONN_HANDLE_INVALID;
ret_code_t err_code;
ble_uuid_t ble_uuid;
ble_uuid128_t nus_base_uuid = NUS_BASE_UUID;
diff --git a/app/src/one_conduction/ble_cmd_process_service.c b/app/src/one_conduction/ble_cmd_process_service.c
index 271cce4..3662593 100644
--- a/app/src/one_conduction/ble_cmd_process_service.c
+++ b/app/src/one_conduction/ble_cmd_process_service.c
@@ -56,6 +56,9 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
txheader->frame_index = rxheader->frame_index;
txheader->frame_type = kifyhrs_pt_cmd_receipt;
+ ZLOGI("rx cmd:%d index:%d datalen:%d", cmd, rxheader->frame_index, len - sizeof(ify_hrs_packet_t));
+ NRF_LOG_HEXDUMP_INFO(rxheader->data, len - sizeof(ify_hrs_packet_t));
+
memset(txbuf, 0, sizeof(txbuf));
if (cmd == ify_hrs_cmd_read_device_version) {
diff --git a/app/src/one_conduction/one_conduction_main.c b/app/src/one_conduction/one_conduction_main.c
index b90ae08..070d79a 100644
--- a/app/src/one_conduction/one_conduction_main.c
+++ b/app/src/one_conduction/one_conduction_main.c
@@ -45,11 +45,9 @@ static bool plod_state_is_connected() { return m_plod_state_connected_state;
static void m_plod_state_event_detect_tmr_cb(void* p_context) { //
static uint32_t connecte_state_trigger_cnt = 0;
- static uint32_t connecte_state_trigger_cnt_last_val = 0;
static app_event_t appevent;
memset(&appevent, 0, sizeof(appevent));
- connecte_state_trigger_cnt_last_val = connecte_state_trigger_cnt;
if (SingleLeadECG_ecg_plod_get_connected_state()) {
connecte_state_trigger_cnt++;
m_connecte_state_last_trigger_timepoint = znordic_getpower_on_ms();
@@ -221,18 +219,22 @@ void app_event_process_cb(void* p_event_data, uint16_t event_size) {
* 首页 *
*******************************************************************************/
// 如果用户长时间不操作,自动切换到待机状态
- if (!zdatachannel_is_connected() && //
- !plod_state_is_connected() && //
- plod_state_has_disconnected_ms() >= 30000 && //
- ds_cur_state_haspassed_ms() >= 30000) {
+ if (!zdatachannel_is_connected() && //
+ !plod_state_is_connected() && //
+ plod_state_has_disconnected_ms() >= 3000 && //
+ ds_cur_state_haspassed_ms() >= 15000) {
state_machine__change_to_standby_state();
}
+
// 如果用户继续保持静止,切换到采集页面
else if (plod_state_is_connected() && ds_cur_state_haspassed_ms() > 1500) {
// dsp_mgr_change_to_preparePage
ds_change_to_state(kdevice_state_keep_still);
dsp_mgr_change_to_preparePage();
}
+ zdatachannel_data_send2((uint8_t*)"hello", 5);
+
+ // ZLOGI("bt:%d plod:%d has_disc:%d state:%d", zdatachannel_is_connected(), plod_state_is_connected(), plod_state_has_disconnected_ms(), ds_cur_state_haspassed_ms());
} else if (ds_now_state() == kdevice_state_keep_still) {
/*******************************************************************************
* 保持静止页面 *
@@ -363,7 +365,9 @@ void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
* @brief
*/
if (p_evt->type == ZDATACHANNEL_EVT_RX_DATA) {
- ZLOGI("rx:%s", hex2str(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length));
+ // ZLOGI("rx:%s:%d", hex2str(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length), p_evt->params.rx_data.length);
+ // NRF_LOG_HEXDUMP_INFO(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
+ ble_cmder_process_rx((uint8_t*)p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
}
}
@@ -406,5 +410,7 @@ void one_conduction_main() {
ZERROR_CHECK(app_timer_start(m_plod_state_event_detect_tmr, APP_TIMER_TICKS(30), NULL));
ZERROR_CHECK(app_timer_start(m_charge_event_detect_tmr, APP_TIMER_TICKS(100), NULL));
+
+ state_machine__change_to_poweroning_state();
znordic_loop();
}
diff --git a/ble_app_uart_c/ble_app_uart_c_pca10100_s122.uvguix.h_zha b/ble_app_uart_c/ble_app_uart_c_pca10100_s122.uvguix.h_zha
index a305a36..abe62ad 100644
--- a/ble_app_uart_c/ble_app_uart_c_pca10100_s122.uvguix.h_zha
+++ b/ble_app_uart_c/ble_app_uart_c_pca10100_s122.uvguix.h_zha
@@ -101,17 +101,17 @@
-1
- 169
- 542
- 1720
- 1010
+ 821
+ -1410
+ -232
+ 1662
0
- 515
- 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000003000000020000000100000053443A5C776F726B73706163655C6E6F726469635F77705C636F6E64756374696F6E315F64796E616D69635F656C656374726F63617264696F67726170685C626C655F6170705F756172745F635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF5C443A5C776F726B73706163655C6E6F726469635F77705C636F6E64756374696F6E315F64796E616D69635F656C656374726F63617264696F67726170685C73646B5C636F6D706F6E656E74735C626F617264735C626F617264732E630000000008626F617264732E6300000000FFDC7800FFFFFFFF5C443A5C776F726B73706163655C6E6F726469635F77705C636F6E64756374696F6E315F64796E616D69635F656C656374726F63617264696F67726170685C73646B5C636F6D706F6E656E74735C626F617264735C626F617264732E680000000008626F617264732E6800000000BECEA100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000076020000
+ 634
+ 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000004000000030000000100000053443A5C776F726B73706163655C6E6F726469635F77705C636F6E64756374696F6E315F64796E616D69635F656C656374726F63617264696F67726170685C626C655F6170705F756172745F635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF5C443A5C776F726B73706163655C6E6F726469635F77705C636F6E64756374696F6E315F64796E616D69635F656C656374726F63617264696F67726170685C73646B5C636F6D706F6E656E74735C626F617264735C626F617264732E630000000008626F617264732E6300000000FFDC7800FFFFFFFF5C443A5C776F726B73706163655C6E6F726469635F77705C636F6E64756374696F6E315F64796E616D69635F656C656374726F63617264696F67726170685C73646B5C636F6D706F6E656E74735C626F617264735C626F617264732E680000000008626F617264732E6800000000BECEA100FFFFFFFF59443A5C776F726B73706163655C6E6F726469635F77705C636F6E64756374696F6E315F64796E616D69635F656C656374726F63617264696F67726170685C626C655F6170705F756172745F635C7A626C655F6E75735F632E63000000000C7A626C655F6E75735F632E6300000000F0A0A100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000074F9FFFF2F0300000000000092040000
@@ -134,7 +134,7 @@
16
- F4000000660000009005000006010000
+ 7AFBFFFFA30300001600000043040000
@@ -150,7 +150,7 @@
0
16
- 0300000066000000ED00000046020000
+ 0300000066000000ED00000099010000
16
@@ -170,7 +170,7 @@
0
16
- 0300000066000000ED00000046020000
+ 0300000066000000ED00000099010000
16
@@ -450,7 +450,7 @@
0
16
- 0300000066000000ED00000046020000
+ 0300000066000000ED00000099010000
16
@@ -470,7 +470,7 @@
0
16
- 0300000066000000ED00000046020000
+ 0300000066000000ED00000099010000
16
@@ -490,7 +490,7 @@
0
16
- 00000000770200008007000056040000
+ 00000000CA01000080070000DE030000
16
@@ -530,7 +530,7 @@
0
16
- 030000007A0200007D0700003D040000
+ 03000000CD0100008704000090030000
16
@@ -1150,7 +1150,7 @@
0
16
- 0300000066000000ED00000046020000
+ 0300000066000000ED000000FF000000
16
@@ -1170,7 +1170,7 @@
0
16
- 030000007A0200007D0700003D040000
+ 03000000CD0100008704000090030000
16
@@ -1190,7 +1190,7 @@
0
16
- 030000007A0200007D0700003D040000
+ 03000000CD0100008704000090030000
16
@@ -1250,7 +1250,7 @@
0
16
- 030000007A0200007D0700003D040000
+ 03000000CD0100008704000090030000
16
@@ -1270,7 +1270,7 @@
0
16
- 030000007A0200007D0700003D040000
+ 03000000CD0100008704000090030000
16
@@ -1730,7 +1730,7 @@
0
16
- 00000000560400008007000069040000
+ 00000000DE03000080070000F1030000
16
@@ -1799,14 +1799,14 @@
3312
- 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000EF00000090050000F3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000F4000000660000009005000006010000F40000004F00000090050000EF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A00400006D020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000660000009005000084020000A00400004F000000900500006D02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F40000005F020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000076020000000000004F000000F00000005F0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000059020000900500005D02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000000000000740200009005000028030000000000005D020000900500001103000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC80200005D020000CC0200001103000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000005F020000800700006302000001000000010000100400000001000000A2FCFFFF9E000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000000000007A020000800700006D040000000000006302000080070000560400000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
+ 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000EF00000090050000F3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000007AFBFFFFA30300001600000043040000F40000004F00000090050000EF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A00400006D020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C300000180004000000000000026FFFFFFA303000016000000C1050000A00400004F000000900500006D02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000B2010000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000086FAFFFFA303000076FBFFFF6C040000000000004F000000F0000000B20100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000059020000900500005D02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000086FAFFFFB10500001600000065060000000000005D020000900500001103000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC80200005D020000CC0200001103000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000B201000080070000B601000001000000010000100400000001000000EDFCFFFF71000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000100000086FAFFFF7004000010FFFFFF6306000000000000B601000080070000DE0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
59392
File
2537
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050FFFFFFFF0096000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -1822,7 +1822,7 @@
Build
1024
- 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000D6E726635323833335F78786161960000000000000002000D6E726635323833335F7878616121666C6173685F733132325F6E726635325F382E302E305F736F667464657669636500000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000D6E726635323833335F78786161960000000000000002000D6E726635323833335F7878616121666C6173685F733132325F6E726635325F382E302E305F736F667464657669636500000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -3603,12 +3603,12 @@
0
100
- 2
+ 3
main.c
- 0
- 1
- 1
+ 13
+ 331
+ 344
1
0
@@ -3616,7 +3616,7 @@
..\sdk\components\boards\boards.c
14
- 31
+ 33
40
1
@@ -3625,12 +3625,21 @@
..\sdk\components\boards\boards.h
18
- 55
+ 64
71
1
0
+
+ .\zble_nus_c.c
+ 0
+ 25
+ 42
+ 1
+
+ 0
+
diff --git a/ble_app_uart_c/main.c b/ble_app_uart_c/main.c
index 89368a2..67c5516 100644
--- a/ble_app_uart_c/main.c
+++ b/ble_app_uart_c/main.c
@@ -260,36 +260,37 @@ static void ble_nus_chars_received_uart_print(uint8_t * p_data, uint16_t data_le
* a string. The string is sent over BLE when the last character received is a
* 'new line' '\n' (hex 0x0A) or if the string reaches the maximum data length.
*/
+ static uint8_t data_array[BLE_NUS_MAX_DATA_LEN];
+ static uint16_t data_array_index = 0;
+ // static uint32_t
void uart_event_handle(app_uart_evt_t * p_event)
{
- static uint8_t data_array[BLE_NUS_MAX_DATA_LEN];
- static uint16_t index = 0;
+
uint32_t ret_val;
switch (p_event->evt_type)
{
/**@snippet [Handling data from UART] */
case APP_UART_DATA_READY:
- UNUSED_VARIABLE(app_uart_get(&data_array[index]));
- index++;
+ UNUSED_VARIABLE(app_uart_get(&data_array[data_array_index]));
+ data_array_index++;
- if ((data_array[index - 1] == '\n') ||
- (data_array[index - 1] == '\r') ||
- (index >= (m_ble_nus_max_data_len)))
+ if (
+ data_array_index >= (m_ble_nus_max_data_len))
{
NRF_LOG_DEBUG("Ready to send data over BLE NUS");
- NRF_LOG_HEXDUMP_DEBUG(data_array, index);
+ NRF_LOG_HEXDUMP_DEBUG(data_array, data_array_index);
do
{
- ret_val = ble_nus_c_string_send(&m_ble_nus_c, data_array, index);
+ ret_val = ble_nus_c_string_send(&m_ble_nus_c, data_array, data_array_index);
if ( (ret_val != NRF_ERROR_INVALID_STATE) && (ret_val != NRF_ERROR_RESOURCES) )
{
APP_ERROR_CHECK(ret_val);
}
} while (ret_val == NRF_ERROR_RESOURCES);
- index = 0;
+ data_array_index = 0;
}
break;
@@ -338,9 +339,9 @@ static void ble_nus_c_evt_handler(ble_nus_c_t * p_ble_nus_c, ble_nus_c_evt_t con
case BLE_NUS_C_EVT_NUS_TX_EVT:
ble_nus_chars_received_uart_print(p_ble_nus_evt->p_data, p_ble_nus_evt->data_len);
break;
- case BLE_NUS_C_EVT_NUS_TX_BLOCK_EVT:
- ble_nus_chars_received_uart_print(p_ble_nus_evt->p_data, p_ble_nus_evt->data_len);
- break;
+ // case BLE_NUS_C_EVT_NUS_TX_BLOCK_EVT:
+ // ble_nus_chars_received_uart_print(p_ble_nus_evt->p_data, p_ble_nus_evt->data_len);
+ // break;
case BLE_NUS_C_EVT_DISCONNECTED:
NRF_LOG_INFO("Disconnected.");
@@ -655,8 +656,23 @@ static void idle_state_handle(void)
nrf_pwr_mgmt_run();
}
}
+APP_TIMER_DEF(m_uart_send_tmr); // 状态机驱动定时器
-
+static void uart_send_tmr_cb(void* p_context) { //
+ static uint32_t last_data_array_index;
+ ret_code_t ret_val;
+ if (data_array_index != 0 && data_array_index == last_data_array_index) {
+ do {
+ ret_val = ble_nus_c_string_send(&m_ble_nus_c, data_array, data_array_index);
+ if ((ret_val != NRF_ERROR_INVALID_STATE) && (ret_val != NRF_ERROR_RESOURCES)) {
+ APP_ERROR_CHECK(ret_val);
+ }
+ } while (ret_val == NRF_ERROR_RESOURCES);
+ data_array_index = 0;
+ last_data_array_index = 0;
+ }
+ last_data_array_index = data_array_index;
+}
int main(void)
{
// Initialize.
@@ -671,6 +687,11 @@ int main(void)
nus_c_init();
scan_init();
+ app_timer_create(&m_uart_send_tmr, APP_TIMER_MODE_REPEATED, uart_send_tmr_cb);
+ app_timer_start(m_uart_send_tmr, APP_TIMER_TICKS(2), NULL);
+
+ app_uart_put(1);
+
// Start execution.
printf("BLE UART central example started.\r\n");
NRF_LOG_INFO("BLE UART central example started.");
diff --git a/ble_app_uart_c/zble_nus_c.c b/ble_app_uart_c/zble_nus_c.c
index fac75fc..539fab9 100644
--- a/ble_app_uart_c/zble_nus_c.c
+++ b/ble_app_uart_c/zble_nus_c.c
@@ -37,84 +37,65 @@
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
-
#include "sdk_common.h"
-#if 1
+#if NRF_MODULE_ENABLED(BLE_NUS_C)
#include
+#include "app_error.h"
#include "ble.h"
-#include "zble_nus_c.h"
#include "ble_gattc.h"
+#include "ble_nus_c.h"
#include "ble_srv_common.h"
-#include "app_error.h"
#define NRF_LOG_MODULE_NAME ble_nus_c
#include "nrf_log.h"
NRF_LOG_MODULE_REGISTER();
-
/**@brief Function for intercepting the errors of GATTC and the BLE GATT Queue.
*
* @param[in] nrf_error Error code.
* @param[in] p_ctx Parameter from the event handler.
* @param[in] conn_handle Connection handle.
*/
-static void gatt_error_handler(uint32_t nrf_error,
- void * p_ctx,
- uint16_t conn_handle)
-{
- ble_nus_c_t * p_ble_nus_c = (ble_nus_c_t *)p_ctx;
+static void gatt_error_handler(uint32_t nrf_error, void *p_ctx, uint16_t conn_handle) {
+ ble_nus_c_t *p_ble_nus_c = (ble_nus_c_t *)p_ctx;
- NRF_LOG_DEBUG("A GATT Client error has occurred on conn_handle: 0X%X", conn_handle);
+ NRF_LOG_DEBUG("A GATT Client error has occurred on conn_handle: 0X%X", conn_handle);
- if (p_ble_nus_c->error_handler != NULL)
- {
- p_ble_nus_c->error_handler(nrf_error);
- }
+ if (p_ble_nus_c->error_handler != NULL) {
+ p_ble_nus_c->error_handler(nrf_error);
+ }
}
+void ble_nus_c_on_db_disc_evt(ble_nus_c_t *p_ble_nus_c, ble_db_discovery_evt_t *p_evt) {
+ ble_nus_c_evt_t nus_c_evt;
+ memset(&nus_c_evt, 0, sizeof(ble_nus_c_evt_t));
+
+ ble_gatt_db_char_t *p_chars = p_evt->params.discovered_db.charateristics;
+
+ // Check if the NUS was discovered.
+ if ((p_evt->evt_type == BLE_DB_DISCOVERY_COMPLETE) && (p_evt->params.discovered_db.srv_uuid.uuid == BLE_UUID_NUS_SERVICE) && (p_evt->params.discovered_db.srv_uuid.type == p_ble_nus_c->uuid_type)) {
+ for (uint32_t i = 0; i < p_evt->params.discovered_db.char_count; i++) {
+ switch (p_chars[i].characteristic.uuid.uuid) {
+ case BLE_UUID_NUS_RX_CHARACTERISTIC:
+ nus_c_evt.handles.nus_rx_handle = p_chars[i].characteristic.handle_value;
+ break;
+
+ case BLE_UUID_NUS_TX_CHARACTERISTIC:
+ nus_c_evt.handles.nus_tx_handle = p_chars[i].characteristic.handle_value;
+ nus_c_evt.handles.nus_tx_cccd_handle = p_chars[i].cccd_handle;
+ break;
-void ble_nus_c_on_db_disc_evt(ble_nus_c_t * p_ble_nus_c, ble_db_discovery_evt_t * p_evt)
-{
- ble_nus_c_evt_t nus_c_evt;
- memset(&nus_c_evt,0,sizeof(ble_nus_c_evt_t));
-
- ble_gatt_db_char_t * p_chars = p_evt->params.discovered_db.charateristics;
-
- // Check if the NUS was discovered.
- if ( (p_evt->evt_type == BLE_DB_DISCOVERY_COMPLETE)
- && (p_evt->params.discovered_db.srv_uuid.uuid == BLE_UUID_NUS_SERVICE)
- && (p_evt->params.discovered_db.srv_uuid.type == p_ble_nus_c->uuid_type))
- {
- for (uint32_t i = 0; i < p_evt->params.discovered_db.char_count; i++)
- {
- switch (p_chars[i].characteristic.uuid.uuid)
- {
- case BLE_UUID_NUS_RX_CHARACTERISTIC:
- nus_c_evt.handles.nus_rx_handle = p_chars[i].characteristic.handle_value;
- break;
-
- case BLE_UUID_NUS_TX_CHARACTERISTIC:
- nus_c_evt.handles.nus_tx_handle = p_chars[i].characteristic.handle_value;
- nus_c_evt.handles.nus_tx_cccd_handle = p_chars[i].cccd_handle;
- break;
-
- case BLE_UUID_NUS_TX_BLOCK_CHARACTERISTIC:
- nus_c_evt.handles.nus_tx_block_handle = p_chars[i].characteristic.handle_value;
- nus_c_evt.handles.nus_tx_cccd_handle = p_chars[i].cccd_handle;
- break;
-
- default:
- break;
- }
- }
- if (p_ble_nus_c->evt_handler != NULL)
- {
- nus_c_evt.conn_handle = p_evt->conn_handle;
- nus_c_evt.evt_type = BLE_NUS_C_EVT_DISCOVERY_COMPLETE;
- p_ble_nus_c->evt_handler(p_ble_nus_c, &nus_c_evt);
- }
+ default:
+ break;
+ }
+ }
+ if (p_ble_nus_c->evt_handler != NULL) {
+ nus_c_evt.conn_handle = p_evt->conn_handle;
+ nus_c_evt.evt_type = BLE_NUS_C_EVT_DISCOVERY_COMPLETE;
+ p_ble_nus_c->evt_handler(p_ble_nus_c, &nus_c_evt);
}
+ }
}
/**@brief Function for handling Handle Value Notification received from the SoftDevice.
@@ -122,198 +103,154 @@ void ble_nus_c_on_db_disc_evt(ble_nus_c_t * p_ble_nus_c, ble_db_discovery_evt_t
* @details This function uses the Handle Value Notification received from the SoftDevice
* and checks if it is a notification of the NUS TX characteristic from the peer.
* If it is, this function decodes the data and sends it to the application.
- *
+ *
* @param[in] p_ble_nus_c Pointer to the NUS Client structure.
* @param[in] p_ble_evt Pointer to the BLE event received.
*/
-static void on_hvx(ble_nus_c_t * p_ble_nus_c, ble_evt_t const * p_ble_evt)
-{
- // HVX can only occur from client sending.
- if ( (p_ble_nus_c->handles.nus_tx_handle != BLE_GATT_HANDLE_INVALID)
- && (p_ble_evt->evt.gattc_evt.params.hvx.handle == p_ble_nus_c->handles.nus_tx_handle)
- && (p_ble_nus_c->evt_handler != NULL))
- {
- ble_nus_c_evt_t ble_nus_c_evt;
-
- ble_nus_c_evt.evt_type = BLE_NUS_C_EVT_NUS_TX_EVT;
- ble_nus_c_evt.p_data = (uint8_t *)p_ble_evt->evt.gattc_evt.params.hvx.data;
- ble_nus_c_evt.data_len = p_ble_evt->evt.gattc_evt.params.hvx.len;
-
- p_ble_nus_c->evt_handler(p_ble_nus_c, &ble_nus_c_evt);
- NRF_LOG_DEBUG("Client sending data.");
- }
-
- if ( (p_ble_nus_c->handles.nus_tx_block_handle != BLE_GATT_HANDLE_INVALID)
- && (p_ble_evt->evt.gattc_evt.params.hvx.handle == p_ble_nus_c->handles.nus_tx_block_handle)
- && (p_ble_nus_c->evt_handler != NULL))
- {
- ble_nus_c_evt_t ble_nus_c_evt;
-
- ble_nus_c_evt.evt_type = BLE_NUS_C_EVT_NUS_TX_BLOCK_EVT;
- ble_nus_c_evt.p_data = (uint8_t *)p_ble_evt->evt.gattc_evt.params.hvx.data;
- ble_nus_c_evt.data_len = p_ble_evt->evt.gattc_evt.params.hvx.len;
-
- p_ble_nus_c->evt_handler(p_ble_nus_c, &ble_nus_c_evt);
- NRF_LOG_DEBUG("Client sending data.");
- }
+static void on_hvx(ble_nus_c_t *p_ble_nus_c, ble_evt_t const *p_ble_evt) {
+ // HVX can only occur from client sending.
+ if ((p_ble_nus_c->handles.nus_tx_handle != BLE_GATT_HANDLE_INVALID) && (p_ble_evt->evt.gattc_evt.params.hvx.handle == p_ble_nus_c->handles.nus_tx_handle) && (p_ble_nus_c->evt_handler != NULL)) {
+ ble_nus_c_evt_t ble_nus_c_evt;
+
+ ble_nus_c_evt.evt_type = BLE_NUS_C_EVT_NUS_TX_EVT;
+ ble_nus_c_evt.p_data = (uint8_t *)p_ble_evt->evt.gattc_evt.params.hvx.data;
+ ble_nus_c_evt.data_len = p_ble_evt->evt.gattc_evt.params.hvx.len;
+
+ p_ble_nus_c->evt_handler(p_ble_nus_c, &ble_nus_c_evt);
+ NRF_LOG_DEBUG("Client sending data.");
+ }
}
-uint32_t ble_nus_c_init(ble_nus_c_t * p_ble_nus_c, ble_nus_c_init_t * p_ble_nus_c_init)
-{
- uint32_t err_code;
- ble_uuid_t uart_uuid;
- ble_uuid128_t nus_base_uuid = NUS_BASE_UUID;
+uint32_t ble_nus_c_init(ble_nus_c_t *p_ble_nus_c, ble_nus_c_init_t *p_ble_nus_c_init) {
+ uint32_t err_code;
+ ble_uuid_t uart_uuid;
+ ble_uuid128_t nus_base_uuid = NUS_BASE_UUID;
- VERIFY_PARAM_NOT_NULL(p_ble_nus_c);
- VERIFY_PARAM_NOT_NULL(p_ble_nus_c_init);
- VERIFY_PARAM_NOT_NULL(p_ble_nus_c_init->p_gatt_queue);
+ VERIFY_PARAM_NOT_NULL(p_ble_nus_c);
+ VERIFY_PARAM_NOT_NULL(p_ble_nus_c_init);
+ VERIFY_PARAM_NOT_NULL(p_ble_nus_c_init->p_gatt_queue);
- err_code = sd_ble_uuid_vs_add(&nus_base_uuid, &p_ble_nus_c->uuid_type);
- VERIFY_SUCCESS(err_code);
+ err_code = sd_ble_uuid_vs_add(&nus_base_uuid, &p_ble_nus_c->uuid_type);
+ VERIFY_SUCCESS(err_code);
- uart_uuid.type = p_ble_nus_c->uuid_type;
- uart_uuid.uuid = BLE_UUID_NUS_SERVICE;
+ uart_uuid.type = p_ble_nus_c->uuid_type;
+ uart_uuid.uuid = BLE_UUID_NUS_SERVICE;
- p_ble_nus_c->conn_handle = BLE_CONN_HANDLE_INVALID;
- p_ble_nus_c->evt_handler = p_ble_nus_c_init->evt_handler;
- p_ble_nus_c->error_handler = p_ble_nus_c_init->error_handler;
- p_ble_nus_c->handles.nus_tx_handle = BLE_GATT_HANDLE_INVALID;
- p_ble_nus_c->handles.nus_tx_block_handle = BLE_GATT_HANDLE_INVALID;
- p_ble_nus_c->handles.nus_rx_handle = BLE_GATT_HANDLE_INVALID;
- p_ble_nus_c->p_gatt_queue = p_ble_nus_c_init->p_gatt_queue;
+ p_ble_nus_c->conn_handle = BLE_CONN_HANDLE_INVALID;
+ p_ble_nus_c->evt_handler = p_ble_nus_c_init->evt_handler;
+ p_ble_nus_c->error_handler = p_ble_nus_c_init->error_handler;
+ p_ble_nus_c->handles.nus_tx_handle = BLE_GATT_HANDLE_INVALID;
+ p_ble_nus_c->handles.nus_rx_handle = BLE_GATT_HANDLE_INVALID;
+ p_ble_nus_c->p_gatt_queue = p_ble_nus_c_init->p_gatt_queue;
- return ble_db_discovery_evt_register(&uart_uuid);
+ return ble_db_discovery_evt_register(&uart_uuid);
}
-void ble_nus_c_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context)
-{
- ble_nus_c_t * p_ble_nus_c = (ble_nus_c_t *)p_context;
+void ble_nus_c_on_ble_evt(ble_evt_t const *p_ble_evt, void *p_context) {
+ ble_nus_c_t *p_ble_nus_c = (ble_nus_c_t *)p_context;
- if ((p_ble_nus_c == NULL) || (p_ble_evt == NULL))
- {
- return;
- }
+ if ((p_ble_nus_c == NULL) || (p_ble_evt == NULL)) {
+ return;
+ }
- if ( (p_ble_nus_c->conn_handle == BLE_CONN_HANDLE_INVALID)
- ||(p_ble_nus_c->conn_handle != p_ble_evt->evt.gap_evt.conn_handle)
- )
- {
- return;
- }
+ if ((p_ble_nus_c->conn_handle == BLE_CONN_HANDLE_INVALID) || (p_ble_nus_c->conn_handle != p_ble_evt->evt.gap_evt.conn_handle)) {
+ return;
+ }
- switch (p_ble_evt->header.evt_id)
- {
- case BLE_GATTC_EVT_HVX:
- on_hvx(p_ble_nus_c, p_ble_evt);
- break;
+ switch (p_ble_evt->header.evt_id) {
+ case BLE_GATTC_EVT_HVX:
+ on_hvx(p_ble_nus_c, p_ble_evt);
+ break;
- case BLE_GAP_EVT_DISCONNECTED:
- if (p_ble_evt->evt.gap_evt.conn_handle == p_ble_nus_c->conn_handle
- && p_ble_nus_c->evt_handler != NULL)
- {
- ble_nus_c_evt_t nus_c_evt;
+ case BLE_GAP_EVT_DISCONNECTED:
+ if (p_ble_evt->evt.gap_evt.conn_handle == p_ble_nus_c->conn_handle && p_ble_nus_c->evt_handler != NULL) {
+ ble_nus_c_evt_t nus_c_evt;
- nus_c_evt.evt_type = BLE_NUS_C_EVT_DISCONNECTED;
+ nus_c_evt.evt_type = BLE_NUS_C_EVT_DISCONNECTED;
- p_ble_nus_c->conn_handle = BLE_CONN_HANDLE_INVALID;
- p_ble_nus_c->evt_handler(p_ble_nus_c, &nus_c_evt);
- }
- break;
+ p_ble_nus_c->conn_handle = BLE_CONN_HANDLE_INVALID;
+ p_ble_nus_c->evt_handler(p_ble_nus_c, &nus_c_evt);
+ }
+ break;
- default:
- // No implementation needed.
- break;
- }
+ default:
+ // No implementation needed.
+ break;
+ }
}
/**@brief Function for creating a message for writing to the CCCD. */
-static uint32_t cccd_configure(ble_nus_c_t * p_ble_nus_c, bool notification_enable)
-{
- nrf_ble_gq_req_t cccd_req;
- uint8_t cccd[BLE_CCCD_VALUE_LEN];
- uint16_t cccd_val = notification_enable ? BLE_GATT_HVX_NOTIFICATION : 0;
-
- memset(&cccd_req, 0, sizeof(nrf_ble_gq_req_t));
-
- cccd[0] = LSB_16(cccd_val);
- cccd[1] = MSB_16(cccd_val);
-
- cccd_req.type = NRF_BLE_GQ_REQ_GATTC_WRITE;
- cccd_req.error_handler.cb = gatt_error_handler;
- cccd_req.error_handler.p_ctx = p_ble_nus_c;
- cccd_req.params.gattc_write.handle = p_ble_nus_c->handles.nus_tx_cccd_handle;
- cccd_req.params.gattc_write.len = BLE_CCCD_VALUE_LEN;
- cccd_req.params.gattc_write.offset = 0;
- cccd_req.params.gattc_write.p_value = cccd;
- cccd_req.params.gattc_write.write_op = BLE_GATT_OP_WRITE_REQ;
- cccd_req.params.gattc_write.flags = BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE;
-
- return nrf_ble_gq_item_add(p_ble_nus_c->p_gatt_queue, &cccd_req, p_ble_nus_c->conn_handle);
+static uint32_t cccd_configure(ble_nus_c_t *p_ble_nus_c, bool notification_enable) {
+ nrf_ble_gq_req_t cccd_req;
+ uint8_t cccd[BLE_CCCD_VALUE_LEN];
+ uint16_t cccd_val = notification_enable ? BLE_GATT_HVX_NOTIFICATION : 0;
+
+ memset(&cccd_req, 0, sizeof(nrf_ble_gq_req_t));
+
+ cccd[0] = LSB_16(cccd_val);
+ cccd[1] = MSB_16(cccd_val);
+
+ cccd_req.type = NRF_BLE_GQ_REQ_GATTC_WRITE;
+ cccd_req.error_handler.cb = gatt_error_handler;
+ cccd_req.error_handler.p_ctx = p_ble_nus_c;
+ cccd_req.params.gattc_write.handle = p_ble_nus_c->handles.nus_tx_cccd_handle;
+ cccd_req.params.gattc_write.len = BLE_CCCD_VALUE_LEN;
+ cccd_req.params.gattc_write.offset = 0;
+ cccd_req.params.gattc_write.p_value = cccd;
+ cccd_req.params.gattc_write.write_op = BLE_GATT_OP_WRITE_REQ;
+ cccd_req.params.gattc_write.flags = BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE;
+
+ return nrf_ble_gq_item_add(p_ble_nus_c->p_gatt_queue, &cccd_req, p_ble_nus_c->conn_handle);
}
+uint32_t ble_nus_c_tx_notif_enable(ble_nus_c_t *p_ble_nus_c) {
+ VERIFY_PARAM_NOT_NULL(p_ble_nus_c);
-uint32_t ble_nus_c_tx_notif_enable(ble_nus_c_t * p_ble_nus_c)
-{
- VERIFY_PARAM_NOT_NULL(p_ble_nus_c);
-
- if ( (p_ble_nus_c->conn_handle == BLE_CONN_HANDLE_INVALID)
- ||(p_ble_nus_c->handles.nus_tx_cccd_handle == BLE_GATT_HANDLE_INVALID)
- )
- {
- return NRF_ERROR_INVALID_STATE;
- }
- return cccd_configure(p_ble_nus_c, true);
+ if ((p_ble_nus_c->conn_handle == BLE_CONN_HANDLE_INVALID) || (p_ble_nus_c->handles.nus_tx_cccd_handle == BLE_GATT_HANDLE_INVALID)) {
+ return NRF_ERROR_INVALID_STATE;
+ }
+ return cccd_configure(p_ble_nus_c, true);
}
-
-uint32_t ble_nus_c_string_send(ble_nus_c_t * p_ble_nus_c, uint8_t * p_string, uint16_t length)
-{
- VERIFY_PARAM_NOT_NULL(p_ble_nus_c);
-
- nrf_ble_gq_req_t write_req;
-
- memset(&write_req, 0, sizeof(nrf_ble_gq_req_t));
-
- if (length > BLE_NUS_MAX_DATA_LEN)
- {
- NRF_LOG_WARNING("Content too long.");
- return NRF_ERROR_INVALID_PARAM;
- }
- if (p_ble_nus_c->conn_handle == BLE_CONN_HANDLE_INVALID)
- {
- NRF_LOG_WARNING("Connection handle invalid.");
- return NRF_ERROR_INVALID_STATE;
- }
-
- write_req.type = NRF_BLE_GQ_REQ_GATTC_WRITE;
- write_req.error_handler.cb = gatt_error_handler;
- write_req.error_handler.p_ctx = p_ble_nus_c;
- write_req.params.gattc_write.handle = p_ble_nus_c->handles.nus_rx_handle;
- write_req.params.gattc_write.len = length;
- write_req.params.gattc_write.offset = 0;
- write_req.params.gattc_write.p_value = p_string;
- write_req.params.gattc_write.write_op = BLE_GATT_OP_WRITE_CMD;
- write_req.params.gattc_write.flags = BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE;
-
- return nrf_ble_gq_item_add(p_ble_nus_c->p_gatt_queue, &write_req, p_ble_nus_c->conn_handle);
+uint32_t ble_nus_c_string_send(ble_nus_c_t *p_ble_nus_c, uint8_t *p_string, uint16_t length) {
+ VERIFY_PARAM_NOT_NULL(p_ble_nus_c);
+
+ nrf_ble_gq_req_t write_req;
+
+ memset(&write_req, 0, sizeof(nrf_ble_gq_req_t));
+
+ if (length > BLE_NUS_MAX_DATA_LEN) {
+ NRF_LOG_WARNING("Content too long.");
+ return NRF_ERROR_INVALID_PARAM;
+ }
+ if (p_ble_nus_c->conn_handle == BLE_CONN_HANDLE_INVALID) {
+ NRF_LOG_WARNING("Connection handle invalid.");
+ return NRF_ERROR_INVALID_STATE;
+ }
+
+ write_req.type = NRF_BLE_GQ_REQ_GATTC_WRITE;
+ write_req.error_handler.cb = gatt_error_handler;
+ write_req.error_handler.p_ctx = p_ble_nus_c;
+ write_req.params.gattc_write.handle = p_ble_nus_c->handles.nus_rx_handle;
+ write_req.params.gattc_write.len = length;
+ write_req.params.gattc_write.offset = 0;
+ write_req.params.gattc_write.p_value = p_string;
+ write_req.params.gattc_write.write_op = BLE_GATT_OP_WRITE_CMD;
+ write_req.params.gattc_write.flags = BLE_GATT_EXEC_WRITE_FLAG_PREPARED_WRITE;
+
+ return nrf_ble_gq_item_add(p_ble_nus_c->p_gatt_queue, &write_req, p_ble_nus_c->conn_handle);
}
+uint32_t ble_nus_c_handles_assign(ble_nus_c_t *p_ble_nus, uint16_t conn_handle, ble_nus_c_handles_t const *p_peer_handles) {
+ VERIFY_PARAM_NOT_NULL(p_ble_nus);
-uint32_t ble_nus_c_handles_assign(ble_nus_c_t * p_ble_nus,
- uint16_t conn_handle,
- ble_nus_c_handles_t const * p_peer_handles)
-{
- VERIFY_PARAM_NOT_NULL(p_ble_nus);
-
- p_ble_nus->conn_handle = conn_handle;
- if (p_peer_handles != NULL)
- {
- p_ble_nus->handles.nus_tx_cccd_handle = p_peer_handles->nus_tx_cccd_handle;
- p_ble_nus->handles.nus_tx_handle = p_peer_handles->nus_tx_handle;
- p_ble_nus->handles.nus_tx_block_handle = p_peer_handles->nus_tx_block_handle;
- p_ble_nus->handles.nus_tx_block_cccd_handle = p_peer_handles->nus_tx_block_cccd_handle;
- p_ble_nus->handles.nus_rx_handle = p_peer_handles->nus_rx_handle;
- }
- return nrf_ble_gq_conn_handle_register(p_ble_nus->p_gatt_queue, conn_handle);
+ p_ble_nus->conn_handle = conn_handle;
+ if (p_peer_handles != NULL) {
+ p_ble_nus->handles.nus_tx_cccd_handle = p_peer_handles->nus_tx_cccd_handle;
+ p_ble_nus->handles.nus_tx_handle = p_peer_handles->nus_tx_handle;
+ p_ble_nus->handles.nus_rx_handle = p_peer_handles->nus_rx_handle;
+ }
+ return nrf_ble_gq_conn_handle_register(p_ble_nus->p_gatt_queue, conn_handle);
}
-#endif // NRF_MODULE_ENABLED(BLE_NUS_C)
+
+#endif
\ No newline at end of file
diff --git a/ble_app_uart_c/zble_nus_c.h b/ble_app_uart_c/zble_nus_c.h
index 1d5c5b1..8ca332b 100644
--- a/ble_app_uart_c/zble_nus_c.h
+++ b/ble_app_uart_c/zble_nus_c.h
@@ -100,10 +100,9 @@ extern "C" {
{ 0x9E, 0xCA, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x00, 0x00, 0x40, 0x6E } \
} /**< Used vendor-specific UUID. */
-#define BLE_UUID_NUS_SERVICE 0x0001 /**< The UUID of the Nordic UART Service. */
-#define BLE_UUID_NUS_RX_CHARACTERISTIC 0x0002 /**< The UUID of the RX Characteristic. */
-#define BLE_UUID_NUS_TX_CHARACTERISTIC 0x0003 /**< The UUID of the TX Characteristic. */
-#define BLE_UUID_NUS_TX_BLOCK_CHARACTERISTIC 0x0004 /**< The UUID of the TX Characteristic. */
+#define BLE_UUID_NUS_SERVICE 0x0001 /**< The UUID of the Nordic UART Service. */
+#define BLE_UUID_NUS_RX_CHARACTERISTIC 0x0002 /**< The UUID of the RX Characteristic. */
+#define BLE_UUID_NUS_TX_CHARACTERISTIC 0x0003 /**< The UUID of the TX Characteristic. */
#define OPCODE_LENGTH 1
#define HANDLE_LENGTH 2
@@ -120,7 +119,6 @@ extern "C" {
typedef enum {
BLE_NUS_C_EVT_DISCOVERY_COMPLETE, /**< Event indicating that the NUS service and its characteristics were found. */
BLE_NUS_C_EVT_NUS_TX_EVT, /**< Event indicating that the central received something from a peer. */
- BLE_NUS_C_EVT_NUS_TX_BLOCK_EVT, /**< Event indicating that the central received something from a peer. */
BLE_NUS_C_EVT_DISCONNECTED /**< Event indicating that the NUS server disconnected. */
} ble_nus_c_evt_type_t;
@@ -128,11 +126,7 @@ typedef enum {
typedef struct {
uint16_t nus_tx_handle; /**< Handle of the NUS TX characteristic, as provided by a discovery. */
uint16_t nus_tx_cccd_handle; /**< Handle of the CCCD of the NUS TX characteristic, as provided by a discovery. */
-
- uint16_t nus_tx_block_handle; /**< Handle of the NUS TX characteristic, as provided by a discovery. */
- uint16_t nus_tx_block_cccd_handle; /**< Handle of the CCCD of the NUS TX characteristic, as provided by a discovery. */
-
- uint16_t nus_rx_handle; /**< Handle of the NUS RX characteristic, as provided by a discovery. */
+ uint16_t nus_rx_handle; /**< Handle of the NUS RX characteristic, as provided by a discovery. */
} ble_nus_c_handles_t;
/**@brief Structure containing the NUS event data received from the peer. */
@@ -262,7 +256,4 @@ uint32_t ble_nus_c_handles_assign(ble_nus_c_t* p_ble_nus_c, uint16_t conn_handle
#ifdef __cplusplus
}
#endif
-
-#endif // BLE_NUS_C_H__
-
-/** @} */
+#endif
\ No newline at end of file