ardupilot/libraries/AP_HAL_Linux/Storage.h
Lucas De Marchi 54c2c5f682 AP_HAL_Linux: use method for downcast
Instead of just doing a static cast to the desired class, use a method
named "from". Pros:

  - When we have data shared on the parent class, the code is cleaner in
    child class when it needs to access this data. Almost all the data
    we use in AP_HAL benefits from this

  - There's a minimal type checking because now we are using a method
    that can only receive the type of the parent class
2015-09-23 09:01:29 +10:00

54 lines
1.6 KiB
C++

#ifndef __AP_HAL_LINUX_STORAGE_H__
#define __AP_HAL_LINUX_STORAGE_H__
#if CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_ERLEBOARD || CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_PXF
#define LINUX_STORAGE_USE_FRAM 1
#else
#define LINUX_STORAGE_USE_FRAM 0
#endif
#include <AP_HAL/AP_HAL.h>
#include "AP_HAL_Linux_Namespace.h"
#define LINUX_STORAGE_SIZE HAL_STORAGE_SIZE
#define LINUX_STORAGE_MAX_WRITE 512
#define LINUX_STORAGE_LINE_SHIFT 9
#define LINUX_STORAGE_LINE_SIZE (1<<LINUX_STORAGE_LINE_SHIFT)
#define LINUX_STORAGE_NUM_LINES (LINUX_STORAGE_SIZE/LINUX_STORAGE_LINE_SIZE)
class Linux::LinuxStorage : public AP_HAL::Storage
{
public:
LinuxStorage() : _fd(-1),_dirty_mask(0) { }
static LinuxStorage *from(AP_HAL::Storage *storage) {
return static_cast<LinuxStorage*>(storage);
}
void init(void* machtnichts) {}
uint8_t read_byte(uint16_t loc);
uint16_t read_word(uint16_t loc);
uint32_t read_dword(uint16_t loc);
void read_block(void *dst, uint16_t src, size_t n);
void write_byte(uint16_t loc, uint8_t value);
void write_word(uint16_t loc, uint16_t value);
void write_dword(uint16_t loc, uint32_t value);
void write_block(uint16_t dst, const void* src, size_t n);
virtual void _timer_tick(void);
protected:
void _mark_dirty(uint16_t loc, uint16_t length);
virtual void _storage_create(void);
virtual void _storage_open(void);
int _fd;
volatile bool _initialised;
uint8_t _buffer[LINUX_STORAGE_SIZE];
volatile uint32_t _dirty_mask;
};
#include "Storage_FRAM.h"
#endif // __AP_HAL_LINUX_STORAGE_H__