Microchip® Advanced Software Framework

per_mode_initiator.c File Reference

Initiator/Transmitter functionalities in PER Measurement mode - Performance Analyzer application for AT86RF215 This is the source code of a Packet Error Rate Measurement mode as Initiator.

Copyright (c) 2015-2018 Microchip Technology Inc. and its subsidiaries.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include "app_init.h"
#include "tfa.h"
#include "tal_internal.h"
#include "tal_helper_2.h"
#include "tal_pib.h"
#include "app_frame_format.h"
#include "sio2host.h"
#include "sio2ncp.h"
#include "perf_api.h"
#include "conf_board.h"
#include "user_interface.h"

Data Structures

struct  set_param_cb_t
 Structure used for updating the parameters after sending them to peer. More...
 

Macros

#define BIT_COUNT   (32)
 
#define CONTINUOUS_TX_MODE   (0x07)
 
#define CRC_SET_REQ_WAIT   (0x0A)
 
#define CRC_STATUS_REQ_WAIT   (0x09)
 
#define DEFAULT_FRAME_LENGTH   (20)
 
#define DEFAULT_NO_OF_TEST_FRAMES   (100)
 
#define DISCONNECT_PEER   (0x0C)
 
#define IDENTIFY_PEER   (0x08)
 
#define INVALID_VALUE   (0xff)
 
#define MAX_REG_ADDRESS   (0x3ffe)
 
#define MAX_SCAN_DURATION   (14)
 
#define MICRO_SEC_MULTIPLIER   (1.0 / 1000000)
 
#define MILLI_VOLT_MULTIPLIER   (1.0 / 1000)
 
#define MIN_REG_ADDRESS   (0x0000)
 
#define NO_OF_REGISTERS   (256)
 
#define NO_RX_DESENSITIZE_LEVEL   (0x00)
 
#define PEER_INFO_RSP_WAIT   (0x0B)
 
#define PER_TEST_START   (0x0E)
 
#define PULSE_CW_TX_TIME_IN_MICRO_SEC   (50000)
 
#define RANGE_TEST_START   (0x0F)
 
#define RANGE_TEST_STOP   (0x11)
 
#define RANGE_TEST_TX   (0x10)
 
#define RANGE_TST_PKT_SEQ_POS   (11)
 
#define RANGE_TX_BEACON_INTERVAL   (3000000)
 
#define RANGE_TX_BEACON_START_INTERVAL   (100000)
 
#define RX_DESENSITIZE_LEVEL   (0x08)
 
#define SET_DEFAULT_CONFIG_PEER   (0x0D)
 
#define SET_PARAMETER   (0x04)
 
#define TEST_FRAMES_SENT   (0x02)
 
#define TIMEOUT_FOR_RES_IN_MICRO_SEC_FOR_LDR   (500000)
 
#define TIMEOUT_FOR_RESPONSE_IN_MICRO_SEC   (2000000)
 
#define TIMEOUT_FOR_RESULT_RES_IN_MICRO_SEC   (300000)
 
#define TRX_RESET   (0)
 
#define TX_OP_MODE   (0x01)
 
#define WAIT_FOR_TEST_RES   (0x03)
 

Functions

static float calculate_net_data_rate (trx_id_t trx, float per_test_duration_sec)
 Function to calculate net data rate for the current PER test. More...
 
static float calculate_time_duration (trx_id_t trx)
 Function to Calculate the time taken for PER Test. More...
 
uint8_t check_error_conditions (trx_id_t trx)
 Function to check the error conditions before. More...
 
static void config_ack_request (trx_id_t trx, bool config_value)
 To set or reset ACK request value. More...
 
static void config_crc_peer_node (trx_id_t trx, bool config_value)
 To configure CRC settings on peer node. More...
 
static void config_csma (trx_id_t trx, bool config_value)
 To configure CSMA Setting in the transceiver. More...
 
static void config_frame_retry (trx_id_t trx, bool config_value)
 To configure frame retry Setting. More...
 
static void config_per_test_parameters (trx_id_t trx)
 Function to set trx configure parameters. More...
 
static void config_rx_desensitization (trx_id_t trx, bool config_value)
 To configure rx desensitization level in the transceiver. More...
 
