firmware update wip
This commit is contained in:
parent
bae1ea7c97
commit
4edbbf223c
@ -269,8 +269,11 @@ class StarTrackerHandler : public DeviceHandlerBase {
|
|||||||
// Countdown to insert delay for star tracker to switch from bootloader to firmware program
|
// Countdown to insert delay for star tracker to switch from bootloader to firmware program
|
||||||
Countdown bootCountdown;
|
Countdown bootCountdown;
|
||||||
|
|
||||||
std::string paramJsonFile = "/mnt/sd0/startracker/full.json";
|
#if OBSW_STAR_TRACKER_GROUND_CONFIG == 1
|
||||||
|
std::string paramJsonFile = "/mnt/sd0/startracker/ground-config.json";
|
||||||
|
#else
|
||||||
|
std::string paramJsonFile = "/mnt/sd0/startracker/flight-config.json";
|
||||||
|
#endif
|
||||||
enum class InternalState { TEMPERATURE_REQUEST };
|
enum class InternalState { TEMPERATURE_REQUEST };
|
||||||
|
|
||||||
InternalState internalState = InternalState::TEMPERATURE_REQUEST;
|
InternalState internalState = InternalState::TEMPERATURE_REQUEST;
|
||||||
|
@ -48,16 +48,6 @@ ReturnValue_t StrHelper::performOperation(uint8_t operationCode) {
|
|||||||
internalState = InternalState::IDLE;
|
internalState = InternalState::IDLE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case InternalState::FLASH_WRITE: {
|
|
||||||
result = performFlashWrite();
|
|
||||||
if (result == RETURN_OK) {
|
|
||||||
triggerEvent(FLASH_WRITE_SUCCESSFUL);
|
|
||||||
} else {
|
|
||||||
triggerEvent(FLASH_WRITE_FAILED);
|
|
||||||
}
|
|
||||||
internalState = InternalState::IDLE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case InternalState::FLASH_READ: {
|
case InternalState::FLASH_READ: {
|
||||||
result = performFlashRead();
|
result = performFlashRead();
|
||||||
if (result == RETURN_OK) {
|
if (result == RETURN_OK) {
|
||||||
@ -88,6 +78,16 @@ ReturnValue_t StrHelper::performOperation(uint8_t operationCode) {
|
|||||||
internalState = InternalState::IDLE;
|
internalState = InternalState::IDLE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case InternalState::FIRMWARE_UPDATE: {
|
||||||
|
result = performFirmwareUpdate();
|
||||||
|
if (result == RETURN_OK) {
|
||||||
|
triggerEvent(FIRMWARE_UPDATE_SUCCESSFUL);
|
||||||
|
} else {
|
||||||
|
triggerEvent(FIRMWARE_UPDATE_FAILED);
|
||||||
|
}
|
||||||
|
internalState = InternalState::IDLE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
sif::debug << "StrHelper::performOperation: Invalid state" << std::endl;
|
sif::debug << "StrHelper::performOperation: Invalid state" << std::endl;
|
||||||
break;
|
break;
|
||||||
@ -144,7 +144,7 @@ void StrHelper::setFlashReadFilename(std::string filename) { flashRead.filename
|
|||||||
|
|
||||||
void StrHelper::setDownloadFpgaImage(std::string filename) { fpgaDownload.fileName = filename; }
|
void StrHelper::setDownloadFpgaImage(std::string filename) { fpgaDownload.fileName = filename; }
|
||||||
|
|
||||||
ReturnValue_t StrHelper::startFlashWrite(std::string fullname, uint8_t region, uint32_t address) {
|
ReturnValue_t StrHelper::startFirmwareUpdate(std::string fullname) {
|
||||||
ReturnValue_t result = checkPath(fullname);
|
ReturnValue_t result = checkPath(fullname);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
@ -153,9 +153,9 @@ ReturnValue_t StrHelper::startFlashWrite(std::string fullname, uint8_t region, u
|
|||||||
if (not std::filesystem::exists(flashWrite.fullname)) {
|
if (not std::filesystem::exists(flashWrite.fullname)) {
|
||||||
return FILE_NOT_EXISTS;
|
return FILE_NOT_EXISTS;
|
||||||
}
|
}
|
||||||
flashWrite.address = address;
|
flashWrite.address = 0;
|
||||||
flashWrite.region = region;
|
flashWrite.region = static_cast<uint8_t>(RegionId::MAIN_FIRMWARE_SECTION);
|
||||||
internalState = InternalState::FLASH_WRITE;
|
internalState = InternalState::FIRMWARE_UPDATE;
|
||||||
semaphore.release();
|
semaphore.release();
|
||||||
terminate = false;
|
terminate = false;
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
@ -316,6 +316,20 @@ ReturnValue_t StrHelper::performImageUpload() {
|
|||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReturnValue_t StrHelper::performFirmwareUpdate() {
|
||||||
|
ReturnValue_t result = RETURN_OK;
|
||||||
|
result = unlock(flashWrite.region);
|
||||||
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
eraseF(flashWrite.region);
|
||||||
|
if (result != RETURN_OK) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
result = performFlashWrite();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
ReturnValue_t StrHelper::performFlashWrite() {
|
ReturnValue_t StrHelper::performFlashWrite() {
|
||||||
ReturnValue_t result = RETURN_OK;
|
ReturnValue_t result = RETURN_OK;
|
||||||
uint32_t size = 0;
|
uint32_t size = 0;
|
||||||
|
@ -48,37 +48,41 @@ class StrHelper : public SystemObject, public ExecutableObjectIF, public HasRetu
|
|||||||
static const Event FPGA_UPLOAD_SUCCESSFUL = MAKE_EVENT(10, severity::LOW);
|
static const Event FPGA_UPLOAD_SUCCESSFUL = MAKE_EVENT(10, severity::LOW);
|
||||||
//! [EXPORT] : [COMMENT] Upload of FPGA image failed
|
//! [EXPORT] : [COMMENT] Upload of FPGA image failed
|
||||||
static const Event FPGA_UPLOAD_FAILED = MAKE_EVENT(11, severity::LOW);
|
static const Event FPGA_UPLOAD_FAILED = MAKE_EVENT(11, severity::LOW);
|
||||||
|
//! [EXPORT] : [COMMENT] Firmware update was successful
|
||||||
|
static const Event FIRMWARE_UPDATE_SUCCESSFUL = MAKE_EVENT(12, severity::LOW);
|
||||||
|
//! [EXPORT] : [COMMENT] Firmware update failed
|
||||||
|
static const Event FIRMWARE_UPDATE_FAILED = MAKE_EVENT(13, severity::LOW);
|
||||||
//! [EXPORT] : [COMMENT] Failed to read communication interface reply data
|
//! [EXPORT] : [COMMENT] Failed to read communication interface reply data
|
||||||
//! P1: Return code of failed communication interface read call
|
//! P1: Return code of failed communication interface read call
|
||||||
//! P1: Upload/download position for which the read call failed
|
//! P1: Upload/download position for which the read call failed
|
||||||
static const Event STR_HELPER_READING_REPLY_FAILED = MAKE_EVENT(12, severity::LOW);
|
static const Event STR_HELPER_READING_REPLY_FAILED = MAKE_EVENT(14, severity::LOW);
|
||||||
//! [EXPORT] : [COMMENT] Unexpected stop of decoding sequence
|
//! [EXPORT] : [COMMENT] Unexpected stop of decoding sequence
|
||||||
//! P1: Return code of failed communication interface read call
|
//! P1: Return code of failed communication interface read call
|
||||||
//! P1: Upload/download position for which the read call failed
|
//! P1: Upload/download position for which the read call failed
|
||||||
static const Event STR_HELPER_COM_ERROR = MAKE_EVENT(13, severity::LOW);
|
static const Event STR_HELPER_COM_ERROR = MAKE_EVENT(15, severity::LOW);
|
||||||
//! [EXPORT] : [COMMENT] Star tracker did not send replies (maybe device is powered off)
|
//! [EXPORT] : [COMMENT] Star tracker did not send replies (maybe device is powered off)
|
||||||
//! P1: Position of upload or download packet for which no reply was sent
|
//! P1: Position of upload or download packet for which no reply was sent
|
||||||
static const Event STR_HELPER_NO_REPLY = MAKE_EVENT(14, severity::LOW);
|
static const Event STR_HELPER_NO_REPLY = MAKE_EVENT(16, severity::LOW);
|
||||||
//! [EXPORT] : [COMMENT] Error during decoding of received reply occurred
|
//! [EXPORT] : [COMMENT] Error during decoding of received reply occurred
|
||||||
// P1: Return value of decoding function
|
// P1: Return value of decoding function
|
||||||
// P2: Position of upload/download packet, or address of flash write/read request
|
// P2: Position of upload/download packet, or address of flash write/read request
|
||||||
static const Event STR_HELPER_DEC_ERROR = MAKE_EVENT(15, severity::LOW);
|
static const Event STR_HELPER_DEC_ERROR = MAKE_EVENT(17, severity::LOW);
|
||||||
//! [EXPORT] : [COMMENT] Position mismatch
|
//! [EXPORT] : [COMMENT] Position mismatch
|
||||||
//! P1: The expected position and thus the position for which the image upload/download failed
|
//! P1: The expected position and thus the position for which the image upload/download failed
|
||||||
static const Event POSITION_MISMATCH = MAKE_EVENT(16, severity::LOW);
|
static const Event POSITION_MISMATCH = MAKE_EVENT(18, severity::LOW);
|
||||||
//! [EXPORT] : [COMMENT] Specified file does not exist
|
//! [EXPORT] : [COMMENT] Specified file does not exist
|
||||||
//! P1: Internal state of str helper
|
//! P1: Internal state of str helper
|
||||||
static const Event STR_HELPER_FILE_NOT_EXISTS = MAKE_EVENT(17, severity::LOW);
|
static const Event STR_HELPER_FILE_NOT_EXISTS = MAKE_EVENT(19, severity::LOW);
|
||||||
//! [EXPORT] : [COMMENT] Sending packet to star tracker failed
|
//! [EXPORT] : [COMMENT] Sending packet to star tracker failed
|
||||||
//! P1: Return code of communication interface sendMessage function
|
//! P1: Return code of communication interface sendMessage function
|
||||||
//! P2: Position of upload/download packet, or address of flash write/read request for which
|
//! P2: Position of upload/download packet, or address of flash write/read request for which
|
||||||
//! sending failed
|
//! sending failed
|
||||||
static const Event STR_HELPER_SENDING_PACKET_FAILED = MAKE_EVENT(18, severity::LOW);
|
static const Event STR_HELPER_SENDING_PACKET_FAILED = MAKE_EVENT(20, severity::LOW);
|
||||||
//! [EXPORT] : [COMMENT] Communication interface requesting reply failed
|
//! [EXPORT] : [COMMENT] Communication interface requesting reply failed
|
||||||
//! P1: Return code of failed request
|
//! P1: Return code of failed request
|
||||||
//! P1: Upload/download position, or address of flash write/read request for which transmission
|
//! P1: Upload/download position, or address of flash write/read request for which transmission
|
||||||
//! failed
|
//! failed
|
||||||
static const Event STR_HELPER_REQUESTING_MSG_FAILED = MAKE_EVENT(19, severity::LOW);
|
static const Event STR_HELPER_REQUESTING_MSG_FAILED = MAKE_EVENT(21, severity::LOW);
|
||||||
|
|
||||||
StrHelper(object_id_t objectId);
|
StrHelper(object_id_t objectId);
|
||||||
virtual ~StrHelper();
|
virtual ~StrHelper();
|
||||||
@ -105,13 +109,12 @@ class StrHelper : public SystemObject, public ExecutableObjectIF, public HasRetu
|
|||||||
ReturnValue_t startImageDownload(std::string path);
|
ReturnValue_t startImageDownload(std::string path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Starts the flash write procedure
|
* @brief Will start the firmware update
|
||||||
*
|
*
|
||||||
* @param fullname Full name including absolute path of file to write to flash
|
* @param fullname Full name including absolute path of file containing firmware
|
||||||
* @param region Region ID of flash region to write to
|
* update.
|
||||||
* @param address Start address of flash write procedure
|
|
||||||
*/
|
*/
|
||||||
ReturnValue_t startFlashWrite(std::string fullname, uint8_t region, uint32_t address);
|
ReturnValue_t startFirmwareUpdate(std::string fullname);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Starts the flash read procedure
|
* @brief Starts the flash read procedure
|
||||||
@ -234,7 +237,8 @@ class StrHelper : public SystemObject, public ExecutableObjectIF, public HasRetu
|
|||||||
FLASH_WRITE,
|
FLASH_WRITE,
|
||||||
FLASH_READ,
|
FLASH_READ,
|
||||||
DOWNLOAD_FPGA_IMAGE,
|
DOWNLOAD_FPGA_IMAGE,
|
||||||
UPLOAD_FPGA_IMAGE
|
UPLOAD_FPGA_IMAGE,
|
||||||
|
FIRMWARE_UPDATE
|
||||||
};
|
};
|
||||||
|
|
||||||
InternalState internalState = InternalState::IDLE;
|
InternalState internalState = InternalState::IDLE;
|
||||||
@ -287,6 +291,12 @@ class StrHelper : public SystemObject, public ExecutableObjectIF, public HasRetu
|
|||||||
};
|
};
|
||||||
FlashRead flashRead;
|
FlashRead flashRead;
|
||||||
|
|
||||||
|
enum class RegionId : uint8_t {
|
||||||
|
BOOTLOADER_SECTION = 0,
|
||||||
|
MAIN_FIRMWARE_SECTION = 1,
|
||||||
|
ARC_CONFIG_SECTION = 2,
|
||||||
|
};
|
||||||
|
|
||||||
SdCardManager* sdcMan = nullptr;
|
SdCardManager* sdcMan = nullptr;
|
||||||
|
|
||||||
uint8_t commandBuffer[StarTracker::MAX_FRAME_SIZE];
|
uint8_t commandBuffer[StarTracker::MAX_FRAME_SIZE];
|
||||||
|
@ -54,6 +54,7 @@ debugging. */
|
|||||||
#define OBSW_ADD_SYRLINKS 0
|
#define OBSW_ADD_SYRLINKS 0
|
||||||
#define OBSW_ENABLE_SYRLINKS_TRANSMIT_TIMEOUT 0
|
#define OBSW_ENABLE_SYRLINKS_TRANSMIT_TIMEOUT 0
|
||||||
#define OBSW_SYRLINKS_SIMULATED 1
|
#define OBSW_SYRLINKS_SIMULATED 1
|
||||||
|
#define OBSW_STAR_TRACKER_GROUND_CONFIG 1
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user