ChibiOS/RT Architecture - Reference Manual - Guides |
00001 /* 00002 ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 Giovanni Di Sirio. 00003 00004 This file is part of ChibiOS/RT. 00005 00006 ChibiOS/RT is free software; you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation; either version 3 of the License, or 00009 (at your option) any later version. 00010 00011 ChibiOS/RT is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with this program. If not, see <http://www.gnu.org/licenses/>. 00018 00019 --- 00020 00021 A special exception to the GPL can be applied should you wish to distribute 00022 a combined work that includes ChibiOS/RT, without being obliged to provide 00023 the source code for any proprietary components. See the file exception.txt 00024 for full details of how and when the exception can be applied. 00025 */ 00026 00027 /** 00028 * @file mac.h 00029 * @brief MAC Driver macros and structures. 00030 * @addtogroup MAC 00031 * @{ 00032 */ 00033 00034 #ifndef _MAC_H_ 00035 #define _MAC_H_ 00036 00037 #if CH_HAL_USE_MAC || defined(__DOXYGEN__) 00038 00039 /*===========================================================================*/ 00040 /* Driver constants. */ 00041 /*===========================================================================*/ 00042 00043 /*===========================================================================*/ 00044 /* Driver pre-compile time settings. */ 00045 /*===========================================================================*/ 00046 00047 /*===========================================================================*/ 00048 /* Derived constants and error checks. */ 00049 /*===========================================================================*/ 00050 00051 #if !CH_USE_SEMAPHORES || !CH_USE_EVENTS 00052 #error "the MAC driver requires CH_USE_SEMAPHORES and CH_USE_EVENTS" 00053 #endif 00054 00055 /*===========================================================================*/ 00056 /* Driver data structures and types. */ 00057 /*===========================================================================*/ 00058 00059 #include "mac_lld.h" 00060 00061 /*===========================================================================*/ 00062 /* Driver macros. */ 00063 /*===========================================================================*/ 00064 00065 /** 00066 * @brief Returns the received frames event source. 00067 * 00068 * @param[in] macp pointer to the @p MACDriver object 00069 * @return The pointer to the @p EventSource structure. 00070 */ 00071 #if CH_USE_EVENTS || defined(__DOXYGEN__) 00072 #define macGetReceiveEventSource(macp) (&(macp)->md_rdevent) 00073 #endif 00074 00075 /** 00076 * @brief Writes to a transmit descriptor's stream. 00077 * 00078 * @param[in] tdp pointer to a @p MACTransmitDescriptor structure 00079 * @param[in] buf pointer to the buffer containing the data to be written 00080 * @param[in] size number of bytes to be written 00081 * @return The number of bytes written into the descriptor's 00082 * stream, this value can be less than the amount 00083 * specified in the parameter @p size if the maximum frame 00084 * size is reached. 00085 */ 00086 #define macWriteTransmitDescriptor(tdp, buf, size) \ 00087 mac_lld_write_transmit_descriptor(tdp, buf, size) 00088 00089 /** 00090 * @brief Reads from a receive descriptor's stream. 00091 * 00092 * @param[in] rdp pointer to a @p MACReceiveDescriptor structure 00093 * @param[in] buf pointer to the buffer that will receive the read data 00094 * @param[in] size number of bytes to be read 00095 * @return The number of bytes read from the descriptor's stream, this 00096 * value can be less than the amount specified in the 00097 * parameter @p size if there are no more bytes to read. 00098 */ 00099 #define macReadReceiveDescriptor(rdp, buf, size) \ 00100 mac_lld_read_receive_descriptor(rdp, buf, size) 00101 00102 /*===========================================================================*/ 00103 /* External declarations. */ 00104 /*===========================================================================*/ 00105 00106 #ifdef __cplusplus 00107 extern "C" { 00108 #endif 00109 void macInit(void); 00110 void macObjectInit(MACDriver *macp); 00111 void macSetAddress(MACDriver *macp, const uint8_t *p); 00112 msg_t macWaitTransmitDescriptor(MACDriver *macp, 00113 MACTransmitDescriptor *tdp, 00114 systime_t time); 00115 void macReleaseTransmitDescriptor(MACTransmitDescriptor *tdp); 00116 msg_t macWaitReceiveDescriptor(MACDriver *macp, 00117 MACReceiveDescriptor *rdp, 00118 systime_t time); 00119 void macReleaseReceiveDescriptor(MACReceiveDescriptor *rdp); 00120 bool_t macPollLinkStatus(MACDriver *macp); 00121 #ifdef __cplusplus 00122 } 00123 #endif 00124 00125 #endif /* CH_HAL_USE_MAC */ 00126 00127 #endif /* _MAC_H_ */ 00128 00129 /** @} */