1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-24 00:35:39 +03:00

Pit mode first implementation

This commit is contained in:
jflyper 2016-10-23 00:43:08 +09:00
parent 7cc1010cb5
commit de74dbd776
6 changed files with 137 additions and 31 deletions

View file

@ -602,6 +602,10 @@ void createDefaultConfig(master_t *config)
config->vtx_mhz = 5740; //F0 config->vtx_mhz = 5740; //F0
#endif #endif
#ifdef VTX_SMARTAUDIO
config->vtx_smartaudio_opmodel = 1; // PIT
#endif
#ifdef TRANSPONDER #ifdef TRANSPONDER
static const uint8_t defaultTransponderData[6] = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC }; // Note, this is NOT a valid transponder code, it's just for testing production hardware static const uint8_t defaultTransponderData[6] = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC }; // Note, this is NOT a valid transponder code, it's just for testing production hardware

View file

@ -194,6 +194,10 @@ typedef struct master_s {
vtxChannelActivationCondition_t vtxChannelActivationConditions[MAX_CHANNEL_ACTIVATION_CONDITION_COUNT]; vtxChannelActivationCondition_t vtxChannelActivationConditions[MAX_CHANNEL_ACTIVATION_CONDITION_COUNT];
#endif #endif
#ifdef VTX_SMARTAUDIO
uint8_t vtx_smartaudio_opmodel; // 0=FREE, 1=PIT
#endif
#ifdef BLACKBOX #ifdef BLACKBOX
uint8_t blackbox_rate_num; uint8_t blackbox_rate_num;
uint8_t blackbox_rate_denom; uint8_t blackbox_rate_denom;

View file

@ -405,26 +405,58 @@ static const char * const smartAudioPowerNames[] = {
OSD_TAB_t entrySmartAudioPower = { &smartAudioPower, 4, &smartAudioPowerNames[0]}; OSD_TAB_t entrySmartAudioPower = { &smartAudioPower, 4, &smartAudioPowerNames[0]};
static const char * const smartAudioModeNames[] = { static const char * const smartAudioTxModeNames[] = {
// Sync with SA_RFMODE_*
"------", "------",
"ACTIVE",
"PIT-OR", "PIT-OR",
"PIT-IR", "PIT-IR",
"ACTIVE",
}; };
OSD_TAB_t entrySmartAudioMode = { &smartAudioMode, 3, &smartAudioModeNames[0]}; OSD_TAB_t entrySmartAudioTxMode = { &smartAudioTxMode, 3, &smartAudioTxModeNames[0]};
OSD_UINT16_t entrySmartAudioFreq = { &smartAudioFreq, 5600, 5900, 0 }; OSD_UINT16_t entrySmartAudioFreq = { &smartAudioFreq, 5600, 5900, 0 };
static const char * const smartAudioOpModelNames[] = {
"FREE",
"PIT",
};
OSD_TAB_t entrySmartAudioOpModel = { &smartAudioOpModel, 1, &smartAudioOpModelNames[0] };
static const char * const smartAudioPitFModeNames[] = {
"IN-RANGE",
"OUT-RANGE",
};
OSD_TAB_t entrySmartAudioPitFMode = { &smartAudioPitFMode, 1, &smartAudioPitFModeNames[0] };
OSD_UINT16_t entrySmartAudioORFreq = { &smartAudioORFreq, 5600, 5900, 1 };
OSD_Entry menu_smartAudioConfig[] = {
{ "--- SMARTAUDIO CONFIG ---", OME_Label, NULL, NULL },
{ "OP MODEL", OME_TAB, smartAudioConfigureOpModelByGvar, &entrySmartAudioOpModel },
{ "PIT FREQ", OME_TAB, smartAudioConfigurePitFModeByGvar, &entrySmartAudioPitFMode },
{ "OR FREQ", OME_UINT16, NULL, &entrySmartAudioORFreq }, // OME_Poll_UINT16
{ "BACK", OME_Back, NULL, NULL },
{ NULL, OME_END, NULL, NULL }
};
static const char * const smartAudioStatusNames[] = {
"OFFLINE",
"ONLINE V1",
"ONLINE V2",
};
OSD_TAB_t entrySmartAudioOnline = { &smartAudioStatus, 2, &smartAudioStatusNames[0] };
OSD_UINT16_t entrySmartAudioBaudrate = { &smartAudioSmartbaud, 0, 0, 0 }; OSD_UINT16_t entrySmartAudioBaudrate = { &smartAudioSmartbaud, 0, 0, 0 };
OSD_UINT16_t entrySmartAudioStatBadpre = { &saerr_badpre, 0, 0, 0 }; OSD_UINT16_t entrySmartAudioStatBadpre = { &saerr_badpre, 0, 0, 0 };
OSD_UINT16_t entrySmartAudioStatBadlen = { &saerr_badlen, 0, 0, 0 }; OSD_UINT16_t entrySmartAudioStatBadlen = { &saerr_badlen, 0, 0, 0 };
OSD_UINT16_t entrySmartAudioStatCrcerr = { &saerr_crcerr, 0, 0, 0 }; OSD_UINT16_t entrySmartAudioStatCrcerr = { &saerr_crcerr, 0, 0, 0 };
OSD_UINT16_t entrySmartAudioStatOooerr = { &saerr_oooresp, 0, 0, 0 }; OSD_UINT16_t entrySmartAudioStatOooerr = { &saerr_oooresp, 0, 0, 0 };
OSD_Entry menu_vtxstat[] = { OSD_Entry menu_smartAudioStats[] = {
{ "--- VTX STATS ---", OME_Label, NULL, NULL }, { "--- SMARTAUDIO STATS ---", OME_Label, NULL, NULL },
{ "STATUS", OME_TAB, NULL, &entrySmartAudioOnline },
{ "BAUDRATE", OME_UINT16, NULL, &entrySmartAudioBaudrate }, { "BAUDRATE", OME_UINT16, NULL, &entrySmartAudioBaudrate },
{ "BADPRE", OME_UINT16, NULL, &entrySmartAudioStatBadpre }, { "BADPRE", OME_UINT16, NULL, &entrySmartAudioStatBadpre },
{ "BADLEN", OME_UINT16, NULL, &entrySmartAudioStatBadlen }, { "BADLEN", OME_UINT16, NULL, &entrySmartAudioStatBadlen },
@ -438,12 +470,13 @@ OSD_Entry menu_vtx[] =
{ {
{ "-- VTX SMARTAUDIO --", OME_Label, NULL, NULL }, { "-- VTX SMARTAUDIO --", OME_Label, NULL, NULL },
{ smartAudioStatusString, OME_Label, NULL, NULL }, { smartAudioStatusString, OME_Label, NULL, NULL },
{ "RFMODE", OME_TAB, smartAudioSetModeByGvar, &entrySmartAudioMode }, { "TXMODE", OME_TAB, smartAudioSetTxModeByGvar, &entrySmartAudioTxMode },
{ "BAND", OME_TAB, smartAudioConfigureBandByGvar, &entrySmartAudioBand }, { "BAND", OME_TAB, smartAudioConfigureBandByGvar, &entrySmartAudioBand },
{ "CHAN", OME_TAB, smartAudioConfigureChanByGvar, &entrySmartAudioChan }, { "CHAN", OME_TAB, smartAudioConfigureChanByGvar, &entrySmartAudioChan },
{ "FREQ", OME_UINT16, NULL, &entrySmartAudioFreq }, { "FREQ", OME_UINT16, NULL, &entrySmartAudioFreq },
{ "POWER", OME_TAB, smartAudioConfigurePowerByGvar, &entrySmartAudioPower }, { "POWER", OME_TAB, smartAudioConfigurePowerByGvar, &entrySmartAudioPower },
{ "STAT", OME_Submenu, osdChangeScreen, &menu_vtxstat[0]}, { "CONFIG", OME_Submenu, osdChangeScreen, &menu_smartAudioConfig[0] },
{ "STAT", OME_Submenu, osdChangeScreen, &menu_smartAudioStats[0] },
{ "BACK", OME_Back, NULL, NULL }, { "BACK", OME_Back, NULL, NULL },
{ NULL, OME_END, NULL, NULL } { NULL, OME_END, NULL, NULL }
}; };

View file

@ -925,6 +925,10 @@ const clivalue_t valueTable[] = {
{ "vtx_mhz", VAR_UINT16 | MASTER_VALUE, &masterConfig.vtx_mhz, .config.minmax = { 5600, 5950 } }, { "vtx_mhz", VAR_UINT16 | MASTER_VALUE, &masterConfig.vtx_mhz, .config.minmax = { 5600, 5950 } },
#endif #endif
#ifdef VTX_SMARTAUDIO
{ "vtx_smartaudio_opmodel", VAR_UINT8 | MASTER_VALUE, &masterConfig.vtx_smartaudio_opmodel, .config.minmax = { 0, 1 } },
#endif
#ifdef MAG #ifdef MAG
{ "magzero_x", VAR_INT16 | MASTER_VALUE, &masterConfig.magZero.raw[X], .config.minmax = { -32768, 32767 } }, { "magzero_x", VAR_INT16 | MASTER_VALUE, &masterConfig.magZero.raw[X], .config.minmax = { -32768, 32767 } },
{ "magzero_y", VAR_INT16 | MASTER_VALUE, &masterConfig.magZero.raw[Y], .config.minmax = { -32768, 32767 } }, { "magzero_y", VAR_INT16 | MASTER_VALUE, &masterConfig.magZero.raw[Y], .config.minmax = { -32768, 32767 } },

View file

@ -12,6 +12,15 @@
#include "io/serial.h" #include "io/serial.h"
#include "io/vtx_smartaudio.h" #include "io/vtx_smartaudio.h"
#include "fc/rc_controls.h"
#include "fc/runtime_config.h"
#include "flight/pid.h"
#include "config/config.h"
#include "config/config_eeprom.h"
#include "config/config_profile.h"
#include "config/config_master.h"
#include "build/build_config.h" #include "build/build_config.h"
#define SMARTAUDIO_EXTENDED_API #define SMARTAUDIO_EXTENDED_API
@ -127,11 +136,14 @@ static saPowerTable_t saPowerTable[] = {
}; };
// Driver defined modes // Driver defined modes
#define SA_RFMODE_NODEF 0
#define SA_RFMODE_ACTIVE 1 #define SA_OPMODEL_FREE 0 // Power up transmitting
#define SA_RFMODE_PIT_INRANGE 2 #define SA_OPMODEL_PIT 1 // Power up in pit mode
#define SA_RFMODE_PIT_OUTRANGE 3
#define SA_RFMODE_OFF 4 // Should not be used with osd #define SA_TXMODE_NODEF 0
#define SA_TXMODE_PIT_OUTRANGE 1
#define SA_TXMODE_PIT_INRANGE 2
#define SA_TXMODE_ACTIVE 3
// Last received device ('hard') states // Last received device ('hard') states
@ -280,6 +292,15 @@ static void saProcessResponse(uint8_t *buf, int len)
smartAudioBand = (sa_chan / 8) + 1; smartAudioBand = (sa_chan / 8) + 1;
smartAudioChan = (sa_chan % 8) + 1; smartAudioChan = (sa_chan % 8) + 1;
smartAudioFreq = saFreqTable[sa_chan / 8][sa_chan % 8]; smartAudioFreq = saFreqTable[sa_chan / 8][sa_chan % 8];
if ((sa_opmode & SA_MODE_GET_PITMODE) == 0) {
smartAudioTxMode = SA_TXMODE_ACTIVE;
} else if (sa_opmode & SA_MODE_GET_IN_RANGE_PITMODE) {
smartAudioTxMode = SA_TXMODE_PIT_INRANGE;
} else {
smartAudioTxMode = SA_TXMODE_PIT_OUTRANGE;
}
smartAudioUpdateStatusString(); smartAudioUpdateStatusString();
if (sa_vers == 2) { if (sa_vers == 2) {
@ -608,11 +629,41 @@ bool smartAudioInit()
return false; return false;
} }
smartAudioOpModel = masterConfig.vtx_smartaudio_opmodel;
return true; return true;
} }
#ifdef SMARTAUDIO_PITMODE_DEBUG void smartAudioConfigurePitFModeByGvar(void *opaque)
void smartAudioPitMode(void) {
UNUSED(opaque);
if (smartAudioPitFMode == 0) {
saSetMode(SA_MODE_SET_IN_RANGE_PITMODE);
} else {
saSetMode(SA_MODE_SET_OUT_RANGE_PITMODE);
}
}
void smartAudioConfigureOpModelByGvar(void *opaque)
{
UNUSED(opaque);
masterConfig.vtx_smartaudio_opmodel = smartAudioOpModel;
if (smartAudioOpModel == SA_OPMODEL_FREE) {
// VTX should power up transmitting.
// Turn off In-Range and Out-Range bits
saSetMode(0);
} else {
// VTX should power up in pit mode.
// Setup In-Range or Out-Range bits
smartAudioConfigurePitFModeByGvar(opaque);
}
}
#if 0
void
{ {
static int turn = 0; static int turn = 0;
@ -755,32 +806,36 @@ void smartAudioConfigurePowerByGvar(void *opaque)
smartAudioSetPowerByIndex(smartAudioPower - 1); smartAudioSetPowerByIndex(smartAudioPower - 1);
} }
void smartAudioSetModeByGvar(void *opaque) void smartAudioSetTxModeByGvar(void *opaque)
{ {
UNUSED(opaque); UNUSED(opaque);
if (sa_vers != 2) { if (sa_vers != 2) {
// Bounce back; not online yet or can't handle mode (V1) // Bounce back; not online yet or can't handle mode (V1)
smartAudioMode = SA_RFMODE_NODEF; smartAudioTxMode = SA_TXMODE_NODEF;
return; return;
} }
if (smartAudioMode == 0) { if (smartAudioTxMode == 0) {
// Bouce back; no going back to undef state // Bouce back; no going back to undef state
++smartAudioMode; ++smartAudioTxMode;
return; return;
} }
switch (smartAudioMode) { if (smartAudioTxMode == SA_TXMODE_ACTIVE) {
case SA_RFMODE_ACTIVE: if (smartAudioOpModel == SA_OPMODEL_FREE) {
saSetMode(SA_MODE_CLR_PITMODE); saSetMode(SA_MODE_CLR_PITMODE);
break; } else {
if (smartAudioPitFMode == 0)
case SA_RFMODE_PIT_OUTRANGE: saSetMode(SA_MODE_CLR_PITMODE|SA_MODE_SET_IN_RANGE_PITMODE);
break; else
saSetMode(SA_MODE_CLR_PITMODE|SA_MODE_SET_OUT_RANGE_PITMODE);
case SA_RFMODE_PIT_INRANGE: }
break; } else {
if ((sa_opmode & SA_MODE_GET_PITMODE) == 0) {
// Can't go back to pit mode
smartAudioTxMode = SA_TXMODE_ACTIVE;
}
} }
} }
#endif // OSD #endif // OSD

View file

@ -17,14 +17,20 @@ uint16_t saerr_oooresp;
char smartAudioStatusString[31]; char smartAudioStatusString[31];
uint8_t smartAudioOpModel;
uint8_t smartAudioStatus;
uint8_t smartAudioBand; uint8_t smartAudioBand;
uint8_t smartAudioChan; uint8_t smartAudioChan;
uint16_t smartAudioFreq; uint16_t smartAudioFreq;
uint8_t smartAudioPower; uint8_t smartAudioPower;
uint8_t smartAudioMode; uint8_t smartAudioTxMode;
uint8_t smartAudioPitFMode;
uint16_t smartAudioORFreq;
void smartAudioConfigureOpModelByGvar(void *);
void smartAudioConfigurePitFModeByGvar(void *);
void smartAudioConfigureBandByGvar(void *); void smartAudioConfigureBandByGvar(void *);
void smartAudioConfigureChanByGvar(void *); void smartAudioConfigureChanByGvar(void *);
void smartAudioConfigurePowerByGvar(void *); void smartAudioConfigurePowerByGvar(void *);
void smartAudioSetModeByGvar(void *); void smartAudioSetTxModeByGvar(void *);
#endif #endif