From 45c5d376938f1a4bbabc7d83c4bcda01c91bca82 Mon Sep 17 00:00:00 2001 From: jflyper Date: Mon, 12 Feb 2018 15:57:15 +0900 Subject: [PATCH] Use permanentId for config, convert to boxId_e at init --- src/main/interface/settings.c | 5 ++++- src/main/io/piniobox.c | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/interface/settings.c b/src/main/interface/settings.c index 71cf397b7c..c69dfc3fa4 100644 --- a/src/main/interface/settings.c +++ b/src/main/interface/settings.c @@ -70,6 +70,7 @@ #include "pg/pg.h" #include "pg/pg_ids.h" #include "pg/pinio.h" +#include "pg/piniobox.h" #include "pg/rx_pwm.h" #include "pg/sdcard.h" #include "pg/vcd.h" @@ -869,7 +870,9 @@ const clivalue_t valueTable[] = { // PG_PINIO_CONFIG #ifdef USE_PINIO { "pinio_config", VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length = PINIO_COUNT, PG_PINIO_CONFIG, offsetof(pinioConfig_t, config) }, - { "piniobox_config", VAR_INT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length = PINIO_COUNT, PG_PINIOBOX_CONFIG, offsetof(pinioBoxConfig_t, boxId) }, +#ifdef USE_PINIOBOX + { "pinio_box", VAR_INT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length = PINIO_COUNT, PG_PINIOBOX_CONFIG, offsetof(pinioBoxConfig_t, boxId) }, +#endif #endif }; diff --git a/src/main/io/piniobox.c b/src/main/io/piniobox.c index 88930cf89e..eb1349ff1c 100644 --- a/src/main/io/piniobox.c +++ b/src/main/io/piniobox.c @@ -33,11 +33,22 @@ #include "piniobox.h" -static const pinioBoxConfig_t *config; +static pinioBoxConfig_t pinioBoxRuntimeConfig; void pinioBoxInit(const pinioBoxConfig_t *pinioBoxConfig) { - config = pinioBoxConfig; + // Convert permanentId to boxId_e + + pinioBoxRuntimeConfig = *pinioBoxConfig; + + for (int i = 0; i < PINIO_COUNT; i++) { + if (pinioBoxRuntimeConfig.boxId[i] >= 0) { + const box_t *box = findBoxByPermanentId(pinioBoxRuntimeConfig.boxId[i]); + if (box) { + pinioBoxRuntimeConfig.boxId[i] = box->boxId; + } + } + } } void pinioBoxUpdate(timeUs_t currentTimeUs) @@ -45,7 +56,9 @@ void pinioBoxUpdate(timeUs_t currentTimeUs) UNUSED(currentTimeUs); for (int i = 0; i < PINIO_COUNT; i++) { - pinioSet(i, getBoxIdState(config->boxId[i])); + if (pinioBoxRuntimeConfig.boxId[i] >= 0) { + pinioSet(i, getBoxIdState(pinioBoxRuntimeConfig.boxId[i])); + } } }