X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao_radio.c;h=e090fe74bd4e8c635f879c7670536b41d3050089;hp=13362d3e32ca3f09e68ff1f8f0c0691336fe2acb;hb=3a3bfd471a868d546d83cdc431b53c8f5208edb9;hpb=d87e9c25947d7cc2eba8894a524977f2c55a089a diff --git a/ao_radio.c b/ao_radio.c index 13362d3e..e090fe74 100644 --- a/ao_radio.c +++ b/ao_radio.c @@ -89,7 +89,7 @@ #define RF_POWER_7_DBM 0xc8 #define RF_POWER_10_DBM 0xc0 -#define RF_POWER RF_POWER_0_DBM +#define RF_POWER RF_POWER_10_DBM static __code uint8_t radio_setup[] = { RF_PA_TABLE7_OFF, RF_POWER, @@ -104,7 +104,7 @@ static __code uint8_t radio_setup[] = { RF_FREQ2_OFF, (FREQ_CONTROL >> 16) & 0xff, RF_FREQ1_OFF, (FREQ_CONTROL >> 8) & 0xff, RF_FREQ0_OFF, (FREQ_CONTROL >> 0) & 0xff, - + RF_FSCTRL1_OFF, (IF_FREQ_CONTROL << RF_FSCTRL1_FREQ_IF_SHIFT), RF_FSCTRL0_OFF, (0 << RF_FSCTRL0_FREQOFF_SHIFT), @@ -148,7 +148,7 @@ static __code uint8_t radio_setup[] = { /* default sync values */ RF_SYNC1_OFF, 0xD3, RF_SYNC0_OFF, 0x91, - + /* max packet length */ RF_PKTLEN_OFF, sizeof (struct ao_telemetry), @@ -184,6 +184,33 @@ static __code uint8_t radio_setup[] = { RF_IOCFG0_OFF, 0x00, }; + +static __code uint8_t telemetry_setup[] = { + RF_MDMCFG4_OFF, ((CHANBW_E << RF_MDMCFG4_CHANBW_E_SHIFT) | + (CHANBW_M << RF_MDMCFG4_CHANBW_M_SHIFT) | + (DRATE_E << RF_MDMCFG4_DRATE_E_SHIFT)), + RF_MDMCFG3_OFF, (DRATE_M << RF_MDMCFG3_DRATE_M_SHIFT), + RF_MDMCFG2_OFF, (RF_MDMCFG2_DEM_DCFILT_OFF | + RF_MDMCFG2_MOD_FORMAT_GFSK | + RF_MDMCFG2_SYNC_MODE_15_16_THRES), + RF_MDMCFG1_OFF, (RF_MDMCFG1_FEC_EN | + RF_MDMCFG1_NUM_PREAMBLE_4 | + (2 << RF_MDMCFG1_CHANSPC_E_SHIFT)), + + RF_DEVIATN_OFF, ((DEVIATION_E << RF_DEVIATN_DEVIATION_E_SHIFT) | + (DEVIATION_M << RF_DEVIATN_DEVIATION_M_SHIFT)), + + /* max packet length */ + RF_PKTLEN_OFF, sizeof (struct ao_telemetry), + RF_PKTCTRL1_OFF, ((1 << PKTCTRL1_PQT_SHIFT)| + PKTCTRL1_APPEND_STATUS| + PKTCTRL1_ADR_CHK_NONE), + RF_PKTCTRL0_OFF, (RF_PKTCTRL0_WHITE_DATA| + RF_PKTCTRL0_PKT_FORMAT_NORMAL| + RF_PKTCTRL0_CRC_EN| + RF_PKTCTRL0_LENGTH_CONFIG_FIXED), +}; + __xdata uint8_t ao_radio_dma; __xdata uint8_t ao_radio_dma_done; __xdata uint8_t ao_radio_mutex; @@ -203,8 +230,10 @@ ao_radio_idle(void) void ao_radio_send(__xdata struct ao_telemetry *telemetry) __reentrant { + ao_config_get(); ao_mutex_get(&ao_radio_mutex); ao_radio_idle(); + RF_CHANNR = ao_config.radio_channel; ao_dma_set_transfer(ao_radio_dma, telemetry, &RFDXADDR, @@ -225,8 +254,10 @@ ao_radio_send(__xdata struct ao_telemetry *telemetry) __reentrant void ao_radio_recv(__xdata struct ao_radio_recv *radio) __reentrant { + ao_config_get(); ao_mutex_get(&ao_radio_mutex); ao_radio_idle(); + RF_CHANNR = ao_config.radio_channel; ao_dma_set_transfer(ao_radio_dma, &RFDXADDR, radio,