Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
common.cpp@51:090149c4aa28, 2017-01-18 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |