1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-12 19:10:27 +03:00

Merge remote-tracking branch 'origin/maintenance-8.x.x' into mmosca-h7a-clean

This commit is contained in:
Marcelo Bezerra 2025-03-28 09:41:58 +01:00
commit 0f003d4308
No known key found for this signature in database
GPG key ID: 718A5AC065848530
11 changed files with 128 additions and 51 deletions

View file

@ -51,7 +51,7 @@ else()
endif()
endif()
project(INAV VERSION 8.1.0)
project(INAV VERSION 8.0.1)
enable_language(ASM)

View file

@ -13,6 +13,7 @@ All ADSB receivers which can send Mavlink [ADSB_VEHICLE](https://mavlink.io/en/m
* [PINGRX](https://uavionix.com/product/pingrx-pro/) (not tested)
* [TT-SC1](https://www.aerobits.pl/product/aero/) (tested)
* [ADSBee1090](https://pantsforbirds.com/adsbee-1090/) (tested)
## TT-SC1 settings
* download software for ADSB TT-SC1 from https://www.aerobits.pl/product/aero/ , file Micro_ADSB_App-vX.XX.X_win_setup.zip and install it
@ -24,3 +25,21 @@ All ADSB receivers which can send Mavlink [ADSB_VEHICLE](https://mavlink.io/en/m
PCB board for TT-SC1-B module https://oshwlab.com/error414/adsb-power-board
![TT-SC1 settings](Screenshots/ADSB_TTSC01_settings.png)
## ADSBee 1090 settings
* connect to ADSBee1090 via USB and set COMMS_UART to mavlink2 \
``
AT+PROTOCOL=COMMS_UART,MAVLINK2
``\
``
AT+BAUDRATE=COMMS_UART,115200
``\
It's recommended to turn of wifi \
``
AT+ESP32_ENABLE=0
``\
``
AT+SETTINGS=SAVE
``
* in INAV configurator ports TAB set telemetry MAVLINK, and baudrate 115200
* https://pantsforbirds.com/adsbee-1090/quick-start/

View file

@ -23,8 +23,10 @@
#ifdef USE_FULL_ASSERT
#include "stm32_assert.h"
#else
#ifndef assert_param
#define assert_param(expr) ((void)0U)
#endif
#endif
/** @addtogroup STM32H7xx_LL_Driver
* @{

View file

@ -22,8 +22,10 @@
#ifdef USE_FULL_ASSERT
#include "stm32_assert.h"
#else
#ifndef assert_param
#define assert_param(expr) ((void)0U)
#endif
#endif
/** @addtogroup STM32H7xx_LL_Driver
* @{

View file

@ -140,19 +140,14 @@ bool adjustMulticopterAltitudeFromRCInput(void)
const int16_t rcThrottleAdjustment = applyDeadbandRescaled(rcCommand[THROTTLE] - altHoldThrottleRCZero, rcControlsConfig()->alt_hold_deadband, -500, 500);
if (rcThrottleAdjustment) {
// set velocity proportional to stick movement
float rcClimbRate;
/* Set velocity proportional to stick movement
* Scale from altHoldThrottleRCZero to maxthrottle or minthrottle to altHoldThrottleRCZero */
// Make sure we can satisfy max_manual_climb_rate in both up and down directions
if (rcThrottleAdjustment > 0) {
// Scaling from altHoldThrottleRCZero to maxthrottle
rcClimbRate = rcThrottleAdjustment * navConfig()->mc.max_manual_climb_rate / (float)(getMaxThrottle() - altHoldThrottleRCZero - rcControlsConfig()->alt_hold_deadband);
}
else {
// Scaling from minthrottle to altHoldThrottleRCZero
rcClimbRate = rcThrottleAdjustment * navConfig()->mc.max_manual_climb_rate / (float)(altHoldThrottleRCZero - getThrottleIdleValue() - rcControlsConfig()->alt_hold_deadband);
}
// Calculate max up or min down limit value scaled for deadband
int16_t limitValue = rcThrottleAdjustment > 0 ? getMaxThrottle() : getThrottleIdleValue();
limitValue = applyDeadbandRescaled(limitValue - altHoldThrottleRCZero, rcControlsConfig()->alt_hold_deadband, -500, 500);
int16_t rcClimbRate = ABS(rcThrottleAdjustment) * navConfig()->mc.max_manual_climb_rate / limitValue;
updateClimbRateToAltitudeController(rcClimbRate, 0, ROC_TO_ALT_CONSTANT);
return true;

View file

@ -39,6 +39,7 @@
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include "platform.h"
@ -48,6 +49,7 @@
#include "build/debug.h"
#include "common/utils.h"
#include "common/maths.h"
#include "drivers/time.h"
@ -83,13 +85,15 @@
serialPort_t *jetiExBusPort;
uint32_t jetiTimeStampRequest = 0;
volatile uint32_t jetiTimeStampRequest = 0;
volatile bool jetiExBusCanTx = false;
static uint8_t jetiExBusFramePosition;
static uint8_t jetiExBusFrameLength;
static uint8_t jetiExBusFrameState = EXBUS_STATE_ZERO;
uint8_t jetiExBusRequestState = EXBUS_STATE_ZERO;
static volatile uint8_t jetiExBusFrameState = EXBUS_STATE_ZERO;
volatile uint8_t jetiExBusRequestState = EXBUS_STATE_ZERO;
// Use max values for ram areas
static uint8_t jetiExBusChannelFrame[EXBUS_MAX_CHANNEL_FRAME_SIZE];
@ -117,16 +121,18 @@ void jetiExBusDecodeChannelFrame(uint8_t *exBusFrame)
{
uint16_t value;
uint8_t frameAddr;
uint8_t channelDataLen = exBusFrame[EXBUS_HEADER_LEN - 1];
uint8_t receivedChannelCount = MIN((channelDataLen) / 2, JETIEXBUS_CHANNEL_COUNT);
// Decode header
switch (((uint16_t)exBusFrame[EXBUS_HEADER_SYNC] << 8) | ((uint16_t)exBusFrame[EXBUS_HEADER_REQ])) {
case EXBUS_CHANNELDATA_DATA_REQUEST: // not yet specified
case EXBUS_CHANNELDATA:
for (uint8_t i = 0; i < JETIEXBUS_CHANNEL_COUNT; i++) {
frameAddr = EXBUS_HEADER_LEN + i * 2;
for (uint8_t i = 0; i < receivedChannelCount; i++) {
frameAddr = EXBUS_HEADER_LEN + (i * 2);
value = ((uint16_t)exBusFrame[frameAddr + 1]) << 8;
value += (uint16_t)exBusFrame[frameAddr];
value |= (uint16_t)exBusFrame[frameAddr];
// Convert to internal format
jetiExBusChannelData[i] = value >> 3;
}
@ -152,7 +158,7 @@ void jetiExBusFrameReset(void)
*/
// Receive ISR callback
static void jetiExBusDataReceive(uint16_t c, void *data)
FAST_CODE NOINLINE static void jetiExBusDataReceive(uint16_t c, void *data)
{
UNUSED(data);
@ -189,6 +195,14 @@ static void jetiExBusDataReceive(uint16_t c, void *data)
}
}
if(jetiExBusFramePosition == 1) {
if(c == 0x01) {
jetiExBusCanTx = true;
} else {
jetiExBusCanTx = false;
}
}
if (jetiExBusFramePosition == jetiExBusFrameMaxSize) {
// frame overrun
jetiExBusFrameReset();
@ -204,7 +218,6 @@ static void jetiExBusDataReceive(uint16_t c, void *data)
// Check the header for the message length
if (jetiExBusFramePosition == EXBUS_HEADER_LEN) {
if ((jetiExBusFrameState == EXBUS_STATE_IN_PROGRESS) && (jetiExBusFrame[EXBUS_HEADER_MSG_LEN] <= EXBUS_MAX_CHANNEL_FRAME_SIZE)) {
jetiExBusFrameLength = jetiExBusFrame[EXBUS_HEADER_MSG_LEN];
return;
@ -223,9 +236,12 @@ static void jetiExBusDataReceive(uint16_t c, void *data)
// Done?
if (jetiExBusFrameLength == jetiExBusFramePosition) {
if (jetiExBusFrameState == EXBUS_STATE_IN_PROGRESS)
if (jetiExBusFrameState == EXBUS_STATE_IN_PROGRESS) {
jetiExBusFrameState = EXBUS_STATE_RECEIVED;
jetiExBusRequestState = EXBUS_STATE_ZERO;
}
if (jetiExBusRequestState == EXBUS_STATE_IN_PROGRESS) {
jetiExBusFrameState = EXBUS_STATE_ZERO;
jetiExBusRequestState = EXBUS_STATE_RECEIVED;
jetiTimeStampRequest = now;
}
@ -268,6 +284,8 @@ bool jetiExBusInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfi
rxRuntimeConfig->rcReadRawFn = jetiExBusReadRawRC;
rxRuntimeConfig->rcFrameStatusFn = jetiExBusFrameStatus;
memset(jetiExBusChannelData, 0, sizeof(uint16_t) * JETIEXBUS_CHANNEL_COUNT);
jetiExBusFrameReset();
const serialPortConfig_t *portConfig = findSerialPortConfig(FUNCTION_RX_SERIAL);

View file

@ -21,7 +21,7 @@
#define EXBUS_CRC_LEN 2
#define EXBUS_OVERHEAD (EXBUS_HEADER_LEN + EXBUS_CRC_LEN)
#define EXBUS_MAX_CHANNEL_FRAME_SIZE (EXBUS_HEADER_LEN + JETIEXBUS_CHANNEL_COUNT*2 + EXBUS_CRC_LEN)
#define EXBUS_MAX_REQUEST_FRAME_SIZE 9
#define EXBUS_MAX_REQUEST_FRAME_SIZE 32 //9
#define EXBUS_EX_REQUEST (0x3A)
@ -42,11 +42,13 @@ enum {
EXBUS_STATE_PROCESSED
};
extern uint8_t jetiExBusRequestState;
extern uint32_t jetiTimeStampRequest;
extern volatile uint8_t jetiExBusRequestState;
extern volatile uint32_t jetiTimeStampRequest;
extern uint8_t jetiExBusRequestFrame[EXBUS_MAX_REQUEST_FRAME_SIZE];
struct serialPort_s;
extern struct serialPort_s *jetiExBusPort;
extern volatile bool jetiExBusCanTx;
uint16_t jetiExBusCalcCRC16(uint8_t *pt, uint8_t msgLen);
bool jetiExBusInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig);

View file

@ -1,2 +1,3 @@
target_stm32f405xg(MATEKF405)
target_stm32f405xg(MATEKF405OSD)
target_stm32f405xg(MATEKF405MINI)

View file

@ -53,15 +53,7 @@
#define SPI3_MISO_PIN PB4
#define SPI3_MOSI_PIN PB5
#ifdef MATEKF405OSD
// *************** SD Card **************************
#define USE_SDCARD
#define USE_SDCARD_SPI
#define SDCARD_SPI_BUS BUS_SPI3
#define SDCARD_CS_PIN PC1
#define ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT
#else
#ifdef MATEKF405MINI
// *************** M25P256 flash ********************
#define USE_FLASHFS
#define USE_FLASH_M25P16
@ -69,6 +61,14 @@
#define M25P16_CS_PIN PC0
#define ENABLE_BLACKBOX_LOGGING_ON_SPIFLASH_BY_DEFAULT
#else
// *************** SD Card **************************
#define USE_SDCARD
#define USE_SDCARD_SPI
#define SDCARD_SPI_BUS BUS_SPI3
#define SDCARD_CS_PIN PC1
#define ENABLE_BLACKBOX_LOGGING_ON_SDCARD_BY_DEFAULT
#endif
// *************** OSD *****************************
@ -173,11 +173,7 @@
#define CURRENT_METER_ADC_CHANNEL ADC_CHN_2
#define RSSI_ADC_CHANNEL ADC_CHN_3
#ifdef MATEKF405
#define DEFAULT_FEATURES (FEATURE_OSD | FEATURE_CURRENT_METER | FEATURE_VBAT | FEATURE_TELEMETRY | FEATURE_BLACKBOX )
#else
#define DEFAULT_FEATURES (FEATURE_OSD | FEATURE_CURRENT_METER | FEATURE_VBAT | FEATURE_TELEMETRY )
#endif
#define CURRENT_METER_SCALE 179
#define USE_LED_STRIP

View file

@ -138,14 +138,22 @@ const exBusSensor_t jetiExSensors[] = {
{"GPS Speed", "m/s", EX_TYPE_22b, DECIMAL_MASK(2)},
{"GPS H-Distance", "m", EX_TYPE_22b, DECIMAL_MASK(0)},
{"GPS H-Direction", "\xB0", EX_TYPE_22b, DECIMAL_MASK(1)},
{"INAV D2", "", EX_TYPE_DES, 0 }, // device descripton
{"INAV D2", "", EX_TYPE_DES, 0 }, // device descripton
{"GPS Heading", "\xB0", EX_TYPE_22b, DECIMAL_MASK(1)},
{"GPS Altitude", "m", EX_TYPE_22b, DECIMAL_MASK(2)},
{"G-Force X", "", EX_TYPE_22b, DECIMAL_MASK(3)},
{"G-Force Y", "", EX_TYPE_22b, DECIMAL_MASK(3)},
{"G-Force Z", "", EX_TYPE_22b, DECIMAL_MASK(3)},
{"RPM", "", EX_TYPE_22b, DECIMAL_MASK(0)},
{"Trip Distance", "m", EX_TYPE_22b, DECIMAL_MASK(1)}
{"Trip Distance", "m", EX_TYPE_22b, DECIMAL_MASK(1)},
{"DEBUG0", "", EX_TYPE_22b, DECIMAL_MASK(0)},
{"DEBUG1", "", EX_TYPE_22b, DECIMAL_MASK(0)},
{"DEBUG2", "", EX_TYPE_22b, DECIMAL_MASK(0)},
{"DEBUG3", "", EX_TYPE_22b, DECIMAL_MASK(0)},
{"DEBUG4", "", EX_TYPE_22b, DECIMAL_MASK(0)},
{"DEBUG5", "", EX_TYPE_22b, DECIMAL_MASK(0)},
{"DEBUG6", "", EX_TYPE_22b, DECIMAL_MASK(0)},
{"DEBUG7", "", EX_TYPE_22b, DECIMAL_MASK(0)}
};
// after every 15 sensors increment the step by 2 (e.g. ...EX_VAL15, EX_VAL16 = 17) to skip the device description
@ -172,6 +180,14 @@ enum exSensors_e {
EX_GFORCE_Z,
EX_RPM,
EX_TRIP_DISTANCE,
EX_DEBUG0,
EX_DEBUG1,
EX_DEBUG2,
EX_DEBUG3,
EX_DEBUG4,
EX_DEBUG5,
EX_DEBUG6,
EX_DEBUG7
};
union{
@ -183,8 +199,7 @@ union{
#define JETI_EX_SENSOR_COUNT (ARRAYLEN(jetiExSensors))
static uint8_t jetiExBusTelemetryFrame[40];
static uint8_t jetiExBusTransceiveState = EXBUS_TRANS_RX;
static uint8_t jetiExBusTelemetryFrame[JETI_EXBUS_TELEMETRY_FRAME_LEN];
static uint8_t firstActiveSensor = 0;
static uint32_t exSensorEnabled = 0;
@ -283,6 +298,17 @@ void initJetiExBusTelemetry(void)
}
#endif
if (debugMode != DEBUG_NONE) {
bitArraySet(&exSensorEnabled, EX_DEBUG0);
bitArraySet(&exSensorEnabled, EX_DEBUG1);
bitArraySet(&exSensorEnabled, EX_DEBUG2);
bitArraySet(&exSensorEnabled, EX_DEBUG3);
bitArraySet(&exSensorEnabled, EX_DEBUG4);
bitArraySet(&exSensorEnabled, EX_DEBUG5);
bitArraySet(&exSensorEnabled, EX_DEBUG6);
bitArraySet(&exSensorEnabled, EX_DEBUG7);
}
firstActiveSensor = getNextActiveSensor(0); // find the first active sensor
}
@ -422,6 +448,23 @@ int32_t getSensorValue(uint8_t sensor)
case EX_TRIP_DISTANCE:
return getTotalTravelDistance() / 10;
case EX_DEBUG0:
return debug[0];
case EX_DEBUG1:
return debug[1];
case EX_DEBUG2:
return debug[2];
case EX_DEBUG3:
return debug[3];
case EX_DEBUG4:
return debug[4];
case EX_DEBUG5:
return debug[5];
case EX_DEBUG6:
return debug[6];
case EX_DEBUG7:
return debug[7];
default:
return -1;
}
@ -503,12 +546,16 @@ void checkJetiExBusTelemetryState(void)
return;
}
void handleJetiExBusTelemetry(void)
void NOINLINE handleJetiExBusTelemetry(void)
{
static uint16_t framesLost = 0; // only for debug
static uint8_t item = 0;
uint32_t timeDiff;
if(!jetiExBusCanTx) {
return;
}
// Check if we shall reset frame position due to time
if (jetiExBusRequestState == EXBUS_STATE_RECEIVED) {
@ -523,7 +570,6 @@ void handleJetiExBusTelemetry(void)
if ((jetiExBusRequestFrame[EXBUS_HEADER_DATA_ID] == EXBUS_EX_REQUEST) && (jetiExBusCalcCRC16(jetiExBusRequestFrame, jetiExBusRequestFrame[EXBUS_HEADER_MSG_LEN]) == 0)) {
if (serialRxBytesWaiting(jetiExBusPort) == 0) {
jetiExBusTransceiveState = EXBUS_TRANS_TX;
item = sendJetiExBusTelemetry(jetiExBusRequestFrame[EXBUS_HEADER_PACKET_ID], item);
jetiExBusRequestState = EXBUS_STATE_PROCESSED;
return;
@ -534,13 +580,7 @@ void handleJetiExBusTelemetry(void)
}
}
// check the state if transmit is ready
if (jetiExBusTransceiveState == EXBUS_TRANS_IS_TX_COMPLETED) {
if (isSerialTransmitBufferEmpty(jetiExBusPort)) {
jetiExBusTransceiveState = EXBUS_TRANS_RX;
jetiExBusRequestState = EXBUS_STATE_ZERO;
}
}
jetiExBusRequestState = EXBUS_STATE_ZERO;
}
uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item)
@ -587,7 +627,7 @@ uint8_t sendJetiExBusTelemetry(uint8_t packetID, uint8_t item)
}
serialWriteBuf(jetiExBusPort, jetiExBusTelemetryFrame, jetiExBusTelemetryFrame[EXBUS_HEADER_MSG_LEN]);
jetiExBusTransceiveState = EXBUS_TRANS_IS_TX_COMPLETED;
jetiExBusCanTx = false;
return item;
}

View file

@ -17,6 +17,8 @@
#pragma once
#define JETI_EXBUS_TELEMETRY_FRAME_LEN 128
void initJetiExBusTelemetry(void);
void checkJetiExBusTelemetryState(void);
void handleJetiExBusTelemetry(void);