2 * Copyright (c) 2015, Olivier MATZ <zer0@droids-corp.org>
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the University of California, Berkeley nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
16 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 #include <avr/interrupt.h>
30 #include <avr/pgmspace.h>
31 #include <util/delay.h>
37 #include <ucg_cirbuf.h>
39 #include <ucg_avr_uart.h>
44 static char rx_buf[128];
45 static struct ucg_cirbuf rx_cirbuf;
46 static char tx_buf[128];
47 static struct ucg_cirbuf tx_cirbuf;
48 /* generic uart struct */
49 static struct ucg_uart main_uart;
50 /* avr-specific uart struct */
51 static struct ucg_avr_uart avr_uart_data = {
68 static int std_send(char c, FILE *f)
71 ucg_uart_send(&main_uart, c, WAIT);
76 static int std_recv(FILE *f)
81 c = ucg_uart_recv(&main_uart, NOWAIT);
90 ucg_uart_rx_intr(&main_uart);
93 SIGNAL(USART_UDRE_vect)
95 ucg_uart_tx_intr(&main_uart);
101 struct ucg_uart_config conf;
103 ret = ucg_uart_init(&main_uart, &avr_uart_ops, &avr_uart_data,
104 &rx_cirbuf, rx_buf, sizeof(rx_buf),
105 &tx_cirbuf, tx_buf, sizeof(tx_buf));
108 ucg_uart_getconf(&main_uart, &conf);
109 conf.baudrate = 57600;
110 ret = ucg_uart_setconf(&main_uart, &conf);
114 fdevopen(std_send, std_recv);