Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of cc3000_hostdriver_mbedsocket by
Revision 47:cc9a2501e29f, committed 2014-10-16
- Comitter:
- vpcola
- Date:
- Thu Oct 16 13:39:08 2014 +0000
- Parent:
- 46:ca8c234997c0
- Commit message:
- Added mutex if used in rtos
Changed in this revision
--- a/cc3000.cpp Sun Nov 10 21:41:44 2013 +0100 +++ b/cc3000.cpp Thu Oct 16 13:39:08 2014 +0000 @@ -47,9 +47,9 @@ static uint8_t cc3000_prefix[] = {'T', 'T', 'T'}; cc3000 *cc3000::_inst; -cc3000::cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi) +cc3000::cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, Mutex & mutex) : _event(_simple_link, _hci, _spi, *this), _socket(_simple_link, _hci, _event), - _spi(cc3000_irq, cc3000_en, cc3000_cs, cc3000_spi, _event, _simple_link), _hci(_spi), + _spi(cc3000_irq, cc3000_en, cc3000_cs, cc3000_spi, mutex, _event, _simple_link), _hci(_spi), _nvmem(_hci, _event, _simple_link), _netapp(_simple_link, _nvmem, _hci, _event), _wlan(_simple_link, _event, _spi, _hci) { _simple_link.set_tx_complete_signal(1); @@ -61,10 +61,10 @@ } #if (CC3000_ETH_COMPAT == 1) -cc3000::cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, const char *ssid, +cc3000::cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, Mutex & mutex, const char *ssid, const char *phrase, Security sec, bool smart_config) : _event(_simple_link, _hci, _spi, *this), _socket(_simple_link, _hci, _event), - _spi(cc3000_irq, cc3000_en, cc3000_cs, cc3000_spi, _event, _simple_link), _hci(_spi), + _spi(cc3000_irq, cc3000_en, cc3000_cs, cc3000_spi, mutex, _event, _simple_link), _hci(_spi), _nvmem(_hci, _event, _simple_link), _netapp(_simple_link, _nvmem, _hci, _event), _wlan(_simple_link, _event, _spi, _hci), _sec(sec), _smart_config(smart_config) { _simple_link.set_tx_complete_signal(1);
--- a/cc3000.h Sun Nov 10 21:41:44 2013 +0100 +++ b/cc3000.h Thu Oct 16 13:39:08 2014 +0000 @@ -42,6 +42,7 @@ #define CC3000_H #include "mbed.h" +#include "rtos.h" #include "cc3000_common.h" #include "cc3000_spi.h" #include "cc3000_simplelink.h" @@ -1081,7 +1082,7 @@ * \param simple_link Reference to the simple link object. * \return none */ - cc3000_spi(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, cc3000_event &event, cc3000_simple_link &simple_link); + cc3000_spi(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, Mutex & mutex, cc3000_event &event, cc3000_simple_link &simple_link); /** * \brief Dtor * \param none @@ -1175,6 +1176,7 @@ DigitalOut _wlan_en; DigitalOut _wlan_cs; SPI _wlan_spi; + Mutex & _mutex; cc3000_event &_event; cc3000_simple_link &_simple_link; bool _process_irq; @@ -1555,7 +1557,7 @@ * \param cc3000_cs Chip select pin * \param cc3000_spi SPI interface */ - cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi); + cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, Mutex & mutex); /** * \brief Dtor. */ @@ -1706,7 +1708,7 @@ * \param sec Security of the AP * \param smart_config Smart config selection */ - cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, const char *ssid, const char *phrase, Security sec, bool smart_config); + cc3000(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, Mutex & mutex, const char *ssid, const char *phrase, Security sec, bool smart_config); /** * \brief Disconnect wlan device. * \param none
--- a/cc3000_spi.cpp Sun Nov 10 21:41:44 2013 +0100 +++ b/cc3000_spi.cpp Thu Oct 16 13:39:08 2014 +0000 @@ -43,8 +43,8 @@ namespace mbed_cc3000 { -cc3000_spi::cc3000_spi(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, cc3000_event &event, cc3000_simple_link &simple_link) - : _wlan_irq(cc3000_irq), _wlan_en(cc3000_en), _wlan_cs(cc3000_cs), _wlan_spi(cc3000_spi), _event(event), _simple_link(simple_link) { +cc3000_spi::cc3000_spi(PinName cc3000_irq, PinName cc3000_en, PinName cc3000_cs, SPI cc3000_spi, Mutex & mutex, cc3000_event &event, cc3000_simple_link &simple_link) + : _wlan_irq(cc3000_irq), _wlan_en(cc3000_en), _wlan_cs(cc3000_cs), _wlan_spi(cc3000_spi), _mutex(mutex), _event(event), _simple_link(simple_link) { _wlan_spi.format(8,1); _wlan_spi.frequency(12000000); @@ -90,6 +90,7 @@ } uint32_t cc3000_spi::first_write(uint8_t *buffer, uint16_t length) { + _mutex.lock(); _wlan_cs = 0; wait_us(50); @@ -99,7 +100,8 @@ write_synchronous(buffer + 4, length - 4); _spi_info.spi_state = eSPI_STATE_IDLE; _wlan_cs = 1; - + _mutex.unlock(); + return 0; } @@ -144,6 +146,7 @@ _spi_info.tx_packet_length = length; // Assert the CS line and wait until the IRQ line is active, then initialize the write operation + _mutex.lock(); _wlan_cs = 0; wlan_irq_enable(); @@ -224,6 +227,7 @@ } else if (_spi_info.spi_state == eSPI_STATE_IDLE) { _spi_info.spi_state = eSPI_STATE_READ_IRQ; /* IRQ line goes low - acknowledge it */ + _mutex.lock(); _wlan_cs = 0; read_synchronous(_simple_link.get_received_buffer(), 10); _spi_info.spi_state = eSPI_STATE_READ_EOT; @@ -234,6 +238,7 @@ // Trigger Rx processing wlan_irq_disable(); _wlan_cs = 1; + _mutex.unlock(); // The magic number resides at the end of the TX/RX buffer (1 byte after the allocated size) // If the magic number is overwitten - buffer overrun occurred - we will be stuck here forever! uint8_t *received_buffer = _simple_link.get_received_buffer(); @@ -248,6 +253,7 @@ write_synchronous(_simple_link.get_transmit_buffer(), _spi_info.tx_packet_length); _spi_info.spi_state = eSPI_STATE_IDLE; _wlan_cs = 1; + _mutex.unlock(); } } }