Separation of boxId and permanentId.

This commit is contained in:
jflyper 2018-02-16 10:22:50 +09:00
parent 1bcfa5ddb0
commit 18d5a373c0
7 changed files with 32 additions and 25 deletions

View File

@ -21,6 +21,8 @@
#include "pg/pg.h" #include "pg/pg.h"
#define BOXID_NONE 255
typedef enum { typedef enum {
// ARM flag // ARM flag
BOXARM = 0, BOXARM = 0,

View File

@ -270,17 +270,22 @@ void initActiveBoxIds(void)
// Turn BOXUSERx only if pinioBox facility monitors them, as the facility is the only BOXUSERx observer. // Turn BOXUSERx only if pinioBox facility monitors them, as the facility is the only BOXUSERx observer.
// Note that pinioBoxConfig can be set to monitor any box. // Note that pinioBoxConfig can be set to monitor any box.
for (int i = 0; i < PINIO_COUNT; i++) { for (int i = 0; i < PINIO_COUNT; i++) {
switch(pinioBoxConfig()->boxId[i]) { if (pinioBoxConfig()->permanentId[i] != PERMANENT_ID_NONE) {
const box_t *box = findBoxByPermanentId(pinioBoxConfig()->permanentId[i]);
if (box) {
switch(box->boxId) {
case BOXUSER1: case BOXUSER1:
case BOXUSER2: case BOXUSER2:
case BOXUSER3: case BOXUSER3:
case BOXUSER4: case BOXUSER4:
BME(pinioBoxConfig()->boxId[i]); BME(box->boxId);
break; break;
default: default:
break; break;
} }
} }
}
}
#endif #endif
#undef BME #undef BME

View File

@ -25,6 +25,8 @@ typedef struct box_s {
const uint8_t permanentId; // permanent ID used to identify BOX. This ID is unique for one function, DO NOT REUSE IT const uint8_t permanentId; // permanent ID used to identify BOX. This ID is unique for one function, DO NOT REUSE IT
} box_t; } box_t;
#define PERMANENT_ID_NONE 255
const box_t *findBoxByBoxId(boxId_e boxId); const box_t *findBoxByBoxId(boxId_e boxId);
const box_t *findBoxByPermanentId(uint8_t permanentId); const box_t *findBoxByPermanentId(uint8_t permanentId);

View File

@ -874,7 +874,7 @@ const clivalue_t valueTable[] = {
#ifdef USE_PINIO #ifdef USE_PINIO
{ "pinio_config", VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length = PINIO_COUNT, PG_PINIO_CONFIG, offsetof(pinioConfig_t, config) }, { "pinio_config", VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length = PINIO_COUNT, PG_PINIO_CONFIG, offsetof(pinioConfig_t, config) },
#ifdef USE_PINIOBOX #ifdef USE_PINIOBOX
{ "pinio_box", VAR_INT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length = PINIO_COUNT, PG_PINIOBOX_CONFIG, offsetof(pinioBoxConfig_t, boxId) }, { "pinio_box", VAR_UINT8 | MASTER_VALUE | MODE_ARRAY, .config.array.length = PINIO_COUNT, PG_PINIOBOX_CONFIG, offsetof(pinioBoxConfig_t, permanentId) },
#endif #endif
#endif #endif
}; };

View File

@ -33,21 +33,20 @@
#include "piniobox.h" #include "piniobox.h"
static pinioBoxConfig_t pinioBoxRuntimeConfig; typedef struct pinioBoxRuntimeConfig_s {
uint8_t boxId[PINIO_COUNT];
} pinioBoxRuntimeConfig_t;
static pinioBoxRuntimeConfig_t pinioBoxRuntimeConfig;
void pinioBoxInit(const pinioBoxConfig_t *pinioBoxConfig) void pinioBoxInit(const pinioBoxConfig_t *pinioBoxConfig)
{ {
// Convert permanentId to boxId_e // Convert permanentId to boxId_e
pinioBoxRuntimeConfig = *pinioBoxConfig;
for (int i = 0; i < PINIO_COUNT; i++) { for (int i = 0; i < PINIO_COUNT; i++) {
if (pinioBoxRuntimeConfig.boxId[i] >= 0) { const box_t *box = findBoxByPermanentId(pinioBoxConfig->permanentId[i]);
const box_t *box = findBoxByPermanentId(pinioBoxRuntimeConfig.boxId[i]);
if (box) { pinioBoxRuntimeConfig.boxId[i] = box ? box->boxId : BOXID_NONE;
pinioBoxRuntimeConfig.boxId[i] = box->boxId;
}
}
} }
} }
@ -56,7 +55,7 @@ void pinioBoxUpdate(timeUs_t currentTimeUs)
UNUSED(currentTimeUs); UNUSED(currentTimeUs);
for (int i = 0; i < PINIO_COUNT; i++) { for (int i = 0; i < PINIO_COUNT; i++) {
if (pinioBoxRuntimeConfig.boxId[i] >= 0) { if (pinioBoxRuntimeConfig.boxId[i] != BOXID_NONE) {
pinioSet(i, getBoxIdState(pinioBoxRuntimeConfig.boxId[i])); pinioSet(i, getBoxIdState(pinioBoxRuntimeConfig.boxId[i]));
} }
} }

View File

@ -22,10 +22,11 @@
#include "pg/pg_ids.h" #include "pg/pg_ids.h"
#include "piniobox.h" #include "piniobox.h"
#include "drivers/io.h" #include "drivers/io.h"
#include "interface/msp_box.h"
PG_REGISTER_WITH_RESET_TEMPLATE(pinioBoxConfig_t, pinioBoxConfig, PG_PINIOBOX_CONFIG, 0); PG_REGISTER_WITH_RESET_TEMPLATE(pinioBoxConfig_t, pinioBoxConfig, PG_PINIOBOX_CONFIG, 1);
PG_RESET_TEMPLATE(pinioBoxConfig_t, pinioBoxConfig, PG_RESET_TEMPLATE(pinioBoxConfig_t, pinioBoxConfig,
{ BOXNONE, BOXNONE, BOXNONE, BOXNONE } { PERMANENT_ID_NONE, PERMANENT_ID_NONE, PERMANENT_ID_NONE, PERMANENT_ID_NONE }
); );
#endif #endif

View File

@ -22,9 +22,7 @@
#include "pg/pg.h" #include "pg/pg.h"
typedef struct pinioBoxConfig_s { typedef struct pinioBoxConfig_s {
int8_t boxId[PINIO_COUNT]; uint8_t permanentId[PINIO_COUNT];
} pinioBoxConfig_t; } pinioBoxConfig_t;
PG_DECLARE(pinioBoxConfig_t, pinioBoxConfig); PG_DECLARE(pinioBoxConfig_t, pinioBoxConfig);
#define BOXNONE (-1)