X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_cc1120.c;h=133f98036511735474d34a7079c67f74aee6a0a5;hb=452dd07575a118f29a0dfa712deeb18e92ffb1f4;hp=f9fc6b2dc2a5c8fda902869f8887451fb087475e;hpb=2507b9f29d25f77de249103805087a704069c625;p=fw%2Faltos diff --git a/src/drivers/ao_cc1120.c b/src/drivers/ao_cc1120.c index f9fc6b2d..133f9803 100644 --- a/src/drivers/ao_cc1120.c +++ b/src/drivers/ao_cc1120.c @@ -42,8 +42,10 @@ extern const uint32_t ao_radio_cal; #define FOSC 32000000 -#define ao_radio_try_select(task_id) ao_spi_try_get_mask(AO_CC1120_SPI_CS_PORT,(1 << AO_CC1120_SPI_CS_PIN),AO_CC1120_SPI_BUS,AO_SPI_SPEED_4MHz, task_id) -#define ao_radio_select() ao_spi_get_mask(AO_CC1120_SPI_CS_PORT,(1 << AO_CC1120_SPI_CS_PIN),AO_CC1120_SPI_BUS,AO_SPI_SPEED_4MHz) +#define AO_CC1120_SPI_SPEED ao_spi_speed(6100000) /* 6.1MHz max with 32MHz osc */ + +#define ao_radio_try_select(task_id) ao_spi_try_get_mask(AO_CC1120_SPI_CS_PORT,(1 << AO_CC1120_SPI_CS_PIN),AO_CC1120_SPI_BUS,AO_CC1120_SPI_SPEED, task_id) +#define ao_radio_select() ao_spi_get_mask(AO_CC1120_SPI_CS_PORT,(1 << AO_CC1120_SPI_CS_PIN),AO_CC1120_SPI_BUS,AO_CC1120_SPI_SPEED) #define ao_radio_deselect() ao_spi_put_mask(AO_CC1120_SPI_CS_PORT,(1 << AO_CC1120_SPI_CS_PIN),AO_CC1120_SPI_BUS) #define ao_radio_spi_start_bytes() ao_spi_start_bytes(AO_CC1120_SPI_BUS) #define ao_radio_spi_stop_bytes() ao_spi_stop_bytes(AO_CC1120_SPI_BUS) @@ -67,12 +69,12 @@ ao_radio_reg_read(uint16_t addr) data[0] = ((1 << CC1120_READ) | (0 << CC1120_BURST) | CC1120_EXTENDED); - data[1] = addr; + data[1] = (uint8_t) addr; d = 2; } else { data[0] = ((1 << CC1120_READ) | (0 << CC1120_BURST) | - addr); + (uint8_t) addr); d = 1; } ao_radio_select(); @@ -98,12 +100,12 @@ ao_radio_reg_write(uint16_t addr, uint8_t value) data[0] = ((0 << CC1120_READ) | (0 << CC1120_BURST) | CC1120_EXTENDED); - data[1] = addr; + data[1] = (uint8_t) addr; d = 2; } else { data[0] = ((0 << CC1120_READ) | (0 << CC1120_BURST) | - addr); + (uint8_t) addr); d = 1; } data[d] = value; @@ -125,7 +127,7 @@ _ao_radio_burst_read_start (uint16_t addr) addr |= ((1 << CC1120_READ) | (1 << CC1120_BURST)); } - ao_radio_spi_send_byte(addr); + ao_radio_spi_send_byte((uint8_t) addr); } static void @@ -183,9 +185,8 @@ ao_radio_fifo_write_start(void) return status; } -static inline uint8_t ao_radio_fifo_write_stop(uint8_t status) { +static inline void ao_radio_fifo_write_stop(void) { ao_radio_deselect(); - return status; } static uint8_t @@ -193,7 +194,8 @@ ao_radio_fifo_write(uint8_t *data, uint8_t len) { uint8_t status = ao_radio_fifo_write_start(); ao_radio_spi_send(data, len); - return ao_radio_fifo_write_stop(status); + ao_radio_fifo_write_stop(); + return status; } static uint8_t @@ -201,13 +203,14 @@ ao_radio_fifo_write_fixed(uint8_t data, uint8_t len) { uint8_t status = ao_radio_fifo_write_start(); ao_radio_spi_send_fixed(data, len); - return ao_radio_fifo_write_stop(status); + ao_radio_fifo_write_stop(); + return status; } static uint8_t ao_radio_int_pin(void) { - return ao_gpio_get(AO_CC1120_INT_PORT, AO_CC1120_INT_PIN, AO_CC1120_INT); + return ao_gpio_get(AO_CC1120_INT_PORT, AO_CC1120_INT_PIN); } #if CC1120_DEBUG @@ -611,7 +614,7 @@ _ao_radio_set_regs(const uint16_t *regs, int nreg) int i; for (i = 0; i < nreg; i++) { - ao_radio_reg_write(regs[0], regs[1]); + ao_radio_reg_write(regs[0], (uint8_t) regs[1]); regs += 2; } } @@ -626,7 +629,7 @@ 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) { ao_radio_set_regs(packet_setup); @@ -717,13 +720,13 @@ ao_radio_get(uint8_t len) if (!ao_radio_configured) ao_radio_setup(); if (ao_config.radio_setting != last_radio_setting) { - ao_radio_reg_write(CC1120_FREQ2, ao_config.radio_setting >> 16); - ao_radio_reg_write(CC1120_FREQ1, ao_config.radio_setting >> 8); - ao_radio_reg_write(CC1120_FREQ0, ao_config.radio_setting); + ao_radio_reg_write(CC1120_FREQ2, (uint8_t) (ao_config.radio_setting >> 16)); + ao_radio_reg_write(CC1120_FREQ1, (uint8_t) (ao_config.radio_setting >> 8)); + ao_radio_reg_write(CC1120_FREQ0, (uint8_t) (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; + ao_radio_mode &= (uint16_t) ~AO_RADIO_MODE_BITS_PACKET; last_radio_rate = ao_config.radio_rate; } ao_radio_set_len(len); @@ -774,11 +777,10 @@ void ao_radio_continuity(uint8_t c) { uint8_t i; - uint8_t status; ao_rdf_start(AO_RADIO_CONT_TOTAL_LEN); - status = ao_radio_fifo_write_start(); + (void) ao_radio_fifo_write_start(); for (i = 0; i < 3; i++) { ao_radio_spi_send_fixed(0x00, AO_RADIO_CONT_PAUSE_LEN); if (i < c) @@ -787,8 +789,7 @@ ao_radio_continuity(uint8_t c) ao_radio_spi_send_fixed(0x00, AO_RADIO_CONT_TONE_LEN); } ao_radio_spi_send_fixed(0x00, AO_RADIO_CONT_PAUSE_LEN); - status = ao_radio_fifo_write_stop(status); - (void) status; + ao_radio_fifo_write_stop(); ao_rdf_run(); } @@ -806,8 +807,7 @@ ao_radio_test_cmd(void) static uint8_t radio_on; ao_cmd_white(); if (ao_cmd_lex_c != '\n') { - ao_cmd_decimal(); - mode = (uint8_t) ao_cmd_lex_u32; + mode = (uint8_t) ao_cmd_decimal(); } mode++; if ((mode & 2) && !radio_on) { @@ -846,7 +846,7 @@ ao_radio_test_cmd(void) } static void -ao_radio_wait_isr(uint16_t timeout) +ao_radio_wait_isr(AO_TICK_TYPE timeout) { ao_arch_block_interrupts(); while (!ao_radio_wake && !ao_radio_mcu_wake && !ao_radio_abort) @@ -951,12 +951,12 @@ ao_radio_send_aprs(ao_radio_fill_func fill) } if (done) { - ao_radio_set_len(total & 0xff); + ao_radio_set_len((uint8_t) (total & 0xff)); ao_radio_set_mode(AO_RADIO_MODE_APRS_FINISH); } else ao_radio_set_mode(AO_RADIO_MODE_APRS_BUF); - ao_radio_fifo_write(buf, cnt); + ao_radio_fifo_write(buf, (uint8_t) cnt); if (!started) { ao_radio_start_tx(); @@ -1067,7 +1067,7 @@ ao_radio_rx_wait(void) } uint8_t -ao_radio_recv(__xdata void *d, uint8_t size, uint8_t timeout) +ao_radio_recv(void *d, uint8_t size, AO_TICK_TYPE timeout) { uint8_t len; uint8_t radio_rssi = 0; @@ -1084,7 +1084,7 @@ ao_radio_recv(__xdata void *d, uint8_t size, uint8_t timeout) rx_packet_tick = 0; #endif len = size + 2; /* CRC bytes */ - len += 1 + ~(len & 1); /* 1 or two pad bytes */ + len += (uint8_t) (1 + ~(len & 1)); /* 1 or two pad bytes */ len *= 2; /* 1/2 rate convolution */ rx_data_count = len * 8; /* bytes to bits */ rx_data_cur = 0; @@ -1158,7 +1158,7 @@ abort: rssi0 = ao_radio_reg_read(CC1120_RSSI0); if (rssi0 & 1) { - int8_t rssi = ao_radio_reg_read(CC1120_RSSI1); + int8_t rssi = (int8_t) ao_radio_reg_read(CC1120_RSSI1); ao_radio_rssi = rssi; /* Bound it to the representable range */ @@ -1448,7 +1448,9 @@ ao_radio_test_recv(void) static void ao_radio_aprs(void) { +#if PACKET_HAS_SLAVE ao_packet_slave_stop(); +#endif ao_aprs_send(); } #endif