@@ -140,40 +140,26 @@ void sx126x_setRxTxFallbackMode(uint8_t fallbackMode)
140140
141141void sx126x_writeRegister (uint16_t address, uint8_t * data, uint8_t nData)
142142{
143- uint8_t nBuf = nData + 2 ;
144- uint8_t buf[nBuf];
145- buf[0 ] = address >> 8 ;
146- buf[1 ] = address;
147- for (uint8_t i=0 ; i<nData; i++) buf[i + 2 ] = data[i];
148- sx126x_transfer (0x0D , buf, nBuf);
143+ uint8_t bufAdr[2 ] = {address >> 8 , address};
144+ sx126x_transfer (0x0D , data, nData, bufAdr, 2 , false );
149145}
150146
151147void sx126x_readRegister (uint16_t address, uint8_t * data, uint8_t nData)
152148{
153- uint8_t nBuf = nData + 1 ;
154- uint8_t buf[nBuf];
155- uint8_t addr[2 ];
156- addr[0 ] = address >> 8 ;
157- addr[1 ] = address;
158- sx126x_transfer (0x1D , buf, nBuf, addr, 2 );
159- for (uint8_t i=0 ; i<nData; i++) data[i] = buf[i + 1 ];
149+ uint8_t bufAdr[3 ] = {address >> 8 , address, 0x00 };
150+ sx126x_transfer (0x1D , data, nData, bufAdr, 3 , true );
160151}
161152
162153void sx126x_writeBuffer (uint8_t offset, uint8_t * data, uint8_t nData)
163154{
164- uint8_t nBuf = nData + 1 ;
165- uint8_t buf[nBuf];
166- buf[0 ] = offset;
167- for (uint8_t i=0 ; i<nData; i++) buf[i + 1 ] = data[i];
168- sx126x_transfer (0x0E , buf, nBuf);
155+ uint8_t bufOfs[1 ] = {offset};
156+ sx126x_transfer (0x0E , data, nData, bufOfs, 1 , false );
169157}
170158
171159void sx126x_readBuffer (uint8_t offset, uint8_t * data, uint8_t nData)
172160{
173- uint8_t nBuf = nData + 1 ;
174- uint8_t buf[nBuf];
175- sx126x_transfer (0x1E , buf, nBuf, &offset, 1 );
176- for (uint8_t i=0 ; i<nData; i++) data[i] = buf[i + 1 ];
161+ uint8_t bufOfs[2 ] = {offset, 0x00 };
162+ sx126x_transfer (0x1E , data, nData, bufOfs, 2 , true );
177163}
178164
179165void sx126x_setDioIrqParams (uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask)
@@ -423,20 +409,23 @@ void sx126x_fixInvertedIq(uint8_t invertIq)
423409 sx126x_writeRegister (SX126X_REG_IQ_POLARITY_SETUP, &value, 1 );
424410}
425411
426- void sx126x_transfer (uint8_t opCode, uint8_t * data, uint8_t nBytes )
412+ void sx126x_transfer (uint8_t opCode, uint8_t * data, uint8_t nData )
427413{
428- sx126x_transfer (opCode, data, nBytes , NULL , 0 );
414+ sx126x_transfer (opCode, data, nData , NULL , 0 , true );
429415}
430416
431- void sx126x_transfer (uint8_t opCode, uint8_t * data, uint8_t nBytes , uint8_t * address, uint8_t nAddress)
417+ void sx126x_transfer (uint8_t opCode, uint8_t * data, uint8_t nData , uint8_t * address, uint8_t nAddress, bool read )
432418{
433419 if (sx126x_busyCheck (SX126X_BUSY_TIMEOUT)) return ;
434420
435421 digitalWrite (sx126x_nss, LOW);
436422 sx126x_spi->beginTransaction (SPISettings (sx126x_spiFrequency, MSBFIRST, SPI_MODE0));
437423 sx126x_spi->transfer (opCode);
438424 for (int8_t i=0 ; i<nAddress; i++) sx126x_spi->transfer (address[i]);
439- for (int8_t i=0 ; i<nBytes; i++) data[i] = sx126x_spi->transfer (data[i]);
425+ for (int8_t i=0 ; i<nData; i++) {
426+ if (read) data[i] = sx126x_spi->transfer (data[i]);
427+ else sx126x_spi->transfer (data[i]);
428+ }
440429 sx126x_spi->endTransaction ();
441430 digitalWrite (sx126x_nss, HIGH);
442431}
0 commit comments