Skip to content

Commit 5c4b81c

Browse files
committed
Refactor sx126x_transfer
1 parent d6a623d commit 5c4b81c

File tree

2 files changed

+17
-28
lines changed

2 files changed

+17
-28
lines changed

src/SX126x_driver.cpp

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -140,40 +140,26 @@ void sx126x_setRxTxFallbackMode(uint8_t fallbackMode)
140140

141141
void 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

151147
void 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

162153
void 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

171159
void 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

179165
void 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
}

src/SX126x_driver.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ void sx126x_fixRxTimeout();
307307
void sx126x_fixInvertedIq(uint8_t invertIq);
308308

309309
// Utilities
310-
void sx126x_transfer(uint8_t opCode, uint8_t* data, uint8_t nBytes);
311-
void sx126x_transfer(uint8_t opCode, uint8_t* data, uint8_t nBytes, uint8_t* address, uint8_t nAddress);
310+
void sx126x_transfer(uint8_t opCode, uint8_t* data, uint8_t nData);
311+
void sx126x_transfer(uint8_t opCode, uint8_t* data, uint8_t nData, uint8_t* address, uint8_t nAddress, bool read);
312312

313313
#endif

0 commit comments

Comments
 (0)