From e62be3b12d3c94d709a77d89f52c31f7c4ac475d Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 4 Dec 2021 22:22:47 -0800 Subject: Initial commit. --- desktop/main.cc | 215 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100755 desktop/main.cc (limited to 'desktop/main.cc') diff --git a/desktop/main.cc b/desktop/main.cc new file mode 100755 index 0000000..ba77e4b --- /dev/null +++ b/desktop/main.cc @@ -0,0 +1,215 @@ +#include "serial_utils.h" +#include "term.h" +#include "types.h" + +#include +#include +#include +#include + +using namespace std; +using namespace LibSerial; + +enum ErrorCode +{ + Ok, + Error +}; + +enum MessageHeader +{ + ReadConfig, + UpdateStartDelay, + UpdateRPMCount, + UpdateSignalsPerRPM +}; + +struct Config +{ + U32 startDelay; // Start delay in milliseconds + U32 rpmCount; // Number of RPM ticks to count + U32 signalsPerRPM; // Number of signal ticks per RPM tick +}; + +template +bool writeSafe (SerialStream& serial, MessageHeader header, const T& val) +{ + write(serial, (U8)header); + write(serial, val); + + U8 errorCode = read(serial); + T x = read(serial); + + fprintf(stderr, "error code: %d\n", errorCode); + fprintf(stderr, "val: %d\n", x); + + return errorCode == Ok && x == val; +} + +bool configureStartDelay (SerialStream& serial, Config& config) +{ + printf("Tiempo de retardo (milisegundos)\n"); + printf("--------------------------------\n"); + printf("\n"); + printf("Valor actual : %d\n", config.startDelay); + printf("\n"); + printf("Nuevo valor : "); + + U32 x; + cin >> x; + + bool result = writeSafe(serial, UpdateStartDelay, x); + if (result) + { + config.startDelay = x; + } + return result; +} + +bool configureRPMCount (SerialStream& serial, Config& config) +{ + printf("RPM maximo\n"); + printf("----------\n"); + printf("\n"); + printf("Valor actual : %d\n", config.rpmCount); + printf("\n"); + printf("Nuevo valor : "); + + U32 x; + cin >> x; + + bool result = writeSafe(serial, UpdateRPMCount, x); + if (result) + { + config.rpmCount = x; + } + return result; +} + +bool configureSignalsPerRPM (SerialStream& serial, Config& config) +{ + printf("Impulsos/RPM\n"); + printf("------------\n"); + printf("\n"); + printf("Valor actual : %d\n", config.signalsPerRPM); + printf("\n"); + printf("Nuevo valor : "); + + U32 x; + cin >> x; + + bool result = writeSafe(serial, UpdateSignalsPerRPM, x); + if (result) + { + config.signalsPerRPM = x; + } + return result; +} + +void loop (SerialStream& serial, Config& config) +{ + int option = -1; + + while (option != 0) + { + system("clear"); + printf("Configuracion\n"); + printf("-------------\n"); + printf("Tiempo de retardo : %d\n", config.startDelay); + printf("RPM maximo : %d\n", config.rpmCount); + printf("Impulsos/rpm : %d\n", config.signalsPerRPM); + printf("\n"); + printf("Menu\n"); + printf("----\n"); + printf("[0] Salir\n"); + printf("[1] Configurar tiempo de retardo\n"); + printf("[2] Configurar RPM maximo\n"); + printf("[3] Configurar impulsos/RPM\n"); + printf("\n"); + printf("> "); + + option = getch() - '0'; + system("clear"); + + bool error = false; + + switch (option) + { + case 1: error = !configureStartDelay(serial, config); break; + case 2: error = !configureRPMCount(serial, config); break; + case 3: error = !configureSignalsPerRPM(serial, config); break; + default: break; + } + + if (error) + { + fprintf(stderr, "Error al escribir valor\n"); + return; + } + } +} + +void readConfig (SerialStream& serial, Config& config) +{ + write(serial, (U8)ReadConfig); + + U8 errorCode = read(serial); + if (errorCode == Ok) + { + config.startDelay = read(serial); + config.rpmCount = read(serial); + config.signalsPerRPM = read(serial); + } +} + +void openArduino (const char* serialDevice, SerialStream& serial) +{ + if (serial.IsOpen()) serial.Close(); + serial.Open(serialDevice); + serial.SetBaudRate(SerialStreamBuf::BAUD_9600); + serial.SetCharSize(SerialStreamBuf::CHAR_SIZE_8); + serial.SetNumOfStopBits(1); + serial.SetParity(SerialStreamBuf::PARITY_DEFAULT); + serial.SetFlowControl(SerialStreamBuf::FLOW_CONTROL_DEFAULT); +} + +void usage (const char* argv0) +{ + fprintf(stderr, "Uso:\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "%s \n", argv0); + fprintf(stderr, "\n"); + fprintf(stderr, "Args:\n"); + fprintf(stderr, "\n"); + fprintf(stderr, "dispositivo - Nombre de dispositivo serie\n"); +} + +int main (int argc, char** argv) +{ + if (argc != 2) + { + usage(argv[0]); + exit(0); + } + + const char* serialDevice = argv[1]; + + SerialStream serial; + printf("Conectando con %s...\n", serialDevice); + openArduino(serialDevice, serial); + if (serial.IsOpen()) + { + sleep(2); // Wait for arduino to wake up + printf("Leyendo configuracion...\n"); + Config config; + readConfig(serial, config); + loop(serial, config); + } + else + { + printf("Error al conectar con %s\n", serialDevice); + cin.get(); + } + + return 0; +} -- cgit v1.2.3