From 76bdb190d88e7fcc4ae95c2b114f9f75f18ad756 Mon Sep 17 00:00:00 2001 From: James Cotton Date: Sat, 25 Aug 2012 17:27:17 -0500 Subject: [PATCH] Link in the rfm module to the target --- flight/PiOS/Boards/STM32F4xx_RevoMini.h | 24 ++++++++- flight/PiOS/Boards/STM32F4xx_Revolution.h | 1 - flight/RevoMini/Makefile | 20 ++++++-- flight/RevoMini/System/inc/pios_config.h | 5 ++ flight/RevoMini/System/pios_board.c | 2 - flight/RevoMini/UAVObjects.inc | 2 + flight/board_hw_defs/revomini/board_hw_defs.c | 51 ++++++++++++++++++- 7 files changed, 94 insertions(+), 11 deletions(-) diff --git a/flight/PiOS/Boards/STM32F4xx_RevoMini.h b/flight/PiOS/Boards/STM32F4xx_RevoMini.h index 5a49f1fbb..36f5f1d0d 100644 --- a/flight/PiOS/Boards/STM32F4xx_RevoMini.h +++ b/flight/PiOS/Boards/STM32F4xx_RevoMini.h @@ -28,10 +28,12 @@ #ifndef STM3210E_INS_H_ -#define STM3210E_INS_H_ #include +#define DEBUG_LEVEL 0 +#define DEBUG_PRINTF(level, ...) {if(level <= DEBUG_LEVEL && pios_com_aux_id > 0) { PIOS_COM_SendFormattedStringNonBlocking(pios_com_aux_id, __VA_ARGS__); }} + //------------------------ // Timers and Channels Used //------------------------ @@ -133,6 +135,26 @@ extern uint32_t pios_com_vcp_id; #define PIOS_COM_BRIDGE (pios_com_bridge_id) #define PIOS_COM_VCP (pios_com_vcp_id) #define PIOS_COM_DEBUG PIOS_COM_AUX +#if defined(PIOS_INCLUDE_RFM22B) +#define PIOS_COM_RFM22B_RF_RX_BUF_LEN 512 +#define PIOS_COM_RFM22B_RF_TX_BUF_LEN 512 +extern uint32_t pios_com_rfm22b_id; +#define PIOS_COM_RADIO (pios_com_rfm22b_id) +extern uint32_t pios_spi_telem_flash_id; +#define PIOS_RFM22_SPI_PORT (pios_spi_telem_flash_id) +#endif /* PIOS_INCLUDE_RFM22B */ + +//------------------------- +// Packet Handler +//------------------------- +#if defined(PIOS_INCLUDE_PACKET_HANDLER) +extern uint32_t pios_packet_handler; +#define PIOS_PACKET_HANDLER (pios_packet_handler) +#define PIOS_PH_MAX_PACKET 255 +#define PIOS_PH_WIN_SIZE 3 +#define PIOS_PH_MAX_CONNECTIONS 1 +#define RS_ECC_NPARITY 4 +#endif /* PIOS_INCLUDE_PACKET_HANDLER */ //------------------------ // TELEMETRY diff --git a/flight/PiOS/Boards/STM32F4xx_Revolution.h b/flight/PiOS/Boards/STM32F4xx_Revolution.h index 42163b995..585bfd2ad 100644 --- a/flight/PiOS/Boards/STM32F4xx_Revolution.h +++ b/flight/PiOS/Boards/STM32F4xx_Revolution.h @@ -28,7 +28,6 @@ #ifndef STM3210E_INS_H_ -#define STM3210E_INS_H_ #include diff --git a/flight/RevoMini/Makefile b/flight/RevoMini/Makefile index e078fbb0b..06dd2228f 100644 --- a/flight/RevoMini/Makefile +++ b/flight/RevoMini/Makefile @@ -1,10 +1,10 @@ ##### -# Project: OpenPilot INS +# Project: OpenPilot RevoMini # # -# Makefile for OpenPilot INS project +# Makefile for OpenPilot RevoMini project # -# The OpenPilot Team, http://www.openpilot.org, Copyright (C) 2009. +# The OpenPilot Team, http://www.openpilot.org, Copyright (C) 2012. # # # This program is free software; you can redistribute it and/or modify @@ -58,6 +58,7 @@ MODULES += GPS FirmwareIAP #MODULES += Airspeed/revolution #MODULES += AltitudeHold VtolPathFollower FixedWingPathFollower PathPlanner #MODULES += CameraStab +MODULES += Radio MODULES += Telemetry PYMODULES = #FlightPlan @@ -74,6 +75,8 @@ PIOSINC = $(PIOS)/inc OPMODULEDIR = ../Modules FLIGHTLIB = ../Libraries FLIGHTLIBINC = ../Libraries/inc +RSCODE = $(FLIGHTLIB)/rscode +RSCODEINC = $(FLIGHTLIB)/rscode PIOSSTM32F4XX = $(PIOS)/STM32F4xx PIOSCOMMON = $(PIOS)/Common PIOSBOARDS = $(PIOS)/Boards @@ -85,8 +88,6 @@ STMSPDSRCDIR = $(STMSPDDIR)/src STMSPDINCDIR = $(STMSPDDIR)/inc OPUAVOBJ = ../UAVObjects OPUAVOBJINC = $(OPUAVOBJ)/inc -BOOT = ../Bootloaders/INS -BOOTINC = $(BOOT)/inc PYMITE = $(FLIGHTLIB)/PyMite PYMITELIB = $(PYMITE)/lib PYMITEPLAT = $(PYMITE)/platform/openpilot @@ -144,6 +145,13 @@ SRC += $(FLIGHTLIB)/WorldMagModel.c SRC += $(FLIGHTLIB)/insgps13state.c SRC += $(FLIGHTLIB)/taskmonitor.c +## For RFM22b +SRC += $(FLIGHTLIB)/packet_handler.c +SRC += $(RSCODE)/berlekamp.c +SRC += $(RSCODE)/crcgen.c +SRC += $(RSCODE)/galois.c +SRC += $(RSCODE)/rs.c + ## PIOS Hardware (STM32F4xx) include $(PIOS)/STM32F4xx/library.mk @@ -157,6 +165,7 @@ SRC += $(PIOSCOMMON)/pios_hmc5883.c SRC += $(PIOSCOMMON)/pios_ms5611.c SRC += $(PIOSCOMMON)/pios_crc.c SRC += $(PIOSCOMMON)/pios_com.c +SRC += $(PIOSCOMMON)/pios_rfm22b.c SRC += $(PIOSCOMMON)/pios_rcvr.c SRC += $(PIOSCOMMON)/pios_flash_jedec.c SRC += $(PIOSCOMMON)/pios_flashfs_objlist.c @@ -205,6 +214,7 @@ EXTRAINCDIRS += $(OPUAVOBJ) EXTRAINCDIRS += $(OPUAVOBJINC) EXTRAINCDIRS += $(UAVOBJSYNTHDIR) EXTRAINCDIRS += $(FLIGHTLIBINC) +EXTRAINCDIRS += $(RSCODEINC) EXTRAINCDIRS += $(PIOSSTM32F4XX) EXTRAINCDIRS += $(PIOSCOMMON) EXTRAINCDIRS += $(PIOSBOARDS) diff --git a/flight/RevoMini/System/inc/pios_config.h b/flight/RevoMini/System/inc/pios_config.h index 5ebfc06d9..eb282fdd8 100644 --- a/flight/RevoMini/System/inc/pios_config.h +++ b/flight/RevoMini/System/inc/pios_config.h @@ -56,6 +56,11 @@ #define PIOS_INCLUDE_RTC #define PIOS_INCLUDE_WDG +/* Variables related to the RFM22B functionality */ +#define PIOS_INCLUDE_RFM22B +#define PIOS_INCLUDE_PACKET_HANDLER +#define RFM22_EXT_INT_USE + /* Select the sensors to include */ #define PIOS_INCLUDE_HMC5883 #define PIOS_INCLUDE_MPU6000 diff --git a/flight/RevoMini/System/pios_board.c b/flight/RevoMini/System/pios_board.c index 84ff25183..d46f25610 100644 --- a/flight/RevoMini/System/pios_board.c +++ b/flight/RevoMini/System/pios_board.c @@ -292,8 +292,6 @@ static void PIOS_Board_configure_dsm(const struct pios_usart_cfg *pios_usart_dsm void PIOS_Board_Init(void) { - const struct pios_board_info * bdinfo = &pios_board_info_blob; - /* Delay system */ PIOS_DELAY_Init(); diff --git a/flight/RevoMini/UAVObjects.inc b/flight/RevoMini/UAVObjects.inc index 5b99daef4..552449996 100644 --- a/flight/RevoMini/UAVObjects.inc +++ b/flight/RevoMini/UAVObjects.inc @@ -68,6 +68,8 @@ UAVOBJSRCFILENAMES += overosyncstats UAVOBJSRCFILENAMES += overosyncsettings UAVOBJSRCFILENAMES += pathplannersettings UAVOBJSRCFILENAMES += pathdesired +UAVOBJSRCFILENAMES += pipxstatus +UAVOBJSRCFILENAMES += pipxsettings UAVOBJSRCFILENAMES += positionactual UAVOBJSRCFILENAMES += ratedesired UAVOBJSRCFILENAMES += revocalibration diff --git a/flight/board_hw_defs/revomini/board_hw_defs.c b/flight/board_hw_defs/revomini/board_hw_defs.c index 377d12284..d5e3ff58a 100644 --- a/flight/board_hw_defs/revomini/board_hw_defs.c +++ b/flight/board_hw_defs/revomini/board_hw_defs.c @@ -314,6 +314,54 @@ void PIOS_SPI_telem_flash_irq_handler(void) PIOS_SPI_IRQ_Handler(pios_spi_telem_flash_id); } + +#if defined(PIOS_INCLUDE_RFM22B) +#include + +static const struct pios_exti_cfg pios_exti_rfm22b_cfg __exti_config = { + .vector = PIOS_RFM22_EXT_Int, + .line = EXTI_Line0, + .pin = { + .gpio = GPIOD, + .init = { + .GPIO_Pin = GPIO_Pin_0, + .GPIO_Speed = GPIO_Speed_100MHz, + .GPIO_Mode = GPIO_Mode_IN, + .GPIO_OType = GPIO_OType_OD, + .GPIO_PuPd = GPIO_PuPd_NOPULL, + }, + }, + .irq = { + .init = { + .NVIC_IRQChannel = EXTI0_IRQn, + .NVIC_IRQChannelPreemptionPriority = PIOS_IRQ_PRIO_LOW, + .NVIC_IRQChannelSubPriority = 0, + .NVIC_IRQChannelCmd = ENABLE, + }, + }, + .exti = { + .init = { + .EXTI_Line = EXTI_Line0, // matches above GPIO pin + .EXTI_Mode = EXTI_Mode_Interrupt, + .EXTI_Trigger = EXTI_Trigger_Falling, + .EXTI_LineCmd = ENABLE, + }, + }, +}; + +struct pios_rfm22b_cfg pios_rfm22b_cfg = { + .spi_cfg = &pios_spi_telem_flash_cfg, + .exti_cfg = &pios_exti_rfm22b_cfg, + .frequencyHz = 434000000, + .minFrequencyHz = 434000000 - 2000000, + .maxFrequencyHz = 434000000 + 2000000, + .RFXtalCap = 0x7f, + .maxRFBandwidth = 128000, + .maxTxPower = RFM22_tx_pwr_txpow_7, // +20dBm .. 100mW +}; + +#endif /* PIOS_INCLUDE_RFM22B */ + #endif /* PIOS_INCLUDE_SPI */ #include @@ -331,8 +379,7 @@ static const struct pios_usart_cfg pios_usart_main_cfg = { .USART_WordLength = USART_WordLength_8b, .USART_Parity = USART_Parity_No, .USART_StopBits = USART_StopBits_1, - .USART_HardwareFlowControl = - USART_HardwareFlowControl_None, + .USART_HardwareFlowControl = USART_HardwareFlowControl_None, .USART_Mode = USART_Mode_Rx | USART_Mode_Tx, }, .irq = {