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
- Committer:
- sbarzowski
- Date:
- 2017-01-18
- Branch:
- multipipe
- Revision:
- 51:090149c4aa28
- Parent:
- 49:79d7eddb1f1d
- Child:
- 56:065bd3a75d97
File content as of revision 51:090149c4aa28:
#include "common.h"
#include <cstring>
#include <vector>
using std::vector;
const int pipes[] = {NRF24L01P_PIPE_P1, NRF24L01P_PIPE_P2, NRF24L01P_PIPE_P3, NRF24L01P_PIPE_P4};
const unsigned long long addresses[] = {0x42424201, 0x42424202, 0x42424203};
std::string Data::serialize() {
std::string serialized;
serialized.push_back(type);
serialized.append((char*)&value, sizeof(value));
return serialized;
};
bool Data::deserialize(std::string str) {
if(str.length() < 1 + sizeof(value)) {
return false;
}
type = str[0];
memcpy(&value, str.data() + 1, sizeof(value));
return true;
}
std::string str_hex(const char* text, int len) {
std::stringstream ss;
for (int i = 0; i < len; ++i) {
ss << std::hex << text[i] / 16 << text[i] % 16; // ugly!
}
return ss.str();
}
void radio_init_sensor_board(nRF24L01P* radio, unsigned long long tx_address) {
radio->powerDown();
radio->powerUp();
radio->setAirDataRate(DATA_RATE);
radio->setRfOutputPower(POWER);
radio->setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY + 4 * CHANNEL);
radio->setCrcWidth(NRF24L01P_CRC_8_BIT);
radio->enableAutoRetransmit(0x0F, 0x0F);
radio->setTxAddress(tx_address, 4);
radio->setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P0);
radio->setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P1);
radio->setReceiveMode();
radio->enable();
}
void radio_init_master(nRF24L01P* radio, const std::vector<unsigned long long> &rx_addresses) {
radio->powerDown();
radio->powerUp();
radio->setAirDataRate(DATA_RATE);
radio->setRfOutputPower(POWER);
radio->setRfFrequency(NRF24L01P_MIN_RF_FREQUENCY + 4 * CHANNEL);
radio->setCrcWidth(NRF24L01P_CRC_8_BIT);
//radio->enableAutoAcknowledge(NRF24L01P_PIPE_P0);
//radio->enableAutoAcknowledge(NRF24L01P_PIPE_P1);
radio->enableAutoRetransmit(0x0F, 0x0F);
int pipe_nr = 0;
for (vector<unsigned long long>::const_iterator address = rx_addresses.begin(); address != rx_addresses.end(); ++address) {
int pipe = pipes[pipe_nr];
radio->setRxAddress(*address, 4, pipe);
radio->enableAutoAcknowledge(pipe);
radio->setTransferSize(TRANSFER_SIZE, pipe);
++pipe_nr;
}
// radio->setTxAddress(tx_address, 4);
// radio->setRxAddress(tx_address, 4, NRF24L01P_PIPE_P0);
// radio->setRxAddress(rx_address, 4, NRF24L01P_PIPE_P1);
// radio->setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P0);
// radio->setTransferSize(TRANSFER_SIZE, NRF24L01P_PIPE_P1);
radio->setReceiveMode();
radio->enable();
}