static void configure_frame_sending (trx_id_t trx)
 To Configure the frame sending. More...
 
static void configure_range_test_frame_sending (trx_id_t trx)
 To Configure the frame sending. More...
 
void disconnect_peer_node (trx_id_t trx)
 Function to request the peer to get disconnected from source node. More...
 
void dump_trx_register_values (trx_id_t trx, uint16_t start_reg_addr, uint16_t end_reg_addr)
 Read a set of registers. More...
 
 FLASH_DECLARE (uint8_t perf_config_param_size[])
 
void get_board_details (trx_id_t trx)
 prints the hardware details More...
 
static void get_crc_settings_peer_node (trx_id_t trx)
 Function used to query CRC settings in remote node. More...
 
void get_current_configuration (trx_id_t trx)
 To Get the updated/latest values of all configurable parameters on source and peer node. More...
 
uint8_t get_param_length (uint8_t parameter_type)
 
void get_sensor_data (trx_id_t trx)
 To get the Sensor data like Battery voltage. More...
 
void identify_peer_node (trx_id_t trx)
 Identifying peer node. More...
 
void initiate_per_test (trx_id_t trx)
 Initiates the test procedure. More...
 
void initiate_range_test (trx_id_t trx)
 Initiates the Range test procedure. More...
 
void per_mode_initiator_ed_end_cb (trx_id_t trx, uint8_t energy_level)
 User call back function after ED Scan completion. More...
 
void per_mode_initiator_init (trx_id_t trx, void *parameter)
 Initialize the application in PER Measurement mode as Initiator. More...
 
void per_mode_initiator_rx_cb (trx_id_t trx, frame_info_t *frame)
 Callback that is called if data has been received by trx in the PER_FOUND_PER_INITIATOR state. More...
 
void per_mode_initiator_task (trx_id_t trx)
 Application task for PER Measurement mode as initiator. More...
 
void per_mode_initiator_tx_done_cb (trx_id_t trx, retval_t status, frame_info_t *frame)
 Callback that is called once tx is done in the PER_FOUND_PER_INITIATOR state . More...
 
void perf_get_req (trx_id_t trx, uint8_t param_type_data)
 Function to get the various configuration parameters for PER Test. More...
 
void perf_set_req (trx_id_t trx, uint8_t set_param_type, param_value_t *param_value)
 
More...
 
void perf_set_sun_page (trx_id_t trx, uint8_t *param_val)
 
More...
 
void pulse_cw_transmission (trx_id_t trx)
 
static void range_test_timer_handler_rf09_cb (void *parameter)
 This function is called periodically by the range test timer to initiate the transmission of range test packets to the receptor. More...
 
static void range_test_timer_handler_rf24_cb (void *parameter)
 This function is called periodically by the range test timer to initiate the transmission of range test packets to the receptor. More...
 
void read_trx_registers (trx_id_t trx, uint16_t reg_addr)
 Read transceiver register. More...
 
static void recover_all_settings (trx_id_t trx)
 Recover all user settings before Start of CW transmission. More...
 
static void save_all_settings (trx_id_t trx)
 Save all user settings before Start of CW transmission. More...
 
static bool send_crc_set_req (trx_id_t trx, crc_set_req_t crc_msg)
 Function used to change CRC settings on peer node. More...
 
static bool send_crc_status_req (trx_id_t trx)
 Function used to send crc status request to get CRC settings on the peer node. More...
 
static bool send_disconnect_command (trx_id_t trx)
 Function used to send disconnect peer node command. More...
 
static bool send_identify_command (trx_id_t trx)
 Function used to send identify peer node command. More...
 
static void send_parameters_changed (trx_id_t trx, uint8_t param, uint16_t val)
 Function to send the parameters which has been updated to the receptor node. More...
 
static bool send_peer_info_req (trx_id_t trx)
 Function to configure and send the peer node info request. More...
 
static bool send_per_test_start_cmd (trx_id_t trx)
 
static bool send_range_test_marker_rsp (trx_id_t trx)
 Function to send the response packet for the marker sent from the receptor. More...
 
static bool send_range_test_start_cmd (trx_id_t trx)
 Function to send the range test start command to the receptor to start the mode in the receptor. More...
 
