Configurable transponder
This commit is contained in:
parent
042ffad61d
commit
fda5e0f962
|
@ -152,16 +152,8 @@ void transponderIrHardwareInit(ioTag_t ioTag, transponder_t *transponder)
|
||||||
DMA_ITConfig(dmaRef, DMA_IT_TC, ENABLE);
|
DMA_ITConfig(dmaRef, DMA_IT_TC, ENABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool transponderIrInit(const transponderProvider_e provider)
|
bool transponderIrInit(const ioTag_t ioTag, const transponderProvider_e provider)
|
||||||
{
|
{
|
||||||
ioTag_t ioTag = IO_TAG_NONE;
|
|
||||||
for (int i = 0; i < USABLE_TIMER_CHANNEL_COUNT; i++) {
|
|
||||||
if (timerHardware[i].usageFlags & TIM_USE_TRANSPONDER) {
|
|
||||||
ioTag = timerHardware[i].tag;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ioTag) {
|
if (!ioTag) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,7 +113,7 @@ struct transponderVTable {
|
||||||
void (*updateTransponderDMABuffer)(transponder_t *transponder, const uint8_t* transponderData);
|
void (*updateTransponderDMABuffer)(transponder_t *transponder, const uint8_t* transponderData);
|
||||||
};
|
};
|
||||||
|
|
||||||
bool transponderIrInit(const transponderProvider_e provider);
|
bool transponderIrInit(const ioTag_t ioTag, const transponderProvider_e provider);
|
||||||
void transponderIrDisable(void);
|
void transponderIrDisable(void);
|
||||||
|
|
||||||
void transponderIrHardwareInit(ioTag_t ioTag, transponder_t *transponder);
|
void transponderIrHardwareInit(ioTag_t ioTag, transponder_t *transponder);
|
||||||
|
|
Binary file not shown.
|
@ -71,6 +71,7 @@ extern uint8_t __config_end;
|
||||||
#include "drivers/sonar_hcsr04.h"
|
#include "drivers/sonar_hcsr04.h"
|
||||||
#include "drivers/stack_check.h"
|
#include "drivers/stack_check.h"
|
||||||
#include "drivers/system.h"
|
#include "drivers/system.h"
|
||||||
|
#include "drivers/transponder_ir.h"
|
||||||
#include "drivers/time.h"
|
#include "drivers/time.h"
|
||||||
#include "drivers/timer.h"
|
#include "drivers/timer.h"
|
||||||
#include "drivers/vcd.h"
|
#include "drivers/vcd.h"
|
||||||
|
@ -103,6 +104,7 @@ extern uint8_t __config_end;
|
||||||
#include "io/ledstrip.h"
|
#include "io/ledstrip.h"
|
||||||
#include "io/osd.h"
|
#include "io/osd.h"
|
||||||
#include "io/serial.h"
|
#include "io/serial.h"
|
||||||
|
#include "io/transponder_ir.h"
|
||||||
#include "io/vtx_rtc6705.h"
|
#include "io/vtx_rtc6705.h"
|
||||||
#include "io/vtx_control.h"
|
#include "io/vtx_control.h"
|
||||||
|
|
||||||
|
@ -2751,6 +2753,9 @@ const cliResourceValue_t resourceTable[] = {
|
||||||
#ifdef USE_INVERTER
|
#ifdef USE_INVERTER
|
||||||
{ OWNER_INVERTER, PG_SERIAL_PIN_CONFIG, offsetof(serialPinConfig_t, ioTagInverter[0]), SERIAL_PORT_MAX_INDEX },
|
{ OWNER_INVERTER, PG_SERIAL_PIN_CONFIG, offsetof(serialPinConfig_t, ioTagInverter[0]), SERIAL_PORT_MAX_INDEX },
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef TRANSPONDER
|
||||||
|
{ OWNER_TRANSPONDER, PG_TRANSPONDER_CONFIG, offsetof(transponderConfig_t, ioTag), 0 },
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static ioTag_t *getIoTag(const cliResourceValue_t value, uint8_t index)
|
static ioTag_t *getIoTag(const cliResourceValue_t value, uint8_t index)
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "config/parameter_group.h"
|
#include "config/parameter_group.h"
|
||||||
#include "config/parameter_group_ids.h"
|
#include "config/parameter_group_ids.h"
|
||||||
|
|
||||||
|
#include "drivers/timer.h"
|
||||||
#include "drivers/transponder_ir.h"
|
#include "drivers/transponder_ir.h"
|
||||||
#include "drivers/system.h"
|
#include "drivers/system.h"
|
||||||
#include "drivers/usb_io.h"
|
#include "drivers/usb_io.h"
|
||||||
|
@ -37,6 +38,7 @@
|
||||||
|
|
||||||
#include "io/transponder_ir.h"
|
#include "io/transponder_ir.h"
|
||||||
|
|
||||||
|
#if 0
|
||||||
PG_REGISTER_WITH_RESET_TEMPLATE(transponderConfig_t, transponderConfig, PG_TRANSPONDER_CONFIG, 0);
|
PG_REGISTER_WITH_RESET_TEMPLATE(transponderConfig_t, transponderConfig, PG_TRANSPONDER_CONFIG, 0);
|
||||||
|
|
||||||
PG_RESET_TEMPLATE(transponderConfig_t, transponderConfig,
|
PG_RESET_TEMPLATE(transponderConfig_t, transponderConfig,
|
||||||
|
@ -44,6 +46,27 @@ PG_RESET_TEMPLATE(transponderConfig_t, transponderConfig,
|
||||||
.reserved = 0,
|
.reserved = 0,
|
||||||
.data = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0x0, 0x0, 0x0 }, // Note, this is NOT a valid transponder code, it's just for testing production hardware
|
.data = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0x0, 0x0, 0x0 }, // Note, this is NOT a valid transponder code, it's just for testing production hardware
|
||||||
);
|
);
|
||||||
|
#endif
|
||||||
|
PG_REGISTER_WITH_RESET_FN(transponderConfig_t, transponderConfig, PG_TRANSPONDER_CONFIG, 0);
|
||||||
|
|
||||||
|
void pgResetFn_transponderConfig(transponderConfig_t *transponderConfig)
|
||||||
|
{
|
||||||
|
transponderConfig_t configTemplate = {
|
||||||
|
.provider = TRANSPONDER_ILAP,
|
||||||
|
.reserved = 0,
|
||||||
|
.data = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0x0, 0x0, 0x0 }, // Note, this is NOT a valid transponder code, it's just for testing production hardware
|
||||||
|
};
|
||||||
|
|
||||||
|
memcpy(transponderConfig, &configTemplate, sizeof(*transponderConfig));
|
||||||
|
|
||||||
|
for (int i = 0; i < USABLE_TIMER_CHANNEL_COUNT; i++) {
|
||||||
|
if (timerHardware[i].usageFlags & TIM_USE_TRANSPONDER) {
|
||||||
|
transponderConfig->ioTag = timerHardware[i].tag;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
transponderConfig->ioTag = IO_TAG_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
static bool transponderInitialised = false;
|
static bool transponderInitialised = false;
|
||||||
static bool transponderRepeat = false;
|
static bool transponderRepeat = false;
|
||||||
|
@ -95,7 +118,7 @@ void transponderUpdate(timeUs_t currentTimeUs)
|
||||||
|
|
||||||
void transponderInit(void)
|
void transponderInit(void)
|
||||||
{
|
{
|
||||||
transponderInitialised = transponderIrInit(transponderConfig()->provider);
|
transponderInitialised = transponderIrInit(transponderConfig()->ioTag, transponderConfig()->provider);
|
||||||
if (!transponderInitialised) {
|
if (!transponderInitialised) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ typedef struct transponderConfig_s {
|
||||||
transponderProvider_e provider;
|
transponderProvider_e provider;
|
||||||
uint8_t reserved;
|
uint8_t reserved;
|
||||||
uint8_t data[9];
|
uint8_t data[9];
|
||||||
|
ioTag_t ioTag;
|
||||||
} transponderConfig_t;
|
} transponderConfig_t;
|
||||||
|
|
||||||
typedef struct transponderRequirement_s {
|
typedef struct transponderRequirement_s {
|
||||||
|
|
Loading…
Reference in New Issue