git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5027 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
05c30c4e65
commit
b5da4b76b5
|
@ -81,6 +81,11 @@
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
|
<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
|
||||||
</link>
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>fatfs</name>
|
||||||
|
<type>2</type>
|
||||||
|
<locationURI>CHIBIOS/ext/fatfs</locationURI>
|
||||||
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>os</name>
|
<name>os</name>
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
|
|
|
@ -89,6 +89,7 @@ CSRC = $(PORTSRC) \
|
||||||
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
||||||
# setting.
|
# setting.
|
||||||
CPPSRC = $(CHCPPSRC) \
|
CPPSRC = $(CHCPPSRC) \
|
||||||
|
$(CHIBIOS)/os/fs/fatfs/fatfs_fsimpl.cpp \
|
||||||
main.cpp
|
main.cpp
|
||||||
|
|
||||||
# C sources to be compiled in ARM mode regardless of the global setting.
|
# C sources to be compiled in ARM mode regardless of the global setting.
|
||||||
|
@ -117,7 +118,7 @@ ASMSRC = $(PORTASM)
|
||||||
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
||||||
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
||||||
$(CHCPPINC) \
|
$(CHCPPINC) \
|
||||||
$(CHIBIOS)/os/various $(CHIBIOS)/os/fs
|
$(CHIBIOS)/os/various $(CHIBIOS)/os/fs $(CHIBIOS)/os/fs/fatfs
|
||||||
|
|
||||||
#
|
#
|
||||||
# Project, sources and paths
|
# Project, sources and paths
|
||||||
|
|
|
@ -92,7 +92,7 @@ private:
|
||||||
const seqop_t *base, *curr; // Thread local variables.
|
const seqop_t *base, *curr; // Thread local variables.
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual msg_t Main(void) {
|
virtual msg_t main(void) {
|
||||||
|
|
||||||
setName("sequencer");
|
setName("sequencer");
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
/*
|
||||||
|
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||||
|
2011,2012 Giovanni Di Sirio.
|
||||||
|
|
||||||
|
This file is part of ChibiOS/RT.
|
||||||
|
|
||||||
|
ChibiOS/RT 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.
|
||||||
|
|
||||||
|
ChibiOS/RT 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, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @file fs_fatfs_impl.cpp
|
||||||
|
* @brief FatFS file system wrapper.
|
||||||
|
*
|
||||||
|
* @addtogroup fs_fatfs_wrapper
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ch.hpp"
|
||||||
|
#include "fs.hpp"
|
||||||
|
#include "fatfs_fsimpl.hpp"
|
||||||
|
#include "hal.h"
|
||||||
|
|
||||||
|
#define MSG_TERMINATE (msg_t)0
|
||||||
|
|
||||||
|
#define ERR_OK (msg_t)0
|
||||||
|
#define ERR_TERMINATING (msg_t)1
|
||||||
|
#define ERR_UNKNOWN_MSG (msg_t)2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief FatFS wrapper-related classes and interfaces.
|
||||||
|
*/
|
||||||
|
namespace chibios_fatfs {
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------*
|
||||||
|
* chibios_fatfs::FatFSWrapper::FatFSServerThread *
|
||||||
|
*------------------------------------------------------------------------*/
|
||||||
|
FatFSWrapper::FatFSServerThread::FatFSServerThread(::BaseBlockDevice *blkdev) :
|
||||||
|
BaseStaticThread<FATFS_THREAD_STACK_SIZE>(),
|
||||||
|
blkdev(blkdev) {
|
||||||
|
|
||||||
|
start(FATFS_THREAD_PRIORITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatFSWrapper::FatFSServerThread::~FatFSServerThread() {
|
||||||
|
|
||||||
|
sendMessage(MSG_TERMINATE);
|
||||||
|
wait();
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_t FatFSWrapper::FatFSServerThread::main() {
|
||||||
|
msg_t sts;
|
||||||
|
|
||||||
|
/* Synchronous messages processing loop.*/
|
||||||
|
while (true) {
|
||||||
|
ThreadReference tr = waitMessage();
|
||||||
|
msg_t msg = tr.getMessage();
|
||||||
|
switch (msg) {
|
||||||
|
case MSG_TERMINATE:
|
||||||
|
/* The server object is being destroyed, terminating.*/
|
||||||
|
tr.releaseMessage(ERR_TERMINATING);
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
sts = ERR_UNKNOWN_MSG;
|
||||||
|
}
|
||||||
|
tr.releaseMessage(sts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------*
|
||||||
|
* chibios_fatfs::FatFSWrapper *
|
||||||
|
*------------------------------------------------------------------------*/
|
||||||
|
FatFSWrapper::FatFSWrapper(::BaseBlockDevice *blkdev) : server(blkdev) {
|
||||||
|
|
||||||
|
server.start(FATFS_THREAD_PRIORITY);
|
||||||
|
}
|
||||||
|
|
||||||
|
FatFSWrapper::~FatFSWrapper() {
|
||||||
|
|
||||||
|
server.~FatFSServerThread();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @} */
|
|
@ -0,0 +1,86 @@
|
||||||
|
/*
|
||||||
|
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||||
|
2011,2012 Giovanni Di Sirio.
|
||||||
|
|
||||||
|
This file is part of ChibiOS/RT.
|
||||||
|
|
||||||
|
ChibiOS/RT 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.
|
||||||
|
|
||||||
|
ChibiOS/RT 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, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file fs_fatfs_impl.hpp
|
||||||
|
* @brief FatFS file system wrapper header.
|
||||||
|
*
|
||||||
|
* @addtogroup cpp_library
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ch.hpp"
|
||||||
|
#include "hal.h"
|
||||||
|
|
||||||
|
#ifndef _FS_FATFS_IMPL_HPP_
|
||||||
|
#define _FS_FATFS_IMPL_HPP_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Stack size for the internal server thread.
|
||||||
|
*/
|
||||||
|
#if !defined(FATFS_THREAD_STACK_SIZE) || defined(__DOXYGEN__)
|
||||||
|
#define FATFS_THREAD_STACK_SIZE 1024
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Priority for the internal server thread.
|
||||||
|
*/
|
||||||
|
#if !defined(FATFS_THREAD_PRIORITY) || defined(__DOXYGEN__)
|
||||||
|
#define FATFS_THREAD_PRIORITY NORMALPRIO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using namespace chibios_rt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief FatFS wrapper-related classes and interfaces.
|
||||||
|
*/
|
||||||
|
namespace chibios_fatfs {
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------*
|
||||||
|
* chibios_fatfs::FatFSWrapper *
|
||||||
|
*------------------------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* @brief Class of the FatFS wrapper.
|
||||||
|
*/
|
||||||
|
class FatFSWrapper : public chibios_fs::BaseFileSystemInterface {
|
||||||
|
protected:
|
||||||
|
/**
|
||||||
|
* @brief Class of the internal server thread.
|
||||||
|
*/
|
||||||
|
class FatFSServerThread : public BaseStaticThread<FATFS_THREAD_STACK_SIZE> {
|
||||||
|
private:
|
||||||
|
::BaseBlockDevice *blkdev;
|
||||||
|
protected:
|
||||||
|
virtual msg_t main(void);
|
||||||
|
public:
|
||||||
|
FatFSServerThread(::BaseBlockDevice *blkdev);
|
||||||
|
~FatFSServerThread();
|
||||||
|
} server;
|
||||||
|
|
||||||
|
public:
|
||||||
|
FatFSWrapper(::BaseBlockDevice *blkdev);
|
||||||
|
|
||||||
|
~FatFSWrapper();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _FS_FATFS_IMPL_HPP_ */
|
||||||
|
|
||||||
|
/** @} */
|
|
@ -29,7 +29,7 @@
|
||||||
#ifndef _FS_HPP_
|
#ifndef _FS_HPP_
|
||||||
#define _FS_HPP_
|
#define _FS_HPP_
|
||||||
|
|
||||||
#include <ch.hpp>
|
#include "ch.hpp"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @name Error codes
|
* @name Error codes
|
||||||
|
@ -122,6 +122,7 @@ namespace chibios_fs {
|
||||||
* classes can offer an extended interface.
|
* classes can offer an extended interface.
|
||||||
*/
|
*/
|
||||||
class BaseFileSystemInterface {
|
class BaseFileSystemInterface {
|
||||||
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief File system unmount and object destruction.
|
* @brief File system unmount and object destruction.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -188,6 +188,16 @@ namespace chibios_rt {
|
||||||
|
|
||||||
return (bool)chMsgIsPendingI(thread_ref);
|
return (bool)chMsgIsPendingI(thread_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
msg_t ThreadReference::getMessage(void) {
|
||||||
|
|
||||||
|
return chMsgGet(thread_ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThreadReference::releaseMessage(msg_t msg) {
|
||||||
|
|
||||||
|
chMsgRelease(thread_ref, msg);
|
||||||
|
}
|
||||||
#endif /* CH_USE_MESSAGES */
|
#endif /* CH_USE_MESSAGES */
|
||||||
|
|
||||||
#if CH_USE_EVENTS
|
#if CH_USE_EVENTS
|
||||||
|
@ -212,9 +222,21 @@ namespace chibios_rt {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
msg_t BaseThread::main(void) {
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ThreadReference BaseThread::start(tprio_t prio) {
|
||||||
|
|
||||||
|
(void)prio;
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
};
|
||||||
|
|
||||||
msg_t _thd_start(void *arg) {
|
msg_t _thd_start(void *arg) {
|
||||||
|
|
||||||
return ((BaseThread *)arg)->Main();
|
return ((BaseThread *)arg)->main();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseThread::setName(const char *tname) {
|
void BaseThread::setName(const char *tname) {
|
||||||
|
@ -257,18 +279,6 @@ namespace chibios_rt {
|
||||||
chThdYield();
|
chThdYield();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CH_USE_MESSAGES
|
|
||||||
msg_t BaseThread::getMessage(ThreadReference* trp) {
|
|
||||||
|
|
||||||
return chMsgGet(trp->thread_ref);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BaseThread::releaseMessage(ThreadReference* trp, msg_t msg) {
|
|
||||||
|
|
||||||
chMsgRelease(trp->thread_ref, msg);
|
|
||||||
}
|
|
||||||
#endif /* CH_USE_MESSAGES */
|
|
||||||
|
|
||||||
#if CH_USE_EVENTS
|
#if CH_USE_EVENTS
|
||||||
eventmask_t BaseThread::getAndClearEvents(eventmask_t mask) {
|
eventmask_t BaseThread::getAndClearEvents(eventmask_t mask) {
|
||||||
|
|
||||||
|
|
|
@ -221,7 +221,7 @@ namespace chibios_rt {
|
||||||
*
|
*
|
||||||
* @init
|
* @init
|
||||||
*/
|
*/
|
||||||
ThreadReference(Thread * tp) : thread_ref(tp) {
|
ThreadReference(Thread *tp) : thread_ref(tp) {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -330,6 +330,26 @@ namespace chibios_rt {
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
bool isPendingMessage(void);
|
bool isPendingMessage(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns an enqueued message or @p NULL.
|
||||||
|
*
|
||||||
|
* @param[in] trp the sender thread reference
|
||||||
|
* @return The incoming message.
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
msg_t getMessage(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Releases the next message in queue with a reply.
|
||||||
|
*
|
||||||
|
* @param[in] trp the sender thread reference
|
||||||
|
* @param[in] msg the answer message
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
void releaseMessage(msg_t msg);
|
||||||
#endif /* CH_USE_MESSAGES */
|
#endif /* CH_USE_MESSAGES */
|
||||||
|
|
||||||
#if CH_USE_EVENTS || defined(__DOXYGEN__)
|
#if CH_USE_EVENTS || defined(__DOXYGEN__)
|
||||||
|
@ -380,9 +400,7 @@ namespace chibios_rt {
|
||||||
*
|
*
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
virtual msg_t Main(void) {
|
virtual msg_t main(void);
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Creates and starts a system thread.
|
* @brief Creates and starts a system thread.
|
||||||
|
@ -393,12 +411,7 @@ namespace chibios_rt {
|
||||||
*
|
*
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
virtual ThreadReference start(tprio_t prio) {
|
virtual ThreadReference start(tprio_t prio);
|
||||||
|
|
||||||
(void)prio;
|
|
||||||
|
|
||||||
return *this;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Sets the current thread name.
|
* @brief Sets the current thread name.
|
||||||
|
@ -510,26 +523,6 @@ namespace chibios_rt {
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
static ThreadReference waitMessage(void);
|
static ThreadReference waitMessage(void);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Returns an enqueued message or @p NULL.
|
|
||||||
*
|
|
||||||
* @param[in] trp the sender thread reference
|
|
||||||
* @return The incoming message.
|
|
||||||
*
|
|
||||||
* @api
|
|
||||||
*/
|
|
||||||
static msg_t getMessage(ThreadReference* trp);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Releases the next message in queue with a reply.
|
|
||||||
*
|
|
||||||
* @param[in] trp the sender thread reference
|
|
||||||
* @param[in] msg the answer message
|
|
||||||
*
|
|
||||||
* @api
|
|
||||||
*/
|
|
||||||
static void releaseMessage(ThreadReference* trp, msg_t msg);
|
|
||||||
#endif /* CH_USE_MESSAGES */
|
#endif /* CH_USE_MESSAGES */
|
||||||
|
|
||||||
#if CH_USE_EVENTS || defined(__DOXYGEN__)
|
#if CH_USE_EVENTS || defined(__DOXYGEN__)
|
||||||
|
@ -750,7 +743,7 @@ namespace chibios_rt {
|
||||||
*
|
*
|
||||||
* @api
|
* @api
|
||||||
*/
|
*/
|
||||||
ThreadReference start(tprio_t prio) {
|
virtual ThreadReference start(tprio_t prio) {
|
||||||
msg_t _thd_start(void *arg);
|
msg_t _thd_start(void *arg);
|
||||||
|
|
||||||
thread_ref = chThdCreateStatic(wa, sizeof(wa), prio, _thd_start, this);
|
thread_ref = chThdCreateStatic(wa, sizeof(wa), prio, _thd_start, this);
|
||||||
|
|
4
todo.txt
4
todo.txt
|
@ -14,14 +14,14 @@ X Support for ATSAM4L devices.
|
||||||
- Support for SPC56xA devices.
|
- Support for SPC56xA devices.
|
||||||
- Restructure and improve documentation.
|
- Restructure and improve documentation.
|
||||||
X Update C++ wrapper.
|
X Update C++ wrapper.
|
||||||
|
X File System infrastructure.
|
||||||
|
- FatFs wrapper.
|
||||||
|
|
||||||
Within 2.5.x:
|
Within 2.5.x:
|
||||||
- SAM4L support.
|
- SAM4L support.
|
||||||
- Recursive mutexes.
|
- Recursive mutexes.
|
||||||
X SPC56x support.
|
X SPC56x support.
|
||||||
X Revision of the RTCv2 driver implementation.
|
X Revision of the RTCv2 driver implementation.
|
||||||
X File System infrastructure.
|
|
||||||
- FatFs wrapper.
|
|
||||||
X Streaming DAC/I2S driver model and STM32 implementation.
|
X Streaming DAC/I2S driver model and STM32 implementation.
|
||||||
- Specific I2C driver for STM32F0 and newer devices.
|
- Specific I2C driver for STM32F0 and newer devices.
|
||||||
- STM32 CAN2 support.
|
- STM32 CAN2 support.
|
||||||
|
|
Loading…
Reference in New Issue