Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
017b4637
Commit
017b4637
authored
Dec 11, 2016
by
Philip Gladstone
Committed by
Marcel Stör
Dec 11, 2016
Browse files
Adds uart.getconfig(0) to get the current uart parameters (#1658)
parent
12a7b1c2
Changes
6
Hide whitespace changes
Inline
Side-by-side
app/driver/uart.c
View file @
017b4637
...
...
@@ -356,3 +356,18 @@ uart_setup(uint8 uart_no)
void
ICACHE_FLASH_ATTR
uart_set_alt_output_uart0
(
void
(
*
fn
)(
char
))
{
alt_uart0_tx
=
fn
;
}
UartConfig
ICACHE_FLASH_ATTR
uart_get_config
(
uint8
uart_no
)
{
UartConfig
config
;
config
.
baut_rate
=
UART_CLK_FREQ
/
READ_PERI_REG
(
UART_CLKDIV
(
uart_no
));
uint32_t
conf
=
READ_PERI_REG
(
UART_CONF0
(
uart_no
));
config
.
exist_parity
=
(
conf
>>
UART_PARITY_EN_S
)
&
UART_PARITY_EN_M
;
config
.
parity
=
(
conf
>>
UART_PARITY_S
)
&
UART_PARITY_M
;
config
.
stop_bits
=
(
conf
>>
UART_STOP_BIT_NUM_S
)
&
UART_STOP_BIT_NUM
;
config
.
data_bits
=
(
conf
>>
UART_BIT_NUM_S
)
&
UART_BIT_NUM
;
return
config
;
}
app/include/driver/uart.h
View file @
017b4637
...
...
@@ -101,7 +101,16 @@ typedef struct {
int
buff_uart_no
;
//indicate which uart use tx/rx buffer
}
UartDevice
;
typedef
struct
{
UartBautRate
baut_rate
;
UartBitsNum4Char
data_bits
;
UartExistParity
exist_parity
;
UartParityMode
parity
;
UartStopBitsNum
stop_bits
;
}
UartConfig
;
void
uart_init
(
UartBautRate
uart0_br
,
UartBautRate
uart1_br
,
os_signal_t
sig_input
,
uint8
*
flag_input
);
UartConfig
uart_get_config
(
uint8
uart_no
);
void
uart0_alt
(
uint8
on
);
void
uart0_sendStr
(
const
char
*
str
);
void
uart0_putc
(
const
char
c
);
...
...
app/modules/uart.c
View file @
017b4637
...
...
@@ -27,7 +27,7 @@ bool uart_on_data_cb(const char *buf, size_t len){
uint16_t
need_len
=
0
;
int16_t
end_char
=
-
1
;
// Lua: uart.on("method", [number/char], function, [run_input])
static
int
uart_on
(
lua_State
*
L
)
static
int
l_
uart_on
(
lua_State
*
L
)
{
size_t
sl
,
el
;
int32_t
run
=
1
;
...
...
@@ -89,13 +89,14 @@ static int uart_on( lua_State* L )
bool
uart0_echo
=
true
;
// Lua: actualbaud = setup( id, baud, databits, parity, stopbits, echo )
static
int
uart_setup
(
lua_State
*
L
)
static
int
l_
uart_setup
(
lua_State
*
L
)
{
u
nsigned
id
,
databits
,
parity
,
stopbits
,
echo
=
1
;
u
32
baud
,
res
;
u
int32_t
id
,
databits
,
parity
,
stopbits
,
echo
=
1
;
u
int32_t
baud
,
res
;
id
=
luaL_checkinteger
(
L
,
1
);
MOD_CHECK_ID
(
uart
,
id
);
baud
=
luaL_checkinteger
(
L
,
2
);
databits
=
luaL_checkinteger
(
L
,
3
);
parity
=
luaL_checkinteger
(
L
,
4
);
...
...
@@ -113,8 +114,26 @@ static int uart_setup( lua_State* L )
return
1
;
}
// uart.getconfig(id)
static
int
l_uart_getconfig
(
lua_State
*
L
)
{
uint32_t
id
,
databits
,
parity
,
stopbits
;
uint32_t
baud
;
id
=
luaL_checkinteger
(
L
,
1
);
MOD_CHECK_ID
(
uart
,
id
);
platform_uart_get_config
(
id
,
&
baud
,
&
databits
,
&
parity
,
&
stopbits
);
lua_pushinteger
(
L
,
baud
);
lua_pushinteger
(
L
,
databits
);
lua_pushinteger
(
L
,
parity
);
lua_pushinteger
(
L
,
stopbits
);
return
4
;
}
// Lua: alt( set )
static
int
uart_alt
(
lua_State
*
L
)
static
int
l_
uart_alt
(
lua_State
*
L
)
{
unsigned
set
;
...
...
@@ -125,7 +144,7 @@ static int uart_alt( lua_State* L )
}
// Lua: write( id, string1, [string2], ..., [stringn] )
static
int
uart_write
(
lua_State
*
L
)
static
int
l_
uart_write
(
lua_State
*
L
)
{
int
id
;
const
char
*
buf
;
...
...
@@ -156,10 +175,11 @@ static int uart_write( lua_State* L )
// Module function map
static
const
LUA_REG_TYPE
uart_map
[]
=
{
{
LSTRKEY
(
"setup"
),
LFUNCVAL
(
uart_setup
)
},
{
LSTRKEY
(
"write"
),
LFUNCVAL
(
uart_write
)
},
{
LSTRKEY
(
"on"
),
LFUNCVAL
(
uart_on
)
},
{
LSTRKEY
(
"alt"
),
LFUNCVAL
(
uart_alt
)
},
{
LSTRKEY
(
"setup"
),
LFUNCVAL
(
l_uart_setup
)
},
{
LSTRKEY
(
"getconfig"
),
LFUNCVAL
(
l_uart_getconfig
)
},
{
LSTRKEY
(
"write"
),
LFUNCVAL
(
l_uart_write
)
},
{
LSTRKEY
(
"on"
),
LFUNCVAL
(
l_uart_on
)
},
{
LSTRKEY
(
"alt"
),
LFUNCVAL
(
l_uart_alt
)
},
{
LSTRKEY
(
"STOPBITS_1"
),
LNUMVAL
(
PLATFORM_UART_STOPBITS_1
)
},
{
LSTRKEY
(
"STOPBITS_1_5"
),
LNUMVAL
(
PLATFORM_UART_STOPBITS_1_5
)
},
{
LSTRKEY
(
"STOPBITS_2"
),
LNUMVAL
(
PLATFORM_UART_STOPBITS_2
)
},
...
...
app/platform/platform.c
View file @
017b4637
...
...
@@ -32,6 +32,26 @@ static struct gpio_hook platform_gpio_hook;
#endif
#endif
static
const
int
uart_bitrates
[]
=
{
BIT_RATE_300
,
BIT_RATE_600
,
BIT_RATE_1200
,
BIT_RATE_2400
,
BIT_RATE_4800
,
BIT_RATE_9600
,
BIT_RATE_19200
,
BIT_RATE_38400
,
BIT_RATE_57600
,
BIT_RATE_74880
,
BIT_RATE_115200
,
BIT_RATE_230400
,
BIT_RATE_256000
,
BIT_RATE_460800
,
BIT_RATE_921600
,
BIT_RATE_1843200
,
BIT_RATE_3686400
};
int
platform_init
()
{
// Setup the various forward and reverse mappings for the pins
...
...
@@ -410,6 +430,64 @@ uint32_t platform_uart_setup( unsigned id, uint32_t baud, int databits, int pari
return
baud
;
}
void
platform_uart_get_config
(
unsigned
id
,
uint32_t
*
baudp
,
uint32_t
*
databitsp
,
uint32_t
*
parityp
,
uint32_t
*
stopbitsp
)
{
UartConfig
config
=
uart_get_config
(
id
);
int
i
;
int
offset
=
config
.
baut_rate
;
for
(
i
=
0
;
i
<
sizeof
(
uart_bitrates
)
/
sizeof
(
uart_bitrates
[
0
]);
i
++
)
{
int
diff
=
config
.
baut_rate
-
uart_bitrates
[
i
];
if
(
diff
<
0
)
{
diff
=
-
diff
;
}
if
(
diff
<
offset
)
{
offset
=
diff
;
*
baudp
=
uart_bitrates
[
i
];
}
}
switch
(
config
.
data_bits
)
{
case
FIVE_BITS
:
*
databitsp
=
5
;
break
;
case
SIX_BITS
:
*
databitsp
=
6
;
break
;
case
SEVEN_BITS
:
*
databitsp
=
7
;
break
;
case
EIGHT_BITS
:
default:
*
databitsp
=
8
;
break
;
}
switch
(
config
.
stop_bits
)
{
case
ONE_HALF_STOP_BIT
:
*
stopbitsp
=
PLATFORM_UART_STOPBITS_1_5
;
break
;
case
TWO_STOP_BIT
:
*
stopbitsp
=
PLATFORM_UART_STOPBITS_2
;
break
;
default:
*
stopbitsp
=
PLATFORM_UART_STOPBITS_1
;
break
;
}
if
(
config
.
exist_parity
==
STICK_PARITY_DIS
)
{
*
parityp
=
PLATFORM_UART_PARITY_NONE
;
}
else
if
(
config
.
parity
==
EVEN_BITS
)
{
*
parityp
=
PLATFORM_UART_PARITY_EVEN
;
}
else
{
*
parityp
=
PLATFORM_UART_PARITY_ODD
;
}
}
// if set=1, then alternate serial output pins are used. (15=rx, 13=tx)
void
platform_uart_alt
(
int
set
)
{
...
...
app/platform/platform.h
View file @
017b4637
...
...
@@ -7,6 +7,7 @@
#include "c_types.h"
#include "driver/pwm.h"
#include "driver/uart.h"
#include "task/task.h"
// Error / status codes
...
...
@@ -161,6 +162,7 @@ int platform_s_uart_recv( unsigned id, timer_data_type timeout );
int
platform_uart_set_flow_control
(
unsigned
id
,
int
type
);
int
platform_s_uart_set_flow_control
(
unsigned
id
,
int
type
);
void
platform_uart_alt
(
int
set
);
void
platform_uart_get_config
(
unsigned
id
,
uint32_t
*
baudp
,
uint32_t
*
databitsp
,
uint32_t
*
parityp
,
uint32_t
*
stopbitsp
);
// *****************************************************************************
// PWM subsection
...
...
docs/en/modules/uart.md
View file @
017b4637
...
...
@@ -67,7 +67,7 @@ end, 0)
## uart.setup()
(Re-)configures the communication parameters of the UART.
(Re-)configures the communication parameters of the UART.
#### Syntax
`uart.setup(id, baud, databits, parity, stopbits, echo)`
...
...
@@ -89,6 +89,32 @@ configured baud rate (number)
uart
.
setup
(
0
,
9600
,
8
,
uart
.
PARITY_NONE
,
uart
.
STOPBITS_1
,
1
)
```
## uart.getconfig()
Returns the current configuration parameters of the UART.
#### Syntax
`uart.getconfig(id)`
#### Parameters
-
`id`
always zero, only one uart supported
#### Returns
Four values as follows:
-
`baud`
one of 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 74880, 115200, 230400, 256000, 460800, 921600, 1843200, 3686400
-
`databits`
one of 5, 6, 7, 8
-
`parity`
`uart.PARITY_NONE`
,
`uart.PARITY_ODD`
, or
`uart.PARITY_EVEN`
-
`stopbits`
`uart.STOPBITS_1`
,
`uart.STOPBITS_1_5`
, or
`uart.STOPBITS_2`
#### Example
```
lua
print
(
uart
.
getconfig
(
0
))
-- prints 9600 8 0 1 for 9600, 8N1
```
## uart.write()
Write string or byte to the UART.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment