client version of coap
Dependencies: nRF24L01P cantcoap3
radioWrapper.cpp@2:e8823d9fa162, 2019-01-24 (annotated)
- Committer:
- Ka_myk
- Date:
- Thu Jan 24 16:33:30 2019 +0000
- Revision:
- 2:e8823d9fa162
- Parent:
- 1:1d936c763440
aaaa
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Ka_myk | 0:6a6f97ca5572 | 1 | #include "radioWrapper.h" |
Ka_myk | 0:6a6f97ca5572 | 2 | #include "mbed.h" |
Ka_myk | 2:e8823d9fa162 | 3 | #include "dbg.h" |
Ka_myk | 0:6a6f97ca5572 | 4 | |
Ka_myk | 1:1d936c763440 | 5 | int RadioWrapper::read(uint8_t* buffer, int len, int timeout) { |
Ka_myk | 0:6a6f97ca5572 | 6 | Timer t; |
Ka_myk | 1:1d936c763440 | 7 | t.start(); |
Ka_myk | 0:6a6f97ca5572 | 8 | // check if buffor is large enough to conaint packet. |
Ka_myk | 1:1d936c763440 | 9 | if (len < packetSize()) { |
Ka_myk | 0:6a6f97ca5572 | 10 | return -1; |
Ka_myk | 0:6a6f97ca5572 | 11 | } |
Ka_myk | 2:e8823d9fa162 | 12 | while(t.read_ms() < timeout) { |
Ka_myk | 2:e8823d9fa162 | 13 | if(radio.readable(NRF24L01P_PIPE_P1)) { |
Ka_myk | 2:e8823d9fa162 | 14 | DBG("%d", t.read_ms()); |
Ka_myk | 2:e8823d9fa162 | 15 | uint8_t message[packetSize()]; |
Ka_myk | 2:e8823d9fa162 | 16 | int ret = radio.read(NRF24L01P_PIPE_P1, (char*) message, packetSize()); |
Ka_myk | 2:e8823d9fa162 | 17 | DBG("RECIEVED %d, %s \r\n", ret, buffer); |
Ka_myk | 2:e8823d9fa162 | 18 | t.stop(); |
Ka_myk | 2:e8823d9fa162 | 19 | if(ret>0) { |
Ka_myk | 2:e8823d9fa162 | 20 | uint8_t encodedLen = message[0]; |
Ka_myk | 2:e8823d9fa162 | 21 | std::memcpy(buffer, message+1, encodedLen); |
Ka_myk | 2:e8823d9fa162 | 22 | return encodedLen; |
Ka_myk | 2:e8823d9fa162 | 23 | } else { |
Ka_myk | 2:e8823d9fa162 | 24 | return ret; |
Ka_myk | 2:e8823d9fa162 | 25 | } |
Ka_myk | 2:e8823d9fa162 | 26 | } |
Ka_myk | 0:6a6f97ca5572 | 27 | } |
Ka_myk | 1:1d936c763440 | 28 | t.stop(); |
Ka_myk | 2:e8823d9fa162 | 29 | return 0; |
Ka_myk | 0:6a6f97ca5572 | 30 | } |
Ka_myk | 0:6a6f97ca5572 | 31 | |
Ka_myk | 2:e8823d9fa162 | 32 | int RadioWrapper::write(uint8_t* buffer, uint8_t len) { |
Ka_myk | 2:e8823d9fa162 | 33 | // check if buffor is small enough to send in one package + len |
Ka_myk | 1:1d936c763440 | 34 | if (len > packetSize()) { |
Ka_myk | 0:6a6f97ca5572 | 35 | return -1; |
Ka_myk | 0:6a6f97ca5572 | 36 | } |
Ka_myk | 2:e8823d9fa162 | 37 | |
Ka_myk | 2:e8823d9fa162 | 38 | uint8_t message[packetSize()]; |
Ka_myk | 2:e8823d9fa162 | 39 | message[0] = len; |
Ka_myk | 2:e8823d9fa162 | 40 | std::memcpy(message+1, buffer, len); |
Ka_myk | 2:e8823d9fa162 | 41 | int ret = radio.write(NRF24L01P_PIPE_P0, (char*) message, packetSize()); |
Ka_myk | 0:6a6f97ca5572 | 42 | return ret; |
Ka_myk | 0:6a6f97ca5572 | 43 | } |
Ka_myk | 0:6a6f97ca5572 | 44 | |
Ka_myk | 1:1d936c763440 | 45 | RadioWrapper::RadioWrapper(int channel, unsigned long long rx_address, unsigned long long tx_address) : |
Ka_myk | 2:e8823d9fa162 | 46 | radio(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2) { |
Ka_myk | 0:6a6f97ca5572 | 47 | radio.powerDown(); |
Ka_myk | 0:6a6f97ca5572 | 48 | radio.powerUp(); |
Ka_myk | 0:6a6f97ca5572 | 49 | |
Ka_myk | 0:6a6f97ca5572 | 50 | radio.setAirDataRate(DATA_RATE); |
Ka_myk | 0:6a6f97ca5572 | 51 | radio.setRfOutputPower(POWER); |
Ka_myk | 0:6a6f97ca5572 | 52 | radio.setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY + 4 * channel); |
Ka_myk | 0:6a6f97ca5572 | 53 | |
Ka_myk | 0:6a6f97ca5572 | 54 | radio.setCrcWidth(NRF24L01P_CRC_8_BIT); |
Ka_myk | 0:6a6f97ca5572 | 55 | |
Ka_myk | 0:6a6f97ca5572 | 56 | radio.setTxAddress(tx_address, 4); |
Ka_myk | 2:e8823d9fa162 | 57 | radio.setRxAddress(tx_address, 4, NRF24L01P_PIPE_P0); |
Ka_myk | 2:e8823d9fa162 | 58 | radio.setRxAddress(rx_address, 4, NRF24L01P_PIPE_P1); |
Ka_myk | 0:6a6f97ca5572 | 59 | radio.setTransferSize(packetSize(), NRF24L01P_PIPE_P0); |
Ka_myk | 2:e8823d9fa162 | 60 | radio.setTransferSize(packetSize(), NRF24L01P_PIPE_P1); |
Ka_myk | 2:e8823d9fa162 | 61 | |
Ka_myk | 2:e8823d9fa162 | 62 | radio.setReceiveMode(); |
Ka_myk | 2:e8823d9fa162 | 63 | radio.enable(); |
Ka_myk | 2:e8823d9fa162 | 64 | |
Ka_myk | 2:e8823d9fa162 | 65 | // Display the (default) setup of the nRF24L01+ chip |
Ka_myk | 2:e8823d9fa162 | 66 | DBG( "nRF24L01+ Frequency : %d MHz\r\n", radio.getRfFrequency() ); |
Ka_myk | 2:e8823d9fa162 | 67 | DBG( "nRF24L01+ Output power : %d dBm\r\n", radio.getRfOutputPower() ); |
Ka_myk | 2:e8823d9fa162 | 68 | DBG( "nRF24L01+ Data Rate : %d kbps\r\n", radio.getAirDataRate() ); |
Ka_myk | 2:e8823d9fa162 | 69 | DBG( "nRF24L01+ TX Address : 0x%010llX\r\n", radio.getTxAddress() ); |
Ka_myk | 2:e8823d9fa162 | 70 | DBG( "nRF24L01+ RX0 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P0) ); |
Ka_myk | 2:e8823d9fa162 | 71 | DBG( "nRF24L01+ RX1 Address : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P1) ); |
Ka_myk | 0:6a6f97ca5572 | 72 | } |