X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_cc115l.c;h=65ab576712043c84a49290af143dbf4d9212c66c;hb=fadb563f8aeeee895a7232bb71fa5bade6ef66f0;hp=9e116d62b91601e961bc6a9c8e7c25fae58c4721;hpb=80a0397dde2f787fb20fd2520b274b826c68ed5a;p=fw%2Faltos diff --git a/src/drivers/ao_cc115l.c b/src/drivers/ao_cc115l.c index 9e116d62..65ab5767 100644 --- a/src/drivers/ao_cc115l.c +++ b/src/drivers/ao_cc115l.c @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -38,7 +39,9 @@ static uint8_t ao_radio_abort; /* radio operation should abort */ #define FOSC 26000000 -#define ao_radio_select() ao_spi_get_mask(AO_CC115L_SPI_CS_PORT,(1 << AO_CC115L_SPI_CS_PIN),AO_CC115L_SPI_BUS,AO_SPI_SPEED_1MHz) +#define AO_CC115L_SPI_SPEED ao_spi_speed(6500000) /* for back-to-back access */ + +#define ao_radio_select() ao_spi_get_mask(AO_CC115L_SPI_CS_PORT,(1 << AO_CC115L_SPI_CS_PIN),AO_CC115L_SPI_BUS,AO_CC115L_SPI_SPEED) #define ao_radio_deselect() ao_spi_put_mask(AO_CC115L_SPI_CS_PORT,(1 << AO_CC115L_SPI_CS_PIN),AO_CC115L_SPI_BUS) #define ao_radio_spi_send(d,l) ao_spi_send((d), (l), AO_CC115L_SPI_BUS) #define ao_radio_spi_send_fixed(d,l) ao_spi_send_fixed((d), (l), AO_CC115L_SPI_BUS) @@ -70,7 +73,7 @@ struct ao_cc115l_trace { const char *comment; }; -#define NUM_TRACE 256 +#define NUM_TRACE 32 static struct ao_cc115l_trace trace[NUM_TRACE]; static int trace_i; @@ -446,22 +449,22 @@ ao_radio_set_mode(uint16_t new_mode) if (new_mode == ao_radio_mode) return; - changes = new_mode & (~ao_radio_mode); + changes = (uint16_t) (new_mode & (~ao_radio_mode)); if (changes & AO_RADIO_MODE_BITS_PACKET_TX) { ao_radio_reg_write(CC115L_MDMCFG4, packet_rate_setup[ao_config.radio_rate].mdmcfg4); ao_radio_reg_write(CC115L_DEVIATN, packet_rate_setup[ao_config.radio_rate].deviatn); for (i = 0; i < sizeof (packet_setup) / sizeof (packet_setup[0]); i += 2) - ao_radio_reg_write(packet_setup[i], packet_setup[i+1]); + ao_radio_reg_write((uint8_t) packet_setup[i], (uint8_t) packet_setup[i+1]); } if (changes & AO_RADIO_MODE_BITS_RDF) for (i = 0; i < sizeof (rdf_setup) / sizeof (rdf_setup[0]); i += 2) - ao_radio_reg_write(rdf_setup[i], rdf_setup[i+1]); + ao_radio_reg_write((uint8_t) rdf_setup[i], (uint8_t) rdf_setup[i+1]); if (changes & AO_RADIO_MODE_BITS_APRS) for (i = 0; i < sizeof (aprs_setup) / sizeof (aprs_setup[0]); i += 2) - ao_radio_reg_write(aprs_setup[i], aprs_setup[i+1]); + ao_radio_reg_write((uint8_t) aprs_setup[i], (uint8_t) aprs_setup[i+1]); if (changes & AO_RADIO_MODE_BITS_INFINITE) ao_radio_reg_write(CC115L_PKTCTRL0, AO_PKTCTRL0_INFINITE); @@ -515,7 +518,13 @@ static uint8_t ao_radio_configured = 0; #if HAS_RADIO_POWER #define RADIO_POWER ao_config.radio_power #else -#define RADIO_POWER 0xc0 + +#if 0 +#define RADIO_POWER 0x03 /* -31.75dBm on the test board */ +#endif + +#define RADIO_POWER 0xc0 /* full power */ + #endif static void @@ -527,7 +536,7 @@ ao_radio_setup(void) ao_delay(AO_MS_TO_TICKS(10)); for (i = 0; i < sizeof (radio_setup) / sizeof (radio_setup[0]); i += 2) - ao_radio_reg_write(radio_setup[i], radio_setup[i+1]); + ao_radio_reg_write((uint8_t) radio_setup[i], (uint8_t) radio_setup[i+1]); ao_radio_mode = 0; @@ -561,15 +570,15 @@ ao_radio_get(void) if (!ao_radio_configured) ao_radio_setup(); if (ao_config.radio_setting != last_radio_setting) { - ao_radio_reg_write(CC115L_FREQ2, ao_config.radio_setting >> 16); - ao_radio_reg_write(CC115L_FREQ1, ao_config.radio_setting >> 8); - ao_radio_reg_write(CC115L_FREQ0, ao_config.radio_setting); + ao_radio_reg_write(CC115L_FREQ2, (uint8_t) (ao_config.radio_setting >> 16)); + ao_radio_reg_write(CC115L_FREQ1, (uint8_t) (ao_config.radio_setting >> 8)); + ao_radio_reg_write(CC115L_FREQ0, (uint8_t) (ao_config.radio_setting)); last_radio_setting = ao_config.radio_setting; /* Make sure the RF calibration is current */ ao_radio_strobe(CC115L_SCAL); } if (ao_config.radio_rate != last_radio_rate) { - ao_radio_mode &= ~AO_RADIO_MODE_BITS_PACKET_TX; + ao_radio_mode &= (uint16_t) ~AO_RADIO_MODE_BITS_PACKET_TX; last_radio_rate = ao_config.radio_rate; } } @@ -589,7 +598,7 @@ uint8_t ao_radio_tone_count; uint8_t ao_radio_tone_current; uint8_t ao_radio_tone_offset; -int16_t +static int16_t ao_radio_tone_fill(uint8_t *buf, int16_t len) { int16_t ret = 0; @@ -605,11 +614,11 @@ ao_radio_tone_fill(uint8_t *buf, int16_t len) this_time = len; /* queue the data */ - memset(buf, t->value, this_time); + memset(buf, t->value, (size_t) this_time); /* mark as sent */ len -= this_time; - ao_radio_tone_offset += this_time; + ao_radio_tone_offset += (uint8_t) this_time; ret += this_time; if (ao_radio_tone_offset >= t->len) { @@ -632,7 +641,7 @@ ao_radio_tone_run(struct ao_radio_tone *tones, int ntones) ao_radio_tone = tones; ao_radio_tone_current = 0; ao_radio_tone_offset = 0; - ao_radio_tone_count = ntones; + ao_radio_tone_count = (uint8_t) ntones; _ao_radio_send_lots(ao_radio_tone_fill, AO_RADIO_MODE_RDF); ao_radio_put(); } @@ -693,10 +702,8 @@ ao_radio_test_cmd(void) uint8_t mode = 2; static uint8_t radio_on; ao_cmd_white(); - if (ao_cmd_lex_c != '\n') { - ao_cmd_decimal(); - mode = (uint8_t) ao_cmd_lex_u32; - } + if (ao_cmd_lex_c != '\n') + mode = (uint8_t) ao_cmd_decimal(); mode++; if ((mode & 2) && !radio_on) { #if HAS_MONITOR @@ -779,7 +786,7 @@ ao_radio_send_fill(uint8_t *buf, int16_t len) this_time = ao_radio_send_len; if (this_time > len) this_time = len; - memcpy(buf, ao_radio_send_buf, this_time); + memcpy(buf, ao_radio_send_buf, (size_t) this_time); ao_radio_send_buf += this_time; ao_radio_send_len -= this_time; if (ao_radio_send_len == 0) @@ -827,7 +834,7 @@ _ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) /* At the last buffer, set the total length */ if (done) { - ao_radio_set_len(total & 0xff); + ao_radio_set_len((uint8_t) (total & 0xff)); ao_radio_set_mode(mode | AO_RADIO_MODE_BITS_FIXED); } else { ao_radio_set_len(0xff); @@ -836,7 +843,7 @@ _ao_radio_send_lots(ao_radio_fill_func fill, uint8_t mode) b = buf; while (cnt) { - uint8_t this_len = cnt; + uint8_t this_len = (uint8_t) cnt; /* Wait for some space in the fifo */ while (!ao_radio_abort && (fifo_space = ao_radio_tx_fifo_space()) == 0) {