1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-03-16 08:29:15 +01:00

LP-345 Simplify xtalcap callback check, reuse PIOS_RFM22B_SetXtalCap at boot

This commit is contained in:
Laurent Lalanne 2016-12-22 18:49:19 +01:00
parent 340d304558
commit 2872a3467a
8 changed files with 26 additions and 32 deletions

View File

@ -68,7 +68,7 @@ static xTaskHandle systemTaskHandle;
static bool stackOverflow; static bool stackOverflow;
static bool mallocFailed; static bool mallocFailed;
volatile int initTaskDone = 0; volatile int initTaskDone = 0;
static OPLinkSettingsData previousOPLinkSettings; static uint8_t previousRFXtalCap;
// Private functions // Private functions
static void systemTask(void *parameters); static void systemTask(void *parameters);
@ -136,9 +136,8 @@ static void systemTask(__attribute__((unused)) void *parameters)
PIOS_SYS_Reset(); PIOS_SYS_Reset();
} }
// Initialize previousOPLinkSettings used by callback // Initialize previousRFXtalCap used by callback
OPLinkSettingsGet(&previousOPLinkSettings); OPLinkSettingsRFXtalCapGet(&previousRFXtalCap);
OPLinkSettingsConnectCallback(oplinkSettingsUpdatedCb); OPLinkSettingsConnectCallback(oplinkSettingsUpdatedCb);
// Initialize vars // Initialize vars
@ -255,14 +254,15 @@ void vApplicationMallocFailedHook(void)
*/ */
static void oplinkSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev) static void oplinkSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{ {
OPLinkSettingsData currentOPLinkSettings; uint8_t currentRFXtalCap;
OPLinkSettingsRFXtalCapGet(&currentRFXtalCap);
OPLinkSettingsGet(&currentOPLinkSettings);
// Check if RFXtalCap value changed // Check if RFXtalCap value changed
if (currentOPLinkSettings.RFXtalCap != previousOPLinkSettings.RFXtalCap) { if (currentRFXtalCap != previousRFXtalCap) {
PIOS_RFM22B_SetXtalCap(pios_rfm22b_id, currentOPLinkSettings.RFXtalCap); PIOS_RFM22B_SetXtalCap(pios_rfm22b_id, currentRFXtalCap);
PIOS_RFM22B_Reinit(pios_rfm22b_id); PIOS_RFM22B_Reinit(pios_rfm22b_id);
previousOPLinkSettings = currentOPLinkSettings; previousRFXtalCap = currentRFXtalCap;
} }
} }

View File

@ -130,7 +130,7 @@ static uint8_t i2c_error_activity[PIOS_I2C_ERROR_COUNT_NUMELEM];
#endif #endif
#ifdef PIOS_INCLUDE_RFM22B #ifdef PIOS_INCLUDE_RFM22B
static OPLinkSettingsData previousOPLinkSettings; static uint8_t previousRFXtalCap;
static void oplinkSettingsUpdatedCb(UAVObjEvent *ev); static void oplinkSettingsUpdatedCb(UAVObjEvent *ev);
#endif #endif
@ -237,9 +237,8 @@ static void systemTask(__attribute__((unused)) void *parameters)
SystemSettingsConnectCallback(checkSettingsUpdatedCb); SystemSettingsConnectCallback(checkSettingsUpdatedCb);
#ifdef PIOS_INCLUDE_RFM22B #ifdef PIOS_INCLUDE_RFM22B
// Initialize previousOPLinkSettings used by callback // Initialize previousRFXtalCap used by callback
OPLinkSettingsGet(&previousOPLinkSettings); OPLinkSettingsRFXtalCapGet(&previousRFXtalCap);
OPLinkSettingsConnectCallback(oplinkSettingsUpdatedCb); OPLinkSettingsConnectCallback(oplinkSettingsUpdatedCb);
#endif #endif
@ -472,14 +471,15 @@ static void checkSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
*/ */
static void oplinkSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev) static void oplinkSettingsUpdatedCb(__attribute__((unused)) UAVObjEvent *ev)
{ {
OPLinkSettingsData currentOPLinkSettings; uint8_t currentRFXtalCap;
OPLinkSettingsRFXtalCapGet(&currentRFXtalCap);
OPLinkSettingsGet(&currentOPLinkSettings);
// Check if RFXtalCap value changed // Check if RFXtalCap value changed
if (currentOPLinkSettings.RFXtalCap != previousOPLinkSettings.RFXtalCap) { if (currentRFXtalCap != previousRFXtalCap) {
PIOS_RFM22B_SetXtalCap(pios_rfm22b_id, currentOPLinkSettings.RFXtalCap); PIOS_RFM22B_SetXtalCap(pios_rfm22b_id, currentRFXtalCap);
PIOS_RFM22B_Reinit(pios_rfm22b_id); PIOS_RFM22B_Reinit(pios_rfm22b_id);
previousOPLinkSettings = currentOPLinkSettings; previousRFXtalCap = currentRFXtalCap;
} }
} }
#endif /* ifdef PIOS_INCLUDE_RFM22B */ #endif /* ifdef PIOS_INCLUDE_RFM22B */

