David Fletcher / Mbed 2 deprecated cc3100_test

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers cc3100_nonos.cpp Source File

cc3100_nonos.cpp

00001 /*
00002 * nonos.c - CC31xx/CC32xx Host Driver Implementation
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 
00038 
00039 /*****************************************************************************/
00040 /* Include files                                                             */
00041 /*****************************************************************************/
00042 #include "cc3100_simplelink.h"
00043 #include "cc3100_protocol.h"
00044 #include "cc3100_driver.h"
00045 
00046 #ifndef SL_PLATFORM_MULTI_THREADED
00047 
00048 #include "cc3100_nonos.h"
00049 
00050 #define NONOS_MAX_SPAWN_ENTRIES     5
00051 
00052 typedef struct
00053 {
00054     _SlSpawnEntryFunc_t         pEntry;
00055     void*                       pValue;
00056 }_SlNonOsSpawnEntry_t;
00057 
00058 typedef struct
00059 {
00060     _SlNonOsSpawnEntry_t    SpawnEntries[NONOS_MAX_SPAWN_ENTRIES];
00061 }_SlNonOsCB_t;
00062 
00063 _SlNonOsCB_t g__SlNonOsCB;
00064 
00065 
00066 _SlNonOsRetVal_t _SlNonOsSemSet(_SlNonOsSemObj_t* pSemObj , _SlNonOsSemObj_t Value)
00067 {
00068     *pSemObj = Value;
00069     return NONOS_RET_OK;
00070 }
00071 
00072 _SlNonOsRetVal_t _SlNonOsSemGet(_SlNonOsSemObj_t* pSyncObj, _SlNonOsSemObj_t WaitValue, _SlNonOsSemObj_t SetValue, _SlNonOsTime_t Timeout)
00073 {
00074     while (Timeout>0)
00075     {
00076         if (WaitValue == *pSyncObj)
00077         {
00078             *pSyncObj = SetValue;
00079             break;
00080         }
00081         if (Timeout != NONOS_WAIT_FOREVER)
00082         {       
00083             Timeout--;
00084         }
00085         _SlNonOsMainLoopTask();
00086 #ifdef _SlSyncWaitLoopCallback
00087         if( __NON_OS_SYNC_OBJ_SIGNAL_VALUE == WaitValue )
00088         {
00089             if (WaitValue == *pSyncObj)
00090             {
00091                 *pSyncObj = SetValue;
00092                 break;
00093             }
00094             _SlSyncWaitLoopCallback();
00095         }
00096 #endif
00097     }
00098 
00099     if (0 == Timeout)
00100     {
00101         return NONOS_RET_ERR;
00102     }
00103     else
00104     {
00105         return NONOS_RET_OK;
00106     }
00107 }
00108 
00109 
00110 _SlNonOsRetVal_t _SlNonOsSpawn(_SlSpawnEntryFunc_t pEntry , void* pValue , _u32 flags)
00111 {
00112     _i16 i;
00113 
00114     for (i=0 ; i<NONOS_MAX_SPAWN_ENTRIES ; i++)
00115     {
00116         _SlNonOsSpawnEntry_t* pE = &g__SlNonOsCB.SpawnEntries[i];
00117 
00118         if (NULL == pE->pEntry)
00119         {
00120             pE->pValue = pValue;
00121             pE->pEntry = pEntry;
00122             break;
00123         }
00124     }
00125 
00126     return NONOS_RET_OK;
00127 }
00128 
00129 
00130 _SlNonOsRetVal_t _SlNonOsMainLoopTask(void)
00131 {
00132     _i16 i;
00133 
00134     for (i=0 ; i<NONOS_MAX_SPAWN_ENTRIES ; i++)
00135     {
00136         _SlNonOsSpawnEntry_t* pE = &g__SlNonOsCB.SpawnEntries[i];
00137         _SlSpawnEntryFunc_t         pF = pE->pEntry;
00138 
00139         if (NULL != pF)
00140         {
00141             if((g_pCB)->RxIrqCnt != (g_pCB)->RxDoneCnt)
00142             {
00143                 pF(0);/*(pValue);*/
00144             }
00145             pE->pEntry = NULL;
00146             pE->pValue = NULL;
00147         }
00148     }
00149 
00150     return NONOS_RET_OK;
00151 }
00152 
00153 #endif /*(SL_PLATFORM != SL_PLATFORM_NON_OS)*/
00154