void pow_profile_exec1(uint32_t sleep_duration) { struct lld_evt_tag *evt = (struct lld_evt_tag *)co_list_pick(&lld_evt_env.evt_prog); dbg_sleep_times[dbg_evt_timer_wr_ptr] = sleep_duration; dbg_sleep_dur_last = sleep_duration; if (dbg_sleep_dur_meas < 10) { dbg_sleep_dur_meas++; dbg_sleep_dur_sum += sleep_duration; } else { dbg_sleep_dur_avg = dbg_sleep_dur_sum / 10; dbg_sleep_dur_sum = 0; dbg_sleep_dur_meas = 0; } do { if (evt == NULL) break; if (evt->prog) break; dbg_evt_times[dbg_evt_timer_wr_ptr] = evt->time; if (sleep_duration > dbg_sleep_dur_avg) dbg_sleep_flag[dbg_evt_timer_wr_ptr] = 0xFF; else dbg_sleep_flag[dbg_evt_timer_wr_ptr] = 0; } while (0); }
/********************************************************************************* *** EVENT_INT ISR ***/ void BLE_EVENT_Handler(void) { // Check BLE interrupt status and call the appropriate handlers //uint32_t irq_stat = ble_intstat_get(); uint32_t irq_stat = GetWord16(BLE_INTSTAT_REG); // End of event interrupt if (irq_stat & BLE_EVENTINTSTAT_BIT) { #if (STREAMDATA_QUEUE) cpt_event=1; #ifdef METRICS { struct lld_evt_tag *evt; evt = (struct lld_evt_tag *)co_list_pick(&lld_evt_env.evt_prog); uint8_t rx_cnt = ble_rxdesccnt_getf(evt->conhdl); // Event has been processed, handle the transmitted and received data measure_errors_received( rx_cnt - evt->rx_cnt); } #endif #endif lld_evt_end_isr(); rwble_last_event = BLE_EVT_END; } }
/** **************************************************************************************** * @brief After-process when one PDU has been sent. * **************************************************************************************** */ void com_tx_done(void) { struct ke_msg * msg; // Clear the event ke_evt_clear(1<<EVENT_UART_TX_ID); // Go back to IDLE state com_env.tx_state = COM_UART_TX_IDLE; //release current message (which was just sent) msg = (struct ke_msg *)co_list_pop_front(&com_env.queue_tx); // Free the kernel message space ke_msg_free(msg); // Check if there is a new message pending for transmission if ((msg = (struct ke_msg *)co_list_pick(&com_env.queue_tx)) != NULL) { // Forward the message to the HCI UART for immediate transmission com_uart_write(msg); } }
void app_tx_done(void) { struct ke_msg * msg; //release current message (which was just sent) msg = (struct ke_msg *)co_list_pop_front(&com_env.queue_rx); // Free the kernel message space ke_msg_free(msg); // Check if there is a new message pending for transmission if ((msg = (struct ke_msg *)co_list_pick(&com_env.queue_rx)) != NULL) { // Forward the message to the HCI UART for immediate transmission QPRINTF("\r\n@@@app_tx_done:"); for (uint8_t i = 0; i<msg->param_len; i++) QPRINTF("%c",((uint8_t *)&msg->param)[i]); QPRINTF("\r\n"); uint8_t *p_data = (uint8_t *)msg->param; uint8_t pack_nb = msg->param_len/QPP_DATA_MAX_LEN + 1; uint8_t pack_divide_len = msg->param_len%QPP_DATA_MAX_LEN; for (uint8_t char_idx = 0,i = 0;((app_qpps_env->char_status & (~(QPPS_VALUE_NTF_CFG << (char_idx - 1)))) && (char_idx < QPPS_VAL_CHAR_NUM));char_idx++) { if (i < (pack_nb - 1)) { app_qpps_env->char_status &= ~(QPPS_VALUE_NTF_CFG << char_idx); app_qpps_data_send(app_qpps_env->conhdl,char_idx,QPP_DATA_MAX_LEN,(uint8_t *)p_data); p_data += QPP_DATA_MAX_LEN; } else { if ((pack_divide_len != 0) && (i == (pack_nb - 1))) { app_qpps_env->char_status &= ~(QPPS_VALUE_NTF_CFG << char_idx); app_qpps_data_send(app_qpps_env->conhdl,char_idx,pack_divide_len,(uint8_t *)p_data); p_data += pack_divide_len; } } i++; } } QPRINTF("app_tx_done\r\n"); }
void measure_errors_received(unsigned char pkts) { uint8_t rx_cnt = pkts; uint8_t rx_hdl = co_buf_rx_current_get(); struct lld_evt_tag *evt; evt = (struct lld_evt_tag *)co_list_pick(&lld_evt_env.evt_prog); ke_task_id_t destid = (evt->conhdl==LLD_ADV_HDL)?TASK_LLM:KE_BUILD_ID(TASK_LLC,evt->conhdl); uint16_t conhdl = KE_IDX_GET(destid); while(rx_cnt--) { struct co_buf_rx_desc *rxdesc = co_buf_rx_get(rx_hdl); unsigned char status = rxdesc->rxstatus & 0x7F; if ((status & (BLE_MIC_ERR_BIT | BLE_CRC_ERR_BIT | BLE_LEN_ERR_BIT | BLE_TYPE_ERR_BIT | BLE_SYNC_ERR_BIT))\ && (llc_env[conhdl]->rssi > llm_get_min_rssi())) { add_err_packet(); } rx_hdl = co_buf_rx_next(rx_hdl); } }