mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-25 17:25:20 +03:00
Add protocol level receiver frame rate measurement for IBUS (#9207)
Add protocol level receiver frame rate measurement for IBUS
This commit is contained in:
commit
b568dc7d64
2 changed files with 16 additions and 5 deletions
|
@ -75,7 +75,7 @@ static bool ibusFrameDone = false;
|
||||||
static uint32_t ibusChannelData[IBUS_MAX_CHANNEL];
|
static uint32_t ibusChannelData[IBUS_MAX_CHANNEL];
|
||||||
|
|
||||||
static uint8_t ibus[IBUS_BUFFSIZE] = { 0, };
|
static uint8_t ibus[IBUS_BUFFSIZE] = { 0, };
|
||||||
|
static timeDelta_t lastFrameDelta = 0;
|
||||||
|
|
||||||
static bool isValidIa6bIbusPacketLength(uint8_t length)
|
static bool isValidIa6bIbusPacketLength(uint8_t length)
|
||||||
{
|
{
|
||||||
|
@ -88,13 +88,13 @@ static void ibusDataReceive(uint16_t c, void *data)
|
||||||
{
|
{
|
||||||
UNUSED(data);
|
UNUSED(data);
|
||||||
|
|
||||||
uint32_t ibusTime;
|
static timeUs_t ibusTimeLast;
|
||||||
static uint32_t ibusTimeLast;
|
|
||||||
static uint8_t ibusFramePosition;
|
static uint8_t ibusFramePosition;
|
||||||
|
static timeUs_t lastFrameCompleteTimeUs = 0;
|
||||||
|
|
||||||
ibusTime = micros();
|
const timeUs_t ibusTime = microsISR();
|
||||||
|
|
||||||
if ((ibusTime - ibusTimeLast) > IBUS_FRAME_GAP) {
|
if (cmpTimeUs(ibusTime, ibusTimeLast) > IBUS_FRAME_GAP) {
|
||||||
ibusFramePosition = 0;
|
ibusFramePosition = 0;
|
||||||
rxBytesToIgnore = 0;
|
rxBytesToIgnore = 0;
|
||||||
} else if (rxBytesToIgnore) {
|
} else if (rxBytesToIgnore) {
|
||||||
|
@ -125,6 +125,8 @@ static void ibusDataReceive(uint16_t c, void *data)
|
||||||
ibus[ibusFramePosition] = (uint8_t)c;
|
ibus[ibusFramePosition] = (uint8_t)c;
|
||||||
|
|
||||||
if (ibusFramePosition == ibusFrameSize - 1) {
|
if (ibusFramePosition == ibusFrameSize - 1) {
|
||||||
|
lastFrameDelta = cmpTimeUs(ibusTime, lastFrameCompleteTimeUs);
|
||||||
|
lastFrameCompleteTimeUs = ibusTime;
|
||||||
ibusFrameDone = true;
|
ibusFrameDone = true;
|
||||||
} else {
|
} else {
|
||||||
ibusFramePosition++;
|
ibusFramePosition++;
|
||||||
|
@ -202,6 +204,10 @@ static uint16_t ibusReadRawRC(const rxRuntimeState_t *rxRuntimeState, uint8_t ch
|
||||||
return ibusChannelData[chan];
|
return ibusChannelData[chan];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static timeDelta_t ibusFrameDelta(void)
|
||||||
|
{
|
||||||
|
return lastFrameDelta;
|
||||||
|
}
|
||||||
|
|
||||||
bool ibusInit(const rxConfig_t *rxConfig, rxRuntimeState_t *rxRuntimeState)
|
bool ibusInit(const rxConfig_t *rxConfig, rxRuntimeState_t *rxRuntimeState)
|
||||||
{
|
{
|
||||||
|
@ -213,6 +219,7 @@ bool ibusInit(const rxConfig_t *rxConfig, rxRuntimeState_t *rxRuntimeState)
|
||||||
|
|
||||||
rxRuntimeState->rcReadRawFn = ibusReadRawRC;
|
rxRuntimeState->rcReadRawFn = ibusReadRawRC;
|
||||||
rxRuntimeState->rcFrameStatusFn = ibusFrameStatus;
|
rxRuntimeState->rcFrameStatusFn = ibusFrameStatus;
|
||||||
|
rxRuntimeState->rcFrameDeltaFn = ibusFrameDelta;
|
||||||
|
|
||||||
const serialPortConfig_t *portConfig = findSerialPortConfig(FUNCTION_RX_SERIAL);
|
const serialPortConfig_t *portConfig = findSerialPortConfig(FUNCTION_RX_SERIAL);
|
||||||
if (!portConfig) {
|
if (!portConfig) {
|
||||||
|
|
|
@ -67,6 +67,10 @@ uint32_t micros(void)
|
||||||
{
|
{
|
||||||
return microseconds_stub_value;
|
return microseconds_stub_value;
|
||||||
}
|
}
|
||||||
|
uint32_t microsISR(void)
|
||||||
|
{
|
||||||
|
return micros();
|
||||||
|
}
|
||||||
|
|
||||||
#define SERIAL_BUFFER_SIZE 256
|
#define SERIAL_BUFFER_SIZE 256
|
||||||
#define SERIAL_PORT_DUMMY_IDENTIFIER (serialPortIdentifier_e)0x1234
|
#define SERIAL_PORT_DUMMY_IDENTIFIER (serialPortIdentifier_e)0x1234
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue