mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 08:15:30 +03:00
CF/BF - Allow OSD slave to be configured.
This highlights the face that MSP_SET_OSD_CONFIG is ill-conceived. See Cleanflight v1.x where multiple commands are used - one for video config and one for element config. In light of other recent changes it's possible a 3rd command is needed, for unit selection and alarms.
This commit is contained in:
parent
ba75dc4f1d
commit
0f7a986003
1 changed files with 39 additions and 9 deletions
|
@ -1096,15 +1096,36 @@ static bool mspFcProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostProcessFn
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSP_OSD_CONFIG:
|
case MSP_OSD_CONFIG: {
|
||||||
#ifdef OSD
|
|
||||||
sbufWriteU8(dst, 1); // OSD supported
|
#define OSD_FLAGS_OSD_FEATURE (1 << 0)
|
||||||
// send video system (AUTO/PAL/NTSC)
|
#define OSD_FLAGS_OSD_SLAVE (1 << 1)
|
||||||
|
#define OSD_FLAGS_RESERVED_1 (1 << 2)
|
||||||
|
#define OSD_FLAGS_RESERVED_2 (1 << 3)
|
||||||
|
#define OSD_FLAGS_OSD_HARDWARE_MAX_7456 (1 << 4)
|
||||||
|
|
||||||
|
uint8_t osdFlags = 0;
|
||||||
|
#if defined(OSD)
|
||||||
|
osdFlags |= OSD_FLAGS_OSD_FEATURE;
|
||||||
|
#endif
|
||||||
|
#if defined(USE_OSD_SLAVE)
|
||||||
|
osdFlags |= OSD_FLAGS_OSD_SLAVE;
|
||||||
|
#endif
|
||||||
#ifdef USE_MAX7456
|
#ifdef USE_MAX7456
|
||||||
|
osdFlags |= OSD_FLAGS_OSD_HARDWARE_MAX_7456;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
sbufWriteU8(dst, osdFlags);
|
||||||
|
|
||||||
|
#ifdef USE_MAX7456
|
||||||
|
// send video system (AUTO/PAL/NTSC)
|
||||||
sbufWriteU8(dst, vcdProfile()->video_system);
|
sbufWriteU8(dst, vcdProfile()->video_system);
|
||||||
#else
|
#else
|
||||||
sbufWriteU8(dst, 0);
|
sbufWriteU8(dst, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OSD
|
||||||
|
// OSD specific, not applicable to OSD slaves.
|
||||||
sbufWriteU8(dst, osdConfig()->units);
|
sbufWriteU8(dst, osdConfig()->units);
|
||||||
sbufWriteU8(dst, osdConfig()->rssi_alarm);
|
sbufWriteU8(dst, osdConfig()->rssi_alarm);
|
||||||
sbufWriteU16(dst, osdConfig()->cap_alarm);
|
sbufWriteU16(dst, osdConfig()->cap_alarm);
|
||||||
|
@ -1113,11 +1134,9 @@ static bool mspFcProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostProcessFn
|
||||||
for (int i = 0; i < OSD_ITEM_COUNT; i++) {
|
for (int i = 0; i < OSD_ITEM_COUNT; i++) {
|
||||||
sbufWriteU16(dst, osdConfig()->item_pos[i]);
|
sbufWriteU16(dst, osdConfig()->item_pos[i]);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
sbufWriteU8(dst, 0); // OSD not supported
|
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case MSP_MOTOR_3D_CONFIG:
|
case MSP_MOTOR_3D_CONFIG:
|
||||||
sbufWriteU16(dst, flight3DConfig()->deadband3d_low);
|
sbufWriteU16(dst, flight3DConfig()->deadband3d_low);
|
||||||
sbufWriteU16(dst, flight3DConfig()->deadband3d_high);
|
sbufWriteU16(dst, flight3DConfig()->deadband3d_high);
|
||||||
|
@ -1621,7 +1640,7 @@ static mspResult_e mspFcProcessInCommand(uint8_t cmdMSP, sbuf_t *src)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OSD
|
#if defined(OSD) || defined (USE_OSD_SLAVE)
|
||||||
case MSP_SET_OSD_CONFIG:
|
case MSP_SET_OSD_CONFIG:
|
||||||
{
|
{
|
||||||
const uint8_t addr = sbufReadU8(src);
|
const uint8_t addr = sbufReadU8(src);
|
||||||
|
@ -1632,20 +1651,27 @@ static mspResult_e mspFcProcessInCommand(uint8_t cmdMSP, sbuf_t *src)
|
||||||
#else
|
#else
|
||||||
sbufReadU8(src); // Skip video system
|
sbufReadU8(src); // Skip video system
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(OSD)
|
||||||
osdConfigMutable()->units = sbufReadU8(src);
|
osdConfigMutable()->units = sbufReadU8(src);
|
||||||
osdConfigMutable()->rssi_alarm = sbufReadU8(src);
|
osdConfigMutable()->rssi_alarm = sbufReadU8(src);
|
||||||
osdConfigMutable()->cap_alarm = sbufReadU16(src);
|
osdConfigMutable()->cap_alarm = sbufReadU16(src);
|
||||||
osdConfigMutable()->time_alarm = sbufReadU16(src);
|
osdConfigMutable()->time_alarm = sbufReadU16(src);
|
||||||
osdConfigMutable()->alt_alarm = sbufReadU16(src);
|
osdConfigMutable()->alt_alarm = sbufReadU16(src);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
|
#if defined(OSD)
|
||||||
// set a position setting
|
// set a position setting
|
||||||
const uint16_t pos = sbufReadU16(src);
|
const uint16_t pos = sbufReadU16(src);
|
||||||
if (addr < OSD_ITEM_COUNT) {
|
if (addr < OSD_ITEM_COUNT) {
|
||||||
osdConfigMutable()->item_pos[addr] = pos;
|
osdConfigMutable()->item_pos[addr] = pos;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
return MSP_RESULT_ERROR;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MSP_OSD_CHAR_WRITE:
|
case MSP_OSD_CHAR_WRITE:
|
||||||
#ifdef USE_MAX7456
|
#ifdef USE_MAX7456
|
||||||
{
|
{
|
||||||
|
@ -1658,14 +1684,18 @@ static mspResult_e mspFcProcessInCommand(uint8_t cmdMSP, sbuf_t *src)
|
||||||
max7456WriteNvm(addr, font_data);
|
max7456WriteNvm(addr, font_data);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
return MSP_RESULT_ERROR;
|
||||||
|
/*
|
||||||
// just discard the data
|
// just discard the data
|
||||||
sbufReadU8(src);
|
sbufReadU8(src);
|
||||||
for (int i = 0; i < 54; i++) {
|
for (int i = 0; i < 54; i++) {
|
||||||
sbufReadU8(src);
|
sbufReadU8(src);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif // OSD || USE_OSD_SLAVE
|
||||||
|
|
||||||
|
|
||||||
#if defined(USE_RTC6705) || defined(VTX_COMMON)
|
#if defined(USE_RTC6705) || defined(VTX_COMMON)
|
||||||
case MSP_SET_VTX_CONFIG:
|
case MSP_SET_VTX_CONFIG:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue