Update revision to use TI's mqtt and Freertos.

Dependencies:   mbed client server

Fork of cc3100_Test_mqtt_CM3 by David Fletcher

Committer:
dflet
Date:
Sat Jun 06 13:32:15 2015 +0000
Revision:
0:dbe5e7db3c45
Revision update to include TI's mtqq and Freertos

Who changed what in which revision?

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