TI's CC3100 websocket camera demo with Arducam mini ov5642 and freertos. Should work with other M3's. Work in progress test demo.

Dependencies:   mbed

Committer:
dflet
Date:
Fri Sep 11 15:38:33 2015 +0000
Revision:
1:e448e81c416f
Parent:
0:400d8e75a8d0
Removed some debud.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:400d8e75a8d0 1 //*****************************************************************************
dflet 0:400d8e75a8d0 2 // osi_freertos.c
dflet 0:400d8e75a8d0 3 //
dflet 0:400d8e75a8d0 4 // Interface APIs for free-rtos function calls
dflet 0:400d8e75a8d0 5 //
dflet 0:400d8e75a8d0 6 // Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:400d8e75a8d0 7 //
dflet 0:400d8e75a8d0 8 //
dflet 0:400d8e75a8d0 9 // Redistribution and use in source and binary forms, with or without
dflet 0:400d8e75a8d0 10 // modification, are permitted provided that the following conditions
dflet 0:400d8e75a8d0 11 // are met:
dflet 0:400d8e75a8d0 12 //
dflet 0:400d8e75a8d0 13 // Redistributions of source code must retain the above copyright
dflet 0:400d8e75a8d0 14 // notice, this list of conditions and the following disclaimer.
dflet 0:400d8e75a8d0 15 //
dflet 0:400d8e75a8d0 16 // Redistributions in binary form must reproduce the above copyright
dflet 0:400d8e75a8d0 17 // notice, this list of conditions and the following disclaimer in the
dflet 0:400d8e75a8d0 18 // documentation and/or other materials provided with the
dflet 0:400d8e75a8d0 19 // distribution.
dflet 0:400d8e75a8d0 20 //
dflet 0:400d8e75a8d0 21 // Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:400d8e75a8d0 22 // its contributors may be used to endorse or promote products derived
dflet 0:400d8e75a8d0 23 // from this software without specific prior written permission.
dflet 0:400d8e75a8d0 24 //
dflet 0:400d8e75a8d0 25 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:400d8e75a8d0 26 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:400d8e75a8d0 27 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:400d8e75a8d0 28 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:400d8e75a8d0 29 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:400d8e75a8d0 30 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:400d8e75a8d0 31 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:400d8e75a8d0 32 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:400d8e75a8d0 33 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:400d8e75a8d0 34 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:400d8e75a8d0 35 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:400d8e75a8d0 36 //
dflet 0:400d8e75a8d0 37 //*****************************************************************************
dflet 0:400d8e75a8d0 38
dflet 0:400d8e75a8d0 39
dflet 0:400d8e75a8d0 40 #include <stdio.h>
dflet 0:400d8e75a8d0 41 #include <stdlib.h>
dflet 0:400d8e75a8d0 42 #include <string.h>
dflet 0:400d8e75a8d0 43 #include "FreeRTOS.h"
dflet 0:400d8e75a8d0 44 #include "task.h"
dflet 0:400d8e75a8d0 45 #include "semphr.h"
dflet 0:400d8e75a8d0 46 #include "portmacro.h"
dflet 0:400d8e75a8d0 47 #include <osi.h>
dflet 0:400d8e75a8d0 48
dflet 0:400d8e75a8d0 49
dflet 0:400d8e75a8d0 50
dflet 0:400d8e75a8d0 51 portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
dflet 0:400d8e75a8d0 52 //Local function definition
dflet 0:400d8e75a8d0 53 static void vSimpleLinkSpawnTask( void *pvParameters );
dflet 0:400d8e75a8d0 54 //Queue Handler
dflet 0:400d8e75a8d0 55 xQueueHandle xSimpleLinkSpawnQueue = NULL;
dflet 0:400d8e75a8d0 56 xTaskHandle xSimpleLinkSpawnTaskHndl = NULL;
dflet 0:400d8e75a8d0 57 // Queue size
dflet 0:400d8e75a8d0 58 #define slQUEUE_SIZE ( 3 )
dflet 0:400d8e75a8d0 59
dflet 0:400d8e75a8d0 60
dflet 0:400d8e75a8d0 61
dflet 0:400d8e75a8d0 62
dflet 0:400d8e75a8d0 63
dflet 0:400d8e75a8d0 64 /*!
dflet 0:400d8e75a8d0 65 \brief This function creates a sync object
dflet 0:400d8e75a8d0 66
dflet 0:400d8e75a8d0 67 The sync object is used for synchronization between different thread or ISR and
dflet 0:400d8e75a8d0 68 a thread.
dflet 0:400d8e75a8d0 69
dflet 0:400d8e75a8d0 70 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 71
dflet 0:400d8e75a8d0 72 \return upon successful creation the function should return 0
dflet 0:400d8e75a8d0 73 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 74 \note
dflet 0:400d8e75a8d0 75 \warning
dflet 0:400d8e75a8d0 76 */
dflet 0:400d8e75a8d0 77 OsiReturnVal_e osi_SyncObjCreate(OsiSyncObj_t* pSyncObj)
dflet 0:400d8e75a8d0 78 {
dflet 0:400d8e75a8d0 79 //Check for NULL
dflet 0:400d8e75a8d0 80 if(NULL == pSyncObj)
dflet 0:400d8e75a8d0 81 {
dflet 0:400d8e75a8d0 82 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 83 }
dflet 0:400d8e75a8d0 84 xSemaphoreHandle *pl_SyncObj = (xSemaphoreHandle *)pSyncObj;
dflet 0:400d8e75a8d0 85
dflet 0:400d8e75a8d0 86 *pl_SyncObj = xSemaphoreCreateBinary();
dflet 0:400d8e75a8d0 87
dflet 0:400d8e75a8d0 88 if((xSemaphoreHandle)(*pSyncObj) != NULL)
dflet 0:400d8e75a8d0 89 {
dflet 0:400d8e75a8d0 90 return OSI_OK;
dflet 0:400d8e75a8d0 91 }
dflet 0:400d8e75a8d0 92 else
dflet 0:400d8e75a8d0 93 {
dflet 0:400d8e75a8d0 94 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 95 }
dflet 0:400d8e75a8d0 96 }
dflet 0:400d8e75a8d0 97
dflet 0:400d8e75a8d0 98 /*!
dflet 0:400d8e75a8d0 99 \brief This function deletes a sync object
dflet 0:400d8e75a8d0 100
dflet 0:400d8e75a8d0 101 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 102
dflet 0:400d8e75a8d0 103 \return upon successful deletion the function should return 0
dflet 0:400d8e75a8d0 104 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 105 \note
dflet 0:400d8e75a8d0 106 \warning
dflet 0:400d8e75a8d0 107 */
dflet 0:400d8e75a8d0 108 OsiReturnVal_e osi_SyncObjDelete(OsiSyncObj_t* pSyncObj)
dflet 0:400d8e75a8d0 109 {
dflet 0:400d8e75a8d0 110 //Check for NULL
dflet 0:400d8e75a8d0 111 if(NULL == pSyncObj)
dflet 0:400d8e75a8d0 112 {
dflet 0:400d8e75a8d0 113 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 114 }
dflet 0:400d8e75a8d0 115 vSemaphoreDelete(*pSyncObj );
dflet 0:400d8e75a8d0 116 return OSI_OK;
dflet 0:400d8e75a8d0 117 }
dflet 0:400d8e75a8d0 118
dflet 0:400d8e75a8d0 119 /*!
dflet 0:400d8e75a8d0 120 \brief This function generates a sync signal for the object.
dflet 0:400d8e75a8d0 121
dflet 0:400d8e75a8d0 122 All suspended threads waiting on this sync object are resumed
dflet 0:400d8e75a8d0 123
dflet 0:400d8e75a8d0 124 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 125
dflet 0:400d8e75a8d0 126 \return upon successful signaling the function should return 0
dflet 0:400d8e75a8d0 127 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 128 \note the function could be called from ISR context
dflet 0:400d8e75a8d0 129 \warning
dflet 0:400d8e75a8d0 130 */
dflet 0:400d8e75a8d0 131 OsiReturnVal_e osi_SyncObjSignal(OsiSyncObj_t* pSyncObj)
dflet 0:400d8e75a8d0 132 {
dflet 0:400d8e75a8d0 133 //Check for NULL
dflet 0:400d8e75a8d0 134 if(NULL == pSyncObj)
dflet 0:400d8e75a8d0 135 {
dflet 0:400d8e75a8d0 136 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 137 }
dflet 0:400d8e75a8d0 138
dflet 0:400d8e75a8d0 139 if(pdTRUE != xSemaphoreGive( *pSyncObj ))
dflet 0:400d8e75a8d0 140 {
dflet 0:400d8e75a8d0 141 //In case of Semaphore, you are expected to get this if multiple sem
dflet 0:400d8e75a8d0 142 // give is called before sem take
dflet 0:400d8e75a8d0 143 return OSI_OK;
dflet 0:400d8e75a8d0 144 }
dflet 0:400d8e75a8d0 145
dflet 0:400d8e75a8d0 146 return OSI_OK;
dflet 0:400d8e75a8d0 147 }
dflet 0:400d8e75a8d0 148 /*!
dflet 0:400d8e75a8d0 149 \brief This function generates a sync signal for the object
dflet 0:400d8e75a8d0 150 from ISR context.
dflet 0:400d8e75a8d0 151
dflet 0:400d8e75a8d0 152 All suspended threads waiting on this sync object are resumed
dflet 0:400d8e75a8d0 153
dflet 0:400d8e75a8d0 154 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 155
dflet 0:400d8e75a8d0 156 \return upon successful signalling the function should return 0
dflet 0:400d8e75a8d0 157 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 158 \note the function is called from ISR context
dflet 0:400d8e75a8d0 159 \warning
dflet 0:400d8e75a8d0 160 */
dflet 0:400d8e75a8d0 161 OsiReturnVal_e osi_SyncObjSignalFromISR(OsiSyncObj_t* pSyncObj)
dflet 0:400d8e75a8d0 162 {
dflet 0:400d8e75a8d0 163 //Check for NULL
dflet 0:400d8e75a8d0 164 if(NULL == pSyncObj)
dflet 0:400d8e75a8d0 165 {
dflet 0:400d8e75a8d0 166 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 167 }
dflet 0:400d8e75a8d0 168 xHigherPriorityTaskWoken = pdFALSE;
dflet 0:400d8e75a8d0 169 if(pdTRUE == xSemaphoreGiveFromISR( *pSyncObj, &xHigherPriorityTaskWoken ))
dflet 0:400d8e75a8d0 170 {
dflet 0:400d8e75a8d0 171 if( xHigherPriorityTaskWoken )
dflet 0:400d8e75a8d0 172 {
dflet 0:400d8e75a8d0 173 taskYIELD ();
dflet 0:400d8e75a8d0 174 }
dflet 0:400d8e75a8d0 175 return OSI_OK;
dflet 0:400d8e75a8d0 176 }
dflet 0:400d8e75a8d0 177 else
dflet 0:400d8e75a8d0 178 {
dflet 0:400d8e75a8d0 179 //In case of Semaphore, you are expected to get this if multiple sem
dflet 0:400d8e75a8d0 180 // give is called before sem take
dflet 0:400d8e75a8d0 181 return OSI_OK;
dflet 0:400d8e75a8d0 182 }
dflet 0:400d8e75a8d0 183 }
dflet 0:400d8e75a8d0 184
dflet 0:400d8e75a8d0 185 /*!
dflet 0:400d8e75a8d0 186 \brief This function waits for a sync signal of the specific sync object
dflet 0:400d8e75a8d0 187
dflet 0:400d8e75a8d0 188 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 189 \param Timeout - numeric value specifies the maximum number of mSec to
dflet 0:400d8e75a8d0 190 stay suspended while waiting for the sync signal
dflet 0:400d8e75a8d0 191 Currently, the simple link driver uses only two values:
dflet 0:400d8e75a8d0 192 - OSI_WAIT_FOREVER
dflet 0:400d8e75a8d0 193 - OSI_NO_WAIT
dflet 0:400d8e75a8d0 194
dflet 0:400d8e75a8d0 195 \return upon successful reception of the signal within the timeout window return 0
dflet 0:400d8e75a8d0 196 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 197 \note
dflet 0:400d8e75a8d0 198 \warning
dflet 0:400d8e75a8d0 199 */
dflet 0:400d8e75a8d0 200 OsiReturnVal_e osi_SyncObjWait(OsiSyncObj_t* pSyncObj , OsiTime_t Timeout)
dflet 0:400d8e75a8d0 201 {
dflet 0:400d8e75a8d0 202 //Check for NULL
dflet 0:400d8e75a8d0 203 if(NULL == pSyncObj)
dflet 0:400d8e75a8d0 204 {
dflet 0:400d8e75a8d0 205 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 206 }
dflet 0:400d8e75a8d0 207 if(pdTRUE == xSemaphoreTake( (xSemaphoreHandle)*pSyncObj, ( portTickType )(Timeout/portTICK_RATE_MS) ))
dflet 0:400d8e75a8d0 208 {
dflet 0:400d8e75a8d0 209 return OSI_OK;
dflet 0:400d8e75a8d0 210 }
dflet 0:400d8e75a8d0 211 else
dflet 0:400d8e75a8d0 212 {
dflet 0:400d8e75a8d0 213 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 214 }
dflet 0:400d8e75a8d0 215 }
dflet 0:400d8e75a8d0 216
dflet 0:400d8e75a8d0 217 /*!
dflet 0:400d8e75a8d0 218 \brief This function clears a sync object
dflet 0:400d8e75a8d0 219
dflet 0:400d8e75a8d0 220 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 221
dflet 0:400d8e75a8d0 222 \return upon successful clearing the function should return 0
dflet 0:400d8e75a8d0 223 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 224 \note
dflet 0:400d8e75a8d0 225 \warning
dflet 0:400d8e75a8d0 226 */
dflet 0:400d8e75a8d0 227 OsiReturnVal_e osi_SyncObjClear(OsiSyncObj_t* pSyncObj)
dflet 0:400d8e75a8d0 228 {
dflet 0:400d8e75a8d0 229 //Check for NULL
dflet 0:400d8e75a8d0 230 if(NULL == pSyncObj)
dflet 0:400d8e75a8d0 231 {
dflet 0:400d8e75a8d0 232 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 233 }
dflet 0:400d8e75a8d0 234
dflet 0:400d8e75a8d0 235 if (OSI_OK == osi_SyncObjWait(pSyncObj,0) )
dflet 0:400d8e75a8d0 236 {
dflet 0:400d8e75a8d0 237 return OSI_OK;
dflet 0:400d8e75a8d0 238 }
dflet 0:400d8e75a8d0 239 else
dflet 0:400d8e75a8d0 240 {
dflet 0:400d8e75a8d0 241 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 242 }
dflet 0:400d8e75a8d0 243 }
dflet 0:400d8e75a8d0 244
dflet 0:400d8e75a8d0 245 /*!
dflet 0:400d8e75a8d0 246 \brief This function creates a locking object.
dflet 0:400d8e75a8d0 247
dflet 0:400d8e75a8d0 248 The locking object is used for protecting a shared resources between different
dflet 0:400d8e75a8d0 249 threads.
dflet 0:400d8e75a8d0 250
dflet 0:400d8e75a8d0 251 \param pLockObj - pointer to the locking object control block
dflet 0:400d8e75a8d0 252
dflet 0:400d8e75a8d0 253 \return upon successful creation the function should return 0
dflet 0:400d8e75a8d0 254 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 255 \note
dflet 0:400d8e75a8d0 256 \warning
dflet 0:400d8e75a8d0 257 */
dflet 0:400d8e75a8d0 258 OsiReturnVal_e osi_LockObjCreate(OsiLockObj_t* pLockObj)
dflet 0:400d8e75a8d0 259 {
dflet 0:400d8e75a8d0 260 //Check for NULL
dflet 0:400d8e75a8d0 261 if(NULL == pLockObj)
dflet 0:400d8e75a8d0 262 {
dflet 0:400d8e75a8d0 263 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 264 }
dflet 0:400d8e75a8d0 265 *pLockObj = (OsiLockObj_t)xSemaphoreCreateMutex();
dflet 0:400d8e75a8d0 266 if(pLockObj != NULL)
dflet 0:400d8e75a8d0 267 {
dflet 0:400d8e75a8d0 268 return OSI_OK;
dflet 0:400d8e75a8d0 269 }
dflet 0:400d8e75a8d0 270 else
dflet 0:400d8e75a8d0 271 {
dflet 0:400d8e75a8d0 272 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 273 }
dflet 0:400d8e75a8d0 274 }
dflet 0:400d8e75a8d0 275
dflet 0:400d8e75a8d0 276 /*!
dflet 0:400d8e75a8d0 277 \brief This function creates a Task.
dflet 0:400d8e75a8d0 278
dflet 0:400d8e75a8d0 279 Creates a new Task and add it to the last of tasks that are ready to run
dflet 0:400d8e75a8d0 280
dflet 0:400d8e75a8d0 281 \param pEntry - pointer to the Task Function
dflet 0:400d8e75a8d0 282 \param pcName - Task Name String
dflet 0:400d8e75a8d0 283 \param usStackDepth - Stack Size in bytes
dflet 0:400d8e75a8d0 284 \param pvParameters - pointer to structure to be passed to the Task Function
dflet 0:400d8e75a8d0 285 \param uxPriority - Task Priority
dflet 0:400d8e75a8d0 286
dflet 0:400d8e75a8d0 287 \return upon successful creation the function should return 0
dflet 0:400d8e75a8d0 288 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 289 \note
dflet 0:400d8e75a8d0 290 \warning
dflet 0:400d8e75a8d0 291 */
dflet 0:400d8e75a8d0 292 OsiReturnVal_e osi_TaskCreate(P_OSI_TASK_ENTRY pEntry,const signed char * const pcName,
dflet 0:400d8e75a8d0 293 unsigned short usStackDepth, void *pvParameters,
dflet 0:400d8e75a8d0 294 uint32_t uxPriority,OsiTaskHandle* pTaskHandle)
dflet 0:400d8e75a8d0 295 {
dflet 0:400d8e75a8d0 296 if(pdPASS == xTaskCreate( pEntry, (const char *)pcName,
dflet 0:400d8e75a8d0 297 (usStackDepth/(sizeof( portSTACK_TYPE ))),
dflet 0:400d8e75a8d0 298 pvParameters,(unsigned portBASE_TYPE)uxPriority,
dflet 0:400d8e75a8d0 299 (xTaskHandle*)pTaskHandle ))
dflet 0:400d8e75a8d0 300 {
dflet 0:400d8e75a8d0 301 return OSI_OK;
dflet 0:400d8e75a8d0 302 }
dflet 0:400d8e75a8d0 303
dflet 0:400d8e75a8d0 304 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 305 }
dflet 0:400d8e75a8d0 306
dflet 0:400d8e75a8d0 307
dflet 0:400d8e75a8d0 308 /*!
dflet 0:400d8e75a8d0 309 \brief This function Deletes a Task.
dflet 0:400d8e75a8d0 310
dflet 0:400d8e75a8d0 311 Deletes a Task and remove it from list of running task
dflet 0:400d8e75a8d0 312
dflet 0:400d8e75a8d0 313 \param pTaskHandle - Task Handle
dflet 0:400d8e75a8d0 314
dflet 0:400d8e75a8d0 315 \note
dflet 0:400d8e75a8d0 316 \warning
dflet 0:400d8e75a8d0 317 */
dflet 0:400d8e75a8d0 318 void osi_TaskDelete(OsiTaskHandle* pTaskHandle)
dflet 0:400d8e75a8d0 319 {
dflet 0:400d8e75a8d0 320 vTaskDelete((xTaskHandle)*pTaskHandle);
dflet 0:400d8e75a8d0 321 }
dflet 0:400d8e75a8d0 322
dflet 0:400d8e75a8d0 323
dflet 0:400d8e75a8d0 324
dflet 0:400d8e75a8d0 325 /*!
dflet 0:400d8e75a8d0 326 \brief This function deletes a locking object.
dflet 0:400d8e75a8d0 327
dflet 0:400d8e75a8d0 328 \param pLockObj - pointer to the locking object control block
dflet 0:400d8e75a8d0 329
dflet 0:400d8e75a8d0 330 \return upon successful deletion the function should return 0
dflet 0:400d8e75a8d0 331 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 332 \note
dflet 0:400d8e75a8d0 333 \warning
dflet 0:400d8e75a8d0 334 */
dflet 0:400d8e75a8d0 335 OsiReturnVal_e osi_LockObjDelete(OsiLockObj_t* pLockObj)
dflet 0:400d8e75a8d0 336 {
dflet 0:400d8e75a8d0 337 vSemaphoreDelete((xSemaphoreHandle)*pLockObj );
dflet 0:400d8e75a8d0 338 return OSI_OK;
dflet 0:400d8e75a8d0 339 }
dflet 0:400d8e75a8d0 340
dflet 0:400d8e75a8d0 341 /*!
dflet 0:400d8e75a8d0 342 \brief This function locks a locking object.
dflet 0:400d8e75a8d0 343
dflet 0:400d8e75a8d0 344 All other threads that call this function before this thread calls
dflet 0:400d8e75a8d0 345 the osi_LockObjUnlock would be suspended
dflet 0:400d8e75a8d0 346
dflet 0:400d8e75a8d0 347 \param pLockObj - pointer to the locking object control block
dflet 0:400d8e75a8d0 348 \param Timeout - numeric value specifies the maximum number of mSec to
dflet 0:400d8e75a8d0 349 stay suspended while waiting for the locking object
dflet 0:400d8e75a8d0 350 Currently, the simple link driver uses only two values:
dflet 0:400d8e75a8d0 351 - OSI_WAIT_FOREVER
dflet 0:400d8e75a8d0 352 - OSI_NO_WAIT
dflet 0:400d8e75a8d0 353
dflet 0:400d8e75a8d0 354
dflet 0:400d8e75a8d0 355 \return upon successful reception of the locking object the function should return 0
dflet 0:400d8e75a8d0 356 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 357 \note
dflet 0:400d8e75a8d0 358 \warning
dflet 0:400d8e75a8d0 359 */
dflet 0:400d8e75a8d0 360 OsiReturnVal_e osi_LockObjLock(OsiLockObj_t* pLockObj , OsiTime_t Timeout)
dflet 0:400d8e75a8d0 361 {
dflet 0:400d8e75a8d0 362 //Check for NULL
dflet 0:400d8e75a8d0 363 if(NULL == pLockObj)
dflet 0:400d8e75a8d0 364 {
dflet 0:400d8e75a8d0 365 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 366 }
dflet 0:400d8e75a8d0 367 //Take Semaphore
dflet 0:400d8e75a8d0 368 if(pdTRUE == xSemaphoreTake( *pLockObj, ( portTickType ) (Timeout/portTICK_RATE_MS) ))
dflet 0:400d8e75a8d0 369 {
dflet 0:400d8e75a8d0 370 return OSI_OK;
dflet 0:400d8e75a8d0 371 }
dflet 0:400d8e75a8d0 372 else
dflet 0:400d8e75a8d0 373 {
dflet 0:400d8e75a8d0 374 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 375 }
dflet 0:400d8e75a8d0 376 }
dflet 0:400d8e75a8d0 377
dflet 0:400d8e75a8d0 378 /*!
dflet 0:400d8e75a8d0 379 \brief This function unlock a locking object.
dflet 0:400d8e75a8d0 380
dflet 0:400d8e75a8d0 381 \param pLockObj - pointer to the locking object control block
dflet 0:400d8e75a8d0 382
dflet 0:400d8e75a8d0 383 \return upon successful unlocking the function should return 0
dflet 0:400d8e75a8d0 384 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 385 \note
dflet 0:400d8e75a8d0 386 \warning
dflet 0:400d8e75a8d0 387 */
dflet 0:400d8e75a8d0 388 OsiReturnVal_e osi_LockObjUnlock(OsiLockObj_t* pLockObj)
dflet 0:400d8e75a8d0 389 {
dflet 0:400d8e75a8d0 390 //Check for NULL
dflet 0:400d8e75a8d0 391 if(NULL == pLockObj)
dflet 0:400d8e75a8d0 392 {
dflet 0:400d8e75a8d0 393 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 394 }
dflet 0:400d8e75a8d0 395 //Release Semaphore
dflet 0:400d8e75a8d0 396 if(pdTRUE == xSemaphoreGive( *pLockObj ))
dflet 0:400d8e75a8d0 397 {
dflet 0:400d8e75a8d0 398 return OSI_OK;
dflet 0:400d8e75a8d0 399 }
dflet 0:400d8e75a8d0 400 else
dflet 0:400d8e75a8d0 401 {
dflet 0:400d8e75a8d0 402 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 403 }
dflet 0:400d8e75a8d0 404 }
dflet 0:400d8e75a8d0 405
dflet 0:400d8e75a8d0 406
dflet 0:400d8e75a8d0 407 /*!
dflet 0:400d8e75a8d0 408 \brief This function call the pEntry callback from a different context
dflet 0:400d8e75a8d0 409
dflet 0:400d8e75a8d0 410 \param pEntry - pointer to the entry callback function
dflet 0:400d8e75a8d0 411
dflet 0:400d8e75a8d0 412 \param pValue - pointer to any type of memory structure that would be
dflet 0:400d8e75a8d0 413 passed to pEntry callback from the execution thread.
dflet 0:400d8e75a8d0 414
dflet 0:400d8e75a8d0 415 \param flags - execution flags - reserved for future usage
dflet 0:400d8e75a8d0 416
dflet 0:400d8e75a8d0 417 \return upon successful registration of the spawn the function should return 0
dflet 0:400d8e75a8d0 418 (the function is not blocked till the end of the execution of the function
dflet 0:400d8e75a8d0 419 and could be returned before the execution is actually completed)
dflet 0:400d8e75a8d0 420 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 421 \note
dflet 0:400d8e75a8d0 422 \warning
dflet 0:400d8e75a8d0 423 */
dflet 0:400d8e75a8d0 424
dflet 0:400d8e75a8d0 425 OsiReturnVal_e osi_Spawn(P_OSI_SPAWN_ENTRY pEntry , void* pValue , uint32_t flags)
dflet 0:400d8e75a8d0 426 {
dflet 0:400d8e75a8d0 427
dflet 0:400d8e75a8d0 428 tSimpleLinkSpawnMsg Msg;
dflet 0:400d8e75a8d0 429 Msg.pEntry = pEntry;
dflet 0:400d8e75a8d0 430 Msg.pValue = pValue;
dflet 0:400d8e75a8d0 431 xHigherPriorityTaskWoken = pdFALSE;
dflet 0:400d8e75a8d0 432
dflet 0:400d8e75a8d0 433 if(pdTRUE == xQueueSendFromISR( xSimpleLinkSpawnQueue, &Msg, &xHigherPriorityTaskWoken ))
dflet 0:400d8e75a8d0 434 {
dflet 0:400d8e75a8d0 435 if( xHigherPriorityTaskWoken )
dflet 0:400d8e75a8d0 436 {
dflet 0:400d8e75a8d0 437 taskYIELD ();
dflet 0:400d8e75a8d0 438 }
dflet 0:400d8e75a8d0 439
dflet 0:400d8e75a8d0 440 return OSI_OK;
dflet 0:400d8e75a8d0 441 }
dflet 0:400d8e75a8d0 442 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 443 }
dflet 0:400d8e75a8d0 444
dflet 0:400d8e75a8d0 445
dflet 0:400d8e75a8d0 446 /*!
dflet 0:400d8e75a8d0 447 \brief This is the simplelink spawn task to call SL callback from a different context
dflet 0:400d8e75a8d0 448
dflet 0:400d8e75a8d0 449 \param pvParameters - pointer to the task parameter
dflet 0:400d8e75a8d0 450
dflet 0:400d8e75a8d0 451 \return void
dflet 0:400d8e75a8d0 452 \note
dflet 0:400d8e75a8d0 453 \warning
dflet 0:400d8e75a8d0 454 */
dflet 0:400d8e75a8d0 455 void vSimpleLinkSpawnTask(void *pvParameters)
dflet 0:400d8e75a8d0 456 {
dflet 0:400d8e75a8d0 457 tSimpleLinkSpawnMsg Msg;
dflet 0:400d8e75a8d0 458 portBASE_TYPE ret=pdFAIL;
dflet 0:400d8e75a8d0 459
dflet 0:400d8e75a8d0 460 for(;;)
dflet 0:400d8e75a8d0 461 {
dflet 0:400d8e75a8d0 462 ret = xQueueReceive( xSimpleLinkSpawnQueue, &Msg, portMAX_DELAY );
dflet 0:400d8e75a8d0 463 if(ret == pdPASS)
dflet 0:400d8e75a8d0 464 {
dflet 0:400d8e75a8d0 465 Msg.pEntry(Msg.pValue);
dflet 0:400d8e75a8d0 466 }
dflet 0:400d8e75a8d0 467 }
dflet 0:400d8e75a8d0 468 }
dflet 0:400d8e75a8d0 469
dflet 0:400d8e75a8d0 470 /*!
dflet 0:400d8e75a8d0 471 \brief This is the API to create SL spawn task and create the SL queue
dflet 0:400d8e75a8d0 472
dflet 0:400d8e75a8d0 473 \param uxPriority - task priority
dflet 0:400d8e75a8d0 474
dflet 0:400d8e75a8d0 475 \return void
dflet 0:400d8e75a8d0 476 \note
dflet 0:400d8e75a8d0 477 \warning
dflet 0:400d8e75a8d0 478 */
dflet 0:400d8e75a8d0 479 OsiReturnVal_e VStartSimpleLinkSpawnTask(unsigned portBASE_TYPE uxPriority)
dflet 0:400d8e75a8d0 480 {
dflet 0:400d8e75a8d0 481 xSimpleLinkSpawnQueue = xQueueCreate( slQUEUE_SIZE, sizeof( tSimpleLinkSpawnMsg ) );
dflet 0:400d8e75a8d0 482 if(0 == xSimpleLinkSpawnQueue)
dflet 0:400d8e75a8d0 483 {
dflet 0:400d8e75a8d0 484 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 485 }
dflet 0:400d8e75a8d0 486 if(pdPASS == xTaskCreate( vSimpleLinkSpawnTask, /*( portCHAR * )*/ "SLSPAWN",\
dflet 0:400d8e75a8d0 487 (512/sizeof( portSTACK_TYPE )), NULL, uxPriority, &xSimpleLinkSpawnTaskHndl ))
dflet 0:400d8e75a8d0 488 {
dflet 0:400d8e75a8d0 489 return OSI_OK;
dflet 0:400d8e75a8d0 490 }
dflet 0:400d8e75a8d0 491
dflet 0:400d8e75a8d0 492 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 493 }
dflet 0:400d8e75a8d0 494
dflet 0:400d8e75a8d0 495 /*!
dflet 0:400d8e75a8d0 496 \brief This is the API to delete SL spawn task and delete the SL queue
dflet 0:400d8e75a8d0 497
dflet 0:400d8e75a8d0 498 \param none
dflet 0:400d8e75a8d0 499
dflet 0:400d8e75a8d0 500 \return void
dflet 0:400d8e75a8d0 501 \note
dflet 0:400d8e75a8d0 502 \warning
dflet 0:400d8e75a8d0 503 */
dflet 0:400d8e75a8d0 504 void VDeleteSimpleLinkSpawnTask( void )
dflet 0:400d8e75a8d0 505 {
dflet 0:400d8e75a8d0 506 if(0 != xSimpleLinkSpawnTaskHndl)
dflet 0:400d8e75a8d0 507 {
dflet 0:400d8e75a8d0 508 vTaskDelete( xSimpleLinkSpawnTaskHndl );
dflet 0:400d8e75a8d0 509 xSimpleLinkSpawnTaskHndl = 0;
dflet 0:400d8e75a8d0 510 }
dflet 0:400d8e75a8d0 511
dflet 0:400d8e75a8d0 512 if(0 !=xSimpleLinkSpawnQueue)
dflet 0:400d8e75a8d0 513 {
dflet 0:400d8e75a8d0 514 vQueueDelete( xSimpleLinkSpawnQueue );
dflet 0:400d8e75a8d0 515 xSimpleLinkSpawnQueue = 0;
dflet 0:400d8e75a8d0 516 }
dflet 0:400d8e75a8d0 517 }
dflet 0:400d8e75a8d0 518
dflet 0:400d8e75a8d0 519 /*!
dflet 0:400d8e75a8d0 520 \brief This function is used to create the MsgQ
dflet 0:400d8e75a8d0 521
dflet 0:400d8e75a8d0 522 \param pMsgQ - pointer to the message queue
dflet 0:400d8e75a8d0 523 \param pMsgQName - msg queue name
dflet 0:400d8e75a8d0 524 \param MsgSize - size of message on the queue
dflet 0:400d8e75a8d0 525 \param MaxMsgs - max. number of msgs that the queue can hold
dflet 0:400d8e75a8d0 526
dflet 0:400d8e75a8d0 527 \return - OsiReturnVal_e
dflet 0:400d8e75a8d0 528 \note
dflet 0:400d8e75a8d0 529 \warning
dflet 0:400d8e75a8d0 530 */
dflet 0:400d8e75a8d0 531 OsiReturnVal_e osi_MsgQCreate(OsiMsgQ_t* pMsgQ ,
dflet 0:400d8e75a8d0 532 char* pMsgQName,
dflet 0:400d8e75a8d0 533 uint32_t MsgSize,
dflet 0:400d8e75a8d0 534 uint32_t MaxMsgs)
dflet 0:400d8e75a8d0 535 {
dflet 0:400d8e75a8d0 536 //Check for NULL
dflet 0:400d8e75a8d0 537 if(NULL == pMsgQ)
dflet 0:400d8e75a8d0 538 {
dflet 0:400d8e75a8d0 539 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 540 }
dflet 0:400d8e75a8d0 541
dflet 0:400d8e75a8d0 542 xQueueHandle handle =0;
dflet 0:400d8e75a8d0 543
dflet 0:400d8e75a8d0 544 //Create Queue
dflet 0:400d8e75a8d0 545 handle = xQueueCreate( MaxMsgs, MsgSize );
dflet 0:400d8e75a8d0 546 if (handle==0)
dflet 0:400d8e75a8d0 547 {
dflet 0:400d8e75a8d0 548 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 549 }
dflet 0:400d8e75a8d0 550
dflet 0:400d8e75a8d0 551 *pMsgQ = (OsiMsgQ_t)handle;
dflet 0:400d8e75a8d0 552 return OSI_OK;
dflet 0:400d8e75a8d0 553 }
dflet 0:400d8e75a8d0 554 /*!
dflet 0:400d8e75a8d0 555 \brief This function is used to delete the MsgQ
dflet 0:400d8e75a8d0 556
dflet 0:400d8e75a8d0 557 \param pMsgQ - pointer to the message queue
dflet 0:400d8e75a8d0 558
dflet 0:400d8e75a8d0 559 \return - OsiReturnVal_e
dflet 0:400d8e75a8d0 560 \note
dflet 0:400d8e75a8d0 561 \warning
dflet 0:400d8e75a8d0 562 */
dflet 0:400d8e75a8d0 563 OsiReturnVal_e osi_MsgQDelete(OsiMsgQ_t* pMsgQ)
dflet 0:400d8e75a8d0 564 {
dflet 0:400d8e75a8d0 565 //Check for NULL
dflet 0:400d8e75a8d0 566 if(NULL == pMsgQ)
dflet 0:400d8e75a8d0 567 {
dflet 0:400d8e75a8d0 568 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 569 }
dflet 0:400d8e75a8d0 570 vQueueDelete((xQueueHandle) *pMsgQ );
dflet 0:400d8e75a8d0 571 return OSI_OK;
dflet 0:400d8e75a8d0 572 }
dflet 0:400d8e75a8d0 573 /*!
dflet 0:400d8e75a8d0 574 \brief This function is used to write data to the MsgQ
dflet 0:400d8e75a8d0 575
dflet 0:400d8e75a8d0 576 \param pMsgQ - pointer to the message queue
dflet 0:400d8e75a8d0 577 \param pMsg - pointer to the Msg strut to read into
dflet 0:400d8e75a8d0 578 \param Timeout - timeout to wait for the Msg to be available
dflet 0:400d8e75a8d0 579
dflet 0:400d8e75a8d0 580 \return - OsiReturnVal_e
dflet 0:400d8e75a8d0 581 \note
dflet 0:400d8e75a8d0 582 \warning
dflet 0:400d8e75a8d0 583 */
dflet 0:400d8e75a8d0 584
dflet 0:400d8e75a8d0 585 OsiReturnVal_e osi_MsgQWrite(OsiMsgQ_t* pMsgQ, void* pMsg , OsiTime_t Timeout)
dflet 0:400d8e75a8d0 586 {
dflet 0:400d8e75a8d0 587 //Check for NULL
dflet 0:400d8e75a8d0 588 if(NULL == pMsgQ)
dflet 0:400d8e75a8d0 589 {
dflet 0:400d8e75a8d0 590 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 591 }
dflet 0:400d8e75a8d0 592
dflet 0:400d8e75a8d0 593 if(pdPASS == xQueueSendFromISR((xQueueHandle) *pMsgQ, pMsg, &xHigherPriorityTaskWoken ))
dflet 0:400d8e75a8d0 594 {
dflet 0:400d8e75a8d0 595 taskYIELD ();
dflet 0:400d8e75a8d0 596 return OSI_OK;
dflet 0:400d8e75a8d0 597 }
dflet 0:400d8e75a8d0 598 else
dflet 0:400d8e75a8d0 599 {
dflet 0:400d8e75a8d0 600 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 601 }
dflet 0:400d8e75a8d0 602 }
dflet 0:400d8e75a8d0 603 /*!
dflet 0:400d8e75a8d0 604 \brief This function is used to read data from the MsgQ
dflet 0:400d8e75a8d0 605
dflet 0:400d8e75a8d0 606 \param pMsgQ - pointer to the message queue
dflet 0:400d8e75a8d0 607 \param pMsg - pointer to the Msg strut to read into
dflet 0:400d8e75a8d0 608 \param Timeout - timeout to wait for the Msg to be available
dflet 0:400d8e75a8d0 609
dflet 0:400d8e75a8d0 610 \return - OsiReturnVal_e
dflet 0:400d8e75a8d0 611 \note
dflet 0:400d8e75a8d0 612 \warning
dflet 0:400d8e75a8d0 613 */
dflet 0:400d8e75a8d0 614
dflet 0:400d8e75a8d0 615 OsiReturnVal_e osi_MsgQRead(OsiMsgQ_t* pMsgQ, void* pMsg , OsiTime_t Timeout)
dflet 0:400d8e75a8d0 616 {
dflet 0:400d8e75a8d0 617 //Check for NULL
dflet 0:400d8e75a8d0 618 if(NULL == pMsgQ)
dflet 0:400d8e75a8d0 619 {
dflet 0:400d8e75a8d0 620 printf("OSI_INVALID_PARAMS\r\n");
dflet 0:400d8e75a8d0 621 return OSI_INVALID_PARAMS;
dflet 0:400d8e75a8d0 622 }
dflet 0:400d8e75a8d0 623
dflet 0:400d8e75a8d0 624 if ( Timeout == (OsiTime_t) OSI_WAIT_FOREVER )
dflet 0:400d8e75a8d0 625 {
dflet 0:400d8e75a8d0 626 Timeout = portMAX_DELAY ;
dflet 0:400d8e75a8d0 627 }
dflet 0:400d8e75a8d0 628
dflet 0:400d8e75a8d0 629 //Receive Item from Queue
dflet 0:400d8e75a8d0 630 if( pdTRUE == xQueueReceive((xQueueHandle)*pMsgQ,pMsg,Timeout) )
dflet 0:400d8e75a8d0 631 {
dflet 0:400d8e75a8d0 632 return OSI_OK;
dflet 0:400d8e75a8d0 633 }
dflet 0:400d8e75a8d0 634 else
dflet 0:400d8e75a8d0 635 {
dflet 0:400d8e75a8d0 636 return OSI_OPERATION_FAILED;
dflet 0:400d8e75a8d0 637 }
dflet 0:400d8e75a8d0 638 }
dflet 0:400d8e75a8d0 639
dflet 0:400d8e75a8d0 640 /*!
dflet 0:400d8e75a8d0 641 \brief This function to call the memory de-allocation function of the FREERTOS
dflet 0:400d8e75a8d0 642
dflet 0:400d8e75a8d0 643 \param Size - size of memory to alloc in bytes
dflet 0:400d8e75a8d0 644
dflet 0:400d8e75a8d0 645 \return - void *
dflet 0:400d8e75a8d0 646 \note
dflet 0:400d8e75a8d0 647 \warning
dflet 0:400d8e75a8d0 648 */
dflet 0:400d8e75a8d0 649
dflet 0:400d8e75a8d0 650 void * mem_Malloc(uint32_t Size)
dflet 0:400d8e75a8d0 651 {
dflet 0:400d8e75a8d0 652
dflet 0:400d8e75a8d0 653 return ( void * ) pvPortMalloc( (size_t)Size );
dflet 0:400d8e75a8d0 654 }
dflet 0:400d8e75a8d0 655
dflet 0:400d8e75a8d0 656 /*!
dflet 0:400d8e75a8d0 657 \brief This function to call the memory de-allocation function of the FREERTOS
dflet 0:400d8e75a8d0 658
dflet 0:400d8e75a8d0 659 \param pMem - pointer to the memory which needs to be freed
dflet 0:400d8e75a8d0 660
dflet 0:400d8e75a8d0 661 \return - void
dflet 0:400d8e75a8d0 662 \note
dflet 0:400d8e75a8d0 663 \warning
dflet 0:400d8e75a8d0 664 */
dflet 0:400d8e75a8d0 665 void mem_Free(void *pMem)
dflet 0:400d8e75a8d0 666 {
dflet 0:400d8e75a8d0 667 vPortFree( pMem );
dflet 0:400d8e75a8d0 668 }
dflet 0:400d8e75a8d0 669
dflet 0:400d8e75a8d0 670 /*!
dflet 0:400d8e75a8d0 671 \brief This function call the memset function
dflet 0:400d8e75a8d0 672 \param pBuf - pointer to the memory to be fill
dflet 0:400d8e75a8d0 673 \param Val - Value to be fill
dflet 0:400d8e75a8d0 674 \param Size - Size of the memory which needs to be fill
dflet 0:400d8e75a8d0 675 \return - void
dflet 0:400d8e75a8d0 676 \note
dflet 0:400d8e75a8d0 677 \warning
dflet 0:400d8e75a8d0 678 */
dflet 0:400d8e75a8d0 679
dflet 0:400d8e75a8d0 680 void mem_set(void *pBuf,int Val,size_t Size)
dflet 0:400d8e75a8d0 681 {
dflet 0:400d8e75a8d0 682 memset( pBuf,Val,Size);
dflet 0:400d8e75a8d0 683
dflet 0:400d8e75a8d0 684 }
dflet 0:400d8e75a8d0 685
dflet 0:400d8e75a8d0 686 /*!
dflet 0:400d8e75a8d0 687 \brief This function call the memcopy function
dflet 0:400d8e75a8d0 688 \param pDst - pointer to the destination
dflet 0:400d8e75a8d0 689 \param pSrc - pointer to the source
dflet 0:400d8e75a8d0 690 \param Size - Size of the memory which needs to be copy
dflet 0:400d8e75a8d0 691
dflet 0:400d8e75a8d0 692 \return - void
dflet 0:400d8e75a8d0 693 \note
dflet 0:400d8e75a8d0 694 \warning
dflet 0:400d8e75a8d0 695 */
dflet 0:400d8e75a8d0 696 void mem_copy(void *pDst, void *pSrc,size_t Size)
dflet 0:400d8e75a8d0 697 {
dflet 0:400d8e75a8d0 698 memcpy(pDst,pSrc,Size);
dflet 0:400d8e75a8d0 699 }
dflet 0:400d8e75a8d0 700
dflet 0:400d8e75a8d0 701
dflet 0:400d8e75a8d0 702 /*!
dflet 0:400d8e75a8d0 703 \brief This function use to entering into critical section
dflet 0:400d8e75a8d0 704 \param void
dflet 0:400d8e75a8d0 705 \return - void
dflet 0:400d8e75a8d0 706 \note
dflet 0:400d8e75a8d0 707 \warning
dflet 0:400d8e75a8d0 708 */
dflet 0:400d8e75a8d0 709
dflet 0:400d8e75a8d0 710 uint32_t osi_EnterCritical(void)
dflet 0:400d8e75a8d0 711 {
dflet 0:400d8e75a8d0 712 portENTER_CRITICAL();
dflet 0:400d8e75a8d0 713 return 0;
dflet 0:400d8e75a8d0 714 }
dflet 0:400d8e75a8d0 715
dflet 0:400d8e75a8d0 716 /*!
dflet 0:400d8e75a8d0 717 \brief This function use to exit critical section
dflet 0:400d8e75a8d0 718 \param void
dflet 0:400d8e75a8d0 719 \return - void
dflet 0:400d8e75a8d0 720 \note
dflet 0:400d8e75a8d0 721 \warning
dflet 0:400d8e75a8d0 722 */
dflet 0:400d8e75a8d0 723
dflet 0:400d8e75a8d0 724 void osi_ExitCritical(uint32_t ulKey)
dflet 0:400d8e75a8d0 725 {
dflet 0:400d8e75a8d0 726 portENTER_CRITICAL();
dflet 0:400d8e75a8d0 727 }
dflet 0:400d8e75a8d0 728 /*!
dflet 0:400d8e75a8d0 729 \brief This function used to start the scheduler
dflet 0:400d8e75a8d0 730 \param void
dflet 0:400d8e75a8d0 731 \return - void
dflet 0:400d8e75a8d0 732 \note
dflet 0:400d8e75a8d0 733 \warning
dflet 0:400d8e75a8d0 734 */
dflet 0:400d8e75a8d0 735 void osi_start()
dflet 0:400d8e75a8d0 736 {
dflet 0:400d8e75a8d0 737 vTaskStartScheduler();
dflet 0:400d8e75a8d0 738 }
dflet 0:400d8e75a8d0 739 /*!
dflet 0:400d8e75a8d0 740 \brief This function used to suspend the task for the specified number of milli secs
dflet 0:400d8e75a8d0 741 \param MilliSecs - Time in millisecs to suspend the task
dflet 0:400d8e75a8d0 742 \return - void
dflet 0:400d8e75a8d0 743 \note
dflet 0:400d8e75a8d0 744 \warning
dflet 0:400d8e75a8d0 745 */
dflet 0:400d8e75a8d0 746 void osi_Sleep(unsigned int MilliSecs)
dflet 0:400d8e75a8d0 747 {
dflet 0:400d8e75a8d0 748 portTickType xDelay = MilliSecs / portTICK_RATE_MS;
dflet 0:400d8e75a8d0 749 vTaskDelay(xDelay);
dflet 0:400d8e75a8d0 750 }
dflet 0:400d8e75a8d0 751
dflet 0:400d8e75a8d0 752
dflet 0:400d8e75a8d0 753 /*!
dflet 0:400d8e75a8d0 754 \brief This function used to disable the tasks
dflet 0:400d8e75a8d0 755 \param - void
dflet 0:400d8e75a8d0 756 \return - Key with the suspended tasks
dflet 0:400d8e75a8d0 757 \note
dflet 0:400d8e75a8d0 758 \warning
dflet 0:400d8e75a8d0 759 */
dflet 0:400d8e75a8d0 760 uint32_t osi_TaskDisable(void)
dflet 0:400d8e75a8d0 761 {
dflet 0:400d8e75a8d0 762 vTaskSuspendAll();
dflet 0:400d8e75a8d0 763
dflet 0:400d8e75a8d0 764 return OSI_OK;
dflet 0:400d8e75a8d0 765 }
dflet 0:400d8e75a8d0 766
dflet 0:400d8e75a8d0 767
dflet 0:400d8e75a8d0 768 /*!
dflet 0:400d8e75a8d0 769 \brief This function used to resume all the tasks
dflet 0:400d8e75a8d0 770 \param key - returned from suspend tasks
dflet 0:400d8e75a8d0 771 \return - void
dflet 0:400d8e75a8d0 772 \note
dflet 0:400d8e75a8d0 773 \warning
dflet 0:400d8e75a8d0 774 */
dflet 0:400d8e75a8d0 775 void osi_TaskEnable(uint32_t key)
dflet 0:400d8e75a8d0 776 {
dflet 0:400d8e75a8d0 777 xTaskResumeAll();
dflet 0:400d8e75a8d0 778 }
dflet 0:400d8e75a8d0 779
dflet 0:400d8e75a8d0 780 /*!
dflet 0:400d8e75a8d0 781 \brief This function used to save the OS context before sleep
dflet 0:400d8e75a8d0 782 \param void
dflet 0:400d8e75a8d0 783 \return - void
dflet 0:400d8e75a8d0 784 \note
dflet 0:400d8e75a8d0 785 \warning
dflet 0:400d8e75a8d0 786 */
dflet 0:400d8e75a8d0 787 void osi_ContextSave()
dflet 0:400d8e75a8d0 788 {
dflet 0:400d8e75a8d0 789
dflet 0:400d8e75a8d0 790 }
dflet 0:400d8e75a8d0 791 /*!
dflet 0:400d8e75a8d0 792 \brief This function used to restore the OS context after sleep
dflet 0:400d8e75a8d0 793 \param void
dflet 0:400d8e75a8d0 794 \return - void
dflet 0:400d8e75a8d0 795 \note
dflet 0:400d8e75a8d0 796 \warning
dflet 0:400d8e75a8d0 797 */
dflet 0:400d8e75a8d0 798 void osi_ContextRestore()
dflet 0:400d8e75a8d0 799 {
dflet 0:400d8e75a8d0 800
dflet 0:400d8e75a8d0 801 }
dflet 0:400d8e75a8d0 802