View File

@ -825,8 +825,9 @@ void PIOS_Board_Init(void)
/* Set the radio configuration parameters. */ /* Set the radio configuration parameters. */
PIOS_RFM22B_SetDeviceID(pios_rfm22b_id, oplinkSettings.CustomDeviceID); PIOS_RFM22B_SetDeviceID(pios_rfm22b_id, oplinkSettings.CustomDeviceID);
PIOS_RFM22B_SetChannelConfig(pios_rfm22b_id, datarate, oplinkSettings.MinChannel, oplinkSettings.MaxChannel, is_coordinator, is_oneway, ppm_mode, ppm_only);
PIOS_RFM22B_SetCoordinatorID(pios_rfm22b_id, oplinkSettings.CoordID); PIOS_RFM22B_SetCoordinatorID(pios_rfm22b_id, oplinkSettings.CoordID);
PIOS_RFM22B_SetXtalCap(pios_rfm22b_id, oplinkSettings.RFXtalCap);
PIOS_RFM22B_SetChannelConfig(pios_rfm22b_id, datarate, oplinkSettings.MinChannel, oplinkSettings.MaxChannel, is_coordinator, data_mode, ppm_mode);
/* Set the PPM callback if we should be receiving PPM. */ /* Set the PPM callback if we should be receiving PPM. */
if (ppm_mode || (ppm_only && !is_coordinator)) { if (ppm_mode || (ppm_only && !is_coordinator)) {

View File

@ -414,9 +414,6 @@ void PIOS_Board_Init(void)
// Configure the RFM22B device // Configure the RFM22B device
const struct pios_rfm22b_cfg *rfm22b_cfg = PIOS_BOARD_HW_DEFS_GetRfm22Cfg(bdinfo->board_rev); const struct pios_rfm22b_cfg *rfm22b_cfg = PIOS_BOARD_HW_DEFS_GetRfm22Cfg(bdinfo->board_rev);
// Set the Xtal capacitor value
pios_rfm22b_cfg.RFXtalCap = oplinkSettings.RFXtalCap;
if (PIOS_RFM22B_Init(&pios_rfm22b_id, PIOS_RFM22_SPI_PORT, rfm22b_cfg->slave_num, rfm22b_cfg, oplinkSettings.RFBand)) { if (PIOS_RFM22B_Init(&pios_rfm22b_id, PIOS_RFM22_SPI_PORT, rfm22b_cfg->slave_num, rfm22b_cfg, oplinkSettings.RFBand)) {
PIOS_Assert(0); PIOS_Assert(0);
} }
@ -489,6 +486,7 @@ void PIOS_Board_Init(void)
// Set the radio configuration parameters. // Set the radio configuration parameters.
PIOS_RFM22B_SetDeviceID(pios_rfm22b_id, oplinkSettings.CustomDeviceID); PIOS_RFM22B_SetDeviceID(pios_rfm22b_id, oplinkSettings.CustomDeviceID);
PIOS_RFM22B_SetCoordinatorID(pios_rfm22b_id, oplinkSettings.CoordID); PIOS_RFM22B_SetCoordinatorID(pios_rfm22b_id, oplinkSettings.CoordID);
PIOS_RFM22B_SetXtalCap(pios_rfm22b_id, oplinkSettings.RFXtalCap);
PIOS_RFM22B_SetChannelConfig(pios_rfm22b_id, datarate, oplinkSettings.MinChannel, oplinkSettings.MaxChannel, is_coordinator, data_mode, ppm_mode); PIOS_RFM22B_SetChannelConfig(pios_rfm22b_id, datarate, oplinkSettings.MinChannel, oplinkSettings.MaxChannel, is_coordinator, data_mode, ppm_mode);
/* Set the PPM callback if we should be receiving PPM. */ /* Set the PPM callback if we should be receiving PPM. */

View File

@ -640,7 +640,7 @@ static const struct pios_exti_cfg pios_exti_rfm22b_cfg __exti_config = {
}, },
}; };
struct pios_rfm22b_cfg pios_rfm22b_rm1_cfg = { const struct pios_rfm22b_cfg pios_rfm22b_rm1_cfg = {
.spi_cfg = &pios_spi_telem_flash_cfg, .spi_cfg = &pios_spi_telem_flash_cfg,
.exti_cfg = &pios_exti_rfm22b_cfg, .exti_cfg = &pios_exti_rfm22b_cfg,
.RFXtalCap = 0x7f, .RFXtalCap = 0x7f,
@ -648,7 +648,7 @@ struct pios_rfm22b_cfg pios_rfm22b_rm1_cfg = {
.gpio_direction = GPIO0_RX_GPIO1_TX, .gpio_direction = GPIO0_RX_GPIO1_TX,
}; };
struct pios_rfm22b_cfg pios_rfm22b_rm2_cfg = { const struct pios_rfm22b_cfg pios_rfm22b_rm2_cfg = {
.spi_cfg = &pios_spi_telem_flash_cfg, .spi_cfg = &pios_spi_telem_flash_cfg,
.exti_cfg = &pios_exti_rfm22b_cfg, .exti_cfg = &pios_exti_rfm22b_cfg,
.RFXtalCap = 0x7f, .RFXtalCap = 0x7f,

View File

@ -913,10 +913,6 @@ void PIOS_Board_Init(void)
/* Configure the RFM22B device. */ /* Configure the RFM22B device. */
const struct pios_rfm22b_cfg *rfm22b_cfg = PIOS_BOARD_HW_DEFS_GetRfm22Cfg(bdinfo->board_rev); const struct pios_rfm22b_cfg *rfm22b_cfg = PIOS_BOARD_HW_DEFS_GetRfm22Cfg(bdinfo->board_rev);
// Set the Xtal capacitor value
pios_rfm22b_rm1_cfg.RFXtalCap = oplinkSettings.RFXtalCap;
pios_rfm22b_rm2_cfg.RFXtalCap = oplinkSettings.RFXtalCap;
if (PIOS_RFM22B_Init(&pios_rfm22b_id, PIOS_RFM22_SPI_PORT, rfm22b_cfg->slave_num, rfm22b_cfg, oplinkSettings.RFBand)) { if (PIOS_RFM22B_Init(&pios_rfm22b_id, PIOS_RFM22_SPI_PORT, rfm22b_cfg->slave_num, rfm22b_cfg, oplinkSettings.RFBand)) {
PIOS_Assert(0); PIOS_Assert(0);
} }
@ -960,6 +956,7 @@ void PIOS_Board_Init(void)
/* Set the radio configuration parameters. */ /* Set the radio configuration parameters. */
PIOS_RFM22B_SetDeviceID(pios_rfm22b_id, oplinkSettings.CustomDeviceID); PIOS_RFM22B_SetDeviceID(pios_rfm22b_id, oplinkSettings.CustomDeviceID);
PIOS_RFM22B_SetCoordinatorID(pios_rfm22b_id, oplinkSettings.CoordID); PIOS_RFM22B_SetCoordinatorID(pios_rfm22b_id, oplinkSettings.CoordID);
PIOS_RFM22B_SetXtalCap(pios_rfm22b_id, oplinkSettings.RFXtalCap);
PIOS_RFM22B_SetChannelConfig(pios_rfm22b_id, datarate, oplinkSettings.MinChannel, oplinkSettings.MaxChannel, is_coordinator, data_mode, ppm_mode); PIOS_RFM22B_SetChannelConfig(pios_rfm22b_id, datarate, oplinkSettings.MinChannel, oplinkSettings.MaxChannel, is_coordinator, data_mode, ppm_mode);
/* Set the PPM callback if we should be receiving PPM. */ /* Set the PPM callback if we should be receiving PPM. */

View File

@ -431,7 +431,7 @@ static const struct pios_exti_cfg pios_exti_rfm22b_cfg __exti_config = {
}, },
}; };
struct pios_rfm22b_cfg pios_rfm22b_cfg = { const struct pios_rfm22b_cfg pios_rfm22b_cfg = {
.spi_cfg = &pios_spi_telem_flash_cfg, .spi_cfg = &pios_spi_telem_flash_cfg,
.exti_cfg = &pios_exti_rfm22b_cfg, .exti_cfg = &pios_exti_rfm22b_cfg,
.RFXtalCap = 0x7f, .RFXtalCap = 0x7f,

View File

@ -853,9 +853,6 @@ void PIOS_Board_Init(void)
/* Configure the RFM22B device. */ /* Configure the RFM22B device. */
const struct pios_rfm22b_cfg *rfm22b_cfg = PIOS_BOARD_HW_DEFS_GetRfm22Cfg(bdinfo->board_rev); const struct pios_rfm22b_cfg *rfm22b_cfg = PIOS_BOARD_HW_DEFS_GetRfm22Cfg(bdinfo->board_rev);
// Set the Xtal capacitor value
pios_rfm22b_cfg.RFXtalCap = oplinkSettings.RFXtalCap;
if (PIOS_RFM22B_Init(&pios_rfm22b_id, PIOS_RFM22_SPI_PORT, rfm22b_cfg->slave_num, rfm22b_cfg, oplinkSettings.RFBand)) { if (PIOS_RFM22B_Init(&pios_rfm22b_id, PIOS_RFM22_SPI_PORT, rfm22b_cfg->slave_num, rfm22b_cfg, oplinkSettings.RFBand)) {
PIOS_Assert(0); PIOS_Assert(0);
} }
@ -899,6 +896,7 @@ void PIOS_Board_Init(void)
/* Set the radio configuration parameters. */ /* Set the radio configuration parameters. */
PIOS_RFM22B_SetDeviceID(pios_rfm22b_id, oplinkSettings.CustomDeviceID); PIOS_RFM22B_SetDeviceID(pios_rfm22b_id, oplinkSettings.CustomDeviceID);
PIOS_RFM22B_SetCoordinatorID(pios_rfm22b_id, oplinkSettings.CoordID); PIOS_RFM22B_SetCoordinatorID(pios_rfm22b_id, oplinkSettings.CoordID);
PIOS_RFM22B_SetXtalCap(pios_rfm22b_id, oplinkSettings.RFXtalCap);
PIOS_RFM22B_SetChannelConfig(pios_rfm22b_id, datarate, oplinkSettings.MinChannel, oplinkSettings.MaxChannel, is_coordinator, data_mode, ppm_mode); PIOS_RFM22B_SetChannelConfig(pios_rfm22b_id, datarate, oplinkSettings.MinChannel, oplinkSettings.MaxChannel, is_coordinator, data_mode, ppm_mode);
/* Set the PPM callback if we should be receiving PPM. */ /* Set the PPM callback if we should be receiving PPM. */