diff --git a/drivers/at86rf231/at86rf231.c b/drivers/at86rf231/at86rf231.c index 8812086672..8e73cef889 100644 --- a/drivers/at86rf231/at86rf231.c +++ b/drivers/at86rf231/at86rf231.c @@ -76,7 +76,7 @@ uint16_t at86rf231_set_address(uint16_t address) { radio_address = address; - at86rf231_reg_write(AT86RF231_REG__SHORT_ADDR_0, (uint8_t)(0x0F & radio_address)); + at86rf231_reg_write(AT86RF231_REG__SHORT_ADDR_0, (uint8_t)(0x00FF & radio_address)); at86rf231_reg_write(AT86RF231_REG__SHORT_ADDR_1, (uint8_t)(radio_address >> 8)); return radio_address; @@ -91,14 +91,14 @@ uint64_t at86rf231_set_address_long(uint64_t address) { radio_address_long = address; - at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_0, (uint8_t)(0x0F & radio_address)); - at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_1, (uint8_t)(radio_address >> 8)); - at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_2, (uint8_t)(radio_address >> 16)); - at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_3, (uint8_t)(radio_address >> 24)); - at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_4, (uint8_t)(radio_address >> 32)); - at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_5, (uint8_t)(radio_address >> 40)); - at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_6, (uint8_t)(radio_address >> 48)); - at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_7, (uint8_t)(radio_address >> 56)); + at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_0, (uint8_t)(0x00000000000000FF & radio_address_long)); + at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_1, (uint8_t)(0x000000000000FF00 & radio_address_long >> 8)); + at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_2, (uint8_t)(0x0000000000FF0000 & radio_address_long >> 16)); + at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_3, (uint8_t)(0x00000000FF000000 & radio_address_long >> 24)); + at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_4, (uint8_t)(0x000000FF00000000 & radio_address_long >> 32)); + at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_5, (uint8_t)(0x0000FF0000000000 & radio_address_long >> 40)); + at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_6, (uint8_t)(0x00FF000000000000 & radio_address_long >> 48)); + at86rf231_reg_write(AT86RF231_REG__IEEE_ADDR_7, (uint8_t)(radio_address_long >> 56)); return radio_address_long; } @@ -112,7 +112,7 @@ uint16_t at86rf231_set_pan(uint16_t pan) { radio_pan = pan; - at86rf231_reg_write(AT86RF231_REG__PAN_ID_0, (uint8_t)(0x0F & radio_pan)); + at86rf231_reg_write(AT86RF231_REG__PAN_ID_0, (uint8_t)(0x00FF & radio_pan)); at86rf231_reg_write(AT86RF231_REG__PAN_ID_1, (uint8_t)(radio_pan >> 8)); return radio_pan; @@ -125,6 +125,7 @@ uint16_t at86rf231_get_pan(void) uint8_t at86rf231_set_channel(uint8_t channel) { + uint8_t cca_state; radio_channel = channel; if (channel < RF86RF231_MIN_CHANNEL || @@ -132,7 +133,8 @@ uint8_t at86rf231_set_channel(uint8_t channel) radio_channel = RF86RF231_MAX_CHANNEL; } - at86rf231_reg_write(AT86RF231_REG__PHY_CC_CCA, AT86RF231_PHY_CC_CCA_DEFAULT__CCA_MODE | radio_channel); + cca_state = at86rf231_reg_read(AT86RF231_REG__PHY_CC_CCA); + at86rf231_reg_write(AT86RF231_REG__PHY_CC_CCA, cca_state | (radio_channel & AT86RF231_PHY_CC_CCA_MASK__CHANNEL)); return radio_channel; } @@ -140,11 +142,11 @@ uint8_t at86rf231_set_channel(uint8_t channel) uint8_t at86rf231_get_channel(void) { return radio_channel; - //return at86rf231_reg_read(AT86RF231_REG__PHY_CC_CCA) & 0x0F; } void at86rf231_set_monitor(uint8_t mode) { + (void) mode; // TODO } diff --git a/drivers/at86rf231/include/at86rf231.h b/drivers/at86rf231/include/at86rf231.h index 19d6ee8ede..263469b4b2 100644 --- a/drivers/at86rf231/include/at86rf231.h +++ b/drivers/at86rf231/include/at86rf231.h @@ -6,7 +6,9 @@ #include "ieee802154_frame.h" +#include "at86rf231_arch.h" #include "at86rf231_settings.h" +#include "at86rf231_spi.h" #define AT86RF231_MAX_PKT_LENGTH 127 #define AT86RF231_MAX_DATA_LENGTH 118 diff --git a/drivers/at86rf231/include/at86rf231_arch.h b/drivers/at86rf231/include/at86rf231_arch.h index 0a42c61a73..4e5bfc5c16 100644 --- a/drivers/at86rf231/include/at86rf231_arch.h +++ b/drivers/at86rf231/include/at86rf231_arch.h @@ -3,6 +3,8 @@ #include +#include "vtimer.h" + void at86rf231_gpio_spi_interrupts_init(void); void at86rf231_reset(void); diff --git a/drivers/at86rf231/include/at86rf231_spi.h b/drivers/at86rf231/include/at86rf231_spi.h index 0f3dc4d5ef..74c6a5c20f 100644 --- a/drivers/at86rf231/include/at86rf231_spi.h +++ b/drivers/at86rf231/include/at86rf231_spi.h @@ -6,4 +6,7 @@ uint8_t at86rf231_reg_read(uint8_t addr); void at86rf231_reg_write(uint8_t addr, uint8_t value); +void at86rf231_read_fifo(uint8_t *data, uint8_t length); +void at86rf231_write_fifo(const uint8_t *data, uint8_t length); + #endif diff --git a/sys/transceiver/transceiver.c b/sys/transceiver/transceiver.c index 46ab1a8b5d..1310050ef4 100644 --- a/sys/transceiver/transceiver.c +++ b/sys/transceiver/transceiver.c @@ -55,6 +55,7 @@ #ifdef MODULE_AT86RF231 #include "at86rf231.h" +#include "at86rf231_arch.h" #endif #define ENABLE_DEBUG (0)