Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(Legacy) develop_FW-866 OpenRadio interface #504

Open
wants to merge 48 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
6ffee84
Initial commit of code compiling and working and synching but not ful…
minarady1 Mar 10, 2020
92a27e9
wrote radio_set_modulation and radio_local_bootstrap
minarady1 Mar 11, 2020
9035323
some updates
minarady1 Mar 12, 2020
9999fe1
open radio working :)
minarady1 Mar 12, 2020
ff29667
some updates, mainly trying to debug
minarady1 Mar 13, 2020
eebd083
updates
minarady1 Mar 13, 2020
133dc1c
radio at86rf files
minarady1 Mar 13, 2020
984444a
Integrating cc2538rf into the open radio interface
minarady1 Mar 19, 2020
9273ca3
using openradio in openwsn
minarady1 Mar 20, 2020
a6468d7
open radio interface finally working and integrated into openwsn
minarady1 Mar 23, 2020
1669b80
full radio set added to openradio
minarady1 Mar 26, 2020
999f50f
Complete open radio interface for openmote-b tested with 7 modulations.
minarady1 Mar 30, 2020
917665d
Restoring default configuration
minarady1 Mar 30, 2020
64006b5
restoring default config
minarady1 Mar 30, 2020
0de94cb
resorting default configurations and removing unnecessary code used f…
minarady1 Mar 30, 2020
185038e
restoring bsp_radio_tx default code
minarady1 Mar 30, 2020
ecc3bd2
restoring sniffer code
minarady1 Mar 30, 2020
56ed0cf
restoring sniffer code
minarady1 Mar 30, 2020
480f1dc
restoring sniffer code
minarady1 Mar 30, 2020
9226da2
restoring bsp_radio_rx code
minarady1 Mar 30, 2020
6dda3e9
A project for demonstrating the open radio interface on openmote-b:
minarady1 Mar 30, 2020
39a1bdc
Merge branch 'develop_FW-866' of https://github.com/minarady1/openwsn…
minarady1 Mar 30, 2020
f0d59e5
openradio interface cleaning in progress
minarady1 Apr 15, 2020
6bae185
modivided slot 40 for FSK and added slot 41 for ofdm1 mcs3
minarady1 Apr 16, 2020
75b7eb1
introduced slot_template instead of slot duration
minarady1 Apr 16, 2020
d2b9c40
cleaneing openradio interface + adding comments + using slot template…
minarady1 Apr 16, 2020
0166d42
comments+cleaning
minarady1 Apr 16, 2020
aa7237b
Merge branch 'develop' into develop_FW-866
minarady1 Apr 16, 2020
2464d80
minor fixes
minarady1 Apr 16, 2020
f23a799
macpong
minarady1 Apr 16, 2020
4882b35
Merge branch 'develop_FW-866' of https://github.com/minarady1/openwsn…
minarady1 Apr 16, 2020
c9f560e
changing slot templates to struct variables instead of #def constants
minarady1 Apr 17, 2020
e5fdab3
slot_duration struct update
minarady1 Apr 17, 2020
4e484f2
adding few helper functions to handle slot info
minarady1 Apr 17, 2020
74ca322
quick update
minarady1 Apr 17, 2020
48f3080
fixed dynamic slot selection + code formatting
minarady1 Apr 21, 2020
6ecca16
Final fixes to the dynamic slot selection at runtime. This feature no…
minarady1 Apr 22, 2020
49d565f
cleaning up code for bsp, projacts, MAC, IAR project files and .gitig…
minarady1 Apr 23, 2020
a506320
Updated radio drivers for python board + at86rf231 board to be compli…
minarady1 Apr 23, 2020
6a8f446
restoring defaults
minarady1 Apr 23, 2020
5e6ca11
FW-866 fixed slot template timing references as per PR comments
minarady1 Apr 24, 2020
ba85ad8
FW-866 merged board_setSlotType (slotType) and slot_board_vars_t boar…
minarady1 Apr 24, 2020
c861218
FW-866 fixing indentation, variable names for openradio + adjusting 2…
minarady1 Apr 24, 2020
5110952
FW-866 restoring tx/rx common project
minarady1 Apr 24, 2020
5538db7
increased testbed bootload timeout
minarady1 May 6, 2020
1a1926b
fw-866
minarady1 Jul 1, 2020
cdf2911
fw-866
minarady1 Aug 5, 2020
e5b34b3
fw-866
minarady1 Aug 5, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
Debug
settings
*.dep
*.ewd
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good

