mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 00:05:33 +03:00
CF/BF - First cut of MSP current sensor.
How it works: 1. Current Meter Source on FC is set to MSP/OSD Slave by user. 2. On reboot FC sends MSP_ANALOG to OSD Slave. 3. OSD Slave listens for incoming MSP as usual. 4. OSD responds to MSP as usual. 6. The FC recevies the data from the OSD Slave and updates the MSP Current Meter.
This commit is contained in:
parent
3e56bb75cf
commit
22147105fb
17 changed files with 166 additions and 15 deletions
|
@ -792,7 +792,7 @@ static bool mspOsdSlaveProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostPro
|
|||
|
||||
switch (cmdMSP) {
|
||||
case MSP_STATUS_EX:
|
||||
sbufWriteU16(dst, 0); // task delta
|
||||
sbufWriteU16(dst, getTaskDeltaTime(TASK_SERIAL));
|
||||
#ifdef USE_I2C
|
||||
sbufWriteU16(dst, i2cGetErrorCounter());
|
||||
#else
|
||||
|
@ -807,7 +807,7 @@ static bool mspOsdSlaveProcessOutCommand(uint8_t cmdMSP, sbuf_t *dst, mspPostPro
|
|||
break;
|
||||
|
||||
case MSP_STATUS:
|
||||
sbufWriteU16(dst, 0); // task delta
|
||||
sbufWriteU16(dst, getTaskDeltaTime(TASK_SERIAL));
|
||||
#ifdef USE_I2C
|
||||
sbufWriteU16(dst, i2cGetErrorCounter());
|
||||
#else
|
||||
|
@ -1375,7 +1375,6 @@ static void mspFcDataFlashReadCommand(sbuf_t *dst, sbuf_t *src)
|
|||
static mspResult_e mspOsdSlaveProcessInCommand(uint8_t cmdMSP, sbuf_t *src) {
|
||||
UNUSED(cmdMSP);
|
||||
UNUSED(src);
|
||||
// Nothing OSD SLAVE specific yet.
|
||||
return MSP_RESULT_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
@ -2145,8 +2144,31 @@ void mspFcProcessReply(mspPacket_t *reply)
|
|||
UNUSED(src); // potentially unused depending on compile options.
|
||||
|
||||
switch (reply->cmd) {
|
||||
case MSP_DISPLAYPORT: {
|
||||
#ifndef OSD_SLAVE
|
||||
case MSP_ANALOG:
|
||||
{
|
||||
uint8_t batteryVoltage = sbufReadU8(src);
|
||||
uint16_t mAhDrawn = sbufReadU16(src);
|
||||
uint16_t rssi = sbufReadU16(src);
|
||||
uint16_t amperage = sbufReadU16(src);
|
||||
|
||||
UNUSED(rssi);
|
||||
UNUSED(batteryVoltage);
|
||||
UNUSED(amperage);
|
||||
UNUSED(mAhDrawn);
|
||||
|
||||
#ifdef USE_MSP_CURRENT_METER
|
||||
currentMeterMSPSet(amperage, mAhDrawn);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_OSD_SLAVE
|
||||
case MSP_DISPLAYPORT:
|
||||
{
|
||||
osdSlaveIsLocked = true; // lock it as soon as a MSP_DISPLAYPORT message is received to prevent accidental CLI/DFU mode.
|
||||
|
||||
int subCmd = sbufReadU8(src);
|
||||
|
||||
switch (subCmd) {
|
||||
|
@ -2184,9 +2206,9 @@ void mspFcProcessReply(mspPacket_t *reply)
|
|||
osdSlaveDrawScreen();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue