Skip to content

Commit 2ac1909

Browse files
committed
spi: drop delayed TX
1 parent 57b69c2 commit 2ac1909

File tree

3 files changed

+33
-68
lines changed

3 files changed

+33
-68
lines changed

src/driver/rx/sx128x.c

Lines changed: 33 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ volatile uint16_t irq_status = 0;
2323

2424
static uint32_t busy_timeout = 1000;
2525
static uint8_t payload_len = 8;
26+
static uint8_t buffer_status[2] = {0, 0};
2627

2728
extern volatile uint32_t packet_time_us;
2829
extern volatile uint8_t packet_status[2];
@@ -107,31 +108,29 @@ static void sx128x_set_dio0_active(void *arg) {
107108
dio0_active = 1;
108109
}
109110

111+
static void sx128x_read_buffer(void *arg) {
112+
{
113+
const spi_txn_segment_t segs[] = {
114+
spi_make_seg_const(SX1280_RADIO_READ_BUFFER, buffer_status[1], 0x00),
115+
spi_make_seg_buffer((uint8_t *)rx_spi_packet, NULL, payload_len),
116+
};
117+
spi_seg_submit(&bus, segs);
118+
}
119+
{
120+
const spi_txn_segment_t segs[] = {
121+
read_command_txn(SX1280_RADIO_GET_PACKETSTATUS, (uint8_t *)packet_status, 2),
122+
};
123+
spi_seg_submit(&bus, segs, .done_fn = sx128x_set_dio0_active);
124+
}
125+
}
126+
110127
static void sx128x_handle_irq_status(void *arg) {
111128
const uint16_t irq = ((irq_status & 0xFF) << 8 | ((irq_status >> 8) & 0xFF));
112129
if ((irq & SX1280_IRQ_RX_DONE)) {
113-
static uint8_t buffer_status[2] = {0, 0};
114-
{
115-
static const spi_txn_segment_t segs[] = {
116-
read_command_txn(SX1280_RADIO_GET_RXBUFFERSTATUS, buffer_status, 2),
117-
};
118-
spi_seg_submit(&bus, segs);
119-
}
120-
{
121-
const spi_txn_segment_t segs[] = {
122-
spi_make_seg_const(SX1280_RADIO_READ_BUFFER),
123-
spi_make_seg_delay(NULL, buffer_status + 1, 1),
124-
spi_make_seg_const(0x00),
125-
spi_make_seg_buffer((uint8_t *)rx_spi_packet, NULL, payload_len),
126-
};
127-
spi_seg_submit(&bus, segs);
128-
}
129-
{
130-
static const spi_txn_segment_t segs[] = {
131-
read_command_txn(SX1280_RADIO_GET_PACKETSTATUS, (uint8_t *)packet_status, 2),
132-
};
133-
spi_seg_submit(&bus, segs, .done_fn = sx128x_set_dio0_active);
134-
}
130+
const spi_txn_segment_t segs[] = {
131+
read_command_txn(SX1280_RADIO_GET_RXBUFFERSTATUS, buffer_status, 2),
132+
};
133+
spi_seg_submit(&bus, segs, .done_fn = sx128x_read_buffer);
135134
} else if ((irq & SX1280_IRQ_TX_DONE)) {
136135
sx128x_set_mode_async(SX1280_MODE_RX);
137136
}
@@ -156,17 +155,17 @@ void sx128x_wait() {
156155
}
157156

158157
void sx128x_handle_dio0_exti(bool level) {
159-
if (!level) {
158+
if (!level)
160159
return;
161-
}
160+
162161
{
163-
static const spi_txn_segment_t segs[] = {
162+
const spi_txn_segment_t segs[] = {
164163
read_command_txn(SX1280_RADIO_GET_IRQSTATUS, (uint8_t *)&irq_status, 2),
165164
};
166165
spi_seg_submit(&bus, segs);
167166
}
168167
{
169-
static const spi_txn_segment_t segs[] = {
168+
const spi_txn_segment_t segs[] = {
170169
spi_make_seg_const(
171170
SX1280_RADIO_CLR_IRQSTATUS,
172171
(uint8_t)(((uint16_t)SX1280_IRQ_RADIO_ALL >> 8) & 0x00FF),
@@ -199,15 +198,11 @@ uint16_t sx128x_read_dio0() {
199198
}
200199

201200
void sx128x_read_register_burst(const uint16_t reg, uint8_t *data, const uint8_t size) {
202-
const uint8_t buf[4] = {
203-
(SX1280_RADIO_READ_REGISTER),
204-
((reg & 0xFF00) >> 8),
205-
(reg & 0x00FF),
206-
0x00,
207-
};
208-
209201
const spi_txn_segment_t segs[] = {
210-
spi_make_seg_buffer(NULL, buf, 4),
202+
spi_make_seg_const((SX1280_RADIO_READ_REGISTER),
203+
((reg & 0xFF00) >> 8),
204+
(reg & 0x00FF),
205+
0x00),
211206
spi_make_seg_buffer(data, NULL, size),
212207
};
213208
spi_seg_submit(&bus, segs);
@@ -221,14 +216,10 @@ uint8_t sx128x_read_register(const uint16_t reg) {
221216
}
222217

223218
void sx128x_write_register_burst(const uint16_t reg, const uint8_t *data, const uint8_t size) {
224-
uint8_t buf[3] = {
225-
(uint8_t)SX1280_RADIO_WRITE_REGISTER,
226-
((reg & 0xFF00) >> 8),
227-
(reg & 0x00FF),
228-
};
229-
230219
const spi_txn_segment_t segs[] = {
231-
spi_make_seg_buffer(NULL, buf, 3),
220+
spi_make_seg_const((uint8_t)SX1280_RADIO_WRITE_REGISTER,
221+
((reg & 0xFF00) >> 8),
222+
(reg & 0x00FF)),
232223
spi_make_seg_buffer(NULL, data, size),
233224
};
234225
spi_seg_submit(&bus, segs);
@@ -258,12 +249,8 @@ void sx128x_write_command(const sx128x_commands_t cmd, const uint8_t val) {
258249
}
259250

260251
void sx128x_write_tx_buffer(const uint8_t offset, const volatile uint8_t *data, const uint8_t size) {
261-
const uint8_t buf[2] = {
262-
(uint8_t)SX1280_RADIO_WRITE_BUFFER,
263-
offset,
264-
};
265252
const spi_txn_segment_t segs[] = {
266-
spi_make_seg_buffer(NULL, buf, 2),
253+
spi_make_seg_const(SX1280_RADIO_WRITE_BUFFER, offset),
267254
spi_make_seg_buffer(NULL, (uint8_t *)data, size),
268255
};
269256
spi_seg_submit(&bus, segs);

src/driver/spi.c

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -78,18 +78,6 @@ bool spi_txn_continue_port(spi_ports_t port) {
7878
}
7979

8080
txn->status = TXN_IN_PROGRESS;
81-
82-
if (txn->flags & TXN_DELAYED_TX) {
83-
uint32_t txn_size = 0;
84-
for (uint32_t i = 0; i < txn->segment_count; ++i) {
85-
spi_txn_segment_t *seg = &txn->segments[i];
86-
if (seg->tx_data) {
87-
memcpy((uint8_t *)txn->buffer + txn_size, seg->tx_data, seg->size);
88-
}
89-
txn_size += seg->size;
90-
}
91-
}
92-
9381
dev->dma_done = false;
9482
}
9583

@@ -134,12 +122,6 @@ void spi_seg_submit_ex(spi_bus_device_t *bus, const spi_txn_opts_t opts) {
134122
memset(txn->buffer + txn->size, 0xFF, seg->size);
135123
}
136124
break;
137-
138-
case TXN_DELAY:
139-
txn_seg->tx_data = seg->tx_data;
140-
txn_seg->rx_data = seg->rx_data;
141-
txn->flags |= TXN_DELAYED_TX;
142-
break;
143125
}
144126

145127
if (txn_seg->rx_data) {

src/driver/spi.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ typedef struct {
2828
typedef enum {
2929
TXN_CONST,
3030
TXN_BUFFER,
31-
TXN_DELAY,
3231
} spi_txn_segment_type_t;
3332

3433
typedef struct {
@@ -49,8 +48,6 @@ typedef struct {
4948
(spi_txn_segment_t) { .type = TXN_CONST, .bytes = {_bytes}, .size = sizeof((uint8_t[]){_bytes}) }
5049
#define spi_make_seg_buffer(_rx_data, _tx_data, _size) \
5150
(spi_txn_segment_t) { .type = TXN_BUFFER, .rx_data = (_rx_data), .tx_data = (_tx_data), .size = (_size) }
52-
#define spi_make_seg_delay(_rx_data, _tx_data, _size) \
53-
(spi_txn_segment_t) { .type = TXN_DELAY, .rx_data = (_rx_data), .tx_data = (_tx_data), .size = (_size) }
5451

5552
struct spi_bus_device;
5653

@@ -62,7 +59,6 @@ typedef enum {
6259
} spi_txn_status_t;
6360

6461
typedef enum {
65-
TXN_DELAYED_TX = (1 << 0),
6662
TXN_DELAYED_RX = (1 << 1),
6763
} spi_txn_flags_t;
6864

0 commit comments

Comments
 (0)