|
1 | 1 | #include "lora_phy.h" |
2 | 2 |
|
3 | | -struct lora_phy_spi_data { |
4 | | - bool fired; |
5 | | - returncode_t ret; |
6 | | -}; |
7 | | - |
8 | | -static struct lora_phy_spi_data result = {.fired = false}; |
9 | | - |
10 | | -static void lora_phy_spi_cb(returncode_t ret) { |
11 | | - result.fired = true; |
12 | | - result.ret = ret; |
13 | | -} |
14 | | - |
15 | 3 | returncode_t libtocksync_lora_phy_write(const uint8_t* write, |
16 | 4 | uint32_t len) { |
17 | | - result.fired = false; |
18 | 5 | returncode_t ret; |
19 | 6 |
|
20 | | - ret = libtock_lora_phy_write(write, len, lora_phy_spi_cb); |
| 7 | + ret = libtock_lora_phy_set_readonly_allow_master_write_buffer(buf, len); |
21 | 8 | if (ret != RETURNCODE_SUCCESS) return ret; |
| 9 | + defer { libtock_lora_phy_set_readonly_allow_master_write_buffer(NULL, 0); |
| 10 | + }; |
22 | 11 |
|
23 | | - yield_for(&result.fired); |
24 | | - return result.ret; |
| 12 | + ret = libtock_lora_phy_command_read_write(len); |
| 13 | + if (ret != RETURNCODE_SUCCESS) return ret; |
| 14 | + |
| 15 | + ret = libtocksync_lora_phy_yield_wait_for(); |
| 16 | + return ret; |
25 | 17 | } |
26 | 18 |
|
27 | 19 | returncode_t libtocksync_lora_phy_read_write(const uint8_t* write, |
28 | 20 | uint8_t* read, |
29 | 21 | uint32_t len) { |
30 | | - result.fired = false; |
31 | 22 | returncode_t ret; |
32 | 23 |
|
33 | | - ret = libtock_lora_phy_read_write(write, read, len, lora_phy_spi_cb); |
| 24 | + ret = libtock_lora_phy_set_readwrite_allow_master_read_buffer(read, len); |
| 25 | + if (ret != RETURNCODE_SUCCESS) return ret; |
| 26 | + defer { libtock_lora_phy_set_readwrite_allow_master_read_buffer(NULL, 0); |
| 27 | + }; |
| 28 | + |
| 29 | + ret = libtock_lora_phy_set_readonly_allow_master_write_buffer(buf, len); |
| 30 | + if (ret != RETURNCODE_SUCCESS) return ret; |
| 31 | + defer { libtock_lora_phy_set_readonly_allow_master_write_buffer(NULL, 0); |
| 32 | + }; |
| 33 | + |
| 34 | + ret = libtock_lora_phy_command_read_write(len); |
34 | 35 | if (ret != RETURNCODE_SUCCESS) return ret; |
35 | 36 |
|
36 | | - yield_for(&result.fired); |
37 | | - return result.ret; |
| 37 | + ret = libtocksync_lora_phy_yield_wait_for(); |
| 38 | + return ret; |
38 | 39 | } |
0 commit comments