*.ewt
*.bak
*.sfr
*.o
*.exe
Expand All @@ -24,3 +27,5 @@ settings
/projects/telosb/01bsp_uart/path.txt
/projects/telosb/03oos_macpong/path.txt
/projects/telosb/02drv_opentimers/path.txt
/projects/openmote-b/01bsp_openradio_rx/log.txt
/projects/openmote-b/01bsp_radio_tx/asm.s
42 changes: 38 additions & 4 deletions bsp/boards/board.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,50 @@ typedef enum {
KICK_SCHEDULER = 1,
} kick_scheduler_t;

typedef enum {
minarady1 marked this conversation as resolved.
Show resolved Hide resolved
TIME_MS,
TIME_TICS,
} time_type_t;

//=========================== typedef =========================================
typedef struct {
uint16_t PORT_SLOTDURATION;
minarady1 marked this conversation as resolved.
Show resolved Hide resolved
uint16_t PORT_TsSlotDuration;

// execution speed related
// also implementation related (e.g. SoC radio or spi-connected radio because of the time to load a packet to/from radio)
uint16_t PORT_maxTxDataPrepare;
uint16_t PORT_maxRxAckPrepare;
uint16_t PORT_maxRxDataPrepare;
uint16_t PORT_maxTxAckPrepare;

// radio speed related
// also implementation related (because the time to execute the Tx/Rx command is highly dependent on the radio AND the configuration)
uint16_t PORT_delayTx;
uint16_t PORT_delayRx;
} slot_board_vars_t; //board specific slot vars
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks like this is the timeslot template. Suggest renaming to timeslot_template_t

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh no, the timelost template is defined in the ieee154e.h. This struct is strictly for board specific parameters (regardless of which 154e timeslot template is used)


// available slot templates
typedef enum{
SLOT_10ms,
SLOT_20ms_24GHZ,
SLOT_40ms_24GHZ,
SLOT_40ms_FSK_SUBGHZ,
SLOT_40ms_OFDM1MCS0_3_SUBGHZ,
MAX_SLOT_TYPES,
} slotType_t;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand why the slot duration is in the name. Just have 3 timeslot templates, for the 3 radio settings we care about.

// available slot templates
typedef enum{
    TIMESLOT_TEMPLATE_OQPSK_24GHZ,
    TIMESLOT_TEMPLATE_2FSK_SUBGHZ,
    TIMESLOT_TEMPLATE_OFDM_SUBGHZ,
    TIMESLOT_TEMPLATE_MAX
} timeslot_templates_t;

Copy link
Contributor Author

@minarady1 minarady1 Apr 24, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is also a 10ms slot template and 20ms slot template. Thoe former is for python the latter has been classically used for 2.4GHz).
I didn't touch them because they are out of my scope (I can still rempve them, or give them different names if you wish?)


//=========================== variables =======================================

//=========================== prototypes ======================================

void board_init(void);
void board_sleep(void);
void board_reset(void);

void board_init(void);
void board_sleep(void);
void board_reset(void);
void board_init_slot_vars(void);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't understand why this function exists. Remove?

Copy link
Contributor Author

@minarady1 minarady1 Apr 24, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I moved it to the private section, it is necessary to initialize the lookup table for the board_vars relevant to each radioSetting

