Merge branch 'next' into kilrah/telemetry_enhancements

This commit is contained in:
Andre Bernet
2015-03-22 22:00:34 +04:00
26 changed files with 425 additions and 289 deletions
+11 -1
View File
@@ -90,7 +90,9 @@ enum menuGeneralSetupItems {
CASE_REVPLUS(ITEM_SETUP_BACKLIGHT_COLOR)
ITEM_SETUP_FLASH_BEEP,
CASE_SPLASH_PARAM(ITEM_SETUP_DISABLE_SPLASH)
CASE_GPS(ITEM_SETUP_LABEL_GPS)
CASE_GPS(ITEM_SETUP_TIMEZONE)
CASE_GPS(ITEM_SETUP_ADJUST_RTC)
CASE_GPS(ITEM_SETUP_GPSFORMAT)
CASE_PXX(ITEM_SETUP_COUNTRYCODE)
ITEM_SETUP_LANGUAGE,
@@ -126,7 +128,7 @@ void menuGeneralSetup(uint8_t event)
}
#endif
MENU(STR_MENURADIOSETUP, menuTabGeneral, e_Setup, ITEM_SETUP_MAX, { 2, 2, 1, LABEL(SOUND), 0, 0, 0, 0, 0, 0, 0, CASE_VARIO_CPUARM(LABEL(VARIO)) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, 0, CASE_REVPLUS(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) 0, 0, IF_FAI_CHOICE(0) CASE_MAVLINK(0) 0, 0, LABEL(TX_MODE), 0, 1/*to force edit mode*/ });
MENU(STR_MENURADIOSETUP, menuTabGeneral, e_Setup, ITEM_SETUP_MAX, { 2, 2, 1, LABEL(SOUND), 0, 0, 0, 0, 0, 0, 0, CASE_VARIO_CPUARM(LABEL(VARIO)) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, 0, CASE_REVPLUS(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(LABEL(GPS)) CASE_GPS(0) CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) 0, 0, IF_FAI_CHOICE(0) CASE_MAVLINK(0) 0, 0, LABEL(TX_MODE), 0, 1/*to force edit mode*/ });
int sub = m_posVert;
@@ -412,12 +414,20 @@ void menuGeneralSetup(uint8_t event)
#endif
#if defined(FRSKY) && defined(FRSKY_HUB) && defined(GPS)
case ITEM_SETUP_LABEL_GPS:
lcd_putsLeft(y, STR_GPS);
break;
case ITEM_SETUP_TIMEZONE:
lcd_putsLeft(y, STR_TIMEZONE);
lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.timezone, attr|LEFT);
if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.timezone, -12, 12);
break;
case ITEM_SETUP_ADJUST_RTC:
g_eeGeneral.adjustRTC = onoffMenuItem(g_eeGeneral.adjustRTC, RADIO_SETUP_2ND_COLUMN, y, STR_ADJUST_RTC, attr, event);
break;
case ITEM_SETUP_GPSFORMAT:
g_eeGeneral.gpsFormat = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_GPSCOORD, STR_GPSFORMAT, g_eeGeneral.gpsFormat, 0, 1, attr, event);
break;
+4
View File
@@ -203,4 +203,8 @@ void perMain()
topLcdRefreshEnd();
#endif
#if defined(REV9E) && !defined(SIMU)
bt_wakeup();
#endif
}
+1 -1
View File
@@ -751,7 +751,7 @@ PACK(typedef struct {
uint8_t disableAlarmWarning:1;
uint8_t stickMode:2;
int8_t timezone:5;
uint8_t spare1:1;
uint8_t adjustRTC:1;
uint8_t inactivityTimer;
uint8_t mavbaud:3;
SPLASH_MODE; /* 3bits */
+1 -1
View File
@@ -34,7 +34,7 @@
*
*/
#include "../opentx.h"
#include "../../opentx.h"
#if defined(REVX)
// TODO change this, not the right place
+50 -13
View File
@@ -16,9 +16,16 @@
#define BT_UART_AF GPIO_AF_USART6
#define BT_UART_IRQn USART6_IRQn
#define BT_UART_GPIO_PORT GPIOG
#define BT_UART_GPIO_CLK_TXRX RCC_AHB1Periph_GPIOG
#define BT_UART_GPIO_PORT_TXRX GPIOG
#define BT_UART_GPIO_PIN_TX GPIO_Pin_14
#define BT_UART_GPIO_PIN_RX GPIO_Pin_9
#define BT_UART_GPIO_CLK_EN RCC_AHB1Periph_GPIOD
#define BT_UART_GPIO_PORT_EN GPIOD
#define BT_UART_GPIO_PIN_EN GPIO_Pin_11
#define BT_UART_GPIO_CLK_BRTS RCC_AHB1Periph_GPIOB
#define BT_UART_GPIO_PORT_BRTS GPIOB
#define BT_UART_GPIO_PIN_BRTS GPIO_Pin_10
#define BT_UART_GPIO_TX_PinSource GPIO_PinSource14
#define BT_UART_GPIO_RX_PinSource GPIO_PinSource9
@@ -30,25 +37,34 @@ int bt_open()
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
RCC_AHB1PeriphClockCmd(BT_UART_GPIO_CLK_TXRX, ENABLE);
RCC_AHB1PeriphClockCmd(BT_UART_GPIO_CLK_EN, ENABLE);
RCC_AHB1PeriphClockCmd(BT_UART_GPIO_CLK_BRTS, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);
GPIO_PinAFConfig(BT_UART_GPIO_PORT, BT_UART_GPIO_TX_PinSource, BT_UART_AF);
GPIO_PinAFConfig(BT_UART_GPIO_PORT, BT_UART_GPIO_RX_PinSource, BT_UART_AF);
GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_TX;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_EN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(BT_UART_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_RX;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_Init(BT_UART_GPIO_PORT_EN, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_BRTS;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(BT_UART_GPIO_PORT, &GPIO_InitStructure);
GPIO_Init(BT_UART_GPIO_PORT_BRTS, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_TX|BT_UART_GPIO_PIN_RX;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(BT_UART_GPIO_PORT_TXRX, &GPIO_InitStructure);
GPIO_PinAFConfig(BT_UART_GPIO_PORT_TXRX, BT_UART_GPIO_TX_PinSource, BT_UART_AF);
GPIO_PinAFConfig(BT_UART_GPIO_PORT_TXRX, BT_UART_GPIO_RX_PinSource, BT_UART_AF);
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_Parity = USART_Parity_No;
@@ -68,9 +84,14 @@ int bt_open()
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
GPIO_SetBits(BT_UART_GPIO_PORT_BRTS, BT_UART_GPIO_PIN_BRTS);
GPIO_ResetBits(BT_UART_GPIO_PORT_EN, BT_UART_GPIO_PIN_EN); // open bluetooth
return 0;
}
uint8_t bt_state = 0;
extern "C" void USART6_IRQHandler(void)
{
#if 1
@@ -90,6 +111,8 @@ extern "C" void USART6_IRQHandler(void)
}
else {
USART_ITConfig(BT_UART, USART_IT_TXE, DISABLE);
GPIO_SetBits(BT_UART_GPIO_PORT_BRTS, BT_UART_GPIO_PIN_BRTS);
bt_state = 0;
}
}
#endif
@@ -101,10 +124,23 @@ int bt_write(const void *buffer, int len)
for (int i=0; i<len; ++i) {
btTxFifo.push(data[i]);
}
USART_ITConfig(BT_UART, USART_IT_TXE, ENABLE);
return 0;
}
void bt_wakeup(void)
{
if (bt_state < 2 && !btTxFifo.empty()) {
if (bt_state == 0) {
GPIO_ResetBits(BT_UART_GPIO_PORT_BRTS, BT_UART_GPIO_PIN_BRTS);
bt_state = 1;
}
else {
USART_ITConfig(BT_UART, USART_IT_TXE, ENABLE);
bt_state = 2;
}
}
}
int bt_read(void *buffer, int len)
{
int result = 0;
@@ -121,5 +157,6 @@ int bt_read(void *buffer, int len)
int bt_close()
{
GPIO_SetBits(BT_UART_GPIO_PORT_EN, BT_UART_GPIO_PIN_EN); // close bluetooth
return 0;
}
@@ -316,6 +316,7 @@ void uart3Stop(void);
int bt_open(void);
int bt_write(const void *buffer, int len);
int bt_read(void *buffer, int len);
void bt_wakeup(void);
// Top LCD driver
#if defined(REV9E)
+5
View File
@@ -357,6 +357,11 @@ void telemetryWakeup()
uint8_t lastReceived = telemetryItems[i].lastReceived;
if (lastReceived < TELEMETRY_VALUE_TIMER_CYCLE && uint8_t(now - lastReceived) > TELEMETRY_VALUE_OLD_THRESHOLD) {
telemetryItems[i].lastReceived = TELEMETRY_VALUE_OLD;
TelemetrySensor * sensor = & g_model.telemetrySensors[i];
if (sensor->unit == UNIT_DATETIME) {
telemetryItems[i].datetime.datestate = 0;
telemetryItems[i].datetime.timestate = 0;
}
}
}
}
+30 -2
View File
@@ -52,13 +52,41 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t newVal, uin
datetime.year = (uint16_t) ((data & 0xff000000) >> 24);
datetime.month = (uint8_t) ((data & 0x00ff0000) >> 16);
datetime.day = (uint8_t) ((data & 0x0000ff00) >> 8);
datetime.datestate = 1;
if (datetime.year != 0) {
datetime.datestate = 1;
}
#if defined(RTCLOCK)
if (g_eeGeneral.adjustRTC && (datetime.datestate == 1)) {
struct gtm t;
gettime(&t);
t.tm_year = datetime.year+4;
t.tm_mon = datetime.month-1;
t.tm_mday = datetime.day;
rtcSetTime(&t);
}
#endif
}
else {
datetime.hour = ((uint8_t) ((data & 0xff000000) >> 24) + g_eeGeneral.timezone + 24) % 24;
datetime.min = (uint8_t) ((data & 0x00ff0000) >> 16);
datetime.sec = (uint16_t) ((data & 0x0000ff00) >> 8);
datetime.timestate = 1;
if (datetime.datestate == 1) {
datetime.timestate = 1;
}
#if defined(RTCLOCK)
if (g_eeGeneral.adjustRTC && (datetime.datestate == 1)) {
struct gtm t;
gettime(&t);
if (abs((t.tm_hour-datetime.hour)*3600 + (t.tm_min-datetime.min)*60 + (t.tm_sec-datetime.sec)) > 20) {
// we adjust RTC only if difference is > 20 seconds
t.tm_hour = datetime.hour;
t.tm_min = datetime.min;
t.tm_sec = datetime.sec;
g_rtcTime = gmktime(&t); // update local timestamp and get wday calculated
rtcSetTime(&t);
}
}
#endif
}
if (datetime.year == 0) {
return;
+2
View File
@@ -252,6 +252,8 @@ const pm_char STR_THROTTLEWARNING[] PROGMEM = TR_THROTTLEWARNING;
const pm_char STR_SWITCHWARNING[] PROGMEM = TR_SWITCHWARNING;
#ifdef FRSKY
const pm_char STR_TIMEZONE[] PROGMEM = TR_TIMEZONE;
const pm_char STR_ADJUST_RTC[] PROGMEM = TR_ADJUST_RTC;
const pm_char STR_GPS[] PROGMEM = TR_GPS;
const pm_char STR_GPSCOORD[] PROGMEM = TR_GPSCOORD;
const pm_char STR_VARIO[] PROGMEM = TR_VARIO;
const pm_char STR_PITCH_AT_ZERO[] PROGMEM = TR_PITCH_AT_ZERO;
+2
View File
@@ -435,6 +435,8 @@ extern const pm_char STR_SPLASHSCREEN[];
extern const pm_char STR_THROTTLEWARNING[];
extern const pm_char STR_SWITCHWARNING[];
extern const pm_char STR_TIMEZONE[];
extern const pm_char STR_ADJUST_RTC[];
extern const pm_char STR_GPS[];
extern const pm_char STR_GPSCOORD[];
extern const pm_char STR_VARIO[];
extern const pm_char STR_PITCH_AT_ZERO[];
+2
View File
@@ -682,6 +682,8 @@
#define TR_SWITCHWARNING TR("* Spínače", INDENT "Polohy spínačů")
#define TR_POTWARNING TR("* Potenc.", INDENT "Nastavení Pot.")
#define TR_TIMEZONE "časové pásmo"
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD TR("Pořadí kanálů", "Výchozí pořadí kanálů")
#define TR_STICKS "Sticks"
#define TR_POTS "Pots"
+2
View File
@@ -681,6 +681,8 @@
#define TR_SWITCHWARNING TR("Sch. Alarm", INDENT "Schalter-Alarm")
#define TR_POTWARNING TR("Pot Warn.", INDENT "Poti-Warnung")
#define TR_TIMEZONE TR("Zeitzone", "GPS-Zeitzone +/-Std")
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD TR("Kanalanordnung", "Kanalvoreinstellung")
#define TR_STICKS "Knüppel"
#define TR_POTS "Potis"
+4 -2
View File
@@ -680,7 +680,9 @@
#define TR_THROTTLEWARNING TR(IF_CPUARM(INDENT) "T-Warning", INDENT "Throttle State")
#define TR_SWITCHWARNING TR(IF_CPUARM(INDENT) "S-Warning", INDENT "Switch Positions")
#define TR_POTWARNING TR(IF_CPUARM(INDENT) "Pot Warn.", INDENT "Pot Positions")
#define TR_TIMEZONE TR("Time Zone", "GPS Time zone")
#define TR_TIMEZONE TR("Time Zone", INDENT "Time zone")
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD TR("Rx Channel Ord", "Default channel order")
#define TR_STICKS "Sticks"
#define TR_POTS "Pots"
@@ -783,7 +785,7 @@
#define TR_MINRSSI "Min Rssi"
#define TR_LATITUDE "Latitude"
#define TR_LONGITUDE "Longitude"
#define TR_GPSCOORD TR("GPS Coords", "GPS coordinate format")
#define TR_GPSCOORD TR("GPS Coords", INDENT "Coordinate format")
#define TR_VARIO TR("Vario", "Variometer")
#define TR_PITCH_AT_ZERO INDENT "Pitch at Zero"
#define TR_PITCH_AT_MAX INDENT "Pitch at Max"
+2
View File
@@ -630,6 +630,8 @@
#define TR_SWITCHWARNING TR("Aviso-I", INDENT "Aviso Intrptor")
#define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning")
#define TR_TIMEZONE TR("Zona Hora", "GPS Zona Hora")
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD TR("Rx Orden canal", "Orden habitual canales")
#define TR_STICKS "Sticks"
#define TR_POTS "Pots"
+2
View File
@@ -630,6 +630,8 @@
#define TR_SWITCHWARNING TR("S-Warning", INDENT "Switch Warning")
#define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning")
#define TR_TIMEZONE TR("Time Zone","GPS Time zone")
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD TR("Rx Channel Ord","Default channel order")
#define TR_STICKS "Sticks"
#define TR_POTS "Pots"
+2
View File
@@ -685,6 +685,8 @@
#define TR_SWITCHWARNING TR(IF_CPUARM(INDENT) "Alerte int", INDENT "Pos. interrupteurs")
#define TR_POTWARNING TR(IF_CPUARM(INDENT) "Alerte pot", INDENT "Pos. potentios")
#define TR_TIMEZONE "Fuseau horaire"
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD TR("Ordre voies RX","Ordre des voies préféré")
#define TR_STICKS "Manches"
#define TR_POTS "Potentios"
+2
View File
@@ -630,6 +630,8 @@
#define TR_SWITCHWARNING TR("Avv. Int.", INDENT "Avviso Interr.")
#define TR_POTWARNING TR("Avv. Pot.", INDENT "Avviso Pot.")
#define TR_TIMEZONE "Ora locale"
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD "Ordine ch RX"
#define TR_STICKS "Sticks"
#define TR_POTS "Pots"
+2
View File
@@ -628,6 +628,8 @@
#define TR_SWITCHWARNING TR(IF_CPUARM(INDENT) "OstrzPrzeł", INDENT "PozycjaPrzeł")
#define TR_POTWARNING TR(IF_CPUARM(INDENT) "Ostrz.Poten.", INDENT "PozycjaPotencj.")
#define TR_TIMEZONE TR("Strefa czasowa" ,"Strefa czasowa GPS")
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD TR("KolejnKan.RX", "Bazowa kolejność kanałów")
#define TR_STICKS "Sticks"
#define TR_POTS "Pots"
+2
View File
@@ -630,6 +630,8 @@
#define TR_SWITCHWARNING TR("Avisa Chav", INDENT "Avisa Chav")
#define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning")
#define TR_TIMEZONE "Time Zone"
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD "Ordem Canal RX"
#define TR_STICKS "Sticks"
#define TR_POTS "Pots"
+2
View File
@@ -630,6 +630,8 @@
#define TR_SWITCHWARNING TR("Bryt.varn.", INDENT "Brytarvarning")
#define TR_POTWARNING TR("Rattvarn.", INDENT "Rattvarning")
#define TR_TIMEZONE TR("Tidszon", "GPS Tidszon")
#define TR_ADJUST_RTC INDENT "Adjust RTC"
#define TR_GPS "GPS"
#define TR_RXCHANNELORD "Kanaler i RX"
#define TR_STICKS "Sticks"
#define TR_POTS "Pots"