grbl-LPC-CoreXY/VCOM_lib/usbSerial.h

138 lines
4.8 KiB
C
Raw Permalink Normal View History

2017-01-10 00:47:25 +01:00
//#define POLLED_USBSERIAL TRUE
/*
LPCUSB, an USB device driver for LPC microcontrollers
Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR 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.
*/
/*
Minimal implementation of a USB serial port, using the CDC class.
This example application simply echoes everything it receives right back
to the host.
Windows:
Extract the usbser.sys file from .cab file in C:\WINDOWS\Driver Cache\i386
and store it somewhere (C:\temp is a good place) along with the usbser.inf
file. Then plug in the LPC176x and direct windows to the usbser driver.
Windows then creates an extra COMx port that you can open in a terminal
program, like hyperterminal.
Linux:
The device should be recognised automatically by the cdc_acm driver,
which creates a /dev/ttyACMx device file that acts just like a regular
serial port.
*/
/* Modified by Sagar G V, Feb 2011
Used the USB CDC example to create a library. Added the following functions
void VCOM_puts(const char* str); //writes a null terminated string.
void VCOM_putc(char c); // writes a character.
void VCOM_putHex(uint8_t hex); // writes 0x.. hex value on the terminal.
char VCOM_getc(); // returns character entered in the terminal. blocking function
void VCOM_gets(char* str); // returns a string. '\r' or '\n' will terminate character collection.
char VCOM_getc_echo(); // returns character entered and echoes the same back.
void VCOM_gets_echo(char *str); // gets string terminated in '\r' or '\n' and echoes back the same.
*/
2017-01-10 01:58:14 +01:00
/* Modified by Todd Fleming (TBF), 2017
Replaced read polling API with callback API
*/
2017-01-10 00:47:25 +01:00
#ifndef __USB_SERIAL_H__
#define __USB_SERIAL_H__
#ifdef __cplusplus
2017-01-10 01:58:14 +01:00
//extern "C" {
2017-01-10 00:47:25 +01:00
#endif
#include <stdarg.h>
#include "LPC17xx.h"
#include "usbapi.h"
#include "usbdebug.h"
#define BAUD_RATE 115200
#define INT_IN_EP 0x81
#define BULK_OUT_EP 0x05
#define BULK_IN_EP 0x82
#define MAX_PACKET_SIZE 64
#define LE_WORD(x) ((x)&0xFF),((x)>>8)
// CDC definitions
#define CS_INTERFACE 0x24
#define CS_ENDPOINT 0x25
#define SET_LINE_CODING 0x20
#define GET_LINE_CODING 0x21
#define SET_CONTROL_LINE_STATE 0x22
#include "serial_fifo.h"
2017-01-16 20:20:52 +01:00
// Receives line state. Called by an interrupt.
typedef void UsbSerialLineStateCallback(bool dtr, bool rts);
2017-01-10 01:58:14 +01:00
// Receives serial data. Called by an interrupt.
typedef void UsbSerialReadCallback(const U8* data, unsigned len);
2017-01-10 00:47:25 +01:00
2017-01-16 20:20:52 +01:00
int usbSerialInit(UsbSerialLineStateCallback* usbSerialLineStateCallback, UsbSerialReadCallback* usbSerialReadCallback); // run once in main b4 main loop starts.
2017-01-10 00:47:25 +01:00
/*
Writes one character to VCOM port
@param [in] c character to write
@returns character written, or EOF if character could not be written
*/
int VCOM_putchar(int c);
/**
Reads one character from VCOM port
@returns character read, or EOF if character could not be read
*/
2017-01-10 01:58:14 +01:00
//int VCOM_getchar(void);
2017-01-10 00:47:25 +01:00
void VCOM_puts(const char* str); //writes a null terminated string.
void VCOM_putc(char c); // writes a character.
void VCOM_putHex(uint8_t hex); // writes 0x.. hex value on the terminal.
2017-01-10 01:58:14 +01:00
//char VCOM_getc(); // returns character entered in the terminal. blocking function
//void VCOM_gets(char* str); // returns a string. '\r' or '\n' will terminate character collection.
//char VCOM_getc_echo(); // returns character entered and echoes the same back.
//void VCOM_gets_echo(char *str); // gets string terminated in '\r' or '\n' and echoes back the same.
2017-01-10 00:47:25 +01:00
void VCOM_printf(const char* str, ...); // Original code by Elm_CHaN. Modified by Martin Thomas
#ifdef __cplusplus
2017-01-10 01:58:14 +01:00
//}
2017-01-10 00:47:25 +01:00
#endif
#endif