mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-19 22:35:23 +03:00
CMS-OSD separation
This commit is contained in:
parent
c795135542
commit
6cf9086f56
19 changed files with 1518 additions and 1351 deletions
|
@ -37,6 +37,7 @@
|
||||||
#include "io/motors.h"
|
#include "io/motors.h"
|
||||||
#include "io/servos.h"
|
#include "io/servos.h"
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
|
#include "io/cms_types.h"
|
||||||
#include "io/osd.h"
|
#include "io/osd.h"
|
||||||
#include "io/ledstrip.h"
|
#include "io/ledstrip.h"
|
||||||
#include "io/vtx.h"
|
#include "io/vtx.h"
|
||||||
|
|
|
@ -63,6 +63,7 @@
|
||||||
#include "io/servos.h"
|
#include "io/servos.h"
|
||||||
#include "io/ledstrip.h"
|
#include "io/ledstrip.h"
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
|
#include "io/cms_types.h"
|
||||||
#include "io/osd.h"
|
#include "io/osd.h"
|
||||||
#include "io/vtx.h"
|
#include "io/vtx.h"
|
||||||
|
|
||||||
|
|
|
@ -66,9 +66,9 @@
|
||||||
#include "io/flashfs.h"
|
#include "io/flashfs.h"
|
||||||
#include "io/transponder_ir.h"
|
#include "io/transponder_ir.h"
|
||||||
#include "io/asyncfatfs/asyncfatfs.h"
|
#include "io/asyncfatfs/asyncfatfs.h"
|
||||||
#include "io/osd.h"
|
//#include "io/osd.h"
|
||||||
#include "io/serial_4way.h"
|
#include "io/serial_4way.h"
|
||||||
#include "io/vtx.h"
|
//#include "io/vtx.h"
|
||||||
|
|
||||||
#include "msp/msp_protocol.h"
|
#include "msp/msp_protocol.h"
|
||||||
#include "msp/msp.h"
|
#include "msp/msp.h"
|
||||||
|
|
|
@ -43,11 +43,12 @@
|
||||||
#include "io/display.h"
|
#include "io/display.h"
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
#include "io/ledstrip.h"
|
#include "io/ledstrip.h"
|
||||||
|
#include "io/cms_types.h"
|
||||||
|
#include "io/cms.h"
|
||||||
#include "io/osd.h"
|
#include "io/osd.h"
|
||||||
#include "io/serial.h"
|
#include "io/serial.h"
|
||||||
#include "io/serial_cli.h"
|
#include "io/serial_cli.h"
|
||||||
#include "io/transponder_ir.h"
|
#include "io/transponder_ir.h"
|
||||||
#include "io/cms.h"
|
|
||||||
|
|
||||||
#include "msp/msp_serial.h"
|
#include "msp/msp_serial.h"
|
||||||
|
|
||||||
|
|
86
src/main/io/canvas.c
Normal file
86
src/main/io/canvas.c
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#include "platform.h"
|
||||||
|
|
||||||
|
#include "build/version.h"
|
||||||
|
|
||||||
|
#ifdef CANVAS
|
||||||
|
|
||||||
|
#include "io/cms_types.h"
|
||||||
|
|
||||||
|
#include "fc/fc_msp.h"
|
||||||
|
#include "msp/msp_protocol.h"
|
||||||
|
#include "msp/msp_serial.h"
|
||||||
|
|
||||||
|
void canvasGetSize(uint8_t *pRows, uint8_t *pCols)
|
||||||
|
{
|
||||||
|
*pRows = 13;
|
||||||
|
*pCols = 30;
|
||||||
|
}
|
||||||
|
|
||||||
|
void canvasBegin(void)
|
||||||
|
{
|
||||||
|
uint8_t subcmd[] = { 0 };
|
||||||
|
|
||||||
|
mspSerialPush(MSP_CANVAS, subcmd, sizeof(subcmd));
|
||||||
|
}
|
||||||
|
|
||||||
|
void canvasHeartBeat(void)
|
||||||
|
{
|
||||||
|
canvasBegin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void canvasEnd(void)
|
||||||
|
{
|
||||||
|
uint8_t subcmd[] = { 1 };
|
||||||
|
|
||||||
|
mspSerialPush(MSP_CANVAS, subcmd, sizeof(subcmd));
|
||||||
|
}
|
||||||
|
|
||||||
|
void canvasClear(void)
|
||||||
|
{
|
||||||
|
uint8_t subcmd[] = { 2 };
|
||||||
|
|
||||||
|
mspSerialPush(MSP_CANVAS, subcmd, sizeof(subcmd));
|
||||||
|
}
|
||||||
|
|
||||||
|
void canvasWrite(uint8_t col, uint8_t row, char *string)
|
||||||
|
{
|
||||||
|
|
||||||
|
//debug[0]++; // Let's capture excess canvas writes
|
||||||
|
|
||||||
|
int len;
|
||||||
|
char buf[30 + 4];
|
||||||
|
|
||||||
|
if ((len = strlen(string)) >= 30)
|
||||||
|
len = 30;
|
||||||
|
|
||||||
|
buf[0] = 3;
|
||||||
|
buf[1] = row;
|
||||||
|
buf[2] = col;
|
||||||
|
buf[3] = 0;
|
||||||
|
memcpy((char *)&buf[4], string, len);
|
||||||
|
|
||||||
|
mspSerialPush(MSP_CANVAS, (uint8_t *)buf, len + 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
screenFnVTable_t canvasVTable = {
|
||||||
|
canvasGetSize,
|
||||||
|
canvasBegin,
|
||||||
|
canvasEnd,
|
||||||
|
canvasClear,
|
||||||
|
canvasWrite,
|
||||||
|
canvasHeartBeat,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
screenFnVTable_t *canvasInit(void)
|
||||||
|
{
|
||||||
|
mspSerialPushInit(mspFcPushInit()); // Called once at startup to initialize push function in msp
|
||||||
|
|
||||||
|
return &canvasVTable;
|
||||||
|
}
|
||||||
|
#endif
|
3
src/main/io/canvas.h
Normal file
3
src/main/io/canvas.h
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
screenFnVTable_t *canvasInit(void);
|
1207
src/main/io/cms.c
Normal file
1207
src/main/io/cms.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,2 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
void cmsInit(void);
|
void cmsInit(void);
|
||||||
void cmsHandler(uint32_t);
|
void cmsHandler(uint32_t);
|
||||||
|
|
||||||
|
void cmsOpenMenu();
|
||||||
|
void cmsUpdate(uint32_t);
|
||||||
|
void cmsScreenResync(void);
|
||||||
|
|
||||||
|
// Required for external CMS tables
|
||||||
|
|
||||||
|
void cmsChangeScreen(void * ptr);
|
||||||
|
void cmsExitMenu(void * ptr);
|
||||||
|
|
96
src/main/io/cms_types.h
Normal file
96
src/main/io/cms_types.h
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
//
|
||||||
|
// Menu element types
|
||||||
|
// XXX Upon separation, all OME would be renamed to CME_ or similar.
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
typedef void (*OSDMenuFuncPtr)(void *data);
|
||||||
|
|
||||||
|
//type of elements
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
OME_Label,
|
||||||
|
OME_Back,
|
||||||
|
OME_OSD_Exit,
|
||||||
|
OME_Submenu,
|
||||||
|
OME_Bool,
|
||||||
|
OME_INT8,
|
||||||
|
OME_UINT8,
|
||||||
|
OME_UINT16,
|
||||||
|
OME_INT16,
|
||||||
|
OME_Poll_INT16,
|
||||||
|
OME_FLOAT, //only up to 255 value and cant be 2.55 or 25.5, just for PID's
|
||||||
|
//wlasciwosci elementow
|
||||||
|
OME_VISIBLE,
|
||||||
|
OME_POS,
|
||||||
|
OME_TAB,
|
||||||
|
OME_END,
|
||||||
|
} OSD_MenuElement;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *text;
|
||||||
|
OSD_MenuElement type;
|
||||||
|
OSDMenuFuncPtr func;
|
||||||
|
void *data;
|
||||||
|
bool changed;
|
||||||
|
} OSD_Entry;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t *val;
|
||||||
|
uint8_t min;
|
||||||
|
uint8_t max;
|
||||||
|
uint8_t step;
|
||||||
|
} OSD_UINT8_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int8_t *val;
|
||||||
|
int8_t min;
|
||||||
|
int8_t max;
|
||||||
|
int8_t step;
|
||||||
|
} OSD_INT8_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int16_t *val;
|
||||||
|
int16_t min;
|
||||||
|
int16_t max;
|
||||||
|
int16_t step;
|
||||||
|
} OSD_INT16_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint16_t *val;
|
||||||
|
uint16_t min;
|
||||||
|
uint16_t max;
|
||||||
|
uint16_t step;
|
||||||
|
} OSD_UINT16_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t *val;
|
||||||
|
uint8_t min;
|
||||||
|
uint8_t max;
|
||||||
|
uint8_t step;
|
||||||
|
uint16_t multipler;
|
||||||
|
} OSD_FLOAT_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t *val;
|
||||||
|
uint8_t max;
|
||||||
|
const char * const *names;
|
||||||
|
} OSD_TAB_t;
|
||||||
|
|
||||||
|
typedef struct screenFnVTable_s {
|
||||||
|
void (*getsize)(uint8_t *, uint8_t *);
|
||||||
|
void (*begin)(void);
|
||||||
|
void (*end)(void);
|
||||||
|
void (*clear)(void);
|
||||||
|
void (*write)(uint8_t, uint8_t, char *);
|
||||||
|
void (*heartbeat)(void);
|
||||||
|
void (*resync)(void);
|
||||||
|
} screenFnVTable_t;
|
|
@ -62,8 +62,8 @@
|
||||||
#include "io/gimbal.h"
|
#include "io/gimbal.h"
|
||||||
#include "io/serial.h"
|
#include "io/serial.h"
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
#include "io/osd.h"
|
//#include "io/osd.h"
|
||||||
#include "io/vtx.h"
|
//#include "io/vtx.h"
|
||||||
|
|
||||||
#include "flight/failsafe.h"
|
#include "flight/failsafe.h"
|
||||||
#include "flight/mixer.h"
|
#include "flight/mixer.h"
|
||||||
|
|
1423
src/main/io/osd.c
1423
src/main/io/osd.c
File diff suppressed because it is too large
Load diff
|
@ -68,3 +68,7 @@ typedef struct {
|
||||||
void updateOsd(uint32_t currentTime);
|
void updateOsd(uint32_t currentTime);
|
||||||
void osdInit(void);
|
void osdInit(void);
|
||||||
void resetOsdConfig(osd_profile_t *osdProfile);
|
void resetOsdConfig(osd_profile_t *osdProfile);
|
||||||
|
screenFnVTable_t *osdCmsInit(void);
|
||||||
|
|
||||||
|
#define VISIBLE_FLAG 0x0800
|
||||||
|
#define VISIBLE(x) (x & VISIBLE_FLAG)
|
||||||
|
|
|
@ -70,6 +70,7 @@ uint8_t cliMode = 0;
|
||||||
#include "io/flashfs.h"
|
#include "io/flashfs.h"
|
||||||
#include "io/beeper.h"
|
#include "io/beeper.h"
|
||||||
#include "io/asyncfatfs/asyncfatfs.h"
|
#include "io/asyncfatfs/asyncfatfs.h"
|
||||||
|
#include "io/cms_types.h"
|
||||||
#include "io/osd.h"
|
#include "io/osd.h"
|
||||||
#include "io/vtx.h"
|
#include "io/vtx.h"
|
||||||
|
|
||||||
|
|
|
@ -86,9 +86,10 @@
|
||||||
#include "io/asyncfatfs/asyncfatfs.h"
|
#include "io/asyncfatfs/asyncfatfs.h"
|
||||||
#include "io/serial_cli.h"
|
#include "io/serial_cli.h"
|
||||||
#include "io/transponder_ir.h"
|
#include "io/transponder_ir.h"
|
||||||
|
#include "io/cms_types.h"
|
||||||
|
#include "io/cms.h"
|
||||||
#include "io/osd.h"
|
#include "io/osd.h"
|
||||||
#include "io/vtx.h"
|
#include "io/vtx.h"
|
||||||
#include "io/cms.h"
|
|
||||||
|
|
||||||
#include "scheduler/scheduler.h"
|
#include "scheduler/scheduler.h"
|
||||||
|
|
||||||
|
|
|
@ -93,15 +93,15 @@
|
||||||
#define CMS
|
#define CMS
|
||||||
|
|
||||||
// Use external OSD to run CMS
|
// Use external OSD to run CMS
|
||||||
#define CANVAS
|
//#define CANVAS
|
||||||
|
|
||||||
// OSD define info:
|
// OSD define info:
|
||||||
// feature name (includes source) -> MAX_OSD, used in target.mk
|
// feature name (includes source) -> MAX_OSD, used in target.mk
|
||||||
// include the osd code
|
// include the osd code
|
||||||
//#define OSD
|
#define OSD
|
||||||
|
|
||||||
// include the max7456 driver
|
// include the max7456 driver
|
||||||
//#define USE_MAX7456
|
#define USE_MAX7456
|
||||||
#define MAX7456_SPI_INSTANCE SPI1
|
#define MAX7456_SPI_INSTANCE SPI1
|
||||||
#define MAX7456_SPI_CS_PIN PB1
|
#define MAX7456_SPI_CS_PIN PB1
|
||||||
#define MAX7456_SPI_CLK (SPI_CLOCK_STANDARD*2)
|
#define MAX7456_SPI_CLK (SPI_CLOCK_STANDARD*2)
|
||||||
|
|
|
@ -14,4 +14,5 @@ TARGET_SRC = \
|
||||||
drivers/transponder_ir_stm32f30x.c \
|
drivers/transponder_ir_stm32f30x.c \
|
||||||
io/transponder_ir.c \
|
io/transponder_ir.c \
|
||||||
drivers/max7456.c \
|
drivers/max7456.c \
|
||||||
io/osd.c
|
io/osd.c \
|
||||||
|
io/cms.c
|
||||||
|
|
|
@ -9,5 +9,6 @@ TARGET_SRC = \
|
||||||
drivers/barometer_bmp280.c \
|
drivers/barometer_bmp280.c \
|
||||||
drivers/compass_ak8975.c \
|
drivers/compass_ak8975.c \
|
||||||
drivers/compass_hmc5883l.c \
|
drivers/compass_hmc5883l.c \
|
||||||
io/osd.c
|
io/cms.c \
|
||||||
|
io/canvas.c
|
||||||
|
|
||||||
|
|
|
@ -65,8 +65,8 @@
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
#include "io/ledstrip.h"
|
#include "io/ledstrip.h"
|
||||||
#include "io/beeper.h"
|
#include "io/beeper.h"
|
||||||
#include "io/osd.h"
|
//#include "io/osd.h"
|
||||||
#include "io/vtx.h"
|
//#include "io/vtx.h"
|
||||||
|
|
||||||
#include "rx/rx.h"
|
#include "rx/rx.h"
|
||||||
|
|
||||||
|
|
|
@ -36,9 +36,9 @@
|
||||||
#include "io/gps.h"
|
#include "io/gps.h"
|
||||||
#include "io/gimbal.h"
|
#include "io/gimbal.h"
|
||||||
#include "io/serial.h"
|
#include "io/serial.h"
|
||||||
#include "io/ledstrip.h"
|
//#include "io/ledstrip.h"
|
||||||
#include "io/osd.h"
|
//#include "io/osd.h"
|
||||||
#include "io/vtx.h"
|
//#include "io/vtx.h"
|
||||||
|
|
||||||
#include "sensors/boardalignment.h"
|
#include "sensors/boardalignment.h"
|
||||||
#include "sensors/sensors.h"
|
#include "sensors/sensors.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue