X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_cc115l.c;h=05e6a762ecc722854d3f24579eb40dff07101c55;hb=fb0fb6f4beab484e7fe55b39d18c1f19778f1211;hp=1d8211f6c51fee7153d24d0ffe0103cd96d1a526;hpb=93a9aa703a0173e13b327ed432e6d52e90ebfa1b;p=fw%2Faltos diff --git a/src/drivers/ao_cc115l.c b/src/drivers/ao_cc115l.c index 1d8211f6..05e6a762 100644 --- a/src/drivers/ao_cc115l.c +++ b/src/drivers/ao_cc115l.c @@ -23,7 +23,7 @@ #define AO_RADIO_MAX_SEND sizeof (struct ao_telemetry_generic) -static uint8_t ao_radio_mutex; +uint8_t ao_radio_mutex; static uint8_t ao_radio_fifo; /* fifo drained interrupt received */ static uint8_t ao_radio_done; /* tx done interrupt received */ @@ -33,7 +33,7 @@ static uint8_t ao_radio_mcu_wake; /* MARC status change */ static uint8_t ao_radio_marcstate; /* Last read MARC state value */ /* Debugging commands */ -#define CC115L_DEBUG 1 +#define CC115L_DEBUG 0 /* Runtime tracing */ #define CC115L_TRACE 0 @@ -282,6 +282,10 @@ static const uint16_t packet_setup[] = { CC115L_MDMCFG4, ((0xf << 4) | (PACKET_DRATE_E << CC115L_MDMCFG4_DRATE_E)), CC115L_MDMCFG3, (PACKET_DRATE_M), + CC115L_MDMCFG2, (0x00 | + (CC115L_MDMCFG2_MOD_FORMAT_GFSK << CC115L_MDMCFG2_MOD_FORMAT) | + (0 << CC115L_MDMCFG2_MANCHESTER_EN) | + (CC115L_MDMCFG2_SYNC_MODE_16BITS << CC115L_MDMCFG2_SYNC_MODE)), }; @@ -317,14 +321,20 @@ static const uint16_t rdf_setup[] = { CC115L_MDMCFG4, ((0xf << 4) | (RDF_DRATE_E << CC115L_MDMCFG4_DRATE_E)), CC115L_MDMCFG3, (RDF_DRATE_M), + CC115L_MDMCFG2, (0x00 | + (CC115L_MDMCFG2_MOD_FORMAT_GFSK << CC115L_MDMCFG2_MOD_FORMAT) | + (0 << CC115L_MDMCFG2_MANCHESTER_EN) | + (CC115L_MDMCFG2_SYNC_MODE_NONE << CC115L_MDMCFG2_SYNC_MODE)), }; /* - * APRS deviation is the same as RDF + * APRS deviation is 3kHz + * + * 26e6 / (2 ** 17) * (8 + 7) * (2 ** 0) = 2975 */ -#define APRS_DEV_E RDF_DEV_E -#define APRS_DEV_M RDF_DEV_M +#define APRS_DEV_E 0 +#define APRS_DEV_M 7 /* * For our APRS beacon, set the symbol rate to 9.6kBaud (8x oversampling for 1200 baud data rate) @@ -348,6 +358,10 @@ static const uint16_t aprs_setup[] = { CC115L_MDMCFG4, ((0xf << 4) | (APRS_DRATE_E << CC115L_MDMCFG4_DRATE_E)), CC115L_MDMCFG3, (APRS_DRATE_M), + CC115L_MDMCFG2, (0x00 | + (CC115L_MDMCFG2_MOD_FORMAT_GFSK << CC115L_MDMCFG2_MOD_FORMAT) | + (0 << CC115L_MDMCFG2_MANCHESTER_EN) | + (CC115L_MDMCFG2_SYNC_MODE_NONE << CC115L_MDMCFG2_SYNC_MODE)), }; #define AO_PKTCTRL0_INFINITE ((CC115L_PKTCTRL0_PKT_FORMAT_NORMAL << CC115L_PKTCTRL0_PKT_FORMAT) | \ @@ -430,16 +444,11 @@ static const uint16_t radio_setup[] = { AO_CC115L_DONE_INT_GPIO_IOCFG, CC115L_IOCFG_GPIO_CFG_PA_PD | (1 << CC115L_IOCFG_GPIO_INV), CC115L_FIFOTHR, 0x47, /* TX FIFO Thresholds */ - CC115L_PKTCTRL0, 0x05, /* Packet Automation Control */ - CC115L_FREQ2, 0x10, /* Frequency Control Word, High Byte */ - CC115L_FREQ1, 0xb6, /* Frequency Control Word, Middle Byte */ - CC115L_FREQ0, 0xa5, /* Frequency Control Word, Low Byte */ - CC115L_MDMCFG4, 0xfa, /* Modem Configuration */ - CC115L_MDMCFG3, 0x83, /* Modem Configuration */ - CC115L_MDMCFG2, 0x13, /* Modem Configuration */ - CC115L_MDMCFG1, 0x21, /* Modem Configuration */ - CC115L_DEVIATN, 0x35, /* Modem Deviation Setting */ - CC115L_MCSM0, 0x18, /* Main Radio Control State Machine Configuration */ + CC115L_MDMCFG1, (0x00 | + (CC115L_MDMCFG1_NUM_PREAMBLE_4 << CC115L_MDMCFG1_NUM_PREAMBLE) | + (1 << CC115L_MDMCFG1_CHANSPC_E)), + CC115L_MDMCFG0, 248, /* Channel spacing M value (100kHz channels) */ + CC115L_MCSM0, 0x38, /* Main Radio Control State Machine Configuration */ CC115L_RESERVED_0X20, 0xfb, /* Use setting from SmartRF Studio */ CC115L_FSCAL3, 0xe9, /* Frequency Synthesizer Calibration */ CC115L_FSCAL2, 0x2a, /* Frequency Synthesizer Calibration */ @@ -448,8 +457,6 @@ static const uint16_t radio_setup[] = { CC115L_TEST2, 0x81, /* Various Test Settings */ CC115L_TEST1, 0x35, /* Various Test Settings */ CC115L_TEST0, 0x09, /* Various Test Settings */ - - CC115L_PA, 0x00, /* Power setting (0dBm) */ }; static uint8_t ao_radio_configured = 0; @@ -505,7 +512,7 @@ ao_radio_get(void) } static void -ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode); +_ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode); #define ao_radio_put() ao_mutex_put(&ao_radio_mutex) @@ -558,10 +565,12 @@ ao_radio_tone_fill(uint8_t *buf, int16_t len) static void ao_radio_tone_run(struct ao_radio_tone *tones, int ntones) { + ao_radio_get(); ao_radio_tone = tones; ao_radio_tone_current = 0; ao_radio_tone_offset = 0; - ao_radio_send_lots(ao_radio_tone_fill, AO_RADIO_MODE_RDF); + _ao_radio_send_lots(ao_radio_tone_fill, AO_RADIO_MODE_RDF); + ao_radio_put(); } void @@ -625,7 +634,7 @@ ao_radio_test_cmd(void) #endif ao_radio_get(); ao_radio_set_len(0xff); - ao_radio_set_mode(AO_RADIO_MODE_PACKET_TX | AO_RADIO_MODE_BITS_FIXED); + ao_radio_set_mode(AO_RADIO_MODE_RDF|AO_RADIO_MODE_BITS_FIXED); ao_radio_strobe(CC115L_SFTX); ao_radio_pa_on(); ao_radio_strobe(CC115L_STX); @@ -707,15 +716,19 @@ ao_radio_send_fill(uint8_t *buf, int16_t len) void ao_radio_send(const void *d, uint8_t size) { + int i; + + ao_radio_get(); ao_radio_send_len = ao_fec_encode(d, size, tx_data); ao_radio_send_buf = tx_data; - ao_radio_send_lots(ao_radio_send_fill, AO_RADIO_MODE_PACKET_TX); + _ao_radio_send_lots(ao_radio_send_fill, AO_RADIO_MODE_PACKET_TX); + ao_radio_put(); } #define AO_RADIO_LOTS 64 static void -ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) +_ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) { uint8_t buf[AO_RADIO_LOTS], *b; int cnt; @@ -724,7 +737,6 @@ ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) uint8_t started = 0; uint8_t fifo_space; - ao_radio_get(); fifo_space = CC115L_FIFO_SIZE; ao_radio_done = 0; ao_radio_fifo = 0; @@ -784,13 +796,14 @@ ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) ao_radio_idle(); ao_radio_wait_done(); ao_radio_pa_off(); - ao_radio_put(); } void ao_radio_send_aprs(ao_radio_fill_func fill) { - ao_radio_send_lots(fill, AO_RADIO_MODE_APRS); + ao_radio_get(); + _ao_radio_send_lots(fill, AO_RADIO_MODE_APRS); + ao_radio_put(); } #if CC115L_DEBUG