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.h
dflet 0:400d8e75a8d0 3 //
dflet 0:400d8e75a8d0 4 // MACRO and Function prototypes for TI-RTOS and Free-RTOS API 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 zof 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 #ifndef __OSI_H__
dflet 0:400d8e75a8d0 40 #define __OSI_H__
dflet 0:400d8e75a8d0 41
dflet 0:400d8e75a8d0 42 #ifdef __cplusplus
dflet 0:400d8e75a8d0 43 extern "C" {
dflet 0:400d8e75a8d0 44 #endif
dflet 0:400d8e75a8d0 45
dflet 0:400d8e75a8d0 46 #include <string.h>
dflet 0:400d8e75a8d0 47 #include "portable.h"
dflet 0:400d8e75a8d0 48
dflet 0:400d8e75a8d0 49 #define OSI_WAIT_FOREVER (0xFFFFFFFF)
dflet 0:400d8e75a8d0 50
dflet 0:400d8e75a8d0 51 #define OSI_NO_WAIT (0)
dflet 0:400d8e75a8d0 52
dflet 0:400d8e75a8d0 53 #ifndef SPAWN_TASK_STACK
dflet 0:400d8e75a8d0 54 #define STACK_LEN (2048) /*Stack Size*/
dflet 0:400d8e75a8d0 55 #else
dflet 0:400d8e75a8d0 56 #define STACK_LEN (SPAWN_TASK_STACK)
dflet 0:400d8e75a8d0 57 #endif
dflet 0:400d8e75a8d0 58
dflet 0:400d8e75a8d0 59 typedef enum
dflet 0:400d8e75a8d0 60 {
dflet 0:400d8e75a8d0 61 OSI_OK = 0,
dflet 0:400d8e75a8d0 62 OSI_FAILURE = -1,
dflet 0:400d8e75a8d0 63 OSI_OPERATION_FAILED = -2,
dflet 0:400d8e75a8d0 64 OSI_ABORTED = -3,
dflet 0:400d8e75a8d0 65 OSI_INVALID_PARAMS = -4,
dflet 0:400d8e75a8d0 66 OSI_MEMORY_ALLOCATION_FAILURE = -5,
dflet 0:400d8e75a8d0 67 OSI_TIMEOUT = -6,
dflet 0:400d8e75a8d0 68 OSI_EVENTS_IN_USE = -7,
dflet 0:400d8e75a8d0 69 OSI_EVENT_OPEARTION_FAILURE = -8
dflet 0:400d8e75a8d0 70 }OsiReturnVal_e;
dflet 0:400d8e75a8d0 71
dflet 0:400d8e75a8d0 72 //#define ENTER_CRITICAL_SECTION osi_EnterCritical()
dflet 0:400d8e75a8d0 73 //#define EXIT_CRITICAL_SECTION osi_ExitCritical()
dflet 0:400d8e75a8d0 74
dflet 0:400d8e75a8d0 75 typedef void* OsiMsgQ_t;
dflet 0:400d8e75a8d0 76
dflet 0:400d8e75a8d0 77 /*!
dflet 0:400d8e75a8d0 78 \brief type definition for a time value
dflet 0:400d8e75a8d0 79
dflet 0:400d8e75a8d0 80 \note On each porting or platform the type could be whatever is needed - integer, pointer to structure etc.
dflet 0:400d8e75a8d0 81 */
dflet 0:400d8e75a8d0 82 typedef uint32_t OsiTime_t;
dflet 0:400d8e75a8d0 83 //typedef unsigned long OsiTime_t;
dflet 0:400d8e75a8d0 84 /*!
dflet 0:400d8e75a8d0 85 \brief type definition for a sync object container
dflet 0:400d8e75a8d0 86
dflet 0:400d8e75a8d0 87 Sync object is object used to synchronize between two threads or thread and interrupt handler.
dflet 0:400d8e75a8d0 88 One thread is waiting on the object and the other thread send a signal, which then
dflet 0:400d8e75a8d0 89 release the waiting thread.
dflet 0:400d8e75a8d0 90 The signal must be able to be sent from interrupt context.
dflet 0:400d8e75a8d0 91 This object is generally implemented by binary semaphore or events.
dflet 0:400d8e75a8d0 92
dflet 0:400d8e75a8d0 93 \note On each porting or platform the type could be whatever is needed - integer, structure etc.
dflet 0:400d8e75a8d0 94 */
dflet 0:400d8e75a8d0 95 //typedef unsigned int OsiSyncObj_t;
dflet 0:400d8e75a8d0 96 typedef void * OsiSyncObj_t;
dflet 0:400d8e75a8d0 97
dflet 0:400d8e75a8d0 98 /*!
dflet 0:400d8e75a8d0 99 \brief type definition for a locking object container
dflet 0:400d8e75a8d0 100
dflet 0:400d8e75a8d0 101 Locking object are used to protect a resource from mutual accesses of two or more threads.
dflet 0:400d8e75a8d0 102 The locking object should support re-entrant locks by a signal thread.
dflet 0:400d8e75a8d0 103 This object is generally implemented by mutex semaphore
dflet 0:400d8e75a8d0 104
dflet 0:400d8e75a8d0 105 \note On each porting or platform the type could be whatever is needed - integer, structure etc.
dflet 0:400d8e75a8d0 106 */
dflet 0:400d8e75a8d0 107 //typedef unsigned int OsiLockObj_t;
dflet 0:400d8e75a8d0 108 typedef void * OsiLockObj_t;
dflet 0:400d8e75a8d0 109
dflet 0:400d8e75a8d0 110 /*!
dflet 0:400d8e75a8d0 111 \brief type definition for a spawn entry callback
dflet 0:400d8e75a8d0 112
dflet 0:400d8e75a8d0 113 the spawn mechanism enable to run a function on different context.
dflet 0:400d8e75a8d0 114 This mechanism allow to transfer the execution context from interrupt context to thread context
dflet 0:400d8e75a8d0 115 or changing the context from an unknown user thread to general context.
dflet 0:400d8e75a8d0 116 The implementation of the spawn mechanism depends on the user's system requirements and could varies
dflet 0:400d8e75a8d0 117 from implementation of serialized execution using single thread to creating thread per call
dflet 0:400d8e75a8d0 118
dflet 0:400d8e75a8d0 119 \note The stack size of the execution thread must be at least of TBD bytes!
dflet 0:400d8e75a8d0 120 */
dflet 0:400d8e75a8d0 121 typedef void (*P_OSI_SPAWN_ENTRY)(void* pValue);
dflet 0:400d8e75a8d0 122
dflet 0:400d8e75a8d0 123 typedef void (*P_OSI_EVENT_HANDLER)(void* pValue);
dflet 0:400d8e75a8d0 124
dflet 0:400d8e75a8d0 125 typedef void (*P_OSI_TASK_ENTRY)(void* pValue);
dflet 0:400d8e75a8d0 126
dflet 0:400d8e75a8d0 127 typedef void (*P_OSI_INTR_ENTRY)(void);
dflet 0:400d8e75a8d0 128
dflet 0:400d8e75a8d0 129 typedef void* OsiTaskHandle;
dflet 0:400d8e75a8d0 130
dflet 0:400d8e75a8d0 131 /*!
dflet 0:400d8e75a8d0 132 \brief This function registers an interrupt in NVIC table
dflet 0:400d8e75a8d0 133
dflet 0:400d8e75a8d0 134 The sync object is used for synchronization between different thread or ISR and
dflet 0:400d8e75a8d0 135 a thread.
dflet 0:400d8e75a8d0 136
dflet 0:400d8e75a8d0 137 \param iIntrNum - Interrupt number to register
dflet 0:400d8e75a8d0 138 \param pEntry - Pointer to the interrupt handler
dflet 0:400d8e75a8d0 139
dflet 0:400d8e75a8d0 140 \return upon successful creation the function should return 0
dflet 0:400d8e75a8d0 141 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 142 \note
dflet 0:400d8e75a8d0 143 \warning
dflet 0:400d8e75a8d0 144 */
dflet 0:400d8e75a8d0 145 OsiReturnVal_e osi_InterruptRegister(int iIntrNum,P_OSI_INTR_ENTRY pEntry,unsigned char ucPriority);
dflet 0:400d8e75a8d0 146
dflet 0:400d8e75a8d0 147 /*!
dflet 0:400d8e75a8d0 148 \brief This function De-registers an interrupt in NVIC table
dflet 0:400d8e75a8d0 149
dflet 0:400d8e75a8d0 150 \param iIntrNum - Interrupt number to register
dflet 0:400d8e75a8d0 151 \param pEntry - Pointer to the interrupt handler
dflet 0:400d8e75a8d0 152
dflet 0:400d8e75a8d0 153 \return upon successful creation the function should return Positive number
dflet 0:400d8e75a8d0 154 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 155 \note
dflet 0:400d8e75a8d0 156 \warning
dflet 0:400d8e75a8d0 157 */
dflet 0:400d8e75a8d0 158 void osi_InterruptDeRegister(int iIntrNum);
dflet 0:400d8e75a8d0 159
dflet 0:400d8e75a8d0 160
dflet 0:400d8e75a8d0 161 /*!
dflet 0:400d8e75a8d0 162 \brief This function creates a sync object
dflet 0:400d8e75a8d0 163
dflet 0:400d8e75a8d0 164 The sync object is used for synchronization between different thread or ISR and
dflet 0:400d8e75a8d0 165 a thread.
dflet 0:400d8e75a8d0 166
dflet 0:400d8e75a8d0 167 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 168
dflet 0:400d8e75a8d0 169 \return upon successful creation the function should return 0
dflet 0:400d8e75a8d0 170 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 171 \note
dflet 0:400d8e75a8d0 172 \warning
dflet 0:400d8e75a8d0 173 */
dflet 0:400d8e75a8d0 174 OsiReturnVal_e osi_SyncObjCreate(OsiSyncObj_t* pSyncObj);
dflet 0:400d8e75a8d0 175
dflet 0:400d8e75a8d0 176
dflet 0:400d8e75a8d0 177 /*!
dflet 0:400d8e75a8d0 178 \brief This function deletes a sync object
dflet 0:400d8e75a8d0 179
dflet 0:400d8e75a8d0 180 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 181
dflet 0:400d8e75a8d0 182 \return upon successful deletion the function should return 0
dflet 0:400d8e75a8d0 183 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 184 \note
dflet 0:400d8e75a8d0 185 \warning
dflet 0:400d8e75a8d0 186 */
dflet 0:400d8e75a8d0 187 OsiReturnVal_e osi_SyncObjDelete(OsiSyncObj_t* pSyncObj);
dflet 0:400d8e75a8d0 188
dflet 0:400d8e75a8d0 189 /*!
dflet 0:400d8e75a8d0 190 \brief This function generates a sync signal for the object.
dflet 0:400d8e75a8d0 191
dflet 0:400d8e75a8d0 192 All suspended threads waiting on this sync object are resumed
dflet 0:400d8e75a8d0 193
dflet 0:400d8e75a8d0 194 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 195
dflet 0:400d8e75a8d0 196 \return upon successful signalling the function should return 0
dflet 0:400d8e75a8d0 197 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 198 \note the function could be called from ISR context
dflet 0:400d8e75a8d0 199 \warning
dflet 0:400d8e75a8d0 200 */
dflet 0:400d8e75a8d0 201 OsiReturnVal_e osi_SyncObjSignal(OsiSyncObj_t* pSyncObj);
dflet 0:400d8e75a8d0 202
dflet 0:400d8e75a8d0 203 /*!
dflet 0:400d8e75a8d0 204 \brief This function generates a sync signal for the object.
dflet 0:400d8e75a8d0 205 from ISR context.
dflet 0:400d8e75a8d0 206
dflet 0:400d8e75a8d0 207 All suspended threads waiting on this sync object are resumed
dflet 0:400d8e75a8d0 208
dflet 0:400d8e75a8d0 209 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 210
dflet 0:400d8e75a8d0 211 \return upon successful signalling the function should return 0
dflet 0:400d8e75a8d0 212 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 213 \note the function is called from ISR context
dflet 0:400d8e75a8d0 214 \warning
dflet 0:400d8e75a8d0 215 */
dflet 0:400d8e75a8d0 216 OsiReturnVal_e osi_SyncObjSignalFromISR(OsiSyncObj_t* pSyncObj);
dflet 0:400d8e75a8d0 217
dflet 0:400d8e75a8d0 218 /*!
dflet 0:400d8e75a8d0 219 \brief This function waits for a sync signal of the specific sync object
dflet 0:400d8e75a8d0 220
dflet 0:400d8e75a8d0 221 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 222 \param Timeout - numeric value specifies the maximum number of mSec to
dflet 0:400d8e75a8d0 223 stay suspended while waiting for the sync signal
dflet 0:400d8e75a8d0 224 Currently, the simple link driver uses only two values:
dflet 0:400d8e75a8d0 225 - OSI_WAIT_FOREVER
dflet 0:400d8e75a8d0 226 - OSI_NO_WAIT
dflet 0:400d8e75a8d0 227
dflet 0:400d8e75a8d0 228 \return upon successful reception of the signal within the timeout window return 0
dflet 0:400d8e75a8d0 229 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 230 \note
dflet 0:400d8e75a8d0 231 \warning
dflet 0:400d8e75a8d0 232 */
dflet 0:400d8e75a8d0 233 OsiReturnVal_e osi_SyncObjWait(OsiSyncObj_t* pSyncObj , OsiTime_t Timeout);
dflet 0:400d8e75a8d0 234
dflet 0:400d8e75a8d0 235 /*!
dflet 0:400d8e75a8d0 236 \brief This function clears a sync object
dflet 0:400d8e75a8d0 237
dflet 0:400d8e75a8d0 238 \param pSyncObj - pointer to the sync object control block
dflet 0:400d8e75a8d0 239
dflet 0:400d8e75a8d0 240 \return upon successful clearing the function should return 0
dflet 0:400d8e75a8d0 241 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 242 \note
dflet 0:400d8e75a8d0 243 \warning
dflet 0:400d8e75a8d0 244 */
dflet 0:400d8e75a8d0 245 OsiReturnVal_e osi_SyncObjClear(OsiSyncObj_t* pSyncObj);
dflet 0:400d8e75a8d0 246
dflet 0:400d8e75a8d0 247 /*!
dflet 0:400d8e75a8d0 248 \brief This function creates a locking object.
dflet 0:400d8e75a8d0 249
dflet 0:400d8e75a8d0 250 The locking object is used for protecting a shared resources between different
dflet 0:400d8e75a8d0 251 threads.
dflet 0:400d8e75a8d0 252
dflet 0:400d8e75a8d0 253 \param pLockObj - pointer to the locking object control block
dflet 0:400d8e75a8d0 254
dflet 0:400d8e75a8d0 255 \return upon successful creation the function should return 0
dflet 0:400d8e75a8d0 256 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 257 \note
dflet 0:400d8e75a8d0 258 \warning
dflet 0:400d8e75a8d0 259 */
dflet 0:400d8e75a8d0 260 OsiReturnVal_e osi_LockObjCreate(OsiLockObj_t* pLockObj);
dflet 0:400d8e75a8d0 261
dflet 0:400d8e75a8d0 262 /*!
dflet 0:400d8e75a8d0 263 \brief This function deletes a locking object.
dflet 0:400d8e75a8d0 264
dflet 0:400d8e75a8d0 265 \param pLockObj - pointer to the locking object control block
dflet 0:400d8e75a8d0 266
dflet 0:400d8e75a8d0 267 \return upon successful deletion the function should return 0
dflet 0:400d8e75a8d0 268 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 269 \note
dflet 0:400d8e75a8d0 270 \warning
dflet 0:400d8e75a8d0 271 */
dflet 0:400d8e75a8d0 272 OsiReturnVal_e osi_LockObjDelete(OsiLockObj_t* pLockObj);
dflet 0:400d8e75a8d0 273
dflet 0:400d8e75a8d0 274 /*!
dflet 0:400d8e75a8d0 275 \brief This function locks a locking object.
dflet 0:400d8e75a8d0 276
dflet 0:400d8e75a8d0 277 All other threads that call this function before this thread calls
dflet 0:400d8e75a8d0 278 the osi_LockObjUnlock would be suspended
dflet 0:400d8e75a8d0 279
dflet 0:400d8e75a8d0 280 \param pLockObj - pointer to the locking object control block
dflet 0:400d8e75a8d0 281 \param Timeout - numeric value specifies the maximum number of mSec to
dflet 0:400d8e75a8d0 282 stay suspended while waiting for the locking object
dflet 0:400d8e75a8d0 283 Currently, the simple link driver uses only two values:
dflet 0:400d8e75a8d0 284 - OSI_WAIT_FOREVER
dflet 0:400d8e75a8d0 285 - OSI_NO_WAIT
dflet 0:400d8e75a8d0 286
dflet 0:400d8e75a8d0 287
dflet 0:400d8e75a8d0 288 \return upon successful reception of the locking object the function should return 0
dflet 0:400d8e75a8d0 289 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 290 \note
dflet 0:400d8e75a8d0 291 \warning
dflet 0:400d8e75a8d0 292 */
dflet 0:400d8e75a8d0 293 OsiReturnVal_e osi_LockObjLock(OsiLockObj_t* pLockObj , OsiTime_t Timeout);
dflet 0:400d8e75a8d0 294
dflet 0:400d8e75a8d0 295 /*!
dflet 0:400d8e75a8d0 296 \brief This function unlock a locking object.
dflet 0:400d8e75a8d0 297
dflet 0:400d8e75a8d0 298 \param pLockObj - pointer to the locking object control block
dflet 0:400d8e75a8d0 299
dflet 0:400d8e75a8d0 300 \return upon successful unlocking the function should return 0
dflet 0:400d8e75a8d0 301 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 302 \note
dflet 0:400d8e75a8d0 303 \warning
dflet 0:400d8e75a8d0 304 */
dflet 0:400d8e75a8d0 305 OsiReturnVal_e osi_LockObjUnlock(OsiLockObj_t* pLockObj);
dflet 0:400d8e75a8d0 306
dflet 0:400d8e75a8d0 307
dflet 0:400d8e75a8d0 308 /*!
dflet 0:400d8e75a8d0 309 \brief This function call the pEntry callback from a different context
dflet 0:400d8e75a8d0 310
dflet 0:400d8e75a8d0 311 \param pEntry - pointer to the entry callback function
dflet 0:400d8e75a8d0 312
dflet 0:400d8e75a8d0 313 \param pValue - pointer to any type of memory structure that would be
dflet 0:400d8e75a8d0 314 passed to pEntry callback from the execution thread.
dflet 0:400d8e75a8d0 315
dflet 0:400d8e75a8d0 316 \param flags - execution flags - reserved for future usage
dflet 0:400d8e75a8d0 317
dflet 0:400d8e75a8d0 318 \return upon successful registration of the spawn the function should return 0
dflet 0:400d8e75a8d0 319 (the function is not blocked till the end of the execution of the function
dflet 0:400d8e75a8d0 320 and could be returned before the execution is actually completed)
dflet 0:400d8e75a8d0 321 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 322 \note
dflet 0:400d8e75a8d0 323 \warning
dflet 0:400d8e75a8d0 324 */
dflet 0:400d8e75a8d0 325 /*!
dflet 0:400d8e75a8d0 326 \brief This function creates a Task.
dflet 0:400d8e75a8d0 327
dflet 0:400d8e75a8d0 328 Creates a new Task and add it to the last of tasks that are ready to run
dflet 0:400d8e75a8d0 329
dflet 0:400d8e75a8d0 330 \param pEntry - pointer to the Task Function
dflet 0:400d8e75a8d0 331 \param pcName - Task Name String
dflet 0:400d8e75a8d0 332 \param usStackDepth - Stack Size Stack Size in 32-bit long words
dflet 0:400d8e75a8d0 333 \param pvParameters - pointer to structure to be passed to the Task Function
dflet 0:400d8e75a8d0 334 \param uxPriority - Task Priority
dflet 0:400d8e75a8d0 335
dflet 0:400d8e75a8d0 336 \return upon successful unlocking the function should return 0
dflet 0:400d8e75a8d0 337 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 338 \note
dflet 0:400d8e75a8d0 339 \warning
dflet 0:400d8e75a8d0 340 */
dflet 0:400d8e75a8d0 341 OsiReturnVal_e osi_TaskCreate(P_OSI_TASK_ENTRY pEntry,const signed char * const pcName,unsigned short usStackDepth,void *pvParameters,uint32_t uxPriority,OsiTaskHandle *pTaskHandle);
dflet 0:400d8e75a8d0 342
dflet 0:400d8e75a8d0 343 /*!
dflet 0:400d8e75a8d0 344 \brief This function Deletes a Task.
dflet 0:400d8e75a8d0 345
dflet 0:400d8e75a8d0 346 Deletes a Task and remove it from list of running task
dflet 0:400d8e75a8d0 347
dflet 0:400d8e75a8d0 348 \param pTaskHandle - Task Handle
dflet 0:400d8e75a8d0 349
dflet 0:400d8e75a8d0 350 \note
dflet 0:400d8e75a8d0 351 \warning
dflet 0:400d8e75a8d0 352 */
dflet 0:400d8e75a8d0 353 void osi_TaskDelete(OsiTaskHandle* pTaskHandle);
dflet 0:400d8e75a8d0 354
dflet 0:400d8e75a8d0 355 /*!
dflet 0:400d8e75a8d0 356 \brief This function call the pEntry callback from a different context
dflet 0:400d8e75a8d0 357
dflet 0:400d8e75a8d0 358 \param pEntry - pointer to the entry callback function
dflet 0:400d8e75a8d0 359
dflet 0:400d8e75a8d0 360 \param pValue - pointer to any type of memory structure that would be
dflet 0:400d8e75a8d0 361 passed to pEntry callback from the execution thread.
dflet 0:400d8e75a8d0 362
dflet 0:400d8e75a8d0 363 \param flags - execution flags - reserved for future usage
dflet 0:400d8e75a8d0 364
dflet 0:400d8e75a8d0 365 \return upon successful registration of the spawn the function should return 0
dflet 0:400d8e75a8d0 366 (the function is not blocked till the end of the execution of the function
dflet 0:400d8e75a8d0 367 and could be returned before the execution is actually completed)
dflet 0:400d8e75a8d0 368 Otherwise, a negative value indicating the error code shall be returned
dflet 0:400d8e75a8d0 369 \note
dflet 0:400d8e75a8d0 370 \warning
dflet 0:400d8e75a8d0 371 */
dflet 0:400d8e75a8d0 372 OsiReturnVal_e osi_Spawn(P_OSI_SPAWN_ENTRY pEntry , void* pValue , uint32_t flags);
dflet 0:400d8e75a8d0 373
dflet 0:400d8e75a8d0 374
dflet 0:400d8e75a8d0 375 /*******************************************************************************
dflet 0:400d8e75a8d0 376
dflet 0:400d8e75a8d0 377 This function creates a message queue that is typically used for inter thread
dflet 0:400d8e75a8d0 378 communication.
dflet 0:400d8e75a8d0 379
dflet 0:400d8e75a8d0 380 Parameters:
dflet 0:400d8e75a8d0 381
dflet 0:400d8e75a8d0 382 pMsgQ - pointer to the message queue control block
dflet 0:400d8e75a8d0 383 pMsgQName - pointer to the name of the message queue
dflet 0:400d8e75a8d0 384 MsgSize - the size of the message.
dflet 0:400d8e75a8d0 385
dflet 0:400d8e75a8d0 386 NOTICE: THE MESSGAE SIZE MUST BE SMALLER THAN 16
dflet 0:400d8e75a8d0 387
dflet 0:400d8e75a8d0 388 MaxMsgs - maximum number of messages.
dflet 0:400d8e75a8d0 389
dflet 0:400d8e75a8d0 390 Please note that this function allocates the entire memory required
dflet 0:400d8e75a8d0 391 for the maximum number of messages (MsgSize * MaxMsgs).
dflet 0:400d8e75a8d0 392
dflet 0:400d8e75a8d0 393 ********************************************************************************/
dflet 0:400d8e75a8d0 394 OsiReturnVal_e osi_MsgQCreate(OsiMsgQ_t* pMsgQ ,
dflet 0:400d8e75a8d0 395 char* pMsgQName,
dflet 0:400d8e75a8d0 396 uint32_t MsgSize,
dflet 0:400d8e75a8d0 397 uint32_t MaxMsgs);
dflet 0:400d8e75a8d0 398
dflet 0:400d8e75a8d0 399 /*******************************************************************************
dflet 0:400d8e75a8d0 400
dflet 0:400d8e75a8d0 401 This function deletes a specific message queue.
dflet 0:400d8e75a8d0 402 All threads suspended waiting for a message from this queue are resumed with
dflet 0:400d8e75a8d0 403 an error return value.
dflet 0:400d8e75a8d0 404
dflet 0:400d8e75a8d0 405 Parameters:
dflet 0:400d8e75a8d0 406
dflet 0:400d8e75a8d0 407 pMsgQ - pointer to the message queue control block
dflet 0:400d8e75a8d0 408
dflet 0:400d8e75a8d0 409 ********************************************************************************/
dflet 0:400d8e75a8d0 410 OsiReturnVal_e osi_MsgQDelete(OsiMsgQ_t* pMsgQ);
dflet 0:400d8e75a8d0 411
dflet 0:400d8e75a8d0 412
dflet 0:400d8e75a8d0 413 /*******************************************************************************
dflet 0:400d8e75a8d0 414
dflet 0:400d8e75a8d0 415 This function writes a message to a specific message queue.
dflet 0:400d8e75a8d0 416
dflet 0:400d8e75a8d0 417 Notice that the message is copied to the queue from the memory area specified
dflet 0:400d8e75a8d0 418 by pMsg pointer.
dflet 0:400d8e75a8d0 419
dflet 0:400d8e75a8d0 420 --------------------------------------------------------------------------------
dflet 0:400d8e75a8d0 421 THIS FUNCTION COULD BE CALLED FROM ISR AS LONG AS THE TIMEOUT PARAMETER IS
dflet 0:400d8e75a8d0 422 SET TO "OSI_NO_WAIT"
dflet 0:400d8e75a8d0 423 --------------------------------------------------------------------------------
dflet 0:400d8e75a8d0 424
dflet 0:400d8e75a8d0 425 Parameters:
dflet 0:400d8e75a8d0 426
dflet 0:400d8e75a8d0 427 pMsgQ - pointer to the message queue control block
dflet 0:400d8e75a8d0 428 pMsg - pointer to the message
dflet 0:400d8e75a8d0 429 Timeout - numeric value specifies the maximum number of mSec to stay
dflet 0:400d8e75a8d0 430 suspended while waiting for available space for the message
dflet 0:400d8e75a8d0 431
dflet 0:400d8e75a8d0 432 ********************************************************************************/
dflet 0:400d8e75a8d0 433 OsiReturnVal_e osi_MsgQWrite(OsiMsgQ_t* pMsgQ, void* pMsg , OsiTime_t Timeout);
dflet 0:400d8e75a8d0 434
dflet 0:400d8e75a8d0 435
dflet 0:400d8e75a8d0 436 /*******************************************************************************
dflet 0:400d8e75a8d0 437
dflet 0:400d8e75a8d0 438 This function retrieves a message from the specified message queue. The
dflet 0:400d8e75a8d0 439 retrieved message is copied from the queue into the memory area specified by
dflet 0:400d8e75a8d0 440 the pMsg pointer
dflet 0:400d8e75a8d0 441
dflet 0:400d8e75a8d0 442 Parameters:
dflet 0:400d8e75a8d0 443
dflet 0:400d8e75a8d0 444 pMsgQ - pointer to the message queue control block
dflet 0:400d8e75a8d0 445 pMsg - pointer that specify the location where to copy the message
dflet 0:400d8e75a8d0 446 Timeout - numeric value specifies the maximum number of mSec to stay
dflet 0:400d8e75a8d0 447 suspended while waiting for a message to be available
dflet 0:400d8e75a8d0 448
dflet 0:400d8e75a8d0 449 ********************************************************************************/
dflet 0:400d8e75a8d0 450 OsiReturnVal_e osi_MsgQRead(OsiMsgQ_t* pMsgQ, void* pMsg , OsiTime_t Timeout);
dflet 0:400d8e75a8d0 451
dflet 0:400d8e75a8d0 452 /*!
dflet 0:400d8e75a8d0 453 \brief This function starts the OS Scheduler
dflet 0:400d8e75a8d0 454 \param - void
dflet 0:400d8e75a8d0 455 \return - void
dflet 0:400d8e75a8d0 456 \note
dflet 0:400d8e75a8d0 457 \warning
dflet 0:400d8e75a8d0 458 */
dflet 0:400d8e75a8d0 459 void osi_start(void);
dflet 0:400d8e75a8d0 460
dflet 0:400d8e75a8d0 461 /*!
dflet 0:400d8e75a8d0 462 \brief Allocates Memory on Heap
dflet 0:400d8e75a8d0 463 \param Size - Size of the Buffer to be allocated
dflet 0:400d8e75a8d0 464 \sa
dflet 0:400d8e75a8d0 465 \note
dflet 0:400d8e75a8d0 466 \warning
dflet 0:400d8e75a8d0 467 */
dflet 0:400d8e75a8d0 468 void * mem_Malloc(uint32_t Size);
dflet 0:400d8e75a8d0 469
dflet 0:400d8e75a8d0 470
dflet 0:400d8e75a8d0 471 /*!
dflet 0:400d8e75a8d0 472 \brief Deallocates Memory
dflet 0:400d8e75a8d0 473 \param pMem - Pointer to the Buffer to be freed
dflet 0:400d8e75a8d0 474 \return void
dflet 0:400d8e75a8d0 475 \sa
dflet 0:400d8e75a8d0 476 \note
dflet 0:400d8e75a8d0 477 \warning
dflet 0:400d8e75a8d0 478 */
dflet 0:400d8e75a8d0 479 void mem_Free(void *pMem);
dflet 0:400d8e75a8d0 480
dflet 0:400d8e75a8d0 481
dflet 0:400d8e75a8d0 482 /*!
dflet 0:400d8e75a8d0 483 \brief Set Memory
dflet 0:400d8e75a8d0 484 \param pBuf - Pointer to the Buffer
dflet 0:400d8e75a8d0 485 \param Val - Value to be set
dflet 0:400d8e75a8d0 486 \param Size - Size of the memory to be set
dflet 0:400d8e75a8d0 487 \sa
dflet 0:400d8e75a8d0 488 \note
dflet 0:400d8e75a8d0 489 \warning
dflet 0:400d8e75a8d0 490 */
dflet 0:400d8e75a8d0 491 void mem_set(void *pBuf,int Val,size_t Size);
dflet 0:400d8e75a8d0 492
dflet 0:400d8e75a8d0 493 /*!
dflet 0:400d8e75a8d0 494 \brief Copy Memory
dflet 0:400d8e75a8d0 495 \param pDst - Pointer to the Destination Buffer
dflet 0:400d8e75a8d0 496 \param pSrc - Pointer to the Source Buffer
dflet 0:400d8e75a8d0 497 \param Size - Size of the memory to be copied
dflet 0:400d8e75a8d0 498 \return void
dflet 0:400d8e75a8d0 499 \note
dflet 0:400d8e75a8d0 500 \warning
dflet 0:400d8e75a8d0 501 */
dflet 0:400d8e75a8d0 502 void mem_copy(void *pDst, void *pSrc,size_t Size);
dflet 0:400d8e75a8d0 503
dflet 0:400d8e75a8d0 504 /*!
dflet 0:400d8e75a8d0 505 \brief Enter Critical Section
dflet 0:400d8e75a8d0 506 \sa
dflet 0:400d8e75a8d0 507 \note
dflet 0:400d8e75a8d0 508 \warning
dflet 0:400d8e75a8d0 509 */
dflet 0:400d8e75a8d0 510 uint32_t osi_EnterCritical(void);
dflet 0:400d8e75a8d0 511
dflet 0:400d8e75a8d0 512 /*!
dflet 0:400d8e75a8d0 513 \brief Exit Critical Section
dflet 0:400d8e75a8d0 514 \sa
dflet 0:400d8e75a8d0 515 \note
dflet 0:400d8e75a8d0 516 \warning
dflet 0:400d8e75a8d0 517 */
dflet 0:400d8e75a8d0 518 void osi_ExitCritical(uint32_t ulKey);
dflet 0:400d8e75a8d0 519
dflet 0:400d8e75a8d0 520 /*!
dflet 0:400d8e75a8d0 521 \brief This function used to save the os context before sleep
dflet 0:400d8e75a8d0 522 \param void
dflet 0:400d8e75a8d0 523 \return void
dflet 0:400d8e75a8d0 524 \note
dflet 0:400d8e75a8d0 525 \warning
dflet 0:400d8e75a8d0 526 */
dflet 0:400d8e75a8d0 527 void osi_ContextSave(void);
dflet 0:400d8e75a8d0 528 /*!
dflet 0:400d8e75a8d0 529 \brief This function used to retrieve the context after sleep
dflet 0:400d8e75a8d0 530 \param void
dflet 0:400d8e75a8d0 531 \return void
dflet 0:400d8e75a8d0 532 \note
dflet 0:400d8e75a8d0 533 \warning
dflet 0:400d8e75a8d0 534 */
dflet 0:400d8e75a8d0 535 void osi_ContextRestore(void);
dflet 0:400d8e75a8d0 536
dflet 0:400d8e75a8d0 537 /*!
dflet 0:400d8e75a8d0 538 \brief This function used to suspend the task for the specified number of milli secs
dflet 0:400d8e75a8d0 539 \param MilliSecs - Time in millisecs to suspend the task
dflet 0:400d8e75a8d0 540 \return void
dflet 0:400d8e75a8d0 541 \note
dflet 0:400d8e75a8d0 542 \warning
dflet 0:400d8e75a8d0 543 */
dflet 0:400d8e75a8d0 544 void osi_Sleep(unsigned int MilliSecs);
dflet 0:400d8e75a8d0 545
dflet 0:400d8e75a8d0 546 /*!
dflet 0:400d8e75a8d0 547 \brief This function used to disable the tasks
dflet 0:400d8e75a8d0 548 \param - void
dflet 0:400d8e75a8d0 549 \return - Key with the suspended tasks
dflet 0:400d8e75a8d0 550 \note
dflet 0:400d8e75a8d0 551 \warning
dflet 0:400d8e75a8d0 552 */
dflet 0:400d8e75a8d0 553 uint32_t osi_TaskDisable(void);
dflet 0:400d8e75a8d0 554
dflet 0:400d8e75a8d0 555 /*!
dflet 0:400d8e75a8d0 556 \brief This function used to enable all tasks
dflet 0:400d8e75a8d0 557 \param unsigned long
dflet 0:400d8e75a8d0 558 \return - void
dflet 0:400d8e75a8d0 559 \note
dflet 0:400d8e75a8d0 560 \warning
dflet 0:400d8e75a8d0 561 */
dflet 0:400d8e75a8d0 562 void osi_TaskEnable(uint32_t);
dflet 0:400d8e75a8d0 563 /*!
dflet 0:400d8e75a8d0 564 \brief structure definition for simple link spawn message
dflet 0:400d8e75a8d0 565
dflet 0:400d8e75a8d0 566 \note On each porting or platform the type could be whatever is needed - integer, pointer to structure etc.
dflet 0:400d8e75a8d0 567 */
dflet 0:400d8e75a8d0 568
dflet 0:400d8e75a8d0 569 typedef struct
dflet 0:400d8e75a8d0 570 {
dflet 0:400d8e75a8d0 571 P_OSI_SPAWN_ENTRY pEntry;
dflet 0:400d8e75a8d0 572 void* pValue;
dflet 0:400d8e75a8d0 573 }tSimpleLinkSpawnMsg;
dflet 0:400d8e75a8d0 574
dflet 0:400d8e75a8d0 575 /* The queue used to send message to simple link spawn task. */
dflet 0:400d8e75a8d0 576 extern void* xSimpleLinkSpawnQueue;
dflet 0:400d8e75a8d0 577
dflet 0:400d8e75a8d0 578 /* API for SL Task*/
dflet 0:400d8e75a8d0 579 OsiReturnVal_e VStartSimpleLinkSpawnTask(unsigned portBASE_TYPE uxPriority);
dflet 0:400d8e75a8d0 580 void VDeleteSimpleLinkSpawnTask( void );
dflet 0:400d8e75a8d0 581
dflet 0:400d8e75a8d0 582
dflet 0:400d8e75a8d0 583
dflet 0:400d8e75a8d0 584 #ifdef __cplusplus
dflet 0:400d8e75a8d0 585 }
dflet 0:400d8e75a8d0 586 #endif // __cplusplus
dflet 0:400d8e75a8d0 587
dflet 0:400d8e75a8d0 588 #endif
dflet 0:400d8e75a8d0 589