Мне нужно разобраться в devkit от Nordi c semiconductor (nRF51-DK), и меня беспокоит одна строка в ble_app_alert_notification (если вы хотите увидеть исходный код).
/**@brief Alert Notification event handler type. */
typedef void (*ble_ans_c_evt_handler_t) (ble_ans_c_evt_t * p_evt);
ble_ans_c_evt_t определяется следующим образом:
typedef struct
{
ble_ans_c_evt_type_t evt_type; /**< Type of event. */
uint16_t conn_handle; /**< Connection handle on which the ANS service was discovered on the peer device. This will be filled if the evt_type is @ref BLE_ANS_C_EVT_DISCOVERY_COMPLETE.*/
ble_uuid_t uuid; /**< UUID of the event in case of an alert or notification. */
union
{
ble_ans_alert_settings_t settings; /**< Setting returned from server on read request. */
ble_ans_alert_notification_t alert; /**< Alert Notification data sent by the server. */
uint32_t error_code; /**< Additional status/error code if the event was caused by a stack error or gatt status, e.g. during service discovery. */
ble_ans_c_service_t service; /**< Info on the discovered Alert Notification Service discovered. This will be filled if the evt_type is @ref BLE_ANS_C_EVT_DISCOVERY_COMPLETE.*/
} data;
} ble_ans_c_evt_t;
и ble_ans_c_evt_handler_t находится в структуре ble_ans_c_s , которая является службой Bluetooth для это приложение:
struct ble_ans_c_s
{
ble_ans_c_evt_handler_t evt_handler; /**< Event handler to be called for handling events in the Alert Notification Client Application. */
ble_srv_error_handler_t error_handler; /**< Function to be called in case of an error. */
uint16_t conn_handle; /**< Handle of the current connection (as provided by the BLE stack, is BLE_CONN_HANDLE_INVALID if not in a connection). */
uint8_t central_handle; /**< Handle for the currently connected central if peer is bonded. */
uint8_t service_handle; /**< Handle to the service in the database to use for this instance. */
uint32_t message_buffer_size; /**< Size of message buffer to hold the additional text messages received on notifications. */
uint8_t * p_message_buffer; /**< Pointer to the buffer to be used for additional text message handling. */
ble_ans_c_service_t service; /**< Struct to store the different handles and UUIDs related to the service. */
};
ble_ans_c_evt_handler_t нигде не определено и упоминается только в структуре ble_ans_c_s .
Мой вопрос: как следует Я интерпретирую строку typedef void (*ble_ans_c_evt_handler_t) (ble_ans_c_evt_t * p_evt);
?
Насколько я понимаю, эта строка означает, что мы определяем указатель на функцию, которая принимает указатель в качестве параметра и ничего не возвращает (void). Затем мы сможем использовать evt_handler из ble_ans_c_s , чтобы назначить любую функцию с той же сигнатурой, что и для typedef выше.
Правильно ли я понимаю?
Спасибо за ваше время.