From bd42083376da1c101ea7ad7343c2595c5bc2238f Mon Sep 17 00:00:00 2001 From: Brian Webb Date: Sat, 20 Oct 2012 18:02:49 -0400 Subject: [PATCH] RFM22B: Changed the way the frequencies and power settings are set for the rfm22b device. --- .../Modules/RadioComBridge/RadioComBridge.c | 35 +++++ flight/PiOS/Common/pios_rfm22b.c | 137 ++++++++++-------- flight/PiOS/inc/pios_rfm22b.h | 6 +- flight/PiOS/inc/pios_rfm22b_priv.h | 26 +++- flight/PipXtreme/System/pios_board.c | 32 ---- .../board_hw_defs/pipxtreme/board_hw_defs.c | 5 - flight/board_hw_defs/revomini/board_hw_defs.c | 10 -- .../plugins/config/configpipxtremewidget.cpp | 3 +- .../src/plugins/config/pipxtreme.ui | 60 +++++++- shared/uavobjectdefinition/oplinksettings.xml | 3 +- 10 files changed, 190 insertions(+), 127 deletions(-) diff --git a/flight/Modules/RadioComBridge/RadioComBridge.c b/flight/Modules/RadioComBridge/RadioComBridge.c index ba246d44e..aff437525 100644 --- a/flight/Modules/RadioComBridge/RadioComBridge.c +++ b/flight/Modules/RadioComBridge/RadioComBridge.c @@ -501,4 +501,39 @@ static void updateSettings() if (PIOS_COM_TELEMETRY) PIOS_COM_ChangeBaud(PIOS_COM_TELEMETRY, 115200); break; } + + // Set the frequencies. + PIOS_RFM22B_SetFrequencyRange(pios_rfm22b_id, oplinkSettings.MinFrequency, oplinkSettings.MaxFrequency); + + // Set the maximum radio RF power. + switch (oplinkSettings.MaxRFPower) + { + case OPLINKSETTINGS_MAXRFPOWER_125: + PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_0); + break; + case OPLINKSETTINGS_MAXRFPOWER_16: + PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_1); + break; + case OPLINKSETTINGS_MAXRFPOWER_316: + PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_2); + break; + case OPLINKSETTINGS_MAXRFPOWER_63: + PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_3); + break; + case OPLINKSETTINGS_MAXRFPOWER_126: + PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_4); + break; + case OPLINKSETTINGS_MAXRFPOWER_25: + PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_5); + break; + case OPLINKSETTINGS_MAXRFPOWER_50: + PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_6); + break; + case OPLINKSETTINGS_MAXRFPOWER_100: + PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_7); + break; + } + + // Set the radio destination ID. + PIOS_RFM22B_SetDestinationId(pios_rfm22b_id, oplinkSettings.PairID); } diff --git a/flight/PiOS/Common/pios_rfm22b.c b/flight/PiOS/Common/pios_rfm22b.c index c5eea5941..565414053 100644 --- a/flight/PiOS/Common/pios_rfm22b.c +++ b/flight/PiOS/Common/pios_rfm22b.c @@ -63,6 +63,10 @@ #define EVENT_QUEUE_SIZE 5 #define PACKET_QUEUE_SIZE 3 #define RFM22B_DEFAULT_RX_DATARATE RFM22_datarate_64000 +#define RFM22B_DEFAULT_FREQUENCY 434000000 +#define RFM22B_DEFAULT_MIN_FREQUENCY (RFM22B_DEFAULT_FREQUENCY - 2000000) +#define RFM22B_DEFAULT_MAX_FREQUENCY (RFM22B_DEFAULT_FREQUENCY + 2000000) +#define RFM22B_DEFAULT_TX_POWER RFM22_tx_pwr_txpow_7 // The maximum amount of time without activity before initiating a reset. #define PIOS_RFM22B_SUPERVISOR_TIMEOUT 100 // ms @@ -160,6 +164,7 @@ static enum pios_rfm22b_event rfm22_detectPreamble(struct pios_rfm22b_dev *rfm22 static enum pios_rfm22b_event rfm22_detectSync(struct pios_rfm22b_dev *rfm22b_dev); static enum pios_rfm22b_event rfm22_rxData(struct pios_rfm22b_dev *rfm22b_dev); static enum pios_rfm22b_event rfm22_receiveStatus(struct pios_rfm22b_dev *rfm22b_dev); +static enum pios_rfm22b_event rfm22_requestConnection(struct pios_rfm22b_dev *rfm22b_dev); static enum pios_rfm22b_event rfm22_acceptConnection(struct pios_rfm22b_dev *rfm22b_dev); static enum pios_rfm22b_event rfm22_connectionAccepted(struct pios_rfm22b_dev *rfm22b_dev); static enum pios_rfm22b_event rfm22_connectionDeclined(struct pios_rfm22b_dev *rfm22b_dev); @@ -172,6 +177,7 @@ static enum pios_rfm22b_event rfm22_fatal_error(struct pios_rfm22b_dev *rfm22b_d static bool rfm22_sendStatus(struct pios_rfm22b_dev *rfm22b_dev); static void rfm22b_add_rx_status(struct pios_rfm22b_dev *rfm22b_dev, enum pios_rfm22b_rx_packet_status status); static bool rfm22_receivePacket(struct pios_rfm22b_dev *rfm22b_dev, PHPacketHandle p, uint16_t rx_len); +static void rfm22_setNominalCarrierFrequency(struct pios_rfm22b_dev *rfm22b_dev, uint32_t frequency_hz); // SPI read/write functions static void rfm22_assertCs(); @@ -194,11 +200,48 @@ const static struct pios_rfm22b_transition rfm22b_transitions[RFM22B_STATE_NUM_S [RFM22B_STATE_INITIALIZING] = { .entry_fn = rfm22_init, .next_state = { + //[RFM22B_EVENT_INITIALIZED] = RFM22B_STATE_REQUESTING_CONNECTION, [RFM22B_EVENT_INITIALIZED] = RFM22B_STATE_TX_START, [RFM22B_EVENT_ERROR] = RFM22B_STATE_ERROR, [RFM22B_EVENT_FATAL_ERROR] = RFM22B_STATE_FATAL_ERROR, }, }, + [RFM22B_STATE_REQUESTING_CONNECTION] = { + .entry_fn = rfm22_requestConnection, + .next_state = { + [RFM22B_EVENT_REQUESTED_CONNECTION] = RFM22B_STATE_TX_START, + [RFM22B_EVENT_TIMEOUT] = RFM22B_STATE_TIMEOUT, + [RFM22B_EVENT_ERROR] = RFM22B_STATE_ERROR, + [RFM22B_EVENT_FATAL_ERROR] = RFM22B_STATE_FATAL_ERROR, + }, + }, + [RFM22B_STATE_ACCEPTING_CONNECTION] = { + .entry_fn = rfm22_acceptConnection, + .next_state = { + [RFM22B_EVENT_RX_COMPLETE] = RFM22B_STATE_TX_START, + [RFM22B_EVENT_TIMEOUT] = RFM22B_STATE_TIMEOUT, + [RFM22B_EVENT_ERROR] = RFM22B_STATE_ERROR, + [RFM22B_EVENT_FATAL_ERROR] = RFM22B_STATE_FATAL_ERROR, + }, + }, + [RFM22B_STATE_CONNECTION_ACCEPTED] = { + .entry_fn = rfm22_connectionAccepted, + .next_state = { + [RFM22B_EVENT_RX_COMPLETE] = RFM22B_STATE_TX_START, + [RFM22B_EVENT_TIMEOUT] = RFM22B_STATE_TIMEOUT, + [RFM22B_EVENT_ERROR] = RFM22B_STATE_ERROR, + [RFM22B_EVENT_FATAL_ERROR] = RFM22B_STATE_FATAL_ERROR, + }, + }, + [RFM22B_STATE_CONNECTION_DECLINED] = { + .entry_fn = rfm22_connectionDeclined, + .next_state = { + [RFM22B_EVENT_RX_COMPLETE] = RFM22B_STATE_TX_START, + [RFM22B_EVENT_TIMEOUT] = RFM22B_STATE_TIMEOUT, + [RFM22B_EVENT_ERROR] = RFM22B_STATE_ERROR, + [RFM22B_EVENT_FATAL_ERROR] = RFM22B_STATE_FATAL_ERROR, + }, + }, [RFM22B_STATE_RX_MODE] = { .entry_fn = rfm22_setRxMode, .next_state = { @@ -256,33 +299,6 @@ const static struct pios_rfm22b_transition rfm22b_transitions[RFM22B_STATE_NUM_S [RFM22B_EVENT_FATAL_ERROR] = RFM22B_STATE_FATAL_ERROR, }, }, - [RFM22B_STATE_ACCEPTING_CONNECTION] = { - .entry_fn = rfm22_acceptConnection, - .next_state = { - [RFM22B_EVENT_RX_COMPLETE] = RFM22B_STATE_TX_START, - [RFM22B_EVENT_TIMEOUT] = RFM22B_STATE_TIMEOUT, - [RFM22B_EVENT_ERROR] = RFM22B_STATE_ERROR, - [RFM22B_EVENT_FATAL_ERROR] = RFM22B_STATE_FATAL_ERROR, - }, - }, - [RFM22B_STATE_CONNECTION_ACCEPTED] = { - .entry_fn = rfm22_connectionAccepted, - .next_state = { - [RFM22B_EVENT_RX_COMPLETE] = RFM22B_STATE_TX_START, - [RFM22B_EVENT_TIMEOUT] = RFM22B_STATE_TIMEOUT, - [RFM22B_EVENT_ERROR] = RFM22B_STATE_ERROR, - [RFM22B_EVENT_FATAL_ERROR] = RFM22B_STATE_FATAL_ERROR, - }, - }, - [RFM22B_STATE_CONNECTION_DECLINED] = { - .entry_fn = rfm22_connectionDeclined, - .next_state = { - [RFM22B_EVENT_RX_COMPLETE] = RFM22B_STATE_TX_START, - [RFM22B_EVENT_TIMEOUT] = RFM22B_STATE_TIMEOUT, - [RFM22B_EVENT_ERROR] = RFM22B_STATE_ERROR, - [RFM22B_EVENT_FATAL_ERROR] = RFM22B_STATE_FATAL_ERROR, - }, - }, [RFM22B_STATE_TX_START] = { .entry_fn = rfm22_txStart, .next_state = { @@ -480,6 +496,8 @@ int32_t PIOS_RFM22B_Init(uint32_t *rfm22b_id, uint32_t spi_id, uint32_t slave_nu rfm22b_dev->stats.timeouts = 0; rfm22b_dev->stats.link_quality = 0; rfm22b_dev->stats.rssi = 0; + rfm22b_dev->tx_power = RFM22B_DEFAULT_TX_POWER; + rfm22b_dev->destination_id = 0xffffffff; // Bind the configuration to the device instance rfm22b_dev->cfg = *cfg; @@ -505,9 +523,6 @@ int32_t PIOS_RFM22B_Init(uint32_t *rfm22b_id, uint32_t spi_id, uint32_t slave_nu // Create the packet queue. rfm22b_dev->packetQueue = xQueueCreate(PACKET_QUEUE_SIZE, sizeof(PHPacketHandle)); - // Initialize the max tx power level. - PIOS_RFM22B_SetTxPower(*rfm22b_id, cfg->maxTxPower); - // Create our (hopefully) unique 32 bit id from the processor serial number. uint8_t crcs[] = { 0, 0, 0, 0 }; { @@ -595,6 +610,11 @@ uint32_t PIOS_RFM22B_DeviceID(uint32_t rfm22b_id) return 0; } +/** + * Sets the radio device transmit power. + * \param[in] rfm22b_id The RFM22B device index. + * \param[in] tx_pwr The transmit power. + */ void PIOS_RFM22B_SetTxPower(uint32_t rfm22b_id, enum rfm22b_tx_power tx_pwr) { struct pios_rfm22b_dev *rfm22b_dev = (struct pios_rfm22b_dev *)rfm22b_id; @@ -603,6 +623,22 @@ void PIOS_RFM22B_SetTxPower(uint32_t rfm22b_id, enum rfm22b_tx_power tx_pwr) rfm22b_dev->tx_power = tx_pwr; } +/** + * Sets the radio frequency range and value. + * \param[in] rfm22b_id The RFM22B device index. + * \param[in] min_frequency The minimum frequency. + * \param[in] max_frequency The maximum frequency. + */ +void PIOS_RFM22B_SetFrequencyRange(uint32_t rfm22b_id, uint32_t min_frequency, uint32_t max_frequency) +{ + struct pios_rfm22b_dev *rfm22b_dev = (struct pios_rfm22b_dev *)rfm22b_id; + if(!PIOS_RFM22B_validate(rfm22b_dev)) + return; + rfm22b_dev->min_frequency = min_frequency; + rfm22b_dev->max_frequency = max_frequency; + rfm22_setNominalCarrierFrequency(rfm22b_dev, (max_frequency - min_frequency) / 2); +} + void PIOS_RFM22B_SetDestinationId(uint32_t rfm22b_id, uint32_t dest_id) { struct pios_rfm22b_dev *rfm22b_dev = (struct pios_rfm22b_dev *)rfm22b_id; @@ -950,12 +986,10 @@ static enum pios_rfm22b_event rfm22_process_state_transition(struct pios_rfm22b_ static void rfm22_setNominalCarrierFrequency(struct pios_rfm22b_dev *rfm22b_dev, uint32_t frequency_hz) { - uint32_t min_frequency_hz = rfm22b_dev->cfg.minFrequencyHz; - uint32_t max_frequency_hz = rfm22b_dev->cfg.maxFrequencyHz; - if (frequency_hz < min_frequency_hz) - frequency_hz = min_frequency_hz; - else if (frequency_hz > max_frequency_hz) - frequency_hz = max_frequency_hz; + if (frequency_hz < rfm22b_dev->min_frequency) + frequency_hz = rfm22b_dev->min_frequency; + else if (frequency_hz > rfm22b_dev->max_frequency) + frequency_hz = rfm22b_dev->max_frequency; // holds the hbsel (1 or 2) uint8_t hbsel; @@ -1594,6 +1628,12 @@ static enum pios_rfm22b_event rfm22_receiveStatus(struct pios_rfm22b_dev *rfm22b return RFM22B_EVENT_RX_COMPLETE; } +static enum pios_rfm22b_event rfm22_requestConnection(struct pios_rfm22b_dev *rfm22b_dev) +{ + // Generate and set a connection request message. + return RFM22B_EVENT_RX_COMPLETE; +} + static enum pios_rfm22b_event rfm22_acceptConnection(struct pios_rfm22b_dev *rfm22b_dev) { return RFM22B_EVENT_RX_COMPLETE; @@ -1647,8 +1687,6 @@ void rfm22_setFreqCalibration(uint8_t value) static enum pios_rfm22b_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) { uint32_t id = rfm22b_dev->deviceID; - uint32_t min_frequency_hz = rfm22b_dev->cfg.minFrequencyHz; - uint32_t max_frequency_hz = rfm22b_dev->cfg.maxFrequencyHz; uint32_t freq_hop_step_size = 50000; // software reset the RF chip .. following procedure according to Si4x3x Errata (rev. B) @@ -1726,21 +1764,9 @@ static enum pios_rfm22b_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) // **************** // set the minimum and maximum carrier frequency allowed - - if (min_frequency_hz < RFM22_MIN_CARRIER_FREQUENCY_HZ) min_frequency_hz = RFM22_MIN_CARRIER_FREQUENCY_HZ; - else - if (min_frequency_hz > RFM22_MAX_CARRIER_FREQUENCY_HZ) min_frequency_hz = RFM22_MAX_CARRIER_FREQUENCY_HZ; - - if (max_frequency_hz < RFM22_MIN_CARRIER_FREQUENCY_HZ) max_frequency_hz = RFM22_MIN_CARRIER_FREQUENCY_HZ; - else - if (max_frequency_hz > RFM22_MAX_CARRIER_FREQUENCY_HZ) max_frequency_hz = RFM22_MAX_CARRIER_FREQUENCY_HZ; - - if (min_frequency_hz > max_frequency_hz) - { // swap them over - uint32_t tmp = min_frequency_hz; - min_frequency_hz = max_frequency_hz; - max_frequency_hz = tmp; - } + rfm22b_dev->min_frequency = RFM22B_DEFAULT_MIN_FREQUENCY; + rfm22b_dev->max_frequency = RFM22B_DEFAULT_MAX_FREQUENCY; + rfm22b_dev->frequency_hz = RFM22B_DEFAULT_FREQUENCY; // **************** // calibrate our RF module to be exactly on frequency .. different for every module @@ -1855,9 +1881,6 @@ static enum pios_rfm22b_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) // set frequency hopping channel step size (multiples of 10kHz) rfm22_write(RFM22_frequency_hopping_step_size, rfm22b_dev->frequency_hop_step_size_reg); - // set our nominal carrier frequency - rfm22_setNominalCarrierFrequency(rfm22b_dev, (min_frequency_hz + max_frequency_hz) / 2); - // set the tx power rfm22_write(RFM22_tx_power, RFM22_tx_pwr_papeaken | RFM22_tx_pwr_papeaklvl_0 | RFM22_tx_pwr_lna_sw | rfm22b_dev->tx_power); @@ -1871,7 +1894,7 @@ static enum pios_rfm22b_event rfm22_init(struct pios_rfm22b_dev *rfm22b_dev) rfm22_write(RFM22_rx_fifo_control, RX_FIFO_HI_WATERMARK); rfm22_setFreqCalibration(rfm22b_dev->cfg.RFXtalCap); - rfm22_setNominalCarrierFrequency(rfm22b_dev, rfm22b_dev->cfg.frequencyHz); + rfm22_setNominalCarrierFrequency(rfm22b_dev, rfm22b_dev->frequency_hz); RFM22_SetDatarate((uint32_t)rfm22b_dev, rfm22b_dev->datarate, true); return RFM22B_EVENT_INITIALIZED; diff --git a/flight/PiOS/inc/pios_rfm22b.h b/flight/PiOS/inc/pios_rfm22b.h index e63289bf4..8ee2354ab 100644 --- a/flight/PiOS/inc/pios_rfm22b.h +++ b/flight/PiOS/inc/pios_rfm22b.h @@ -39,12 +39,7 @@ enum gpio_direction {GPIO0_TX_GPIO1_RX, GPIO0_RX_GPIO1_TX}; struct pios_rfm22b_cfg { const struct pios_spi_cfg * spi_cfg; /* Pointer to SPI interface configuration */ const struct pios_exti_cfg * exti_cfg; /* Pointer to the EXTI configuration */ - uint32_t frequencyHz; - uint32_t minFrequencyHz; - uint32_t maxFrequencyHz; uint8_t RFXtalCap; - uint32_t maxRFBandwidth; - uint8_t maxTxPower; uint8_t slave_num; enum gpio_direction gpio_direction; }; @@ -98,6 +93,7 @@ struct rfm22b_stats { /* Public Functions */ extern int32_t PIOS_RFM22B_Init(uint32_t *rfb22b_id, uint32_t spi_id, uint32_t slave_num, const struct pios_rfm22b_cfg *cfg); +extern void PIOS_RFM22B_SetFrequencyRange(uint32_t rfm22b_id, uint32_t min_frequency, uint32_t max_frequency); extern void PIOS_RFM22B_SetTxPower(uint32_t rfm22b_id, enum rfm22b_tx_power tx_pwr); extern void RFM22_SetDatarate(uint32_t rfm22b_id, enum rfm22b_datarate datarate, bool data_whitening); extern void PIOS_RFM22B_SetDestinationId(uint32_t rfm22b_id, uint32_t dest_id); diff --git a/flight/PiOS/inc/pios_rfm22b_priv.h b/flight/PiOS/inc/pios_rfm22b_priv.h index a1fed423d..70cf2196b 100644 --- a/flight/PiOS/inc/pios_rfm22b_priv.h +++ b/flight/PiOS/inc/pios_rfm22b_priv.h @@ -577,14 +577,16 @@ enum pios_rfm22b_dev_magic { enum pios_rfm22b_state { RFM22B_STATE_UNINITIALIZED, RFM22B_STATE_INITIALIZING, + RFM22B_STATE_INITIALIZED, + RFM22B_STATE_REQUESTING_CONNECTION, + RFM22B_STATE_ACCEPTING_CONNECTION, + RFM22B_STATE_CONNECTION_ACCEPTED, + RFM22B_STATE_CONNECTION_DECLINED, RFM22B_STATE_RX_MODE, RFM22B_STATE_WAIT_PREAMBLE, RFM22B_STATE_WAIT_SYNC, RFM22B_STATE_RX_DATA, RFM22B_STATE_RECEIVING_STATUS, - RFM22B_STATE_ACCEPTING_CONNECTION, - RFM22B_STATE_CONNECTION_ACCEPTED, - RFM22B_STATE_CONNECTION_DECLINED, RFM22B_STATE_TX_START, RFM22B_STATE_TX_DATA, RFM22B_STATE_TIMEOUT, @@ -595,17 +597,19 @@ enum pios_rfm22b_state { }; enum pios_rfm22b_event { + RFM22B_EVENT_INT_RECEIVED, RFM22B_EVENT_INITIALIZE, RFM22B_EVENT_INITIALIZED, - RFM22B_EVENT_INT_RECEIVED, + RFM22B_EVENT_REQUEST_CONNECTION, + RFM22B_EVENT_REQUESTED_CONNECTION, + RFM22B_EVENT_CONNECTION_REQUEST, + RFM22B_EVENT_CONNECTION_ACCEPT, + RFM22B_EVENT_CONNECTION_DECLINED, RFM22B_EVENT_RX_MODE, RFM22B_EVENT_PREAMBLE_DETECTED, RFM22B_EVENT_SYNC_DETECTED, RFM22B_EVENT_RX_COMPLETE, RFM22B_EVENT_STATUS_RECEIVED, - RFM22B_EVENT_CONNECTION_REQUEST, - RFM22B_EVENT_CONNECTION_ACCEPT, - RFM22B_EVENT_CONNECTION_DECLINED, RFM22B_EVENT_SEND_PACKET, RFM22B_EVENT_TX_START, RFM22B_EVENT_TX_STARTED, @@ -715,7 +719,13 @@ struct pios_rfm22b_dev { uint16_t rx_buffer_wr; // the receive buffer write index uint16_t rx_packet_len; - + + // The minimum frequency + uint32_t min_frequency; + // The maximum frequency + uint32_t max_frequency; + // The current nominal frequency + uint32_t frequency_hz; // The frequency hopping step size float frequency_step_size; // current frequency hop channel diff --git a/flight/PipXtreme/System/pios_board.c b/flight/PipXtreme/System/pios_board.c index 58b762a63..e69e0ed33 100644 --- a/flight/PipXtreme/System/pios_board.c +++ b/flight/PipXtreme/System/pios_board.c @@ -246,38 +246,6 @@ void PIOS_Board_Init(void) { } } - // Set the maximum radio RF power. - switch (oplinkSettings.MaxRFPower) - { - case OPLINKSETTINGS_MAXRFPOWER_125: - PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_0); - break; - case OPLINKSETTINGS_MAXRFPOWER_16: - PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_1); - break; - case OPLINKSETTINGS_MAXRFPOWER_316: - PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_2); - break; - case OPLINKSETTINGS_MAXRFPOWER_63: - PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_3); - break; - case OPLINKSETTINGS_MAXRFPOWER_126: - PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_4); - break; - case OPLINKSETTINGS_MAXRFPOWER_25: - PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_5); - break; - case OPLINKSETTINGS_MAXRFPOWER_50: - PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_6); - break; - case OPLINKSETTINGS_MAXRFPOWER_100: - PIOS_RFM22B_SetTxPower(pios_rfm22b_id, RFM22_tx_pwr_txpow_7); - break; - } - - // Set the radio destination ID. - PIOS_RFM22B_SetDestinationId(pios_rfm22b_id, oplinkSettings.PairID); - // Initialize the packet handler PacketHandlerConfig pios_ph_cfg = { .default_destination_id = 0xffffffff, // Broadcast diff --git a/flight/board_hw_defs/pipxtreme/board_hw_defs.c b/flight/board_hw_defs/pipxtreme/board_hw_defs.c index c43658bde..4b5c17264 100644 --- a/flight/board_hw_defs/pipxtreme/board_hw_defs.c +++ b/flight/board_hw_defs/pipxtreme/board_hw_defs.c @@ -222,12 +222,7 @@ static const struct pios_exti_cfg pios_exti_rfm22b_cfg __exti_config = { struct pios_rfm22b_cfg pios_rfm22b_pipx_cfg = { .spi_cfg = &pios_spi_rfm22b_cfg, .exti_cfg = &pios_exti_rfm22b_cfg, - .frequencyHz = 434000000, - .minFrequencyHz = 434000000 - 2000000, - .maxFrequencyHz = 434000000 + 2000000, .RFXtalCap = 0x7f, - .maxRFBandwidth = 64000, - .maxTxPower = RFM22_tx_pwr_txpow_7, // +20dBm .. 100mW .slave_num = 0, .gpio_direction = GPIO0_TX_GPIO1_RX, }; diff --git a/flight/board_hw_defs/revomini/board_hw_defs.c b/flight/board_hw_defs/revomini/board_hw_defs.c index 7d9d8fe19..aab997f0a 100644 --- a/flight/board_hw_defs/revomini/board_hw_defs.c +++ b/flight/board_hw_defs/revomini/board_hw_defs.c @@ -395,12 +395,7 @@ static const struct pios_exti_cfg pios_exti_rfm22b_cfg __exti_config = { const struct pios_rfm22b_cfg pios_rfm22b_rm1_cfg = { .spi_cfg = &pios_spi_telem_flash_cfg, .exti_cfg = &pios_exti_rfm22b_cfg, - .frequencyHz = 434000000, - .minFrequencyHz = 434000000 - 2000000, - .maxFrequencyHz = 434000000 + 2000000, .RFXtalCap = 0x7f, - .maxRFBandwidth = 64000, - .maxTxPower = RFM22_tx_pwr_txpow_7, // +20dBm .. 100mW .slave_num = 0, .gpio_direction = GPIO0_RX_GPIO1_TX, }; @@ -408,12 +403,7 @@ const struct pios_rfm22b_cfg pios_rfm22b_rm1_cfg = { const struct pios_rfm22b_cfg pios_rfm22b_rm2_cfg = { .spi_cfg = &pios_spi_telem_flash_cfg, .exti_cfg = &pios_exti_rfm22b_cfg, - .frequencyHz = 434000000, - .minFrequencyHz = 434000000 - 2000000, - .maxFrequencyHz = 434000000 + 2000000, .RFXtalCap = 0x7f, - .maxRFBandwidth = 64000, - .maxTxPower = RFM22_tx_pwr_txpow_7, // +20dBm .. 100mW .slave_num = 0, .gpio_direction = GPIO0_TX_GPIO1_RX, }; diff --git a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp index 428ee52a1..801d79325 100644 --- a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp @@ -65,7 +65,8 @@ ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget addUAVObjectToWidgetRelation("OPLinkSettings", "SendTimeout", m_oplink->SendTimeout); addUAVObjectToWidgetRelation("OPLinkSettings", "MinPacketSize", m_oplink->MinPacketSize); addUAVObjectToWidgetRelation("OPLinkSettings", "FrequencyCalibration", m_oplink->FrequencyCalibration); - addUAVObjectToWidgetRelation("OPLinkSettings", "Frequency", m_oplink->Frequency); + addUAVObjectToWidgetRelation("OPLinkSettings", "MinFrequency", m_oplink->MinFrequency); + addUAVObjectToWidgetRelation("OPLinkSettings", "MaxFrequency", m_oplink->MaxFrequency); addUAVObjectToWidgetRelation("OPLinkStatus", "RxGood", m_oplink->Good); addUAVObjectToWidgetRelation("OPLinkStatus", "RxCorrected", m_oplink->Corrected); diff --git a/ground/openpilotgcs/src/plugins/config/pipxtreme.ui b/ground/openpilotgcs/src/plugins/config/pipxtreme.ui index 2ab148060..ca6ee6eb0 100644 --- a/ground/openpilotgcs/src/plugins/config/pipxtreme.ui +++ b/ground/openpilotgcs/src/plugins/config/pipxtreme.ui @@ -1449,7 +1449,7 @@ - Calibrate the modems RF carrier frequency + Set the send timeout true @@ -1484,7 +1484,7 @@ - Calibrate the modems RF carrier frequency + Set the minimum packet size true @@ -1532,7 +1532,7 @@ - Frequency (Hz) + Min. Frequency (Hz) Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -1540,7 +1540,7 @@ - + 0 @@ -1554,7 +1554,7 @@ - Set the modems RF carrier frequency + Set the modems minimum RF carrier frequency Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -1563,7 +1563,7 @@ true - 0 + 400000000 1000000000 @@ -1573,7 +1573,51 @@ - + + + + Max. Frequency (Hz) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Set the modems maximum RF carrier frequency + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + 400000000 + + + 1000000000 + + + 100000 + + + + AES Encryption @@ -1642,7 +1686,7 @@ - + Qt::Vertical diff --git a/shared/uavobjectdefinition/oplinksettings.xml b/shared/uavobjectdefinition/oplinksettings.xml index f1633fd7a..2ee54b5a6 100644 --- a/shared/uavobjectdefinition/oplinksettings.xml +++ b/shared/uavobjectdefinition/oplinksettings.xml @@ -12,7 +12,8 @@ - + +