diff --git a/src/arduino/shiftlights/shiftlights.h b/src/arduino/shiftlights/shiftlights.h new file mode 100755 index 0000000..a8de8e4 --- /dev/null +++ b/src/arduino/shiftlights/shiftlights.h @@ -0,0 +1,25 @@ +#ifndef _SHIFTLIGHTSDATA_H +#define _SHIFTLIGHTSDATA_H + +#include +#include + +typedef struct +{ + char color_1_red; + char color_1_green; + char color_1_blue; + char color_2_red; + char color_2_green; + char color_2_blue; + char color_3_red; + char color_3_green; + char color_3_blue; + uint32_t maxrpm; + uint32_t rpm; + uint32_t pulses; +} +ShiftLightsData; + + +#endif diff --git a/src/arduino/shiftlights/shiftlights.ino b/src/arduino/shiftlights/shiftlights.ino index 4ae4946..de6039f 100644 --- a/src/arduino/shiftlights/shiftlights.ino +++ b/src/arduino/shiftlights/shiftlights.ino @@ -1,7 +1,7 @@ #include #include "simdata.h" -#define SIMDATA_SIZE sizeof(SimData) +#define SIMDATA_SIZE sizeof(ShiftLightsData) #define LED_PIN 7 #define NUM_LEDS 6 @@ -39,11 +39,8 @@ void setup() } FastLED.clear(); - sd.rpms = 0; + sd.rpm = 0; sd.maxrpm = 6500; - sd.altitude = 10; - sd.pulses = 40000; - sd.velocity = 10; } void loop() @@ -55,9 +52,8 @@ void loop() { Serial.readBytes(buff, SIMDATA_SIZE); memcpy(&sd, &buff, SIMDATA_SIZE); - rpm = sd.rpms; + rpm = sd.rpm; maxrpm = sd.maxrpm; - } diff --git a/src/arduino/simwind/simwind.h b/src/arduino/simwind/simwind.h new file mode 100755 index 0000000..488989c --- /dev/null +++ b/src/arduino/simwind/simwind.h @@ -0,0 +1,15 @@ +#ifndef _SIMWINDDATA_H +#define _SIMWINDDATA_H + +#include +#include + +typedef struct +{ + float velocity; + float fanpower; +} +SimWindData; + + +#endif diff --git a/src/arduino/simwind/simwind.ino b/src/arduino/simwind/simwind.ino index 79834df..3d00de7 100644 --- a/src/arduino/simwind/simwind.ino +++ b/src/arduino/simwind/simwind.ino @@ -1,7 +1,7 @@ #include -#include "simdata.h" +#include "simwind.h" -#define BYTE_SIZE sizeof(SimData) +#define BYTE_SIZE sizeof(SimWindData) #define KPHTOMPH .621317 #define FANPOWER .6 diff --git a/src/monocoque/devices/serial/arduino.c b/src/monocoque/devices/serial/arduino.c index 10c7800..bbdfeb9 100644 --- a/src/monocoque/devices/serial/arduino.c +++ b/src/monocoque/devices/serial/arduino.c @@ -8,17 +8,39 @@ #define arduino_timeout 2000 -int arduino_update(SerialDevice* serialdevice, SimData* simdata) +int arduino_update(SerialDevice* serialdevice, void* data, size_t size) { int result = 1; if (serialdevice->port) { - result = check(sp_blocking_write(serialdevice->port, simdata, sizeof(SimData), arduino_timeout)); + result = check(sp_blocking_write(serialdevice->port, data, size, arduino_timeout)); } return result; } +//int arduino_shiftlights_update(SerialDevice* serialdevice, SimData* simdata) +//{ +// int result = 1; +// if (serialdevice->port) +// { +// result = check(sp_blocking_write(serialdevice->port, simdata, sizeof(SimData), arduino_timeout)); +// } +// +// return result; +//} +// +//int arduino_simwind_update(SerialDevice* serialdevice, SimData* simdata) +//{ +// int result = 1; +// if (serialdevice->port) +// { +// result = check(sp_blocking_write(serialdevice->port, simdata, sizeof(SimData), arduino_timeout)); +// } +// +// return result; +//} + int arduino_init(SerialDevice* serialdevice, const char* portdev) { slogi("initializing arduino serial device..."); @@ -80,3 +102,4 @@ int check(enum sp_return result) return result; } } + diff --git a/src/monocoque/devices/serial/arduino.h b/src/monocoque/devices/serial/arduino.h index 49ab499..a348988 100644 --- a/src/monocoque/devices/serial/arduino.h +++ b/src/monocoque/devices/serial/arduino.h @@ -4,8 +4,9 @@ #include "../simdevice.h" #include "../serialdevice.h" -int arduino_update(SerialDevice* serialdevice, SimData* simdata); -int arduino_init(SerialDevice* serialdevice, const char* portdev); + +int arduino_update(SerialDevice* serialdevice, void* data, size_t size); +int arduino_init(SerialDevice* serialdevice, const char* portdev); int arduino_free(SerialDevice* serialdevice); int check(enum sp_return result); diff --git a/src/monocoque/devices/serialdevice.c b/src/monocoque/devices/serialdevice.c index 4106053..ac19db4 100644 --- a/src/monocoque/devices/serialdevice.c +++ b/src/monocoque/devices/serialdevice.c @@ -15,10 +15,42 @@ int serialdev_update(SimDevice* this, SimData* simdata) { SerialDevice* serialdevice = (void *) this->derived; - arduino_update(serialdevice, simdata); + + + arduino_update(serialdevice, simdata, sizeof(SimData)); return 0; } +int arduino_shiftlights_update(SimDevice* this, SimData* simdata) +{ + SerialDevice* serialdevice = (void *) this->derived; + int result = 1; + + serialdevice->u.shiftlightsdata.maxrpm = simdata->maxrpm; + serialdevice->u.shiftlightsdata.rpm = simdata->rpms; + // we can add configs to set all the colors + // i can move the size to the initialization since it should not change + size_t size = sizeof(ShiftLightsData); + + arduino_update(serialdevice, &serialdevice->u.shiftlightsdata, size); + return result; +} + +int arduino_simwind_update(SimDevice* this, SimData* simdata) +{ + SerialDevice* serialdevice = (void *) this->derived; + int result = 1; + + serialdevice->u.simwinddata.velocity = simdata->velocity; + // this can be added to the config, all config dependent can be added to init + serialdevice->u.simwinddata.fanpower = 0.6; + size_t size = sizeof(SimWindData); + + arduino_update(serialdevice, &serialdevice->u.simwinddata, size); + + return result; +} + int serialdev_free(SimDevice* this) { SerialDevice* serialdevice = (void *) this->derived; @@ -43,6 +75,8 @@ int serialdev_init(SerialDevice* serialdevice, const char* portdev) } static const vtable serial_simdevice_vtable = { &serialdev_update, &serialdev_free }; +static const vtable arduino_shiftlights_vtable = { &arduino_shiftlights_update, &serialdev_free }; +static const vtable arduino_simwind_vtable = { &arduino_simwind_update, &serialdev_free }; SerialDevice* new_serial_device(DeviceSettings* ds) { @@ -53,6 +87,20 @@ SerialDevice* new_serial_device(DeviceSettings* ds) { this->m.derived = this; this->m.vtable = &serial_simdevice_vtable; + slogt("Attempting to configure arduino device with subtype: %i", ds->dev_subtype); + switch (ds->dev_subtype) { + case (SIMDEVTYPE_SHIFTLIGHTS): + this->devicetype = ARDUINODEV__SHIFTLIGHTS; + this->m.vtable = &arduino_shiftlights_vtable; + slogi("Initializing arduino device for shiftlights."); + break; + case (SIMDEVTYPE_SIMWIND): + this->devicetype = ARDUINODEV__SIMWIND; + this->m.vtable = &arduino_simwind_vtable; + slogi("Initializing arduino devices for sim wind."); + break; + } + int error = serialdev_init(this, ds->serialdevsettings.portdev); if (error != 0) diff --git a/src/monocoque/devices/serialdevice.h b/src/monocoque/devices/serialdevice.h index 3ec39a5..f4c60d6 100644 --- a/src/monocoque/devices/serialdevice.h +++ b/src/monocoque/devices/serialdevice.h @@ -3,5 +3,11 @@ #include +typedef enum +{ + ARDUINODEV__SHIFTLIGHTS = 0, + ARDUINODEV__SIMWIND = 1, +} +SerialDeviceType; #endif diff --git a/src/monocoque/devices/simdevice.h b/src/monocoque/devices/simdevice.h index cd2b323..87e3c35 100644 --- a/src/monocoque/devices/simdevice.h +++ b/src/monocoque/devices/simdevice.h @@ -9,6 +9,8 @@ #include "../helper/confighelper.h" #include "../simulatorapi/simapi/simapi/simdata.h" +#include "../../arduino/simwind/simwind.h" +#include "../../arduino/shiftlights/shiftlights.h" typedef struct SimDevice SimDevice; @@ -43,10 +45,17 @@ typedef struct int id; SerialType type; struct sp_port* port; + SerialDeviceType devicetype; + union + { + SimWindData simwinddata; + ShiftLightsData shiftlightsdata; + } u; } SerialDevice; -int serialdev_update(SimDevice* this, SimData* simdata); +int arduino_shiftlights_update(SimDevice* this, SimData* simdata); +int arduino_simwind_update(SimDevice* this, SimData* simdata); int serialdev_free(SimDevice* this); SerialDevice* new_serial_device(DeviceSettings* ds);