void sl_notify_gap_evt_to_porting_layer(sl_bt_msg_t *evt) { sl_status_t sc; bd_addr address; uint8_t address_type; struct ble_gap_event event; memset(&event, 0, sizeof(event)); switch (SL_BT_MSG_ID(evt->header)) { // ------------------------------- // This event is generated when an advertisement packet or a scan response // is received from a responder case sl_bt_evt_scanner_legacy_advertisement_report_id: memset(&event, 0, sizeof(event)); event.type = BLE_GAP_EVENT_DISC; event.disc.event_type = convert_to_nimble_adv_type(evt->data.evt_scanner_legacy_advertisement_report.event_flags); event.disc.length_data = evt->data.evt_scanner_legacy_advertisement_report.data.len; event.disc.data = evt->data.evt_scanner_legacy_advertisement_report.data.data; event.disc.addr.type = evt->data.evt_scanner_legacy_advertisement_report.address_type; memcpy(event.disc.addr.val, evt->data.evt_scanner_legacy_advertisement_report.address.addr, 6); event.disc.rssi = evt->data.evt_scanner_legacy_advertisement_report.rssi; notify_ble_event_to_listeners(&event); break; // ------------------------------- // This event indicates that a new connection was opened. case sl_bt_evt_connection_opened_id: event.type = BLE_GAP_EVENT_CONNECT; event.connect.conn_handle = evt->data.evt_connection_opened.connection; app_log_info("BLE connected, conn_id:%d\n", event.connect.conn_handle); notify_ble_event_to_listeners(&event); break; // ------------------------------- // This event indicates that a connection was closed. case sl_bt_evt_connection_closed_id: event.type = BLE_GAP_EVENT_DISCONNECT; event.disconnect.conn.conn_handle = evt->data.evt_connection_closed.connection; event.disconnect.reason = evt->data.evt_connection_closed.reason; app_log_info("BLE disconnected, conn_id:%d, reason:0x%02x\n", event.disconnect.conn.conn_handle, event.disconnect.reason); notify_ble_event_to_listeners(&event); break; case sl_bt_evt_gatt_mtu_exchanged_id: event.type = BLE_GAP_EVENT_MTU; event.mtu.conn_handle = evt->data.evt_gatt_mtu_exchanged.connection; event.mtu.value = evt->data.evt_gatt_mtu_exchanged.mtu; app_log_info("exchange mtu req: %d\n", event.mtu.value); notify_ble_event_to_listeners(&event); break; default: break; } }
时间: 2024-04-03 20:37:06 浏览: 191
这是一个函数的具体实现,实现了将 GAP 事件通知到 porting layer 的功能。函数接收一个 `sl_bt_msg_t` 类型的指针作为参数,根据不同的 GAP 事件类型,将事件转换成 nimble 的 BLE GAP 事件,然后通知给监听器进行处理。其中,不同的 GAP 事件类型包括扫描响应、连接建立、连接断开、MTU 交换等。通过这个函数,可以将不同的 GAP 事件转换成标准的 BLE GAP 事件,方便上层应用进行处理。具体实现细节可以参考代码注释。
相关问题
void sl_notify_gap_evt_to_porting_layer(sl_bt_msg_t *evt)
这是一个函数声明,可能是在某个蓝牙协议栈或者SDK中定义的。函数名为 `sl_notify_gap_evt_to_porting_layer`,接受一个 `sl_bt_msg_t` 类型的指针作为参数。根据函数名中的 `gap_evt` 可以猜测这个函数的作用是将 GAP(Generic Access Profile)事件通知到某个“porting layer”中。具体实现需要查看代码。
怎么写pd_tcp_notifier_call(struct notifier_block *nb, unsigned long evt, void *ptr)
pd_tcp_notifier_call函数的实现可以参考以下代码:
```
static int pd_tcp_notifier_call(struct notifier_block *nb, unsigned long evt, void *ptr)
{
struct inet_sock *inet_sk = inet_sk((struct sock *)ptr);
if (!inet_sk)
return NOTIFY_DONE;
switch (evt) {
case NETDEV_UP:
// 处理网络设备上线事件
break;
case NETDEV_DOWN:
// 处理网络设备下线事件
break;
case NETDEV_CHANGE:
// 处理网络设备变更事件
break;
case INET_ADDR_CHANGE:
// 处理IP地址变更事件
break;
default:
break;
}
return NOTIFY_OK;
}
```
该函数是一个notifier_block的回调函数,用于处理TCP网络相关的事件。在函数内部,通过evt参数来判断事件类型,并根据事件类型执行相应的操作。通常,该函数的返回值为NOTIFY_OK表示事件已被处理,返回值为NOTIFY_DONE表示事件未被处理。
阅读全文