From baafb290ada10c7b8ba0b4b31fb4c5ec8282be88 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Fri, 13 Feb 2015 19:04:24 +0000
Subject: [PATCH] stmhal: Add uart.sendbreak() method, to send a break
 condition.

---
 docs/library/pyb.UART.rst | 6 ++++++
 stmhal/qstrdefsport.h     | 1 +
 stmhal/uart.c             | 9 +++++++++
 tests/pyb/uart.py         | 3 +++
 4 files changed, 19 insertions(+)

diff --git a/docs/library/pyb.UART.rst b/docs/library/pyb.UART.rst
index a636e65e3..257a9f281 100644
--- a/docs/library/pyb.UART.rst
+++ b/docs/library/pyb.UART.rst
@@ -134,3 +134,9 @@ Methods
 
    Write a single character on the bus.  ``char`` is an integer to write.
    Return value: ``None``.
+
+.. method:: uart.sendbreak()
+
+   Send a break condition on the bus.  This drives the bus low for a duration
+   of 13 bits.
+   Return value: ``None``.
diff --git a/stmhal/qstrdefsport.h b/stmhal/qstrdefsport.h
index 3aecb7acf..85ab20675 100644
--- a/stmhal/qstrdefsport.h
+++ b/stmhal/qstrdefsport.h
@@ -186,6 +186,7 @@ Q(any)
 Q(writechar)
 Q(readchar)
 Q(readinto)
+Q(sendbreak)
 Q(RTS)
 Q(CTS)
 
diff --git a/stmhal/uart.c b/stmhal/uart.c
index 23eba45b8..d888358b3 100644
--- a/stmhal/uart.c
+++ b/stmhal/uart.c
@@ -614,6 +614,14 @@ STATIC mp_obj_t pyb_uart_readchar(mp_obj_t self_in) {
 }
 STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_uart_readchar_obj, pyb_uart_readchar);
 
+// uart.sendbreak()
+STATIC mp_obj_t pyb_uart_sendbreak(mp_obj_t self_in) {
+    pyb_uart_obj_t *self = self_in;
+    self->uart.Instance->CR1 |= USART_CR1_SBK;
+    return mp_const_none;
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_uart_sendbreak_obj, pyb_uart_sendbreak);
+
 STATIC const mp_map_elem_t pyb_uart_locals_dict_table[] = {
     // instance methods
 
@@ -634,6 +642,7 @@ STATIC const mp_map_elem_t pyb_uart_locals_dict_table[] = {
 
     { MP_OBJ_NEW_QSTR(MP_QSTR_writechar), (mp_obj_t)&pyb_uart_writechar_obj },
     { MP_OBJ_NEW_QSTR(MP_QSTR_readchar), (mp_obj_t)&pyb_uart_readchar_obj },
+    { MP_OBJ_NEW_QSTR(MP_QSTR_sendbreak), (mp_obj_t)&pyb_uart_sendbreak_obj },
 
     // class constants
     { MP_OBJ_NEW_QSTR(MP_QSTR_RTS), MP_OBJ_NEW_SMALL_INT(UART_HWCONTROL_RTS) },
diff --git a/tests/pyb/uart.py b/tests/pyb/uart.py
index 288022fea..c83d18349 100644
--- a/tests/pyb/uart.py
+++ b/tests/pyb/uart.py
@@ -12,3 +12,6 @@ print(uart.any())
 print(uart.write('123'))
 print(uart.write(b'abcd'))
 print(uart.writechar(1))
+
+# make sure this method exists
+uart.sendbreak()
-- 
GitLab