Обновление
This commit is contained in:
parent
890289f837
commit
efe735afca
26
CanUds.c
26
CanUds.c
|
|
@ -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,6 +1367,19 @@ static uint16_t TransferData_36(tCanUds *env) {
|
||||||
return setResponseError(env, UDS_RoutineControl, UDS_error_securityAccessDenied);
|
return setResponseError(env, UDS_RoutineControl, UDS_error_securityAccessDenied);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
// setResponseErrorPending(env, UDS_RoutineControl, UDS_error_requestCorrectlyReceived_ResponsePending);
|
||||||
|
|
||||||
if (osMutexAcquire(env->access, 1000) == osOK) {
|
if (osMutexAcquire(env->access, 1000) == osOK) {
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
4
CanUds.h
4
CanUds.h
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue