|
@@ -52,11 +52,44 @@ static int _ShowDevImgInfo(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GF
|
|
UNUSED(hIf);
|
|
UNUSED(hIf);
|
|
|
|
|
|
TRACE3("Getting image information.\n");
|
|
TRACE3("Getting image information.\n");
|
|
|
|
+ TTRACE3("Getting image information");
|
|
|
|
|
|
if((ctx == GfaBlmCtx_App) && ((nRet = GfaBlmGetInfoBI(hBlm, pcla->nNodeAddr, &aii)) == 0))
|
|
if((ctx == GfaBlmCtx_App) && ((nRet = GfaBlmGetInfoBI(hBlm, pcla->nNodeAddr, &aii)) == 0))
|
|
{
|
|
{
|
|
GfaTfuDumpImageInfo("Bootloader", &aii.bl);
|
|
GfaTfuDumpImageInfo("Bootloader", &aii.bl);
|
|
GfaTfuDumpImageInfo("Application", &aii.app);
|
|
GfaTfuDumpImageInfo("Application", &aii.app);
|
|
|
|
+
|
|
|
|
+ if( (aii.bl.nImgLength != 0xFFFFFFFF) &&
|
|
|
|
+ (aii.bl.nImgCRC32 != 0xFFFFFFFF))
|
|
|
|
+ {
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_LENGTH_BOOT, "%u", aii.bl.nImgLength);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_CRC32_BOOT, "%u", aii.bl.nImgCRC32);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_BOOT, "%s", aii.bl.szImgMaterialNum);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_BUILD_BOOT, "%s", aii.bl.szImgNameBuild);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_LENGTH_BOOT, "%u", 0xFFFFFFFF);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_CRC32_BOOT, "%u", 0xFFFFFFFF);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_BOOT, "%s", "n/a");
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_BUILD_BOOT, "%s", "n/a");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if( (aii.app.nImgLength != 0xFFFFFFFF) &&
|
|
|
|
+ (aii.app.nImgCRC32 != 0xFFFFFFFF))
|
|
|
|
+ {
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_LENGTH_APP, "%u", aii.app.nImgLength);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_CRC32_APP, "%u", aii.app.nImgCRC32);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_APP, "%s", aii.app.szImgMaterialNum);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_BUILD_APP, "%s", aii.app.szImgNameBuild);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_LENGTH_APP, "%u", 0xFFFFFFFF);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_CRC32_APP, "%u", 0xFFFFFFFF);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_APP, "%s", "n/a");
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_BUILD_APP, "%s", "n/a");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -66,10 +99,13 @@ static int _ShowDevImgInfo(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GF
|
|
{
|
|
{
|
|
TRACE3("Application doesn't recognize BI command!\n");
|
|
TRACE3("Application doesn't recognize BI command!\n");
|
|
TRACE3("Starting bootloader.\n");
|
|
TRACE3("Starting bootloader.\n");
|
|
|
|
+ TTRACE3("Application doesn't recognize BI command");
|
|
|
|
+ TTRACE3("Starting bootloader");
|
|
|
|
|
|
if((nRet = GfaBlmBootloaderExecute(hBlm, pcla->nNodeAddr, NULL, 1000)) != 0)
|
|
if((nRet = GfaBlmBootloaderExecute(hBlm, pcla->nNodeAddr, NULL, 1000)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -79,10 +115,12 @@ static int _ShowDevImgInfo(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GF
|
|
if(pcla->nExBaudrate != pcla->nInitBaudrate)
|
|
if(pcla->nExBaudrate != pcla->nInitBaudrate)
|
|
{
|
|
{
|
|
TRACE3("Setting baud-rate to %u.\n", pcla->nExBaudrate);
|
|
TRACE3("Setting baud-rate to %u.\n", pcla->nExBaudrate);
|
|
|
|
+ TTRACE3("Setting baud-rate to %u", pcla->nExBaudrate);
|
|
|
|
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nExBaudrate)) != 0)
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nExBaudrate)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -91,20 +129,55 @@ static int _ShowDevImgInfo(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GF
|
|
{
|
|
{
|
|
GfaTfuDumpImageInfo("Bootloader", &aii.bl);
|
|
GfaTfuDumpImageInfo("Bootloader", &aii.bl);
|
|
GfaTfuDumpImageInfo("Application", &aii.app);
|
|
GfaTfuDumpImageInfo("Application", &aii.app);
|
|
|
|
+
|
|
|
|
+ if( (aii.bl.nImgLength != 0xFFFFFFFF) &&
|
|
|
|
+ (aii.bl.nImgCRC32 != 0xFFFFFFFF))
|
|
|
|
+ {
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_LENGTH_BOOT, "%u", aii.bl.nImgLength);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_CRC32_BOOT, "%u", aii.bl.nImgCRC32);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_BOOT, "%s", aii.bl.szImgMaterialNum);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_BUILD_BOOT, "%s", aii.bl.szImgNameBuild);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_LENGTH_BOOT, "%u", 0xFFFFFFFF);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_CRC32_BOOT, "%u", 0xFFFFFFFF);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_BOOT, "%s", "n/a");
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_BUILD_BOOT, "%s", "n/a");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if( (aii.app.nImgLength != 0xFFFFFFFF) &&
|
|
|
|
+ (aii.app.nImgCRC32 != 0xFFFFFFFF))
|
|
|
|
+ {
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_LENGTH_APP, "%u", aii.app.nImgLength);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_CRC32_APP, "%u", aii.app.nImgCRC32);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_APP, "%s", aii.app.szImgMaterialNum);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_BUILD_APP, "%s", aii.app.szImgNameBuild);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_LENGTH_APP, "%u", 0xFFFFFFFF);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_CRC32_APP, "%u", 0xFFFFFFFF);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_APP, "%s", "n/a");
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_BUILD_APP, "%s", "n/a");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
if(pcla->nExBaudrate != pcla->nInitBaudrate)
|
|
if(pcla->nExBaudrate != pcla->nInitBaudrate)
|
|
{
|
|
{
|
|
TRACE3("Setting baud-rate to %u.\n", pcla->nInitBaudrate);
|
|
TRACE3("Setting baud-rate to %u.\n", pcla->nInitBaudrate);
|
|
|
|
+ TTRACE3("Setting baud-rate to %u", pcla->nInitBaudrate);
|
|
|
|
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -112,10 +185,12 @@ static int _ShowDevImgInfo(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GF
|
|
if(bStartApp)
|
|
if(bStartApp)
|
|
{
|
|
{
|
|
TRACE3("Starting application.\n");
|
|
TRACE3("Starting application.\n");
|
|
|
|
+ TTRACE3("Starting application");
|
|
|
|
|
|
if((nRet = GfaBlmBUCmdReset(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
if((nRet = GfaBlmBUCmdReset(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -134,25 +209,39 @@ static int _ValidateImg(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_B
|
|
UNUSED(ctx);
|
|
UNUSED(ctx);
|
|
|
|
|
|
TRACE3("Reading material number.\n");
|
|
TRACE3("Reading material number.\n");
|
|
|
|
+ TTRACE3("Reading material number");
|
|
|
|
|
|
if((nRet = GfaBlmReadMaterialAndSerialID(hBlm, pcla->nNodeAddr, szMaterial, sizeof(szMaterial), szSerial, sizeof(szSerial))) != 0)
|
|
if((nRet = GfaBlmReadMaterialAndSerialID(hBlm, pcla->nNodeAddr, szMaterial, sizeof(szMaterial), szSerial, sizeof(szSerial))) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if(szMaterial[0] == '\xFF')
|
|
|
|
+ strcpy(szMaterial, "not set");
|
|
|
|
+ if(szSerial[0] == '\xFF')
|
|
|
|
+ strcpy(szSerial, "not set");
|
|
|
|
+
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_EEPROM, szMaterial);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_SERIAL_EEPROM, szSerial);
|
|
|
|
+
|
|
GfaTfuImageFileGetInfo(hIf, &ii);
|
|
GfaTfuImageFileGetInfo(hIf, &ii);
|
|
|
|
|
|
TRACE2("Material number target: \"%s\"\n", szMaterial);
|
|
TRACE2("Material number target: \"%s\"\n", szMaterial);
|
|
TRACE2("Material number file: \"%s\"\n", ii.szImgMaterialNum);
|
|
TRACE2("Material number file: \"%s\"\n", ii.szImgMaterialNum);
|
|
|
|
+ TTRACE2("Material number target: \"%s\"", szMaterial);
|
|
|
|
+ TTRACE2("Material number file: \"%s\"", ii.szImgMaterialNum);
|
|
|
|
|
|
if(!GfaTfuImageFileMatchMaterialNum(hIf, szMaterial))
|
|
if(!GfaTfuImageFileMatchMaterialNum(hIf, szMaterial))
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
TRACE2("\"%s\" - Image is valid for target @ node 0x%02hhX!\n", pcla->pszImgFileBase, pcla->nNodeAddr);
|
|
TRACE2("\"%s\" - Image is valid for target @ node 0x%02hhX!\n", pcla->pszImgFileBase, pcla->nNodeAddr);
|
|
|
|
+ TTRACE2("\"%s\" - Image is valid for target @ node 0x%02hhX", pcla->pszImgFileBase, pcla->nNodeAddr);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -166,10 +255,12 @@ static int _ShowMatSer(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BL
|
|
UNUSED(ctx);
|
|
UNUSED(ctx);
|
|
|
|
|
|
TRACE3("Reading material and serial number.\n");
|
|
TRACE3("Reading material and serial number.\n");
|
|
|
|
+ TTRACE3("Reading material and serial number");
|
|
|
|
|
|
if((nRet = GfaBlmReadMaterialAndSerialID(hBlm, pcla->nNodeAddr, szMaterial, sizeof(szMaterial), szSerial, sizeof(szSerial))) != 0)
|
|
if((nRet = GfaBlmReadMaterialAndSerialID(hBlm, pcla->nNodeAddr, szMaterial, sizeof(szMaterial), szSerial, sizeof(szSerial))) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -181,6 +272,8 @@ static int _ShowMatSer(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BL
|
|
TRACE2("Material and Serial number:\n");
|
|
TRACE2("Material and Serial number:\n");
|
|
TRACE2(" Mat.Nr.: \"%s\"\n", szMaterial);
|
|
TRACE2(" Mat.Nr.: \"%s\"\n", szMaterial);
|
|
TRACE2(" Serial: \"%s\"\n", szSerial);
|
|
TRACE2(" Serial: \"%s\"\n", szSerial);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_EEPROM, szMaterial);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_SERIAL_EEPROM, szSerial);
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -198,6 +291,7 @@ static int _SetMatSer(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM
|
|
if((nRet = GfaBlmBootloaderExecute(hBlm, pcla->nNodeAddr, NULL, 1000)) != 0)
|
|
if((nRet = GfaBlmBootloaderExecute(hBlm, pcla->nNodeAddr, NULL, 1000)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -211,6 +305,7 @@ static int _SetMatSer(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM
|
|
if((nRet = GfaBlmWriteMaterialAndSerialID(hBlm, pcla->nNodeAddr, pcla->pszMaterial, pcla->pszSerial)) != 0)
|
|
if((nRet = GfaBlmWriteMaterialAndSerialID(hBlm, pcla->nNodeAddr, pcla->pszMaterial, pcla->pszSerial)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -223,6 +318,7 @@ static int _SetMatSer(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM
|
|
if((nRet = GfaBlmBUCmdReset(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
if((nRet = GfaBlmBUCmdReset(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -281,10 +377,12 @@ static int _Ping(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM_EXEC
|
|
GfaTfuGetClock(&tsEnd);
|
|
GfaTfuGetClock(&tsEnd);
|
|
nIntervalModB = GfaTfuClockDiff(&tsEnd, &tsStart);
|
|
nIntervalModB = GfaTfuClockDiff(&tsEnd, &tsStart);
|
|
TRACE2("Slave 0x%02hhX [%s] ping success [%.1f ms] - %s.\n", pcla->nModbusSlvID, _ABBR_MODBUS, (double)nIntervalModB / 1000000.0, szTime);
|
|
TRACE2("Slave 0x%02hhX [%s] ping success [%.1f ms] - %s.\n", pcla->nModbusSlvID, _ABBR_MODBUS, (double)nIntervalModB / 1000000.0, szTime);
|
|
|
|
+ TTRACE2("Slave 0x%02hhX [%s] ping success [%.1f ms] - %s", pcla->nModbusSlvID, _ABBR_MODBUS, (double)nIntervalModB / 1000000.0, szTime);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
TRACE1("Slave 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nModbusSlvID, _ABBR_MODBUS, GfaTfuStrError(errno), szTime);
|
|
TRACE1("Slave 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nModbusSlvID, _ABBR_MODBUS, GfaTfuStrError(errno), szTime);
|
|
|
|
+ TTRACE1("Slave 0x%02hhX [%s] ping error: %s - %s", pcla->nModbusSlvID, _ABBR_MODBUS, GfaTfuStrError(errno), szTime);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else if((nRet = GfaBlmMininetPing(hBlm, pcla->nNodeAddr)) == 0)
|
|
else if((nRet = GfaBlmMininetPing(hBlm, pcla->nNodeAddr)) == 0)
|
|
@@ -303,12 +401,14 @@ static int _Ping(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM_EXEC
|
|
if((nRet = GfaBlmResetSlaveIndex(hBlm, pcla->nNodeAddr)) != 0)
|
|
if((nRet = GfaBlmResetSlaveIndex(hBlm, pcla->nNodeAddr)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Node 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, GfaTfuStrError(errno), szTime);
|
|
TRACE1("Node 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, GfaTfuStrError(errno), szTime);
|
|
|
|
+ TTRACE1("Node 0x%02hhX [%s] ping error: %s - %s", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, GfaTfuStrError(errno), szTime);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
if((ctx = GfaBlmGetExecutionContext(hBlm, pcla->nNodeAddr)) == GfaBlmCtx_Err)
|
|
if((ctx = GfaBlmGetExecutionContext(hBlm, pcla->nNodeAddr)) == GfaBlmCtx_Err)
|
|
{
|
|
{
|
|
TRACE1("Node 0x%02hhX ping error: %s - %s.\n", pcla->nNodeAddr, GfaTfuStrError(errno), szTime);
|
|
TRACE1("Node 0x%02hhX ping error: %s - %s.\n", pcla->nNodeAddr, GfaTfuStrError(errno), szTime);
|
|
|
|
+ TTRACE1("Node 0x%02hhX ping error: %s - %s", pcla->nNodeAddr, GfaTfuStrError(errno), szTime);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -326,11 +426,14 @@ static int _Ping(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM_EXEC
|
|
GfaTfuGetClock(&tsEnd);
|
|
GfaTfuGetClock(&tsEnd);
|
|
nIntervalBoot = GfaTfuClockDiff(&tsEnd, &tsStart);
|
|
nIntervalBoot = GfaTfuClockDiff(&tsEnd, &tsStart);
|
|
TRACE2("Node 0x%02hhX [%s] ping success [%.1f ms] - %s.\n", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, (double)nIntervalBoot / 1000000.0, szTime);
|
|
TRACE2("Node 0x%02hhX [%s] ping success [%.1f ms] - %s.\n", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, (double)nIntervalBoot / 1000000.0, szTime);
|
|
|
|
+ TTRACE2("Node 0x%02hhX [%s] ping success [%.1f ms] - %s", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, (double)nIntervalBoot / 1000000.0, szTime);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
TRACE2("Node 0x%02hhX [%s] ping success [%.1f ms] - %s.\n", pcla->nNodeAddr, _ABBR_MININET, (double)nIntervalMini / 1000000.0, szTime);
|
|
TRACE2("Node 0x%02hhX [%s] ping success [%.1f ms] - %s.\n", pcla->nNodeAddr, _ABBR_MININET, (double)nIntervalMini / 1000000.0, szTime);
|
|
|
|
+ TTRACE2("Node 0x%02hhX [%s] ping success [%.1f ms] - %s", pcla->nNodeAddr, _ABBR_MININET, (double)nIntervalMini / 1000000.0, szTime);
|
|
TRACE1("Node 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, GfaTfuStrError(errno), szTime);
|
|
TRACE1("Node 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, GfaTfuStrError(errno), szTime);
|
|
|
|
+ TTRACE1("Node 0x%02hhX [%s] ping error: %s - %s", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, GfaTfuStrError(errno), szTime);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -340,6 +443,7 @@ static int _Ping(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM_EXEC
|
|
if((nRet = GfaBlmResetSlaveIndex(hBlm, pcla->nNodeAddr)) != 0)
|
|
if((nRet = GfaBlmResetSlaveIndex(hBlm, pcla->nNodeAddr)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Node 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, GfaTfuStrError(errno), szTime);
|
|
TRACE1("Node 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, GfaTfuStrError(errno), szTime);
|
|
|
|
+ TTRACE1("Node 0x%02hhX [%s] ping error: %s - %s", pcla->nNodeAddr, (ctx == GfaBlmCtx_Boot) ? _ABBR_BOOTLOADER : _ABBR_APPLICATION, GfaTfuStrError(errno), szTime);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -347,6 +451,7 @@ static int _Ping(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM_EXEC
|
|
}
|
|
}
|
|
|
|
|
|
TRACE1("Node 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nNodeAddr, _ABBR_MININET, GfaTfuStrError(errno), szTime);
|
|
TRACE1("Node 0x%02hhX [%s] ping error: %s - %s.\n", pcla->nNodeAddr, _ABBR_MININET, GfaTfuStrError(errno), szTime);
|
|
|
|
+ TTRACE1("Node 0x%02hhX [%s] ping error: %s - %s", pcla->nNodeAddr, _ABBR_MININET, GfaTfuStrError(errno), szTime);
|
|
}
|
|
}
|
|
|
|
|
|
if(pcla->nPingIntervalSec > 0)
|
|
if(pcla->nPingIntervalSec > 0)
|
|
@@ -386,6 +491,7 @@ static int _UploadImg(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM
|
|
if((nRet = GfaBlmBootloaderExecute(hBlm, pcla->nNodeAddr, NULL, 1000)) != 0)
|
|
if((nRet = GfaBlmBootloaderExecute(hBlm, pcla->nNodeAddr, NULL, 1000)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -397,6 +503,7 @@ static int _UploadImg(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nExBaudrate)) != 0)
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nExBaudrate)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -416,6 +523,7 @@ static int _UploadImg(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nBootBaudrate)) != 0)
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nBootBaudrate)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -431,6 +539,7 @@ static int _UploadImg(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nBootBaudrate)) != 0)
|
|
if((nRet = GfaBlmBootloaderSetBaudrate(hBlm, pcla->nNodeAddr, pcla->nBootBaudrate)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -442,6 +551,7 @@ static int _UploadImg(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, GFA_BLM
|
|
if((nRet = GfaBlmBUCmdReset(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
if((nRet = GfaBlmBUCmdReset(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -459,14 +569,17 @@ static int _ResetBootloader(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, G
|
|
if(ctx == GfaBlmCtx_App)
|
|
if(ctx == GfaBlmCtx_App)
|
|
{
|
|
{
|
|
TRACE2("Application already executing!\n");
|
|
TRACE2("Application already executing!\n");
|
|
|
|
+ TTRACE2("Application already executing");
|
|
return 0; // no error
|
|
return 0; // no error
|
|
}
|
|
}
|
|
|
|
|
|
TRACE3("Resetting bootloader.\n");
|
|
TRACE3("Resetting bootloader.\n");
|
|
|
|
+ TTRACE3("Resetting bootloader");
|
|
|
|
|
|
if((nRet = GfaBlmBUCmdReset(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
if((nRet = GfaBlmBUCmdReset(hBlm, pcla->nNodeAddr, pcla->nInitBaudrate)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -485,6 +598,7 @@ static int _ReviveBootloader(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla,
|
|
if(ctx == GfaBlmCtx_App)
|
|
if(ctx == GfaBlmCtx_App)
|
|
{
|
|
{
|
|
TRACE1("Bootloader not executing!\n");
|
|
TRACE1("Bootloader not executing!\n");
|
|
|
|
+ TTRACE1("Bootloader not executing");
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -504,12 +618,14 @@ static int _ReviveBootloader(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla,
|
|
if((nRet = GfaMininetMasterTransmitFrame(hMst, frm, nLen)) != nLen)
|
|
if((nRet = GfaMininetMasterTransmitFrame(hMst, frm, nLen)) != nLen)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
if((nRet = GfaMininetMasterReceiveFrame(hMst, rx, sizeof(rx), true)) <= 0)
|
|
if((nRet = GfaMininetMasterReceiveFrame(hMst, rx, sizeof(rx), true)) <= 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -518,6 +634,7 @@ static int _ReviveBootloader(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla,
|
|
if(nRet == MINET_SLAVE_RESPONSE_INDEX_IS_STATUS_CODE)
|
|
if(nRet == MINET_SLAVE_RESPONSE_INDEX_IS_STATUS_CODE)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(-nStatus));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(-nStatus));
|
|
|
|
+ TTRACE1(GfaTfuStrError(-nStatus));
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
else if(nRet == MINET_SLAVE_RESPONSE_SUCCESS)
|
|
else if(nRet == MINET_SLAVE_RESPONSE_SUCCESS)
|
|
@@ -567,6 +684,7 @@ static int _ModbusStartBootloader(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS p
|
|
else
|
|
else
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
}
|
|
}
|
|
|
|
|
|
GfaMbMstClose(hMbm);
|
|
GfaMbMstClose(hMbm);
|
|
@@ -575,6 +693,7 @@ static int _ModbusStartBootloader(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS p
|
|
}
|
|
}
|
|
|
|
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -587,6 +706,7 @@ static int _StartBootloader(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, G
|
|
if(ctx == GfaBlmCtx_Boot)
|
|
if(ctx == GfaBlmCtx_Boot)
|
|
{
|
|
{
|
|
TRACE2("Bootloader already executing!\n");
|
|
TRACE2("Bootloader already executing!\n");
|
|
|
|
+ TTRACE2("Bootloader already executing");
|
|
return 0; // no error
|
|
return 0; // no error
|
|
}
|
|
}
|
|
else if(ctx == GfaBlmCtx_ModB)
|
|
else if(ctx == GfaBlmCtx_ModB)
|
|
@@ -595,10 +715,12 @@ static int _StartBootloader(HIMGFILE hIf, HGFABLM hBlm, LPCCMD_LINE_ARGS pcla, G
|
|
}
|
|
}
|
|
|
|
|
|
TRACE3("Starting bootloader.\n");
|
|
TRACE3("Starting bootloader.\n");
|
|
|
|
+ TTRACE3("Starting bootloader");
|
|
|
|
|
|
if((nRet = GfaBlmBootloaderExecute(hBlm, pcla->nNodeAddr, NULL, 1000)) != 0)
|
|
if((nRet = GfaBlmBootloaderExecute(hBlm, pcla->nNodeAddr, NULL, 1000)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -652,6 +774,7 @@ static bool _AutoBaud(HGFABLM hBlm, LPCMD_LINE_ARGS pcla)
|
|
pcla->nExBaudrate = pcla->nInitBaudrate;
|
|
pcla->nExBaudrate = pcla->nInitBaudrate;
|
|
bBaudrateHit = true;
|
|
bBaudrateHit = true;
|
|
TRACE3("Detected MiniNet connection @ %u,8,1,%c\n", scp.baud, scp.parity);
|
|
TRACE3("Detected MiniNet connection @ %u,8,1,%c\n", scp.baud, scp.parity);
|
|
|
|
+ TTRACE3("Detected MiniNet connection @ %u,8,1,%c", scp.baud, scp.parity);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
usleep(10000);
|
|
usleep(10000);
|
|
@@ -725,6 +848,7 @@ static bool _ModbusAutobaud(HGFABLM hBlm, LPCMD_LINE_ARGS pcla)
|
|
pcla->modbParity = nParities[i];
|
|
pcla->modbParity = nParities[i];
|
|
pcla->nModbBaudrate = nBaudrates[j];
|
|
pcla->nModbBaudrate = nBaudrates[j];
|
|
TRACE3("Detected Modbus application @ %u,8,1,%c\n", pcla->nModbBaudrate, pcla->modbParity);
|
|
TRACE3("Detected Modbus application @ %u,8,1,%c\n", pcla->nModbBaudrate, pcla->modbParity);
|
|
|
|
+ TTRACE3("Detected Modbus application @ %u,8,1,%c", pcla->nModbBaudrate, pcla->modbParity);
|
|
bBaudrateHit = true;
|
|
bBaudrateHit = true;
|
|
GfaMbMstWaitFrameDelay(hMbm);
|
|
GfaMbMstWaitFrameDelay(hMbm);
|
|
break;
|
|
break;
|
|
@@ -771,6 +895,7 @@ static void _OnUploadProgress(const char *pszFile, int nLine, LPGFA_BLM_DL_PROGR
|
|
UNUSED(pszFile);
|
|
UNUSED(pszFile);
|
|
UNUSED(nLine);
|
|
UNUSED(nLine);
|
|
TRACE1("Error: %s!\n", GfaBlmStrError(pdlpp->nErrorCode));
|
|
TRACE1("Error: %s!\n", GfaBlmStrError(pdlpp->nErrorCode));
|
|
|
|
+ TTRACE1(GfaBlmStrError(pdlpp->nErrorCode));
|
|
#endif // _DEBUG
|
|
#endif // _DEBUG
|
|
break;
|
|
break;
|
|
case GBDPS_StartEraseFlash:
|
|
case GBDPS_StartEraseFlash:
|
|
@@ -835,16 +960,35 @@ int main(int argc, char* argv[])
|
|
{
|
|
{
|
|
if(nRet > 0)
|
|
if(nRet > 0)
|
|
{
|
|
{
|
|
- GfaTfuCmdOptDisplayHelp(cla.nQuestionMarks == 3); // show Help and exit
|
|
|
|
- return 0;
|
|
|
|
|
|
+ if(!cla.bPluginMode)
|
|
|
|
+ {
|
|
|
|
+ GfaTfuCmdOptDisplayHelp(cla.nQuestionMarks == 3); // show Help and exit
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ TTRACE1("Invalid command or option");
|
|
|
|
+ TTRACEEXIT("1");
|
|
|
|
+ return 1;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else if(nRet == (int)GFA_FU_ERROR_MISSING_COMMAND_OPT) // A required option is missing
|
|
else if(nRet == (int)GFA_FU_ERROR_MISSING_COMMAND_OPT) // A required option is missing
|
|
|
|
+ {
|
|
TRACE0("Error: %s: %s!\n", GfaTfuStrError(nRet), GfaTfuCmdOpt2String(cla.nMissingOptFlags));
|
|
TRACE0("Error: %s: %s!\n", GfaTfuStrError(nRet), GfaTfuCmdOpt2String(cla.nMissingOptFlags));
|
|
|
|
+ TTRACE1("%s: %s", GfaTfuStrError(nRet), GfaTfuCmdOpt2String(cla.nMissingOptFlags));
|
|
|
|
+ }
|
|
else if(nRet == (int)GFA_FU_ERROR_MULTIPLE_COMMANDS) // Multiple commands were given
|
|
else if(nRet == (int)GFA_FU_ERROR_MULTIPLE_COMMANDS) // Multiple commands were given
|
|
|
|
+ {
|
|
TRACE0("Error: %s: %s!\n", GfaTfuStrError(nRet), GfaTfuCmdOpt2String(cla.nCmdFlags));
|
|
TRACE0("Error: %s: %s!\n", GfaTfuStrError(nRet), GfaTfuCmdOpt2String(cla.nCmdFlags));
|
|
- else
|
|
|
|
- TRACE0("Error: %s!\n", GfaTfuStrError(nRet)); // Another error occured
|
|
|
|
|
|
+ TTRACE1("%s: %s", GfaTfuStrError(nRet), GfaTfuCmdOpt2String(cla.nCmdFlags));
|
|
|
|
+ }
|
|
|
|
+ else // Another error occured
|
|
|
|
+ {
|
|
|
|
+ TRACE0("Error: %s!\n", GfaTfuStrError(nRet));
|
|
|
|
+ TTRACE1("%s", GfaTfuStrError(nRet));
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ TTRACEEXIT("%d", nRet);
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -882,18 +1026,27 @@ int main(int argc, char* argv[])
|
|
|
|
|
|
if(cla.bNeedImgFile) // If the given command requires an image file, open it.
|
|
if(cla.bNeedImgFile) // If the given command requires an image file, open it.
|
|
{ // This also performs some basic validations on the file.
|
|
{ // This also performs some basic validations on the file.
|
|
|
|
+ GFA_IMG_INFO ii;
|
|
|
|
+
|
|
TRACE3("Opening image file %s.\n", cla.pszImgFile);
|
|
TRACE3("Opening image file %s.\n", cla.pszImgFile);
|
|
|
|
+ TTRACE3("Opening image file %s", cla.pszImgFile);
|
|
|
|
|
|
if(!(hIf = GfaTfuImageFileOpen(cla.pszImgFile, cla.nStartAddr, true)))
|
|
if(!(hIf = GfaTfuImageFileOpen(cla.pszImgFile, cla.nStartAddr, true)))
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno)); // Something is wrong with the file
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno)); // Something is wrong with the file
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ GfaTfuImageFileGetInfo(hIf, &ii);
|
|
|
|
+
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_LENGTH_FILE, "%u", ii.nImgLength);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_CRC32_FILE, "%u", ii.nImgCRC32);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_MATERIAL_FILE, "%s", ii.szImgMaterialNum);
|
|
|
|
+ TTRACE(PLUGIN_TAG_IMG_BUILD_FILE, "%s", ii.szImgNameBuild);
|
|
|
|
+
|
|
if(cla.bShowFileImgInfo) // If only the file's image information was requested, dump it and exit.
|
|
if(cla.bShowFileImgInfo) // If only the file's image information was requested, dump it and exit.
|
|
{
|
|
{
|
|
- GFA_IMG_INFO ii;
|
|
|
|
- GfaTfuImageFileGetInfo(hIf, &ii);
|
|
|
|
GfaTfuDumpImageInfo(cla.pszImgFile, &ii);
|
|
GfaTfuDumpImageInfo(cla.pszImgFile, &ii);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -941,6 +1094,7 @@ int main(int argc, char* argv[])
|
|
// open a bootloader master instance
|
|
// open a bootloader master instance
|
|
|
|
|
|
TRACE3("Opening bootloader master.\n");
|
|
TRACE3("Opening bootloader master.\n");
|
|
|
|
+ TTRACE3("Opening bootloader master");
|
|
|
|
|
|
if((hBlm = GfaBlmOpen(&blmcp)))
|
|
if((hBlm = GfaBlmOpen(&blmcp)))
|
|
{
|
|
{
|
|
@@ -952,6 +1106,7 @@ int main(int argc, char* argv[])
|
|
|
|
|
|
GfaBlmSetVerbosity(hBlm, cla.nVerbosity); // Set the verbosity of the bootloader master and it's descendants
|
|
GfaBlmSetVerbosity(hBlm, cla.nVerbosity); // Set the verbosity of the bootloader master and it's descendants
|
|
TRACE3("Connecting to target.\n");
|
|
TRACE3("Connecting to target.\n");
|
|
|
|
+ TTRACE3("Connecting to target");
|
|
|
|
|
|
if(!_AutoBaud(hBlm, &cla)) // Try to detect the mininet baudrate and parity
|
|
if(!_AutoBaud(hBlm, &cla)) // Try to detect the mininet baudrate and parity
|
|
{
|
|
{
|
|
@@ -961,6 +1116,7 @@ int main(int argc, char* argv[])
|
|
!(bModbusAppDetected = _ModbusAutobaud(hBlm, &cla)))
|
|
!(bModbusAppDetected = _ModbusAutobaud(hBlm, &cla)))
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -983,13 +1139,15 @@ int main(int argc, char* argv[])
|
|
else if(!cla.bPing && !cla.bStartBoot) // Ping works with a modbus application as well, so there's no need to start the bootloader.
|
|
else if(!cla.bPing && !cla.bStartBoot) // Ping works with a modbus application as well, so there's no need to start the bootloader.
|
|
{ // --start-boot is an explicit command on it's own and is handled later.
|
|
{ // --start-boot is an explicit command on it's own and is handled later.
|
|
TRACE2("Nothing to do.\n"); // At this point either a --reset-boot or --revive-boot command was given. Both commands make no sense when any
|
|
TRACE2("Nothing to do.\n"); // At this point either a --reset-boot or --revive-boot command was given. Both commands make no sense when any
|
|
- break; // kind of application is running, so just exit.
|
|
|
|
|
|
+ TTRACE2("Nothing to do"); // kind of application is running, so just exit.
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
// No modbus application was detected, so we are dealing either with a mininet application or the bootloader itself. Find out what ...
|
|
// No modbus application was detected, so we are dealing either with a mininet application or the bootloader itself. Find out what ...
|
|
TRACE3("Detecting running image.\n");
|
|
TRACE3("Detecting running image.\n");
|
|
|
|
+ TTRACE3("Detecting running image");
|
|
|
|
|
|
ctx = GfaBlmGetExecutionContext(hBlm, cla.nNodeAddr);
|
|
ctx = GfaBlmGetExecutionContext(hBlm, cla.nNodeAddr);
|
|
|
|
|
|
@@ -1003,6 +1161,7 @@ int main(int argc, char* argv[])
|
|
if((nRet = _ReviveBootloader(hIf, hBlm, &cla, ctx, true)) != 0)
|
|
if((nRet = _ReviveBootloader(hIf, hBlm, &cla, ctx, true)) != 0)
|
|
{
|
|
{
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1010,6 +1169,7 @@ int main(int argc, char* argv[])
|
|
}
|
|
}
|
|
|
|
|
|
TRACE3("Currently running: %s.\n", (ctx == GfaBlmCtx_App) ? "Application" : "Bootloader");
|
|
TRACE3("Currently running: %s.\n", (ctx == GfaBlmCtx_App) ? "Application" : "Bootloader");
|
|
|
|
+ TTRACE3("Currently running: %s", (ctx == GfaBlmCtx_App) ? "Application" : "Bootloader");
|
|
}
|
|
}
|
|
|
|
|
|
// handle the commands
|
|
// handle the commands
|
|
@@ -1036,12 +1196,14 @@ int main(int argc, char* argv[])
|
|
else
|
|
else
|
|
{ // GfaBlmOpen failed
|
|
{ // GfaBlmOpen failed
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{ // GfaSerialGetDeviceInterface failed
|
|
{ // GfaSerialGetDeviceInterface failed
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
TRACE1("Error: %s!\n", GfaTfuStrError(errno));
|
|
|
|
+ TTRACE1(GfaTfuStrError(errno));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -1050,15 +1212,18 @@ int main(int argc, char* argv[])
|
|
if(hBlm)
|
|
if(hBlm)
|
|
{
|
|
{
|
|
TRACE3("Closing bootloader master.\n");
|
|
TRACE3("Closing bootloader master.\n");
|
|
|
|
+ TTRACE3("Closing bootloader master");
|
|
GfaBlmClose(hBlm);
|
|
GfaBlmClose(hBlm);
|
|
}
|
|
}
|
|
|
|
|
|
if(hIf)
|
|
if(hIf)
|
|
{
|
|
{
|
|
TRACE3("Closing image file.\n");
|
|
TRACE3("Closing image file.\n");
|
|
|
|
+ TTRACE3("Closing image file");
|
|
GfaTfuImageFileClose(hIf);
|
|
GfaTfuImageFileClose(hIf);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ TTRACEEXIT("%d", nRet);
|
|
return nRet;
|
|
return nRet;
|
|
}
|
|
}
|
|
|
|
|