first commit

This commit is contained in:
Lazarewicz Julien
2025-07-22 15:27:00 +02:00
commit 6c6451c92c
205 changed files with 44418 additions and 0 deletions

View File

@@ -0,0 +1,189 @@
// ArduinoCompat/HardwareSerial.cpp
//
// Author: mikem@airspayce.com
#include <RadioHead.h>
#if (RH_PLATFORM == RH_PLATFORM_MONGOOSE_OS)
#include <mgos.h>
#include <HardwareSerial.h>
extern "C" {
static inline void mgos_sys_config_set_rh_serial_baud(int v);
static inline void mgos_sys_config_set_rh_serial_databits(int v);
static inline void mgos_sys_config_set_rh_serial_parity(int v);
static inline void mgos_sys_config_set_rh_serial_stopbits(int v);
void mgos_uart_config_set_defaults(int uart_no, struct mgos_uart_config *cfg);
bool mgos_uart_configure(int uart_no, const struct mgos_uart_config *cfg);
void mgos_uart_set_rx_enabled(int uart_no, bool enabled);
size_t mgos_uart_read_avail(int uart_no);
size_t mgos_uart_read(int uart_no, void *buf, size_t len);
size_t mgos_uart_write(int uart_no, const void *buf, size_t len);
};
// instantiate Serial objects
HardwareSerial Serial0(0);
HardwareSerial Serial1(1);
HardwareSerial Serial2(2);
/*
* Serial ports
*
* ESP8266
* The esp8266 device has two uarts (0 and 1), Uart 1 TX is typically used for debugging. No Uart 1 RX is available on the esp8266.
*
* Uart 0
* RX = GPIO3
* TX = GPIO1
*
* Uart 1
* TX = GPIO2
*
* ESP32
* The esp32 device has three uarts (0,1 and 2). Uart 0 is typically used for debugging/loading code.
*
* Uart 0
* RX = GPIO3
* TX = GPIO1
* CTS = GPIO19
* RTS = GPIO22
*
* Uart 1
* RX = GPIO25
* TX = GPIO26
* CTS = GPIO27
* RTS = GPIO13
*
* Uart 2
* RX = GPIO16
* TX = GPIO17
* CTS = GPIO14
* RTS = GPIO15
*/
///////////////////////////////////////////////////////////////
// HardwareSerial
///////////////////////////////////////////////////////////////
HardwareSerial::HardwareSerial(int uartIndex)
{
this->uartIndex=uartIndex;
}
/**
* @brief Init the serial port.
* @param baud If the baud rate is 0 or -ve then the persistent sorage value
* is used. Starting at the value in mos.yml.
*/
void HardwareSerial::begin(int baud)
{
struct mgos_uart_config ucfg;
if( mgos_sys_config_get_rh_serial_baud() != baud ) {
mgos_sys_config_set_rh_serial_baud(baud);
}
mgos_uart_config_set_defaults(this->uartIndex, &ucfg);
ucfg.baud_rate = mgos_sys_config_get_rh_serial_baud();
ucfg.num_data_bits = mgos_sys_config_get_rh_serial_databits();
ucfg.parity = (mgos_uart_parity)mgos_sys_config_get_rh_serial_parity();
ucfg.stop_bits = (mgos_uart_stop_bits)mgos_sys_config_get_rh_serial_stopbits();
mgos_uart_configure(this->uartIndex, &ucfg);
if( mgos_uart_configure(this->uartIndex, &ucfg) ) {
mgos_uart_set_rx_enabled(this->uartIndex, true);
mgos_uart_set_dispatcher(this->uartIndex, NULL, NULL);
}
#ifdef NO_ESP32_RXD_PULLUP
if( this->uartIndex == 0 ) {
mgos_gpio_setup_input(3, MGOS_GPIO_PULL_NONE);
}
else if( this->uartIndex == 1 ) {
mgos_gpio_setup_input(25, MGOS_GPIO_PULL_NONE);
}
else if( this->uartIndex == 2 ) {
mgos_gpio_setup_input(16, MGOS_GPIO_PULL_NONE);
}
#endif
}
void HardwareSerial::end()
{
mgos_uart_set_rx_enabled(this->uartIndex, false);
}
int HardwareSerial::available(void)
{
size_t reqRxByteCount=1;
//We have to read the byte because Mongoose OS requires a return
//to the RTOS in order to update the value read by mgos_uart_read_avail()
rxByteCountAvail = mgos_uart_read(this->uartIndex, &rxByte, reqRxByteCount);
return rxByteCountAvail;
}
int HardwareSerial::read(void)
{
return rxByte;
}
size_t HardwareSerial::write(uint8_t ch)
{
size_t wr_byte_count = 0;
wr_byte_count = mgos_uart_write(this->uartIndex, &ch, 1);
return wr_byte_count;
}
size_t HardwareSerial::print(char ch)
{
printf("%c", ch);
return 0;
}
size_t HardwareSerial::println(char ch)
{
printf("%c\n", ch);
return 0;
}
size_t HardwareSerial::print(unsigned char ch, int base)
{
if( base == DEC ) {
printf("%d", ch);
}
else if( base == HEX ) {
printf("%02x", ch);
}
else if( base == OCT ) {
printf("%o", ch);
}
//TODO Add binary print
return 0;
}
size_t HardwareSerial::println(unsigned char ch, int base)
{
print((unsigned int)ch, base);
printf("\n");
return 0;
}
size_t HardwareSerial::println(const char* s)
{
if( s ) {
printf("%s\n",s);
}
return 0;
}
size_t HardwareSerial::print(const char* s)
{
if( s) {
printf(s);
}
return 0;
}
#endif