#include "LoRaRadio.h" lmic_pinmap lmic_pins = {0}; LoRaRadio::LoRaRadio(PinMap pinMap, dr_t dataRate, s1_t txPower) :_pinMap(pinMap), _dataRate(dataRate), _txPower(txPower) { lmic_pins.nss = pinMap._nss; lmic_pins.rxtx = pinMap._rxtx; lmic_pins.rst = pinMap._rst; lmic_pins.dio[0] = pinMap._dio[0]; lmic_pins.dio[1] = pinMap._dio[1]; lmic_pins.dio[2] = pinMap._dio[2]; } void LoRaRadio::init() { os_init(); LMIC_reset(); LMIC_setDrTxpow(_dataRate, _txPower); } void LoRaRadio::setMCUClockError(u2_t percent) { LMIC_setClockError(MAX_CLOCK_ERROR * percent / 100); } void LoRaRadio::setTTNSession(u4_t channelId, devaddr_t deviceAddress, xref2u1_t networkSystemKey, xref2u1_t applicationSystemKey, bit_t linkCheckMode) { LMIC_setSession(channelId, deviceAddress, networkSystemKey, applicationSystemKey); LMIC_setLinkCheckMode(linkCheckMode); } void LoRaRadio::setRadioEUChannels() { LMIC_setupChannel(0, 868100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(1, 868300000, DR_RANGE_MAP(DR_SF12, DR_SF7B), BAND_CENTI); // g-band LMIC_setupChannel(2, 868500000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(3, 867100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(4, 867300000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(5, 867500000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(6, 867700000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(7, 867900000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band LMIC_setupChannel(8, 868800000, DR_RANGE_MAP(DR_FSK, DR_FSK), BAND_MILLI); // g2-band LMIC.dn2Dr = DR_SF9; } void LoRaRadio::send(u1_t port, uint8_t *data, uint8_t length, u1_t confirmed) { if (LMIC.opmode & OP_TXRXPEND) { //Serial.println(F("OP_TXRXPEND, not sending")); } else { // Prepare upstream data transmission at the next possible time. LMIC_setTxData2(port, data, length, confirmed); Serial.println("Packet queued"); } } void LoRaRadio::run() { os_runloop_once(); }