uint32_t ble_dfu_init(ble_dfu_t * p_dfu, ble_dfu_init_t * p_dfu_init) { if ((p_dfu == NULL) || (p_dfu_init == NULL) || (p_dfu_init->evt_handler == NULL)) { return NRF_ERROR_NULL; } p_dfu->conn_handle = BLE_CONN_HANDLE_INVALID; ble_uuid_t service_uuid; uint32_t err_code; const ble_uuid128_t base_uuid128 = { { 0x23, 0xD1, 0xBC, 0xEA, 0x5F, 0x78, 0x23, 0x15, 0xDE, 0xEF, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00 } }; service_uuid.uuid = BLE_DFU_SERVICE_UUID; err_code = sd_ble_uuid_vs_add(&base_uuid128, &(service_uuid.type)); VERIFY_SUCCESS(err_code); err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &service_uuid, &(p_dfu->service_handle)); VERIFY_SUCCESS(err_code); p_dfu->uuid_type = service_uuid.type; err_code = dfu_pkt_char_add(p_dfu); VERIFY_SUCCESS(err_code); err_code = dfu_ctrl_pt_add(p_dfu); VERIFY_SUCCESS(err_code); err_code = dfu_rev_char_add(p_dfu, p_dfu_init); VERIFY_SUCCESS(err_code); p_dfu->evt_handler = p_dfu_init->evt_handler; if (p_dfu_init->error_handler != NULL) { p_dfu->error_handler = p_dfu_init->error_handler; } m_is_dfu_service_initialized = true; return NRF_SUCCESS; }
/**@brief Function for checking if the CCCD of DFU Control point is configured for Notification. * * @details This function checks if the CCCD of DFU Control Point characteristic is configured * for Notification by the DFU Controller. * * @param[in] p_dfu DFU Service structure. * * @return True if the CCCD of DFU Control Point characteristic is configured for Notification. * False otherwise. */ uint32_t ble_dfu_init(ble_dfu_t * p_dfu) { ble_uuid_t service_uuid; uint32_t err_code; #ifndef NRF51 if (p_dfu == NULL) { return NRF_ERROR_NULL; } #endif m_conn_handle = BLE_CONN_HANDLE_INVALID; BLE_UUID_BLE_ASSIGN(service_uuid, BLE_DFU_SERVICE_UUID); err_code = sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY, &service_uuid, &(p_dfu->service_handle)); VERIFY_SUCCESS(err_code); const ble_uuid128_t base_uuid128 = { { 0x50, 0xEA, 0xDA, 0x30, 0x88, 0x83, 0xB8, 0x9F, 0x60, 0x4F, 0x15, 0xF3, 0x00, 0x00, 0xC9, 0x8E } }; err_code = sd_ble_uuid_vs_add(&base_uuid128, &p_dfu->uuid_type); VERIFY_SUCCESS(err_code); err_code = dfu_pkt_char_add(p_dfu); VERIFY_SUCCESS(err_code); err_code = dfu_ctrl_pt_add(p_dfu); VERIFY_SUCCESS(err_code); m_flags |= DFU_BLE_FLAG_SERVICE_INITIALIZED; return NRF_SUCCESS; }