Separation of boxId and permanentId.
This commit is contained in:
parent
1bcfa5ddb0
commit
18d5a373c0
|
@ -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,
|
||||||
|
|
|
@ -270,15 +270,20 @@ 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) {
|
||||||
case BOXUSER1:
|
const box_t *box = findBoxByPermanentId(pinioBoxConfig()->permanentId[i]);
|
||||||
case BOXUSER2:
|
if (box) {
|
||||||
case BOXUSER3:
|
switch(box->boxId) {
|
||||||
case BOXUSER4:
|
case BOXUSER1:
|
||||||
BME(pinioBoxConfig()->boxId[i]);
|
case BOXUSER2:
|
||||||
break;
|
case BOXUSER3:
|
||||||
default:
|
case BOXUSER4:
|
||||||
break;
|
BME(box->boxId);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
|
@ -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]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
|
||||||
|
|
Loading…
Reference in New Issue