CliCmd_FlipSetting/Src/CliCmd/FlipSetting.c

225 lines
9.0 KiB
C

////
//// Created by zemon on 18.11.22.
////
//
//
#include "CliCmd/FlipSetting.h"
#include "SystemDelayInterface.h"
#include "XfcProtProcessorUtilDefines.h"
#include "string.h"
#include "stream.h"
void CliCmd_flipModedHelp(void *env, tCliCmd *cli) {
CliCmd_PrintLnStatic(cli, " access sub commands:");
CliCmd_PrintLnStatic(cli, " command [ exit ] - exit as this sub mode");
CliCmd_PrintLnStatic(cli, " command [ help ] - help this as sub mode");
CliCmd_PrintLnStatic(cli, " command [ stop] - stop listing data acsel");
CliCmd_PrintLnStatic(cli, " command [ rec_angle ] - record this params");
CliCmd_PrintLnStatic(cli, " command [ rec_vector ] - record this params");
CliCmd_PrintLnStatic(cli, " press ENTER key to continue");
CliCmd_PrintLnStatic(cli, "");
}
char sps[] = " ";
char ln[] = "\n";
void printSps(tCliCmd *cli) {
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) sps, sizeof(sps) - 1, SystemWaitForever);
}
void printLn(tCliCmd *cli) {
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) ln, sizeof(ln) - 1, SystemWaitForever);
}
void updateData(tFlipSetting *env) {
env->val_x = env->flipDetect->current.value.x;
env->val_y = env->flipDetect->current.value.y;
env->val_z = env->flipDetect->current.value.z;
env->valGraviti_x = env->accelCoor->x;
env->valGraviti_y = env->accelCoor->y;
env->valGraviti_z = env->accelCoor->z;
if(env->isDetectValue != env->carCrashDetection->asi15.isDetectValue) {
env->isDetectValue = env->carCrashDetection->asi15.isDetectValue;
}
env->asi15This = env->carCrashDetection->asi15This;
env->asi15Limit = *env->carCrashDetection->asi15.threshold;
env->angleCos = env->flipDetect->current.angleCos;
}
void printData(tFlipSetting *tFlipSet, tCliCmd *cli, uint32_t timeout) {
uint32_t endMs = SystemGetMs() + timeout;
updateData(tFlipSet);
printLn(cli);
CliCmd_PrintLnStatic(cli, "==================================================================");
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "| Cos=", sizeof("| Cos="), SystemWaitForever);
debug_printf(cli->serialCommandPort, "%f", *(float *) &tFlipSet->angleCos);
printSps(cli);
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "X=", 2, SystemWaitForever);
debug_printf(cli->serialCommandPort, "%f", *(float *) &tFlipSet->val_x);
printSps(cli);
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "Y=", 2, SystemWaitForever);
debug_printf(cli->serialCommandPort, "%f", *(float *) &tFlipSet->val_y);
printSps(cli);
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "Z=", 2, SystemWaitForever);
debug_printf(cli->serialCommandPort, "%f |", *(float *) &tFlipSet->val_z);
printSps(cli);
printLn(cli);
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "| ACCELERATOR_X", sizeof("| ACCELERATOR_X"), SystemWaitForever);
debug_printf(cli->serialCommandPort, "(MicroG)=%d", *(int32_t *) &tFlipSet->valGraviti_x);
debug_printf(cli->serialCommandPort, " (MiliG)=%d |" , *(int32_t *) &tFlipSet->valGraviti_x/1000);
printSps(cli);
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "| ACCELERATOR_Y", sizeof("| ACCELERATOR_Y"), SystemWaitForever);
debug_printf(cli->serialCommandPort, "(MicroG)=%d", *(int32_t *) &tFlipSet->valGraviti_y);
debug_printf(cli->serialCommandPort, " (MiliG)=%d |" , *(int32_t *) &tFlipSet->valGraviti_y/1000);
printSps(cli);
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "| ACCELERATOR_Z", sizeof("| ACCELERATOR_Z"), SystemWaitForever);
debug_printf(cli->serialCommandPort, "(MicroG)=%d", *(int32_t *) &tFlipSet->valGraviti_z);
debug_printf(cli->serialCommandPort, " (MiliG)=%d |" , *(int32_t *) &tFlipSet->valGraviti_z/1000);
printSps(cli);
printLn(cli);
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "| THIS_ASI15", sizeof("| THIS_ASI15"), SystemWaitForever);
debug_printf(cli->serialCommandPort, "=%f |", *(float *) &tFlipSet->asi15This);
printSps(cli);
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "| ASI_TRESHOLD", sizeof("| ASI_TRESHOLD"), SystemWaitForever);
debug_printf(cli->serialCommandPort, "=%f |", *(float *) &tFlipSet->asi15Limit);
printSps(cli);
SerialPortTransmit(cli->serialCommandPort, (uint8_t *) "| ACTIVATION_VALUE_ASI15", sizeof("| ACTIVATION_VALUE_ASI15"), SystemWaitForever);
debug_printf(cli->serialCommandPort, "=%f |", *(float *) &tFlipSet->isDetectValue);
printLn(cli);
CliCmd_PrintLnStatic(cli, "==================================================================");
printLn(cli);
while (endMs > SystemGetMs()) {
SystemDelayMs(1);
}
}
uint8_t recordVarData(tFlipSetting *tFlipSet, tCliCmd *cli, uint8_t stat) {
char *nameFiled;
tVariableDescriptor *descriptor;
if (VariablesTable_RequireChange(tFlipSet->externTable, 10)) {
if (stat == 0) {
nameFiled = "FLIP_DETECT_TRESHOLD_ANGLE_COS";
descriptor = VariablesTable_GetByName(tFlipSet->externTable, nameFiled, strlen(nameFiled));
memcpy(descriptor->addr, &tFlipSet->angleCos, sizeof(tFlipSet->angleCos));
VariablesTable_VariableChanged(tFlipSet->externTable, descriptor);
VariablesTable_ReleaseChange(tFlipSet->externTable);
CliCmd_PrintLnStatic(cli, " record angle is success");
//осовбождаем доступ к измененению настроек
VariablesTable_ReleaseChange(tFlipSet->externTable);
} else {
nameFiled = "FLIP_DETECT_GRAVITY_X";
descriptor = VariablesTable_GetByName(tFlipSet->externTable, nameFiled, strlen(nameFiled));
memcpy(descriptor->addr, &tFlipSet->val_x, sizeof(tFlipSet->val_x));
nameFiled = "FLIP_DETECT_GRAVITY_Y";
descriptor = VariablesTable_GetByName(tFlipSet->externTable, nameFiled, strlen(nameFiled));
memcpy(descriptor->addr, &tFlipSet->val_y, sizeof(tFlipSet->val_y));
nameFiled = "FLIP_DETECT_GRAVITY_Z";
descriptor = VariablesTable_GetByName(tFlipSet->externTable, nameFiled, strlen(nameFiled));
memcpy(descriptor->addr, &tFlipSet->val_z, sizeof(tFlipSet->val_z));
VariablesTable_VariableChanged(tFlipSet->externTable, descriptor);
VariablesTable_ReleaseChange(tFlipSet->externTable);
//осовбождаем доступ к измененению настроек
VariablesTable_ReleaseChange(tFlipSet->externTable);
CliCmd_PrintLnStatic(cli, " record vector is success");
return 0;
}
} else {
//осовбождаем доступ к измененению настроек
VariablesTable_ReleaseChange(tFlipSet->externTable);
CliCmd_PrintLnStatic(cli, "Variable is busy");
return 0;
}
return 0;
}
void getNewData(tFlipSetting *tFlipSet, tCliCmd *cli) {
CliCmd_PrintLnStatic(cli, "=================== THIS DATA ===================");
printData(tFlipSet, cli, 1);
CliCmd_PrintLnStatic(cli, "=================================================");
CliCmd_PrintLnStatic(cli, " [ rec_vector ] - record this vector data");
CliCmd_PrintLnStatic(cli, " [ rec_angle ] - record this angle data");
CliCmd_PrintLnStatic(cli, " [ ENTER_PRESS_KEY ] - update this data");
CliCmd_PrintLnStatic(cli, " [ exit ] - exiting as sub mode record/ and continue listing info");
}
void stopListing(tFlipSetting *tFlipSet, tCliCmd *cli) {
getNewData(tFlipSet, cli);
while (1) {
CliCmd_WaitLine(cli);
if (CliCmd_RxStartsWithStatic(cli, "rec_angle")) {
recordVarData(tFlipSet, cli, 0);
return;
}
if (CliCmd_RxStartsWithStatic(cli, "rec_vector")) {
recordVarData(tFlipSet, cli, 1);
return;
}
if (CliCmd_RxStartsWithStatic(cli, "")) {
printData(tFlipSet, cli, 1);
}
if (CliCmd_RxStartsWithStatic(cli, "exit")) {
return;
}
}
}
void CliCmd_FlipSettingInit(
tFlipSetting *tFlipSet,
tCarFlipDetection *tFlipBase,
tVariablesTable *externTable,
tAccelCoor *accelCoor,
tCarCrashDetection *carCrashDetection
) {
tFlipSet->carCrashDetection = carCrashDetection;
tFlipSet->accelCoor = accelCoor;
tFlipSet->flipDetect = tFlipBase;
tFlipSet->externTable = externTable;
}
uint8_t CliCmd_FlipSetting(tFlipSetting *tFlipSet, tCliCmd *cli) {
CliCmd_PrintLnStatic(cli, "THIS MODE FLIPPING SETTINGS");
while (1) {
CliCmd_WaitLineDelay(cli, 1500);
if (CliCmd_RxStartsWithStatic(cli, "exit")) {
CliCmd_PrintLnStatic(cli, "EXIT IN BASE MODE...");
return 0;
}
if (CliCmd_RxStartsWithStatic(cli, "help")) {
CliCmd_flipModedHelp(NULL, cli);
CliCmd_WaitLine(cli);
}
if (CliCmd_RxStartsWithStatic(cli, "stop")) {
stopListing(tFlipSet, cli);
}
printData(tFlipSet, cli, 1);
SystemDelayMs(1);
}
}