diff --git a/.vscode/settings.json b/.vscode/settings.json index bb10d5d..a61c940 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -239,7 +239,9 @@ "zapp_core.h": "c", "event.h": "c", "app_protocols.h": "c", - "sdk_initer.h": "c" + "sdk_initer.h": "c", + "nrf_bootloader_dfu_timers.h": "c", + "nrf_mbr.h": "c" }, "files.encoding": "gbk", "search.exclude": { diff --git a/app/src/main.c b/app/src/main.c index 637107b..708589f 100644 --- a/app/src/main.c +++ b/app/src/main.c @@ -57,44 +57,42 @@ static const char* zhex2str(uint8_t* data, size_t len) { return str; } +#define STRUCT_SET(dest, src) memcpy(&dest, src, sizeof(dest)) + static void on_sdk_event_cb(sdk_event_t* event) { #if 1 + switch (event->event) { case kevent_connected: NRF_LOG_INFO("on connected...."); m_connected_state = true; nrf_gpio_pin_write(CONNECTED_STATE_GPIO, 1); - - // { // tx report - // zble_proto_packet_t* report = ble_proto_get_and_clear_report_buf(); - // ble_master_connected_event_t* content = &report->d.ble_master_connected_event; - - // report->cmd = kproto_report_ble_master_connected_event; - // content->connected = true; - // strcpy(content->blename, "empty"); - // strcpy(content->bleid, "empty"); - - // ble_proto_packet_and_send_report(report, sizeof(*content)); - // } + { + zble_connected_event_t revent; + STRUCT_SET(revent.blename, &event->data.on_scan_result.blename); + STRUCT_SET(revent.peeradd, &event->data.on_scan_result.peeradd); + STRUCT_SET(revent.rssi, &event->data.on_scan_result.rssi); + STRUCT_SET(revent.tx_power, &event->data.on_scan_result.tx_power); + send_report_zble_connected_event(&revent); + } break; case kevent_disConnected: NRF_LOG_INFO("on disconnected...."); m_connected_state = false; nrf_gpio_pin_write(CONNECTED_STATE_GPIO, 0); - - // { // tx report - // zble_proto_packet_t* report = ble_proto_get_and_clear_report_buf(); - // ble_master_connected_event_t* content = &report->d.ble_master_connected_event; - - // report->cmd = kproto_report_ble_master_connected_event; - // content->connected = false; - // strcpy(content->blename, ""); - // strcpy(content->bleid, ""); - - // ble_proto_packet_and_send_report(report, sizeof(*content)); - // } - + send_report_zble_disconnect_event(); + break; + case kevent_scanResult: + NRF_LOG_INFO("on scan result...."); + { + zble_scan_result_t revent; + STRUCT_SET(revent.blename, &event->data.on_scan_result.blename); + STRUCT_SET(revent.peeradd, &event->data.on_scan_result.peeradd); + STRUCT_SET(revent.rssi, &event->data.on_scan_result.rssi); + STRUCT_SET(revent.tx_power, &event->data.on_scan_result.tx_power); + send_report_zble_scan_result(&revent); + } break; case kevent_onRxData: // 透传消息到上位机 @@ -118,6 +116,11 @@ static void on_uart_data(uint8_t* data, int32_t len) { send_read_version_receipt(rx, FIRMWARE_VERSION, BLESTACK_VERSION, BOOTLOADER_VERSION, HARDWARE_VERSION); } else if (rx->cmd == kzble_cmd_start_scan) { // TODO + // const char* slaveName, bool autoconnected + zble_start_scan_t* param = (zble_start_scan_t*)rx->data; + param->auto_connect; + param->auto_connect_client_name; + zble_master_sdk_rescan(param->auto_connect_client_name, param->auto_connect); send_success_receipt(rx, NULL, 0); } else if (rx->cmd == kzble_cmd_stop_scan) { // TODO @@ -141,6 +144,7 @@ static void debug_light_tmr_cb(void* p_context) { // } static void heart_state_report_tmr_cb(void* p_context) { // + send_report_heart(100, m_reset_flag, m_connected_state); } static void board_init() { @@ -156,11 +160,6 @@ int main(void) { zappcore_init(); board_init(); - // void zble_master_sdk_init(const char* bleScanFilterName, const char* slaveName, bool autoConnect, on_sdk_event_t onSdkEvent); - // void zble_master_sdk_ble_tx(uint8_t* data, int32_t len); - // void zble_master_sdk_rescan(const char* slaveName, bool autoconnected); - // void zble_master_sdk_set_slave_name(const char* slaveName); - zble_master_sdk_init("AciDisp", "AciDisp00000", true, on_sdk_event_cb); uart_initer_init(on_uart_data); @@ -172,6 +171,7 @@ int main(void) { app_timer_start(m_heart_report_event_tmr, APP_TIMER_TICKS(5000), NULL); zappcore_start_schedule(); + send_report_power_on_event(); for (;;) { if (NRF_LOG_PROCESS() == false) { diff --git a/app/src/protocol_utils.c b/app/src/protocol_utils.c index aafb4bd..063ee07 100644 --- a/app/src/protocol_utils.c +++ b/app/src/protocol_utils.c @@ -51,11 +51,38 @@ void send_report_heart(uint8_t power, uint8_t reset_flag, uint8_t connected_flag heart.reset_flag = reset_flag; heart.power = power; zble_proto_utils_create_report(reportpacket, kzble_report_heart, index++, (uint8_t*)&heart, sizeof(heart)); + reportpacket->from = kzble_master; uart_send_data((uint8_t*)reportpacket, (uint16_t)reportpacket->packetlen); } void send_report_key_event(hand_acid_remoter_key_event_t event) { bletxbuf_clear(); int32_t keyevent; zble_proto_utils_create_report(reportpacket, 0, kzble_app_report_key_event, (uint8_t*)&keyevent, sizeof(keyevent)); + reportpacket->from = kzble_master; uart_send_data((uint8_t*)reportpacket, (uint16_t)reportpacket->packetlen); -} \ No newline at end of file +} + +void send_report_zble_connected_event(zble_connected_event_t* event) { + bletxbuf_clear(); + zble_proto_utils_create_report(reportpacket, kzble_report_connected_event, index++, (uint8_t*)event, sizeof(*event)); + reportpacket->from = kzble_master; + uart_send_data((uint8_t*)reportpacket, (uint16_t)reportpacket->packetlen); +} +void send_report_zble_disconnect_event() { + bletxbuf_clear(); + zble_proto_utils_create_report(reportpacket, kzble_report_disconnect_event, index++, NULL, 0); + reportpacket->from = kzble_master; + uart_send_data((uint8_t*)reportpacket, (uint16_t)reportpacket->packetlen); +} +void send_report_zble_scan_result(zble_scan_result_t* event) { + bletxbuf_clear(); + zble_proto_utils_create_report(reportpacket, kzble_report_scan_result, index++, (uint8_t*)event, sizeof(*event)); + reportpacket->from = kzble_master; + uart_send_data((uint8_t*)reportpacket, (uint16_t)reportpacket->packetlen); +} +void send_report_power_on_event() { + bletxbuf_clear(); + zble_proto_utils_create_report(reportpacket, kzble_report_power_on, index++, NULL, 0); + reportpacket->from = kzble_master; + uart_send_data((uint8_t*)reportpacket, (uint16_t)reportpacket->packetlen); +} diff --git a/app/src/protocol_utils.h b/app/src/protocol_utils.h index d848cf9..fd75bfa 100644 --- a/app/src/protocol_utils.h +++ b/app/src/protocol_utils.h @@ -10,3 +10,7 @@ void send_read_version_receipt(zble_proto_packet_t* rxpacket, int32_t firmware_v void send_report_heart(uint8_t power, uint8_t reset_flag, uint8_t connected_flag); void send_report_key_event(hand_acid_remoter_key_event_t event); +void send_report_zble_connected_event(zble_connected_event_t* event); +void send_report_zble_disconnect_event(); +void send_report_zble_scan_result(zble_scan_result_t* event); +void send_report_power_on_event(); diff --git a/app/src/service/sdk_initer.c b/app/src/service/sdk_initer.c index b391ed8..1190404 100644 --- a/app/src/service/sdk_initer.c +++ b/app/src/service/sdk_initer.c @@ -70,6 +70,9 @@ static ble_gap_conn_params_t m_conn_param = { }; static void onScanEvent(scan_evt_t const* p_scan_evt) { + static sdk_event_t reportEvent; + memset(&reportEvent, 0, sizeof(reportEvent)); + ret_code_t err_code; ble_gap_evt_adv_report_t const* p_adv = p_scan_evt->params.filter_match.p_adv_report; ble_gap_scan_params_t const* p_scan_param = p_scan_evt->p_scan_params; @@ -99,6 +102,13 @@ static void onScanEvent(scan_evt_t const* p_scan_evt) { NRF_LOG_ERROR("sd_ble_gap_connect() failed: 0x%x.", err_code); } } + } else { + reportEvent.event = kevent_onScanResult; + strcpy(reportEvent.data.on_scan_result.blename, ble_find_name(p_adv->data.p_data, p_adv->data.len)); + reportEvent.data.on_scan_result.rssi = p_adv->rssi; + reportEvent.data.on_scan_result.tx_power = p_adv->tx_power; + memcpy(reportEvent.data.on_scan_result.peeradd, p_adv->peer_addr.addr, BLE_GAP_ADDR_LEN); + m_onSdkEvent(&reportEvent); } } break; default: @@ -109,6 +119,7 @@ static void onScanEvent(scan_evt_t const* p_scan_evt) { static void onBleNusEvent(ble_nus_c_t* p_ble_nus_c, ble_nus_c_evt_t const* p_ble_nus_evt) { ret_code_t err_code; static sdk_event_t event; + memset(&event, 0, sizeof(event)); switch (p_ble_nus_evt->evt_type) { case BLE_NUS_C_EVT_DISCOVERY_COMPLETE: @@ -142,6 +153,7 @@ static void onBleNusEvent(ble_nus_c_t* p_ble_nus_c, ble_nus_c_evt_t const* p_ble scan_start(); break; } + // on_scan_result } static void onBleEvent(ble_evt_t const* p_ble_evt, void* p_context) { ret_code_t err_code; @@ -262,8 +274,8 @@ static void nus_c_init(void) { } void zble_master_sdk_init(const char* bleScanFilterName, const char* slaveName, bool autoConnect, on_sdk_event_t onSdkEvent) { - APP_ERROR_HANDLER(onSdkEvent != NULL); - APP_ERROR_HANDLER(bleScanFilterName != NULL); + // APP_ERROR_HANDLER(onSdkEvent != NULL); + // APP_ERROR_HANDLER(bleScanFilterName != NULL); memcpy(m_bleScanFilterName, bleScanFilterName, strlen(bleScanFilterName)); if (slaveName) memcpy(m_slaveName, slaveName, strlen(slaveName)); diff --git a/app/src/service/sdk_initer.h b/app/src/service/sdk_initer.h index 33203b2..661a024 100644 --- a/app/src/service/sdk_initer.h +++ b/app/src/service/sdk_initer.h @@ -29,6 +29,7 @@ typedef enum { kevent_onScanResult, kevent_connected, kevent_disConnected, + kevent_scanResult, kevent_onRxData, } sdk_event_type_t; @@ -39,6 +40,13 @@ typedef struct { uint8_t* data; uint16_t length; } on_ble_data; + + struct { + char blename[30]; + uint8_t peeradd[BLE_GAP_ADDR_LEN]; + uint8_t rssi; + int8_t tx_power; + } on_scan_result; } data; } sdk_event_t; diff --git a/app_protocols b/app_protocols index 1be600c..052e25b 160000 --- a/app_protocols +++ b/app_protocols @@ -1 +1 @@ -Subproject commit 1be600cfcc00a33264e0a8344acfd22601372236 +Subproject commit 052e25b45d9164b75941565940ffcb9720c398cb