Обновление
This commit is contained in:
parent
8b9d584815
commit
d23bfa381e
132
CanUds.c
132
CanUds.c
|
|
@ -467,13 +467,135 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
|
|||
env->dataResponse[1] = dataIdentifier_hi;
|
||||
env->dataResponse[2] = dataIdentifier_lo;
|
||||
env->dataResponse[3] = env->data.data[3];
|
||||
//memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data.data[3], size);
|
||||
|
||||
if (env->data.data[3] == UDS_io_shortTermAdjustment) {
|
||||
|
||||
// Motor_Def...MotorSealingValve (percent)
|
||||
if ((dataIdentifier_lo >= 0x60) && (dataIdentifier_lo <= 0x78)) {
|
||||
uint16_t percent = (env->data.data[4] << 8) | env->data.data[5];
|
||||
|
||||
if (percent > 1000) {
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_requestOutOfRange);
|
||||
}
|
||||
|
||||
memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data.data[4], size);
|
||||
return size + 4;
|
||||
} else {
|
||||
|
||||
switch (dataIdentifier_lo) {
|
||||
|
||||
// Doors Actuator
|
||||
case 0x50: {
|
||||
for (uint8_t i = 0; i < 24; i += 2) {
|
||||
uint16_t percent = (env->data.data[4 + i] << 8) | env->data.data[5 + 1 + i];
|
||||
if (percent > 1000) {
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier,
|
||||
UDS_error_requestOutOfRange);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// IO
|
||||
case 0x51: {
|
||||
for (uint8_t i = 0; i < 8; ++i) {
|
||||
uint8_t on_off = env->data.data[4 + i];
|
||||
if (on_off > 1) {
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier,
|
||||
UDS_error_requestOutOfRange);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// PWM
|
||||
case 0x52: {
|
||||
|
||||
tStatus_Pwm *pwm = (tStatus_Pwm *) &env->data.data[4];
|
||||
if ((pwm->Pwm_Front > 1000) || (pwm->Pwm_Rear > 1000)) {
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier,
|
||||
UDS_error_requestOutOfRange);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// eComp
|
||||
case 0x53: {
|
||||
|
||||
tStatus_eComp *eComp = (tStatus_eComp *) &env->data.data[4];
|
||||
if ((eComp->eComp_Statue_Request > 1) || (eComp->LowTempValve > 1)) {
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier,
|
||||
UDS_error_requestOutOfRange);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// External
|
||||
case 0x54: {
|
||||
|
||||
tStatus_External *external = (tStatus_External *) &env->data.data[4];
|
||||
if (external->CoolingFan > 1000) {
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier,
|
||||
UDS_error_requestOutOfRange);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// EMS
|
||||
case 0x55: {
|
||||
|
||||
tStatus_EMS *ems = (tStatus_EMS *) &env->data.data[4];
|
||||
if (ems->EMS_Chiller_Req > 1) {
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier,
|
||||
UDS_error_requestOutOfRange);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// Ionizer_Aroma
|
||||
case 0x56: {
|
||||
|
||||
tStatus_Ionizer_Aroma *ionizer_Aroma = (tStatus_Ionizer_Aroma *) &env->data.data[4];
|
||||
if ((ionizer_Aroma->Ionizer > 1) || (ionizer_Aroma->AromatizationIntensivity > 3)) {
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier,
|
||||
UDS_error_requestOutOfRange);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// Duct Select
|
||||
case 0x79: {
|
||||
|
||||
tStatus_Duct_Select *duct_Select = (tStatus_Duct_Select *) &env->data.data[4];
|
||||
if ((duct_Select->Duct_FL > 1) || (duct_Select->Duct_FR > 1) ||
|
||||
(duct_Select->Duct_RL > 1) || (duct_Select->Duct_RR > 1)) {
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier,
|
||||
UDS_error_requestOutOfRange);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
memcpy(uds_IoDataByIdentifier_2F_com_CF[dataIdentifier_lo].data, &env->data.data[4], size);
|
||||
|
||||
return size + 4;
|
||||
}
|
||||
|
||||
|
||||
return 4;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
if (dataIdentifier_hi == 0xF1) {
|
||||
|
||||
if (uds_IoDataByIdentifier_2F_com_F1[dataIdentifier_lo].data != NULL) {
|
||||
|
|
@ -494,7 +616,7 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
|
|||
UDS_error_incorrectMessageLengthOrInvalidFormat);
|
||||
}
|
||||
|
||||
env->dataResponse[0] = UDS_WriteDataByIdentifier | 0b1000000;
|
||||
env->dataResponse[0] = UDS_InputOutputControlByIdentifier | 0b1000000;
|
||||
env->dataResponse[1] = dataIdentifier_hi;
|
||||
env->dataResponse[2] = dataIdentifier_lo;
|
||||
env->dataResponse[3] = env->data.data[3];
|
||||
|
|
@ -504,8 +626,8 @@ static uint16_t InputOutputControlByIdentifier_2F(tCanUds *env) {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
return setResponseError(env, UDS_WriteDataByIdentifier, UDS_error_requestOutOfRange);
|
||||
*/
|
||||
return setResponseError(env, UDS_InputOutputControlByIdentifier, UDS_error_requestOutOfRange);
|
||||
}
|
||||
// конец --------------------------- Управление ---------------------------------------------------------
|
||||
// конец --------------------------- Управление ---------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Reference in New Issue