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>
|
||||
<locationURI>CHIBIOS/boards/ST_STM32F4_DISCOVERY</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>fatfs</name>
|
||||
<type>2</type>
|
||||
<locationURI>CHIBIOS/ext/fatfs</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>os</name>
|
||||
<type>2</type>
|
||||
|
|
|
@ -89,6 +89,7 @@ CSRC = $(PORTSRC) \
|
|||
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
||||
# setting.
|
||||
CPPSRC = $(CHCPPSRC) \
|
||||
$(CHIBIOS)/os/fs/fatfs/fatfs_fsimpl.cpp \
|
||||
main.cpp
|
||||
|
||||
# C sources to be compiled in ARM mode regardless of the global setting.
|
||||
|
@ -117,7 +118,7 @@ ASMSRC = $(PORTASM)
|
|||
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
||||
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
||||
$(CHCPPINC) \
|
||||
$(CHIBIOS)/os/various $(CHIBIOS)/os/fs
|
||||
$(CHIBIOS)/os/various $(CHIBIOS)/os/fs $(CHIBIOS)/os/fs/fatfs
|
||||
|
||||
#
|
||||
# Project, sources and paths
|
||||
|
|
|
@ -92,7 +92,7 @@ private:
|
|||
const seqop_t *base, *curr; // Thread local variables.
|
||||
|
||||
protected:
|
||||
virtual msg_t Main(void) {
|
||||
virtual msg_t main(void) {
|
||||
|
||||
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_
|
||||
#define _FS_HPP_
|
||||
|
||||
#include <ch.hpp>
|
||||
#include "ch.hpp"
|
||||
|
||||
/**
|
||||
* @name Error codes
|
||||
|
@ -122,6 +122,7 @@ namespace chibios_fs {
|
|||
* classes can offer an extended interface.
|
||||
*/
|
||||
class BaseFileSystemInterface {
|
||||
public:
|
||||
/**
|
||||
* @brief File system unmount and object destruction.
|
||||
*/
|
||||
|
|
|
@ -188,6 +188,16 @@ namespace chibios_rt {
|
|||
|
||||
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 */
|
||||
|
||||
#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) {
|
||||
|
||||
return ((BaseThread *)arg)->Main();
|
||||
return ((BaseThread *)arg)->main();
|
||||
}
|
||||
|
||||
void BaseThread::setName(const char *tname) {
|
||||
|
@ -257,18 +279,6 @@ namespace chibios_rt {
|
|||
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
|
||||
eventmask_t BaseThread::getAndClearEvents(eventmask_t mask) {
|
||||
|
||||
|
|
|
@ -330,6 +330,26 @@ namespace chibios_rt {
|
|||
* @api
|
||||
*/
|
||||
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 */
|
||||
|
||||
#if CH_USE_EVENTS || defined(__DOXYGEN__)
|
||||
|
@ -380,9 +400,7 @@ namespace chibios_rt {
|
|||
*
|
||||
* @api
|
||||
*/
|
||||
virtual msg_t Main(void) {
|
||||
return 0;
|
||||
};
|
||||
virtual msg_t main(void);
|
||||
|
||||
/**
|
||||
* @brief Creates and starts a system thread.
|
||||
|
@ -393,12 +411,7 @@ namespace chibios_rt {
|
|||
*
|
||||
* @api
|
||||
*/
|
||||
virtual ThreadReference start(tprio_t prio) {
|
||||
|
||||
(void)prio;
|
||||
|
||||
return *this;
|
||||
};
|
||||
virtual ThreadReference start(tprio_t prio);
|
||||
|
||||
/**
|
||||
* @brief Sets the current thread name.
|
||||
|
@ -510,26 +523,6 @@ namespace chibios_rt {
|
|||
* @api
|
||||
*/
|
||||
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 */
|
||||
|
||||
#if CH_USE_EVENTS || defined(__DOXYGEN__)
|
||||
|
@ -750,7 +743,7 @@ namespace chibios_rt {
|
|||
*
|
||||
* @api
|
||||
*/
|
||||
ThreadReference start(tprio_t prio) {
|
||||
virtual ThreadReference start(tprio_t prio) {
|
||||
msg_t _thd_start(void *arg);
|
||||
|
||||
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.
|
||||
- Restructure and improve documentation.
|
||||
X Update C++ wrapper.
|
||||
X File System infrastructure.
|
||||
- FatFs wrapper.
|
||||
|
||||
Within 2.5.x:
|
||||
- SAM4L support.
|
||||
- Recursive mutexes.
|
||||
X SPC56x support.
|
||||
X Revision of the RTCv2 driver implementation.
|
||||
X File System infrastructure.
|
||||
- FatFs wrapper.
|
||||
X Streaming DAC/I2S driver model and STM32 implementation.
|
||||
- Specific I2C driver for STM32F0 and newer devices.
|
||||
- STM32 CAN2 support.
|
||||
|
|
Loading…
Reference in New Issue