Skip to content

Commit c362465

Browse files
committed
ywf: console
1 parent 1a54b07 commit c362465

12 files changed

Lines changed: 75 additions & 52 deletions

File tree

examples/i2c-usb-bridge/main.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ uint8_t send_buf[DATA_LEN];
1414

1515
static int getch(void) {
1616
uint8_t buffer[1];
17-
int number_read;
17+
uint32_t number_read;
1818
libtocksync_console_read(buffer, 1, &number_read);
1919
return buffer[0];
2020
}
2121

22-
static int putnstr(char* str, int len) {
23-
int number_written;
22+
static uint32_t putnstr(char* str, int len) {
23+
uint32_t number_written;
2424
libtocksync_console_read((uint8_t*) str, len, &number_written);
2525
return number_written;
2626
}

examples/tests/console/console/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
static int getch(void) {
99
uint8_t buffer[1];
10-
int number_read;
10+
uint32_t number_read;
1111
libtocksync_console_read(buffer, 1, &number_read);
1212
return buffer[0];
1313
}

examples/tests/console/console_recv_long/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
uint8_t buf[100];
66

77
int main(void) {
8-
int number_read;
8+
uint32_t number_read;
99
int ret = libtocksync_console_read(buf, 61, &number_read);
1010
if (ret != RETURNCODE_SUCCESS) {
1111
printf("[SHORT] Error doing UART receive: %i\n", ret);
1212
return -1;
1313
}
1414

1515
printf("\n\nconsole_recv_long: ");
16-
for (int i = 0; i < number_read; i++) {
16+
for (uint32_t i = 0; i < number_read; i++) {
1717
printf("%c", buf[i]);
1818
}
1919
printf("\n");

examples/tests/console/console_recv_short/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
uint8_t buf[100];
66

77
int main(void) {
8-
int number_read;
8+
uint32_t number_read;
99
int ret = libtocksync_console_read(buf, 11, &number_read);
1010
if (ret != RETURNCODE_SUCCESS) {
1111
printf("[SHORT] Error doing UART receive: %i\n", ret);
1212
return -1;
1313
}
1414

1515
printf("\n\nconsole_recv_short: ");
16-
for (int i = 0; i < number_read; i++) {
16+
for (uint32_t i = 0; i < number_read; i++) {
1717
printf("%c", buf[i]);
1818
}
1919
printf("\n");

examples/tests/kv/kv_interactive/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ char read_buf[DATA_LEN];
1717

1818
static int getch(void) {
1919
uint8_t buffer[1];
20-
int number_read;
20+
uint32_t number_read;
2121
libtocksync_console_read(buffer, 1, &number_read);
2222
return buffer[0];
2323
}

examples/tests/number_guess_game/main.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88

99
static int getch(void) {
1010
uint8_t buffer[1];
11-
int number_read;
11+
uint32_t number_read;
1212
libtocksync_console_read(buffer, 1, &number_read);
1313
return buffer[0];
1414
}
1515

16-
static int putnstr(const char* str, int len) {
17-
int number_written;
16+
static uint32_t putnstr(const char* str, int len) {
17+
uint32_t number_written;
1818
libtocksync_console_read((uint8_t*) str, len, &number_written);
1919
return number_written;
2020
}

libtock-sync/interface/console.c

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,41 @@
1+
#include <libtock/defer.h>
12
#include <libtock/interface/syscalls/console_syscalls.h>
23

34
#include "console.h"
45

5-
struct console_result {
6-
bool fired;
7-
int length;
8-
returncode_t result;
9-
};
10-
11-
static struct console_result result = { .fired = false };
12-
13-
static void generic_cb(returncode_t ret, uint32_t length) {
14-
result.length = length;
15-
result.fired = true;
16-
result.result = ret;
17-
}
6+
#include "syscalls/console_syscalls.h"
187

198
bool libtocksync_console_exists(void) {
209
return libtock_console_driver_exists();
2110
}
2211

23-
returncode_t libtocksync_console_write(const uint8_t* buffer, uint32_t length, int* written) {
24-
int err;
25-
result.fired = false;
12+
returncode_t libtocksync_console_write(const uint8_t* buffer, uint32_t length, uint32_t* written) {
13+
returncode_t ret;
2614

27-
err = libtock_console_write(buffer, length, &generic_cb);
28-
if (err != RETURNCODE_SUCCESS) return err;
15+
ret = libtock_console_set_read_allow(buffer, length);
16+
if (ret != RETURNCODE_SUCCESS) return ret;
17+
defer { libtock_console_set_read_allow(NULL, 0);
18+
};
2919

30-
// Wait for the callback.
31-
yield_for(&result.fired);
32-
if (result.result != RETURNCODE_SUCCESS) return result.result;
20+
ret = libtock_console_command_write(length);
21+
if (ret != RETURNCODE_SUCCESS) return ret;
3322

34-
*written = result.length;
35-
return RETURNCODE_SUCCESS;
23+
ret = libtocksync_console_yield_wait_for_write(written);
24+
return ret;
3625
}
3726

38-
returncode_t libtocksync_console_read(uint8_t* buffer, uint32_t length, int* read) {
39-
int err;
40-
result.fired = false;
4127

42-
err = libtock_console_read(buffer, length, &generic_cb);
43-
if (err != RETURNCODE_SUCCESS) return err;
28+
returncode_t libtocksync_console_read(uint8_t* buffer, uint32_t length, uint32_t* read) {
29+
returncode_t ret;
30+
31+
ret = libtock_console_set_readwrite_allow(buffer, length);
32+
if (ret != RETURNCODE_SUCCESS) return ret;
33+
defer { libtock_console_set_readwrite_allow(NULL, 0);
34+
};
4435

45-
// Wait for the callback.
46-
yield_for(&result.fired);
47-
if (result.result != RETURNCODE_SUCCESS) return result.result;
36+
ret = libtock_console_command_read(length);
37+
if (ret != RETURNCODE_SUCCESS) return ret;
4838

49-
*read = result.length;
50-
return RETURNCODE_SUCCESS;
39+
ret = libtocksync_console_yield_wait_for_write(read);
40+
return ret;
5141
}

libtock-sync/interface/console.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#pragma once
22

3-
#include <libtock/interface/console.h>
43
#include <libtock/tock.h>
54

65
#ifdef __cplusplus
@@ -9,9 +8,9 @@ extern "C" {
98

109
bool libtocksync_console_exists(void);
1110

12-
returncode_t libtocksync_console_write(const uint8_t* buffer, uint32_t length, int* written);
11+
returncode_t libtocksync_console_write(const uint8_t* buffer, uint32_t length, uint32_t* written);
1312

14-
returncode_t libtocksync_console_read(uint8_t* buffer, uint32_t length, int* read);
13+
returncode_t libtocksync_console_read(uint8_t* buffer, uint32_t length, uint32_t* read);
1514

1615
#ifdef __cplusplus
1716
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "console_syscalls.h"
2+
3+
returncode_t libtocksync_console_yield_wait_for_write(uint32_t* bytes_written) {
4+
yield_waitfor_return_t ret;
5+
ret = yield_wait_for(DRIVER_NUM_CONSOLE, 1);
6+
7+
*bytes_written = ret.data1;
8+
9+
return (returncode_t) ret.data0;
10+
}
11+
12+
returncode_t libtocksync_console_yield_wait_for_read(uint32_t* bytes_read) {
13+
yield_waitfor_return_t ret;
14+
ret = yield_wait_for(DRIVER_NUM_CONSOLE, 2);
15+
16+
*bytes_read = ret.data1;
17+
18+
return (returncode_t) ret.data0;
19+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#pragma once
2+
3+
#include <libtock/interface/syscalls/console_syscalls.h>
4+
#include <libtock/tock.h>
5+
6+
#ifdef __cplusplus
7+
extern "C" {
8+
#endif
9+
10+
returncode_t libtocksync_console_yield_wait_for_write(uint32_t* bytes_written);
11+
returncode_t libtocksync_console_yield_wait_for_read(uint32_t* bytes_read);
12+
13+
#ifdef __cplusplus
14+
}
15+
#endif

0 commit comments

Comments
 (0)