/* ---------------------------------------------------------------------------- | |
* ATMEL Microcontroller Software Support | |
* ---------------------------------------------------------------------------- | |
* Copyright (c) 2010, Atmel Corporation | |
* | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* - Redistributions of source code must retain the above copyright notice, | |
* this list of conditions and the disclaimer below. | |
* | |
* Atmel's name may not be used to endorse or promote products derived from | |
* this software without specific prior written permission. | |
* | |
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR | |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE | |
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, | |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | |
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | |
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
* ---------------------------------------------------------------------------- | |
*/ | |
/** \file | |
* | |
* Definitions and classes for USB CDC class requests | |
* (mostly for ACM). | |
* | |
* \section CDCLineCoding | |
* | |
* -# Initialize a CDCLineCoding instance using CDCLineCoding_Initialize. | |
* -# Send a CDCLineCoding object to the host in response to a GetLineCoding | |
* request. | |
* -# Receive a CDCLineCoding object from the host after a SetLineCoding | |
* request. | |
* | |
*/ | |
#ifndef _CDCREQUESTS_H_ | |
#define _CDCREQUESTS_H_ | |
/** \addtogroup usb_cdc | |
*@{ | |
*/ | |
/*---------------------------------------------------------------------------- | |
* Includes | |
*----------------------------------------------------------------------------*/ | |
#include <stdint.h> | |
#include <USBRequests.h> | |
/*---------------------------------------------------------------------------- | |
* Definitions | |
*----------------------------------------------------------------------------*/ | |
/** \addtogroup usb_cdc_request USB CDC Request Codes | |
* @{ | |
* This section lists USB CDC Request Codes. | |
* - \ref CDCGenericRequest_SETLINECODING | |
* - \ref CDCGenericRequest_GETLINECODING | |
* - \ref CDCGenericRequest_SETCONTROLLINESTATE | |
*/ | |
/** SetLineCoding request code. */ | |
#define CDCGenericRequest_SETLINECODING 0x20 | |
/** GetLineCoding request code. */ | |
#define CDCGenericRequest_GETLINECODING 0x21 | |
/** SetControlLineState request code. */ | |
#define CDCGenericRequest_SETCONTROLLINESTATE 0x22 | |
/** @}*/ | |
/** \addtogroup usb_cdc_ctrl_line_state USB CDC ControlLineState bitmap | |
* @{ | |
* This section lists CDC ControlLineState bitmap. | |
* - \ref CDCControlLineState_DTR, CDCControlLineState_DTE_PRESENT | |
* - \ref CDCControlLineState_RTS, CDCControlLineState_CARRIER_ON | |
*/ | |
/** Indicates to DCE if DTE is present or not. */ | |
#define CDCControlLineState_DTE_PRESENT (1 << 0) | |
/** RS232 signal DTR: Data Terminal Ready. */ | |
#define CDCControlLineState_DTR (1 << 0) | |
/** Carrier control for half duplex modems. */ | |
#define CDCControlLineState_CARRIER_ON (1 << 1) | |
/** RS232 signal RTS: Request to send. */ | |
#define CDCControlLineState_RTS (1 << 1) | |
/** @}*/ | |
/** \addtogroup usb_cdc_stop USB CDC LineCoding StopBits | |
* @{ | |
* This section lists Stop Bits for CDC Line Coding. | |
* - \ref CDCLineCoding_ONESTOPBIT | |
* - \ref CDCLineCoding_ONE5STOPBIT | |
* - \ref CDCLineCoding_TWOSTOPBITS | |
*/ | |
/** The transmission protocol uses one stop bit. */ | |
#define CDCLineCoding_ONESTOPBIT 0 | |
/** The transmission protocol uses 1.5 stop bit. */ | |
#define CDCLineCoding_ONE5STOPBIT 1 | |
/** The transmissin protocol uses two stop bits. */ | |
#define CDCLineCoding_TWOSTOPBITS 2 | |
/** @}*/ | |
/** \addtogroup usb_cdc_parity USB CDC LineCoding ParityCheckings | |
* @{ | |
* This section lists Parity checkings for CDC Line Coding. | |
* - \ref CDCLineCoding_NOPARITY | |
* - \ref CDCLineCoding_ODDPARITY | |
* - \ref CDCLineCoding_EVENPARITY | |
* - \ref CDCLineCoding_MARKPARITY | |
* - \ref CDCLineCoding_SPACEPARITY | |
*/ | |
/** No parity checking. */ | |
#define CDCLineCoding_NOPARITY 0 | |
/** Odd parity checking. */ | |
#define CDCLineCoding_ODDPARITY 1 | |
/** Even parity checking. */ | |
#define CDCLineCoding_EVENPARITY 2 | |
/** Mark parity checking. */ | |
#define CDCLineCoding_MARKPARITY 3 | |
/** Space parity checking. */ | |
#define CDCLineCoding_SPACEPARITY 4 | |
/** @}*/ | |
/*---------------------------------------------------------------------------- | |
* Types | |
*----------------------------------------------------------------------------*/ | |
#pragma pack(1) | |
#if defined ( __CC_ARM ) /* Keil ¦ÌVision 4 */ | |
#elif defined ( __ICCARM__ ) /* IAR Ewarm */ | |
#define __attribute__(...) | |
#define __packed__ packed | |
#elif defined ( __GNUC__ ) /* GCC CS3 */ | |
#define __packed__ aligned(1) | |
#endif | |
/** | |
* \typedef CDCLineCoding | |
* \brief Format of the data returned when a GetLineCoding request is received. | |
*/ | |
typedef struct _CDCLineCoding { | |
/** Data terminal rate in bits per second. */ | |
uint32_t dwDTERate; | |
/** Number of stop bits. | |
\sa usb_cdc_stop CDC LineCoding StopBits. */ | |
uint8_t bCharFormat; | |
/** Type of parity checking used. | |
\sa usb_cdc_parity CDC LineCoding ParityCheckings. */ | |
uint8_t bParityType; | |
/** Number of data bits (5, 6, 7, 8 or 16). */ | |
uint8_t bDataBits; | |
} __attribute__ ((__packed__)) CDCLineCoding; /* GCC */ | |
#pragma pack() | |
/*---------------------------------------------------------------------------- | |
* Functions | |
*----------------------------------------------------------------------------*/ | |
extern uint8_t CDCSetControlLineStateRequest_IsDtePresent( | |
const USBGenericRequest *request); | |
extern uint8_t CDCSetControlLineStateRequest_ActivateCarrier( | |
const USBGenericRequest *request); | |
extern void CDCLineCoding_Initialize(CDCLineCoding *lineCoding, | |
uint32_t bitrate, | |
uint8_t stopbits, | |
uint8_t parity, | |
uint8_t databits); | |
/**@}*/ | |
#endif /* #define _CDCREQUESTS_H_ */ | |