4 #include "HardwareSerial.h"
5 #include "RingBuffer.h"
6 #include "pico/stdlib.h"
9 #define BUFFER_SIZE 512
23 virtual void begin(
unsigned long baudrate=PICO_DEFAULT_UART_BAUD_RATE) {
27 virtual void begin(
unsigned long baudrate, uint16_t config){
35 virtual int available(
void){
37 return buffer.available();
39 virtual int peek(
void) {
43 virtual int read(
void){
48 return buffer.read_char();
51 virtual void flush(
void) {
55 virtual size_t write(uint8_t c) {
56 size_t len = putchar(c);
61 virtual int println(){
65 virtual int println(
char const* str){
66 int len = printf(
"%s\n",str);
75 virtual operator bool(){
81 RingBufferN<BUFFER_SIZE> buffer;
85 if (buffer.available()==0){
87 int c = getchar_timeout_us(1000);
88 while(c!=PICO_ERROR_TIMEOUT && buffer.availableForStore()>0){
90 c = getchar_timeout_us(1000);
108 this->uart_no = uart_no;
109 this->uart = uart_no == 0 ? uart0 : uart1;
112 virtual void begin(
unsigned long baudrate=PICO_DEFAULT_UART_BAUD_RATE) {
113 begin(baudrate, SERIAL_8N1);
116 virtual void begin(
unsigned long baudrate, uint16_t config) {
117 begin(baudrate, config);
132 virtual void begin(
unsigned long baudrate, uint32_t config,
int rxPin=-1,
int txPin=-1,
bool invert=
false,
bool cts=
false,
bool rts=
false) {
133 Logger.info(
"begin", toStr(baudrate));
136 setupDefaultRxTxPins();
137 stdio_uart_init_full(uart, baudrate, tx_pin, rx_pin);
138 uart_set_hw_flow(uart, cts, rts);
148 virtual int available(
void){
149 if (buffer.available()>0){
150 return buffer.available();
152 return uart_is_readable(uart);
155 virtual int availableForWrite(
void){
156 return uart_is_writable(uart);
159 virtual int peek(
void){
161 return buffer.peek();
164 virtual int read(
void){
166 return buffer.read_char();
169 virtual size_t write(uint8_t c) {
174 inline size_t write(
const uint8_t *buffer,
size_t size) {
175 uart_write_blocking(uart, buffer, size);
180 inline size_t write(
const char * buffer,
size_t size) {
181 return write((uint8_t*) buffer, size);
184 inline size_t write(
const char * s){
185 return write((uint8_t*) s, strlen(s));
188 inline size_t write(
unsigned long n){
189 return write((uint8_t) n);
192 inline size_t write(
long n){
193 return write((uint8_t) n);
196 inline size_t write(
unsigned int n) {
197 return write((uint8_t) n);
200 inline size_t write(
int n){
201 return write((uint8_t) n);
210 using Print::println;
213 virtual void flush(
void) {
216 virtual operator bool(){
222 RingBufferN<BUFFER_SIZE> buffer;
232 if (buffer.available()==0){
233 while(uart_is_readable(uart) && buffer.availableForStore()>0) {
234 char c = uart_getc(uart);
235 buffer.store_char(c);
240 void set_config(uint32_t config){
244 uart_set_format(uart, 5, 1,UART_PARITY_NONE);
247 uart_set_format(uart, 6, 1,UART_PARITY_NONE);
250 uart_set_format(uart, 7, 1,UART_PARITY_NONE);
253 uart_set_format(uart, 8, 1,UART_PARITY_NONE);
256 uart_set_format(uart, 5, 2,UART_PARITY_NONE);
259 uart_set_format(uart, 6, 2,UART_PARITY_NONE);
262 uart_set_format(uart, 7, 2,UART_PARITY_NONE);
265 uart_set_format(uart, 8, 2,UART_PARITY_NONE);
268 uart_set_format(uart, 5, 1,UART_PARITY_EVEN);
271 uart_set_format(uart, 6, 1,UART_PARITY_EVEN);
274 uart_set_format(uart, 7, 1,UART_PARITY_EVEN);
277 uart_set_format(uart, 8, 1,UART_PARITY_EVEN);
280 uart_set_format(uart, 5, 2,UART_PARITY_EVEN);
283 uart_set_format(uart, 6, 2,UART_PARITY_EVEN);
286 uart_set_format(uart, 7, 2,UART_PARITY_EVEN);
289 uart_set_format(uart, 8, 2,UART_PARITY_EVEN);
292 uart_set_format(uart, 5, 1,UART_PARITY_ODD);
295 uart_set_format(uart, 6, 1,UART_PARITY_ODD);
298 uart_set_format(uart, 7, 1,UART_PARITY_ODD);
301 uart_set_format(uart, 8, 1,UART_PARITY_ODD);
304 uart_set_format(uart, 5, 2,UART_PARITY_ODD);
307 uart_set_format(uart, 6, 2,UART_PARITY_ODD);
310 uart_set_format(uart, 7, 2,UART_PARITY_ODD);
313 uart_set_format(uart, 8, 2,UART_PARITY_ODD);
318 void setupDefaultRxTxPins(){
336 if (Logger.isLogging()) {
337 Logger.info(
"Using UART: ", toStr(uart_no));
338 Logger.info(
"rxPin is ", toStr(rx_pin));
339 Logger.info(
"txPin is ", toStr(tx_pin));
342 gpio_set_function(tx_pin, GPIO_FUNC_UART);
344 gpio_set_function(rx_pin, GPIO_FUNC_UART);
348 const char* toStr(
int value){
349 static char buffer[10];
350 itoa(value,buffer,10);
351 return (
const char*)buffer;
PicoDefaultSerial is using the pico default output. It is mapped to the Arduino Serial variable.
Definition: PicoHardwareSerial.h:18
Serial Stream for a defined UART. By default we use the following pins: UART0 tx/rx = gp0/gp1; UART1 ...
Definition: PicoHardwareSerial.h:102
virtual void begin(unsigned long baudrate, uint32_t config, int rxPin=-1, int txPin=-1, bool invert=false, bool cts=false, bool rts=false)
Initialization to output to UART.
Definition: PicoHardwareSerial.h:132
Definition: HardwareSerial.h:88