Beispiel #1
0
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);        
}
Beispiel #2
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;
        
    }
}
Beispiel #3
0
/**
****************************************************************************************
* @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);
    }
}
Beispiel #4
0
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");
}
Beispiel #5
0
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);
}
}