IoT - Kubus / Mbed 2 deprecated Kubus

Dependencies:   mbed nRF24L01P

Committer:
sbarzowski
Date:
Wed Jan 18 16:57:05 2017 +0100
Branch:
multipipe
Revision:
51:090149c4aa28
Parent:
49:79d7eddb1f1d
Child:
56:065bd3a75d97
Multipipe

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pannaanna 2:6541a391bdbd 1 #include "common.h"
Bartosz Stebel 8:1861d0eef60a 2 #include <cstring>
sbarzowski 51:090149c4aa28 3 #include <vector>
sbarzowski 51:090149c4aa28 4
sbarzowski 51:090149c4aa28 5 using std::vector;
sbarzowski 51:090149c4aa28 6
sbarzowski 51:090149c4aa28 7 const int pipes[] = {NRF24L01P_PIPE_P1, NRF24L01P_PIPE_P2, NRF24L01P_PIPE_P3, NRF24L01P_PIPE_P4};
sbarzowski 51:090149c4aa28 8 const unsigned long long addresses[] = {0x42424201, 0x42424202, 0x42424203};
pannaanna 2:6541a391bdbd 9
pannaanna 2:6541a391bdbd 10 std::string Data::serialize() {
pannaanna 2:6541a391bdbd 11 std::string serialized;
pannaanna 2:6541a391bdbd 12 serialized.push_back(type);
Bartosz Stebel 8:1861d0eef60a 13 serialized.append((char*)&value, sizeof(value));
pannaanna 2:6541a391bdbd 14 return serialized;
pannaanna 2:6541a391bdbd 15 };
Bartosz Stebel 8:1861d0eef60a 16 bool Data::deserialize(std::string str) {
Bartosz Stebel 8:1861d0eef60a 17 if(str.length() < 1 + sizeof(value)) {
Bartosz Stebel 8:1861d0eef60a 18 return false;
Bartosz Stebel 8:1861d0eef60a 19 }
Bartosz Stebel 8:1861d0eef60a 20 type = str[0];
Bartosz Stebel 8:1861d0eef60a 21 memcpy(&value, str.data() + 1, sizeof(value));
Bartosz Stebel 8:1861d0eef60a 22 return true;
Bartosz Stebel 8:1861d0eef60a 23 }
pannaanna 2:6541a391bdbd 24
pannaanna 37:1251e35fe43e 25 std::string str_hex(const char* text, int len) {
pannaanna 37:1251e35fe43e 26 std::stringstream ss;
Micha? ?azowik 49:79d7eddb1f1d 27
pannaanna 37:1251e35fe43e 28 for (int i = 0; i < len; ++i) {
pannaanna 37:1251e35fe43e 29 ss << std::hex << text[i] / 16 << text[i] % 16; // ugly!
pannaanna 37:1251e35fe43e 30 }
pannaanna 37:1251e35fe43e 31
pannaanna 37:1251e35fe43e 32 return ss.str();
pannaanna 37:1251e35fe43e 33 }
pannaanna 37:1251e35fe43e 34
sbarzowski 51:090149c4aa28 35 void radio_init_sensor_board(nRF24L01P* radio, unsigned long long tx_address) {
pannaanna 2:6541a391bdbd 36 radio->powerDown();
pannaanna 2:6541a391bdbd 37 radio->powerUp();
sbarzowski 40:40d4161fe1ad 38
pannaanna 2:6541a391bdbd 39 radio->setAirDataRate(DATA_RATE);
pannaanna 2:6541a391bdbd 40 radio->setRfOutputPower(POWER);
pannaanna 2:6541a391bdbd 41 radio->setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY + 4 * CHANNEL);
sbarzowski 40:40d4161fe1ad 42
pannaanna 2:6541a391bdbd 43 radio->setCrcWidth(NRF24L01P_CRC_8_BIT);
pannaanna 2:6541a391bdbd 44 radio->enableAutoRetransmit(0x0F, 0x0F);
sbarzowski 40:40d4161fe1ad 45
pannaanna 2:6541a391bdbd 46 radio->setTxAddress(tx_address, 4);
sbarzowski 40:40d4161fe1ad 47
pannaanna 2:6541a391bdbd 48 radio->setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P0);
pannaanna 2:6541a391bdbd 49 radio->setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P1);
sbarzowski 40:40d4161fe1ad 50
pannaanna 2:6541a391bdbd 51 radio->setReceiveMode();
pannaanna 2:6541a391bdbd 52 radio->enable();
pannaanna 2:6541a391bdbd 53 }
sbarzowski 51:090149c4aa28 54
sbarzowski 51:090149c4aa28 55 void radio_init_master(nRF24L01P* radio, const std::vector<unsigned long long> &rx_addresses) {
sbarzowski 51:090149c4aa28 56 radio->powerDown();
sbarzowski 51:090149c4aa28 57 radio->powerUp();
sbarzowski 51:090149c4aa28 58
sbarzowski 51:090149c4aa28 59 radio->setAirDataRate(DATA_RATE);
sbarzowski 51:090149c4aa28 60 radio->setRfOutputPower(POWER);
sbarzowski 51:090149c4aa28 61 radio->setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY + 4 * CHANNEL);
sbarzowski 51:090149c4aa28 62
sbarzowski 51:090149c4aa28 63 radio->setCrcWidth(NRF24L01P_CRC_8_BIT);
sbarzowski 51:090149c4aa28 64 //radio->enableAutoAcknowledge(NRF24L01P_PIPE_P0);
sbarzowski 51:090149c4aa28 65 //radio->enableAutoAcknowledge(NRF24L01P_PIPE_P1);
sbarzowski 51:090149c4aa28 66 radio->enableAutoRetransmit(0x0F, 0x0F);
sbarzowski 51:090149c4aa28 67
sbarzowski 51:090149c4aa28 68 int pipe_nr = 0;
sbarzowski 51:090149c4aa28 69 for (vector<unsigned long long>::const_iterator address = rx_addresses.begin(); address != rx_addresses.end(); ++address) {
sbarzowski 51:090149c4aa28 70 int pipe = pipes[pipe_nr];
sbarzowski 51:090149c4aa28 71 radio->setRxAddress(*address, 4, pipe);
sbarzowski 51:090149c4aa28 72 radio->enableAutoAcknowledge(pipe);
sbarzowski 51:090149c4aa28 73 radio->setTransferSize(TRANSFER_SIZE, pipe);
sbarzowski 51:090149c4aa28 74 ++pipe_nr;
sbarzowski 51:090149c4aa28 75 }
sbarzowski 51:090149c4aa28 76
sbarzowski 51:090149c4aa28 77 // radio->setTxAddress(tx_address, 4);
sbarzowski 51:090149c4aa28 78 // radio->setRxAddress(tx_address, 4, NRF24L01P_PIPE_P0);
sbarzowski 51:090149c4aa28 79 // radio->setRxAddress(rx_address, 4, NRF24L01P_PIPE_P1);
sbarzowski 51:090149c4aa28 80
sbarzowski 51:090149c4aa28 81 // radio->setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P0);
sbarzowski 51:090149c4aa28 82 // radio->setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P1);
sbarzowski 51:090149c4aa28 83
sbarzowski 51:090149c4aa28 84 radio->setReceiveMode();
sbarzowski 51:090149c4aa28 85 radio->enable();
sbarzowski 51:090149c4aa28 86 }