Обновление
This commit is contained in:
parent
d54df6f85a
commit
fc4048ef48
82
CanUds.c
82
CanUds.c
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue