projects
/
fw
/
altos
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
aba1703
)
altos: Add 2400 and 9600 baud telemetry support to cc115l driver
author
Keith Packard
<keithp@keithp.com>
Thu, 3 Jul 2014 05:41:20 +0000
(22:41 -0700)
committer
Keith Packard
<keithp@keithp.com>
Sat, 5 Jul 2014 07:38:10 +0000
(
00:38
-0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
src/drivers/ao_cc115l.c
patch
|
blob
|
history
diff --git
a/src/drivers/ao_cc115l.c
b/src/drivers/ao_cc115l.c
index f250e714a98ad5138b5d95ee41d9636613bfe325..b5103f9bec5edb5692f758062f37ce740eea7cc2 100644
(file)
--- a/
src/drivers/ao_cc115l.c
+++ b/
src/drivers/ao_cc115l.c
@@
-269,16
+269,30
@@
ao_radio_idle(void)
* (256 + 131) * (2 ** 10) / (2**28) * 26e6 = 38383
*
* DATARATE_M = 131
* (256 + 131) * (2 ** 10) / (2**28) * 26e6 = 38383
*
* DATARATE_M = 131
- * DATARATE_E = 10
+ * DATARATE_E_384 = 10
+ * DATARATE_E_96 = 8
+ * DATARATE_E_24 = 6
*/
*/
-#define PACKET_DRATE_E 10
-#define PACKET_DRATE_M 131
+#define PACKET_DRATE_M 131
+
+#define PACKET_DRATE_E_384 10
+#define PACKET_DRATE_E_96 8
+#define PACKET_DRATE_E_24 6
+
+static const uint16_t packet_rate_setup[] = {
+ [AO_RADIO_RATE_38400] = ((0xf << 4) |
+ (PACKET_DRATE_E_384 << CC115L_MDMCFG4_DRATE_E)),
+
+ [AO_RADIO_RATE_9600] = ((0xf << 4) |
+ (PACKET_DRATE_E_96 << CC115L_MDMCFG4_DRATE_E)),
+
+ [AO_RADIO_RATE_2400] = ((0xf << 4) |
+ (PACKET_DRATE_E_24 << CC115L_MDMCFG4_DRATE_E)),
+};
static const uint16_t packet_setup[] = {
CC115L_DEVIATN, ((PACKET_DEV_E << CC115L_DEVIATN_DEVIATION_E) |
(PACKET_DEV_M << CC115L_DEVIATN_DEVIATION_M)),
static const uint16_t packet_setup[] = {
CC115L_DEVIATN, ((PACKET_DEV_E << CC115L_DEVIATN_DEVIATION_E) |
(PACKET_DEV_M << CC115L_DEVIATN_DEVIATION_M)),
- 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) |
CC115L_MDMCFG3, (PACKET_DRATE_M),
CC115L_MDMCFG2, (0x00 |
(CC115L_MDMCFG2_MOD_FORMAT_GFSK << CC115L_MDMCFG2_MOD_FORMAT) |
@@
-403,9
+417,12
@@
ao_radio_set_mode(uint16_t new_mode)
return;
changes = new_mode & (~ao_radio_mode);
return;
changes = new_mode & (~ao_radio_mode);
- if (changes & AO_RADIO_MODE_BITS_PACKET_TX)
+ if (changes & AO_RADIO_MODE_BITS_PACKET_TX) {
+ ao_radio_reg_write(CC115L_MDMCFG4, packet_rate_setup[ao_config.radio_rate]);
+
for (i = 0; i < sizeof (packet_setup) / sizeof (packet_setup[0]); i += 2)
ao_radio_reg_write(packet_setup[i], packet_setup[i+1]);
for (i = 0; i < sizeof (packet_setup) / sizeof (packet_setup[0]); i += 2)
ao_radio_reg_write(packet_setup[i], packet_setup[i+1]);
+ }
if (changes & AO_RADIO_MODE_BITS_RDF)
for (i = 0; i < sizeof (rdf_setup) / sizeof (rdf_setup[0]); i += 2)
if (changes & AO_RADIO_MODE_BITS_RDF)
for (i = 0; i < sizeof (rdf_setup) / sizeof (rdf_setup[0]); i += 2)
@@
-494,6
+511,7
@@
static void
ao_radio_get(void)
{
static uint32_t last_radio_setting;
ao_radio_get(void)
{
static uint32_t last_radio_setting;
+ static uint8_t last_radio_rate;
ao_mutex_get(&ao_radio_mutex);
if (!ao_radio_configured)
ao_mutex_get(&ao_radio_mutex);
if (!ao_radio_configured)
@@
-504,6
+522,10
@@
ao_radio_get(void)
ao_radio_reg_write(CC115L_FREQ0, ao_config.radio_setting);
last_radio_setting = ao_config.radio_setting;
}
ao_radio_reg_write(CC115L_FREQ0, ao_config.radio_setting);
last_radio_setting = ao_config.radio_setting;
}
+ if (ao_config.radio_rate != last_radio_rate) {
+ ao_radio_mode &= ~AO_RADIO_MODE_BITS_PACKET_TX;
+ last_radio_rate = ao_config.radio_rate;
+ }
}
static void
}
static void