@@ -270,6 +270,19 @@ const DFU_BUFFER_INFO dfuBufferInfo[] =
270270};
271271const int dfuBufferInfoCount = sizeof (dfuBufferInfo ) / sizeof (dfuBufferInfo [0 ]);
272272
273+ //----------------------------------------
274+ // Device specific context
275+ //----------------------------------------
276+
277+ typedef struct _DFU_STM32_CONTEXT
278+ {
279+ HardwareSerial * _stm32Serial ; // ESP32 serial port for STM32 communication
280+ } DFU_STM32_CONTEXT ;
281+ #define DFU_STM32_CTX_LEN sizeof(DFU_STM32_CONTEXT)
282+
283+ // Context initialization routines
284+ bool dfuLoRaCtxInit (DEVICE_FIRMWARE_CTX * ctx );
285+
273286//----------------------------------------
274287// Declare the device specific maximum write size
275288//----------------------------------------
@@ -280,20 +293,27 @@ const int dfuBufferInfoCount = sizeof(dfuBufferInfo) / sizeof(dfuBufferInfo[0]);
280293#define DFU_LG290P_BYTES (1 + 1 + 1 + 2 + 4 + DFU_LG290P_MAX_PAYLOAD_SIZE + 4 + 1)
281294#endif // COMPILE_LG290P
282295
296+ // STM32 declarations
297+ #define DFU_STM32_MAX_PAYLOAD_SIZE 256
298+ #define DFU_STM32_BYTES (1 + DFU_STM32_MAX_PAYLOAD_SIZE + 1)
299+
283300//----------------------------------------
284301// Declare the forward device support routines
285302//----------------------------------------
286303
287304// Get firmware version
288305String dfuEsp32GetFirmwareVersion (DEVICE_FIRMWARE_CTX * ctx );
289306String dfuGnssGetFirmwareVersion (DEVICE_FIRMWARE_CTX * ctx );
307+ String dfuLoRaGetFirmwareVersion (DEVICE_FIRMWARE_CTX * ctx );
290308
291309// Device reset
292310bool dfuLg290pReset (DEVICE_FIRMWARE_CTX * ctx , uint32_t currentMsec );
311+ bool dfuLoRaReset (DEVICE_FIRMWARE_CTX * ctx , uint32_t currentMsec );
293312
294313// Device open, prepare for writing firmware
295314bool dfuEsp32Open (DEVICE_FIRMWARE_CTX * ctx );
296315bool dfuLg290pOpen (DEVICE_FIRMWARE_CTX * ctx );
316+ bool dfuStm32Open (DEVICE_FIRMWARE_CTX * ctx );
297317
298318// Device write, perform the firmware update
299319ssize_t dfuEsp32Write (DEVICE_FIRMWARE_CTX * ctx ,
@@ -302,10 +322,14 @@ ssize_t dfuEsp32Write(DEVICE_FIRMWARE_CTX * ctx,
302322ssize_t dfuLg290pWrite (DEVICE_FIRMWARE_CTX * ctx ,
303323 const uint8_t * buffer ,
304324 size_t bytesToWrite );
325+ ssize_t dfuStm32Write (DEVICE_FIRMWARE_CTX * ctx ,
326+ const uint8_t * buffer ,
327+ size_t bytesToWrite );
305328
306329// Device close, finalize the firmware update
307330void dfuEsp32Close (DEVICE_FIRMWARE_CTX * ctx );
308331void dfuLg290pClose (DEVICE_FIRMWARE_CTX * ctx );
332+ void dfuLoRaClose (DEVICE_FIRMWARE_CTX * ctx );
309333
310334// Declare the begin routine
311335bool deviceFirmwareUpdateBegin (bool doAll ,
@@ -327,6 +351,11 @@ const DEVICE_FIRMWARE_INFO deviceFirmwareInfo[] =
327351#ifdef COMPILE_LG290P
328352 {"LG290P" , & present .gnss_lg290p , "/gnss/lg290p" , "LG290P" , ".pkg" , dfuGnssGetFirmwareVersion , dfuLg290pReset , dfuLg290pOpen , dfuLg290pWrite , dfuLg290pClose , nullptr , 0 , true, false, DFU_LG290P_BYTES , DFU_LG290P_MAX_PAYLOAD_SIZE , dfuGithub , dfuRawHead , dfuFileTree , dfuItems , dfuListEnd , dfuName , dfuNameEnd , dfuRawHead },
329353#endif // COMPILE_LG290P
354+
355+ // LoRa devices
356+ #ifdef COMPILE_LORA
357+ {"LoRa" , & present .radio_lora , "/lora/stm32wl" , "LoRa_" , ".bin" , dfuLoRaGetFirmwareVersion , dfuLoRaReset , dfuStm32Open , dfuStm32Write , dfuLoRaClose , dfuLoRaCtxInit , DFU_STM32_CTX_LEN , false, false, DFU_STM32_BYTES , DFU_STM32_MAX_PAYLOAD_SIZE , dfuGithub , dfuRawHead , dfuFileTree , dfuItems , dfuListEnd , dfuName , dfuNameEnd , dfuRawHead },
358+ #endif // COMPILE_LORA
330359};
331360const int deviceFirmwareInfoCount = sizeof (deviceFirmwareInfo ) / sizeof (deviceFirmwareInfo [0 ]);
332361
0 commit comments