Обновление

This commit is contained in:
cfif 2026-01-29 13:11:32 +03:00
parent d54df6f85a
commit fc4048ef48
1 changed files with 51 additions and 31 deletions

View File

@ -252,6 +252,50 @@ static uint16_t ReadDataByIdentifier_22(tCanUds *env) {
static uint16_t WriteDataByIdentifier_2E(tCanUds *env) {
if (env->data.len < 3) {
return setResponseError(env, UDS_WriteDataByIdentifier, UDS_error_incorrectMessageLengthOrInvalidFormat);
}
uint8_t dataIdentifier_hi = env->data.data[1];
uint8_t dataIdentifier_lo = env->data.data[2];
// uint16_t dataIdentifier = (dataIdentifier_hi << 8) | dataIdentifier_lo;
if (dataIdentifier_hi == 0xCF) {
if (uds_WriteDataByIdentifier_2E_com_CF[dataIdentifier_lo].data != NULL) {
uint16_t size = uds_WriteDataByIdentifier_2E_com_CF[dataIdentifier_lo].size;
if (env->data.len != size + 3) {
return setResponseError(env, UDS_WriteDataByIdentifier,
UDS_error_incorrectMessageLengthOrInvalidFormat);
}
env->dataResponse[0] = UDS_WriteDataByIdentifier | 0b1000000;
env->dataResponse[1] = dataIdentifier_hi;
env->dataResponse[2] = dataIdentifier_lo;
memcpy(uds_WriteDataByIdentifier_2E_com_CF[dataIdentifier_lo].data, &env->data.data[3], size);
return 3;
}
}
if (dataIdentifier_hi == 0xF1) {
if (uds_WriteDataByIdentifier_2E_com_F1[dataIdentifier_lo].data != NULL) {
uint16_t size = uds_WriteDataByIdentifier_2E_com_F1[dataIdentifier_lo].size;
env->dataResponse[0] = UDS_WriteDataByIdentifier | 0b1000000;
env->dataResponse[1] = dataIdentifier_hi;
env->dataResponse[2] = dataIdentifier_lo;
memcpy(uds_WriteDataByIdentifier_2E_com_F1[dataIdentifier_lo].data, &env->data.data[3], size);
return 3;
}
}
return setResponseError(env, UDS_WriteDataByIdentifier, UDS_error_requestOutOfRange);
}
// конец --------------------------- Запись ---------------------------------------------------------
@ -324,7 +368,7 @@ static uint16_t UDS_ClearDiagnosticInformation_14(tCanUds *env) {
UDS_error_incorrectMessageLengthOrInvalidFormat);
}
setDiagnosticData(env->Diagnostic, DIAGNOSTIC_SET_UDS_ClearDiagnosticInformation_14);
SetGetDiagnosticData(env->Diagnostic, DIAGNOSTIC_UDS_ClearDiagnosticInformation_14, NULL);
env->dataResponse[0] = UDS_ClearDiagnosticInformation | 0b1000000;
@ -338,34 +382,6 @@ static uint16_t UDS_ClearDiagnosticInformation_14(tCanUds *env) {
// начало --------------------------- Чтение ошибок ---------------------------------------------------------
// начало --------------------------- Чтение ошибок ---------------------------------------------------------
void SetUdsDTC_error(tCanUds *env, uint8_t mask, uint16_t *sizeResponse) {
for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) {
if (dtc_state_error[i] & mask) {
env->dataResponse[*sizeResponse] = dtc_codes[i].DTCHighByte;
env->dataResponse[*sizeResponse + 1] = dtc_codes[i].DTCMiddleByte;
env->dataResponse[*sizeResponse + 2] = dtc_codes[i].DTCLowByte;
env->dataResponse[*sizeResponse + 3] = dtc_state_error[i] & mask;
*sizeResponse += 4;
}
}
}
uint8_t GetCountUdsDTC_error(uint8_t mask) {
uint8_t count = 0;
for (uint8_t i = 0; i < COUNT_DTC_CODE_ERROR; ++i) {
if (dtc_state_error[i] & mask) {
++count;
}
}
return count;
}
static uint16_t UDS_ReadDTCInformation_19(tCanUds *env) {
tUdsServiceCommand *com = (tUdsServiceCommand *) env->data.data;
@ -393,8 +409,11 @@ static uint16_t UDS_ReadDTCInformation_19(tCanUds *env) {
env->dataResponse[3] = 1;
// старший байт количества DTC
env->dataResponse[4] = 0;
tDiagnosticDTC diagnosticDTC = {env->data.data[2], NULL};
// младший байт количества DTC
env->dataResponse[5] = GetCountUdsDTC_error(env->data.data[2]);
env->dataResponse[5] = SetGetDiagnosticData(env->Diagnostic, DIAGNOSTIC_UDS_ReadDTCInformation_19_1,
&diagnosticDTC);
response_size = 6;
}
@ -408,7 +427,8 @@ static uint16_t UDS_ReadDTCInformation_19(tCanUds *env) {
response_size = 3;
SetUdsDTC_error(env, env->data.data[2], &response_size);
tDiagnosticDTC diagnosticDTC = {env->data.data[2], &env->dataResponse[response_size]};
response_size += SetGetDiagnosticData(env->Diagnostic, DIAGNOSTIC_UDS_ReadDTCInformation_19_2, &diagnosticDTC);
}
return response_size;