From b8fcbad29751c43a5c7541c4b29a475e367cab47 Mon Sep 17 00:00:00 2001 From: Stacey Sheldon Date: Mon, 5 Mar 2012 22:26:50 -0500 Subject: [PATCH] revo bl: remove unneeded code from revo BL Clean up BL source tree and makefile. --- flight/Bootloaders/Revolution/Makefile | 18 +- .../Bootloaders/Revolution/ahrs_slave_test.c | 34 - .../Bootloaders/Revolution/ahrs_spi_program.c | 65 -- .../Revolution/ahrs_spi_program_master.c | 131 ---- .../Revolution/ahrs_spi_program_slave.c | 137 ---- flight/Bootloaders/Revolution/bl_fsm.c | 591 ------------------ flight/Bootloaders/Revolution/inc/ahrs_bl.h | 52 -- .../Revolution/inc/ahrs_spi_program.h | 65 -- .../Revolution/inc/ahrs_spi_program_master.h | 66 -- .../Revolution/inc/ahrs_spi_program_slave.h | 35 -- flight/Bootloaders/Revolution/inc/bl_fsm.h | 97 --- flight/Bootloaders/Revolution/inc/ins_bl.h | 53 -- 12 files changed, 1 insertion(+), 1343 deletions(-) delete mode 100644 flight/Bootloaders/Revolution/ahrs_slave_test.c delete mode 100644 flight/Bootloaders/Revolution/ahrs_spi_program.c delete mode 100644 flight/Bootloaders/Revolution/ahrs_spi_program_master.c delete mode 100644 flight/Bootloaders/Revolution/ahrs_spi_program_slave.c delete mode 100644 flight/Bootloaders/Revolution/bl_fsm.c delete mode 100644 flight/Bootloaders/Revolution/inc/ahrs_bl.h delete mode 100644 flight/Bootloaders/Revolution/inc/ahrs_spi_program.h delete mode 100644 flight/Bootloaders/Revolution/inc/ahrs_spi_program_master.h delete mode 100644 flight/Bootloaders/Revolution/inc/ahrs_spi_program_slave.h delete mode 100644 flight/Bootloaders/Revolution/inc/bl_fsm.h delete mode 100644 flight/Bootloaders/Revolution/inc/ins_bl.h diff --git a/flight/Bootloaders/Revolution/Makefile b/flight/Bootloaders/Revolution/Makefile index 7909755f6..f1fd72830 100644 --- a/flight/Bootloaders/Revolution/Makefile +++ b/flight/Bootloaders/Revolution/Makefile @@ -46,10 +46,8 @@ else REMOVE_CMD = rm endif -FLASH_TOOL = OPENOCD - # Paths -REVO_BL = ./ +REVO_BL = $(WHEREAMI) REVO_BLINC = $(REVO_BL)/inc PIOS = ../../PiOS PIOSINC = $(PIOS)/inc @@ -64,16 +62,8 @@ STMLIBDIR = $(APPLIBDIR) STMSPDDIR = $(STMLIBDIR)/STM32F4xx_StdPeriph_Driver STMSPDSRCDIR = $(STMSPDDIR)/src STMSPDINCDIR = $(STMSPDDIR)/inc -OPDIR = ../OpenPilot -OPUAVOBJ = ../UAVObjects -OPUAVOBJINC = $(OPUAVOBJ)/inc -OPSYSINC = $(OPDIR)/System/inc -BOOT = ../Bootloaders/Revolution -BOOTINC = $(BOOT)/inc HWDEFSINC = ../../board_hw_defs/$(BOARD_NAME) -OPUAVSYNTHDIR = $(OUTDIR)/../uavobject-synthetics/flight - # List C source files here. (C dependencies are automatically generated.) # use file-extension c for "c-only"-files @@ -81,16 +71,11 @@ OPUAVSYNTHDIR = $(OUTDIR)/../uavobject-synthetics/flight SRC += main.c SRC += pios_board.c SRC += pios_usb_board_data.c -SRC += bl_fsm.c ## PIOS Hardware (STM32F4xx) include $(PIOS)/STM32F4xx/library.mk -## Library files -SRC += $(FLIGHTLIB)/fifo_buffer.c - # PIOS Hardware (Common) -#SRC += $(PIOSCOMMON)/pios_com.c SRC += $(PIOSCOMMON)/pios_board_info.c SRC += $(PIOSCOMMON)/pios_com_msg.c SRC += $(PIOSCOMMON)/printf-stdarg.c @@ -121,7 +106,6 @@ EXTRAINCDIRS += $(PIOSBOARDS) EXTRAINCDIRS += $(STMSPDINCDIR) EXTRAINCDIRS += $(CMSISDIR) EXTRAINCDIRS += $(REVO_BLINC) -EXTRAINCDIRS += $(BOOTINC) EXTRAINCDIRS += $(HWDEFSINC) # List any extra directories to look for library files here. diff --git a/flight/Bootloaders/Revolution/ahrs_slave_test.c b/flight/Bootloaders/Revolution/ahrs_slave_test.c deleted file mode 100644 index 4ef55b975..000000000 --- a/flight/Bootloaders/Revolution/ahrs_slave_test.c +++ /dev/null @@ -1,34 +0,0 @@ -#include "ahrs_bl.h" -#include "ahrs_spi_program.h" - -uint8_t buf[256]; - -bool StartProgramming(void) { - PIOS_COM_SendFormattedString(PIOS_COM_AUX, "Started programming\r\n"); - return (true); -} - -bool WriteData(uint32_t offset, uint8_t *buffer, uint32_t size) { - if (size > SPI_MAX_PROGRAM_DATA_SIZE) { - PIOS_COM_SendFormattedString(PIOS_COM_AUX, "oversize: %d\r\n", size); - return (false); - } - PIOS_COM_SendFormattedString(PIOS_COM_AUX, "Wrote %d bytes to %d\r\n", - size, offset); - memcpy(buf, buffer, size); - PIOS_LED_Toggle(LED1); - return (true); -} - -bool ReadData(uint32_t offset, uint8_t *buffer, uint32_t size) { - if (size > SPI_MAX_PROGRAM_DATA_SIZE) { - PIOS_COM_SendFormattedString(PIOS_COM_AUX, "oversize: %d\r\n", size); - return (false); - } - PIOS_COM_SendFormattedString(PIOS_COM_AUX, "Read %d bytes from %d\r\n", - size, offset); - memcpy(buffer, buf, size); - PIOS_LED_Toggle(LED1); - return (true); -} - diff --git a/flight/Bootloaders/Revolution/ahrs_spi_program.c b/flight/Bootloaders/Revolution/ahrs_spi_program.c deleted file mode 100644 index c29e9c609..000000000 --- a/flight/Bootloaders/Revolution/ahrs_spi_program.c +++ /dev/null @@ -1,65 +0,0 @@ -#include -#include "ahrs_spi_program.h" - -// Static CRC polynomial table -static uint32_t crcTable[256] = { 0x00000000, 0x77073096, 0xEE0E612C, - 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, - 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, - 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, - 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, - 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, - 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, - 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, - 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, - 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, - 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, - 0xB6662D3D, - - 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, - 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, - 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, - 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, - 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, - 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, - 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, - 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, - 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, - 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, - 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, - - 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, - 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, - 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, - 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, - 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, - 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, - 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, - 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, - 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, - 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, - 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, - - 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, - 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, - 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, - 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, - 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, - 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, - 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, - 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, - 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, - 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D, }; - -/**generate CRC32 from a program packet - this is slightly overkill but we want to be sure - */ -uint32_t GenerateCRC(AhrsProgramPacket * packet) { - uint8_t * ptr = (uint8_t *) packet; - int size = ((int) &packet->crc) - (int) packet; - uint32_t crc = 0xFFFFFFFF; - for (int ct = 0; ct < size; ct++) { - crc = ((crc) >> 8) ^ crcTable[(*ptr++) ^ ((crc) & 0x000000FF)]; - } - return (~crc); -} diff --git a/flight/Bootloaders/Revolution/ahrs_spi_program_master.c b/flight/Bootloaders/Revolution/ahrs_spi_program_master.c deleted file mode 100644 index 8227771c0..000000000 --- a/flight/Bootloaders/Revolution/ahrs_spi_program_master.c +++ /dev/null @@ -1,131 +0,0 @@ -/** - ****************************************************************************** - * - * @file ahrs_spi_program_master.c - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief AHRS programming over SPI link - master(OpenPilot) end. - * - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program 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. - * - * This program 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 this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "openpilot.h" -#include "ahrs_spi_program_master.h" -#include "ahrs_spi_program.h" -#include "pios_spi.h" - -PROGERR TransferPacket(uint32_t spi_id, AhrsProgramPacket *txBuf, - AhrsProgramPacket *rxBuf); - -#define MAX_CONNECT_TRIES 500 //half a second -bool AhrsProgramConnect(uint32_t spi_id) { - AhrsProgramPacket rxBuf; - AhrsProgramPacket txBuf; - memset(&rxBuf, 0, sizeof(AhrsProgramPacket)); - memcpy(&txBuf, SPI_PROGRAM_REQUEST, SPI_PROGRAM_REQUEST_LENGTH); - for (int ct = 0; ct < MAX_CONNECT_TRIES; ct++) { - PIOS_SPI_RC_PinSet(spi_id, 0); - uint32_t res = PIOS_SPI_TransferBlock(spi_id, (uint8_t *) &txBuf, - (uint8_t *) &rxBuf, SPI_PROGRAM_REQUEST_LENGTH + 1, NULL); - PIOS_SPI_RC_PinSet(spi_id, 1); - if (res == 0 && memcmp(&rxBuf, SPI_PROGRAM_ACK, - SPI_PROGRAM_REQUEST_LENGTH) == 0) { - return (true); - } - - vTaskDelay(1 / portTICK_RATE_MS); - } - return (false); -} - -PROGERR AhrsProgramWrite(uint32_t spi_id, uint32_t address, void * data, - uint32_t size) { - AhrsProgramPacket rxBuf; - AhrsProgramPacket txBuf; - memset(&rxBuf, 0, sizeof(AhrsProgramPacket)); - memcpy(txBuf.data, data, size); - txBuf.size = size; - txBuf.type = PROGRAM_WRITE; - txBuf.address = address; - PROGERR ret = TransferPacket(spi_id, &txBuf, &rxBuf); - if (ret != PROGRAM_ERR_OK) { - return (ret); - } - return (PROGRAM_ERR_OK); -} - -PROGERR AhrsProgramRead(uint32_t spi_id, uint32_t address, void * data, - uint32_t size) { - AhrsProgramPacket rxBuf; - AhrsProgramPacket txBuf; - memset(&rxBuf, 0, sizeof(AhrsProgramPacket)); - txBuf.size = size; - txBuf.type = PROGRAM_READ; - txBuf.address = address; - PROGERR ret = TransferPacket(spi_id, &txBuf, &rxBuf); - if (ret != PROGRAM_ERR_OK) { - return (ret); - } - memcpy(data, rxBuf.data, size); - return (PROGRAM_ERR_OK); -} - -PROGERR AhrsProgramReboot(uint32_t spi_id) { - AhrsProgramPacket rxBuf; - AhrsProgramPacket txBuf; - memset(&rxBuf, 0, sizeof(AhrsProgramPacket)); - txBuf.type = PROGRAM_REBOOT; - memcpy(txBuf.data, REBOOT_CONFIRMATION, REBOOT_CONFIRMATION_LENGTH); - PROGERR ret = TransferPacket(spi_id, &txBuf, &rxBuf); - //If AHRS has rebooted we will get comms errors - if (ret == PROGRAM_ERR_LINK) { - return (PROGRAM_ERR_OK); - } - return (PROGRAM_ERR_FUNCTION); -} - -PROGERR TransferPacket(uint32_t spi_id, AhrsProgramPacket *txBuf, - AhrsProgramPacket *rxBuf) { - static uint32_t pktId = 0; - pktId++; - txBuf->packetId = pktId; - txBuf->crc = GenerateCRC(txBuf); - int ct = 0; - for (; ct < MAX_CONNECT_TRIES; ct++) { - PIOS_SPI_RC_PinSet(spi_id, 0); - uint32_t res = PIOS_SPI_TransferBlock(spi_id, (uint8_t *) txBuf, - (uint8_t *) rxBuf, sizeof(AhrsProgramPacket), NULL); - PIOS_SPI_RC_PinSet(spi_id, 1); - if (res == 0) { - if (rxBuf->type != PROGRAM_NULL && rxBuf->crc == GenerateCRC(rxBuf) - && rxBuf->packetId == pktId) { - break; - } - } - - vTaskDelay(1 / portTICK_RATE_MS); - } - if (ct == MAX_CONNECT_TRIES) { - return (PROGRAM_ERR_LINK); - } - if (rxBuf->type != PROGRAM_ACK) { - return (PROGRAM_ERR_FUNCTION); - } - return (PROGRAM_ERR_OK); -} - diff --git a/flight/Bootloaders/Revolution/ahrs_spi_program_slave.c b/flight/Bootloaders/Revolution/ahrs_spi_program_slave.c deleted file mode 100644 index 6d5a1a4a2..000000000 --- a/flight/Bootloaders/Revolution/ahrs_spi_program_slave.c +++ /dev/null @@ -1,137 +0,0 @@ -/** - ****************************************************************************** - * - * @file ahrs_spi_program_slave.c - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief AHRS programming over SPI link - slave(AHRS) end. - * - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program 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. - * - * This program 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 this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include - -#include "pios_opahrs_proto.h" -#include "pios_spi.h" -#include "pios_board.h" - -#include "ahrs_bl.h" -#include "ahrs_spi_program_slave.h" -#include "ahrs_spi_program.h" - -static AhrsProgramPacket txBuf; -static AhrsProgramPacket rxBuf; -static bool done = false; - -static void ProcessPacket(); - -#define WAIT_IF_RECEIVING() while(!(GPIOB->IDR & GPIO_Pin_12)){}; //NSS must be high -//Number of crc failures to allow before giving up -#define PROGRAM_PACKET_TRIES 4 - -void AhrsProgramReceive(uint32_t spi_id) { - done = false; - memset(&txBuf, 0, sizeof(AhrsProgramPacket)); - //wait for a program request - int count = PROGRAM_PACKET_TRIES; - while (1) { - WAIT_IF_RECEIVING(); - while ((PIOS_SPI_Busy(spi_id) != 0)) { - }; - memset(&rxBuf, 'a', sizeof(AhrsProgramPacket)); - int32_t res = PIOS_SPI_TransferBlock(spi_id, NULL, (uint8_t*) &rxBuf, - SPI_PROGRAM_REQUEST_LENGTH + 1, NULL); - - if (res == 0 && memcmp(&rxBuf, SPI_PROGRAM_REQUEST, - SPI_PROGRAM_REQUEST_LENGTH) == 0) { - break; - } - if (count-- == 0) { - return; - } - } - - if (!StartProgramming()) { - //Couldn't erase FLASH. Nothing we can do. - return; - } - - //send ack - memcpy(&txBuf, SPI_PROGRAM_ACK, SPI_PROGRAM_REQUEST_LENGTH); - WAIT_IF_RECEIVING(); - while (0 != PIOS_SPI_TransferBlock(spi_id, (uint8_t*) &txBuf, NULL, - SPI_PROGRAM_REQUEST_LENGTH + 1, NULL)) { - }; - - txBuf.type = PROGRAM_NULL; - - while (!done) { - WAIT_IF_RECEIVING(); - if (0 == PIOS_SPI_TransferBlock(spi_id, (uint8_t*) &txBuf, - (uint8_t*) &rxBuf, sizeof(AhrsProgramPacket), NULL)) { - - uint32_t crc = GenerateCRC(&rxBuf); - if (crc != rxBuf.crc || txBuf.packetId == rxBuf.packetId) { - continue; - } - ProcessPacket(); - txBuf.packetId = rxBuf.packetId; - txBuf.crc = GenerateCRC(&txBuf); - } - } -} - -void ProcessPacket() { - switch (rxBuf.type) { - case PROGRAM_NULL: - txBuf.type = PROGRAM_NULL; - break; - - case PROGRAM_WRITE: - if (WriteData(rxBuf.address, rxBuf.data, rxBuf.size)) { - txBuf.type = PROGRAM_ACK; - txBuf.size = rxBuf.size; - } else { - txBuf.type = PROGRAM_ERR; - } - break; - - case PROGRAM_READ: - if (ReadData(rxBuf.address, txBuf.data, rxBuf.size)) { - txBuf.type = PROGRAM_ACK; - txBuf.size = rxBuf.size; - } else { - txBuf.type = PROGRAM_ERR; - } - break; - - case PROGRAM_REBOOT: - if (0 == memcmp(rxBuf.data, REBOOT_CONFIRMATION, - REBOOT_CONFIRMATION_LENGTH)) { - done = true; - txBuf.type = PROGRAM_ACK; - } else { - txBuf.type = PROGRAM_ERR; - } - break; - - default: - txBuf.type = PROGRAM_ERR; - } -} diff --git a/flight/Bootloaders/Revolution/bl_fsm.c b/flight/Bootloaders/Revolution/bl_fsm.c deleted file mode 100644 index 10e26a46e..000000000 --- a/flight/Bootloaders/Revolution/bl_fsm.c +++ /dev/null @@ -1,591 +0,0 @@ -#include /* uint*_t */ -#include /* NULL */ - -#include "bl_fsm.h" - -#include "pios_opahrs_proto.h" - -#include "pios.h" - -struct lfsm_context { - enum lfsm_state curr_state; - enum opahrs_msg_link_state link_state; - enum opahrs_msg_type user_payload_type; - uint32_t user_payload_len; - - uint32_t errors; - - uint8_t * rx; - uint8_t * tx; - - uint8_t * link_rx; - uint8_t * link_tx; - - uint8_t * user_rx; - uint8_t * user_tx; - - struct lfsm_link_stats stats; -}; - -static struct lfsm_context context = { 0 }; - -static void lfsm_update_link_tx(struct lfsm_context * context); -static void lfsm_init_rx(struct lfsm_context * context); - -static uint32_t PIOS_SPI_OP; -void lfsm_attach(uint32_t spi_id) { - PIOS_SPI_OP = spi_id; -} - -/* - * - * Link Finite State Machine - * - */ - -struct lfsm_transition { - void (*entry_fn)(struct lfsm_context * context); - enum lfsm_state next_state[LFSM_EVENT_NUM_EVENTS]; -}; - -static void go_faulted(struct lfsm_context * context); -static void go_stopped(struct lfsm_context * context); -static void go_stopping(struct lfsm_context * context); -static void go_inactive(struct lfsm_context * context); -static void go_user_busy(struct lfsm_context * context); -static void go_user_busy_rx_pending(struct lfsm_context * context); -static void go_user_busy_tx_pending(struct lfsm_context * context); -static void go_user_busy_rxtx_pending(struct lfsm_context * context); -static void go_user_rx_pending(struct lfsm_context * context); -static void go_user_tx_pending(struct lfsm_context * context); -static void go_user_rxtx_pending(struct lfsm_context * context); -static void go_user_rx_active(struct lfsm_context * context); -static void go_user_tx_active(struct lfsm_context * context); -static void go_user_rxtx_active(struct lfsm_context * context); - -const static struct lfsm_transition lfsm_transitions[LFSM_STATE_NUM_STATES] = { - [LFSM_STATE_FAULTED] = { - .entry_fn = go_faulted, - }, [LFSM_STATE_STOPPED] = { - .entry_fn = go_stopped, - .next_state = { - [LFSM_EVENT_INIT_LINK] = LFSM_STATE_INACTIVE, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_STOPPED, - }, - }, [LFSM_STATE_STOPPING] = { - .entry_fn = go_stopping, - .next_state = { - [LFSM_EVENT_RX_LINK] = LFSM_STATE_STOPPED, - [LFSM_EVENT_RX_USER] = LFSM_STATE_STOPPED, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_STOPPED, - }, - }, [LFSM_STATE_INACTIVE] = { - .entry_fn = go_inactive, - .next_state = { - [LFSM_EVENT_STOP] = LFSM_STATE_STOPPING, - [LFSM_EVENT_USER_SET_RX] = LFSM_STATE_USER_BUSY_RX_PENDING, - [LFSM_EVENT_USER_SET_TX] = LFSM_STATE_USER_BUSY_TX_PENDING, - [LFSM_EVENT_RX_LINK] = LFSM_STATE_INACTIVE, - [LFSM_EVENT_RX_USER] = LFSM_STATE_INACTIVE, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_INACTIVE, - }, - }, [LFSM_STATE_USER_BUSY] = { - .entry_fn = go_user_busy, - .next_state = { - [LFSM_EVENT_STOP] = LFSM_STATE_STOPPING, - [LFSM_EVENT_USER_SET_RX] = LFSM_STATE_USER_BUSY_RX_PENDING, - [LFSM_EVENT_USER_SET_TX] = LFSM_STATE_USER_BUSY_TX_PENDING, - [LFSM_EVENT_USER_DONE] = LFSM_STATE_INACTIVE, - [LFSM_EVENT_RX_LINK] = LFSM_STATE_USER_BUSY, - [LFSM_EVENT_RX_USER] = LFSM_STATE_USER_BUSY, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_USER_BUSY, - }, - }, [LFSM_STATE_USER_BUSY_RX_PENDING] = { - .entry_fn = go_user_busy_rx_pending, - .next_state = { - [LFSM_EVENT_USER_SET_TX] = LFSM_STATE_USER_BUSY_RXTX_PENDING, - [LFSM_EVENT_USER_DONE] = LFSM_STATE_USER_RX_PENDING, - [LFSM_EVENT_RX_LINK] = LFSM_STATE_USER_BUSY_RX_PENDING, - [LFSM_EVENT_RX_USER] = LFSM_STATE_USER_BUSY_RX_PENDING, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_USER_BUSY_RX_PENDING, - }, - }, [LFSM_STATE_USER_BUSY_TX_PENDING] = { - .entry_fn = go_user_busy_tx_pending, - .next_state = { - [LFSM_EVENT_USER_SET_RX] = LFSM_STATE_USER_BUSY_RXTX_PENDING, - [LFSM_EVENT_USER_DONE] = LFSM_STATE_USER_TX_PENDING, - [LFSM_EVENT_RX_LINK] = LFSM_STATE_USER_BUSY_TX_PENDING, - [LFSM_EVENT_RX_USER] = LFSM_STATE_USER_BUSY_TX_PENDING, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_USER_BUSY_TX_PENDING, - }, - }, [LFSM_STATE_USER_BUSY_RXTX_PENDING] = { - .entry_fn = go_user_busy_rxtx_pending, - .next_state = { - [LFSM_EVENT_USER_DONE] = LFSM_STATE_USER_RXTX_PENDING, - [LFSM_EVENT_RX_LINK] = LFSM_STATE_USER_BUSY_RXTX_PENDING, - [LFSM_EVENT_RX_USER] = LFSM_STATE_USER_BUSY_RXTX_PENDING, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_USER_BUSY_RXTX_PENDING, - }, - }, [LFSM_STATE_USER_RX_PENDING] = { - .entry_fn = go_user_rx_pending, - .next_state = { - [LFSM_EVENT_RX_LINK] = LFSM_STATE_USER_RX_ACTIVE, - [LFSM_EVENT_RX_USER] = LFSM_STATE_USER_RX_ACTIVE, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_USER_RX_ACTIVE, - }, - }, [LFSM_STATE_USER_TX_PENDING] = { - .entry_fn = go_user_tx_pending, - .next_state = { - [LFSM_EVENT_RX_LINK] = LFSM_STATE_USER_TX_ACTIVE, - [LFSM_EVENT_RX_USER] = LFSM_STATE_USER_TX_ACTIVE, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_USER_TX_ACTIVE, - }, - }, [LFSM_STATE_USER_RXTX_PENDING] = { - .entry_fn = go_user_rxtx_pending, - .next_state = { - [LFSM_EVENT_RX_LINK] = LFSM_STATE_USER_RXTX_ACTIVE, - [LFSM_EVENT_RX_USER] = LFSM_STATE_USER_RXTX_ACTIVE, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_USER_RXTX_ACTIVE, - }, - }, [LFSM_STATE_USER_RX_ACTIVE] = { - .entry_fn = go_user_rx_active, - .next_state = { - [LFSM_EVENT_RX_LINK] = LFSM_STATE_USER_RX_ACTIVE, - [LFSM_EVENT_RX_USER] = LFSM_STATE_USER_BUSY, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_USER_RX_ACTIVE, - }, - }, [LFSM_STATE_USER_TX_ACTIVE] = { - .entry_fn = go_user_tx_active, - .next_state = { - [LFSM_EVENT_RX_LINK] = LFSM_STATE_INACTIVE, - [LFSM_EVENT_RX_USER] = LFSM_STATE_INACTIVE, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_INACTIVE, - }, - }, [LFSM_STATE_USER_RXTX_ACTIVE] = { - .entry_fn = go_user_rxtx_active, - .next_state = { - [LFSM_EVENT_RX_LINK] = LFSM_STATE_USER_RX_ACTIVE, - [LFSM_EVENT_RX_USER] = LFSM_STATE_USER_BUSY, - [LFSM_EVENT_RX_UNKNOWN] = LFSM_STATE_USER_RX_ACTIVE, - }, - }, }; - -/* - * FSM State Entry Functions - */ - -static void go_faulted(struct lfsm_context * context) { - PIOS_DEBUG_Assert(0); -} - -static void go_stopped(struct lfsm_context * context) { -#if 0 - PIOS_SPI_Stop(PIOS_SPI_OP); -#endif -} - -static void go_stopping(struct lfsm_context * context) { - context->link_tx = NULL; - context->tx = NULL; -} - -static void go_inactive(struct lfsm_context * context) { - context->link_state = OPAHRS_MSG_LINK_STATE_INACTIVE; - lfsm_update_link_tx(context); - - context->user_rx = NULL; - context->user_tx = NULL; - - context->rx = context->link_rx; - context->tx = context->link_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_busy(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_rx); - - context->user_rx = NULL; - context->user_tx = NULL; - - context->link_state = OPAHRS_MSG_LINK_STATE_BUSY; - lfsm_update_link_tx(context); - - context->rx = context->link_rx; - context->tx = context->link_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_busy_rx_pending(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_rx); - - context->link_state = OPAHRS_MSG_LINK_STATE_BUSY; - lfsm_update_link_tx(context); - - context->rx = context->link_rx; - context->tx = context->link_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_busy_tx_pending(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_tx); - - context->link_state = OPAHRS_MSG_LINK_STATE_BUSY; - lfsm_update_link_tx(context); - - context->rx = context->link_rx; - context->tx = context->link_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_busy_rxtx_pending(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_rx); PIOS_DEBUG_Assert(context->user_tx); - - context->link_state = OPAHRS_MSG_LINK_STATE_BUSY; - lfsm_update_link_tx(context); - - context->rx = context->link_rx; - context->tx = context->link_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_rx_pending(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_rx); - - context->link_state = OPAHRS_MSG_LINK_STATE_BUSY; - lfsm_update_link_tx(context); - - context->rx = context->link_rx; - context->tx = context->link_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_tx_pending(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_tx); - - context->link_state = OPAHRS_MSG_LINK_STATE_BUSY; - lfsm_update_link_tx(context); - - context->rx = context->link_rx; - context->tx = context->link_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_rxtx_pending(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_rx); PIOS_DEBUG_Assert(context->user_tx); - - context->link_state = OPAHRS_MSG_LINK_STATE_BUSY; - lfsm_update_link_tx(context); - - context->rx = context->link_rx; - context->tx = context->link_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_rx_active(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_rx); - - context->rx = context->user_rx; - context->tx = context->link_tx; - context->link_state = OPAHRS_MSG_LINK_STATE_READY; - - lfsm_update_link_tx(context); - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_tx_active(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_tx); - - context->link_state = OPAHRS_MSG_LINK_STATE_BUSY; - context->rx = context->link_rx; - context->tx = context->user_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -static void go_user_rxtx_active(struct lfsm_context * context) { - /* Sanity checks */ - PIOS_DEBUG_Assert(context->user_rx); PIOS_DEBUG_Assert(context->user_tx); - - context->link_state = OPAHRS_MSG_LINK_STATE_READY; - context->rx = context->user_rx; - context->tx = context->user_tx; - - lfsm_init_rx(context); - PIOS_SPI_TransferBlock(PIOS_SPI_OP, context->tx, context->rx, - context->user_payload_len, lfsm_irq_callback); -} - -/* - * - * Misc Helper Functions - * - */ - -static void lfsm_update_link_tx_v0(struct opahrs_msg_v0 * msg, - enum opahrs_msg_link_state state, uint16_t errors) { - opahrs_msg_v0_init_link_tx(msg, OPAHRS_MSG_LINK_TAG_NOP); - - msg->payload.link.state = state; - msg->payload.link.errors = errors; -} - -static void lfsm_update_link_tx_v1(struct opahrs_msg_v1 * msg, - enum opahrs_msg_link_state state, uint16_t errors) { - opahrs_msg_v1_init_link_tx(msg, OPAHRS_MSG_LINK_TAG_NOP); - - msg->payload.link.state = state; - msg->payload.link.errors = errors; -} - -static void lfsm_update_link_tx(struct lfsm_context * context) { - PIOS_DEBUG_Assert(context->link_tx); - - switch (context->user_payload_type) { - case OPAHRS_MSG_TYPE_USER_V0: - lfsm_update_link_tx_v0((struct opahrs_msg_v0 *) context->link_tx, - context->link_state, context->errors); - break; - case OPAHRS_MSG_TYPE_USER_V1: - lfsm_update_link_tx_v1((struct opahrs_msg_v1 *) context->link_tx, - context->link_state, context->errors); - break; - case OPAHRS_MSG_TYPE_LINK: - PIOS_DEBUG_Assert(0); - } -} - -static void lfsm_init_rx(struct lfsm_context * context) { - PIOS_DEBUG_Assert(context->rx); - - switch (context->user_payload_type) { - case OPAHRS_MSG_TYPE_USER_V0: - opahrs_msg_v0_init_rx((struct opahrs_msg_v0 *) context->rx); - break; - case OPAHRS_MSG_TYPE_USER_V1: - opahrs_msg_v1_init_rx((struct opahrs_msg_v1 *) context->rx); - break; - case OPAHRS_MSG_TYPE_LINK: - PIOS_DEBUG_Assert(0); - } -} - -/* - * - * External API - * - */ - -void lfsm_inject_event(enum lfsm_event event) { - PIOS_IRQ_Disable(); - - /* - * Move to the next state - * - * This is done prior to calling the new state's entry function to - * guarantee that the entry function never depends on the previous - * state. This way, it cannot ever know what the previous state was. - */ - context.curr_state = lfsm_transitions[context.curr_state].next_state[event]; - - /* Call the entry function (if any) for the next state. */ - if (lfsm_transitions[context.curr_state].entry_fn) { - lfsm_transitions[context.curr_state].entry_fn(&context); - } - PIOS_IRQ_Enable(); -} - -void lfsm_init(void) { - context.curr_state = LFSM_STATE_STOPPED; - go_stopped(&context); -} - -void lfsm_set_link_proto_v0(struct opahrs_msg_v0 * link_tx, - struct opahrs_msg_v0 * link_rx) { - PIOS_DEBUG_Assert(link_tx); - - context.link_tx = (uint8_t *) link_tx; - context.link_rx = (uint8_t *) link_rx; - context.user_payload_type = OPAHRS_MSG_TYPE_USER_V0; - context.user_payload_len = sizeof(*link_tx); - - lfsm_update_link_tx_v0(link_tx, context.link_state, context.errors); - - lfsm_inject_event(LFSM_EVENT_INIT_LINK); -} - -void lfsm_set_link_proto_v1(struct opahrs_msg_v1 * link_tx, - struct opahrs_msg_v1 * link_rx) { - PIOS_DEBUG_Assert(link_tx); - - context.link_tx = (uint8_t *) link_tx; - context.link_rx = (uint8_t *) link_rx; - context.user_payload_type = OPAHRS_MSG_TYPE_USER_V1; - context.user_payload_len = sizeof(*link_tx); - - lfsm_update_link_tx_v1(link_tx, context.link_state, context.errors); - - lfsm_inject_event(LFSM_EVENT_INIT_LINK); -} - -void lfsm_user_set_tx_v0(struct opahrs_msg_v0 * user_tx) { - PIOS_DEBUG_Assert(user_tx); - - PIOS_DEBUG_Assert(context.user_payload_type == OPAHRS_MSG_TYPE_USER_V0); - context.user_tx = (uint8_t *) user_tx; - - lfsm_inject_event(LFSM_EVENT_USER_SET_TX); -} - -void lfsm_user_set_rx_v0(struct opahrs_msg_v0 * user_rx) { - PIOS_DEBUG_Assert(user_rx); PIOS_DEBUG_Assert(context.user_payload_type == OPAHRS_MSG_TYPE_USER_V0); - - context.user_rx = (uint8_t *) user_rx; - - lfsm_inject_event(LFSM_EVENT_USER_SET_RX); -} - -void lfsm_user_set_tx_v1(struct opahrs_msg_v1 * user_tx) { - PIOS_DEBUG_Assert(user_tx); PIOS_DEBUG_Assert(context.user_payload_type == OPAHRS_MSG_TYPE_USER_V1); - - context.user_tx = (uint8_t *) user_tx; - - lfsm_inject_event(LFSM_EVENT_USER_SET_TX); -} - -void lfsm_user_set_rx_v1(struct opahrs_msg_v1 * user_rx) { - PIOS_DEBUG_Assert(user_rx); PIOS_DEBUG_Assert(context.user_payload_type == OPAHRS_MSG_TYPE_USER_V1); - - context.user_rx = (uint8_t *) user_rx; - - lfsm_inject_event(LFSM_EVENT_USER_SET_RX); -} - -void lfsm_user_done(void) { - lfsm_inject_event(LFSM_EVENT_USER_DONE); -} - -void lfsm_stop(void) { - lfsm_inject_event(LFSM_EVENT_STOP); -} - -void lfsm_get_link_stats(struct lfsm_link_stats * stats) { - PIOS_DEBUG_Assert(stats); - - *stats = context.stats; -} - -enum lfsm_state lfsm_get_state(void) { - return context.curr_state; -} - -/* - * - * ISR Callback - * - */ - -void lfsm_irq_callback(uint8_t crc_ok, uint8_t crc_val) { - if (!crc_ok) { - context.stats.rx_badcrc++; - lfsm_inject_event(LFSM_EVENT_RX_UNKNOWN); - return; - } - - if (!context.rx) { - /* No way to know what we just received, assume invalid */ - lfsm_inject_event(LFSM_EVENT_RX_UNKNOWN); - return; - } - - /* Recover the head and tail pointers from the message */ - struct opahrs_msg_link_head * head = 0; - struct opahrs_msg_link_tail * tail = 0; - - switch (context.user_payload_type) { - case OPAHRS_MSG_TYPE_USER_V0: - head = &((struct opahrs_msg_v0 *) context.rx)->head; - tail = &((struct opahrs_msg_v0 *) context.rx)->tail; - break; - case OPAHRS_MSG_TYPE_USER_V1: - head = &((struct opahrs_msg_v1 *) context.rx)->head; - tail = &((struct opahrs_msg_v1 *) context.rx)->tail; - break; - case OPAHRS_MSG_TYPE_LINK: - /* Should never be rx'ing before the link protocol version is known */ - PIOS_DEBUG_Assert(0); - break; - } - - /* Check for bad magic */ - if ((head->magic != OPAHRS_MSG_MAGIC_HEAD) || (tail->magic - != OPAHRS_MSG_MAGIC_TAIL)) { - if (head->magic != OPAHRS_MSG_MAGIC_HEAD) { - context.stats.rx_badmagic_head++; - } - if (tail->magic != OPAHRS_MSG_MAGIC_TAIL) { - context.stats.rx_badmagic_tail++; - } - lfsm_inject_event(LFSM_EVENT_RX_UNKNOWN); - return; - } - - /* Good magic, find out what type of payload we've got */ - switch (head->type) { - case OPAHRS_MSG_TYPE_LINK: - context.stats.rx_link++; - lfsm_inject_event(LFSM_EVENT_RX_LINK); - break; - case OPAHRS_MSG_TYPE_USER_V0: - case OPAHRS_MSG_TYPE_USER_V1: - if (head->type == context.user_payload_type) { - context.stats.rx_user++; - lfsm_inject_event(LFSM_EVENT_RX_USER); - } else { - /* Mismatched user payload type */ - context.stats.rx_badver++; - lfsm_inject_event(LFSM_EVENT_RX_UNKNOWN); - } - break; - default: - /* Unidentifiable payload type */ - context.stats.rx_badtype++; - lfsm_inject_event(LFSM_EVENT_RX_UNKNOWN); - } -} diff --git a/flight/Bootloaders/Revolution/inc/ahrs_bl.h b/flight/Bootloaders/Revolution/inc/ahrs_bl.h deleted file mode 100644 index 2d96385ab..000000000 --- a/flight/Bootloaders/Revolution/inc/ahrs_bl.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - ****************************************************************************** - * - * @file ahrs_bl.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief Main AHRS_BL header. - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program 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. - * - * This program 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 this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef AHRS_BL_H -#define AHRS_BL_H - -/* PIOS Includes */ -#include - -/** Start programming - returns: true if FLASH erased and ready to program - */ -bool -StartProgramming(void); - -/** Write a block to FLASH - buffer contains the data to be written - returns: true if FLASH programmed correctly - */ -bool -WriteData(uint32_t offset, uint8_t *buffer, uint32_t size); - -/** Read a block from FLASH - returns: true if FLASH read correctly. - Buffer is set to the read data - */ -bool -ReadData(uint32_t offset, uint8_t *buffer, uint32_t size); - -#endif /* AHRS_BL_H */ diff --git a/flight/Bootloaders/Revolution/inc/ahrs_spi_program.h b/flight/Bootloaders/Revolution/inc/ahrs_spi_program.h deleted file mode 100644 index 024d1b061..000000000 --- a/flight/Bootloaders/Revolution/inc/ahrs_spi_program.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef AHRS_SPI_PROGRAM_H -#define AHRS_SPI_PROGRAM_H - -/* Special packets to enter programming mode. - Note: these must both be SPI_PROGRAM_REQUEST_LENGTH long. - Pad with spaces if needed. - */ -#define SPI_PROGRAM_REQUEST "AHRS START PROGRAMMING " -#define SPI_PROGRAM_ACK "AHRS PROGRAMMING STARTED" -#define SPI_PROGRAM_REQUEST_LENGTH 24 - -/**Proposed programming protocol: - In the master: - 1) Send a AhrsProgramPacket containing the relevant data. - Note crc is a CRC32 as the CRC8 used in hardware can be fooled. - 2) Keep sending PROGRAM_NULL packets and wait for an ack. - Time out if we waited too long. - 3) Compare ack packet with transmitted packet. The data - should be the bitwise inverse of the data transmitted. - packetId should correspond to the transmitted packet. - 4) repeat for next packet until finished - 5) Repeat using verify packets - Returned data should be exactly as read from memory - - In the slave: - 1) Wait for an AhrsProgramPacket - 2) Check CRC then write to memory - 3) Bitwise invert data and add it to the return packet - 4) Copy packetId from received packet - 5) Transmit packet. - 6) repeat until we receive a read packet - 7) read memory as requested until we receive a reboot packet - Reboot packets had better have some sort of magic number in the data, - just to be absolutely sure - - */ - -typedef enum { - PROGRAM_NULL, - PROGRAM_WRITE, - PROGRAM_READ, - PROGRAM_ACK, - PROGRAM_REBOOT, - PROGRAM_ERR -} ProgramType; -#define SPI_MAX_PROGRAM_DATA_SIZE (14 * 4) //USB comms uses 14x 32 bit words -#define REBOOT_CONFIRMATION "AHRS REBOOT" -#define REBOOT_CONFIRMATION_LENGTH 11 - -/** Proposed program packet defintion - */ - -typedef struct { - ProgramType type; - uint32_t packetId; //Transmission packet ID - uint32_t address; //base address to place data - uint32_t size; //Size of data (0 to SPI_MAX_PROGRAM_DATA_SIZE) - uint8_t data[SPI_MAX_PROGRAM_DATA_SIZE]; - uint32_t crc; //CRC32 - hardware CRC8 can be fooled - uint8_t dummy; //for some reason comms trashes the last byte sent -} AhrsProgramPacket; - -uint32_t GenerateCRC(AhrsProgramPacket * packet); - -#endif diff --git a/flight/Bootloaders/Revolution/inc/ahrs_spi_program_master.h b/flight/Bootloaders/Revolution/inc/ahrs_spi_program_master.h deleted file mode 100644 index 87a3f9ac7..000000000 --- a/flight/Bootloaders/Revolution/inc/ahrs_spi_program_master.h +++ /dev/null @@ -1,66 +0,0 @@ -/** - ****************************************************************************** - * - * @file ahrs_spi_program_master.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief AHRS programming over SPI link - master(OpenPilot) end. - * - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program 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. - * - * This program 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 this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef AHRS_PROGRAM_MASTER_H -#define AHRS_PROGRAM_MASTER_H - -typedef enum { - PROGRAM_ERR_OK, //OK - PROGRAM_ERR_LINK, //comms error - PROGRAM_ERR_FUNCTION, -//function failed -} PROGERR; - -/** Connect to AHRS and request programming mode - * returns: false if failed. - */ -bool AhrsProgramConnect(uint32_t spi_id); - -/** Write data to AHRS - * size must be between 1 and SPI_MAX_PROGRAM_DATA_SIZE - * returns: error status - */ - -PROGERR AhrsProgramWrite(uint32_t spi_id, uint32_t address, void * data, - uint32_t size); - -/** Read data from AHRS - * size must be between 1 and SPI_MAX_PROGRAM_DATA_SIZE - * returns: error status - */ - -PROGERR AhrsProgramRead(uint32_t spi_id, uint32_t address, void * data, - uint32_t size); - -/** reboot AHRS - * returns: error status - */ - -PROGERR AhrsProgramReboot(uint32_t spi_id); - -//TODO: Implement programming protocol - -#endif //AHRS_PROGRAM_MASTER_H diff --git a/flight/Bootloaders/Revolution/inc/ahrs_spi_program_slave.h b/flight/Bootloaders/Revolution/inc/ahrs_spi_program_slave.h deleted file mode 100644 index 683bfa0f6..000000000 --- a/flight/Bootloaders/Revolution/inc/ahrs_spi_program_slave.h +++ /dev/null @@ -1,35 +0,0 @@ -/** - ****************************************************************************** - * - * @file ahrs_spi_program_slave.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief AHRS programming over SPI link - slave(AHRS) end. - * - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program 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. - * - * This program 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 this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef AHRS_SPI_PROGRAM_SLAVE_H -#define AHRS_SPI_PROGRAM_SLAVE_H - -/** Check if OpenPilot is trying to program AHRS - * If so, it will program the FLASH then return - * If not it just returns. - */ -void AhrsProgramReceive(uint32_t spi_id); -#endif //AHRS_PROGRAM_SLAVE_H diff --git a/flight/Bootloaders/Revolution/inc/bl_fsm.h b/flight/Bootloaders/Revolution/inc/bl_fsm.h deleted file mode 100644 index 7c443edb7..000000000 --- a/flight/Bootloaders/Revolution/inc/bl_fsm.h +++ /dev/null @@ -1,97 +0,0 @@ -/** - ****************************************************************************** - * - * @file ahrs_fsm.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program 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. - * - * This program 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 this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef BL_FSM_H -#define BL_FSM_H - -#include "pios_opahrs_proto.h" - -enum lfsm_state { - LFSM_STATE_FAULTED = 0, /* Must be zero so undefined transitions land here */ - LFSM_STATE_STOPPED, - LFSM_STATE_STOPPING, - LFSM_STATE_INACTIVE, - LFSM_STATE_USER_BUSY, - LFSM_STATE_USER_BUSY_RX_PENDING, - LFSM_STATE_USER_BUSY_TX_PENDING, - LFSM_STATE_USER_BUSY_RXTX_PENDING, - LFSM_STATE_USER_RX_PENDING, - LFSM_STATE_USER_TX_PENDING, - LFSM_STATE_USER_RXTX_PENDING, - LFSM_STATE_USER_RX_ACTIVE, - LFSM_STATE_USER_TX_ACTIVE, - LFSM_STATE_USER_RXTX_ACTIVE, - - LFSM_STATE_NUM_STATES -/* Must be last */ -}; - -enum lfsm_event { - LFSM_EVENT_INIT_LINK, - LFSM_EVENT_STOP, - LFSM_EVENT_USER_SET_RX, - LFSM_EVENT_USER_SET_TX, - LFSM_EVENT_USER_DONE, - LFSM_EVENT_RX_LINK, - LFSM_EVENT_RX_USER, - LFSM_EVENT_RX_UNKNOWN, - - LFSM_EVENT_NUM_EVENTS -/* Must be last */ -}; - -struct lfsm_link_stats { - uint32_t rx_badcrc; - uint32_t rx_badmagic_head; - uint32_t rx_badmagic_tail; - uint32_t rx_link; - uint32_t rx_user; - uint32_t tx_user; - uint32_t rx_badtype; - uint32_t rx_badver; -}; - -extern void lfsm_attach(uint32_t spi_id); -extern void lfsm_init(void); -extern void lfsm_inject_event(enum lfsm_event event); - -extern void lfsm_irq_callback(uint8_t crc_ok, uint8_t crc_val); - -extern void lfsm_get_link_stats(struct lfsm_link_stats * stats); -extern enum lfsm_state lfsm_get_state(void); - -extern void lfsm_set_link_proto_v0(struct opahrs_msg_v0 * link_tx, - struct opahrs_msg_v0 * link_rx); -extern void lfsm_user_set_rx_v0(struct opahrs_msg_v0 * user_rx); -extern void lfsm_user_set_tx_v0(struct opahrs_msg_v0 * user_tx); - -extern void lfsm_set_link_proto_v1(struct opahrs_msg_v1 * link_tx, - struct opahrs_msg_v1 * link_rx); -extern void lfsm_user_set_rx_v1(struct opahrs_msg_v1 * user_rx); -extern void lfsm_user_set_tx_v1(struct opahrs_msg_v1 * user_tx); - -extern void lfsm_user_done(void); - -#endif /* BL_FSM_H */ diff --git a/flight/Bootloaders/Revolution/inc/ins_bl.h b/flight/Bootloaders/Revolution/inc/ins_bl.h deleted file mode 100644 index d96ba3bf6..000000000 --- a/flight/Bootloaders/Revolution/inc/ins_bl.h +++ /dev/null @@ -1,53 +0,0 @@ -/** - ****************************************************************************** - * - * @file ahrs_bl.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. - * @brief Main AHRS_BL header. - * @see The GNU Public License (GPL) Version 3 - * - *****************************************************************************/ -/* - * This program 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. - * - * This program 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 this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - - -#ifndef INS_BL_H -#define INS_BL_H - - -/* PIOS Includes */ -#include - -/** Start programming -returns: true if FLASH erased and ready to program -*/ -bool StartProgramming(void); - -/** Write a block to FLASH -buffer contains the data to be written -returns: true if FLASH programmed correctly -*/ -bool WriteData(uint32_t offset, uint8_t *buffer, uint32_t size); - -/** Read a block from FLASH -returns: true if FLASH read correctly. -Buffer is set to the read data -*/ -bool ReadData(uint32_t offset, uint8_t *buffer, uint32_t size); - - - -#endif /* AHRS_BL_H */