| /* ---------------------------------------------------------------------------- |
| * 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 |
| *----------------------------------------------------------------------------*/ |
| |
| #ifdef __ICCARM__ /* IAR */ |
| #pragma pack(1) /* IAR */ |
| #define __attribute__(...) /* IAR */ |
| #endif /* IAR */ |
| |
| /** |
| * \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 */ |
| |
| #ifdef __ICCARM__ /* IAR */ |
| #pragma pack() /* IAR */ |
| #endif /* IAR */ |
| |
| /*---------------------------------------------------------------------------- |
| * 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_ */ |
| |