diff --git a/.travis.yml b/.travis.yml index 442466067..250735ba0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,6 +51,7 @@ before_install: - sudo apt-get update -qq - pyenv uninstall -f 2.7.6 && pyenv install 3.5.4 && pyenv global 3.5.4 - pip install pillow + - pip install clang install: - sudo apt-get --yes --force-yes install curl libmpfr4 libmpc3 libfox-1.6-dev libgtest-dev diff --git a/radio/src/storage/datacopy.cpp b/radio/src/storage/datacopy.cpp deleted file mode 100644 index d1fa3aef2..000000000 --- a/radio/src/storage/datacopy.cpp +++ /dev/null @@ -1,369 +0,0 @@ -//This file was auto-generated by generate_datacopy.py script on Sat Nov 16 10:08:05 2019. Do not edit this file! - - - -template -void copyCurveRef(A * dest, B * src) -{ - dest->type = src->type; - dest->value = src->value; -} - -template -void copyMixData(A * dest, B * src) -{ - dest->weight = src->weight; - dest->destCh = src->destCh; - dest->srcRaw = src->srcRaw; - dest->carryTrim = src->carryTrim; - dest->mixWarn = src->mixWarn; - dest->mltpx = src->mltpx; - dest->spare = src->spare; - dest->offset = src->offset; - dest->swtch = src->swtch; - dest->flightModes = src->flightModes; - copyCurveRef(&dest->curve, &src->curve); - dest->delayUp = src->delayUp; - dest->delayDown = src->delayDown; - dest->speedUp = src->speedUp; - dest->speedDown = src->speedDown; -} - -template -void copyExpoData(A * dest, B * src) -{ - dest->mode = src->mode; - dest->scale = src->scale; - dest->srcRaw = src->srcRaw; - dest->carryTrim = src->carryTrim; - dest->chn = src->chn; - dest->swtch = src->swtch; - dest->flightModes = src->flightModes; - dest->weight = src->weight; - dest->spare = src->spare; - dest->offset = src->offset; - copyCurveRef(&dest->curve, &src->curve); -} - -template -void copyLimitData(A * dest, B * src) -{ - dest->min = src->min; - dest->max = src->max; - dest->ppmCenter = src->ppmCenter; - dest->offset = src->offset; - dest->symetrical = src->symetrical; - dest->revert = src->revert; - dest->spare = src->spare; - dest->curve = src->curve; -} - -template -void copyLogicalSwitchData(A * dest, B * src) -{ - dest->func = src->func; - dest->v1 = src->v1; - dest->v3 = src->v3; - dest->andsw = src->andsw; - dest->andswtype = src->andswtype; - dest->spare = src->spare; - dest->v2 = src->v2; - dest->delay = src->delay; - dest->duration = src->duration; -} - -template -void copyCustomFunctionData(A * dest, B * src) -{ - dest->swtch = src->swtch; - dest->func = src->func; - copyCustomFunctionData_all(&dest->all, &src->all); - dest->active = src->active; -} - -template -void copytrim_t(A * dest, B * src) -{ - dest->value = src->value; - dest->mode = src->mode; -} - -template -void copyFlightModeData(A * dest, B * src) -{ - for (int i=0; i<6; i++) { - copytrim_t(&dest->trim[i], &src->trim[i]); - } - dest->swtch = src->swtch; - dest->spare = src->spare; - dest->fadeIn = src->fadeIn; - dest->fadeOut = src->fadeOut; - memcpy(dest->gvars, src->gvars, sizeof(dest->gvars)); -} - -template -void copyCurveData(A * dest, B * src) -{ - dest->type = src->type; - dest->smooth = src->smooth; - dest->points = src->points; -} - -template -void copyGVarData(A * dest, B * src) -{ - dest->min = src->min; - dest->max = src->max; - dest->popup = src->popup; - dest->prec = src->prec; - dest->unit = src->unit; - dest->spare = src->spare; -} - -template -void copyTimerData(A * dest, B * src) -{ - dest->mode = src->mode; - dest->start = src->start; - dest->value = src->value; - dest->countdownBeep = src->countdownBeep; - dest->minuteBeep = src->minuteBeep; - dest->persistent = src->persistent; - dest->countdownStart = src->countdownStart; - dest->direction = src->direction; -} - -template -void copySwashRingData(A * dest, B * src) -{ - dest->type = src->type; - dest->value = src->value; - dest->collectiveSource = src->collectiveSource; - dest->aileronSource = src->aileronSource; - dest->elevatorSource = src->elevatorSource; - dest->collectiveWeight = src->collectiveWeight; - dest->aileronWeight = src->aileronWeight; - dest->elevatorWeight = src->elevatorWeight; -} - -template -void copyScriptData(A * dest, B * src) -{ - memcpy(dest->file, src->file, sizeof(dest->file)); - memcpy(dest->name, src->name, sizeof(dest->name)); - memcpy(dest->inputs, src->inputs, sizeof(dest->inputs)); -} - -template -void copyRssiAlarmData(A * dest, B * src) -{ - dest->disabled = src->disabled; - dest->spare = src->spare; - dest->warning = src->warning; - dest->spare2 = src->spare2; - dest->critical = src->critical; -} - -template -void copyVarioData(A * dest, B * src) -{ - dest->source = src->source; - dest->centerSilent = src->centerSilent; - dest->centerMax = src->centerMax; - dest->centerMin = src->centerMin; - dest->min = src->min; - dest->max = src->max; -} - -template -void copyTelemetrySensor(A * dest, B * src) -{ - dest->id = src->id; - copyTelemetrySensor_frskyInstance(&dest->frskyInstance, &src->frskyInstance); - memcpy(dest->label, src->label, sizeof(dest->label)); - dest->subId = src->subId; - dest->type = src->type; - dest->spare1 = src->spare1; - dest->unit = src->unit; - dest->prec = src->prec; - dest->autoOffset = src->autoOffset; - dest->filter = src->filter; - dest->logs = src->logs; - dest->persistent = src->persistent; - dest->onlyPositive = src->onlyPositive; - dest->spare2 = src->spare2; - dest->param = src->param; -} - -template -void copyTrainerModuleData(A * dest, B * src) -{ - dest->mode = src->mode; - dest->spare1 = src->spare1; - dest->channelsStart = src->channelsStart; - dest->channelsCount = src->channelsCount; - dest->frameLength = src->frameLength; - dest->delay = src->delay; - dest->pulsePol = src->pulsePol; - dest->spare2 = src->spare2; -} - -template -void copyModuleData(A * dest, B * src) -{ - dest->type = src->type; - dest->rfProtocol = src->rfProtocol; - dest->channelsStart = src->channelsStart; - dest->channelsCount = src->channelsCount; - dest->failsafeMode = src->failsafeMode; - dest->subType = src->subType; - dest->invertedSerial = src->invertedSerial; - copyModuleData_ppm(&dest->ppm, &src->ppm); -} - -template -void copyModelHeader(A * dest, B * src) -{ - memcpy(dest->name, src->name, sizeof(dest->name)); - memcpy(dest->modelId, src->modelId, sizeof(dest->modelId)); -} - -template -void copyCustomScreenData(A * dest, B * src) -{ - memcpy(dest->layoutName, src->layoutName, sizeof(dest->layoutName)); - dest->layoutData = src->layoutData; -} - -template -void copyModelData(A * dest, B * src) -{ - copyModelHeader(&dest->header, &src->header); - for (int i=0; i<3; i++) { - copyTimerData(&dest->timers[i], &src->timers[i]); - } - dest->telemetryProtocol = src->telemetryProtocol; - dest->thrTrim = src->thrTrim; - dest->noGlobalFunctions = src->noGlobalFunctions; - dest->displayTrims = src->displayTrims; - dest->ignoreSensorIds = src->ignoreSensorIds; - dest->trimInc = src->trimInc; - dest->disableThrottleWarning = src->disableThrottleWarning; - dest->displayChecklist = src->displayChecklist; - dest->extendedLimits = src->extendedLimits; - dest->extendedTrims = src->extendedTrims; - dest->throttleReversed = src->throttleReversed; - dest->beepANACenter = src->beepANACenter; - for (int i=0; i<64; i++) { - copyMixData(&dest->mixData[i], &src->mixData[i]); - } - for (int i=0; i<32; i++) { - copyLimitData(&dest->limitData[i], &src->limitData[i]); - } - for (int i=0; i<64; i++) { - copyExpoData(&dest->expoData[i], &src->expoData[i]); - } - for (int i=0; i<32; i++) { - copyCurveData(&dest->curves[i], &src->curves[i]); - } - memcpy(dest->points, src->points, sizeof(dest->points)); - for (int i=0; i<64; i++) { - copyLogicalSwitchData(&dest->logicalSw[i], &src->logicalSw[i]); - } - for (int i=0; i<64; i++) { - copyCustomFunctionData(&dest->customFn[i], &src->customFn[i]); - } - copySwashRingData(&dest->swashR, &src->swashR); - for (int i=0; i<9; i++) { - copyFlightModeData(&dest->flightModeData[i], &src->flightModeData[i]); - } - for (int i=0; i<9; i++) { - copyGVarData(&dest->gvars[i], &src->gvars[i]); - } - for (int i=0; i<2; i++) { - copyModuleData(&dest->moduleData[i], &src->moduleData[i]); - } - memcpy(dest->failsafeChannels, src->failsafeChannels, sizeof(dest->failsafeChannels)); - copyTrainerModuleData(&dest->trainerData, &src->trainerData); - memcpy(dest->modelRegistrationID, src->modelRegistrationID, sizeof(dest->modelRegistrationID)); -} - -template -void copyStepsCalibData(A * dest, B * src) -{ - dest->count = src->count; - memcpy(dest->steps, src->steps, sizeof(dest->steps)); -} - -template -void copyCalibData(A * dest, B * src) -{ - dest->mid = src->mid; - dest->spanNeg = src->spanNeg; - dest->spanPos = src->spanPos; -} - -template -void copyTrainerMix(A * dest, B * src) -{ - dest->srcChn = src->srcChn; - dest->mode = src->mode; - dest->studWeight = src->studWeight; -} - -template -void copyTrainerData(A * dest, B * src) -{ - memcpy(dest->calib, src->calib, sizeof(dest->calib)); -} - -template -void copyRadioData(A * dest, B * src) -{ - for (int i=0; i<15; i++) { - copyCalibData(&dest->calib[i], &src->calib[i]); - } - dest->backlightMode = src->backlightMode; - dest->antennaMode = src->antennaMode; - dest->disableRtcWarning = src->disableRtcWarning; - dest->spare1 = src->spare1; - dest->stickMode = src->stickMode; - dest->timezone = src->timezone; - dest->adjustRTC = src->adjustRTC; - dest->telemetryBaudrate = src->telemetryBaudrate; - dest->splashSpares = src->splashSpares; - dest->hapticMode = src->hapticMode; - dest->switchesDelay = src->switchesDelay; - for (int i=0; i<64; i++) { - copyCustomFunctionData(&dest->customFn[i], &src->customFn[i]); - } - dest->switchConfig = src->switchConfig; - dest->potsConfig = src->potsConfig; - dest->slidersConfig = src->slidersConfig; - memcpy(dest->ownerRegistrationID, src->ownerRegistrationID, sizeof(dest->ownerRegistrationID)); -} - -template -void copyCustomFunctionData_all(A * dest, B * src) -{ - dest->val = src->val; - dest->mode = src->mode; - dest->param = src->param; -} - -template -void copyTelemetrySensor_frskyInstance(A * dest, B * src) -{ - dest->physID = src->physID; - dest->rxIndex = src->rxIndex; -} - -template -void copyModuleData_ppm(A * dest, B * src) -{ - dest->delay = src->delay; - dest->pulsePol = src->pulsePol; - dest->outputType = src->outputType; - dest->frameLength = src->frameLength; -} - diff --git a/radio/src/targets/horus/CMakeLists.txt b/radio/src/targets/horus/CMakeLists.txt index 2a9af5ed1..48d88e1c6 100644 --- a/radio/src/targets/horus/CMakeLists.txt +++ b/radio/src/targets/horus/CMakeLists.txt @@ -91,7 +91,11 @@ endif() add_definitions(-DPCBREV=${PCBREV}) add_definitions(-DPCBREV_${PCBREV}) -set(FIRMWARE_DEPENDENCIES ${FIRMWARE_DEPENDENCIES} ${BITMAPS_TARGET}) +set(FIRMWARE_DEPENDENCIES + ${FIRMWARE_DEPENDENCIES} + ${BITMAPS_TARGET} + datacopy + ) add_definitions(-DPCBHORUS -DSTM32F429_439xx -DSDRAM -DCOLORLCD) add_definitions(-DEEPROM_VARIANT=0 -DAUDIO -DVOICE -DRTCLOCK) diff --git a/radio/util/generate_datacopy.py b/radio/util/generate_datacopy.py index 4097de061..3b233d712 100755 --- a/radio/util/generate_datacopy.py +++ b/radio/util/generate_datacopy.py @@ -22,6 +22,7 @@ if sys.platform == "linux2": structs = [] extrastructs = [] + def build_struct(cursor, anonymousUnion=False): if not anonymousUnion: structs.append(cursor.spelling) @@ -32,7 +33,7 @@ def build_struct(cursor, anonymousUnion=False): if c.spelling: raise "Cannot handle non anonymous unions" - copiedUnionMember = False + copied_union_member = False for uc in c.get_children(): if not uc.spelling or uc.kind == clang.cindex.CursorKind.PACKED_ATTR: # Ignore @@ -40,11 +41,11 @@ def build_struct(cursor, anonymousUnion=False): else: # per default we copy only the first member of a union and warn if there are more # members (declare the other members NOBACKUP) - if copiedUnionMember: - print ("Warning more than one union member (%s) in anynomous union inside struct %s, consider NOBACKUP statements" % (uc.spelling, cursor.spelling), file=sys.stderr) + if copied_union_member: + print("Warning more than one union member (%s) in anynomous union inside struct %s, consider NOBACKUP statements" % (uc.spelling, cursor.spelling), file=sys.stderr) else: copy_decl(uc, uc.spelling) - copiedUnionMember = True + copied_union_member = True elif c.kind == clang.cindex.CursorKind.FIELD_DECL: copy_decl(c, c.spelling) @@ -52,6 +53,7 @@ def build_struct(cursor, anonymousUnion=False): if not anonymousUnion: print("}\n") + def build(cursor): result = [] for c in cursor.get_children(): @@ -61,13 +63,13 @@ def build(cursor): for c, spelling in extrastructs: print("template \nvoid copy%s(A * dest, B * src)\n{" % spelling) build_struct(c, True) - print ("}\n") + print("}\n") return result def copy_decl(c, spelling): - childs = [ch for ch in c.get_children()] + children = [ch for ch in c.get_children()] 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()) @@ -75,16 +77,15 @@ def copy_decl(c, spelling): print(" }") else: print(" memcpy(dest->%s, src->%s, sizeof(dest->%s));" % (spelling, spelling, spelling)) - elif len(childs)==1 and childs[0].kind == clang.cindex.CursorKind.STRUCT_DECL and not childs[0].spelling: + elif len(children) == 1 and children[0].kind == clang.cindex.CursorKind.STRUCT_DECL and not children[0].spelling: # inline declared structs if c.semantic_parent.spelling: - spellingFunc = c.semantic_parent.spelling + "_" + spelling + spelling_func = c.semantic_parent.spelling + "_" + spelling else: - spellingFunc = c.semantic_parent.semantic_parent.spelling + "_" + spelling - - extrastructs.append((childs[0], spellingFunc)) - print(" copy%s(&dest->%s, &src->%s);" % (spellingFunc, spelling, spelling)) + spelling_func = c.semantic_parent.semantic_parent.spelling + "_" + spelling + extrastructs.append((children[0], spelling_func)) + print(" copy%s(&dest->%s, &src->%s);" % (spelling_func, spelling, spelling)) elif c.type.get_declaration().spelling in structs: print(" copy%s(&dest->%s, &src->%s);" % (c.type.get_declaration().spelling, spelling, spelling)) else: @@ -92,7 +93,8 @@ def copy_decl(c, spelling): def header(): - print("//This file was auto-generated by %s script on %s. Do not edit this file!\n\n\n" % (os.path.basename(sys.argv[0]), time.asctime())) + print("// This file was auto-generated by %s script on %s. Do not edit this file!\n\n\n" % (os.path.basename(sys.argv[0]), time.asctime())) + index = clang.cindex.Index.create() translation_unit = index.parse(sys.argv[1], ['-x', 'c++', '-std=c++11'] + sys.argv[2:])