diff --git a/src/shared/radio/CC3135/CC3135.cpp b/src/shared/radio/CC3135/CC3135.cpp index 15680adf1f101411513e6758000405e7ccb6d5d5..536807b1788ee2d7152aca44193b1179ad89d2f3 100644 --- a/src/shared/radio/CC3135/CC3135.cpp +++ b/src/shared/radio/CC3135/CC3135.cpp @@ -49,6 +49,9 @@ CC3135::CC3135(std::unique_ptr<ICC3135Iface> &&iface) : iface(std::move(iface)) CC3135::Error CC3135::init(bool wait_for_init) { + if (iface->is_spi()) + dummyDeviceRead(); + if (wait_for_init) { DeviceInitInfo init_info = {}; @@ -88,6 +91,16 @@ CC3135::Error CC3135::devigeGet(uint8_t set_id, uint8_t option, Buffer result) Buffer::from(&rx_command), result); } +CC3135::Error CC3135::dummyDeviceRead() +{ + ResponseHeader header; + TRY(readHeader(&header)); + + defaultPacketHandler(header); + + return Error::NO_ERROR; +} + CC3135::Error CC3135::setMode(CC3135Defs::Mode mode) { WlanSetMode tx_command = {}; diff --git a/src/shared/radio/CC3135/CC3135.h b/src/shared/radio/CC3135/CC3135.h index 8a569d72efd2ebcc98cb84429ffacbc2cba9595c..e3082b78e0ad74872bd01593f9ce20c12b454242 100644 --- a/src/shared/radio/CC3135/CC3135.h +++ b/src/shared/radio/CC3135/CC3135.h @@ -83,6 +83,9 @@ private: CC3135::Error devigeGet(uint8_t set_id, uint8_t option, Buffer result); + //! Read something from the device, to wake it up? + CC3135::Error dummyDeviceRead(); + // Functions dedicated to interrupt servicing //! Wait for an incoming interrupt (only callable in service thread). diff --git a/src/tests/drivers/CC3135/test-cc3135.cpp b/src/tests/drivers/CC3135/test-cc3135.cpp index f3e2e034b3a3185bf2b3387b70db1f2e6287bd98..f1c137c302572b74651f045f2f62e7278faff7ed 100644 --- a/src/tests/drivers/CC3135/test-cc3135.cpp +++ b/src/tests/drivers/CC3135/test-cc3135.cpp @@ -86,7 +86,7 @@ using irq = Gpio<GPIOA_BASE, 4>; using hib = Gpio<GPIOA_BASE, 6>; #define CC3135_SPI SPI1 -#define CC3135_HIB +// #define CC3135_HIB #endif #endif @@ -190,7 +190,7 @@ int main() GpioPin cs_pin = cs::getPin(); SPIBusConfig config = {}; - config.clockDivider = SPI::ClockDivider::DIV_64; + config.clockDivider = SPI::ClockDivider::DIV_32; config.mode = SPI::Mode::MODE_0; config.bitOrder = SPI::BitOrder::MSB_FIRST; @@ -201,18 +201,16 @@ int main() std::unique_ptr<ICC3135Iface> iface(new CC3135Uart(CC3135_UART)); #endif - Thread::sleep(5000); - printf("[cc3135] Initializing...\n"); cc3135 = new CC3135(std::move(iface)); - cc3135->handleIrq(); + // cc3135->handleIrq(); - if (cc3135->init(true) != CC3135::Error::NO_ERROR) + if (cc3135->init(false) != CC3135::Error::NO_ERROR) { printf("[cc3135] Failed to start cc3135, retrying...\n"); Thread::sleep(2000); - return; + return 0; // miosix::reboot(); }