blob: 6d3f870d7dfba681d060245db717b67c9b168346 [file] [log] [blame]
/* ----------------------------------------------------------------------------
* 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_ */