Browse Source

init

master
zhaohe 11 months ago
parent
commit
fbb7a9a4e0
  1. 5
      .vscode/settings.json
  2. 17
      app/src/main.c
  3. 86
      app/src/service/sdk_initer.c
  4. 34
      app/src/service/sdk_initer.h

5
.vscode/settings.json

@ -226,7 +226,7 @@
"nrf_queue.h": "c",
"sdk_errors.h": "c",
"nrf_ble_scan.h": "c",
"sdk_initer.h": "c",
"zble_master_sdk_init.h": "c",
"uart_initer.h": "c",
"protocol.h": "c",
"protocol_utils.h": "c",
@ -238,7 +238,8 @@
"errorcode.h": "c",
"zapp_core.h": "c",
"event.h": "c",
"app_protocols.h": "c"
"app_protocols.h": "c",
"sdk_initer.h": "c"
},
"files.encoding": "gbk",
"search.exclude": {

17
app/src/main.c

@ -21,10 +21,9 @@
#include "nrf_sdh_ble.h"
#include "nrf_sdh_soc.h"
#include "service/sdk_initer.h"
#include "service/zble_nus_c.h"
//
#include "service/uart_initer.h"
#include "app_basic_service/zapp_core.h"
#include "service/uart_initer.h"
//
#include "app_protocols/app_protocols.h"
#include "aproject_config/config.h"
@ -79,7 +78,7 @@ static void on_sdk_event_cb(sdk_event_t* event) {
// }
break;
case kevent_disconnected:
case kevent_disConnected:
NRF_LOG_INFO("on disconnected....");
m_connected_state = false;
nrf_gpio_pin_write(CONNECTED_STATE_GPIO, 0);
@ -97,7 +96,7 @@ static void on_sdk_event_cb(sdk_event_t* event) {
// }
break;
case kevent_on_rx_data:
case kevent_onRxData:
// ͸´«ÏûÏ¢µ½ÉÏλ»ú
NRF_LOG_INFO("on rx data...%s", zhex2str(event->data.on_ble_data.data, event->data.on_ble_data.length));
uart_send_data(event->data.on_ble_data.data, event->data.on_ble_data.length);
@ -112,7 +111,6 @@ static void on_uart_data(uint8_t* data, int32_t len) {
zble_proto_packet_t* rx = (zble_proto_packet_t*)data;
// zble_proto_packet_t* tx = ble_proto_get_receipt_buf();
if (rx->to == kzble_master) {
if (rx->cmd == kzble_cmd_reset) {
NVIC_SystemReset();
@ -132,7 +130,7 @@ static void on_uart_data(uint8_t* data, int32_t len) {
send_success_receipt(rx, NULL, 0);
}
} else {
sdk_ble_tx(data, len);
zble_master_sdk_ble_tx(data, len);
}
}
@ -157,8 +155,13 @@ static void board_init() {
int main(void) {
zappcore_init();
board_init();
sdk_initer(on_sdk_event_cb);
// 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);

86
app/src/service/sdk_initer.c

@ -14,17 +14,21 @@ BLE_DB_DISCOVERY_DEF(m_db_disc);
NRF_BLE_SCAN_DEF(m_scan); /**< Scanning Module instance. */
NRF_BLE_GQ_DEF(m_ble_gatt_queue, NRF_SDH_BLE_CENTRAL_LINK_COUNT, NRF_BLE_GQ_QUEUE_SIZE); /**< BLE GATT Queue instance. */
static uint16_t m_ble_nus_max_data_len = BLE_GATT_ATT_MTU_DEFAULT - OPCODE_LENGTH - HANDLE_LENGTH;
static ble_uuid_t const m_nus_uuid = {.uuid = BLE_UUID_NUS_SERVICE, .type = NUS_SERVICE_UUID_TYPE};
static on_sdk_event_cb_t m_on_sdk_event_cb;
static char m_target_periph_name0[20] = BLE_CLIENT_NAME;
static uint16_t m_ble_connect_handle;
static uint16_t m_ble_nus_max_data_len = BLE_GATT_ATT_MTU_DEFAULT - OPCODE_LENGTH - HANDLE_LENGTH;
static ble_uuid_t const m_nus_uuid = {.uuid = BLE_UUID_NUS_SERVICE, .type = NUS_SERVICE_UUID_TYPE};
static on_sdk_event_t m_onSdkEvent;
static uint16_t m_ble_connect_handle;
static char m_bleScanFilterName[40];
static char m_slaveName[40];
static bool m_autoConnect = false;
void assert_nrf_callback(uint16_t line_num, const uint8_t* p_file_name) { app_error_handler(0xDEADBEEF, line_num, p_file_name); }
static void nus_error_handler(uint32_t nrf_error) { APP_ERROR_HANDLER(nrf_error); }
static bool shutdown_handler(nrf_pwr_mgmt_evt_t event) { return true; }
NRF_PWR_MGMT_HANDLER_REGISTER(shutdown_handler, APP_SHUTDOWN_HANDLER_PRIORITY);
extern uint16_t ble_advdata_search(uint8_t const* p_encoded_data, uint16_t data_len, uint16_t* p_offset, uint8_t ad_type);
static void scan_start(void) {
ret_code_t ret;
ret = nrf_ble_scan_start(&m_scan);
@ -87,10 +91,14 @@ static void onScanEvent(scan_evt_t const* p_scan_evt) {
} break;
case NRF_BLE_SCAN_EVT_FILTER_MATCH: {
NRF_LOG_INFO("Device \"%s\" found, sending a connection request.", ble_find_name(p_adv->data.p_data, p_adv->data.len));
err_code = sd_ble_gap_connect(&p_adv->peer_addr, p_scan_param, &m_conn_param, APP_BLE_CONN_CFG_TAG);
if (err_code != NRF_SUCCESS) {
NRF_LOG_ERROR("sd_ble_gap_connect() failed: 0x%x.", err_code);
if (m_autoConnect) {
if (strcmp(ble_find_name(p_adv->data.p_data, p_adv->data.len), m_slaveName) == 0) {
NRF_LOG_INFO("Device \"%s\" found, sending a connection request.", ble_find_name(p_adv->data.p_data, p_adv->data.len));
err_code = sd_ble_gap_connect(&p_adv->peer_addr, p_scan_param, &m_conn_param, APP_BLE_CONN_CFG_TAG);
if (err_code != NRF_SUCCESS) {
NRF_LOG_ERROR("sd_ble_gap_connect() failed: 0x%x.", err_code);
}
}
}
} break;
default:
@ -112,25 +120,25 @@ static void onBleNusEvent(ble_nus_c_t* p_ble_nus_c, ble_nus_c_evt_t const* p_ble
NRF_LOG_INFO("Connected to device with Nordic UART Service.");
event.event = kevent_connected;
m_on_sdk_event_cb(&event);
m_onSdkEvent(&event);
break;
case BLE_NUS_C_EVT_NUS_TX_EVT:
event.event = kevent_on_rx_data;
event.event = kevent_onRxData;
event.data.on_ble_data.data = p_ble_nus_evt->p_data;
event.data.on_ble_data.length = p_ble_nus_evt->data_len;
m_on_sdk_event_cb(&event);
m_onSdkEvent(&event);
break;
case BLE_NUS_C_EVT_NUS_TX_EVT_2:
event.event = kevent_on_rx_data;
event.event = kevent_onRxData;
event.data.on_ble_data.data = p_ble_nus_evt->p_data;
event.data.on_ble_data.length = p_ble_nus_evt->data_len;
m_on_sdk_event_cb(&event);
m_onSdkEvent(&event);
break;
case BLE_NUS_C_EVT_DISCONNECTED:
NRF_LOG_INFO("Disconnected.");
event.event = kevent_disconnected;
m_on_sdk_event_cb(&event);
event.event = kevent_disConnected;
m_onSdkEvent(&event);
scan_start();
break;
}
@ -149,7 +157,7 @@ static void onBleEvent(ble_evt_t const* p_ble_evt, void* p_context) {
break;
case BLE_GAP_EVT_DISCONNECTED:
NRF_LOG_INFO("Disconnected. conn_handle: 0x%x, reason: 0x%x", p_gap_evt->conn_handle, p_gap_evt->params.disconnected.reason);
m_ble_connect_handle = -1;
m_ble_connect_handle = 0;
break;
case BLE_GAP_EVT_TIMEOUT:
if (p_gap_evt->params.timeout.src == BLE_GAP_TIMEOUT_SRC_CONN) {
@ -214,7 +222,7 @@ static void scan_init(void) {
err_code = nrf_ble_scan_init(&m_scan, &init_scan, onScanEvent);
APP_ERROR_CHECK(err_code);
APP_ERROR_CHECK(nrf_ble_scan_filter_set(&m_scan, SCAN_NAME_FILTER, m_target_periph_name0));
APP_ERROR_CHECK(nrf_ble_scan_filter_set(&m_scan, SCAN_NAME_FILTER, m_bleScanFilterName));
err_code = nrf_ble_scan_filters_enable(&m_scan, NRF_BLE_SCAN_NAME_FILTER, false);
APP_ERROR_CHECK(err_code);
}
@ -253,13 +261,18 @@ static void nus_c_init(void) {
APP_ERROR_CHECK(err_code);
}
void sdk_initer(on_sdk_event_cb_t on_sdk_event_cb) {
m_on_sdk_event_cb = on_sdk_event_cb;
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);
memcpy(m_bleScanFilterName, bleScanFilterName, strlen(bleScanFilterName));
if (slaveName) memcpy(m_slaveName, slaveName, strlen(slaveName));
m_onSdkEvent = onSdkEvent;
m_autoConnect = autoConnect;
// log init
APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
NRF_LOG_DEFAULT_BACKENDS_INIT();
APP_ERROR_CHECK(app_timer_init());
{
ble_db_discovery_init_t db_init = {0};
@ -279,6 +292,31 @@ void sdk_initer(on_sdk_event_cb_t on_sdk_event_cb) {
scan_start();
}
void sdk_ble_tx(uint8_t* data, int32_t len) { ble_nus_c_string_send(&m_ble_nus_c, data, len); }
void sdk_scan_start(const char* name, bool autoconnected) {}
void sdk_scan_stop(const char* name);
void zble_master_sdk_ble_tx(uint8_t* data, int32_t len) { ble_nus_c_string_send(&m_ble_nus_c, data, len); }
void zble_master_sdk_rescan(const char* slaveName, bool autoConnected) {
//
uint16_t connect_handle = 0;
CRITICAL_REGION_ENTER();
if (slaveName == NULL) {
memset(m_slaveName, 0, sizeof(m_slaveName));
} else {
memcpy(m_slaveName, slaveName, strlen(slaveName));
}
m_autoConnect = autoConnected;
connect_handle = m_ble_connect_handle;
CRITICAL_REGION_EXIT();
if (connect_handle != 0) {
sd_ble_gap_disconnect(connect_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
}
}
void zble_master_sdk_set_slave_name(const char* slaveName) {
CRITICAL_REGION_ENTER();
if (slaveName == NULL) {
memset(m_slaveName, 0, sizeof(m_slaveName));
} else {
memcpy(m_slaveName, slaveName, strlen(slaveName));
}
CRITICAL_REGION_EXIT();
}

34
app/src/service/sdk_initer.h

@ -26,9 +26,10 @@
#define BLE_CLIENT_NAME "AciDisp"
typedef enum {
kevent_onScanResult,
kevent_connected,
kevent_disconnected,
kevent_on_rx_data,
kevent_disConnected,
kevent_onRxData,
} sdk_event_type_t;
typedef struct {
@ -41,14 +42,33 @@ typedef struct {
} data;
} sdk_event_t;
typedef void (*on_sdk_event_cb_t)(sdk_event_t* event);
typedef void (*on_sdk_event_t)(sdk_event_t* event);
typedef struct {
ble_nus_c_evt_handler_t nus_c_evt_handler;
} sdk_cfg_t;
void sdk_initer(on_sdk_event_cb_t on_sdk_event_cb);
void sdk_ble_tx(uint8_t* data, int32_t len);
/**
* @brief
*
* @param bleScanFilterName
* @param slaveName
* @param autoConnect
* @param onSdkEvent
*/
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 sdk_scan_start(const char* name, bool autoconnected);
void sdk_scan_stop(const char* name);
/**
* @brief
*
* @param slaveName
* @param autoconnected
*/
void zble_master_sdk_rescan(const char* slaveName, bool autoconnected);
/**
* @brief
*
* @param slaveName
*/
void zble_master_sdk_set_slave_name(const char* slaveName);
Loading…
Cancel
Save