Program to update the D7A modem's firmware.
Dependencies: modem_ref_helper DebouncedInterrupt
Diff: main.cpp
- Revision:
- 16:5a6168dbe7bb
- Parent:
- 15:24434827c575
- Child:
- 17:05c9ec970a6d
--- a/main.cpp Fri Mar 10 16:01:27 2017 +0000 +++ b/main.cpp Mon Mar 13 12:13:41 2017 +0000 @@ -94,10 +94,11 @@ int32_t check_slack(cup_param_t* cup, cup_cfg_t* cup_cfg) { - PRINT("key: %d data: %d code: %d src: %d\r\n", cup_cfg->key, cup->data_size, cup->code_size, cup_cfg->src_offset); + //PRINT("key: %d data: %d code: %d src: %d\r\n", cup_cfg->key, cup->data_size, cup->code_size, cup_cfg->src_offset); PRINT("Checking CUP Slack... "); - - int32_t cup_slack = cup_cfg->key - cup->data_size - (cup->code_size > cup_cfg->src_offset)? cup->code_size - cup_cfg->src_offset : 0; + + int32_t data_size = (((cup->data_size/256)+1)*256); + int32_t cup_slack = cup_cfg->key - data_size; if (cup_slack < 0) { @@ -117,7 +118,6 @@ d7a_revision_t rev; cup_cfg_t cup_cfg; cup_param_t* cup = (cup_param_t*)&cup_modem; - uint32_t cup_offset; int32_t cup_slack; // Start & initialize @@ -154,6 +154,10 @@ if (rev.device_id == BOOTLOADER_DEV_ID) { // Update bootloader + PRINT("\r\n" + "/!\\ This modem has a 4.7.x bootloader firmware. /!\\\r\n" + "/!\\ Step 2/2: Upgrading to full modem firmware. /!\\\r\n" + ); // Read CUP config with root permissions D7A_READ(&cup_cfg, cup->cfg_fid, 0, sizeof(cup_cfg_t), root_key); @@ -165,10 +169,8 @@ PRINT("/!\\ Not enough space for bootloader /!\\\r\n"); break; } - - cup_offset = cup_cfg.key + cup_cfg.src_offset - cup->data_size; - - cup_start_update(cup_offset); + + cup_start_update(cup_slack); } else { @@ -195,12 +197,12 @@ print_check_rev(); break; } - + /* if (check_parameter("Firmware version minor...", rev.fw_version.minor, cup->target_fw_minor)) { print_check_rev(); break; - } + }*/ } else { @@ -216,7 +218,11 @@ if (cup_slack < 0) { - PRINT("/!\\ Not enough space for binary, checking for bootloader /!\\\r\n"); + PRINT("\r\n" + "/!\\ Not enough space for full modem firmware binary /!\\\r\n" + "/!\\ Checking for bootloader firmware /!\\\r\n" + "\r\n" + ); cup_slack = check_slack((cup_param_t*)&cup_bootloader, &cup_cfg); @@ -227,6 +233,12 @@ } bootloader = true; + + PRINT("\r\n" + "/!\\ This update will be done in 2 steps. /!\\\r\n" + "/!\\ Step 1/2: Upgrading modem to bootloader. /!\\\r\n" + "/!\\ Do no push the reset button or turn off the board during upgrade. /!\\\r\n" + ); } else { @@ -260,8 +272,7 @@ #endif } - cup_offset = cup_cfg.key - cup->data_size; - cup_start_update(cup_offset, bootloader); + cup_start_update(cup_slack, bootloader); } } while (0);