mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-21 11:54:15 +01:00
OP-216: Make the object manager use new flash fs for objects
This commit is contained in:
parent
7e6e7bb391
commit
2087441006
@ -205,6 +205,7 @@ SRC += $(PIOSSTM32F10X)/pios_usb_hid_prop.c
|
||||
SRC += $(PIOSSTM32F10X)/pios_usb_hid_pwr.c
|
||||
|
||||
## PIOS Hardware (Common)
|
||||
SRC += $(PIOSCOMMON)/pios_flashfs_objlist.c
|
||||
SRC += $(PIOSCOMMON)/pios_flash_w25x.c
|
||||
SRC += $(PIOSCOMMON)/pios_adxl345.c
|
||||
SRC += $(PIOSCOMMON)/pios_com.c
|
||||
|
@ -681,6 +681,8 @@ void PIOS_Board_Init(void) {
|
||||
PIOS_Flash_W25X_Init(pios_spi_flash_accel_id);
|
||||
PIOS_ADXL345_Attach(pios_spi_flash_accel_id);
|
||||
|
||||
PIOS_FLASHFS_Init();
|
||||
|
||||
#if defined(PIOS_INCLUDE_SPEKTRUM)
|
||||
/* SPEKTRUM init must come before comms */
|
||||
PIOS_SPEKTRUM_Init();
|
||||
|
@ -119,6 +119,7 @@
|
||||
|
||||
#if defined(PIOS_INCLUDE_FLASH)
|
||||
#include <pios_flash_w25x.h>
|
||||
#include <pios_flashfs_objlist.h>
|
||||
#endif
|
||||
|
||||
#if defined(PIOS_INCLUDE_BL_HELPER)
|
||||
|
@ -3171,6 +3171,8 @@
|
||||
65FF4BE913791C3300146BE4 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = "<group>"; };
|
||||
65FF4BEA13791C3300146BE4 /* op_dfu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = op_dfu.c; sourceTree = "<group>"; };
|
||||
65FF4BEB13791C3300146BE4 /* pios_board.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pios_board.c; sourceTree = "<group>"; };
|
||||
65FF4D5E137EDEC100146BE4 /* pios_flashfs_objlist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pios_flashfs_objlist.c; sourceTree = "<group>"; };
|
||||
65FF4D61137EFA4F00146BE4 /* pios_flashfs_objlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_flashfs_objlist.h; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
@ -7657,6 +7659,7 @@
|
||||
65E8F03711EFF25C00BBF654 /* printf-stdarg.c */,
|
||||
6528CCB412E406B800CF5144 /* pios_adxl345.c */,
|
||||
6512D60712ED4CB8008175E5 /* pios_flash_w25x.c */,
|
||||
65FF4D5E137EDEC100146BE4 /* pios_flashfs_objlist.c */,
|
||||
);
|
||||
name = Common;
|
||||
path = ../../PiOS/Common;
|
||||
@ -7681,6 +7684,7 @@
|
||||
65E8F03E11EFF25C00BBF654 /* pios_debug.h */,
|
||||
65E8F03F11EFF25C00BBF654 /* pios_delay.h */,
|
||||
65E8F04011EFF25C00BBF654 /* pios_exti.h */,
|
||||
65FF4D61137EFA4F00146BE4 /* pios_flashfs_objlist.h */,
|
||||
65E8F04111EFF25C00BBF654 /* pios_gpio.h */,
|
||||
65E8F04211EFF25C00BBF654 /* pios_hmc5843.h */,
|
||||
65E8F04311EFF25C00BBF654 /* pios_i2c.h */,
|
||||
|
@ -562,14 +562,6 @@ int32_t UAVObjSaveToFile(UAVObjHandle obj, uint16_t instId, FILEINFO* file)
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct fileHeader {
|
||||
uint32_t id;
|
||||
uint16_t instId;
|
||||
uint16_t size;
|
||||
} __attribute__((packed));
|
||||
|
||||
#define FLASH_MASK 0x001ff000 /* Select a sector */
|
||||
|
||||
/**
|
||||
* Save the data of the specified object to the file system (SD card).
|
||||
* If the object contains multiple instances, all of them will be saved.
|
||||
@ -596,17 +588,8 @@ int32_t UAVObjSave(UAVObjHandle obj, uint16_t instId)
|
||||
if(instEntry->data == NULL)
|
||||
return -1;
|
||||
|
||||
|
||||
struct fileHeader header = {
|
||||
.id = objEntry->id,
|
||||
.instId = instId,
|
||||
.size = objEntry->numBytes
|
||||
};
|
||||
|
||||
uint32_t addr = (objEntry->id & FLASH_MASK);
|
||||
PIOS_Flash_W25X_EraseSector(addr);
|
||||
PIOS_Flash_W25X_WriteData(addr, (uint8_t *) &header, sizeof(header));
|
||||
PIOS_Flash_W25X_WriteData(addr + sizeof(header), instEntry->data,objEntry->numBytes);
|
||||
if(PIOS_FLASHFS_ObjSave(obj, instId, instEntry->data) != 0)
|
||||
return -1;
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_SDCARD)
|
||||
FILEINFO file;
|
||||
@ -758,19 +741,8 @@ int32_t UAVObjLoad(UAVObjHandle obj, uint16_t instId)
|
||||
if(instEntry->data == NULL)
|
||||
return -1;
|
||||
|
||||
struct fileHeader header;
|
||||
uint32_t addr = (objEntry->id & FLASH_MASK);
|
||||
|
||||
PIOS_Flash_W25X_ReadData(addr, (uint8_t *) &header, sizeof(header));
|
||||
|
||||
if(header.id != objEntry->id)
|
||||
return -1;
|
||||
|
||||
// Read the instance data
|
||||
if (PIOS_Flash_W25X_ReadData(addr + sizeof(header) ,instEntry->data, objEntry->numBytes) != 0)
|
||||
return -1;
|
||||
|
||||
// Fire event
|
||||
// Fire event on success
|
||||
if(PIOS_FLASHFS_ObjSave(obj, instId, instEntry->data) == 0)
|
||||
sendEvent(objEntry, instId, EV_UNPACKED);
|
||||
#endif
|
||||
|
||||
@ -837,13 +809,7 @@ int32_t UAVObjLoad(UAVObjHandle obj, uint16_t instId)
|
||||
int32_t UAVObjDelete(UAVObjHandle obj, uint16_t instId)
|
||||
{
|
||||
#if defined(PIOS_INCLUDE_FLASH_SECTOR_SETTINGS)
|
||||
ObjectList* objEntry = (ObjectList*)obj;
|
||||
|
||||
if(objEntry == NULL)
|
||||
return -1;
|
||||
|
||||
uint32_t addr = (objEntry->id & FLASH_MASK);
|
||||
PIOS_Flash_W25X_EraseSector(addr);
|
||||
PIOS_FLASHFS_ObjDelete(obj, instId);
|
||||
#endif
|
||||
#if defined(PIOS_INCLUDE_SDCARD)
|
||||
ObjectList* objEntry;
|
||||
|
Loading…
x
Reference in New Issue
Block a user