static bool send_range_test_stop_cmd (trx_id_t trx)
 Function to send the range test stop command to the receptor to stop the mode in the receptor. More...
 
static bool send_result_req (trx_id_t trx)
 Function used to request PER test result. More...
 
static bool send_set_default_config_command (trx_id_t trx)
 Function used to send set default config peer command. More...
 
static void send_sun_page_changed (trx_id_t trx)
 
static void set_channel_app (trx_id_t trx, uint16_t channel)
 To set the Channel. More...
 
static void set_channel_page (trx_id_t trx, uint8_t channel_page)
 To set the Channel Page. More...
 
void set_default_configuration (trx_id_t trx)
 To set the default values of all configurable parameters on source and peer node. More...
 
static void set_parameter_on_transmitter_node (trx_id_t trx, retval_t status)
 Set the parameters like channel,tx power etc on transmitter node. More...
 
static void set_phy_frame_length (trx_id_t trx, uint16_t frame_len)
 To set PER Test frame length. More...
 
static void set_transceiver_state (trx_id_t trx, uint8_t transceiver_state)
 Set Transceiver state as per the state given. More...
 
static void set_tx_power (trx_id_t trx, uint8_t tx_power_format, int8_t power_value)
 To set the Tx power of the Transceiver. More...
 
void start_cw_transmission (trx_id_t trx, uint8_t tx_mode)
 
void start_ed_scan (trx_id_t trx, uint8_t ed_scan_duration, uint32_t channel_sel_mask)
 To start the ED scan. More...
 
static void start_range_test (trx_id_t trx)
 
static void start_test (trx_id_t trx)
 
void stop_cw_transmission (trx_id_t trx, uint8_t tx_mode)
 
static void stop_pulse_cb (void *callback_parameter)
 Stop sending a CW signal on current channel page. More...
 
void stop_range_test (trx_id_t trx)
 Function to Stop the range Test in PER Mode. More...
 
static void toggle_trx_sleep (trx_id_t trx)
 To toggle between sleep /deep state. More...
 
static void wait_for_reply_timer_handler_cb (void *parameter)
 Wait for reply timer handler is called if any command sent on air times out before any response message is received. More...
 
void write_trx_registers (trx_id_t trx, uint16_t reg_addr, uint8_t reg_val)
 write Transceiver registers More...
 

Variables

static uint16_t channel_before_scan [NUM_TRX]
 
trx_config_params_t curr_trx_config_params [NUM_TRX]
 
trx_config_params_t default_trx_config_params [NUM_TRX]
 
static uint32_t end_time [NUM_TRX]
 
static uint32_t frame_access_failure [NUM_TRX]
 
static uint32_t frame_failure [NUM_TRX]
 
static uint32_t frame_no_ack [NUM_TRX]
 
static uint32_t frames_to_transmit [NUM_TRX]
 
static uint32_t fw_feature_mask = 0
 This is variable is to keep track of the specific features supported. More...
 
static uint8_t last_tx_power_format_set [NUM_TRX]
 
static uint16_t no_of_roll_overs [NUM_TRX]
 
static uint8_t num_channels [NUM_TRX]
 
static uint8_t op_mode [NUM_TRX] = {TX_OP_MODE, TX_OP_MODE}
 
static bool peer_found [NUM_TRX] = {false, false}
 
static uint32_t range_test_frame_cnt [NUM_TRX] = {0, 0}
 
static bool range_test_in_progress [NUM_TRX] = {false, false}
 
static uint32_t restart_time [NUM_TRX]
 
static uint32_t scan_channel_mask [NUM_TRX]
 
static uint8_t scan_duration [NUM_TRX]
 
static bool scanning [NUM_TRX] = {false, false}
 
static uint8_t seq_num_initiator [NUM_TRX]
 
static set_param_cb_t set_param_cb [NUM_TRX]
 
static uint32_t start_time [NUM_TRX]
 
sun_phy_t sun_page [NUM_TRX]
 
static uint8_t * sun_page_param_val [NUM_TRX]
 
phy_t sun_phy_page_set [NUM_TRX]
 
static bool trx_sleep_status [NUM_TRX] = {false, false}