/******************************************************************************* ** ** Function nfc_hal_send_nci_msg_to_nfc_task ** ** Description This function is called to send nci message to nfc task ** ** Returns void ** *******************************************************************************/ void nfc_hal_send_nci_msg_to_nfc_task (NFC_HDR * p_msg) { #ifdef SWISSKNIFEVERSION if(!shortCircuit && !sent){ #ifdef NFC_HAL_SHARED_GKI /* Using shared NFC/HAL GKI resources - send message buffer directly to NFC_TASK for processing */ p_msg->event = BT_EVT_TO_NFC_NCI; GKI_send_msg (NFC_TASK, NFC_MBOX_ID, p_msg); #else /* Send NCI message to the stack */ nfc_hal_cb.p_data_cback (p_msg->len, (UINT8 *) ((p_msg + 1) + p_msg->offset)); GKI_freebuf(p_msg); #endif } else{ GKI_freebuf(p_msg); } #else #ifdef NFC_HAL_SHARED_GKI /* Using shared NFC/HAL GKI resources - send message buffer directly to NFC_TASK for processing */ p_msg->event = BT_EVT_TO_NFC_NCI; GKI_send_msg (NFC_TASK, NFC_MBOX_ID, p_msg); #else /* Send NCI message to the stack */ nfc_hal_cb.p_data_cback (p_msg->len, (UINT8 *) ((p_msg + 1) + p_msg->offset)); GKI_freebuf(p_msg); #endif #endif }
/******************************************************************************* ** ** Function nfc_start_timer ** ** Description Start a timer for the specified amount of time. ** NOTE: The timeout resolution is in SECONDS! (Even ** though the timer structure field is ticks) ** ** Returns void ** *******************************************************************************/ void nfc_start_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout) { BT_HDR *p_msg; /* if timer list is currently empty, start periodic GKI timer */ if (nfc_cb.timer_queue.p_first == NULL) { /* if timer starts on other than NFC task (scritp wrapper) */ if (GKI_get_taskid () != NFC_TASK) { /* post event to start timer in NFC task */ if ((p_msg = (BT_HDR *) GKI_getbuf (BT_HDR_SIZE)) != NULL) { p_msg->event = BT_EVT_TO_START_TIMER; GKI_send_msg (NFC_TASK, NFC_MBOX_ID, p_msg); } } else { /* Start nfc_task 1-sec resolution timer */ GKI_start_timer (NFC_TIMER_ID, GKI_SECS_TO_TICKS (1), TRUE); } } GKI_remove_from_timer_list (&nfc_cb.timer_queue, p_tle); p_tle->event = type; p_tle->ticks = timeout; /* Save the number of seconds for the timer */ GKI_add_to_timer_list (&nfc_cb.timer_queue, p_tle); }
/******************************************************************************* ** ** Function nfc_hal_main_start_quick_timer ** ** Description Start a timer for the specified amount of time. ** NOTE: The timeout resolution depends on including modules. ** QUICK_TIMER_TICKS_PER_SEC should be used to convert from ** time to ticks. ** ** ** Returns void ** *******************************************************************************/ void nfc_hal_main_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout) { NFC_HDR *p_msg; /* if timer list is currently empty, start periodic GKI timer */ if (nfc_hal_cb.quick_timer_queue.p_first == NULL) { /* if timer starts on other than NCIT task (script wrapper) */ if(GKI_get_taskid () != NFC_HAL_TASK) { /* post event to start timer in NCIT task */ if ((p_msg = (NFC_HDR *) GKI_getbuf (NFC_HDR_SIZE)) != NULL) { p_msg->event = NFC_HAL_EVT_TO_START_QUICK_TIMER; GKI_send_msg (NFC_HAL_TASK, NFC_HAL_TASK_MBOX, p_msg); } } else { GKI_start_timer (NFC_HAL_QUICK_TIMER_ID, ((GKI_SECS_TO_TICKS (1) / QUICK_TIMER_TICKS_PER_SEC)), TRUE); } } GKI_remove_from_timer_list (&nfc_hal_cb.quick_timer_queue, p_tle); p_tle->event = type; p_tle->ticks = timeout; /* Save the number of ticks for the timer */ GKI_add_to_timer_list (&nfc_hal_cb.quick_timer_queue, p_tle); }
/******************************************************************************* ** ** Function btu_uipc_rx_cback ** ** Description ** ** ** Returns void ** *******************************************************************************/ void btu_uipc_rx_cback(BT_HDR *p_msg) { BT_TRACE_3 (TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, "btu_uipc_rx_cback event 0x%x, len %d, offset %d", p_msg->event, p_msg->len, p_msg->offset); GKI_send_msg(BTU_TASK, BTU_HCI_RCV_MBOX, p_msg); }
/******************************************************************************* ** ** Function btu_start_quick_timer ** ** Description Start a timer for the specified amount of time. ** NOTE: The timeout resolution depends on including modules. ** QUICK_TIMER_TICKS_PER_SEC should be used to convert from ** time to ticks. ** ** ** Returns void ** *******************************************************************************/ void btu_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout) { BT_HDR *p_msg; /* if timer list is currently empty, start periodic GKI timer */ if (btu_cb.quick_timer_queue.p_first == NULL) { /* script test calls stack API without posting event */ if (GKI_get_taskid() != BTU_TASK) { /* post event to start timer in BTU task */ if ((p_msg = (BT_HDR *)GKI_getbuf(BT_HDR_SIZE)) != NULL) { p_msg->event = BT_EVT_TO_START_QUICK_TIMER; GKI_send_msg (BTU_TASK, TASK_MBOX_0, p_msg); } } else GKI_start_timer(TIMER_2, QUICK_TIMER_TICKS, TRUE); } GKI_remove_from_timer_list (&btu_cb.quick_timer_queue, p_tle); p_tle->event = type; p_tle->ticks = timeout; /* Save the number of ticks for the timer */ GKI_add_to_timer_list (&btu_cb.quick_timer_queue, p_tle); }
/******************************************************************************* ** ** Function btu_start_timer ** ** Description Start a timer for the specified amount of time. ** NOTE: The timeout resolution is in SECONDS! (Even ** though the timer structure field is ticks) ** ** Returns void ** *******************************************************************************/ void btu_start_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout) { BT_HDR *p_msg; /* if timer list is currently empty, start periodic GKI timer */ if (btu_cb.timer_queue.p_first == NULL) { /* if timer starts on other than BTU task */ if (GKI_get_taskid() != BTU_TASK) { /* post event to start timer in BTU task */ if ((p_msg = (BT_HDR *)GKI_getbuf(BT_HDR_SIZE)) != NULL) { p_msg->event = BT_EVT_TO_START_TIMER; GKI_send_msg (BTU_TASK, TASK_MBOX_0, p_msg); } } else { /* Start free running 1 second timer for list management */ GKI_start_timer (TIMER_0, GKI_SECS_TO_TICKS (1), TRUE); } } GKI_remove_from_timer_list (&btu_cb.timer_queue, p_tle); p_tle->event = type; p_tle->ticks = timeout; /* Save the number of seconds for the timer */ GKI_add_to_timer_list (&btu_cb.timer_queue, p_tle); }
/****************************************************************************** ** ** Function data_ind ** ** Description HOST/CONTROLLER LIB CALLOUT API - This function is called ** from the libbt-hci to pass in the received HCI packets ** ** The core stack is responsible for releasing the data buffer ** passed in from the libbt-hci once the core stack has done ** with it. ** ** Bluedroid libbt-hci library uses 'transac' parameter to ** pass data-path buffer/packet across bt_hci_lib interface ** boundary. The 'p_buf' and 'len' parameters are not intended ** to be used here but might point to data portion in data- ** path buffer and length of valid data respectively. ** ** Returns bt_hc_status_t ** ******************************************************************************/ static int data_ind(TRANSAC transac, char *p_buf, int len) { BT_HDR *p_msg = (BT_HDR *) transac; /* APPL_TRACE_DEBUG2("HC data_ind event=0x%04X (len=%d)", p_msg->event, len); */ GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, transac); return BT_HC_STATUS_SUCCESS; }
/******************************************************************************* ** ** Function gap_send_event ** ** Description Send BT_EVT_TO_GAP_MSG event to BTU task ** ** Returns None ** *******************************************************************************/ void gap_send_event (UINT16 gap_handle) { BT_HDR *p_msg; if ((p_msg = (BT_HDR*)GKI_getbuf(BT_HDR_SIZE)) != NULL) { p_msg->event = BT_EVT_TO_GAP_MSG; p_msg->len = 0; p_msg->offset = 0; p_msg->layer_specific = gap_handle; GKI_send_msg(BTU_TASK, BTU_HCI_RCV_MBOX, p_msg); } else { GAP_TRACE_ERROR("Unable to allocate message buffer for event."); } }
/****************************************************************************** ** ** Function tx_result ** ** Description HOST/CONTROLLER LIB CALLBACK API - This function is called ** from the libbt-hci once it has processed/sent the prior data ** buffer which core stack passed to it through transmit_buf ** call earlier. ** ** The core stack is responsible for releasing the data buffer ** if it has been completedly processed. ** ** Bluedroid libbt-hci library uses 'transac' parameter to ** pass data-path buffer/packet across bt_hci_lib interface ** boundary. The 'p_buf' is not intended to be used here ** but might point to data portion in data-path buffer. ** ** Returns bt_hc_status_t ** ******************************************************************************/ static int tx_result(TRANSAC transac, char *p_buf, \ bt_hc_transmit_result_t result) { /* APPL_TRACE_DEBUG2("HC tx_result %d (event=%04X)", result, \ ((BT_HDR *)transac)->event); */ if (result == BT_HC_TX_FRAGMENT) { GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, transac); } else { GKI_freebuf(transac); } return BT_HC_STATUS_SUCCESS; }
void btif_sendmsg(void *p_msg) { GKI_send_msg(BTIF_TASK, BTU_BTIF_MBOX, p_msg); }