These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!
USBDEV/USBCDC/vcomdemo.c@0:bf7b9fba3924, 2011-03-20 (annotated)
- Committer:
- frank26080115
- Date:
- Sun Mar 20 05:38:56 2011 +0000
- Revision:
- 0:bf7b9fba3924
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
frank26080115 | 0:bf7b9fba3924 | 1 | /*---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 2 | * Name: vcomdemo.c |
frank26080115 | 0:bf7b9fba3924 | 3 | * Purpose: USB virtual COM port Demo |
frank26080115 | 0:bf7b9fba3924 | 4 | * Version: V1.20 |
frank26080115 | 0:bf7b9fba3924 | 5 | *---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 6 | * This software is supplied "AS IS" without any warranties, express, |
frank26080115 | 0:bf7b9fba3924 | 7 | * implied or statutory, including but not limited to the implied |
frank26080115 | 0:bf7b9fba3924 | 8 | * warranties of fitness for purpose, satisfactory quality and |
frank26080115 | 0:bf7b9fba3924 | 9 | * noninfringement. Keil extends you a royalty-free right to reproduce |
frank26080115 | 0:bf7b9fba3924 | 10 | * and distribute executable files created using this software for use |
frank26080115 | 0:bf7b9fba3924 | 11 | * on NXP Semiconductors LPC microcontroller devices only. Nothing else |
frank26080115 | 0:bf7b9fba3924 | 12 | * gives you the right to use this software. |
frank26080115 | 0:bf7b9fba3924 | 13 | * |
frank26080115 | 0:bf7b9fba3924 | 14 | * Copyright (c) 2009 Keil - An ARM Company. All rights reserved. |
frank26080115 | 0:bf7b9fba3924 | 15 | *---------------------------------------------------------------------------*/ |
frank26080115 | 0:bf7b9fba3924 | 16 | |
frank26080115 | 0:bf7b9fba3924 | 17 | #include "LPC17xx.h" |
frank26080115 | 0:bf7b9fba3924 | 18 | #include "lpc_types.h" |
frank26080115 | 0:bf7b9fba3924 | 19 | |
frank26080115 | 0:bf7b9fba3924 | 20 | #include "usb.h" |
frank26080115 | 0:bf7b9fba3924 | 21 | #include "usbcfg.h" |
frank26080115 | 0:bf7b9fba3924 | 22 | #include "usbhw.h" |
frank26080115 | 0:bf7b9fba3924 | 23 | #include "usbcore.h" |
frank26080115 | 0:bf7b9fba3924 | 24 | #include "cdc.h" |
frank26080115 | 0:bf7b9fba3924 | 25 | #include "cdcuser.h" |
frank26080115 | 0:bf7b9fba3924 | 26 | #include "serial.h" |
frank26080115 | 0:bf7b9fba3924 | 27 | #include "vcomdemo.h" |
frank26080115 | 0:bf7b9fba3924 | 28 | |
frank26080115 | 0:bf7b9fba3924 | 29 | /* Example group ----------------------------------------------------------- */ |
frank26080115 | 0:bf7b9fba3924 | 30 | /** @defgroup USBDEV_USBCDC USBCDC |
frank26080115 | 0:bf7b9fba3924 | 31 | * @ingroup USBDEV_Examples |
frank26080115 | 0:bf7b9fba3924 | 32 | * @{ |
frank26080115 | 0:bf7b9fba3924 | 33 | */ |
frank26080115 | 0:bf7b9fba3924 | 34 | |
frank26080115 | 0:bf7b9fba3924 | 35 | /*---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 36 | Initialises the VCOM port. |
frank26080115 | 0:bf7b9fba3924 | 37 | Call this function before using VCOM_putchar or VCOM_getchar |
frank26080115 | 0:bf7b9fba3924 | 38 | *---------------------------------------------------------------------------*/ |
frank26080115 | 0:bf7b9fba3924 | 39 | void VCOM_Init(void) { |
frank26080115 | 0:bf7b9fba3924 | 40 | #if PORT_NUM |
frank26080115 | 0:bf7b9fba3924 | 41 | CDC_Init (1); |
frank26080115 | 0:bf7b9fba3924 | 42 | #else |
frank26080115 | 0:bf7b9fba3924 | 43 | CDC_Init (0); |
frank26080115 | 0:bf7b9fba3924 | 44 | #endif |
frank26080115 | 0:bf7b9fba3924 | 45 | } |
frank26080115 | 0:bf7b9fba3924 | 46 | |
frank26080115 | 0:bf7b9fba3924 | 47 | |
frank26080115 | 0:bf7b9fba3924 | 48 | /*---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 49 | Reads character from serial port buffer and writes to USB buffer |
frank26080115 | 0:bf7b9fba3924 | 50 | *---------------------------------------------------------------------------*/ |
frank26080115 | 0:bf7b9fba3924 | 51 | void VCOM_Serial2Usb(void) { |
frank26080115 | 0:bf7b9fba3924 | 52 | static char serBuf [USB_CDC_BUFSIZE]; |
frank26080115 | 0:bf7b9fba3924 | 53 | int numBytesRead, numAvailByte; |
frank26080115 | 0:bf7b9fba3924 | 54 | |
frank26080115 | 0:bf7b9fba3924 | 55 | ser_AvailChar (&numAvailByte); |
frank26080115 | 0:bf7b9fba3924 | 56 | if (numAvailByte > 0) { |
frank26080115 | 0:bf7b9fba3924 | 57 | if (CDC_DepInEmpty) { |
frank26080115 | 0:bf7b9fba3924 | 58 | numBytesRead = ser_Read (&serBuf[0], &numAvailByte); |
frank26080115 | 0:bf7b9fba3924 | 59 | |
frank26080115 | 0:bf7b9fba3924 | 60 | CDC_DepInEmpty = 0; |
frank26080115 | 0:bf7b9fba3924 | 61 | USB_WriteEP (CDC_DEP_IN, (unsigned char *)&serBuf[0], numBytesRead); |
frank26080115 | 0:bf7b9fba3924 | 62 | } |
frank26080115 | 0:bf7b9fba3924 | 63 | } |
frank26080115 | 0:bf7b9fba3924 | 64 | |
frank26080115 | 0:bf7b9fba3924 | 65 | } |
frank26080115 | 0:bf7b9fba3924 | 66 | |
frank26080115 | 0:bf7b9fba3924 | 67 | /*---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 68 | Reads character from USB buffer and writes to serial port buffer |
frank26080115 | 0:bf7b9fba3924 | 69 | *---------------------------------------------------------------------------*/ |
frank26080115 | 0:bf7b9fba3924 | 70 | void VCOM_Usb2Serial(void) { |
frank26080115 | 0:bf7b9fba3924 | 71 | static char serBuf [32]; |
frank26080115 | 0:bf7b9fba3924 | 72 | int numBytesToRead, numBytesRead, numAvailByte; |
frank26080115 | 0:bf7b9fba3924 | 73 | |
frank26080115 | 0:bf7b9fba3924 | 74 | CDC_OutBufAvailChar (&numAvailByte); |
frank26080115 | 0:bf7b9fba3924 | 75 | if (numAvailByte > 0) { |
frank26080115 | 0:bf7b9fba3924 | 76 | numBytesToRead = numAvailByte > 32 ? 32 : numAvailByte; |
frank26080115 | 0:bf7b9fba3924 | 77 | numBytesRead = CDC_RdOutBuf (&serBuf[0], &numBytesToRead); |
frank26080115 | 0:bf7b9fba3924 | 78 | #if PORT_NUM |
frank26080115 | 0:bf7b9fba3924 | 79 | ser_Write (1, &serBuf[0], &numBytesRead); |
frank26080115 | 0:bf7b9fba3924 | 80 | #else |
frank26080115 | 0:bf7b9fba3924 | 81 | ser_Write (0, &serBuf[0], &numBytesRead); |
frank26080115 | 0:bf7b9fba3924 | 82 | #endif |
frank26080115 | 0:bf7b9fba3924 | 83 | } |
frank26080115 | 0:bf7b9fba3924 | 84 | |
frank26080115 | 0:bf7b9fba3924 | 85 | } |
frank26080115 | 0:bf7b9fba3924 | 86 | |
frank26080115 | 0:bf7b9fba3924 | 87 | |
frank26080115 | 0:bf7b9fba3924 | 88 | /*---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 89 | checks the serial state and initiates notification |
frank26080115 | 0:bf7b9fba3924 | 90 | *---------------------------------------------------------------------------*/ |
frank26080115 | 0:bf7b9fba3924 | 91 | void VCOM_CheckSerialState (void) { |
frank26080115 | 0:bf7b9fba3924 | 92 | unsigned short temp; |
frank26080115 | 0:bf7b9fba3924 | 93 | static unsigned short serialState; |
frank26080115 | 0:bf7b9fba3924 | 94 | |
frank26080115 | 0:bf7b9fba3924 | 95 | temp = CDC_GetSerialState(); |
frank26080115 | 0:bf7b9fba3924 | 96 | if (serialState != temp) { |
frank26080115 | 0:bf7b9fba3924 | 97 | serialState = temp; |
frank26080115 | 0:bf7b9fba3924 | 98 | CDC_NotificationIn(); // send SERIAL_STATE notification |
frank26080115 | 0:bf7b9fba3924 | 99 | } |
frank26080115 | 0:bf7b9fba3924 | 100 | } |
frank26080115 | 0:bf7b9fba3924 | 101 | |
frank26080115 | 0:bf7b9fba3924 | 102 | /*---------------------------------------------------------------------------- |
frank26080115 | 0:bf7b9fba3924 | 103 | Main Program |
frank26080115 | 0:bf7b9fba3924 | 104 | *---------------------------------------------------------------------------*/ |
frank26080115 | 0:bf7b9fba3924 | 105 | int main (void) { |
frank26080115 | 0:bf7b9fba3924 | 106 | |
frank26080115 | 0:bf7b9fba3924 | 107 | VCOM_Init(); // VCOM Initialization |
frank26080115 | 0:bf7b9fba3924 | 108 | |
frank26080115 | 0:bf7b9fba3924 | 109 | USB_Init(); // USB Initialization |
frank26080115 | 0:bf7b9fba3924 | 110 | USB_Connect(TRUE); // USB Connect |
frank26080115 | 0:bf7b9fba3924 | 111 | |
frank26080115 | 0:bf7b9fba3924 | 112 | while (!USB_Configuration) ; // wait until USB is configured |
frank26080115 | 0:bf7b9fba3924 | 113 | |
frank26080115 | 0:bf7b9fba3924 | 114 | while (1) { // Loop forever |
frank26080115 | 0:bf7b9fba3924 | 115 | VCOM_Serial2Usb(); // read serial port and initiate USB event |
frank26080115 | 0:bf7b9fba3924 | 116 | VCOM_CheckSerialState(); |
frank26080115 | 0:bf7b9fba3924 | 117 | VCOM_Usb2Serial(); |
frank26080115 | 0:bf7b9fba3924 | 118 | } // end while |
frank26080115 | 0:bf7b9fba3924 | 119 | } // end main () |
frank26080115 | 0:bf7b9fba3924 | 120 | |
frank26080115 | 0:bf7b9fba3924 | 121 | /* |
frank26080115 | 0:bf7b9fba3924 | 122 | * @} |
frank26080115 | 0:bf7b9fba3924 | 123 | */ |