4 #include "HardwareSerial.h"
5 #include "RingBuffer.h"
6 #include "pico/stdlib.h"
9 #define BUFFER_SIZE 512
22 virtual void begin(
unsigned long baudrate=PICO_DEFAULT_UART_BAUD_RATE) {
26 virtual void begin(
unsigned long baudrate, uint16_t config){
34 virtual int available(
void){
36 return buffer.available();
38 virtual int peek(
void) {
42 virtual int read(
void){
44 return buffer.read_char();
47 virtual void flush(
void) {
51 virtual size_t write(uint8_t c) {
52 size_t len = putchar(c);
57 virtual int println(){
61 virtual int println(
char const* str){
62 int len = printf(
"%s\n",str);
71 virtual operator bool(){
77 RingBufferN<BUFFER_SIZE> buffer;
80 if (buffer.available()==0){
82 while(c!=EOF && buffer.availableForStore()>0){
99 this->uart_no = uart_no;
100 this->uart = uart_no == 0 ? uart0 : uart1;
103 virtual void begin(
unsigned long baudrate=PICO_DEFAULT_UART_BAUD_RATE) {
104 begin(baudrate, SERIAL_8N1);
107 virtual void begin(
unsigned long baudrate, uint16_t config) {
108 begin(baudrate, config);
123 virtual void begin(
unsigned long baudrate, uint32_t config,
int rxPin=-1,
int txPin=-1,
bool invert=
false,
bool cts=
false,
bool rts=
false) {
124 Logger.info(
"begin", toStr(baudrate));
127 setupDefaultRxTxPins();
128 stdio_uart_init_full(uart, baudrate, tx_pin, rx_pin);
129 uart_set_hw_flow(uart, cts, rts);
137 virtual int available(
void){
138 if (buffer.available()>0){
139 return buffer.available();
141 return uart_is_readable(uart);
144 virtual int availableForWrite(
void){
145 return uart_is_writable(uart);
148 virtual int peek(
void){
150 return buffer.peek();
153 virtual int read(
void){
155 return buffer.read_char();
158 virtual size_t write(uint8_t c) {
163 inline size_t write(
const uint8_t *buffer,
size_t size) {
164 uart_write_blocking(uart, buffer, size);
169 inline size_t write(
const char * buffer,
size_t size) {
170 return write((uint8_t*) buffer, size);
173 inline size_t write(
const char * s){
174 return write((uint8_t*) s, strlen(s));
177 inline size_t write(
unsigned long n){
178 return write((uint8_t) n);
181 inline size_t write(
long n){
182 return write((uint8_t) n);
185 inline size_t write(
unsigned int n) {
186 return write((uint8_t) n);
189 inline size_t write(
int n){
190 return write((uint8_t) n);
199 using Print::println;
201 virtual operator bool() {
205 virtual void flush(
void) {
210 RingBufferN<BUFFER_SIZE> buffer;
219 if (buffer.available()==0){
220 char c = uart_getc(uart);
221 while(c!=0 && buffer.availableForStore()>0){
222 buffer.store_char(c);
227 void set_config(uint32_t config){
231 uart_set_format(uart, 5, 1,UART_PARITY_NONE);
234 uart_set_format(uart, 6, 1,UART_PARITY_NONE);
237 uart_set_format(uart, 7, 1,UART_PARITY_NONE);
240 uart_set_format(uart, 8, 1,UART_PARITY_NONE);
243 uart_set_format(uart, 5, 2,UART_PARITY_NONE);
246 uart_set_format(uart, 6, 2,UART_PARITY_NONE);
249 uart_set_format(uart, 7, 2,UART_PARITY_NONE);
252 uart_set_format(uart, 8, 2,UART_PARITY_NONE);
255 uart_set_format(uart, 5, 1,UART_PARITY_EVEN);
258 uart_set_format(uart, 6, 1,UART_PARITY_EVEN);
261 uart_set_format(uart, 7, 1,UART_PARITY_EVEN);
264 uart_set_format(uart, 8, 1,UART_PARITY_EVEN);
267 uart_set_format(uart, 5, 2,UART_PARITY_EVEN);
270 uart_set_format(uart, 6, 2,UART_PARITY_EVEN);
273 uart_set_format(uart, 7, 2,UART_PARITY_EVEN);
276 uart_set_format(uart, 8, 2,UART_PARITY_EVEN);
279 uart_set_format(uart, 5, 1,UART_PARITY_ODD);
282 uart_set_format(uart, 6, 1,UART_PARITY_ODD);
285 uart_set_format(uart, 7, 1,UART_PARITY_ODD);
288 uart_set_format(uart, 8, 1,UART_PARITY_ODD);
291 uart_set_format(uart, 5, 2,UART_PARITY_ODD);
294 uart_set_format(uart, 6, 2,UART_PARITY_ODD);
297 uart_set_format(uart, 7, 2,UART_PARITY_ODD);
300 uart_set_format(uart, 8, 2,UART_PARITY_ODD);
305 void setupDefaultRxTxPins(){
323 if (Logger.isLogging()) {
324 Logger.info(
"Using UART: ", toStr(uart_no));
325 Logger.info(
"rxPin is ", toStr(rx_pin));
326 Logger.info(
"txPin is ", toStr(tx_pin));
329 gpio_set_function(tx_pin, GPIO_FUNC_UART);
331 gpio_set_function(rx_pin, GPIO_FUNC_UART);
335 const char* toStr(
int value){
336 static char buffer[10];
337 itoa(value,buffer,10);
338 return (
const char*)buffer;
PicoDefaultSerial is using the pico default output. It is mapped to the Arduino Serial variable.
Definition: PicoHardwareSerial.h:17
Serial Stream for a defined UART. By default we use the following pins: UART0 tx/rx = gp0/gp1; UART1 ...
Definition: PicoHardwareSerial.h:93
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:123
Definition: HardwareSerial.h:88