/**@brief Function for handling of descriptor discovery responses. * * @details This function will validate and store the descriptor received. * If not all descriptors are discovered it will continue the descriptor discovery * procedure, otherwise it will continue to running state. * If we receive a GATT Client error, we will go to handling of discovery failure. */ static void event_descriptor_rsp(ble_ans_c_t * p_ans, const ble_evt_t * p_ble_evt) { if (p_ble_evt->evt.gattc_evt.gatt_status == BLE_GATT_STATUS_ATTERR_ATTRIBUTE_NOT_FOUND || p_ble_evt->evt.gattc_evt.gatt_status == BLE_GATT_STATUS_ATTERR_INVALID_HANDLE) { handle_discovery_failure(p_ans, NRF_ERROR_NOT_FOUND); } else if (p_ble_evt->evt.gattc_evt.gatt_status) { // We have received an unexpected result. // As we are in a connected state, but can not continue // our descriptor discovery, we will go to running state. handle_discovery_failure(p_ans, p_ble_evt->evt.gattc_evt.gatt_status); } else { if (p_ble_evt->evt.gattc_evt.params.desc_disc_rsp.count > 0) { descriptor_set(&m_service, &(p_ble_evt->evt.gattc_evt.params.desc_disc_rsp.descs[0])); } if (m_service.new_alert.handle_cccd == BLE_ANS_INVALID_HANDLE || m_service.unread_alert_status.handle_cccd == BLE_ANS_INVALID_HANDLE) { descriptor_disc_req_send(p_ans); } else { connection_established(p_ans); } } }
void idt_init() { idt.size = sizeof(descriptor) - 1; idt.base = (uint64_t) &descriptor; for (int i = 0; i < INTERRUPT_COUNT; i++) descriptor_set(i, (uint64_t) &handler_empty, INTERRUPT_FLAG_PRESENT | INTERRUPT_FLAG_INT64); uint8_t errors[] = {8, 10, 11, 12, 13, 14, 17, 30}; for (int i = 0; i < 8; i++) descriptor_set(errors[i], (uint64_t) &handler_pop, INTERRUPT_FLAG_PRESENT | INTERRUPT_FLAG_INT64); set_idt(&idt); }