git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1177 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
326cac91c2
commit
1a62b44848
75
os/io/mac.c
75
os/io/mac.c
|
@ -27,11 +27,17 @@
|
|||
#include <ch.h>
|
||||
#include <mac.h>
|
||||
|
||||
/**
|
||||
* @brief Transmit descriptors counter semaphore.
|
||||
*/
|
||||
static Semaphore tdsem;
|
||||
|
||||
/**
|
||||
* @brief MAC Driver initialization.
|
||||
*/
|
||||
void macInit(void) {
|
||||
|
||||
chSemInit(&tdsem, MAC_TRANSMIT_DESCRIPTORS);
|
||||
mac_lld_init();
|
||||
}
|
||||
|
||||
|
@ -41,24 +47,87 @@ void macInit(void) {
|
|||
* @param[in] p pointer to a six bytes buffer containing the MAC address. If
|
||||
* this parameter is set to @p NULL then a system default MAC is
|
||||
* used.
|
||||
*
|
||||
* @note This function should be invoked after the @p macInit() and before
|
||||
* @p macStart() else the result is unspecified (performed or ignored).
|
||||
*/
|
||||
void macSetAddress(uint8_t *p) {
|
||||
|
||||
mac_lld_set_address(p);
|
||||
}
|
||||
|
||||
MACTransmissionDescriptor *macGetTransmissionDescriptor(void) {
|
||||
/**
|
||||
* @brief Startsthe I/O activity and enters a low power mode.
|
||||
*/
|
||||
void macStart(void) {
|
||||
|
||||
mac_lld_start();
|
||||
}
|
||||
|
||||
void macReleaseTransmissionDescriptor(MACTransmissionDescriptor *dp) {
|
||||
/**
|
||||
* @brief Stops the I/O activity.
|
||||
*/
|
||||
void macStop(void) {
|
||||
|
||||
max_lld_stop();
|
||||
chSemReset(&tdsem, MAC_TRANSMIT_DESCRIPTORS);
|
||||
}
|
||||
|
||||
void macSetTransmitSequentialData(MACTransmissionDescriptor *dp,
|
||||
/**
|
||||
* @brief Allocates a transmission descriptor.
|
||||
* @details One of the available transmission descriptors is locked and
|
||||
* returned. If a descriptor is not currently available then the
|
||||
* invoking thread is queued until one is freed.
|
||||
*
|
||||
* @param[in] time the number of ticks before the operation timeouts,
|
||||
* the following special values are allowed:
|
||||
* - @a TIME_IMMEDIATE immediate timeout.
|
||||
* - @a TIME_INFINITE no timeout.
|
||||
* .
|
||||
* @return A pointer to a @p MACTransmitDescriptor structure or @p NULL if
|
||||
* the operation timed out or the driver went in stop mode.
|
||||
*/
|
||||
MACTransmitDescriptor *macGetTransmitDescriptor(systime_t time) {
|
||||
MACTransmitDescriptor *tdp;
|
||||
|
||||
chSysLock();
|
||||
|
||||
if (chSemWaitTimeoutS(&tdsem, time) == RDY_OK)
|
||||
tdp = max_lld_get_transmit_descriptor();
|
||||
else
|
||||
tdp = NULL;
|
||||
|
||||
chSysUnlock();
|
||||
return tdp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Releases a transmit descriptor and starts the transmission of the
|
||||
* enqueued data as a single frame.
|
||||
*
|
||||
* @param[in] tdp the pointer to the @p MACTransmitDescriptor structure
|
||||
*/
|
||||
void macReleaseTransmitDescriptor(MACTransmitDescriptor *tdp) {
|
||||
|
||||
chSysLock();
|
||||
|
||||
mac_lld_release_transmit_descriptor(tdp);
|
||||
|
||||
chSysUnlock();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enqueues data to a @p MACTransmitDescriptor.
|
||||
*
|
||||
* @param[in] tdp the pointer to the @p MACTransmitDescriptor structure
|
||||
* @param buf pointer to the data buffer
|
||||
* @param size size of the data to be enqueued
|
||||
*/
|
||||
void macAddTransmitData(MACTransmitDescriptor *tdp,
|
||||
uint8_t *buf,
|
||||
size_t size) {
|
||||
|
||||
mac_lld_add_transmit_data(tdp, buf, size);
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
|
12
os/io/mac.h
12
os/io/mac.h
|
@ -18,7 +18,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* @file serial.h
|
||||
* @file mac.h
|
||||
* @brief MAC Driver macros and structures.
|
||||
* @addtogroup MAC
|
||||
* @{
|
||||
|
@ -27,10 +27,20 @@
|
|||
#ifndef _MAC_H_
|
||||
#define _MAC_H_
|
||||
|
||||
#include "mac_lld.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void macInit(void);
|
||||
void macSetAddress(uint8_t *p);
|
||||
void macStart(void);
|
||||
void macStop(void);
|
||||
MACTransmissionDescriptor *macGetTransmitDescriptor(systime_t time);
|
||||
void macReleaseTransmitDescriptor(MACTransmitDescriptor *tdp);
|
||||
void macAddTransmitData(MACTransmitDescriptor *tdp,
|
||||
uint8_t *buf,
|
||||
size_t size);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
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 templates/mac_lld.c
|
||||
* @brief MAC Driver subsystem low level driver source template
|
||||
* @addtogroup MAC_LLD
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include <ch.h>
|
||||
#include <mac_lld.h>
|
||||
|
||||
/**
|
||||
* @brief Low level MAC initialization.
|
||||
*/
|
||||
void mac_lld_init(void) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Low level MAC address setup.
|
||||
*
|
||||
* @param[in] p pointer to a six bytes buffer containing the MAC address. If
|
||||
* this parameter is set to @p NULL then a system default MAC is
|
||||
* used.
|
||||
*
|
||||
* @note This function should be invoked after the @p macInit() and before
|
||||
* @p macStart() else the result is unspecified (performed or ignored).
|
||||
*/
|
||||
void mac_lld_set_address(uint8_t *p) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Starts the I/O activity and enters a low power mode.
|
||||
*/
|
||||
void mac_lld_start(void) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Stops the I/O activity.
|
||||
*/
|
||||
void mac_lld_stop(void) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Allocates a transmission descriptor.
|
||||
* @details One of the available transmission descriptors is locked and
|
||||
* returned.
|
||||
*
|
||||
* @return A pointer to a @p MACTransmitDescriptor structure or @p NULL if
|
||||
* a descriptor is not available or the driver went in stop mode.
|
||||
*/
|
||||
MACTransmitDescriptor *max_lld_get_transmit_descriptor(void) {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Releases a transmit descriptor and starts the transmission of the
|
||||
* enqueued data as a single frame.
|
||||
*
|
||||
* @param[in] tdp the pointer to the @p MACTransmitDescriptor structure
|
||||
*/
|
||||
void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Enqueues data to a @p MACTransmitDescriptor.
|
||||
*
|
||||
* @param[in] tdp the pointer to the @p MACTransmitDescriptor structure
|
||||
* @param buf pointer to the data buffer
|
||||
* @param size size of the data to be enqueued
|
||||
*/
|
||||
void mac_lld_add_transmit_data(MACTransmitDescriptor *tdp,
|
||||
uint8_t *buf,
|
||||
size_t size) {
|
||||
|
||||
}
|
||||
|
||||
/** @} */
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
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 templates/mac_lld.h
|
||||
* @brief MAC Driver subsystem low level driver header template
|
||||
* @addtogroup MAC_LLD
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _MAC_LLD_H_
|
||||
#define _MAC_LLD_H_
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of available descriptors/buffers.
|
||||
*/
|
||||
#ifndef MAC_TRANSMIT_DESCRIPTORS !! defined(__DOXYGEN__)
|
||||
#define MAC_TRANSMIT_DESCRIPTORS 2
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Driver data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
typedef struct MACTransmitDescriptor {
|
||||
|
||||
};
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void mac_lld_init(void);
|
||||
void mac_lld_set_address(uint8_t *p);
|
||||
void mac_lld_start(void);
|
||||
void mac_lld_stop(void);
|
||||
MACTransmitDescriptor *max_lld_get_transmit_descriptor(void);
|
||||
void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp);
|
||||
void mac_lld_add_transmit_data(MACTransmitDescriptor *tdp,
|
||||
uint8_t *buf,
|
||||
size_t size);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _MAC_LLD_H_ */
|
||||
|
||||
/** @} */
|
Loading…
Reference in New Issue