// // Created by zemon on 10.04.23. // #include #include "ComIntCmd/AccelCalibration.h" void XfcProtMethodsAdd_AccelCalibration(tXfcProtTable *protTab, tAccelCalibData *accelCalibData) { XfcProtTable_AddStatic(protTab, "ACCEL_CALIBRATION", XfcProtMethod_AccelCalibration, accelCalibData); } void XfcProtMethodsInit_AccelCalibration(tAccelCalibData *env, tCarFlipDetection *carFlipDetection, tVariablesTable *varsTab) { env->flipDetect = carFlipDetection; env->externTable = varsTab; } uint8_t recordVector(tAccelCalibData *accelCalibData) { char *nameFiled; tVariableDescriptor *descriptor; if (VariablesTable_RequireChange(accelCalibData->externTable, 10)) { nameFiled = "FLIP_DETECT_GRAVITY_X"; descriptor = VariablesTable_GetByName(accelCalibData->externTable, nameFiled, strlen(nameFiled)); memcpy(descriptor->addr, &accelCalibData->flipDetect->current.value.x, sizeof(accelCalibData->flipDetect->current.value.x)); nameFiled = "FLIP_DETECT_GRAVITY_Y"; descriptor = VariablesTable_GetByName(accelCalibData->externTable, nameFiled, strlen(nameFiled)); memcpy(descriptor->addr, &accelCalibData->flipDetect->current.value.y, sizeof(accelCalibData->flipDetect->current.value.y)); nameFiled = "FLIP_DETECT_GRAVITY_Z"; descriptor = VariablesTable_GetByName(accelCalibData->externTable, nameFiled, strlen(nameFiled)); memcpy(descriptor->addr, &accelCalibData->flipDetect->current.value.z, sizeof(accelCalibData->flipDetect->current.value.z)); VariablesTable_VariableChanged(accelCalibData->externTable, descriptor); VariablesTable_ReleaseChange(accelCalibData->externTable); //осовбождаем доступ к измененению настроек VariablesTable_ReleaseChange(accelCalibData->externTable); return true; } else { //осовбождаем доступ к измененению настроек VariablesTable_ReleaseChange(accelCalibData->externTable); return true; } } uint8_t recordAngle(tAccelCalibData *accelCalibData) { char *nameFiled; tVariableDescriptor *descriptor; if (VariablesTable_RequireChange(accelCalibData->externTable, 10)) { nameFiled = "FLIP_DETECT_TRESHOLD_ANGLE_COS"; descriptor = VariablesTable_GetByName(accelCalibData->externTable, nameFiled, strlen(nameFiled)); memcpy(descriptor->addr, &accelCalibData->angleCos, sizeof(accelCalibData->angleCos)); VariablesTable_VariableChanged(accelCalibData->externTable, descriptor); //осовбождаем доступ к измененению настроек VariablesTable_ReleaseChange(accelCalibData->externTable); return true; } else { //осовбождаем доступ к измененению настроек VariablesTable_ReleaseChange(accelCalibData->externTable); return true; } } uint8_t XfcProtMethod_AccelCalibration(tXfcArray *request, tXfcArray *response, tAccelCalibData *accelCalibData) { recordVector(accelCalibData); // recordAngle(accelCalibData); return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_OK; }