From 8e2c280e4ad3bc5304a56b1b4285ea9076be46b5 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Sat, 5 Mar 2016 12:42:19 +0100 Subject: [PATCH] Script for code generation for model/radio structure copy is now OK --- radio/src/CMakeLists.txt | 2 +- radio/src/storage/rambackup.cpp | 9 +++++++-- radio/util/generate_datacopy.py | 4 +++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index d138e30aa..ae23ec22c 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -116,7 +116,7 @@ if(PCB STREQUAL HORUS) ) add_custom_command( OUTPUT datacopy.cpp - COMMAND python ${RADIO_DIRECTORY}/util/generate_datacopy.py ${RADIO_DIRECTORY}/src/datastructs.h -DPCBHORUS -DCPUARM -DCOLORLCD -DBACKUP > datacopy.cpp + COMMAND python ${RADIO_DIRECTORY}/util/generate_datacopy.py ${RADIO_DIRECTORY}/src/datastructs.h -DPCBHORUS -DCPUARM -DCOLORLCD -DVIRTUALINPUTS -DBACKUP > datacopy.cpp DEPENDS ${RADIO_DIRECTORY}/src/datastructs.h ${RADIO_DIRECTORY}/util/generate_datacopy.py ) add_custom_target(datacopy DEPENDS datacopy.cpp) diff --git a/radio/src/storage/rambackup.cpp b/radio/src/storage/rambackup.cpp index 9940dd3aa..6129e2910 100644 --- a/radio/src/storage/rambackup.cpp +++ b/radio/src/storage/rambackup.cpp @@ -26,18 +26,23 @@ namespace Backup { PACK(struct RamBackup { ModelData model; RadioData radio; -}) ramBackup; +}); #undef BACKUP }; #include "datacopy.cpp" +Backup::RamBackup ramBackup; + void RamBackupWrite() { TRACE("RamBackup size=%d vs %d", sizeof(Backup::RamBackup), sizeof(ModelData)+sizeof(RadioData)); + copyRadioData(&ramBackup.radio, &g_eeGeneral); + copyModelData(&ramBackup.model, &g_model); } void RamBackupRead() { - + copyRadioData(&g_eeGeneral, &ramBackup.radio); + copyModelData(&g_model, &ramBackup.model); } diff --git a/radio/util/generate_datacopy.py b/radio/util/generate_datacopy.py index 8e8ca3d8b..f0e395e67 100644 --- a/radio/util/generate_datacopy.py +++ b/radio/util/generate_datacopy.py @@ -13,10 +13,12 @@ def build_struct(cursor): if c.type.get_array_size() > 0: if c.type.get_array_element_type().spelling in structs: print " for (int i=0; i<%d; i++) {" % c.type.get_array_size() - print " copy%s(dest->%s[i], src->%s[i]);" % (c.type.get_array_element_type().spelling, c.spelling, c.spelling) + print " copy%s(&dest->%s[i], &src->%s[i]);" % (c.type.get_array_element_type().spelling, c.spelling, c.spelling) print " }" else: print " memcpy(&dest->%s, &src->%s, sizeof(dest->%s));" % (c.spelling, c.spelling, c.spelling) + elif c.type.get_declaration().spelling in structs: + print " copy%s(&dest->%s, &src->%s);" % (c.type.get_declaration().spelling, c.spelling, c.spelling) else: print " dest->%s = src->%s;" % (c.spelling, c.spelling) print "}\n"