uint16_t board_getSlotDuration (time_type_t time_type);
void board_setSlotType(slotType_t slot_type);
slot_board_vars_t board_getSlotTemplate (void);
/**
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

those 3 functions should be removed. Replace by board_getTimeslotTemplates.

Copy link
Contributor Author

@minarady1 minarady1 Apr 24, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, so I combined board_setSlotType and board_getSlotTemplate into slot_board_vars_t board_selectSlotTemplate (slotType_t slot_type). I left board_getSlotDuration as is because it is accessed really frequently by the opentimer (and somewhat frequently by rpl) is that alright?

\}
\}
Expand Down
47 changes: 46 additions & 1 deletion bsp/boards/iot-lab_A8-M3/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@
#include "nvic.h"
#include "debugpins.h"

//=========================== variable ========================================
//=========================== variables ============================================

slot_board_vars_t slot_board_vars [MAX_SLOT_TYPES];
slotType_t selected_slot_type;

//=========================== private =========================================

Expand All @@ -25,6 +28,8 @@ void GPIO_Config_ALL_AIN(void);
// configure the hard fault exception
void board_enableHardFaultExceptionHandler(void);



//=========================== main ============================================

extern int mote_main(void);
Expand Down Expand Up @@ -96,8 +101,48 @@ void board_init(void){
debugpins_init();
//enable nvic for the radio
NVIC_radio();

board_init_slot_vars();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't call another function, fill in the structre here.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about having an approach like #504 (comment)? You would need fewer lines of code modifications in every board_info.h, and could have a default for all boards which parameters have not been measured, you could initialize the structure outside of bsp/ as well.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@twatteyne not sure I understand, which structure do you mean?
@fjmolinas well, the general idea that slot selection will be done at runtime and the selection is done at MAC level (and the MAC level will have the default selection) but we can discuss more in the meeting to make sure I understood you correctly! Thanks a lot for your feedback!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@minarady1 I PR'd what I meant to your branch minarady1#1. Did it only for 1 board.

}


//==== bootstrapping slot info lookup table
void board_init_slot_vars(void){

// 20ms slot
slot_board_vars [SLOT_20ms_24GHZ].PORT_SLOTDURATION = 20 ; // ms
slot_board_vars [SLOT_20ms_24GHZ].PORT_TsSlotDuration = 655 ; // 20ms
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxTxDataPrepare = 110 ; // 3355us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxRxAckPrepare = 20 ; // 610us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxRxDataPrepare = 33 ; // 1000us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxTxAckPrepare = 50 ; // 1525us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_delayTx = 18 ; // 549us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_delayRx = 0 ; // 0us (can not measure)
}

// To get the current slotDuration at any time
// used during initialization by sixtop to fire the first sixtop EB
uint16_t board_getSlotDuration (time_type_t time_type)
{
if (time_type == TIME_MS)
minarady1 marked this conversation as resolved.
Show resolved Hide resolved
return slot_board_vars [selected_slot_type].PORT_SLOTDURATION;
minarady1 marked this conversation as resolved.
Show resolved Hide resolved
else
return slot_board_vars [selected_slot_type].PORT_TsSlotDuration;
}

// Getter function for slot_board_vars
slot_board_vars_t board_getSlotTemplate (void)
{
return slot_board_vars [selected_slot_type];
}

// Getter function for selected_slot_type
void board_setSlotType(slotType_t slot_type)
{
selected_slot_type = slot_type;
}


void board_sleep(void) {
DBGMCU_Config(DBGMCU_STOP, ENABLE);
// Enable PWR and BKP clock
Expand Down
17 changes: 0 additions & 17 deletions bsp/boards/iot-lab_A8-M3/board_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,23 +50,6 @@ to return the board's description.
#define PORT_PIN_RADIO_RESET_HIGH() //GPIOC->ODR |= 0X0040;// nothing
#define PORT_PIN_RADIO_RESET_LOW() //GPIOC->ODR &= ~0X0040;// nothing

//===== IEEE802154E timing

#define SLOTDURATION 20 // in miliseconds

// time-slot related
#define PORT_TsSlotDuration 655 // 20ms

// execution speed related
#define PORT_maxTxDataPrepare 110 // 3355us (not measured)
#define PORT_maxRxAckPrepare 20 // 610us (not measured)
#define PORT_maxRxDataPrepare 33 // 1000us (not measured)
#define PORT_maxTxAckPrepare 50 // 1525us (not measured)

// radio speed related
#define PORT_delayTx 18 // 549us (not measured)
#define PORT_delayRx 0 // 0us (can not measure)
// radio watchdog

//===== adaptive_sync accuracy

Expand Down
44 changes: 44 additions & 0 deletions bsp/boards/iot-lab_M3/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@
#include "gpio.h"
#include "cryptoengine.h"


//=========================== variables ============================================
minarady1 marked this conversation as resolved.
Show resolved Hide resolved
slot_board_vars_t slot_board_vars [MAX_SLOT_TYPES];
slotType_t selected_slot_type;

//=========================== main ============================================

extern int mote_main(void);
Expand Down Expand Up @@ -93,8 +98,47 @@ void board_init(void)
//enable nvic for the radio
NVIC_radio();
cryptoengine_init();
board_init_slot_vars();
}


//==== bootstrapping slot info lookup table
void board_init_slot_vars(void){

// 20ms slot
slot_board_vars [SLOT_20ms_24GHZ].PORT_SLOTDURATION = 20 ; // ms
slot_board_vars [SLOT_20ms_24GHZ].PORT_TsSlotDuration = 655 ; // 20ms
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxTxDataPrepare = 110 ; // 3355us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxRxAckPrepare = 20 ; // 610us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxRxDataPrepare = 33 ; // 1000us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxTxAckPrepare = 50 ; // 1525us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_delayTx = 18 ; // 549us (not measured)
slot_board_vars [SLOT_20ms_24GHZ].PORT_delayRx = 0 ; // 0us (can not measure)
}

// To get the current slotDuration at any time
// used during initialization by sixtop to fire the first sixtop EB
uint16_t board_getSlotDuration (time_type_t time_type)
{
if (time_type == TIME_MS)
minarady1 marked this conversation as resolved.
Show resolved Hide resolved
return slot_board_vars [selected_slot_type].PORT_SLOTDURATION;
else
return slot_board_vars [selected_slot_type].PORT_TsSlotDuration;
}

// Getter function for slot_board_vars
slot_board_vars_t board_getSlotTemplate (void)
{
minarady1 marked this conversation as resolved.
Show resolved Hide resolved
return slot_board_vars [selected_slot_type];
}

// Getter function for selected_slot_type
void board_setSlotType(slotType_t slot_type)
{
minarady1 marked this conversation as resolved.
Show resolved Hide resolved
selected_slot_type = slot_type;
}


void board_sleep(void) {
DBGMCU_Config(DBGMCU_STOP, ENABLE);
// Enable PWR and BKP clock
Expand Down
17 changes: 0 additions & 17 deletions bsp/boards/iot-lab_M3/board_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,23 +49,6 @@ to return the board's description.
#define PORT_PIN_RADIO_RESET_LOW() //GPIOC->ODR &= ~0X0040;// nothing
//#define PORT_PIN_RADIO_RESET_LOW() GPIOC->ODR &= ~(1<<1);

//===== IEEE802154E timing

#define SLOTDURATION 20 // in miliseconds

// time-slot related
#define PORT_TsSlotDuration 655 // 20ms

// execution speed related
#define PORT_maxTxDataPrepare 110 // 3355us (not measured)
#define PORT_maxRxAckPrepare 20 // 610us (not measured)
#define PORT_maxRxDataPrepare 33 // 1000us (not measured)
#define PORT_maxTxAckPrepare 50 // 1525us (not measured)

// radio speed related
#define PORT_delayTx 18 // 549us (not measured)
#define PORT_delayRx 0 // 0us (can not measure)
// radio watchdog

//===== adaptive_sync accuracy

Expand Down
56 changes: 55 additions & 1 deletion bsp/boards/openmote-b-24ghz/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@
#define BSP_BUTTON_BASE ( GPIO_D_BASE )
#define BSP_BUTTON_USER ( GPIO_PIN_5 )

//=========================== variables ============================================
slot_board_vars_t slot_board_vars [MAX_SLOT_TYPES];
slotType_t selected_slot_type;


//=========================== prototypes ======================================

void board_timer_init(void);
Expand Down Expand Up @@ -73,11 +78,60 @@ void board_init(void) {
uart_init();
radio_init();
i2c_init();

board_init_slot_vars();
// sensors_init();
cryptoengine_init();
}

//==== bootstrapping slot info lookup table
void board_init_slot_vars(void){
//10ms slot
slot_board_vars [SLOT_10ms].PORT_SLOTDURATION = 10 ; // ms
slot_board_vars [SLOT_10ms].PORT_TsSlotDuration = 328 ; // counter counts one extra count, see datasheet
slot_board_vars [SLOT_10ms].PORT_maxTxDataPrepare = 10 ; // 305us (measured 82us)
slot_board_vars [SLOT_10ms].PORT_maxRxAckPrepare = 10 ; // 305us (measured 83us)
slot_board_vars [SLOT_10ms].PORT_maxRxDataPrepare = 4 ; // 122us (measured 22us)
slot_board_vars [SLOT_10ms].PORT_maxTxAckPrepare = 10 ; // 122us (measured 94us)
#ifdef L2_SECURITY_ACTIVE
slot_board_vars [SLOT_10ms].PORT_delayTx = 14 ; // 366us (measured xxxus)
#else
slot_board_vars [SLOT_10ms].PORT_delayTx = 12 ; // 366us (measured xxxus)
#endif
slot_board_vars [SLOT_10ms].PORT_delayRx = 0 ; // 0us (can not measure)

// 20ms slot
slot_board_vars [SLOT_20ms_24GHZ].PORT_SLOTDURATION = 20 ; // ms
slot_board_vars [SLOT_20ms_24GHZ].PORT_TsSlotDuration = 655 ; // 20ms
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxTxDataPrepare = 15 ; // 457us (based on measurement)
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxRxAckPrepare = 10 ; // 305us (based on measurement)
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxRxDataPrepare = 10 ; // 305us (based on measurement)
slot_board_vars [SLOT_20ms_24GHZ].PORT_maxTxAckPrepare = 15 ; // 457us (based on measurement)
slot_board_vars [SLOT_20ms_24GHZ].PORT_delayTx = 13 ; // 396us (based on measurement)
slot_board_vars [SLOT_20ms_24GHZ].PORT_delayRx = 0 ; // 0us (can not measure)
}

// To get the current slotDuration at any time
// used during initialization by sixtop to fire the first sixtop EB
uint16_t board_getSlotDuration (time_type_t time_type)
{
if (time_type == TIME_MS)
return slot_board_vars [selected_slot_type].PORT_SLOTDURATION;
else
return slot_board_vars [selected_slot_type].PORT_TsSlotDuration;
}

// Getter function for slot_board_vars
slot_board_vars_t board_getSlotTemplate (void)
{
return slot_board_vars [selected_slot_type];
}

// Getter function for selected_slot_type
void board_setSlotType(slotType_t slot_type)
{
selected_slot_type = slot_type;
}

void antenna_init(void) {
/* Configure GPIO as output */
GPIOPinTypeGPIOOutput(BSP_ANTENNA_BASE, BSP_ANTENNA_CC2538_24GHZ);
Expand Down
36 changes: 0 additions & 36 deletions bsp/boards/openmote-b-24ghz/board_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,42 +58,6 @@
#define PORT_PIN_RADIO_RESET_HIGH() // nothing
#define PORT_PIN_RADIO_RESET_LOW() // nothing

