diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index fb0f3dfd9..8c1bbf5b0 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -445,15 +445,12 @@ int main(int argc,char **argv) printf("Model size = %d\n", (int)sizeof(g_model)); + simuInit(); + StartEepromThread(argc >= 2 ? argv[1] : "eeprom.bin"); StartAudioThread(); StartMainThread(); -#if defined(PCBTARANIS) - simuSetSwitch(0, 0); - simuSetSwitch(1, 0); -#endif - return application.run(); } diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index cad7b8a9b..5b97bd3d3 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -100,42 +100,46 @@ char simuSdDirectory[1024] = ""; uint8_t eeprom[EESIZE_SIMU]; sem_t *eeprom_write_sem; -#if defined(CPUARM) -#if defined(PCBTARANIS) -#define SWITCH_CASE(swtch, pin, mask) \ - case swtch: \ +void simuInit() +{ + for (int i = 0; i <= 17; i++) + simuSetSwitch(i, 0); +} + +#define NEG_CASE(sw_or_key, pin, mask) \ + case sw_or_key: \ if ((int)state > 0) pin &= ~(mask); else pin |= (mask); \ break; -#else -#define SWITCH_CASE(swtch, pin, mask) \ - case swtch: \ +#define POS_CASE(sw_or_key, pin, mask) \ + case sw_or_key: \ if ((int)state > 0) pin |= (mask); else pin &= ~(mask); \ break; + +#if defined(CPUARM) +#if defined(PCBTARANIS) +#define SWITCH_CASE NEG_CASE +#else +#define SWITCH_CASE POS_CASE #endif #define SWITCH_3_CASE(swtch, pin1, pin2, mask1, mask2) \ case swtch: \ if ((int)state < 0) pin1 &= ~(mask1); else pin1 |= (mask1); \ if ((int)state > 0) pin2 &= ~(mask2); else pin2 |= (mask2); \ break; -#define KEY_CASE(key, pin, mask) \ - case key: \ - if ((int)state > 0) pin &= ~mask; else pin |= mask;\ - break; +#define KEY_CASE NEG_CASE #define TRIM_CASE KEY_CASE #else -#define SWITCH_CASE(swtch, pin, mask) \ - case swtch: \ - if ((int)state > 0) pin &= ~(mask); else pin |= (mask); \ - break; +#if defined(PCBMEGA2560) +#define SWITCH_CASE POS_CASE +#else +#define SWITCH_CASE NEG_CASE +#endif #define SWITCH_3_CASE(swtch, pin1, pin2, mask1, mask2) \ case swtch: \ if ((int)state >= 0) pin1 &= ~(mask1); else pin1 |= (mask1); \ if ((int)state <= 0) pin2 &= ~(mask2); else pin2 |= (mask2); \ break; -#define KEY_CASE(key, pin, mask) \ - case key: \ - if ((int)state > 0) pin |= (mask); else pin &= ~(mask);\ - break; +#define KEY_CASE POS_CASE #define TRIM_CASE KEY_CASE #endif diff --git a/radio/src/targets/simu/simpgmspace.h b/radio/src/targets/simu/simpgmspace.h index da0338fb6..00e7292e6 100644 --- a/radio/src/targets/simu/simpgmspace.h +++ b/radio/src/targets/simu/simpgmspace.h @@ -367,6 +367,8 @@ extern uint8_t main_thread_running; #define SIMU_SLEEP(x) do { if (!main_thread_running) return; sleep(x/*ms*/); } while (0) #define SIMU_SLEEP_NORET(x) do { sleep(x/*ms*/); } while (0) +void simuInit(); + void simuSetKey(uint8_t key, bool state); void simuSetTrim(uint8_t trim, bool state); void simuSetSwitch(uint8_t swtch, int8_t state); diff --git a/radio/src/tests/gtests.cpp b/radio/src/tests/gtests.cpp index 01557fcec..70ac5bd1a 100644 --- a/radio/src/tests/gtests.cpp +++ b/radio/src/tests/gtests.cpp @@ -60,6 +60,7 @@ const char * zchar2string(const char * zstring, int size) int main(int argc, char **argv) { QCoreApplication app(argc, argv); + simuInit(); StartEepromThread(NULL); g_menuStackPtr = 0; g_menuStack[0] = menuMainView;