Added mutex for multiple SPI devices on the same SPI bus

Fork of cc3000_hostdriver_mbedsocket by Martin Kojtal

Committer:
Kojto
Date:
Tue Oct 08 07:04:07 2013 +0200
Revision:
33:9e23b24fb4f3
Parent:
20:30b6ed7bf8fd
Child:
34:1ad18123bf11
Removed code (set buffers) - non-sense, doxygen comments for simple link class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 20:30b6ed7bf8fd 1 /*****************************************************************************
Kojto 20:30b6ed7bf8fd 2 *
Kojto 20:30b6ed7bf8fd 3 * C++ interface/implementation created by Martin Kojtal (0xc0170). Thanks to
Kojto 20:30b6ed7bf8fd 4 * Jim Carver and Frank Vannieuwkerke for their inital cc3000 mbed port and
Kojto 20:30b6ed7bf8fd 5 * provided help.
Kojto 20:30b6ed7bf8fd 6 *
Kojto 20:30b6ed7bf8fd 7 * This version of "host driver" uses CC3000 Host Driver Implementation. Thus
Kojto 20:30b6ed7bf8fd 8 * read the following copyright:
Kojto 20:30b6ed7bf8fd 9 *
Kojto 20:30b6ed7bf8fd 10 * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
Kojto 20:30b6ed7bf8fd 11 *
Kojto 20:30b6ed7bf8fd 12 * Redistribution and use in source and binary forms, with or without
Kojto 20:30b6ed7bf8fd 13 * modification, are permitted provided that the following conditions
Kojto 20:30b6ed7bf8fd 14 * are met:
Kojto 20:30b6ed7bf8fd 15 *
Kojto 20:30b6ed7bf8fd 16 * Redistributions of source code must retain the above copyright
Kojto 20:30b6ed7bf8fd 17 * notice, this list of conditions and the following disclaimer.
Kojto 20:30b6ed7bf8fd 18 *
Kojto 20:30b6ed7bf8fd 19 * Redistributions in binary form must reproduce the above copyright
Kojto 20:30b6ed7bf8fd 20 * notice, this list of conditions and the following disclaimer in the
Kojto 20:30b6ed7bf8fd 21 * documentation and/or other materials provided with the
Kojto 20:30b6ed7bf8fd 22 * distribution.
Kojto 20:30b6ed7bf8fd 23 *
Kojto 20:30b6ed7bf8fd 24 * Neither the name of Texas Instruments Incorporated nor the names of
Kojto 20:30b6ed7bf8fd 25 * its contributors may be used to endorse or promote products derived
Kojto 20:30b6ed7bf8fd 26 * from this software without specific prior written permission.
Kojto 20:30b6ed7bf8fd 27 *
Kojto 20:30b6ed7bf8fd 28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Kojto 20:30b6ed7bf8fd 29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Kojto 20:30b6ed7bf8fd 30 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Kojto 20:30b6ed7bf8fd 31 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Kojto 20:30b6ed7bf8fd 32 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Kojto 20:30b6ed7bf8fd 33 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Kojto 20:30b6ed7bf8fd 34 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Kojto 20:30b6ed7bf8fd 35 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Kojto 20:30b6ed7bf8fd 36 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Kojto 20:30b6ed7bf8fd 37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Kojto 20:30b6ed7bf8fd 38 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Kojto 20:30b6ed7bf8fd 39 *
Kojto 20:30b6ed7bf8fd 40 *****************************************************************************/
Kojto 20:30b6ed7bf8fd 41 #include "cc3000.h"
Kojto 20:30b6ed7bf8fd 42 #include "cc3000_spi.h"
Kojto 20:30b6ed7bf8fd 43
Kojto 20:30b6ed7bf8fd 44 namespace mbed_cc3000 {
Kojto 20:30b6ed7bf8fd 45
Kojto 20:30b6ed7bf8fd 46 cc3000_spi::cc3000_spi(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, IRQn_Type irq_port, cc3000_event &event, cc3000_simple_link &simple_link)
Kojto 20:30b6ed7bf8fd 47 : _wlan_irq(cc3000_irq), _wlan_en(cc3000_en), _wlan_cs(cc3000_cs), _wlan_spi(cc3000_spi), _irq_port(irq_port),
Kojto 20:30b6ed7bf8fd 48 _event(event), _simple_link(simple_link) {
Kojto 20:30b6ed7bf8fd 49 /* TODO = clear pending interrupts for PORTS. This is dependent on the used chip */
Kojto 20:30b6ed7bf8fd 50
Kojto 20:30b6ed7bf8fd 51 _wlan_spi.format(8,1);
Kojto 20:30b6ed7bf8fd 52 _wlan_spi.frequency(12000000);
Kojto 20:30b6ed7bf8fd 53 _function_pointer = _wlan_irq.fall(this, &cc3000_spi::WLAN_IRQHandler);
Kojto 20:30b6ed7bf8fd 54
Kojto 20:30b6ed7bf8fd 55 _wlan_en = 0;
Kojto 20:30b6ed7bf8fd 56 _wlan_cs = 1;
Kojto 20:30b6ed7bf8fd 57 }
Kojto 20:30b6ed7bf8fd 58
Kojto 20:30b6ed7bf8fd 59 cc3000_spi::~cc3000_spi() {
Kojto 20:30b6ed7bf8fd 60
Kojto 20:30b6ed7bf8fd 61 }
Kojto 20:30b6ed7bf8fd 62
Kojto 20:30b6ed7bf8fd 63 void cc3000_spi::wlan_irq_enable()
Kojto 20:30b6ed7bf8fd 64 {
Kojto 20:30b6ed7bf8fd 65 NVIC_EnableIRQ(_irq_port);
Kojto 20:30b6ed7bf8fd 66 }
Kojto 20:30b6ed7bf8fd 67
Kojto 20:30b6ed7bf8fd 68 void cc3000_spi::wlan_irq_disable() {
Kojto 20:30b6ed7bf8fd 69 NVIC_DisableIRQ(_irq_port);
Kojto 20:30b6ed7bf8fd 70 }
Kojto 20:30b6ed7bf8fd 71
Kojto 20:30b6ed7bf8fd 72 void cc3000_spi::wlan_irq_set(uint8_t value) {
Kojto 20:30b6ed7bf8fd 73 if (value)
Kojto 20:30b6ed7bf8fd 74 {
Kojto 20:30b6ed7bf8fd 75 _wlan_en = 1;
Kojto 20:30b6ed7bf8fd 76 }
Kojto 20:30b6ed7bf8fd 77 else
Kojto 20:30b6ed7bf8fd 78 {
Kojto 20:30b6ed7bf8fd 79 _wlan_en = 0;
Kojto 20:30b6ed7bf8fd 80 }
Kojto 20:30b6ed7bf8fd 81 }
Kojto 20:30b6ed7bf8fd 82
Kojto 20:30b6ed7bf8fd 83 uint32_t cc3000_spi::wlan_irq_read() {
Kojto 20:30b6ed7bf8fd 84 return _wlan_irq.read();
Kojto 20:30b6ed7bf8fd 85 }
Kojto 20:30b6ed7bf8fd 86
Kojto 20:30b6ed7bf8fd 87 void cc3000_spi::close() {
Kojto 20:30b6ed7bf8fd 88 wlan_irq_disable();
Kojto 20:30b6ed7bf8fd 89 }
Kojto 20:30b6ed7bf8fd 90
Kojto 20:30b6ed7bf8fd 91 // void cc3000_spi::SpiReceiveHandler() {
Kojto 20:30b6ed7bf8fd 92 // _simple_link.usEventOrDataReceived = 1;
Kojto 20:30b6ed7bf8fd 93 // //_simple_link.pucReceivedData = (unsigned char *)pvBuffer;
Kojto 20:30b6ed7bf8fd 94
Kojto 20:30b6ed7bf8fd 95 // hci_unsolicited_event_handler();
Kojto 20:30b6ed7bf8fd 96 // }
Kojto 20:30b6ed7bf8fd 97
Kojto 20:30b6ed7bf8fd 98
Kojto 20:30b6ed7bf8fd 99 /* TODO
Kojto 20:30b6ed7bf8fd 100 pRxPacket, pTxPacket do we need to hold this pointer ?
Kojto 20:30b6ed7bf8fd 101 SPIRxHandler - remove?
Kojto 20:30b6ed7bf8fd 102 */
Kojto 20:30b6ed7bf8fd 103 void cc3000_spi::open() {
Kojto 20:30b6ed7bf8fd 104 _spi_info.spi_state = eSPI_STATE_POWERUP;
Kojto 20:30b6ed7bf8fd 105 //_spi_info.SPIRxHandler = pfRxHandler;
Kojto 20:30b6ed7bf8fd 106 _spi_info.tx_packet_length = 0;
Kojto 20:30b6ed7bf8fd 107 _spi_info.rx_packet_length = 0;
Kojto 20:30b6ed7bf8fd 108 //_rx_buffer[CC3000_RX_BUFFER_SIZE - 1] = CC3000_BUFFER_MAGIC_NUMBER;
Kojto 20:30b6ed7bf8fd 109 //_tx_buffer[CC3000_TX_BUFFER_SIZE - 1] = CC3000_BUFFER_MAGIC_NUMBER;
Kojto 20:30b6ed7bf8fd 110 wlan_irq_enable();
Kojto 20:30b6ed7bf8fd 111 }
Kojto 20:30b6ed7bf8fd 112
Kojto 20:30b6ed7bf8fd 113 uint32_t cc3000_spi::first_write(uint8_t *buffer, uint16_t length) {
Kojto 20:30b6ed7bf8fd 114 _wlan_cs = 0;
Kojto 20:30b6ed7bf8fd 115 wait_us(50);
Kojto 20:30b6ed7bf8fd 116
Kojto 20:30b6ed7bf8fd 117 /* first 4 bytes of the data */
Kojto 20:30b6ed7bf8fd 118 write_synchronous(buffer, 4);
Kojto 20:30b6ed7bf8fd 119 wait_us(50);
Kojto 20:30b6ed7bf8fd 120 write_synchronous(buffer + 4, length - 4);
Kojto 20:30b6ed7bf8fd 121 _spi_info.spi_state = eSPI_STATE_IDLE;
Kojto 20:30b6ed7bf8fd 122 _wlan_cs = 1;
Kojto 20:30b6ed7bf8fd 123
Kojto 20:30b6ed7bf8fd 124 return 0;
Kojto 20:30b6ed7bf8fd 125 }
Kojto 20:30b6ed7bf8fd 126
Kojto 20:30b6ed7bf8fd 127
Kojto 20:30b6ed7bf8fd 128 uint32_t cc3000_spi::write(uint8_t *buffer, uint16_t length) {
Kojto 20:30b6ed7bf8fd 129 uint8_t pad = 0;
Kojto 20:30b6ed7bf8fd 130 // check the total length of the packet in order to figure out if padding is necessary
Kojto 20:30b6ed7bf8fd 131 if(!(length & 0x0001))
Kojto 20:30b6ed7bf8fd 132 {
Kojto 20:30b6ed7bf8fd 133 pad++;
Kojto 20:30b6ed7bf8fd 134 }
Kojto 20:30b6ed7bf8fd 135 buffer[0] = WRITE;
Kojto 20:30b6ed7bf8fd 136 buffer[1] = HI(length + pad);
Kojto 20:30b6ed7bf8fd 137 buffer[2] = LO(length + pad);
Kojto 20:30b6ed7bf8fd 138 buffer[3] = 0;
Kojto 20:30b6ed7bf8fd 139 buffer[4] = 0;
Kojto 20:30b6ed7bf8fd 140
Kojto 20:30b6ed7bf8fd 141 length += (SPI_HEADER_SIZE + pad);
Kojto 20:30b6ed7bf8fd 142
Kojto 20:30b6ed7bf8fd 143 // The magic number resides at the end of the TX/RX buffer (1 byte after the allocated size)
Kojto 20:30b6ed7bf8fd 144 // If the magic number is overwitten - buffer overrun occurred - we will be stuck here forever!
Kojto 20:30b6ed7bf8fd 145 uint8_t * transmit_buffer = _simple_link.get_transmit_buffer();
Kojto 20:30b6ed7bf8fd 146 if (transmit_buffer[CC3000_TX_BUFFER_SIZE - 1] != CC3000_BUFFER_MAGIC_NUMBER)
Kojto 20:30b6ed7bf8fd 147 {
Kojto 20:30b6ed7bf8fd 148 while (1);
Kojto 20:30b6ed7bf8fd 149 }
Kojto 20:30b6ed7bf8fd 150
Kojto 20:30b6ed7bf8fd 151 if (_spi_info.spi_state == eSPI_STATE_POWERUP)
Kojto 20:30b6ed7bf8fd 152 {
Kojto 20:30b6ed7bf8fd 153 while (_spi_info.spi_state != eSPI_STATE_INITIALIZED);
Kojto 20:30b6ed7bf8fd 154 }
Kojto 20:30b6ed7bf8fd 155
Kojto 20:30b6ed7bf8fd 156 if (_spi_info.spi_state == eSPI_STATE_INITIALIZED)
Kojto 20:30b6ed7bf8fd 157 {
Kojto 20:30b6ed7bf8fd 158 // TX/RX transaction over SPI after powerup: IRQ is low - send read buffer size command
Kojto 20:30b6ed7bf8fd 159 first_write(buffer, length);
Kojto 20:30b6ed7bf8fd 160 }
Kojto 20:30b6ed7bf8fd 161 else
Kojto 20:30b6ed7bf8fd 162 {
Kojto 20:30b6ed7bf8fd 163 // Prevent occurence of a race condition when 2 back to back packets are sent to the
Kojto 20:30b6ed7bf8fd 164 // device, so the state will move to IDLE and once again to not IDLE due to IRQ
Kojto 20:30b6ed7bf8fd 165 wlan_irq_disable();
Kojto 20:30b6ed7bf8fd 166
Kojto 20:30b6ed7bf8fd 167 while (_spi_info.spi_state != eSPI_STATE_IDLE);
Kojto 20:30b6ed7bf8fd 168
Kojto 20:30b6ed7bf8fd 169 _spi_info.spi_state = eSPI_STATE_WRITE_IRQ;
Kojto 20:30b6ed7bf8fd 170 //_spi_info.pTxPacket = buffer;
Kojto 20:30b6ed7bf8fd 171 _spi_info.tx_packet_length = length;
Kojto 20:30b6ed7bf8fd 172
Kojto 20:30b6ed7bf8fd 173 // Assert the CS line and wait until the IRQ line is active, then initialize the write operation
Kojto 20:30b6ed7bf8fd 174 _wlan_cs = 0;
Kojto 20:30b6ed7bf8fd 175
Kojto 20:30b6ed7bf8fd 176 wlan_irq_enable();
Kojto 20:30b6ed7bf8fd 177 }
Kojto 20:30b6ed7bf8fd 178
Kojto 20:30b6ed7bf8fd 179 // Wait until the transaction ends
Kojto 20:30b6ed7bf8fd 180 while (_spi_info.spi_state != eSPI_STATE_IDLE);
Kojto 20:30b6ed7bf8fd 181
Kojto 20:30b6ed7bf8fd 182 return 0;
Kojto 20:30b6ed7bf8fd 183 }
Kojto 20:30b6ed7bf8fd 184
Kojto 20:30b6ed7bf8fd 185 void cc3000_spi::write_synchronous(uint8_t *data, uint16_t size) {
Kojto 20:30b6ed7bf8fd 186 while(size)
Kojto 20:30b6ed7bf8fd 187 {
Kojto 20:30b6ed7bf8fd 188 _wlan_spi.write(*data++);
Kojto 20:30b6ed7bf8fd 189 size--;
Kojto 20:30b6ed7bf8fd 190 }
Kojto 20:30b6ed7bf8fd 191 }
Kojto 20:30b6ed7bf8fd 192
Kojto 20:30b6ed7bf8fd 193 void cc3000_spi::read_synchronous(uint8_t *data, uint16_t size) {
Kojto 20:30b6ed7bf8fd 194 for (uint32_t i = 0; i < size; i++)
Kojto 20:30b6ed7bf8fd 195 {
Kojto 20:30b6ed7bf8fd 196 data[i] = _wlan_spi.write(0x03);;
Kojto 20:30b6ed7bf8fd 197 }
Kojto 20:30b6ed7bf8fd 198 }
Kojto 20:30b6ed7bf8fd 199
Kojto 20:30b6ed7bf8fd 200 uint32_t cc3000_spi::read_data_cont() {
Kojto 20:30b6ed7bf8fd 201 long data_to_recv;
Kojto 20:30b6ed7bf8fd 202 unsigned char *evnt_buff, type;
Kojto 20:30b6ed7bf8fd 203
Kojto 20:30b6ed7bf8fd 204 //determine the packet type
Kojto 20:30b6ed7bf8fd 205 evnt_buff = _simple_link.get_received_buffer();
Kojto 20:30b6ed7bf8fd 206 data_to_recv = 0;
Kojto 20:30b6ed7bf8fd 207 STREAM_TO_UINT8((uint8_t *)(evnt_buff + SPI_HEADER_SIZE), HCI_PACKET_TYPE_OFFSET, type);
Kojto 20:30b6ed7bf8fd 208
Kojto 20:30b6ed7bf8fd 209 switch(type)
Kojto 20:30b6ed7bf8fd 210 {
Kojto 20:30b6ed7bf8fd 211 case HCI_TYPE_DATA:
Kojto 20:30b6ed7bf8fd 212 {
Kojto 20:30b6ed7bf8fd 213 // Read the remaining data..
Kojto 20:30b6ed7bf8fd 214 STREAM_TO_UINT16((uint8_t *)(evnt_buff + SPI_HEADER_SIZE), HCI_DATA_LENGTH_OFFSET, data_to_recv);
Kojto 20:30b6ed7bf8fd 215 if (!((HEADERS_SIZE_EVNT + data_to_recv) & 1))
Kojto 20:30b6ed7bf8fd 216 {
Kojto 20:30b6ed7bf8fd 217 data_to_recv++;
Kojto 20:30b6ed7bf8fd 218 }
Kojto 20:30b6ed7bf8fd 219
Kojto 20:30b6ed7bf8fd 220 if (data_to_recv)
Kojto 20:30b6ed7bf8fd 221 {
Kojto 20:30b6ed7bf8fd 222 read_synchronous(evnt_buff + 10, data_to_recv);
Kojto 20:30b6ed7bf8fd 223 }
Kojto 20:30b6ed7bf8fd 224 break;
Kojto 20:30b6ed7bf8fd 225 }
Kojto 20:30b6ed7bf8fd 226 case HCI_TYPE_EVNT:
Kojto 20:30b6ed7bf8fd 227 {
Kojto 20:30b6ed7bf8fd 228 // Calculate the rest length of the data
Kojto 20:30b6ed7bf8fd 229 STREAM_TO_UINT8((char *)(evnt_buff + SPI_HEADER_SIZE), HCI_EVENT_LENGTH_OFFSET, data_to_recv);
Kojto 20:30b6ed7bf8fd 230 data_to_recv -= 1;
Kojto 20:30b6ed7bf8fd 231 // Add padding byte if needed
Kojto 20:30b6ed7bf8fd 232 if ((HEADERS_SIZE_EVNT + data_to_recv) & 1)
Kojto 20:30b6ed7bf8fd 233 {
Kojto 20:30b6ed7bf8fd 234 data_to_recv++;
Kojto 20:30b6ed7bf8fd 235 }
Kojto 20:30b6ed7bf8fd 236
Kojto 20:30b6ed7bf8fd 237 if (data_to_recv)
Kojto 20:30b6ed7bf8fd 238 {
Kojto 20:30b6ed7bf8fd 239 read_synchronous(evnt_buff + 10, data_to_recv);
Kojto 20:30b6ed7bf8fd 240 }
Kojto 20:30b6ed7bf8fd 241
Kojto 20:30b6ed7bf8fd 242 _spi_info.spi_state = eSPI_STATE_READ_EOT;
Kojto 20:30b6ed7bf8fd 243 break;
Kojto 20:30b6ed7bf8fd 244 }
Kojto 20:30b6ed7bf8fd 245 }
Kojto 20:30b6ed7bf8fd 246 return (0);
Kojto 20:30b6ed7bf8fd 247 }
Kojto 20:30b6ed7bf8fd 248
Kojto 20:30b6ed7bf8fd 249 void cc3000_spi::write_wlan_en(uint8_t value) {
Kojto 20:30b6ed7bf8fd 250 if (value) {
Kojto 20:30b6ed7bf8fd 251 _wlan_en = 1;
Kojto 20:30b6ed7bf8fd 252 } else {
Kojto 20:30b6ed7bf8fd 253 _wlan_en = 0;
Kojto 20:30b6ed7bf8fd 254 }
Kojto 20:30b6ed7bf8fd 255 }
Kojto 20:30b6ed7bf8fd 256
Kojto 20:30b6ed7bf8fd 257 void cc3000_spi::WLAN_IRQHandler() {
Kojto 20:30b6ed7bf8fd 258 if (_spi_info.spi_state == eSPI_STATE_POWERUP)
Kojto 20:30b6ed7bf8fd 259 {
Kojto 20:30b6ed7bf8fd 260 // Inform HCI Layer that IRQ occured after powerup
Kojto 20:30b6ed7bf8fd 261 _spi_info.spi_state = eSPI_STATE_INITIALIZED;
Kojto 20:30b6ed7bf8fd 262 }
Kojto 20:30b6ed7bf8fd 263 else if (_spi_info.spi_state == eSPI_STATE_IDLE)
Kojto 20:30b6ed7bf8fd 264 {
Kojto 20:30b6ed7bf8fd 265 _spi_info.spi_state = eSPI_STATE_READ_IRQ;
Kojto 20:30b6ed7bf8fd 266 /* IRQ line goes low - acknowledge it */
Kojto 20:30b6ed7bf8fd 267 _wlan_cs = 0;
Kojto 20:30b6ed7bf8fd 268 read_synchronous(_simple_link.get_received_buffer(), 10);
Kojto 20:30b6ed7bf8fd 269 _spi_info.spi_state = eSPI_STATE_READ_EOT;
Kojto 20:30b6ed7bf8fd 270
Kojto 20:30b6ed7bf8fd 271
Kojto 20:30b6ed7bf8fd 272 // The header was read - continue with the payload read
Kojto 20:30b6ed7bf8fd 273 if (!read_data_cont())
Kojto 20:30b6ed7bf8fd 274 {
Kojto 20:30b6ed7bf8fd 275 // All the data was read - finalize handling by switching to the task
Kojto 20:30b6ed7bf8fd 276 // Trigger Rx processing
Kojto 20:30b6ed7bf8fd 277 wlan_irq_disable();
Kojto 20:30b6ed7bf8fd 278 _wlan_cs = 1;
Kojto 20:30b6ed7bf8fd 279 // The magic number resides at the end of the TX/RX buffer (1 byte after the allocated size)
Kojto 20:30b6ed7bf8fd 280 // If the magic number is overwitten - buffer overrun occurred - we will be stuck here forever!
Kojto 20:30b6ed7bf8fd 281 uint8_t *received_buffer = _simple_link.get_received_buffer();
Kojto 20:30b6ed7bf8fd 282 if (received_buffer[CC3000_RX_BUFFER_SIZE - 1] != CC3000_BUFFER_MAGIC_NUMBER)
Kojto 20:30b6ed7bf8fd 283 {
Kojto 20:30b6ed7bf8fd 284 while (1);
Kojto 20:30b6ed7bf8fd 285 }
Kojto 20:30b6ed7bf8fd 286 _spi_info.spi_state = eSPI_STATE_IDLE;
Kojto 20:30b6ed7bf8fd 287 _event.received_handler(received_buffer + SPI_HEADER_SIZE);
Kojto 20:30b6ed7bf8fd 288 }
Kojto 20:30b6ed7bf8fd 289 }
Kojto 20:30b6ed7bf8fd 290 else if (_spi_info.spi_state == eSPI_STATE_WRITE_IRQ)
Kojto 20:30b6ed7bf8fd 291 {
Kojto 20:30b6ed7bf8fd 292 write_synchronous(_simple_link.get_transmit_buffer(), _spi_info.tx_packet_length);
Kojto 20:30b6ed7bf8fd 293 _spi_info.spi_state = eSPI_STATE_IDLE;
Kojto 20:30b6ed7bf8fd 294 _wlan_cs = 1;
Kojto 20:30b6ed7bf8fd 295 }
Kojto 20:30b6ed7bf8fd 296 }
Kojto 20:30b6ed7bf8fd 297
Kojto 20:30b6ed7bf8fd 298 }