Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skip signature with warning #42

Merged
merged 2 commits into from
May 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 34 additions & 5 deletions flasher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ constexpr char kFakeBoardIdBase64[] = "Tk9UX1NFQ1VSRURfTUFHSUNfU1RSSU5HXzEyMzQ1N
// Config
constexpr char kConfigFileName[] = "config.json";
constexpr uint32_t kConfigOpenAttempt = 2;
constexpr char kConfigVersionStr[] = "config_version";
constexpr char kEnableSignatureWarningStr[] = "enable_signature_warning";

// Servers default config
constexpr char kDefaultAddress1[] = "imtech.hr";
Expand Down Expand Up @@ -125,6 +127,10 @@ void Flasher::Init() {
if (OpenConfigFile(json_document)) {
QJsonArray servers_array = json_document.object().find("servers")->toArray();
socket_client_ = std::make_shared<socket::SocketClient>(servers_array);

if (0 == QString::compare("true", json_document.object().find(kEnableSignatureWarningStr)->toString(), Qt::CaseInsensitive)) {
is_signature_warning_enabled_ = true;
}
}

file_downloader_ = std::make_unique<file_downloader::FileDownloader>();
Expand Down Expand Up @@ -468,9 +474,9 @@ void Flasher::LoopHandler() {

FlashingInfo Flasher::Flash() {
FlashingInfo flashing_info;
const qint64 firmware_size = file_content_.size() - kSignatureSize;
const qint64 firmware_size = file_content_.size() - signature_size_;
const qint64 num_of_packets = (firmware_size / kPacketSize);
const char *data_firmware = file_content_.data() + kSignatureSize;
const char *data_firmware = file_content_.data() + signature_size_;

// Send file in packages
for (qint64 packet = 0; packet < num_of_packets; ++packet) {
Expand Down Expand Up @@ -554,8 +560,8 @@ bool Flasher::CheckTrue() {

FlashingInfo Flasher::CrcCheck() {
FlashingInfo flashing_info;
const qint64 firmware_size = file_content_.size() - kSignatureSize;
const char *data_firmware = file_content_.data() + kSignatureSize;
const qint64 firmware_size = file_content_.size() - signature_size_;
const char *data_firmware = file_content_.data() + signature_size_;

const uint8_t *data = reinterpret_cast<const uint8_t *>(data_firmware);
uint32_t crc = crc::CalculateCrc32(data, firmware_size, false, false);
Expand Down Expand Up @@ -753,7 +759,7 @@ void Flasher::ReconnectingToBoard() {

FlashingInfo Flasher::SendFileSize() {
FlashingInfo flashing_info;
const qint64 firmware_size = file_content_.size() - kSignatureSize;
const qint64 firmware_size = file_content_.size() - signature_size_;
QByteArray file_size;
file_size.setNum(firmware_size);
flashing_info.success = SendMessage(file_size.data(), file_size.size(), kSerialTimeoutInMs);
Expand All @@ -774,7 +780,21 @@ bool Flasher::SendMessage(const char *data, qint64 length, int timeout_ms) {

FlashingInfo Flasher::SendSignature() {
FlashingInfo flashing_info;
signature_size_ = kSignatureSize;

flashing_info.success = SendMessage(file_content_.data(), kSignatureSize, kSerialTimeoutInMs);
if (!flashing_info.success) {

bool continue_without_signature = true;
if (is_signature_warning_enabled_) {
continue_without_signature = ShowInfoMsg("No signature detected!", "Flashing without a signature is not safe. Flasher will assume that firmware is without signature.");
}

if (continue_without_signature) {
signature_size_ = 0;
flashing_info.success = true;
}
}

if (!flashing_info.success) {
flashing_info.title = "Flashing process failed";
Expand Down Expand Up @@ -932,6 +952,15 @@ void Flasher::CreateDefaultConfigFile() {

QJsonDocument json_data;
QJsonObject json_object;

QJsonObject json_object_version;
json_object_version.insert("major", "1");
json_object_version.insert("minor", "0");
json_object_version.insert("patch", "0");

json_object.insert(kConfigVersionStr, json_object_version);
json_object.insert(kEnableSignatureWarningStr, "true");

QJsonObject json_object_server_1;
QJsonObject json_object_server_2;
QJsonArray json_array;
Expand Down
2 changes: 2 additions & 0 deletions flasher.h
Original file line number Diff line number Diff line change
Expand Up @@ -324,12 +324,14 @@ class Flasher : public QObject {
QString selected_firmware_version_; //!< Selected firmware version
QFile config_file_; //!< Configuration file
QFile firmware_file_; //!< Firmware file
qint64 signature_size_{0}; //!< Firmware signature size
bool is_bootloader_ {false}; //!< Is bootloader detected flag
bool is_bootloader_expected_ {false}; //!< Is bootloader expected after board reset
bool is_read_protection_enabled_ {false}; //!< Is read protection enabled flag
bool is_timer_started_ {false}; //!< Is timer started flag
bool is_firmware_downloaded_{false}; //!< Is firmware downloaded flag
bool is_download_success_{false}; //!< Is download successfully done
bool is_signature_warning_enabled_{false}; //!< Is signature warning enabled
QByteArray file_content_; //!< File content
communication::SerialPort serial_port_; //!< Serial port object
std::shared_ptr<socket::SocketClient> socket_client_; //!< Pointer to SocketClient object
Expand Down