Change Details
atusb/fw/mac.c |
64 | 64 | } |
65 | 65 | |
66 | 66 | |
| 67 | static void receive_frame(void) |
| 68 | { |
| 69 | uint8_t size, i; |
| 70 | |
| 71 | spi_begin(); |
| 72 | if (!(spi_io(AT86RF230_BUF_READ) & RX_CRC_VALID)) { |
| 73 | spi_end(); |
| 74 | return; |
| 75 | } |
| 76 | size = spi_recv(); |
| 77 | if (!size || (size & 0x80)) { |
| 78 | spi_end(); |
| 79 | return; |
| 80 | } |
| 81 | |
| 82 | rx_buf[0] = size; |
| 83 | for (i = 0; i != size+1; i++) |
| 84 | rx_buf[i+1] = spi_recv(); |
| 85 | spi_end(); |
| 86 | led(1); |
| 87 | usb_send(&eps[1], rx_buf, size+2, rx_done, NULL); |
| 88 | } |
| 89 | |
| 90 | |
67 | 91 | static bool handle_irq(void) |
68 | 92 | { |
69 | 93 | uint8_t irq; |
70 | | uint8_t size, i; |
71 | 94 | |
72 | 95 | irq = reg_read(REG_IRQ_STATUS); |
73 | 96 | if (!(irq & IRQ_TRX_END)) |
... | ... | |
89 | 112 | if (eps[1].state != EP_IDLE) |
90 | 113 | return 1; |
91 | 114 | |
92 | | spi_begin(); |
93 | | if (!(spi_io(AT86RF230_BUF_READ) & RX_CRC_VALID)) { |
94 | | spi_end(); |
95 | | return 1; |
96 | | } |
97 | | size = spi_recv(); |
98 | | if (!size || (size & 0x80)) { |
99 | | spi_end(); |
100 | | return 1; |
101 | | } |
| 115 | receive_frame(); |
102 | 116 | |
103 | | rx_buf[0] = size; |
104 | | for (i = 0; i != size+1; i++) |
105 | | rx_buf[i+1] = spi_recv(); |
106 | | spi_end(); |
107 | | led(1); |
108 | | usb_send(&eps[1], rx_buf, size+2, rx_done, NULL); |
109 | 117 | return 1; |
110 | 118 | } |
111 | 119 | |
Download the corresponding diff file