1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153 |
- #if MUTEX==1
- void CreateMutux(int *mutex) {
- *mutex=1;
- }
- #define LIB_MUTEX 1
- #if LIB_MUTEX==1
- bool GetMutex(int *mutex) {
-
- if (*mutex==1) {
- *mutex=0;
-
- return(true);
- }
-
- return(false);
- }
- #else
- bool GetMutex(int *mutex) {
- int iOld = 1, iNew = 0;
- asm volatile (
- "rsil a15, 1\n"
- "l32i %0, %1, 0\n"
- "bne %0, %2, 1f\n"
- "s32i %3, %1, 0\n"
- "1:\n"
- "wsr.ps a15\n"
- "rsync\n"
- : "=&r" (iOld)
- : "r" (mutex), "r" (iOld), "r" (iNew)
- : "a15", "memory"
- );
- return (bool)iOld;
- }
- #endif
- void ReleaseMutex(int *mutex) {
- *mutex=1;
- }
-
- #endif
- SPISettings readSettings(SPISPEED, MSBFIRST, SPI_MODE0);
- uint8_t readRegister(uint8_t addr)
- {
- SPI.beginTransaction(readSettings);
- digitalWrite(pins.ss, LOW);
- SPI.transfer(addr & 0x7F);
- uint8_t res = (uint8_t) SPI.transfer(0x00);
- digitalWrite(pins.ss, HIGH);
- SPI.endTransaction();
- return((uint8_t) res);
- }
- SPISettings writeSettings(SPISPEED, MSBFIRST, SPI_MODE0);
- void writeRegister(uint8_t addr, uint8_t value)
- {
- SPI.beginTransaction(writeSettings);
- digitalWrite(pins.ss, LOW);
-
- SPI.transfer((addr | 0x80) & 0xFF);
- SPI.transfer(value & 0xFF);
-
- digitalWrite(pins.ss, HIGH);
-
- SPI.endTransaction();
- }
- void writeBuffer(uint8_t addr, uint8_t *buf, uint8_t len)
- {
-
-
- SPI.beginTransaction(writeSettings);
- digitalWrite(pins.ss, LOW);
-
- SPI.transfer((addr | 0x80) & 0xFF);
- for (uint8_t i=0; i<len; i++) {
- SPI.transfer(buf[i] & 0xFF);
- }
- digitalWrite(pins.ss, HIGH);
-
- SPI.endTransaction();
- }
- void setRate(uint8_t sf, uint8_t crc)
- {
- uint8_t mc1=0, mc2=0, mc3=0;
- #if DUSB>=2
- if ((sf<SF7) || (sf>SF12)) {
- if (( debug>=1 ) && ( pdebug & P_RADIO )) {
- Serial.print(F("setRate:: SF="));
- Serial.println(sf);
- }
- return;
- }
- #endif
-
- if (sx1272) {
- mc1= 0x0A;
- mc2= ((sf<<4) | crc) % 0xFF;
-
- if (sf == SF11 || sf == SF12) {
- mc1= 0x0B;
- }
- }
-
-
- else {
- uint8_t bw = 0;
- uint8_t cr = 0;
-
-
- if (sf==SF8) {
- mc1= 0x78;
- }
- else {
- mc1= 0x72;
- }
- mc2= ((sf<<4) | crc) & 0xFF;
- mc3= 0x04;
- if (sf == SF11 || sf == SF12) { mc3|= 0x08; }
- }
-
-
-
-
-
-
-
- writeRegister(REG_MODEM_CONFIG1, (uint8_t) mc1);
- writeRegister(REG_MODEM_CONFIG2, (uint8_t) mc2);
- writeRegister(REG_MODEM_CONFIG3, (uint8_t) mc3);
-
-
- if (sf == SF10 || sf == SF11 || sf == SF12) {
- writeRegister(REG_SYMB_TIMEOUT_LSB, (uint8_t) 0x05);
- } else {
- writeRegister(REG_SYMB_TIMEOUT_LSB, (uint8_t) 0x08);
- }
- return;
- }
- void setFreq(uint32_t freq)
- {
-
- uint64_t frf = ((uint64_t)freq << 19) / 32000000;
- writeRegister(REG_FRF_MSB, (uint8_t)(frf>>16) );
- writeRegister(REG_FRF_MID, (uint8_t)(frf>> 8) );
- writeRegister(REG_FRF_LSB, (uint8_t)(frf>> 0) );
-
- return;
- }
- void setPow(uint8_t powe)
- {
- if (powe >= 16) powe = 15;
-
- else if (powe < 2) powe =2;
-
- ASSERT((powe>=2)&&(powe<=15));
-
- uint8_t pac = (0x80 | (powe & 0xF)) & 0xFF;
- writeRegister(REG_PAC, (uint8_t)pac);
-
-
-
- return;
- }
- void opmode(uint8_t mode)
- {
- if (mode == OPMODE_LORA)
- writeRegister(REG_OPMODE, (uint8_t) mode);
- else
- writeRegister(REG_OPMODE, (uint8_t)((readRegister(REG_OPMODE) & ~OPMODE_MASK) | mode));
- }
- void hop() {
-
- opmode(OPMODE_STANDBY);
-
-
- ifreq = (ifreq + 1) % NUM_HOPS ;
- setFreq(freqs[ifreq].upFreq);
-
-
- sf = SF7;
- setRate(sf, 0x40);
-
-
- writeRegister(REG_LNA, (uint8_t) LNA_MAX_GAIN);
-
-
- writeRegister(REG_SYNC_WORD, (uint8_t) 0x34);
-
-
- writeRegister(REG_INVERTIQ,0x27);
-
-
-
- writeRegister(REG_MAX_PAYLOAD_LENGTH,MAX_PAYLOAD_LENGTH);
- writeRegister(REG_PAYLOAD_LENGTH,PAYLOAD_LENGTH);
-
- writeRegister(REG_FIFO_ADDR_PTR, (uint8_t) readRegister(REG_FIFO_RX_BASE_AD));
- writeRegister(REG_HOP_PERIOD,0x00);
-
- writeRegister(REG_PARAMP, (readRegister(REG_PARAMP) & 0xF0) | 0x08);
-
-
- writeRegister(REG_PADAC_SX1276, 0x84);
-
-
-
- writeRegister(REG_IRQ_FLAGS_MASK, 0x00);
-
-
- writeRegister(REG_IRQ_FLAGS, 0xFF);
-
-
-
-
- #if DUSB>=1
- if (( debug>=2 ) && ( pdebug & P_RADIO )){
- Serial.print(F("hop:: hopTime:: "));
- Serial.print(micros() - hopTime);
- Serial.print(F(", "));
- SerialStat(0);
- }
- #endif
-
- hopTime = micros();
- }
-
- uint8_t receivePkt(uint8_t *payload)
- {
- uint8_t irqflags = readRegister(REG_IRQ_FLAGS);
- statc.msg_ttl++;
- uint8_t crcUsed = readRegister(REG_HOP_CHANNEL);
- if (crcUsed & 0x40) {
- #if DUSB>=1
- if (( debug>=2) && (pdebug & P_RX )) {
- Serial.println(F("R rxPkt:: CRC used"));
- }
- #endif
- }
-
-
- if (irqflags & IRQ_LORA_CRCERR_MASK)
- {
- #if DUSB>=1
- if (( debug>=0) && ( pdebug & P_RADIO )) {
- Serial.print(F("rxPkt:: Err CRC, ="));
- SerialTime();
- Serial.println();
- }
- #endif
- return 0;
- }
-
-
-
-
- else if ((irqflags & IRQ_LORA_HEADER_MASK) == false)
- {
- #if DUSB>=1
- if (( debug>=0) && ( pdebug & P_RADIO )) {
- Serial.println(F("rxPkt:: Err HEADER"));
- }
- #endif
-
- writeRegister(REG_IRQ_FLAGS, (uint8_t)(IRQ_LORA_HEADER_MASK | IRQ_LORA_RXDONE_MASK));
- return 0;
- }
-
-
-
- else {
- statc.msg_ok++;
- switch(statr[0].ch) {
- case 0: statc.msg_ok_0++; break;
- case 1: statc.msg_ok_1++; break;
- case 2: statc.msg_ok_2++; break;
- }
- if (readRegister(REG_FIFO_RX_CURRENT_ADDR) != readRegister(REG_FIFO_RX_BASE_AD)) {
- if (( debug>=0 ) && ( pdebug & P_RADIO )) {
- Serial.print(F("RX BASE <"));
- Serial.print(readRegister(REG_FIFO_RX_BASE_AD));
- Serial.print(F("> != RX CURRENT <"));
- Serial.print(readRegister(REG_FIFO_RX_CURRENT_ADDR));
- Serial.print(F(">"));
- Serial.println();
- }
- }
-
-
- uint8_t currentAddr = readRegister(REG_FIFO_RX_BASE_AD);
- uint8_t receivedCount = readRegister(REG_RX_NB_BYTES);
- #if DUSB>=1
- if ((debug>=0) && (currentAddr > 64)) {
- Serial.print(F("rxPkt:: Rx addr>64"));
- Serial.println(currentAddr);
- }
- #endif
- writeRegister(REG_FIFO_ADDR_PTR, (uint8_t) currentAddr);
- if (receivedCount > PAYLOAD_LENGTH) {
- #if DUSB>=1
- if (( debug>=0 ) & ( pdebug & P_RADIO )) {
- Serial.print(F("rxPkt:: receivedCount="));
- Serial.println(receivedCount);
- }
- #endif
- receivedCount=PAYLOAD_LENGTH;
- }
- for(int i=0; i < receivedCount; i++)
- {
- payload[i] = readRegister(REG_FIFO);
- }
- writeRegister(REG_IRQ_FLAGS, (uint8_t) 0xFF);
-
-
-
- #if DUSB>=1
- if (( debug>=0 ) && ( pdebug & P_RX )){
-
- Serial.print(F("rxPkt:: t="));
- SerialTime();
-
- Serial.print(F(", f="));
- Serial.print(ifreq);
- Serial.print(F(", sf="));
- Serial.print(sf);
- Serial.print(F(", a="));
- if (payload[4]<0x10) Serial.print('0'); Serial.print(payload[4], HEX);
- if (payload[3]<0x10) Serial.print('0'); Serial.print(payload[3], HEX);
- if (payload[2]<0x10) Serial.print('0'); Serial.print(payload[2], HEX);
- if (payload[1]<0x10) Serial.print('0'); Serial.print(payload[1], HEX);
- Serial.print(F(", flags="));
- Serial.print(irqflags,HEX);
- Serial.print(F(", addr="));
- Serial.print(currentAddr);
- Serial.print(F(", len="));
- Serial.print(receivedCount);
-
-
- if (debug>=1) {
- #if _TRUSTED_DECODE==2
- int index;
- String response="";
- uint8_t data[receivedCount];
-
- uint8_t DevAddr [4];
- DevAddr[0] = payload[4];
- DevAddr[1] = payload[3];
- DevAddr[2] = payload[2];
- DevAddr[3] = payload[1];
-
- if ((index = inDecodes((char *)(payload+1))) >=0 ) {
- Serial.print(F(", Ind="));
- Serial.print(index);
-
- }
- else if (debug>=1) {
- Serial.print(F(", No Index"));
- Serial.println();
- return(receivedCount);
- }
-
-
- Serial.print(F(", data="));
- for (int i=0; i<receivedCount; i++) { data[i] = payload[i]; }
-
-
-
-
-
-
- uint16_t frameCount=payload[7]*256 + payload[6];
-
-
-
- uint8_t CodeLength = encodePacket((uint8_t *)(data + 9), receivedCount-9-4, (uint16_t)frameCount, DevAddr, decodes[index].appKey, 0);
- Serial.print(F("- NEW fc="));
- Serial.print(frameCount);
- Serial.print(F(", addr="));
-
- for (int i=0; i<4; i++) {
- if (DevAddr[i]<=0xF) Serial.print('0');
- Serial.print(DevAddr[i], HEX);
- Serial.print(' ');
- }
-
- Serial.print(F(", len="));
- Serial.print(CodeLength);
- Serial.print(F(", data="));
- for (int i=0; i<receivedCount; i++) {
- if (data[i]<=0xF) Serial.print('0');
- Serial.print(data[i], HEX);
- Serial.print(' ');
- }
- #endif
- }
-
- Serial.println();
-
- if (debug>=2) Serial.flush();
- }
- #endif
- return(receivedCount);
- }
- writeRegister(REG_IRQ_FLAGS, (uint8_t) (
- IRQ_LORA_RXDONE_MASK |
- IRQ_LORA_RXTOUT_MASK |
- IRQ_LORA_HEADER_MASK |
- IRQ_LORA_CRCERR_MASK));
- return 0;
- }
-
-
-
- bool sendPkt(uint8_t *payLoad, uint8_t payLength)
- {
- #if DUSB>=2
- if (payLength>=128) {
- if (debug>=1) {
- Serial.print("sendPkt:: len=");
- Serial.println(payLength);
- }
- return false;
- }
- #endif
- writeRegister(REG_FIFO_ADDR_PTR, (uint8_t) readRegister(REG_FIFO_TX_BASE_AD));
-
- writeRegister(REG_PAYLOAD_LENGTH, (uint8_t) payLength);
- payLoad[payLength] = 0x00;
- writeBuffer(REG_FIFO, (uint8_t *) payLoad, payLength);
- return true;
- }
- void loraWait(const uint32_t timestamp)
- {
- uint32_t startMics = micros();
- uint32_t tmst = timestamp;
- int32_t adjust=0;
- switch (LoraDown.sfTx) {
- case 7: adjust= 60000; break;
- case 8: break;
- case 9: break;
- case 10: break;
- case 11: break;
- case 12: break;
- default:
- #if DUSB>=1
- if (( debug>=1 ) && ( pdebug & P_TX )) {
- Serial.print(F("T loraWait:: unknown SF="));
- Serial.print(LoraDown.sfTx);
- }
- #endif
- break;
- }
- tmst = tmst + txDelay + adjust;
- uint32_t waitTime = tmst - micros();
- if (micros()>tmst) {
- Serial.println(F("loraWait:: Error wait time < 0"));
- return;
- }
-
-
-
- while (waitTime > 16000) {
- delay(15);
- waitTime= tmst - micros();
- }
-
-
- if (waitTime>0) delayMicroseconds(waitTime);
- #if DUSB>=1
- else if ((waitTime+20) < 0) {
- Serial.println(F("loraWait:: TOO LATE"));
- }
- if (( debug>=2 ) && ( pdebug & P_TX )) {
- Serial.print(F("T start: "));
- Serial.print(startMics);
- Serial.print(F(", tmst: "));
- Serial.print(tmst);
- Serial.print(F(", end: "));
- Serial.print(micros());
- Serial.print(F(", waited: "));
- Serial.print(tmst - startMics);
- Serial.print(F(", delay="));
- Serial.print(txDelay);
- Serial.println();
- if (debug>=2) Serial.flush();
- }
- #endif
- }
- void txLoraModem(
- uint8_t *payLoad,
- uint8_t payLength,
- uint32_t tmst,
- uint8_t sfTx,
- uint8_t powe,
- uint32_t freq,
- uint8_t crc,
- uint8_t iiq
- )
- {
- #if DUSB>=2
- if (debug>=1) {
-
- Serial.print(F("txLoraModem::"));
- Serial.print(F(" powe: ")); Serial.print(powe);
- Serial.print(F(", freq: ")); Serial.print(freq);
- Serial.print(F(", crc: ")); Serial.print(crc);
- Serial.print(F(", iiq: 0X")); Serial.print(iiq,HEX);
- Serial.println();
- if (debug>=2) Serial.flush();
- }
- #endif
- _state = S_TX;
-
-
-
-
-
- ASSERT((readRegister(REG_OPMODE) & OPMODE_LORA) != 0);
-
-
- opmode(OPMODE_STANDBY);
-
-
- setRate(sfTx, crc);
-
-
-
-
-
- setFreq(freq);
-
- setPow(powe);
-
-
- writeRegister(REG_INVERTIQ, (uint8_t) iiq);
-
-
- writeRegister(REG_DIO_MAPPING_1, (uint8_t)(
- MAP_DIO0_LORA_TXDONE |
- MAP_DIO1_LORA_NOP |
- MAP_DIO2_LORA_NOP |
- MAP_DIO3_LORA_CRC));
-
-
- writeRegister(REG_IRQ_FLAGS, (uint8_t) 0xFF);
-
-
- writeRegister(REG_IRQ_FLAGS_MASK, (uint8_t) ~IRQ_LORA_TXDONE_MASK);
-
-
- opmode(OPMODE_FSTX);
-
-
- sendPkt(payLoad, payLength);
-
- loraWait(tmst);
-
-
- writeRegister(REG_FIFO_ADDR_PTR, (uint8_t) readRegister(REG_FIFO_TX_BASE_AD));
-
-
- writeRegister(REG_PAYLOAD_LENGTH, (uint8_t) payLength);
-
-
- writeRegister(REG_MAX_PAYLOAD_LENGTH, (uint8_t) MAX_PAYLOAD_LENGTH);
-
-
- writeRegister(REG_IRQ_FLAGS_MASK, (uint8_t) 0x00);
- writeRegister(REG_IRQ_FLAGS, (uint8_t) IRQ_LORA_TXDONE_MASK);
-
-
- opmode(OPMODE_TX);
-
- }
- void rxLoraModem()
- {
-
-
-
-
- opmode(OPMODE_STANDBY);
-
-
- setFreq(freqs[ifreq].upFreq);
-
- setRate(sf, 0x04);
-
-
- writeRegister(REG_INVERTIQ, (uint8_t) 0x27);
-
-
-
-
-
-
-
-
-
- writeRegister(REG_FIFO_ADDR_PTR, (uint8_t) readRegister(REG_FIFO_RX_BASE_AD));
-
-
- writeRegister(REG_LNA, (uint8_t) LNA_MAX_GAIN);
-
-
- writeRegister(REG_IRQ_FLAGS_MASK, (uint8_t) ~(
- IRQ_LORA_RXDONE_MASK |
- IRQ_LORA_RXTOUT_MASK |
- IRQ_LORA_HEADER_MASK |
- IRQ_LORA_CRCERR_MASK));
-
- if (_hop) {
-
- writeRegister(REG_HOP_PERIOD,0x00);
- }
- else {
- writeRegister(REG_HOP_PERIOD,0x00);
- }
-
- writeRegister(REG_DIO_MAPPING_1, (uint8_t)(
- MAP_DIO0_LORA_RXDONE |
- MAP_DIO1_LORA_RXTOUT |
- MAP_DIO2_LORA_NOP |
- MAP_DIO3_LORA_CRC));
-
-
- if (_cad) {
-
-
- _state= S_RX;
- opmode(OPMODE_RX_SINGLE);
- }
- else {
-
- _state= S_RX;
- if (_hop) Serial.println(F("rxLoraModem:: ERROR continuous receive in hop mode"));
- opmode(OPMODE_RX);
- }
-
-
- writeRegister(REG_IRQ_FLAGS, 0xFF);
-
- return;
- }
- void cadScanner()
- {
-
-
-
-
- opmode(OPMODE_STANDBY);
-
-
- setFreq(freqs[ifreq].upFreq);
-
-
-
-
- setRate(sf, 0x04);
-
-
- writeRegister(REG_SYNC_WORD, (uint8_t) 0x34);
-
-
- writeRegister(REG_DIO_MAPPING_1, (uint8_t)(
- MAP_DIO0_LORA_CADDONE |
- MAP_DIO1_LORA_CADDETECT |
- MAP_DIO2_LORA_NOP |
- MAP_DIO3_LORA_CRC ));
-
-
- writeRegister(REG_IRQ_FLAGS_MASK, (uint8_t) ~(
- IRQ_LORA_CDDONE_MASK |
- IRQ_LORA_CDDETD_MASK |
- IRQ_LORA_CRCERR_MASK |
- IRQ_LORA_HEADER_MASK));
-
-
- opmode(OPMODE_CAD);
-
-
-
-
-
- return;
-
- }
- void initLoraModem(
- )
- {
- _state = S_INIT;
- #if ESP32_ARCH==1
- digitalWrite(pins.rst, LOW);
- delayMicroseconds(10000);
- digitalWrite(pins.rst, HIGH);
- delayMicroseconds(10000);
- digitalWrite(pins.ss, HIGH);
- #if DUSB>=1
- #endif
- #else
-
- digitalWrite(pins.rst, HIGH);
- delayMicroseconds(10000);
- digitalWrite(pins.rst, LOW);
- delayMicroseconds(10000);
- #endif
-
- opmode(OPMODE_SLEEP);
-
- opmode(OPMODE_LORA);
-
-
- setFreq(freqs[ifreq].upFreq);
-
-
- setRate(sf, 0x04);
-
-
- writeRegister(REG_LNA, (uint8_t) LNA_MAX_GAIN);
- #if _PIN_OUT==4
- delay(1);
- #endif
- uint8_t version = readRegister(REG_VERSION);
- if (version == 0x22) {
-
- #if DUSB>=2
- Serial.println(F("WARNING:: SX1272 detected"));
- #endif
- sx1272 = true;
- }
-
- else if (version == 0x12) {
-
- #if DUSB>=2
- if (debug >=1)
- Serial.println(F("SX1276 starting"));
- #endif
- sx1272 = false;
- }
- else {
-
-
-
-
- #if DUSB>=1
- Serial.print(F("Unknown transceiver="));
- Serial.print(version,HEX);
- Serial.print(F(", pins.rst =")); Serial.print(pins.rst);
- Serial.print(F(", pins.ss =")); Serial.print(pins.ss);
- Serial.print(F(", pins.dio0 =")); Serial.print(pins.dio0);
- Serial.print(F(", pins.dio1 =")); Serial.print(pins.dio1);
- Serial.print(F(", pins.dio2 =")); Serial.print(pins.dio2);
- Serial.println();
- Serial.flush();
- #endif
- die("");
- }
-
-
-
- writeRegister(REG_SYNC_WORD, (uint8_t) 0x34);
-
-
- writeRegister(REG_INVERTIQ,0x27);
-
-
-
- writeRegister(REG_MAX_PAYLOAD_LENGTH,MAX_PAYLOAD_LENGTH);
- writeRegister(REG_PAYLOAD_LENGTH,PAYLOAD_LENGTH);
-
- writeRegister(REG_FIFO_ADDR_PTR, (uint8_t) readRegister(REG_FIFO_RX_BASE_AD));
- writeRegister(REG_HOP_PERIOD,0x00);
-
- writeRegister(REG_PARAMP, (readRegister(REG_PARAMP) & 0xF0) | 0x08);
-
-
- writeRegister(REG_PADAC_SX1276, 0x84);
-
-
-
- writeRegister(REG_IRQ_FLAGS_MASK, 0x00);
-
-
- writeRegister(REG_IRQ_FLAGS, 0xFF);
- }
- void startReceiver() {
- initLoraModem();
- if (_cad) {
- #if DUSB>=1
- if (( debug>=1 ) && ( pdebug & P_SCAN )) {
- Serial.println(F("S PULL:: _state set to S_SCAN"));
- if (debug>=2) Serial.flush();
- }
- #endif
- _state = S_SCAN;
- sf = SF7;
- cadScanner();
- }
- else {
- _state = S_RX;
- rxLoraModem();
- }
- writeRegister(REG_IRQ_FLAGS_MASK, (uint8_t) 0x00);
- writeRegister(REG_IRQ_FLAGS, 0xFF);
- }
- void ICACHE_RAM_ATTR Interrupt_0()
- {
- _event=1;
- }
- void ICACHE_RAM_ATTR Interrupt_1()
- {
- _event=1;
- }
- void ICACHE_RAM_ATTR Interrupt_2()
- {
- _event=1;
- }
|