Move SPI buffer new (memory allocation) into begin

This commit is contained in:
PaulZC
2021-06-28 10:44:02 +01:00
parent 1d8a635dd2
commit 1e479b9ad3
2 changed files with 24 additions and 11 deletions
+22 -9
View File
@@ -478,10 +478,26 @@ boolean SFE_UBLOX_GNSS::begin(SPIClass &spiPort, uint8_t csPin, uint32_t spiSpee
if (!connected) if (!connected)
connected = isConnected(); connected = isConnected();
// Initialize/clear the SPI buffer - fill it with 0xFF as this is what is received from the UBLOX module if there's no data to be processed //Create the SPI buffer
for (uint8_t i = 0; i < 20; i++) if (spiBuffer == NULL) //Memory has not yet been allocated - so use new
{ {
spiBuffer[i] = 0xFF; spiBuffer = new uint8_t[getSpiTransactionSize()];
}
if (spiBuffer == NULL)
{
if ((_printDebug == true) || (_printLimitedDebug == true)) // This is important. Print this if doing limited debugging
{
_debugSerial->print(F("begin (SPI): memory allocation failed for SPI Buffer!"));
}
}
else
{
// Initialize/clear the SPI buffer - fill it with 0xFF as this is what is received from the UBLOX module if there's no data to be processed
for (uint8_t i = 0; i < getSpiTransactionSize(); i++)
{
spiBuffer[i] = 0xFF;
}
} }
return (connected); return (connected);
@@ -2879,16 +2895,13 @@ void SFE_UBLOX_GNSS::spiTransfer(uint8_t byteToTransfer)
// Send a command via SPI // Send a command via SPI
void SFE_UBLOX_GNSS::sendSpiCommand(ubxPacket *outgoingUBX) void SFE_UBLOX_GNSS::sendSpiCommand(ubxPacket *outgoingUBX)
{ {
if (spiBuffer == NULL) //Memory has not yet been allocated - so use new if (spiBuffer == NULL)
{ {
spiBuffer = new uint8_t[getSpiTransactionSize()];
}
if (spiBuffer == NULL) {
if ((_printDebug == true) || (_printLimitedDebug == true)) // This is important. Print this if doing limited debugging if ((_printDebug == true) || (_printLimitedDebug == true)) // This is important. Print this if doing limited debugging
{ {
_debugSerial->print(F("sendSpiCommand: memory allocation failed for SPI Buffer!")); _debugSerial->print(F("sendSpiCommand: memory allocation failed for SPI Buffer!"));
} }
return;
} }
// Start at the beginning of the SPI buffer // Start at the beginning of the SPI buffer
+2 -2
View File
@@ -495,7 +495,7 @@ enum sfe_ublox_ls_src_e
#endif #endif
// For storing SPI bytes received during sendSpiCommand // For storing SPI bytes received during sendSpiCommand
#define SPI_BUFFER_SIZE 128 #define SFE_UBLOX_SPI_BUFFER_SIZE 128
//-=-=-=-=- UBX binary specific variables //-=-=-=-=- UBX binary specific variables
struct ubxPacket struct ubxPacket
@@ -1316,7 +1316,7 @@ private:
uint8_t *spiBuffer = NULL; // A buffer to store any bytes being recieved back from the device while we are sending via SPI uint8_t *spiBuffer = NULL; // A buffer to store any bytes being recieved back from the device while we are sending via SPI
uint8_t spiBufferIndex = 0; // Index into the SPI buffer uint8_t spiBufferIndex = 0; // Index into the SPI buffer
uint8_t spiTransactionSize = SPI_BUFFER_SIZE; //Default size of the SPI buffer uint8_t spiTransactionSize = SFE_UBLOX_SPI_BUFFER_SIZE; //Default size of the SPI buffer
//Init the packet structures and init them with pointers to the payloadAck, payloadCfg, payloadBuf and payloadAuto arrays //Init the packet structures and init them with pointers to the payloadAck, payloadCfg, payloadBuf and payloadAuto arrays
ubxPacket packetAck = {0, 0, 0, 0, 0, payloadAck, 0, 0, SFE_UBLOX_PACKET_VALIDITY_NOT_DEFINED, SFE_UBLOX_PACKET_VALIDITY_NOT_DEFINED}; ubxPacket packetAck = {0, 0, 0, 0, 0, payloadAck, 0, 0, SFE_UBLOX_PACKET_VALIDITY_NOT_DEFINED, SFE_UBLOX_PACKET_VALIDITY_NOT_DEFINED};