#define SLOTDURATION 20 // in miliseconds

//===== IEEE802154E timing

#if SLOTDURATION==10
// time-slot related
#define PORT_TsSlotDuration 328 // counter counts one extra count, see datasheet
// execution speed related
#define PORT_maxTxDataPrepare 10 // 305us (measured 82us)
#define PORT_maxRxAckPrepare 10 // 305us (measured 83us)
#define PORT_maxRxDataPrepare 4 // 122us (measured 22us)
#define PORT_maxTxAckPrepare 10 // 122us (measured 94us)
// radio speed related
#ifdef L2_SECURITY_ACTIVE
#define PORT_delayTx 14 // 366us (measured xxxus)
#else
#define PORT_delayTx 12 // 366us (measured xxxus)
#endif
#define PORT_delayRx 0 // 0us (can not measure)
// radio watchdog
#endif

#if SLOTDURATION==20
#define PORT_TsSlotDuration 655 // 20ms

// execution speed related
#define PORT_maxTxDataPrepare 15 // 458us (measured 213us)
#define PORT_maxRxAckPrepare 10 // 305us (measured 86us)
#define PORT_maxRxDataPrepare 10 // 305us (measured 88us)
#define PORT_maxTxAckPrepare 15 // 458us (measured 211us)

// radio speed related
#define PORT_delayTx 13 // 397us (measured 388us)
#define PORT_delayRx 0 // 0us (can not measure)
#endif

//===== adaptive_sync accuracy

#define SYNC_ACCURACY 1 // ticks
Expand Down
10 changes: 9 additions & 1 deletion bsp/boards/openmote-b-24ghz/radio.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ typedef struct {

radio_vars_t radio_vars;

// global radio selection, will use RADIOSETTING_24GHZ by default at initialization.
uint8_t SELECTED_RADIO = RADIOSETTING_24GHZ;
minarady1 marked this conversation as resolved.
Show resolved Hide resolved
//=========================== prototypes ======================================

void enable_radio_interrupts(void);
Expand Down Expand Up @@ -181,7 +183,13 @@ void radio_reset(void) {

//===== RF admin

void radio_setFrequency(uint8_t frequency, radio_freq_t tx_or_rx) {
void radio_setConfig (radioSetting_t selected_radio){
SELECTED_RADIO = selected_radio;
//do nothing
}


void radio_setFrequency(uint16_t frequency, radio_freq_t tx_or_rx) {

// change state
radio_vars.state = RADIOSTATE_SETTING_FREQUENCY;
Expand Down
Loading