diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index 14009f5f8..3dbfc5911 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -173,14 +173,25 @@ struct AudioFragment { strcpy(file, filename); } - void clear() { memset(this, 0, sizeof(AudioFragment)); }; + void clear() + { + memset(reinterpret_cast(this), 0, sizeof(AudioFragment)); + } }; class ToneContext { public: - inline void clear() { memset(this, 0, sizeof(ToneContext)); }; - bool isFree() const { return fragment.type == FRAGMENT_EMPTY; }; + inline void clear() + { + memset(reinterpret_cast(this), 0, sizeof(ToneContext)); + } + + bool isFree() const + { + return fragment.type == FRAGMENT_EMPTY; + } + int mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade); void setFragment(uint16_t freq, uint16_t duration, uint16_t pause, uint8_t repeat, int8_t freqIncr, bool reset, uint8_t id=0) @@ -265,8 +276,10 @@ class MixedContext { int mixBuffer(AudioBuffer *buffer, int toneVolume, int wavVolume, unsigned int fade) { - if (isTone()) return tone.mixBuffer(buffer, toneVolume, fade); - else if (isFile()) return wav.mixBuffer(buffer, wavVolume, fade); + if (isTone()) + return tone.mixBuffer(buffer, toneVolume, fade); + else if (isFile()) + return wav.mixBuffer(buffer, wavVolume, fade); return 0; } @@ -296,14 +309,17 @@ class AudioBufferFifo { { return (idx >= AUDIO_BUFFER_COUNT-1 ? 0 : idx+1); } + bool full() const { return bufferFull; } + bool empty() const { return (readIdx == writeIdx) && !bufferFull; } + uint8_t used() const { return bufferFull ? AUDIO_BUFFER_COUNT : writeIdx - readIdx; diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 28c39bdbb..554867789 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -509,8 +509,9 @@ typedef uint8_t swarnenable_t; #if defined(PCBHORUS) #include "gui/480x272/layout.h" #include "gui/480x272/topbar.h" +#define LAYOUT_NAME_LEN 10 PACK(struct CustomScreenData { - char layoutName[10]; + char layoutName[LAYOUT_NAME_LEN]; Layout::PersistentData layoutData; }); #define CUSTOM_SCREENS_DATA \ @@ -690,8 +691,9 @@ PACK(struct TrainerData { #if defined(PCBHORUS) #include "gui/480x272/theme.h" + #define THEME_NAME_LEN 8 #define THEME_DATA \ - NOBACKUP(char themeName[8]); \ + NOBACKUP(char themeName[THEME_NAME_LEN]); \ NOBACKUP(Theme::PersistentData themeData); #else #define THEME_DATA diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index 675a9a214..d46766dfd 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -90,12 +90,12 @@ PLAY_FUNCTION(playValue, source_t idx) void playCustomFunctionFile(const CustomFunctionData * sd, uint8_t id) { if (sd->play.name[0] != '\0') { - char filename[sizeof(SOUNDS_PATH)+sizeof(sd->play.name)+sizeof(SOUNDS_EXT)] = SOUNDS_PATH "/"; - strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - strncpy(filename+sizeof(SOUNDS_PATH), sd->play.name, sizeof(sd->play.name)); - filename[sizeof(SOUNDS_PATH)+sizeof(sd->play.name)] = '\0'; - strcat(filename+sizeof(SOUNDS_PATH), SOUNDS_EXT); - PLAY_FILE(filename, sd->func==FUNC_BACKGND_MUSIC ? PLAY_BACKGROUND : 0, id); + char filename[sizeof(SOUNDS_PATH) + LEN_FUNCTION_NAME + sizeof(SOUNDS_EXT)] = SOUNDS_PATH "/"; + strncpy(filename + SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); + strncpy(filename + sizeof(SOUNDS_PATH), sd->play.name, LEN_FUNCTION_NAME); + filename[sizeof(SOUNDS_PATH) + LEN_FUNCTION_NAME] = '\0'; + strcat(filename + sizeof(SOUNDS_PATH), SOUNDS_EXT); + PLAY_FILE(filename, sd->func == FUNC_BACKGND_MUSIC ? PLAY_BACKGROUND : 0, id); } } diff --git a/radio/src/gui/212x64/lcd.cpp b/radio/src/gui/212x64/lcd.cpp index b82106e75..9d22ca982 100644 --- a/radio/src/gui/212x64/lcd.cpp +++ b/radio/src/gui/212x64/lcd.cpp @@ -36,7 +36,7 @@ inline bool lcdIsPointOutside(coord_t x, coord_t y) void lcdClear() { - memset(displayBuf, 0, DISPLAY_BUFFER_SIZE); + memset(displayBuf, 0, DISPLAY_BUFFER_SIZE * sizeof(display_t)); } coord_t lcdLastRightPos; diff --git a/radio/src/gui/480x272/layout.cpp b/radio/src/gui/480x272/layout.cpp index 0176baddc..4366ac475 100644 --- a/radio/src/gui/480x272/layout.cpp +++ b/radio/src/gui/480x272/layout.cpp @@ -56,9 +56,9 @@ void loadCustomScreens() { for (unsigned int i=0; idrawBitmap(0, 0, modelselWizardBackground); diff --git a/radio/src/gui/480x272/theme.cpp b/radio/src/gui/480x272/theme.cpp index 260ecefe4..e4a60bec9 100644 --- a/radio/src/gui/480x272/theme.cpp +++ b/radio/src/gui/480x272/theme.cpp @@ -144,9 +144,9 @@ void loadTheme(Theme * new_theme) void loadTheme() { - char name[sizeof(g_eeGeneral.themeName)+1]; + char name[THEME_NAME_LEN + 1]; memset(name, 0, sizeof(name)); - strncpy(name, g_eeGeneral.themeName, sizeof(g_eeGeneral.themeName)); + strncpy(name, g_eeGeneral.themeName, THEME_NAME_LEN); Theme * new_theme = getTheme(name); if (new_theme) { loadTheme(new_theme); diff --git a/radio/src/gui/480x272/widgets_container.h b/radio/src/gui/480x272/widgets_container.h index 13c02f570..c2fbd9cdd 100644 --- a/radio/src/gui/480x272/widgets_container.h +++ b/radio/src/gui/480x272/widgets_container.h @@ -47,12 +47,14 @@ class WidgetsContainerInterface Widget ** widgets; }; +#define WIDGET_NAME_LEN 10 + template class WidgetsContainer: public WidgetsContainerInterface { public: struct ZonePersistentData { - char widgetName[10]; + char widgetName[WIDGET_NAME_LEN]; Widget::PersistentData widgetData; }; @@ -104,9 +106,9 @@ class WidgetsContainer: public WidgetsContainerInterface for (unsigned int i=0; izones[i].widgetName[0]) { - char name[sizeof(persistentData->zones[i].widgetName)+1]; + char name[WIDGET_NAME_LEN + 1]; memset(name, 0, sizeof(name)); - strncpy(name, persistentData->zones[i].widgetName, sizeof(persistentData->zones[i].widgetName)); + strncpy(name, persistentData->zones[i].widgetName, WIDGET_NAME_LEN); widgets[i] = loadWidget(name, getZone(i), &persistentData->zones[i].widgetData); } else { diff --git a/radio/src/lua/interface.cpp b/radio/src/lua/interface.cpp index 513d0ce8e..235e83afa 100644 --- a/radio/src/lua/interface.cpp +++ b/radio/src/lua/interface.cpp @@ -620,10 +620,10 @@ bool luaLoadMixScript(uint8_t index) ScriptInputsOutputs * sio = &scriptInputsOutputs[index]; sid.reference = SCRIPT_MIX_FIRST+index; sid.state = SCRIPT_NOFILE; - char filename[sizeof(SCRIPTS_MIXES_PATH)+sizeof(sd.file)+sizeof(SCRIPT_EXT)] = SCRIPTS_MIXES_PATH "/"; - strncpy(filename+sizeof(SCRIPTS_MIXES_PATH), sd.file, sizeof(sd.file)); - filename[sizeof(SCRIPTS_MIXES_PATH)+sizeof(sd.file)] = '\0'; - strcat(filename+sizeof(SCRIPTS_MIXES_PATH), SCRIPT_EXT); + char filename[sizeof(SCRIPTS_MIXES_PATH) + LEN_SCRIPT_FILENAME + sizeof(SCRIPT_EXT)] = SCRIPTS_MIXES_PATH "/"; + strncpy(filename + sizeof(SCRIPTS_MIXES_PATH), sd.file, LEN_SCRIPT_FILENAME); + filename[sizeof(SCRIPTS_MIXES_PATH) + LEN_SCRIPT_FILENAME] = '\0'; + strcat(filename + sizeof(SCRIPTS_MIXES_PATH), SCRIPT_EXT); if (luaLoad(lsScripts, filename, sid, sio) == SCRIPT_PANIC) { return false; } @@ -643,10 +643,10 @@ bool luaLoadFunctionScript(uint8_t index, uint8_t ref) ScriptInternalData & sid = scriptInternalData[luaScriptsCount++]; sid.reference = ref + index; sid.state = SCRIPT_NOFILE; - char filename[sizeof(SCRIPTS_FUNCS_PATH)+sizeof(fn.play.name)+sizeof(SCRIPT_EXT)] = SCRIPTS_FUNCS_PATH "/"; - strncpy(filename+sizeof(SCRIPTS_FUNCS_PATH), fn.play.name, sizeof(fn.play.name)); - filename[sizeof(SCRIPTS_FUNCS_PATH)+sizeof(fn.play.name)] = '\0'; - strcat(filename+sizeof(SCRIPTS_FUNCS_PATH), SCRIPT_EXT); + char filename[sizeof(SCRIPTS_FUNCS_PATH) + LEN_FUNCTION_NAME + sizeof(SCRIPT_EXT)] = SCRIPTS_FUNCS_PATH "/"; + strncpy(filename + sizeof(SCRIPTS_FUNCS_PATH), fn.play.name, LEN_FUNCTION_NAME); + filename[sizeof(SCRIPTS_FUNCS_PATH) + LEN_FUNCTION_NAME] = '\0'; + strcat(filename + sizeof(SCRIPTS_FUNCS_PATH), SCRIPT_EXT); if (luaLoad(lsScripts, filename, sid) == SCRIPT_PANIC) { return false; } diff --git a/radio/src/lua/lua_api.h b/radio/src/lua/lua_api.h index 7093bcd6d..62887b829 100644 --- a/radio/src/lua/lua_api.h +++ b/radio/src/lua/lua_api.h @@ -59,8 +59,8 @@ void luaInitThemesAndWidgets(); #define lua_pushtableinteger(L, k, v) (lua_pushstring(L, (k)), lua_pushinteger(L, (v)), lua_settable(L, -3)) #define lua_pushtablenumber(L, k, v) (lua_pushstring(L, (k)), lua_pushnumber(L, (v)), lua_settable(L, -3)) #define lua_pushtablestring(L, k, v) (lua_pushstring(L, (k)), lua_pushstring(L, (v)), lua_settable(L, -3)) -#define lua_pushtablenzstring(L, k, v) { char tmp[sizeof(v)+1]; strncpy(tmp, (v), sizeof(v)); tmp[sizeof(v)] = '\0'; lua_pushstring(L, (k)); lua_pushstring(L, tmp); lua_settable(L, -3); } -#define lua_pushtablezstring(L, k, v) { char tmp[sizeof(v)+1]; zchar2str(tmp, (v), sizeof(v)); lua_pushstring(L, (k)); lua_pushstring(L, tmp); lua_settable(L, -3); } +#define lua_pushtablenzstring(L, k, v) { char tmp[sizeof(v)+1]; strncpy(tmp, (v), sizeof(tmp)-1); tmp[sizeof(v)] = '\0'; lua_pushstring(L, (k)); lua_pushstring(L, tmp); lua_settable(L, -3); } +#define lua_pushtablezstring(L, k, v) { char tmp[sizeof(v)+1]; zchar2str(tmp, (v), sizeof(tmp)-1); lua_pushstring(L, (k)); lua_pushstring(L, tmp); lua_settable(L, -3); } #define lua_registerlib(L, name, tab) (luaL_newmetatable(L, name), luaL_setfuncs(L, tab, 0), lua_setglobal(L, name)) #define RUN_MIX_SCRIPT (1 << 0) diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index 484c62705..662a8538a 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -82,7 +82,7 @@ Open9xSim::Open9xSim(FXApp* a): FXMainWindow(a, "OpenTX Simu", NULL, NULL, DECOR_ALL, 20, 90, 0, 0) { firstTime = true; - memset(displayBuf, 0, DISPLAY_BUFFER_SIZE); + memset(displayBuf, 0, DISPLAY_BUFFER_SIZE * sizeof(display_t)); bmp = new FXPPMImage(getApp(),NULL,IMAGE_OWNED|IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP, W2, H2); #if defined(SIMU_AUDIO) diff --git a/radio/src/targets/horus/lcd_driver.cpp b/radio/src/targets/horus/lcd_driver.cpp index f138a0df6..110db0007 100644 --- a/radio/src/targets/horus/lcd_driver.cpp +++ b/radio/src/targets/horus/lcd_driver.cpp @@ -32,9 +32,9 @@ #define LCD_FIRST_LAYER 0 #define LCD_SECOND_LAYER 1 -uint8_t LCD_FIRST_FRAME_BUFFER[DISPLAY_BUFFER_SIZE] __SDRAM; -uint8_t LCD_SECOND_FRAME_BUFFER[DISPLAY_BUFFER_SIZE] __SDRAM; -uint8_t LCD_BACKUP_FRAME_BUFFER[DISPLAY_BUFFER_SIZE] __SDRAM; +uint8_t LCD_FIRST_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(display_t)] __SDRAM; +uint8_t LCD_SECOND_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(display_t)] __SDRAM; +uint8_t LCD_BACKUP_FRAME_BUFFER[DISPLAY_BUFFER_SIZE * sizeof(display_t)] __SDRAM; uint32_t CurrentLayer = LCD_FIRST_LAYER; @@ -562,12 +562,12 @@ void DMAcopy(void * src, void * dest, int len) void lcdStoreBackupBuffer() { - DMAcopy(lcd->getData(), LCD_BACKUP_FRAME_BUFFER, DISPLAY_BUFFER_SIZE); + DMAcopy(lcd->getData(), LCD_BACKUP_FRAME_BUFFER, DISPLAY_BUFFER_SIZE * sizeof(display_t)); } int lcdRestoreBackupBuffer() { - DMAcopy(LCD_BACKUP_FRAME_BUFFER, lcd->getData(), DISPLAY_BUFFER_SIZE); + DMAcopy(LCD_BACKUP_FRAME_BUFFER, lcd->getData(), DISPLAY_BUFFER_SIZE * sizeof(display_t)); return 1; } diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index 5d9c9e513..641872af6 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -552,8 +552,8 @@ void lcdRefresh() { static bool lightEnabled = (bool)isBacklightEnabled(); - if (bool(isBacklightEnabled()) != lightEnabled || memcmp(simuLcdBuf, displayBuf, DISPLAY_BUFFER_SIZE)) { - memcpy(simuLcdBuf, displayBuf, DISPLAY_BUFFER_SIZE); + if (bool(isBacklightEnabled()) != lightEnabled || memcmp(simuLcdBuf, displayBuf, DISPLAY_BUFFER_SIZE * sizeof(display_t))) { + memcpy(simuLcdBuf, displayBuf, DISPLAY_BUFFER_SIZE * sizeof(display_t)); lightEnabled = (bool)isBacklightEnabled(); simuLcdRefresh = true; } diff --git a/radio/src/telemetry/telemetry_sensors.h b/radio/src/telemetry/telemetry_sensors.h index a0f856a87..d891502fb 100644 --- a/radio/src/telemetry/telemetry_sensors.h +++ b/radio/src/telemetry/telemetry_sensors.h @@ -91,7 +91,7 @@ class TelemetryItem void clear() { - memset(this, 0, sizeof(*this)); + memset(reinterpret_cast(this), 0, sizeof(TelemetryItem)); lastReceived = TELEMETRY_VALUE_UNAVAILABLE; }