forked from TD-er/ESPEasySerial
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathESPEasySerialType.cpp
115 lines (92 loc) · 3.41 KB
/
ESPEasySerialType.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "ESPEasySerialType.h"
#ifndef ESP32_SER0_TX
# define ESP32_SER0_TX 1
#endif // ifndef ESP32_SER0_TX
#ifndef ESP32_SER0_RX
# define ESP32_SER0_RX 3
#endif // ifndef ESP32_SER0_RX
#ifndef ESP32_SER1_TX
# define ESP32_SER1_TX 15
#endif // ifndef ESP32_SER1_TX
#ifndef ESP32_SER1_RX
# define ESP32_SER1_RX 13
#endif // ifndef ESP32_SER1_RX
#ifndef ESP32_SER2_TX
# define ESP32_SER2_TX 17
#endif // ifndef ESP32_SER2_TX
#ifndef ESP32_SER2_RX
# define ESP32_SER2_RX 16
#endif // ifndef ESP32_SER2_RX
bool ESPeasySerialType::getSerialTypePins(ESPEasySerialPort serType, int& rxPin, int& txPin) {
rxPin = -1;
txPin = -1;
switch (serType) {
#ifdef ESP32
case ESPEasySerialPort::serial0: rxPin = ESP32_SER0_RX; txPin = ESP32_SER0_TX; return true;
case ESPEasySerialPort::serial1: rxPin = ESP32_SER1_RX; txPin = ESP32_SER1_TX; return true;
case ESPEasySerialPort::serial2: rxPin = ESP32_SER2_RX; txPin = ESP32_SER2_TX; return true;
#endif // ifdef ESP32
#ifdef ESP8266
case ESPEasySerialPort::serial0: rxPin = 3; txPin = 1; return true;
case ESPEasySerialPort::serial0_swap: rxPin = 13; txPin = 15; return true;
case ESPEasySerialPort::serial1: rxPin = -1; txPin = 2; return true;
# ifndef DISABLE_SOFTWARE_SERIAL
case ESPEasySerialPort::software: rxPin = 14; txPin = 12; return true;
# endif // DISABLE_SOFTWARE_SERIAL
#endif // ifdef ESP8266
case ESPEasySerialPort::sc16is752: rxPin = -1; txPin = -1; return true;
default:
break;
}
return false;
}
#ifdef ESP32
ESPEasySerialPort ESPeasySerialType::getSerialType(ESPEasySerialPort typeHint, int receivePin, int transmitPin) {
if (typeHint != ESPEasySerialPort::not_set) {
return typeHint;
}
if ((receivePin == ESP32_SER0_RX) && (transmitPin == ESP32_SER0_TX)) {
return ESPEasySerialPort::serial0; // UART0
}
// Serial1 on ESP32 uses default pins connected to flash
// So must make sure to set them to other pins.
if ((receivePin == ESP32_SER1_RX) && (transmitPin == ESP32_SER1_TX)) {
return ESPEasySerialPort::serial1; // UART1
}
if ((receivePin == ESP32_SER2_RX) && (transmitPin == ESP32_SER2_TX)) {
return ESPEasySerialPort::serial2; // UART2
}
if ((receivePin >= 0x48) && (receivePin <= 0x57)) {
return ESPEasySerialPort::sc16is752; // I2C address range of SC16IS752
}
return ESPEasySerialPort::MAX_SERIAL_TYPE;
}
#endif // ESP32
#ifdef ESP8266
ESPEasySerialPort ESPeasySerialType::getSerialType(ESPEasySerialPort typeHint, int receivePin, int transmitPin) {
if (typeHint != ESPEasySerialPort::not_set) {
return typeHint;
}
if ((receivePin == 3) && (transmitPin == 1)) {
return ESPEasySerialPort::serial0; // UART0
}
// ESP8266
if ((receivePin == 13) && (transmitPin == 15)) {
return ESPEasySerialPort::serial0_swap; // UART0 remapped using Serial.swap()
}
if ((receivePin == -1) && (transmitPin == 2)) {
// Serial1 uses UART1, TX pin is GPIO2.
// UART1 can not be used to receive data because normally
// it's RX pin is occupied for flash chip connection.
return ESPEasySerialPort::serial1;
}
if ((receivePin >= 0x48) && (receivePin <= 0x57)) {
return ESPEasySerialPort::sc16is752; // I2C address range of SC16IS752
}
if ((receivePin == -1) && (transmitPin == -1)) {
// No pins set, so no serial type
return ESPEasySerialPort::MAX_SERIAL_TYPE;
}
return ESPEasySerialPort::software;
}
#endif // ESP8266