From 19e9c959835da70da88233849156e46d6494c62c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 28 Sep 2013 16:29:58 +1000 Subject: [PATCH] DataFlash: use new scheduler API --- libraries/DataFlash/DataFlash_File.cpp | 23 +++++++++++------------ libraries/DataFlash/DataFlash_File.h | 16 ++++++++-------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/libraries/DataFlash/DataFlash_File.cpp b/libraries/DataFlash/DataFlash_File.cpp index efa950ea81..8d447e177e 100644 --- a/libraries/DataFlash/DataFlash_File.cpp +++ b/libraries/DataFlash/DataFlash_File.cpp @@ -28,21 +28,19 @@ extern const AP_HAL::HAL& hal; #define MAX_LOG_FILES 500U #define DATAFLASH_PAGE_SIZE 1024UL -int DataFlash_File::_write_fd = -1; -volatile bool DataFlash_File::_initialised = false; - -uint8_t *DataFlash_File::_writebuf = NULL; -const uint16_t DataFlash_File::_writebuf_size = 4096; -volatile uint16_t DataFlash_File::_writebuf_head = 0; -volatile uint16_t DataFlash_File::_writebuf_tail = 0; -uint32_t DataFlash_File::_last_write_time = 0; - /* constructor */ DataFlash_File::DataFlash_File(const char *log_directory) : + _write_fd(-1), _read_fd(-1), - _log_directory(log_directory) + _initialised(false), + _log_directory(log_directory), + _writebuf(NULL), + _writebuf_size(4096), + _writebuf_head(0), + _writebuf_tail(0), + _last_write_time(0) {} @@ -65,7 +63,7 @@ void DataFlash_File::Init(void) } _writebuf_head = _writebuf_tail = 0; _initialised = true; - hal.scheduler->register_io_process(_io_timer); + hal.scheduler->register_io_process(reinterpret_cast(&DataFlash_File::_io_timer), this); } // return true for CardInserted() if we successfully initialised @@ -409,7 +407,7 @@ void DataFlash_File::ListAvailableLogs(AP_HAL::BetterStream *port) } -void DataFlash_File::_io_timer(uint32_t tnow) +void DataFlash_File::_io_timer(void) { uint16_t _tail; if (_write_fd == -1 || !_initialised) { @@ -419,6 +417,7 @@ void DataFlash_File::_io_timer(uint32_t tnow) if (nbytes == 0) { return; } + uint32_t tnow = hal.scheduler->micros(); if (nbytes < 512 && tnow - _last_write_time < 2000000UL) { // write in 512 byte chunks, but always write at least once diff --git a/libraries/DataFlash/DataFlash_File.h b/libraries/DataFlash/DataFlash_File.h index 64865749ec..a7caf45d55 100644 --- a/libraries/DataFlash/DataFlash_File.h +++ b/libraries/DataFlash/DataFlash_File.h @@ -43,10 +43,10 @@ public: void ListAvailableLogs(AP_HAL::BetterStream *port); private: - static int _write_fd; + int _write_fd; int _read_fd; uint32_t _read_offset; - static volatile bool _initialised; + volatile bool _initialised; const char *_log_directory; /* @@ -55,18 +55,18 @@ private: void ReadBlock(void *pkt, uint16_t size); // write buffer - static uint8_t *_writebuf; - static const uint16_t _writebuf_size; - static volatile uint16_t _writebuf_head; - static volatile uint16_t _writebuf_tail; - static uint32_t _last_write_time; + uint8_t *_writebuf; + const uint16_t _writebuf_size; + volatile uint16_t _writebuf_head; + volatile uint16_t _writebuf_tail; + uint32_t _last_write_time; /* construct a file name given a log number. Caller must free. */ char *_log_file_name(uint16_t log_num); char *_lastlog_file_name(void); uint32_t _get_log_size(uint16_t log_num); - static void _io_timer(uint32_t now); + void _io_timer(void); };