TI's MQTT Demo with freertos CM4F

Dependencies:   mbed

Committer:
dflet
Date:
Thu Sep 03 14:07:01 2015 +0000
Revision:
0:1e7b5dd9edb4
First commit, it's been hanging around for a while. Updated SPI mode change 1 to 0.

Who changed what in which revision?

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