David Fletcher / Mbed 2 deprecated cc3100_Test_websock_Camera_CM4F

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers cc3100_spi.cpp Source File

cc3100_spi.cpp

00001 /*
00002  * spi.cpp mbed
00003  *
00004  * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
00005  *
00006  *
00007  *  Redistribution and use in source and binary forms, with or without
00008  *  modification, are permitted provided that the following conditions
00009  *  are met:
00010  *
00011  *    Redistributions of source code must retain the above copyright
00012  *    notice, this list of conditions and the following disclaimer.
00013  *
00014  *    Redistributions in binary form must reproduce the above copyright
00015  *    notice, this list of conditions and the following disclaimer in the
00016  *    documentation and/or other materials provided with the
00017  *    distribution.
00018  *
00019  *    Neither the name of Texas Instruments Incorporated nor the names of
00020  *    its contributors may be used to endorse or promote products derived
00021  *    from this software without specific prior written permission.
00022  *
00023  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00026  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00027  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00028  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00029  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00030  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00031  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00032  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034  *
00035 */
00036 
00037 #include "cc3100_simplelink.h"
00038 #include "cc3100_spi.h"
00039 #include "cli_uart.h"
00040 
00041 #include "osi.h"
00042 #include "portmacro.h"
00043 #include "projdefs.h"
00044 
00045 OsiMsgQ_t g_PBQueue; /*Message Queue*/
00046 uint32_t  g_publishCount;
00047 
00048 namespace mbed_cc3100 {
00049     
00050 P_EVENT_HANDLER   pIraEventHandler = 0;
00051 uint8_t           IntIsMasked;
00052 
00053 cc3100_spi::cc3100_spi(PinName button1_irq, PinName button2_irq, PinName cc3100_irq, PinName cc3100_nHIB, PinName cc3100_cs, SPI cc3100_spi, cc3100_driver &driver)
00054     : /*_sw1_irq(button1_irq), _sw2_irq(button2_irq),*/ _wlan_irq(cc3100_irq), _wlan_nHIB(cc3100_nHIB), _wlan_cs(cc3100_cs), _wlan_spi(cc3100_spi), _driver(driver)
00055 {
00056 
00057     _wlan_spi.format(8,0);//Note: 8 bit Mode 0
00058     _wlan_spi.frequency(12000000);
00059     _wlan_irq.rise(this, &cc3100_spi::IntSpiGPIOHandler);      //_SlDrvRxIrqHandler is called from IntSpiGPIOHandler
00060 //    _sw1_irq.rise(this, &cc3100_spi::buttonHandler_1);
00061 //    _sw2_irq.rise(this, &cc3100_spi::buttonHandler_2);
00062     _wlan_nHIB = 0;
00063     _wlan_cs = 1;
00064     wait_ms(100);
00065     
00066     
00067 }
00068 
00069 cc3100_spi::~cc3100_spi()
00070 {
00071 
00072 }
00073 
00074 int cc3100_spi::spi_Close(Fd_t fd)
00075 {
00076     
00077     // Disable WLAN Interrupt ...
00078     cc3100_InterruptDisable();
00079     
00080     return 0;
00081 }
00082 
00083 void cc3100_spi::button1_InterruptDisable()
00084 {
00085 //    _sw1_irq.rise(NULL);
00086     wait_ms(1);
00087 }  
00088 
00089 void cc3100_spi::button2_InterruptDisable()
00090 {
00091 //    _sw2_irq.rise(NULL);
00092     wait_ms(1);
00093 }   
00094 
00095 void cc3100_spi::button1_InterruptEnable()
00096 {    
00097 //    _sw1_irq.rise(this, &cc3100_spi::buttonHandler_1);
00098 }
00099 
00100 void cc3100_spi::button2_InterruptEnable()
00101 {    
00102 //    _sw2_irq.rise(this, &cc3100_spi::buttonHandler_2);
00103 }    
00104 
00105 void cc3100_spi::cc3100_InterruptEnable()
00106 {
00107     _wlan_irq.rise(this, &cc3100_spi::IntSpiGPIOHandler);
00108 }
00109 
00110 void cc3100_spi::cc3100_InterruptDisable()
00111 {
00112     _wlan_irq.rise(NULL);
00113 }
00114 
00115 void cc3100_spi::CC3100_disable()
00116 {
00117     _wlan_nHIB = 0;
00118 }
00119 
00120 void cc3100_spi::CC3100_enable()
00121 {
00122     
00123     _wlan_nHIB = 1;
00124 }
00125 
00126 Fd_t cc3100_spi::spi_Open(int8_t *ifName, uint32_t flags)
00127 {
00128 
00129     // Enable WLAN interrupt
00130     cc3100_InterruptEnable();
00131 
00132     return 0;
00133 }
00134 
00135 int cc3100_spi::spi_Write(Fd_t fd, uint8_t *pBuff, int len)
00136 {
00137     int len_to_return = len;
00138     
00139     _wlan_cs = 0;
00140 //    wait_us(10);
00141     while(len) {
00142         _wlan_spi.write(*pBuff++);
00143         len--;
00144     }
00145 //    wait_us(10);
00146     _wlan_cs = 1;
00147     
00148     return len_to_return;
00149 }
00150 
00151 int cc3100_spi::spi_Read(Fd_t fd, uint8_t *pBuff, int len)
00152 {
00153     int i = 0;
00154 
00155     _wlan_cs = 0;
00156 //    wait_us(10);
00157     for (i = 0; i < len; i++) {
00158         pBuff[i] = _wlan_spi.write(0xFF);
00159     }
00160 //    wait_us(10);
00161     _wlan_cs = 1;
00162     return len;
00163 }
00164 
00165 void cc3100_spi::IntSpiGPIOHandler(void)
00166 {
00167 
00168     if(_wlan_irq){
00169         _driver._SlDrvRxIrqHandler(0);
00170     }        
00171 }
00172 
00173 /*!
00174     \brief register an interrupt handler for the host IRQ
00175 
00176     \param[in]      InterruptHdl    -    pointer to interrupt handler function
00177 
00178     \param[in]      pValue          -    pointer to a memory strcuture that is
00179                     passed to the interrupt handler.
00180 
00181     \return         upon successful registration, the function shall return 0.
00182                     Otherwise, -1 shall be returned
00183 
00184     \sa
00185     \note           If there is already registered interrupt handler, the
00186                     function should overwrite the old handler with the new one
00187     \warning
00188 */
00189 int cc3100_spi::registerInterruptHandler(P_EVENT_HANDLER InterruptHdl , void* pValue)
00190 {
00191 
00192     pIraEventHandler = InterruptHdl;
00193     return 0;
00194 }
00195 
00196 /*!
00197     \brief     Unmasks the Host IRQ
00198 
00199     \param[in]      none
00200 
00201     \return         none
00202 
00203     \warning
00204 */
00205 void cc3100_spi::UnMaskIntHdlr()
00206 {
00207     IntIsMasked = FALSE;
00208 }
00209 
00210 /*!
00211     \brief      Masks the Host IRQ
00212 
00213     \param[in]      none
00214 
00215     \return         none
00216 
00217     \warning
00218 */
00219 void cc3100_spi::MaskIntHdlr()
00220 {
00221     IntIsMasked = TRUE;
00222 }
00223 
00224 /*!
00225     \brief Handles the button press 1 on the MCU 
00226            and updates the queue with relevant action.
00227     
00228     \param none
00229     
00230     \return none
00231  */
00232 void cc3100_spi::buttonHandler_1(void)
00233 {
00234     int32_t rv = 0;
00235     button1_InterruptDisable();
00236     osi_messages var;
00237 
00238     g_publishCount++;
00239 
00240     var = PUSH_BUTTON_1_PRESSED;
00241     
00242     rv = osi_MsgQWrite(&g_PBQueue, &var, OSI_NO_WAIT);
00243     if(rv < 0){
00244         Uart_Write((uint8_t*)"Messsage queue failed\r\n");
00245     }
00246     
00247 }
00248 
00249 /*!
00250     \brief Handles the button press 2 on the MCU 
00251            and updates the queue with relevant action.
00252     
00253     \param none
00254     
00255     \return none
00256  */
00257 void cc3100_spi::buttonHandler_2(void)
00258 {
00259     int32_t rv = 0;
00260     button2_InterruptDisable();
00261     osi_messages var;
00262 
00263     g_publishCount++;
00264 
00265     var = PUSH_BUTTON_2_PRESSED;
00266     
00267     rv = osi_MsgQWrite(&g_PBQueue, &var, OSI_NO_WAIT);
00268     if(rv < 0){
00269         Uart_Write((uint8_t*)"Messsage queue failed\r\n");
00270     }
00271     
00272 }
00273 
00274 }//namespace mbed_cc3100
00275 
00276 
00277 
00278 
00279 
00280 
00281 
00282