diff --git a/.gitignore b/.gitignore index 245d33be92..fd8ff825fc 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ startup_stm32f10x_md_gcc.s # script-generated files docs/Manual.pdf README.pdf - +tools +downloads diff --git a/src/main/io/osd.c b/src/main/io/osd.c index 3217b9f528..6c88e93896 100755 --- a/src/main/io/osd.c +++ b/src/main/io/osd.c @@ -520,6 +520,7 @@ OSD_Entry MenuLayout[]= OSD_UINT8_Struct RSSI_entry = {&OSD_cfg.rssi_alarm,5,90,5}; OSD_UINT16_Struct CAP_entry = {&OSD_cfg.cap_alarm, 50, 30000, 50}; OSD_UINT16_Struct FLY_TIME_entry = {&OSD_cfg.time_alarm, 1, 200, 1}; +OSD_UINT16_Struct ALT_ALARM_entry = {&OSD_cfg.alt_alarm, 1, 200, 1}; OSD_Entry MenuAlarms[]= { @@ -527,6 +528,7 @@ OSD_Entry MenuAlarms[]= {"RSSI", OME_UINT8, NULL, &RSSI_entry}, {"MAIN BATT.", OME_UINT16, NULL, &CAP_entry}, {"FLY TIME", OME_UINT16, NULL, &FLY_TIME_entry}, + {"MAX ALTITUDE", OME_UINT16, NULL, &ALT_ALARM_entry}, {"BACK", OME_Back, NULL, NULL}, {NULL, OME_END, NULL, NULL} }; @@ -550,6 +552,7 @@ OSD_Entry MenuLayoutPos[]= {"GPS SPEED", OME_POS, OSD_EditElement, &masterConfig.osdProfile.item_pos[OSD_GPS_SPEED]}, {"GPS SATS.", OME_POS, OSD_EditElement, &masterConfig.osdProfile.item_pos[OSD_GPS_SATS]}, #endif + {"ALTITUDE", OME_POS, OSD_EditElement, &masterConfig.osdProfile.item_pos[OSD_ALTITUDE]}, {"BACK", OME_Back, NULL, NULL}, {NULL, OME_END, NULL, NULL} }; @@ -575,6 +578,7 @@ OSD_Entry MenuLayoutActiv[]= {"GPS SPEED", OME_VISIBLE, NULL, &masterConfig.osdProfile.item_pos[OSD_GPS_SPEED]}, {"GPS SATS.", OME_VISIBLE, NULL, &masterConfig.osdProfile.item_pos[OSD_GPS_SATS]}, #endif + {"ALTITUDE", OME_VISIBLE, NULL, &masterConfig.osdProfile.item_pos[OSD_ALTITUDE]}, {"BACK", OME_Back, NULL, NULL}, {NULL, OME_END, NULL, NULL} }; @@ -596,10 +600,12 @@ void resetOsdConfig(osd_profile *osdProfile) osdProfile->item_pos[OSD_MAH_DRAWN] = OSD_POS(15,3); osdProfile->item_pos[OSD_GPS_SPEED] = OSD_POS(2,2); osdProfile->item_pos[OSD_GPS_SATS] = OSD_POS(2,12); + osdProfile->item_pos[OSD_ALTITUDE] = OSD_POS(1,5); osdProfile->rssi_alarm = 20; osdProfile->cap_alarm = 2200; osdProfile->time_alarm = 10; //in minutes + osdProfile->alt_alarm = 100; //meters or feet depend on configuration osdProfile->video_system = 0; } @@ -777,6 +783,25 @@ void OSD_SPEED(void) #endif +void OSD_BARO_ALTITUDE(void) +{ + + char buff[16]; + int32_t alt = BaroAlt; // Metre x 100 + char unitSym = 0xC; // m + + if (!VISIBLE(OSD_cfg.item_pos[OSD_ALTITUDE]) || BLINK(OSD_cfg.item_pos[OSD_ALTITUDE])) + return; + + if (masterConfig.osdProfile.units == OSD_UNIT_IMPERIAL) { + alt = (alt * 328) / 100; // Convert to feet x 100 + unitSym = 0xF; // ft + } + + sprintf(buff, "%c%d.%01d%c", alt < 0 ? '-' : ' ', abs(alt / 100), abs((alt % 100) / 10), unitSym); + max7456_write(OSD_X(OSD_cfg.item_pos[OSD_ALTITUDE]), OSD_Y(OSD_cfg.item_pos[OSD_ALTITUDE]), buff); +} + void OSD_ON_TIME(void) { char buff[8]; @@ -873,6 +898,7 @@ void OSD_VTX_CHAN(void) void OSD_UpdateAlarms(void) { uint16_t rval = rssi * 100 / 1024; //zmiana zakresu + int32_t alt = BaroAlt/100; if (rval < OSD_cfg.rssi_alarm) OSD_cfg.item_pos[OSD_RSSI_VALUE] |= BLINK_FLAG; @@ -898,6 +924,16 @@ void OSD_UpdateAlarms(void) OSD_cfg.item_pos[OSD_MAH_DRAWN] |= BLINK_FLAG; else OSD_cfg.item_pos[OSD_MAH_DRAWN] &= ~BLINK_FLAG; + + if (masterConfig.osdProfile.units == OSD_UNIT_IMPERIAL) { + alt = (alt * 328) / 100; // Convert to feet + } + + if (alt >= OSD_cfg.alt_alarm) + OSD_cfg.item_pos[OSD_ALTITUDE] |= BLINK_FLAG; + else + OSD_cfg.item_pos[OSD_ALTITUDE] &= ~BLINK_FLAG; + } void OSD_TurnOffAlarms(void) @@ -947,6 +983,7 @@ void OSD_DrawElements(void) OSD_SPEED(); } #endif + OSD_BARO_ALTITUDE(); } uint8_t OSDHandleKey(uint8_t key) diff --git a/src/main/io/osd.h b/src/main/io/osd.h index 2a128b65e3..36586d7524 100755 --- a/src/main/io/osd.h +++ b/src/main/io/osd.h @@ -17,16 +17,25 @@ typedef enum { OSD_MAH_DRAWN, OSD_GPS_SPEED, OSD_GPS_SATS, + OSD_ALTITUDE, OSD_MAX_ITEMS, // MUST BE LAST } osd_items_t; +typedef enum { + OSD_UNIT_IMPERIAL, + OSD_UNIT_METRIC +} osd_unit_t; + typedef struct { uint16_t item_pos[OSD_MAX_ITEMS]; //alarms uint8_t rssi_alarm; uint16_t cap_alarm; uint16_t time_alarm; + uint16_t alt_alarm; + uint8_t video_system; + osd_unit_t units; } osd_profile; typedef struct { diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index 512fd43f61..f07f6d40d0 100755 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -916,6 +916,7 @@ const clivalue_t valueTable[] = { #ifdef OSD { "osd_video_system", VAR_UINT8 | MASTER_VALUE, &masterConfig.osdProfile.video_system, .config.minmax = { 0, 2 } }, + { "osd_units", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, &masterConfig.osdProfile.units, .config.lookup = { TABLE_UNIT } }, { "osd_rssi_alarm", VAR_UINT8 | MASTER_VALUE, &masterConfig.osdProfile.rssi_alarm, .config.minmax = { 0, 100 } }, { "osd_cap_alarm", VAR_UINT16 | MASTER_VALUE, &masterConfig.osdProfile.cap_alarm, .config.minmax = { 0, 20000 } }, { "osd_time_alarm", VAR_UINT16 | MASTER_VALUE, &masterConfig.osdProfile.time_alarm, .config.minmax = { 0, 60 } }, @@ -933,6 +934,7 @@ const clivalue_t valueTable[] = { { "osd_craft_name_pos", VAR_UINT16 | MASTER_VALUE, &masterConfig.osdProfile.item_pos[OSD_CRAFT_NAME], .config.minmax = { 0, 65536 } }, { "osd_gps_speed_pos", VAR_UINT16 | MASTER_VALUE, &masterConfig.osdProfile.item_pos[OSD_GPS_SPEED], .config.minmax = { 0, 65536 } }, { "osd_gps_sats_pos", VAR_UINT16 | MASTER_VALUE, &masterConfig.osdProfile.item_pos[OSD_GPS_SATS], .config.minmax = { 0, 65536 } }, + { "osd_altitude", VAR_UINT16 | MASTER_VALUE, &masterConfig.osdProfile.item_pos[OSD_ALTITUDE], .config.minmax = { 0, 65536 } }, #endif }; diff --git a/src/main/io/serial_msp.c b/src/main/io/serial_msp.c index 661f81b987..31773f288b 100755 --- a/src/main/io/serial_msp.c +++ b/src/main/io/serial_msp.c @@ -1197,10 +1197,11 @@ static bool processOutCommand(uint8_t cmdMSP) case MSP_OSD_CONFIG: #ifdef OSD - headSerialReply(7 + (OSD_MAX_ITEMS * 2)); + headSerialReply(8 + (OSD_MAX_ITEMS * 2)); serialize8(1); // OSD supported // send video system (AUTO/PAL/NTSC) serialize8(masterConfig.osdProfile.video_system); + serialize8(masterConfig.osdProfile.units); serialize8(masterConfig.osdProfile.rssi_alarm); serialize16(masterConfig.osdProfile.cap_alarm); serialize16(masterConfig.osdProfile.time_alarm); @@ -1585,6 +1586,7 @@ static bool processInCommand(void) // set all the other settings if ((int8_t)addr == -1) { masterConfig.osdProfile.video_system = read8(); + masterConfig.osdProfile.units = read8(); } // set a position setting else { diff --git a/src/main/mw.c b/src/main/mw.c index b112aa6678..b791c5c0c5 100644 --- a/src/main/mw.c +++ b/src/main/mw.c @@ -979,8 +979,10 @@ void taskUpdateCompass(void) void taskUpdateBaro(void) { if (sensors(SENSOR_BARO)) { - uint32_t newDeadline = baroUpdate(); - rescheduleTask(TASK_SELF, newDeadline); + const uint32_t newDeadline = baroUpdate(); + if (newDeadline != 0) { + rescheduleTask(TASK_SELF, newDeadline); + } } } #endif diff --git a/src/main/target/FURYF4/target.h b/src/main/target/FURYF4/target.h index 2f0cfb8636..ab8f1e3869 100644 --- a/src/main/target/FURYF4/target.h +++ b/src/main/target/FURYF4/target.h @@ -140,7 +140,7 @@ #define USE_ADC #define BOARD_HAS_VOLTAGE_DIVIDER #define VBAT_ADC_PIN PC1 -#define RSSI_ADC_GPIO_PIN PC2 +#define RSSI_ADC_PIN PC2 #define CURRENT_METER_ADC_PIN PC3 #define DEFAULT_FEATURES (FEATURE_VBAT | FEATURE_BLACKBOX) diff --git a/src/main/target/IMPULSERCF3/target.c b/src/main/target/IMPULSERCF3/target.c new file mode 100644 index 0000000000..6c98e152c7 --- /dev/null +++ b/src/main/target/IMPULSERCF3/target.c @@ -0,0 +1,77 @@ +/* + * This file is part of Cleanflight. + * + * Cleanflight is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Cleanflight is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cleanflight. If not, see . + */ + +#include + +#include +#include "drivers/io.h" +#include "drivers/pwm_mapping.h" + + +const uint16_t multiPPM[] = { + PWM1 | (MAP_TO_PPM_INPUT << 8), + PWM2 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM3 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM4 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM5 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), + 0xFFFF +}; + +const uint16_t multiPWM[] = { + PWM2 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM3 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM4 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM5 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), + 0xFFFF +}; + +const uint16_t airPPM[] = { + PWM1 | (MAP_TO_PPM_INPUT << 8), + PWM2 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM3 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM4 | (MAP_TO_SERVO_OUTPUT << 8), + PWM5 | (MAP_TO_SERVO_OUTPUT << 8), + PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), + 0xFFFF +}; + +const uint16_t airPWM[] = { + PWM2 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM3 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM4 | (MAP_TO_SERVO_OUTPUT << 8), + PWM5 | (MAP_TO_SERVO_OUTPUT << 8), + PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), + 0xFFFF +}; + +const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { + { TIM2, IO_TAG(PA15), TIM_Channel_1, TIM2_IRQn, 0, IOCFG_AF_PP, GPIO_AF_1}, // PPM/SERIAL RX + { TIM3, IO_TAG(PB4), TIM_Channel_1, TIM3_IRQn, 0, IOCFG_AF_PP, GPIO_AF_2}, // PWM1 + { TIM3, IO_TAG(PB5), TIM_Channel_2, TIM3_IRQn, 0, IOCFG_AF_PP, GPIO_AF_2}, // PWM2 + { TIM3, IO_TAG(PB1), TIM_Channel_4, TIM3_IRQn, 0, IOCFG_AF_PP, GPIO_AF_2}, // PWM3 + { TIM3, IO_TAG(PB0), TIM_Channel_3, TIM3_IRQn, 0, IOCFG_AF_PP, GPIO_AF_2}, // PWM4 + { TIM16, IO_TAG(PB8), TIM_Channel_1, TIM1_UP_TIM16_IRQn, 1, IOCFG_AF_PP, GPIO_AF_1}, // PWM5 + { TIM17, IO_TAG(PB9), TIM_Channel_1, TIM1_TRG_COM_TIM17_IRQn, 1, IOCFG_AF_PP, GPIO_AF_1}, // PWM6 + { TIM1, IO_TAG(PA8), TIM_Channel_1, TIM1_CC_IRQn, 1, IOCFG_AF_PP, GPIO_AF_6}, // LED_STRIP +}; + diff --git a/src/main/target/IMPULSERCF3/target.h b/src/main/target/IMPULSERCF3/target.h new file mode 100644 index 0000000000..f293c070b3 --- /dev/null +++ b/src/main/target/IMPULSERCF3/target.h @@ -0,0 +1,113 @@ +/* + * This file is part of Cleanflight. + * + * Cleanflight is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Cleanflight is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cleanflight. If not, see . + */ + +#pragma once + +#define TARGET_BOARD_IDENTIFIER "IMF3" + +#define CONFIG_FASTLOOP_PREFERRED_ACC ACC_NONE + +#define LED0 PB7 + +#define BEEPER PC15 + +#define USABLE_TIMER_CHANNEL_COUNT 8 + +#define USB_IO + +#define USE_EXTI +#define MPU_INT_EXTI PC13 +#define EXTI15_10_CALLBACK_HANDLER_COUNT 1 +#define USE_MPU_DATA_READY_SIGNAL +#define ENSURE_MPU_DATA_READY_IS_LOW + +#define GYRO +#define USE_GYRO_SPI_MPU6000 +#define GYRO_MPU6000_ALIGN CW0_DEG + +#define ACC +#define USE_ACC_SPI_MPU6000 +#define ACC_MPU6000_ALIGN CW0_DEG + +#define USE_FLASHFS +#define USE_FLASH_M25P16 + +#define USE_VCP +#define USE_UART1 +#define USE_UART2 +#define USE_UART3 +#define SERIAL_PORT_COUNT 4 + +#define UART1_TX_PIN PA9 +#define UART1_RX_PIN PA10 + +#define UART2_TX_PIN PA14 +#define UART2_RX_PIN PA15 + +#define UART3_TX_PIN PB10 +#define UART3_RX_PIN PB11 + +#define USE_SPI +#define USE_SPI_DEVICE_1 // PA4, 5, 6, 7 +#define USE_SPI_DEVICE_2 // PB12,13,14,15 on AF5 + +#define M25P16_CS_GPIO GPIOB +#define M25P16_CS_PIN PB12 +#define M25P16_SPI_INSTANCE SPI2 + +#define MPU6000_CS_PIN PA4 +#define MPU6000_SPI_INSTANCE SPI1 + +#define BOARD_HAS_VOLTAGE_DIVIDER +#define USE_ADC +#define ADC_INSTANCE ADC1 +#define CURRENT_METER_ADC_PIN PA0 +#define RSSI_ADC_PIN PA1 +#define VBAT_ADC_PIN PA2 + +#define LED_STRIP + +#define USE_LED_STRIP_ON_DMA1_CHANNEL2 +#define WS2811_PIN PA8 +#define WS2811_TIMER TIM1 +#define WS2811_DMA_CHANNEL DMA1_Channel2 +#define WS2811_IRQ DMA1_Channel2_IRQn +#define WS2811_DMA_TC_FLAG DMA1_FLAG_TC2 +#define WS2811_DMA_HANDLER_IDENTIFER DMA1_CH2_HANDLER + +#define ENABLE_BLACKBOX_LOGGING_ON_SPIFLASH_BY_DEFAULT + +#define DEFAULT_FEATURES (FEATURE_VBAT | FEATURE_BLACKBOX) +#define DEFAULT_RX_FEATURE FEATURE_RX_SERIAL +#define SERIALRX_UART SERIAL_PORT_USART3 + +#define SPEKTRUM_BIND +// USART2, PA15 +#define BIND_PIN PA15 + +#define USE_SERIAL_4WAY_BLHELI_INTERFACE + +// IO - stm32f303cc in 48pin package +#define TARGET_IO_PORTA 0xffff +#define TARGET_IO_PORTB 0xffff +#define TARGET_IO_PORTC (BIT(13)|BIT(14)|BIT(15)) +//#define TARGET_IO_PORTF (BIT(0)|BIT(1)) +// !!TODO - check the following line is correct +#define TARGET_IO_PORTF (BIT(0)|BIT(1)|BIT(3)|BIT(4)) + +#define USED_TIMERS (TIM_N(1) | TIM_N(2) | TIM_N(3) | TIM_N(16) |TIM_N(17)) + diff --git a/src/main/target/IMPULSERCF3/target.mk b/src/main/target/IMPULSERCF3/target.mk new file mode 100644 index 0000000000..ec4b5802f2 --- /dev/null +++ b/src/main/target/IMPULSERCF3/target.mk @@ -0,0 +1,10 @@ +F3_TARGETS += $(TARGET) +FEATURES = VCP ONBOARDFLASH + +TARGET_SRC = \ + drivers/accgyro_mpu.c \ + drivers/accgyro_spi_mpu6000.c \ + drivers/flash_m25p16.c \ + drivers/light_ws2811strip.c \ + drivers/light_ws2811strip_stm32f30x.c + diff --git a/src/main/target/OMNIBUSF4/target.c b/src/main/target/OMNIBUSF4/target.c index 7dd021055e..0c3c9ecfcb 100644 --- a/src/main/target/OMNIBUSF4/target.c +++ b/src/main/target/OMNIBUSF4/target.c @@ -29,11 +29,6 @@ const uint16_t multiPPM[] = { PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), PWM11 | (MAP_TO_MOTOR_OUTPUT << 8), PWM12 | (MAP_TO_MOTOR_OUTPUT << 8), - PWM2 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed - PWM3 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed - PWM4 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed - PWM5 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed - PWM1 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed 0xFFFF }; @@ -61,11 +56,6 @@ const uint16_t airPPM[] = { PWM10 | (MAP_TO_SERVO_OUTPUT << 8), PWM11 | (MAP_TO_SERVO_OUTPUT << 8), PWM12 | (MAP_TO_SERVO_OUTPUT << 8), - PWM2 | (MAP_TO_SERVO_OUTPUT << 8), - PWM3 | (MAP_TO_SERVO_OUTPUT << 8), - PWM4 | (MAP_TO_SERVO_OUTPUT << 8), - PWM5 | (MAP_TO_SERVO_OUTPUT << 8), - PWM1 | (MAP_TO_SERVO_OUTPUT << 8), 0xFFFF }; @@ -87,17 +77,17 @@ const uint16_t airPWM[] = { const timerHardware_t timerHardware[USABLE_TIMER_CHANNEL_COUNT] = { - { TIM12, IO_TAG(PB14), TIM_Channel_1, TIM8_BRK_TIM12_IRQn, IOCFG_IPD, GPIO_Mode_AF, GPIO_AF_TIM12 }, // PPM (5th pin on FlexiIO port) - { TIM12, IO_TAG(PB15), TIM_Channel_2, TIM8_BRK_TIM12_IRQn, IOCFG_IPD, GPIO_Mode_AF, GPIO_AF_TIM12 }, // S2_IN - GPIO_PartialRemap_TIM3 - { TIM8, IO_TAG(PC6), TIM_Channel_1, TIM8_CC_IRQn, IOCFG_IPD, GPIO_Mode_AF, GPIO_AF_TIM8 }, // S3_IN - { TIM8, IO_TAG(PC7), TIM_Channel_2, TIM8_CC_IRQn, IOCFG_IPD, GPIO_Mode_AF, GPIO_AF_TIM8 }, // S4_IN - { TIM8, IO_TAG(PC8), TIM_Channel_3, TIM8_CC_IRQn, IOCFG_IPD, GPIO_Mode_AF, GPIO_AF_TIM8 }, // S5_IN - { TIM8, IO_TAG(PC9), TIM_Channel_4, TIM8_CC_IRQn, IOCFG_IPD, GPIO_Mode_AF, GPIO_AF_TIM8 }, // S6_IN + { TIM12, IO_TAG(PB14), TIM_Channel_1, TIM8_BRK_TIM12_IRQn, 0, IOCFG_IPD, GPIO_AF_TIM12 },// PPM (5th pin on FlexiIO port) + { TIM12, IO_TAG(PB15), TIM_Channel_2, TIM8_BRK_TIM12_IRQn, 0, IOCFG_IPD, GPIO_AF_TIM12 },// S2_IN - GPIO_PartialRemap_TIM3 + { TIM8, IO_TAG(PC6), TIM_Channel_1, TIM8_CC_IRQn, 0, IOCFG_IPD, GPIO_AF_TIM8 }, // S3_IN + { TIM8, IO_TAG(PC7), TIM_Channel_2, TIM8_CC_IRQn, 0, IOCFG_IPD, GPIO_AF_TIM8 }, // S4_IN + { TIM8, IO_TAG(PC8), TIM_Channel_3, TIM8_CC_IRQn, 0, IOCFG_IPD, GPIO_AF_TIM8 }, // S5_IN + { TIM8, IO_TAG(PC9), TIM_Channel_4, TIM8_CC_IRQn, 0, IOCFG_IPD, GPIO_AF_TIM8 }, // S6_IN - { TIM3, IO_TAG(PB0), TIM_Channel_3, TIM3_IRQn, IOCFG_AF_PP_PD, GPIO_Mode_AF, GPIO_AF_TIM3 }, // S1_OUT - { TIM3, IO_TAG(PB1), TIM_Channel_4, TIM3_IRQn, IOCFG_AF_PP_PD, GPIO_Mode_AF, GPIO_AF_TIM3 }, // S2_OUT - { TIM9, IO_TAG(PA3), TIM_Channel_2, TIM1_BRK_TIM9_IRQn, IOCFG_AF_PP_PD, GPIO_Mode_AF, GPIO_AF_TIM9 }, // S3_OUT - { TIM2, IO_TAG(PA2), TIM_Channel_3, TIM2_IRQn, IOCFG_AF_PP_PD, GPIO_Mode_AF, GPIO_AF_TIM2 }, // S4_OUT - { TIM5, IO_TAG(PA1), TIM_Channel_2, TIM5_IRQn, IOCFG_AF_PP_PD, GPIO_Mode_AF, GPIO_AF_TIM5 }, // S5_OUT - GPIO_PartialRemap_TIM3 - { TIM5, IO_TAG(PA0), TIM_Channel_1, TIM5_IRQn, IOCFG_AF_PP_PD, GPIO_Mode_AF, GPIO_AF_TIM5 }, // S6_OUT + { TIM3, IO_TAG(PB0), TIM_Channel_3, TIM3_IRQn, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM3 }, // S1_OUT + { TIM3, IO_TAG(PB1), TIM_Channel_4, TIM3_IRQn, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM3 }, // S2_OUT + { TIM9, IO_TAG(PA3), TIM_Channel_2, TIM1_BRK_TIM9_IRQn, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM9 }, // S4_OUT + { TIM2, IO_TAG(PA2), TIM_Channel_3, TIM2_IRQn, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM2 }, // S4_OUT + { TIM5, IO_TAG(PA1), TIM_Channel_2, TIM5_IRQn, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM5 }, // S5_OUT - GPIO_PartialRemap_TIM3 + { TIM5, IO_TAG(PA0), TIM_Channel_1, TIM5_IRQn, 1, IOCFG_AF_PP_PD, GPIO_AF_TIM5 }, // S6_OUT }; diff --git a/src/main/target/OMNIBUSF4/target.h b/src/main/target/OMNIBUSF4/target.h index 4bd45103a3..dd30c52f28 100644 --- a/src/main/target/OMNIBUSF4/target.h +++ b/src/main/target/OMNIBUSF4/target.h @@ -114,7 +114,7 @@ #define USE_ADC #define CURRENT_METER_ADC_PIN PC1 #define VBAT_ADC_PIN PC2 -#define RSSI_ADC_GPIO_PIN PA0 +#define RSSI_ADC_PIN PA0 #define SENSORS_SET (SENSOR_ACC) diff --git a/src/main/target/REVO/target.h b/src/main/target/REVO/target.h index b697c887f3..ca6ea3b4f2 100644 --- a/src/main/target/REVO/target.h +++ b/src/main/target/REVO/target.h @@ -27,8 +27,12 @@ #endif #define LED0 PB5 -#define LED1 PB4 +// Disable LED1, conflicts with AirbotF4/Flip32F4 beeper +//#define LED1 PB4 + #define BEEPER PB4 +#define BEEPER_INVERTED + #define INVERTER PC0 // PC0 used as inverter select GPIO #define INVERTER_USART USART1 @@ -103,12 +107,23 @@ #define USE_ADC #define CURRENT_METER_ADC_PIN PC1 #define VBAT_ADC_PIN PC2 -#define RSSI_ADC_GPIO_PIN PA0 +//#define RSSI_ADC_PIN PA0 +#define LED_STRIP +// LED Strip can run off Pin 6 (PA0) of the MOTOR outputs. +#define WS2811_GPIO_AF GPIO_AF_TIM5 +#define WS2811_PIN PA0 +#define WS2811_TIMER TIM5 +#define WS2811_TIMER_CHANNEL TIM_Channel_2 +#define WS2811_DMA_HANDLER_IDENTIFER DMA1_ST2_HANDLER +#define WS2811_DMA_STREAM DMA1_Stream2 +#define WS2811_DMA_CHANNEL DMA_Channel_6 +#define WS2811_DMA_IRQ DMA1_Stream2_IRQn +#define WS2811_DMA_FLAG DMA_FLAG_TCIF2 +#define WS2811_DMA_IT DMA_IT_TCIF2 #define SENSORS_SET (SENSOR_ACC) - #define DEFAULT_RX_FEATURE FEATURE_RX_SERIAL #define DEFAULT_FEATURES (FEATURE_BLACKBOX) diff --git a/src/main/target/REVO/target.mk b/src/main/target/REVO/target.mk index 7347dd10f2..e3fc89c21c 100644 --- a/src/main/target/REVO/target.mk +++ b/src/main/target/REVO/target.mk @@ -4,5 +4,6 @@ FEATURES += VCP ONBOARDFLASH TARGET_SRC = \ drivers/accgyro_spi_mpu6000.c \ drivers/barometer_ms5611.c \ - drivers/compass_hmc5883l.c - + drivers/compass_hmc5883l.c \ + drivers/light_ws2811strip.c \ + drivers/light_ws2811strip_stm32f4xx.c diff --git a/src/main/target/VRRACE/target.h b/src/main/target/VRRACE/target.h index cda9b14463..fbca59cbea 100644 --- a/src/main/target/VRRACE/target.h +++ b/src/main/target/VRRACE/target.h @@ -153,7 +153,7 @@ #define USE_ADC #define BOARD_HAS_VOLTAGE_DIVIDER #define VBAT_ADC_PIN PC0 -#define RSSI_ADC_GPIO_PIN PB1 +#define RSSI_ADC_PIN PB1 #define CURRENT_METER_ADC_PIN PA5 #define DEFAULT_FEATURES (FEATURE_VBAT | FEATURE_SOFTSERIAL | FEATURE_TELEMETRY) diff --git a/src/main/version.h b/src/main/version.h index 0f770674c1..f566ea80ab 100644 --- a/src/main/version.h +++ b/src/main/version.h @@ -17,7 +17,7 @@ #define FC_VERSION_MAJOR 3 // increment when a major release is made (big new feature, etc) #define FC_VERSION_MINOR 0 // increment when a minor release is made (small new feature, change etc) -#define FC_VERSION_PATCH_LEVEL 0 // increment when a bug is fixed +#define FC_VERSION_PATCH_LEVEL 1 // increment when a bug is fixed #define STR_HELPER(x) #x #define STR(x) STR_HELPER(x)