Обновление

This commit is contained in:
cfif 2026-04-22 12:18:45 +03:00
parent 890289f837
commit efe735afca
2 changed files with 27 additions and 5 deletions

View File

@ -235,8 +235,6 @@ void setResponseErrorPending(tCanUds *env, eUdsServices service, eUdsResponseErr
} }
static void setDefaultSecurityAccess(tCanUds *env) { static void setDefaultSecurityAccess(tCanUds *env) {
env->SA.requestSequenceRequestSeed = false; env->SA.requestSequenceRequestSeed = false;
env->SA.stateSecurityAccess = false; env->SA.stateSecurityAccess = false;
@ -1331,12 +1329,14 @@ static uint16_t RequestDownload_34(tCanUds *env) {
requestDownload_Response->ServiceId = UDS_RequestDownload | 0b1000000; requestDownload_Response->ServiceId = UDS_RequestDownload | 0b1000000;
requestDownload_Response->lengthFormatIdentifier = 0x20; // 2 байта - длина поля maxNumberOfBlockLength requestDownload_Response->lengthFormatIdentifier = 0x20; // 2 байта - длина поля maxNumberOfBlockLength
uint8_t countBlock = 1; uint8_t countBlock = 8;
requestDownload_Response->maxNumberOfBlockLength = countBlock * 128 + 2; requestDownload_Response->maxNumberOfBlockLength = countBlock * 128 + 2;
env->AdrFlash = 0x1100000; env->AdrFlash = 0x1100000;
env->SizeWriteFlash = 0; env->SizeWriteFlash = 0;
env->stateDownload = UDS_RequestDownload;
// vCanSerialPortSetMaskCount(env->CanIO->env, 2); // vCanSerialPortSetMaskCount(env->CanIO->env, 2);
return 4; return 4;
@ -1367,7 +1367,20 @@ static uint16_t TransferData_36(tCanUds *env) {
return setResponseError(env, UDS_RoutineControl, UDS_error_securityAccessDenied); return setResponseError(env, UDS_RoutineControl, UDS_error_securityAccessDenied);
} }
// setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending); if (env->stateDownload == UDS_RequestDownload) {
env->stateDownload = UDS_TransferData;
} else {
if (env->stateDownload != UDS_TransferData) {
return setResponseError(env, UDS_RoutineControl, UDS_error_requestSequenceError);
}
}
if (env->SizeWriteFlash >= DownloadFirmwareSize) {
return setResponseError(env, UDS_RoutineControl, UDS_error_requestSequenceError);
}
// setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
if (osMutexAcquire(env->access, 1000) == osOK) { if (osMutexAcquire(env->access, 1000) == osOK) {
env->currentSessionTesterPresentTimeout = SystemGetMs() + timeout_session_S3_Server; env->currentSessionTesterPresentTimeout = SystemGetMs() + timeout_session_S3_Server;
@ -1383,7 +1396,7 @@ static uint16_t TransferData_36(tCanUds *env) {
env->AdrFlash += env->data->len - 2; env->AdrFlash += env->data->len - 2;
env->SizeWriteFlash += env->data->len - 2; env->SizeWriteFlash += env->data->len - 2;
// LoggerFormatInfo(LOGGER, LOG_SIGN, "Size Write Flash = %d", env->SizeWriteFlash) LoggerFormatInfo(LOGGER, LOG_SIGN, "Download: %d of %d kb", env->SizeWriteFlash / 1024 , DownloadFirmwareSize / 1024)
tTransferData_Response *transferData_Response = (tTransferData_Response *) env->dataResponse; tTransferData_Response *transferData_Response = (tTransferData_Response *) env->dataResponse;
transferData_Response->ServiceId = UDS_TransferData | 0b1000000; transferData_Response->ServiceId = UDS_TransferData | 0b1000000;
@ -1406,6 +1419,11 @@ static uint16_t RequestTransferExit_37(tCanUds *env) {
return setResponseError(env, UDS_RoutineControl, UDS_error_conditionsNotCorrect); return setResponseError(env, UDS_RoutineControl, UDS_error_conditionsNotCorrect);
} }
if ((env->stateDownload != UDS_TransferData) || (env->SizeWriteFlash < DownloadFirmwareSize)) {
return setResponseError(env, UDS_RoutineControl, UDS_error_requestSequenceError);
} else {
env->stateDownload = UDS_RequestTransferExit;
}
tRequestTransferExit_Request *com = (tRequestTransferExit_Request *) env->data->data; tRequestTransferExit_Request *com = (tRequestTransferExit_Request *) env->data->data;

View File

@ -15,6 +15,8 @@
//#define CAN_US_QUEUE_SIZE 1 //#define CAN_US_QUEUE_SIZE 1
#define DownloadFirmwareSize (512 * 1024)
#define MAX_ATTEMPTS_DEFAULT 3 #define MAX_ATTEMPTS_DEFAULT 3
#define BLOCK_TIME_DEFAULT 60000 #define BLOCK_TIME_DEFAULT 60000
@ -189,6 +191,8 @@ typedef struct {
uint32_t SizeWriteFlash; uint32_t SizeWriteFlash;
uint8_t blockSequenceCounter; uint8_t blockSequenceCounter;
eUdsServices stateDownload;
tStaticThreadBlock(384) T_can_Uds; tStaticThreadBlock(384) T_can_Uds;
} tCanUds; } tCanUds;