X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_cc1200.c;h=6f04380300c59c8547e2fd3e3f85cf811dc7d426;hb=0921e8b166c41ea8f65df14cea893481d8e1f0f1;hp=3ccf121f1a1f3301f0b2e720d2308e78febb5be9;hpb=341157c7415fcf879696c9d8167722a0c5ff264c;p=fw%2Faltos diff --git a/src/drivers/ao_cc1200.c b/src/drivers/ao_cc1200.c index 3ccf121f..6f043803 100644 --- a/src/drivers/ao_cc1200.c +++ b/src/drivers/ao_cc1200.c @@ -25,6 +25,8 @@ #include #endif +static uint8_t cc1201; + static uint8_t ao_radio_mutex; static uint8_t ao_radio_wake; /* radio ready. Also used as sleep address */ @@ -329,13 +331,24 @@ ao_radio_idle(void) #define PACKET_CHAN_BW_384 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_12 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ (16 << CC1200_CHAN_BW_BB_CIC_DECFACT)) +/* + * CC1201 doesn't support our low bandwidth receive setups, so we use + * larger values for that part, leaving the bandwidth at over 50kHz + */ + /* 200 / 10 = 20 */ -#define PACKET_CHAN_BW_96 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ - (16 << CC1200_CHAN_BW_BB_CIC_DECFACT)) +#define PACKET_CHAN_BW_96_CC1200 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ + (16 << CC1200_CHAN_BW_BB_CIC_DECFACT)) + +#define PACKET_CHAN_BW_96_CC1201 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ + (8 << CC1200_CHAN_BW_BB_CIC_DECFACT)) /* 200 / 25 = 8 */ -#define PACKET_CHAN_BW_24 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ - (44 << CC1200_CHAN_BW_BB_CIC_DECFACT)) +#define PACKET_CHAN_BW_24_CC1200 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ + (44 << CC1200_CHAN_BW_BB_CIC_DECFACT)) + +#define PACKET_CHAN_BW_24_CC1201 ((CC1200_CHAN_BW_ADC_CIC_DECFACT_48 << CC1200_CHAN_BW_ADC_CIC_DECFACT) | \ + (8 << CC1200_CHAN_BW_BB_CIC_DECFACT)) static const uint16_t packet_setup[] = { CC1200_SYMBOL_RATE1, ((PACKET_SYMBOL_RATE_M >> 8) & 0xff), @@ -377,7 +390,6 @@ static const uint16_t packet_setup_96[] = { (PACKET_DEV_E_96 << CC1200_MODCFG_DEV_E_DEV_E)), CC1200_SYMBOL_RATE2, ((PACKET_SYMBOL_RATE_E_96 << CC1200_SYMBOL_RATE2_DATARATE_E) | (((PACKET_SYMBOL_RATE_M >> 16) & CC1200_SYMBOL_RATE2_DATARATE_M_19_16_MASK) << CC1200_SYMBOL_RATE2_DATARATE_M_19_16)), - CC1200_CHAN_BW, PACKET_CHAN_BW_96, CC1200_MDMCFG2, /* General Modem Parameter Configuration Reg. 2 */ ((CC1200_MDMCFG2_ASK_SHAPE_8 << CC1200_MDMCFG2_ASK_SHAPE) | (CC1200_MDMCFG2_SYMBOL_MAP_CFG_MODE_0 << CC1200_MDMCFG2_SYMBOL_MAP_CFG) | @@ -392,7 +404,6 @@ static const uint16_t packet_setup_24[] = { (PACKET_DEV_E_24 << CC1200_MODCFG_DEV_E_DEV_E)), CC1200_SYMBOL_RATE2, ((PACKET_SYMBOL_RATE_E_24 << CC1200_SYMBOL_RATE2_DATARATE_E) | (((PACKET_SYMBOL_RATE_M >> 16) & CC1200_SYMBOL_RATE2_DATARATE_M_19_16_MASK) << CC1200_SYMBOL_RATE2_DATARATE_M_19_16)), - CC1200_CHAN_BW, PACKET_CHAN_BW_24, CC1200_MDMCFG2, /* General Modem Parameter Configuration Reg. 2 */ ((CC1200_MDMCFG2_ASK_SHAPE_8 << CC1200_MDMCFG2_ASK_SHAPE) | (CC1200_MDMCFG2_SYMBOL_MAP_CFG_MODE_0 << CC1200_MDMCFG2_SYMBOL_MAP_CFG) | @@ -614,9 +625,17 @@ ao_radio_set_mode(uint16_t new_mode) break; case AO_RADIO_RATE_9600: ao_radio_set_regs(packet_setup_96); + if (cc1201) + ao_radio_reg_write(CC1200_CHAN_BW, PACKET_CHAN_BW_96_CC1201); + else + ao_radio_reg_write(CC1200_CHAN_BW, PACKET_CHAN_BW_96_CC1200); break; case AO_RADIO_RATE_2400: ao_radio_set_regs(packet_setup_24); + if (cc1201) + ao_radio_reg_write(CC1200_CHAN_BW, PACKET_CHAN_BW_24_CC1201); + else + ao_radio_reg_write(CC1200_CHAN_BW, PACKET_CHAN_BW_24_CC1200); break; } } @@ -663,6 +682,11 @@ static uint8_t ao_radio_configured = 0; static void ao_radio_setup(void) { + uint8_t partnumber = ao_radio_reg_read(CC1200_PARTNUMBER); + + if (partnumber == CC1200_PARTNUMBER_CC1201) + cc1201 = 1; + ao_radio_strobe(CC1200_SRES); ao_radio_set_regs(radio_setup); @@ -719,8 +743,8 @@ ao_radio_state(void) return (ao_radio_status() >> CC1200_STATUS_STATE) & CC1200_STATUS_STATE_MASK; } -#if CC1200_DEBUG -void +#if CC1200_DEBUG_ +static void ao_radio_show_state(char *where) { printf("%s: state %d len %d rxbytes %d\n", @@ -1320,7 +1344,7 @@ static void ao_radio_packet(void) { ao_radio_send(packet, sizeof (packet)); } -void +static void ao_radio_test_recv(void) { static uint8_t bytes[34];