diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-09-05 15:33:27 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2009-09-05 15:33:27 +0000 |
commit | e8e651a11d611164e9390c40e174b15280527a7f (patch) | |
tree | e17ce8a75f0f621181a910ad041864191ed3578a /src/lib | |
parent | 7dfa36f86d896cdb824a9137a81f324c8243c4d9 (diff) | |
download | ChibiOS-e8e651a11d611164e9390c40e174b15280527a7f.tar.gz ChibiOS-e8e651a11d611164e9390c40e174b15280527a7f.tar.bz2 ChibiOS-e8e651a11d611164e9390c40e174b15280527a7f.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1149 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/ch.cpp | 335 | ||||
-rw-r--r-- | src/lib/ch.hpp | 618 | ||||
-rw-r--r-- | src/lib/evtimer.c | 70 | ||||
-rw-r--r-- | src/lib/evtimer.h | 62 | ||||
-rw-r--r-- | src/lib/pal.c | 94 | ||||
-rw-r--r-- | src/lib/pal.h | 460 |
6 files changed, 0 insertions, 1639 deletions
diff --git a/src/lib/ch.cpp b/src/lib/ch.cpp deleted file mode 100644 index 6e338630e..000000000 --- a/src/lib/ch.cpp +++ /dev/null @@ -1,335 +0,0 @@ -/*
- ChibiOS/RT - Copyright (C) 2006-2007 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 ch.cpp
- * @brief C++ wrapper code.
- * @addtogroup CPlusPlusLibrary
- * @{
- */
-
-#include <ch.hpp>
-
-namespace chibios_rt {
-
- /*------------------------------------------------------------------------*
- * chibios_rt::System *
- *------------------------------------------------------------------------*/
- void System::Init(void) {
-
- chSysInit();
- }
-
- void System::Lock(void) {
-
- chSysLock();
- }
-
- void System::Unlock(void) {
-
- chSysUnlock();
- }
-
- systime_t System::GetTime(void) {
-
- return chTimeNow();
- }
-
- /*------------------------------------------------------------------------*
- * chibios_rt::Timer *
- *------------------------------------------------------------------------*/
- void Timer::Set(systime_t time, vtfunc_t vtfunc, void *par) {
-
- chVTSetI(&timer, time, vtfunc, par);
- }
-
- void Timer::Reset() {
-
- chVTResetI(&timer);
- }
-
- bool Timer::IsArmed(void) {
-
- return chVTIsArmedI(&timer);
- }
-
- /*------------------------------------------------------------------------*
- * chibios_rt::BaseThread *
- *------------------------------------------------------------------------*/
- static msg_t thdstart(void *arg) {
-
- return ((BaseThread *)arg)->Main();
- }
-
- BaseThread::BaseThread(void *workspace, size_t wsize, tprio_t prio) {
-
- thread_ref = chThdCreateStatic(workspace, wsize, prio, thdstart, this);
- }
-
- void BaseThread::Exit(msg_t msg) {
-
- chThdExit(msg);
- }
-
-#if CH_USE_WAITEXIT
- msg_t BaseThread::Wait(void) {
-
- return chThdWait(thread_ref);
- }
-#endif /* CH_USE_WAITEXIT */
-
- void BaseThread::SetPriority(tprio_t newprio) {
-
- chThdSetPriority(newprio);
- }
-
- void BaseThread::Resume(void) {
-
- chThdResume(thread_ref);
- }
-
- void BaseThread::Terminate(void) {
-
- chThdTerminate(thread_ref);
- }
-
- void BaseThread::Sleep(systime_t n) {
-
- chThdSleep(n);
- }
-
- void BaseThread::SleepUntil(systime_t time) {
-
- chThdSleepUntil(time);
- }
-
-#if CH_USE_MESSAGES
- msg_t BaseThread::SendMessage(::Thread* tp, msg_t msg) {
-
- return chMsgSend(tp, msg);
- }
-
- msg_t BaseThread::SendMessage(msg_t msg) {
-
- return chMsgSend(thread_ref, msg);
- }
-
- msg_t BaseThread::WaitMessage(void) {
-
- return chMsgWait();
- }
-
- msg_t BaseThread::GetMessage(void) {
-
- return chMsgGet();
- }
-
- void BaseThread::ReleaseMessage(msg_t msg) {
-
- chMsgRelease(msg);
- }
-
- bool BaseThread::IsPendingMessage(void) {
-
- return chMsgIsPendingI(currp);
- }
-#endif /* CH_USE_MESSAGES */
-
- msg_t BaseThread::Main(void) {
-
- return 0;
- }
-
-#if CH_USE_SEMAPHORES
- /*------------------------------------------------------------------------*
- * chibios_rt::Semaphore *
- *------------------------------------------------------------------------*/
- Semaphore::Semaphore(cnt_t n) {
-
- chSemInit(&sem, n);
- }
-
- void Semaphore::Reset(cnt_t n) {
-
- chSemReset(&sem, n);
- }
-
- msg_t Semaphore::Wait(void) {
-
- return chSemWait(&sem);
- }
-
- msg_t Semaphore::WaitTimeout(systime_t time) {
-
- return chSemWaitTimeout(&sem, time);
- }
-
- void Semaphore::Signal(void) {
-
- chSemSignal(&sem);
- }
-
-#if CH_USE_SEMSW
- msg_t Semaphore::SignalWait(Semaphore *ssem, Semaphore *wsem) {
-
- return chSemSignalWait(&ssem->sem, &wsem->sem);
- }
-#endif /* CH_USE_SEMSW */
-#endif /* CH_USE_SEMAPHORES */
-
-#if CH_USE_MUTEXES
- /*------------------------------------------------------------------------*
- * chibios_rt::Mutex *
- *------------------------------------------------------------------------*/
- Mutex::Mutex(void) {
-
- chMtxInit(&mutex);
- }
-
- bool Mutex::TryLock(void) {
-
- return chMtxTryLock(&mutex);
- }
-
- void Mutex::Lock(void) {
-
- chMtxLock(&mutex);
- }
-
- void Mutex::Unlock(void) {
-
- chMtxUnlock();
- }
-
- void UnlockAll(void) {
-
- chMtxUnlockAll();
- }
-
-#if CH_USE_CONDVARS
- /*------------------------------------------------------------------------*
- * chibios_rt::CondVar *
- *------------------------------------------------------------------------*/
- CondVar::CondVar(void) {
-
- chCondInit(&condvar);
- }
-
- void CondVar::Signal(void) {
-
- chCondSignal(&condvar);
- }
-
- void CondVar::Broadcast(void) {
-
- chCondBroadcast(&condvar);
- }
-
- msg_t CondVar::Wait(void) {
-
- return chCondWait(&condvar);
- }
-
-#if CH_USE_CONDVARS_TIMEOUT
- msg_t CondVar::WaitTimeout(systime_t time) {
-
- return chCondWaitTimeout(&condvar, time);
- }
-#endif /* CH_USE_CONDVARS_TIMEOUT */
-#endif /* CH_USE_CONDVARS */
-#endif /* CH_USE_MUTEXES */
-
-#if CH_USE_EVENTS
- /*------------------------------------------------------------------------*
- * chibios_rt::Event *
- *------------------------------------------------------------------------*/
- Event::Event(void) {
-
- chEvtInit(&event);
- }
-
- void Event::Register(EventListener *elp, eventid_t eid) {
-
- chEvtRegister(&event,elp, eid);
- }
-
- void Event::RegisterMask(EventListener *elp, eventmask_t emask) {
-
- chEvtRegisterMask(&event,elp, emask);
- }
-
- void Event::Unregister(EventListener *elp) {
-
- chEvtUnregister(&event, elp);
- }
-
- void Event::Broadcast(void) {
-
- chEvtBroadcast(&event);
- }
-
- eventmask_t Event::Clear(eventmask_t mask) {
-
- return chEvtClear(mask);
- }
-
- eventmask_t Event::Pend(eventmask_t mask) {
-
- return chEvtPend(mask);
- }
-
- void Event::Dispatch(const evhandler_t handlers[], eventmask_t mask) {
-
- chEvtDispatch(handlers, mask);
- }
-
- eventmask_t Event::WaitOne(eventmask_t ewmask) {
-
- return chEvtWaitOne(ewmask);
- }
-
- eventmask_t Event::WaitAny(eventmask_t ewmask) {
-
- return chEvtWaitAny(ewmask);
- }
-
- eventmask_t Event::WaitAll(eventmask_t ewmask) {
-
- return chEvtWaitAll(ewmask);
- }
-
-#if CH_USE_EVENTS_TIMEOUT
- eventmask_t Event::WaitOneTimeout(eventmask_t ewmask, systime_t time) {
-
- return chEvtWaitOneTimeout(ewmask, time);
- }
-
- eventmask_t Event::WaitAnyTimeout(eventmask_t ewmask, systime_t time) {
-
- return chEvtWaitAnyTimeout(ewmask, time);
- }
-
- eventmask_t Event::WaitAllTimeout(eventmask_t ewmask, systime_t time) {
-
- return chEvtWaitAllTimeout(ewmask, time);
- }
-#endif /* CH_USE_EVENTS_TIMEOUT */
-#endif /* CH_USE_EVENTS */
-}
-
-/** @} */
diff --git a/src/lib/ch.hpp b/src/lib/ch.hpp deleted file mode 100644 index b13e8db6d..000000000 --- a/src/lib/ch.hpp +++ /dev/null @@ -1,618 +0,0 @@ -/*
- ChibiOS/RT - Copyright (C) 2006-2007 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 ch.hpp
- * @brief C++ wrapper classes and definitions.
- * @addtogroup CPlusPlusLibrary
- * @{
- */
-
-#include <ch.h>
-
-#ifndef _CH_HPP_
-#define _CH_HPP_
-
-namespace chibios_rt {
-
- /**
- * @brief Class encapsulating the base system functionalities.
- */
- class System {
- public:
- /**
- * @brief ChibiOS/RT initialization.
- * @details The system is initialized, the idle thread is spawned and the
- * current instruction flow becomes the main thread with priority
- * @p NORMALPRIO.
- */
- static void Init(void);
-
- /**
- * @brief Kernel lock.
- *
- * @note On some ports it is faster to invoke chSysLock() directly because
- * inlining.
- */
- static void Lock(void);
-
- /**
- * @brief Kernel unlock.
- *
- * @note On some ports it is faster to invoke chSysUnlock() directly
- * because inlining.
- */
- static void Unlock(void);
-
- /**
- * @brief Returns the system time as system ticks.
- *
- * @note the system tick time interval is implementation dependent.
- */
- static systime_t GetTime(void);
- };
-
- /**
- * @brief Timer class.
- */
- class Timer {
- public:
- /**
- * @brief Embedded @p VirtualTimer structure. - */
- struct ::VirtualTimer timer;
-
- /**
- * @brief Starts the timer.
- *
- * @param time the time in system ticks
- * @param vtfunc the timer callback function
- * @param par the parameter for the callback function
- * @note It must be called with the interrupts disabled.
- * @note The associated function is invoked by an interrupt handler.
- */
- void Set(systime_t time, vtfunc_t vtfunc, void *par);
-
- /**
- * @brief Resets the timer.
- *
- * @note It must be called with the interrupts disabled.
- * @note The timer MUST be active when this function is invoked.
- */
- void Reset();
-
- /**
- * @brief Returns the timer status.
- *
- * @retval TRUE The timer is armed.
- * @retval FALSE The timer already fired its callback.
- */
- bool IsArmed(void);
- };
-
- /**
- * @brief Base class for a ChibiOS/RT thread.
- * @details The thread body is the virtual function @p Main().
- */
- class BaseThread {
- public:
- /**
- * @brief Pointer to the system thread. - */
- ::Thread *thread_ref;
-
- /**
- * @brief Thread constructor.
- * @details The thread object is initialized and a system thread is
- * started.
- *
- * @param workspace pointer to the workspace area
- * @param wsize size of the workspace area
- * @param prio thread priority
- */
- BaseThread(void *workspace, size_t wsize, tprio_t prio);
-
- /**
- * @brief Thread exit.
- *
- * @param msg the exit message
- */
- static void Exit(msg_t msg);
-
-#if CH_USE_WAITEXIT
- /**
- * @brief Synchronization on Thread exit.
- *
- * @return the exit message from the thread
- */
- msg_t Wait(void);
-#endif /* CH_USE_WAITEXIT */
-
- /**
- * @brief Resumes the thread.
- * @details The thread encapsulated into the object is resumed.
- */
- void Resume(void);
-
- /**
- * @brief Changes the thread priority.
- *
- * @param newprio the new priority level
- */
- static void SetPriority(tprio_t newprio);
-
- /**
- * @brief Requests thread termination.
- * @details A termination flag is pended on the thread, it is thread
- * responsibility to detect it and exit.
- */
- void Terminate(void);
-
- /**
- * @brief Suspends the thread execution for the specified number of
- * system ticks.
- *
- * @param n the number of system ticks
- */
- static void Sleep(systime_t n);
-
- /**
- * @brief Suspends the thread execution until the specified time arrives.
- *
- * @param time the system time
- */
- static void SleepUntil(systime_t time);
-
-#if CH_USE_MESSAGES
- /**
- * @brief Sends a message to the thread and returns the answer.
- *
- * @param tp the target thread
- * @param msg the sent message
- * @return The returned message.
- */
- static msg_t SendMessage(::Thread *tp, msg_t msg);
-
- /**
- * @brief Sends a message to the thread and returns the answer.
- *
- * @param msg the sent message
- * @return The returned message.
- */
- msg_t SendMessage(msg_t msg);
-
- /**
- * @brief Waits for a message and returns it.
- *
- * @return The incoming message.
- */
- static msg_t WaitMessage(void);
-
- /**
- * @brief Returns an enqueued message or @p NULL.
- *
- * @return The incoming message.
- * @retval NULL No incoming message.
- */
- static msg_t GetMessage(void);
-
- /**
- * @brief Releases the next message in queue with a reply.
- *
- * @param msg the answer message
- */
- static void ReleaseMessage(msg_t msg);
-
- /**
- * @brief Returns true if there is at least one message in queue.
- *
- * @retval TRUE A message is waiting in queue.
- * @retval FALSE A message is not waiting in queue.
- */
- static bool IsPendingMessage(void);
-#endif /* CH_USE_MESSAGES */
-
- /**
- * @brief Thread body function.
- *
- * @return The exit message.
- */
- virtual msg_t Main(void);
- };
-
- /**
- * @brief Enhanced threads template class.
- * @details This class introduces thread names and static working area
- * allocation.
- *
- * @param N the working area size for the thread class
- */
- template <int N>
- class EnhancedThread : public BaseThread {
- protected:
- WORKING_AREA(wa, N); // Thread working area.
-
- public:
- /**
- * @brief The thread name. - */
- const char *name;
-
- /**
- * @brief Full constructor.
- * @details This constructor allows to set a priority level for the new
- * thread.
- * @param tname the name to be assigned to the thread
- * @param prio the priority to be assigned to the thread
- */
- EnhancedThread(const char *tname, tprio_t prio) :
- BaseThread(wa, sizeof wa, prio) {
-
- name = tname;
- }
-
- /**
- * @brief Simplified constructor.
- * @details This constructor allows to create a thread by simply
- * specifying a name. In is assumed @p NORMALPRIO as initial priority.
- *
- * @param tname the name to be assigned to the thread
- */
- EnhancedThread(const char *tname) :
- BaseThread(wa, sizeof wa, NORMALPRIO) {
-
- name = tname;
- }
- };
-
-#if CH_USE_SEMAPHORES
- /**
- * @brief Class encapsulating a semaphore.
- */
- class Semaphore {
- public:
- /**
- * @brief Embedded @p ::Semaphore structure.
- */
- struct ::Semaphore sem;
-
- /**
- * @brief Semaphore constructor.
- * @details The embedded @p ::Semaphore structure is initialized.
- *
- * @param n the semaphore counter value, must be greater or equal to zero
- */
- Semaphore(cnt_t n);
-
- /**
- * @brief Resets a semaphore.
- *
- * @param n the new semaphore counter value, must be greater or equal to zero
- */
- void Reset(cnt_t n);
-
- /**
- * @brief Wait operation on the semaphore.
- *
- * @retval RDY_OK if the semaphore was signaled or not taken.
- * @retval RDY_RESET if the semaphore was reset.
- */
- msg_t Wait(void);
-
- /**
- * @brief Wait operation on the semaphore with timeout.
- *
- * @param time the number of ticks before the operation fails
- * @retval RDY_OK if the semaphore was signaled or not taken.
- * @retval RDY_RESET if the semaphore was reset.
- * @retval RDY_TIMEOUT if the semaphore was not signaled or reset within the
- * specified timeout.
- */
- msg_t WaitTimeout(systime_t time);
-
- /**
- * @brief Signal operation on the semaphore.
- * @details The semaphore is signaled, the next thread in queue, if any,
- * is awakened.
- */
- void Signal(void);
-
-#if CH_USE_SEMSW
- /**
- * @brief Atomic signal and wait operations.
- *
- * @param ssem pointer to a @p Semaphore to be signaled
- * @param wsem pointer to a @p Semaphore to be wait on
- * @retval RDY_OK if the semaphore was signaled or not taken.
- * @retval RDY_RESET if the semaphore was reset.
- */
- static msg_t SignalWait(Semaphore *ssem, Semaphore *wsem);
-#endif /* CH_USE_SEMSW */
- };
-#endif /* CH_USE_SEMAPHORES */
-
-#if CH_USE_MUTEXES
- /**
- * @brief Class encapsulating a mutex.
- */
- class Mutex {
- public:
- /**
- * @brief Embedded @p ::Mutex structure.
- */
- struct ::Mutex mutex;
-
- /**
- * @brief Mutex constructor.
- * @details The embedded @p ::Mutex structure is initialized.
- */
- Mutex(void);
-
- /**
- * @brief Tries a lock operation on the mutex.
- * @retval TRUE if the mutex was successfully acquired
- * @retval FALSE if the lock attempt failed.
- */
- bool TryLock(void);
-
- /**
- * @brief Locks the mutex.
- * @details Performs a lock operation on the mutex, if the mutex is
- * already locked then the thread enters the mutex priority queue and
- * waits.
- */
- void Lock(void);
-
- /**
- * @brief Unlocks the mutex.
- * @details Performs an unlock operation on the mutex, the next waiting
- * thread, if any, is resumed and locks the mutex.
- */
- static void Unlock(void);
-
- /**
- * @brief Unlocks all the mutexes owned by the invoking thread.
- * @details This operation is <b>MUCH MORE</b> efficient than releasing
- * the mutexes one by one and not just because the call overhead, this
- * function does not have any overhead related to the priority inheritance
- * mechanism.
- */
- static void UnlockAll(void);
- };
-
-#if CH_USE_CONDVARS
- /**
- * @brief Class encapsulating a conditional variable.
- */
- class CondVar {
- public:
- /**
- * @brief Embedded @p ::CondVar structure.
- */
- struct ::CondVar condvar;
-
- /**
- * @brief CondVar constructor.
- * @details The embedded @p ::CondVar structure is initialized.
- */
- CondVar(void);
-
- /**
- * @brief Signals the CondVar.
- * @details The next thread waiting on the @p CondVar, if any, is awakened. - */
- void Signal(void);
-
- /**
- * @brief Broadcasts the CondVar. - * @details All the threads waiting on the @p CondVar, if any, are awakened.
- */
- void Broadcast(void);
-
- /**
- * @brief Waits on the CondVar while releasing the controlling mutex.
- * - * @return The wakep mode.
- * @retval RDY_OK if the condvar was signaled using chCondSignal().
- * @retval RDY_RESET if the condvar was signaled using chCondBroadcast().
- */
- msg_t Wait(void);
-
-#if CH_USE_CONDVARS_TIMEOUT
- /**
- * @brief Waits on the CondVar while releasing the controlling mutex.
- *
- * @param time the number of ticks before the operation fails
- * @return The wakep mode.
- * @retval RDY_OK if the condvar was signaled using chCondSignal().
- * @retval RDY_RESET if the condvar was signaled using chCondBroadcast().
- * @retval RDY_TIMEOUT if the condvar was not signaled within the specified
- * timeout.
- */
- msg_t WaitTimeout(systime_t time);
-#endif /* CH_USE_CONDVARS_TIMEOUT */
- };
-#endif /* CH_USE_CONDVARS */
-#endif /* CH_USE_MUTEXES */
-
-#if CH_USE_EVENTS
- /**
- * @brief Class encapsulating an event source.
- */
- class Event {
- public:
- /**
- * @brief Embedded @p ::EventSource structure.
- */
- struct ::EventSource event;
-
- /**
- * @brief Event constructor.
- * @details The embedded @p ::EventSource structure is initialized.
- */
- Event(void);
-
- /**
- * @brief Registers a listener on the event source.
- *
- * @param elp pointer to the @p EventListener structure
- * @param eid numeric identifier assigned to the Event Listener
- */
- void Register(EventListener *elp, eventid_t eid);
-
- /**
- * @brief Registers an Event Listener on an Event Source.
- *
- * @param elp pointer to the @p EventListener structure
- * @param emask the mask of event flags to be pended to the thread when the
- * event source is broadcasted
- * @note Multiple Event Listeners can specify the same bits to be pended.
- */
- void RegisterMask(EventListener *elp, eventmask_t emask);
-
- /**
- * @brief Unregisters a listener.
- * @details The specified listeners is no more signaled by the event
- * source.
- *
- * @param elp the listener to be unregistered
- */
- void Unregister(EventListener *elp);
-
- /**
- * @brief Broadcasts an event.
- * @details All the listeners registered on the event source are signaled.
- */
- void Broadcast(void);
-
- /**
- * @brief Clears specified events from the pending events mask.
- *
- * @param mask the events to be cleared
- * @return The pending events that were cleared.
- */
- static eventmask_t Clear(eventmask_t mask);
-
- /**
- * @brief Makes an events mask pending in the current thread.
- * @details This functon is @b much faster than using @p Broadcast().
- *
- * @param mask the events to be pended
- * @return The current pending events mask.
- */
- static eventmask_t Pend(eventmask_t mask);
-
- /**
- * @brief Invokes the event handlers associated with a mask.
- *
- * @param mask mask of the events to be dispatched
- * @param handlers an array of @p evhandler_t. The array must be
- * have indexes from zero up the higher registered event
- * identifier.
- */
- static void Dispatch(const evhandler_t handlers[], eventmask_t mask);
-
- /**
- * @brief Waits for a single event.
- * @details A pending event among those specified in @p ewmask is selected,
- * cleared and its mask returned.
- *
- * @param ewmask mask of the events that the function should wait for,
- * @p ALL_EVENTS enables all the events
- * @return The mask of the lowest id served and cleared event.
- * @note One and only one event is served in the function, the one with the
- * lowest event id. The function is meant to be invoked into a loop in
- * order to serve all the pending events.<br>
- * This means that Event Listeners with a lower event identifier have
- * an higher priority.
- */
- static eventmask_t WaitOne(eventmask_t ewmask);
-
- /**
- * @brief Waits for any of the specified events.
- * @details The function waits for any event among those specified in
- * @p ewmask to become pending then the events are cleared and returned.
- *
- * @param ewmask mask of the events that the function should wait for,
- * @p ALL_EVENTS enables all the events
- * @return The mask of the served and cleared events.
- */
- static eventmask_t WaitAny(eventmask_t ewmask);
-
- /**
- * @brief Waits for all the specified event flags then clears them.
- * @details The function waits for all the events specified in @p ewmask
- * to become pending then the events are cleared and returned.
- *
- * @param ewmask mask of the event ids that the function should wait for
- * @return The mask of the served and cleared events.
- */
- static eventmask_t WaitAll(eventmask_t ewmask);
-
-#if CH_USE_EVENTS_TIMEOUT
- /**
- * @brief Waits for a single event.
- * @details A pending event among those specified in @p ewmask is selected,
- * cleared and its mask returned.
- * @param ewmask mask of the events that the function should wait for,
- * @p ALL_EVENTS enables all the events
- * @param time the number of ticks before the operation timouts
- * @return The mask of the lowest id served and cleared event.
- * @retval 0 if the specified timeout expired.
- * @note One and only one event is served in the function, the one with the
- * lowest event id. The function is meant to be invoked into a loop in
- * order to serve all the pending events.<br>
- * This means that Event Listeners with a lower event identifier have
- * an higher priority.
- */
- static eventmask_t WaitOneTimeout(eventmask_t ewmask, systime_t time);
-
- /**
- * @brief Waits for any of the specified events.
- * @details The function waits for any event among those specified in
- * @p ewmask to become pending then the events are cleared and returned.
- *
- * @param ewmask mask of the events that the function should wait for,
- * @p ALL_EVENTS enables all the events
- * @param time the number of ticks before the operation timouts
- * @return The mask of the served and cleared events.
- * @retval 0 if the specified timeout expired.
- */
- static eventmask_t WaitAnyTimeout(eventmask_t ewmask, systime_t time);
-
- /**
- * @brief Waits for all the specified event flags then clears them.
- * @details The function waits for all the events specified in @p ewmask
- * to become pending then the events are cleared and returned.
- *
- * @param ewmask mask of the event ids that the function should wait for
- * @param time the number of ticks before the operation timouts
- * @return The mask of the served and cleared events.
- * @retval 0 if the specified timeout expired.
- */
- static eventmask_t WaitAllTimeout(eventmask_t ewmask, systime_t time);
-
-#endif /* CH_USE_EVENTS_TIMEOUT */
- };
-#endif /* CH_USE_EVENTS */
-}
-
-#endif /* _CH_HPP_ */
-
-/** @} */
diff --git a/src/lib/evtimer.c b/src/lib/evtimer.c deleted file mode 100644 index 114a9b3a6..000000000 --- a/src/lib/evtimer.c +++ /dev/null @@ -1,70 +0,0 @@ -/*
- ChibiOS/RT - Copyright (C) 2006-2007 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 evtimer.c
- * @brief Events Generator Timer code.
- * @addtogroup event_timer
- * @{
- */
-
-#include <ch.h>
-
-#include "evtimer.h"
-
-static void tmrcb(void *p) {
- EvTimer *etp = p;
-
- chEvtBroadcastI(&etp->et_es);
- chVTSetI(&etp->et_vt, etp->et_interval, tmrcb, etp);
-}
-
-/**
- * @brief Starts the timer
- * @details If the timer was already running then the function has no effect.
- *
- * @param etp pointer to an initialized @p EvTimer structure.
- */
-void evtStart(EvTimer *etp) {
-
- chSysLock();
-
- if (!chVTIsArmedI(&etp->et_vt))
- chVTSetI(&etp->et_vt, etp->et_interval, tmrcb, etp);
-
- chSysUnlock();
-}
-
-/**
- * @brief Stops the timer.
- * @details If the timer was already stopped then the function has no effect.
- *
- * @param etp pointer to an initialized @p EvTimer structure.
- */
-void evtStop(EvTimer *etp) {
-
- chSysLock();
-
- if (chVTIsArmedI(&etp->et_vt))
- chVTResetI(&etp->et_vt);
-
- chSysUnlock();
-}
-
-/** @} */
diff --git a/src/lib/evtimer.h b/src/lib/evtimer.h deleted file mode 100644 index acfc97eb1..000000000 --- a/src/lib/evtimer.h +++ /dev/null @@ -1,62 +0,0 @@ -/*
- ChibiOS/RT - Copyright (C) 2006-2007 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 evtimer.h
- * @brief Events Generator Timer structures and macros.
- * @addtogroup event_timer
- * @{
- */
-
-#ifndef _EVTIMER_H_
-#define _EVTIMER_H_
-
-/**
- * @brief Event timer structure.
- */
-typedef struct {
- VirtualTimer et_vt;
- EventSource et_es;
- systime_t et_interval;
-} EvTimer;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- void evtStart(EvTimer *etp);
- void evtStop(EvTimer *etp);
-#ifdef __cplusplus
-}
-#endif
-
-/**
- * @brief Initializes an @p EvTimer structure.
- *
- * @param etp the EvTimer structure to be initialized
- * @param time the interval in system ticks
- */
-#define evtInit(etp, time) { \
- chEvtInit(&(etp)->et_es); \
- (etp)->et_vt.vt_func = NULL; \
- (etp)->et_interval = (time); \
-}
-
-#endif /* _EVTIMER_H_ */
-
-/** @} */
diff --git a/src/lib/pal.c b/src/lib/pal.c deleted file mode 100644 index f7645f621..000000000 --- a/src/lib/pal.c +++ /dev/null @@ -1,94 +0,0 @@ -/*
- ChibiOS/RT - Copyright (C) 2006-2007 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 pal.c
- * @brief I/O Ports Abstraction Layer code
- * @addtogroup PAL
- * @{
- */
-
-#include <ch.h>
-#include <pal.h>
-
-/**
- * @brief Read from an I/O bus.
- *
- * @param[in] bus the I/O bus, pointer to a @p IOBus structure
- * @return The bus logical states.
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The function internally uses the @p palReadGroup() macro. The use of
- * this function is preferred when you value code size, readability and
- * error checking over speed.
- */
-ioportmask_t palReadBus(IOBus *bus) {
-
- chDbgCheck((bus != NULL) &&
- (bus->bus_offset > PAL_IOPORTS_WIDTH), "palReadBus");
-
- return palReadGroup(bus->bus_portid, bus->bus_mask, bus->bus_offset);
-}
-
-/**
- * @brief Write to an I/O bus.
- *
- * @param[in] bus the I/O bus, pointer to a @p IOBus structure
- * @param[in] bits the bits to be written on the I/O bus. Values exceeding
- * the bus width are masked so most significant bits are lost.
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The default implementation is non atomic and not necessarily
- * optimal. Low level drivers may optimize the function by using
- * specific hardware or coding.
- */
-void palWriteBus(IOBus *bus, ioportmask_t bits) {
-
- chDbgCheck((bus != NULL) &&
- (bus->bus_offset > PAL_IOPORTS_WIDTH), "palWriteBus");
-
- palWriteGroup(bus->bus_portid, bus->bus_mask, bus->bus_offset, bits);
-}
-
-/**
- * @brief Programs a bus with the specified mode.
- * - * @param[in] bus the I/O bus, pointer to a @p IOBus structure
- * @param[in] mode the mode
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The default implementation is non atomic and not necessarily
- * optimal. Low level drivers may optimize the function by using
- * specific hardware or coding.
- */
-void palSetBusMode(IOBus *bus, uint_fast8_t mode) {
-
- chDbgCheck((bus != NULL) &&
- (bus->bus_offset > PAL_IOPORTS_WIDTH), "palSetBusMode");
-
- palSetGroupMode(bus->bus_portid, bus->bus_mask, mode);
-}
-
-/** @} */
diff --git a/src/lib/pal.h b/src/lib/pal.h deleted file mode 100644 index b75582ee1..000000000 --- a/src/lib/pal.h +++ /dev/null @@ -1,460 +0,0 @@ -/*
- ChibiOS/RT - Copyright (C) 2006-2007 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 pal.h
- * @brief I/O Ports Abstraction Layer macros, types and structures
- * @addtogroup PAL
- * @{
- */
-
-#ifndef _PAL_H_
-#define _PAL_H_
-
-/**
- * @brief Bits in a mode word dedicated as mode selector.
- * @details The other bits are not defined and may be used as device-specific
- * option bits. - */
-#define PAL_MODE_MASK 0xF
-
-/**
- * @brief After reset state.
- * @details The state itself is not specified and is architecture dependent,
- * it is guaranteed to be equal to the after-reset state. It is
- * usually an input state. - */
-#define PAL_MODE_RESET 0
-
-/**
- * @brief Safe state for <b>unconnected</b> pads. - * @details The state itself is not specified and is architecture dependent,
- * it may be mapped on @p PAL_MODE_INPUT_PULLUP,
- * @p PAL_MODE_INPUT_PULLDOWN or @p PAL_MODE_OUTPUT_PUSHPULL as
- * example.
- */
-#define PAL_MODE_UNCONNECTED 1
-
-/**
- * @brief Regular input high-Z pad.
- */
-#define PAL_MODE_INPUT 2
-
-/**
- * @brief Input pad with weak pull up resistor. - */
-#define PAL_MODE_INPUT_PULLUP 3
-
-/**
- * @brief Input pad with weak pull down resistor.
- */
-#define PAL_MODE_INPUT_PULLDOWN 4
-
-/**
- * @brief Push-pull output pad.
- */
-#define PAL_MODE_OUTPUT_PUSHPULL 5
-
-/**
- * @brief Open-drain output pad.
- */
-#define PAL_MODE_OUTPUT_OPENDRAIN 6
-
-#ifndef _PAL_LLD_H_
-#include "pal_lld.h"
-#endif
-
-/**
- * @brief Logical low state. - */
-#define PAL_LOW 0
-
-/**
- * @brief Logical high state.
- */
-#define PAL_HIGH 1
-
-/**
- * @brief Port bit helper macro.
- * @details This macro calculates the mask of a bit within a port.
- *
- * @param[in] n the bit position within the port
- * @return The bit mask. - */
-#define PAL_PORT_BIT(n) ((ioportmask_t)(1 << (n)))
-
-
-/**
- * @brief Bits group mask helper.
- * @details This macro calculates the mask of a bits group.
- *
- * @param[in] width the group width - * @return The group mask.
- */
-#define PAL_GROUP_MASK(width) ((ioportmask_t)(1 << (width)) - 1)
-
-/**
- * @brief Data part of a static I/O bus initializer.
- * @details This macro should be used when statically initializing an I/O bus
- * that is part of a bigger structure.
- *
- * @param name the name of the IOBus variable
- * @param port the I/O port descriptor
- * @param width the bus width in bits
- * @param offset the bus bit offset within the port
- */
-#define _IOBUS_DATA(name, port, width, offset) \
- {port, PAL_GROUP_MASK(width), offset}
-
-/**
- * @brief Static I/O bus initializer.
- *
- * @param name the name of the IOBus variable
- * @param port the I/O port descriptor
- * @param width the bus width in bits
- * @param offset the bus bit offset within the port
- */
-#define IOBUS_DECL(name, port, width, offset) \
- IOBus name = _IOBUS_DATA(name, port, width, offset)
-
-/**
- * @brief I/O bus descriptor.
- * @details This structure describes a group of contiguous digital I/O lines
- * that have to be handled as bus.
- * @note I/O operations on a bus do not affect I/O lines on the same port but
- * not belonging to the bus. - */
-typedef struct {
- /** Port identifier. */
- ioportid_t bus_portid;
- /** Bus mask aligned to port bit 0. The bus mask implicitly define the bus
- * width. */
- ioportmask_t bus_mask;
- /** Offset, within the port, of the least significant bit of the bus. */
- uint_fast8_t bus_offset;
-} IOBus;
-
-/**
- * @brief PAL subsystem initialization.
- *
- * @param[in] config pointer to an architecture specific configuration
- * structure. This structure is defined in the low level driver
- * header. - */
-#define palInit(config) pal_lld_init(config)
-
-/**
- * @brief Reads the physical I/O port states.
- *
- * @param[in] port the port identifier
- * @return The port logical states.
- *
- * @note The default implementation always return zero and computes the
- * parameter eventual side effects.
- */
-#if !defined(pal_lld_readport) || defined(__DOXYGEN__)
-#define palReadPort(port) ((void)(port), 0)
-#else
-#define palReadPort(port) pal_lld_readport(port)
-#endif
-
-/**
- * @brief Reads the output latch.
- * @details The purpose of this function is to read back the latched output
- * value.
- * - * @param[in] port the port identifier
- * @return The latched logical states.
- *
- * @note The default implementation always return zero and computes the
- * parameter eventual side effects.
- */
-#if !defined(pal_lld_readlatch) || defined(__DOXYGEN__)
-#define palReadLatch(port) ((void)(port), 0)
-#else
-#define palReadLatch(port) pal_lld_readlatch(port)
-#endif
-
-/**
- * @brief Writes a bits mask on a I/O port.
- *
- * @param[in] port the port identifier
- * @param[in] bits the bits to be written on the specified port
- *
- * @note The default implementation does nothing except computing the
- * parameters eventual side effects.
- */
-#if !defined(pal_lld_writeport) || defined(__DOXYGEN__)
-#define palWritePort(port, bits) ((void)(port), (void)(bits))
-#else
-#define palWritePort(port, bits) pal_lld_writeport(port, bits)
-#endif
-
-/**
- * @brief Sets a bits mask on a I/O port.
- *
- * @param[in] port the port identifier
- * @param[in] bits the bits to be ORed on the specified port
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The default implementation is non atomic and not necessarily
- * optimal. Low level drivers may optimize the function by using
- * specific hardware or coding.
- */
-#if !defined(pal_lld_setport) || defined(__DOXYGEN__)
-#define palSetPort(port, bits) { \
- palWritePort(port, palReadLatch(port) | (bits)); \
-}
-#else
-#define palSetPort(port, bits) pal_lld_setport(port, bits)
-#endif
-
-/**
- * @brief Clears a bits mask on a I/O port.
- *
- * @param[in] port the port identifier
- * @param[in] bits the bits to be cleared on the specified port
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The default implementation is non atomic and not necessarily
- * optimal. Low level drivers may optimize the function by using
- * specific hardware or coding.
- */
-#if !defined(pal_lld_clearport) || defined(__DOXYGEN__)
-#define palClearPort(port, bits) { \
- palWritePort(port, palReadLatch(port) & ~(bits)); \
-}
-#else
-#define palClearPort(port, bits) pal_lld_clearport(port, bits)
-#endif
-
-/**
- * @brief Toggles a bits mask on a I/O port.
- *
- * @param[in] port the port identifier
- * @param[in] bits the bits to be XORed on the specified port
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The default implementation is non atomic and not necessarily
- * optimal. Low level drivers may optimize the function by using
- * specific hardware or coding.
- */
-#if !defined(pal_lld_toggleport) || defined(__DOXYGEN__)
-#define palTogglePort(port, bits) { \
- palWritePort(port, palReadLatch(port) ^ (bits)); \
-}
-#else
-#define palTogglePort(port, bits) pal_lld_toggleport(port, bits)
-#endif
-
-/**
- * @brief Reads a group of bits.
- * - * @param[in] port the port identifier
- * @param[in] mask the group mask
- * @param[in] offset the group bit offset within the port
- * @return The group logical states.
- */
-#if !defined(pal_lld_readgroup) || defined(__DOXYGEN__)
-#define palReadGroup(port, mask, offset) \
- ((palReadPort(port) >> (offset)) & (mask))
-#else
-#define palReadGroup(port, mask, offset) pal_lld_readgroup(port, mask, offset)
-#endif
-
-/**
- * @brief Writes a group of bits.
- *
- * @param[in] port the port identifier
- * @param[in] mask the group mask
- * @param[in] offset the group bit offset within the port
- * @param[in] bits the bits to be written. Values exceeding the group width
- * are masked.
- */
-#if !defined(pal_lld_writegroup) || defined(__DOXYGEN__)
-#define palWriteGroup(port, mask, offset, bits) { \
- palWritePort(port, (palReadLatch(port) & ~((mask) << (offset))) | \
- (((bits) & (mask)) << (offset))); \
-}
-#else
-#define palWriteGroup(port, mask, offset, bits) \
- pal_lld_writegroup(port, mask, offset, bits)
-#endif
-
-
-/**
- * @brief Pads group mode setup.
- * @details This function programs a pads group belonging to the same port
- * with the specified mode.
- *
- * @param[in] port the port identifier
- * @param[in] mask the group mask
- * @param[in] mode the setup mode
- *
- * @note Programming an unknown or unsupported mode is silently ignored.
- */
-#if !defined(pal_lld_setgroupmode) || defined(__DOXYGEN__)
-#define palSetGroupMode(port, mask, mode)
-#else
-#define palSetGroupMode(port, mask, mode) pal_lld_setgroupmode(port, mask, mode)
-#endif
-
-/**
- * @brief Reads an input pad logical state.
- *
- * @param[in] port the port identifier
- * @param[in] pad the pad number within the port
- * @return The logical state.
- * @retval 0 low logical state.
- * @retval 1 high logical state.
- *
- * @note The default implementation not necessarily optimal. Low level drivers
- * may optimize the function by using specific hardware or coding.
- * @note The default implementation internally uses the @p palReadPort().
- */
-#if !defined(pal_lld_readpad) || defined(__DOXYGEN__)
-#define palReadPad(port, pad) ((palReadPort(port) >> (pad)) & 1)
-#else
-#define palReadPad(port, pad) pal_lld_readpad(port, pad)
-#endif
-
-/**
- * @brief Writes a logical state on an output pad.
- *
- * @param[in] port the port identifier
- * @param[in] pad the pad number within the port
- * @param[out] bit the logical value, the value must be @p 0 or @p 1
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The default implementation is non atomic and not necessarily
- * optimal. Low level drivers may optimize the function by using
- * specific hardware or coding.
- * @note The default implementation internally uses the @p palReadLatch() and
- * @p palWritePort().
- */
-#if !defined(pal_lld_writepad) || defined(__DOXYGEN__)
-#define palWritePad(port, pad, bit) { \
- palWritePort(port, (palReadLatch(port) & ~PAL_PORT_BIT(pad)) | \
- (((bit) & 1) << pad)); \
-}
-#else
-#define palWritePad(port, pad, bit) pal_lld_writepad(port, pad, bit)
-#endif
-
-/**
- * @brief Sets a pad logical state to @p 1.
- *
- * @param[in] port the port identifier
- * @param[in] pad the pad number within the port
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The default implementation is non atomic and not necessarily
- * optimal. Low level drivers may optimize the function by using
- * specific hardware or coding.
- * @note The default implementation internally uses the @p palSetPort().
- */
-#if !defined(pal_lld_setpad) || defined(__DOXYGEN__)
-#define palSetPad(port, pad) palSetPort(port, PAL_PORT_BIT(pad))
-#else
-#define palSetPad(port, pad) pal_lld_setpad(port, pad)
-#endif
-
-/**
- * @brief Clears a pad logical state to @p 0.
- *
- * @param[in] port the port identifier
- * @param[in] pad the pad number within the port
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The default implementation is non atomic and not necessarily
- * optimal. Low level drivers may optimize the function by using
- * specific hardware or coding.
- * @note The default implementation internally uses the @p palClearPort().
- */
-#if !defined(pal_lld_clearpad) || defined(__DOXYGEN__)
-#define palClearPad(port, pad) palClearPort(port, PAL_PORT_BIT(pad))
-#else
-#define palClearPad(port, pad) pal_lld_clearpad(port, pad)
-#endif
-
-/**
- * @brief Toggles a pad logical state.
- *
- * @param[in] port the port identifier
- * @param[in] pad the pad number within the port
- *
- * @note The operation is not guaranteed to be atomic on all the architectures,
- * for atomicity and/or portability reasons you may need to enclose port
- * I/O operations between @p chSysLock() and @p chSysUnlock().
- * @note The default implementation is non atomic and not necessarily
- * optimal. Low level drivers may optimize the function by using
- * specific hardware or coding.
- * @note The default implementation internally uses the @p palTogglePort().
- */
-#if !defined(pal_lld_togglepad) || defined(__DOXYGEN__)
-#define palTogglePad(port, pad) palTogglePort(port, PAL_PORT_BIT(pad))
-#else
-#define palTogglePad(port, pad) pal_lld_togglepad(port, pad)
-#endif
-
-
-/**
- * @brief Pad mode setup.
- * @details This function programs a pad with the specified mode.
- *
- * @param[in] port the port identifier
- * @param[in] pad the pad number within the port
- * @param[in] mode the setup mode
- *
- * @note The default implementation not necessarily optimal. Low level drivers
- * may optimize the function by using specific hardware or coding.
- * @note Programming an unknown or unsupported mode is silently ignored.
- */
-#if !defined(pal_lld_setpadmode) || defined(__DOXYGEN__)
-#define palSetPadMode(port, pad, mode) \
- palSetGroupMode(port, PAL_PORT_BIT(pad), mode)
-#else
-#define palSetPadMode(port, pad, mode) pal_lld_setpadmode(port, pad, mode)
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
- ioportmask_t palReadBus(IOBus *bus);
- void palWriteBus(IOBus *bus, ioportmask_t bits);
- void palSetBusMode(IOBus *bus, uint_fast8_t mode);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _PAL_H_ */
-
-/** @} */
|