UART write example (#53)
* Rename test functions * rewrite furi API, segfault * make fixes in FURI, log through FURI * add uart write example blank * implement fuprintf instead of fopencookie * add gif, blank page * UART write example description Co-authored-by: Vadim Kaushan <admin@disasm.info>
This commit is contained in:
71
wiki/examples/UART-write.md
Normal file
71
wiki/examples/UART-write.md
Normal file
@@ -0,0 +1,71 @@
|
||||
In this example we try to use FURI for interacting between user application and core subsystem.
|
||||
|
||||
First of all, we open FURI record by name "tty". This record is used for send some debug/logging info and interact with user by kind-of-TTY (like UART or USB CDC). By default on Flipper target all writes to tty record handled by debug UART (configured by `DEBUG_UART` define). On local target all writes simply prints to stdout.
|
||||
|
||||
Open record:
|
||||
|
||||
```C
|
||||
FuriRecordSubscriber* log = get_default_log();
|
||||
```
|
||||
|
||||
This is just wrapper on common FURI method:
|
||||
|
||||
```C
|
||||
furi_open("tty", false, false, NULL, NULL);
|
||||
```
|
||||
|
||||
"tty" is FURI pipe record. It means that there is no "data" hold in record, it only manage callbacks: when you call `furi_write`, all subscriber's callback is called. You can find default implementation in `core/tty_uart.c`.
|
||||
|
||||
Let's get a look at full example code:
|
||||
|
||||
```C
|
||||
#include "flipper.h"
|
||||
#include <string.h>
|
||||
#include "log.h"
|
||||
|
||||
void application_uart_write(void* p) {
|
||||
// Red led for showing progress
|
||||
GpioPin led = {.pin = GPIO_PIN_8, .port = GPIOA};
|
||||
pinMode(led, GpioModeOpenDrain);
|
||||
|
||||
// get_default_log open "tty" record
|
||||
FuriRecordSubscriber* log = get_default_log();
|
||||
|
||||
// create buffer
|
||||
const char test_string[] = "test\n";
|
||||
furi_write(log, test_string, strlen(test_string));
|
||||
|
||||
// for example, create counter and show its value
|
||||
uint8_t counter = 0;
|
||||
|
||||
while(1) {
|
||||
// continously write it to UART
|
||||
fuprintf(log, "counter: %d\n", counter);
|
||||
counter++;
|
||||
|
||||
// flash at every send
|
||||
digitalWrite(led, LOW);
|
||||
delay(50);
|
||||
digitalWrite(led, HIGH);
|
||||
|
||||
// delay with overall perion of 1s
|
||||
delay(950);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This code demonstrates two way to work with record:
|
||||
|
||||
1. Directly writes some data by `furi_write`
|
||||
2. Uses `fuprintf` wrapper on `printf`.
|
||||
|
||||
For creating application and set it to autorun, read [Blink example](Blink-app).
|
||||
|
||||
_You can also find source of this example in `applications/examples/uart_write.c` and run it by `docker-compose exec dev make -C target_lo example_uart_write`_
|
||||
|
||||

|
||||
|
||||
_Code for target F1 can be compiled by `docker-compose exec dev make -C target_f1 example_uart_write`_
|
||||
|
||||

|
||||
|
Reference in New Issue
Block a user