EvHandler.c revision ddac9c138c5b4b16b99fb8bc5f0f10418efa1029
1a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/*
2a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * EvHandler.c
3a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
4a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
5a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * All rights reserved.
6a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
7a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * Redistribution and use in source and binary forms, with or without
8a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * modification, are permitted provided that the following conditions
9a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * are met:
10a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
11a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions of source code must retain the above copyright
12a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer.
13a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Redistributions in binary form must reproduce the above copyright
14a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    notice, this list of conditions and the following disclaimer in
15a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    the documentation and/or other materials provided with the
16a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    distribution.
17a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *  * Neither the name Texas Instruments nor the names of its
18a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    contributors may be used to endorse or promote products derived
19a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *    from this software without specific prior written permission.
20a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt *
21a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt */
33a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
34a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#define __FILE_ID__  FILE_ID_50
35a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "IPCKernelApi.h"
36a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "EvHandler.h"
37a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "osApi.h"
38a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "osDebug.h"
39a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
40a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifndef _WINDOWS
41a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include "windows_types.h"
42a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#else
43a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#include <windows.h>
44a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif /*_WINDOWS*/
45a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
46a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef EV_HANDLER_DEBUG
47a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_HANDLE ghEvHandler; /* for debug, remove later*/
48a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
49a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
50a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* ************************** Upper Interface **********************************/
51a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
52a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_HANDLE EvHandler_Create (TI_HANDLE hOs)
53a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
54a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TEvHandlerObj *pEvHandler;
55a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
56a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    PRINT(DBG_INIT_LOUD, (" EvHandlerInit\n"));
57a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvHandler = os_memoryAlloc(hOs,sizeof(TEvHandlerObj));
58a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    os_memoryZero(hOs,pEvHandler,sizeof(TEvHandlerObj));
59a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
60a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    #ifdef EV_HANDLER_DEBUG
61a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    ghEvHandler= pEvHandler;
62a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt      PRINTF(DBG_INIT_VERY_LOUD, ("EvHandlerInit: ghEvHandler set to %08X\n", ghEvHandler));
63a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    #endif
64a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
65a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvHandler->hOs = hOs;
66ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt
67a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvHandler->LastUMEventType = 0xFFFFFFFF;
68a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
69a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return (TI_HANDLE) pEvHandler;
70a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
71a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
72a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_UINT32 EvHandlerUnload (TI_HANDLE hEvHandler)
73a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
74a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
75ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    TEvHandlerObj *pEvHandler;
76a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
77a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    PRINT(DBG_INIT_LOUD, (" ev_handler_unLoad\n"));
78a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvHandler = (TEvHandlerObj *)hEvHandler;
79a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
80a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    os_memoryFree(pEvHandler->hOs,pEvHandler,sizeof(TEvHandlerObj));
81a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
82ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    return TI_OK;
83a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
84a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
85a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
86a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_UINT32 EvHandlerRegisterEvent(TI_HANDLE hEvHandler, TI_UINT8* pData, TI_UINT32 Length)
87a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
88a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TEvHandlerObj *pEvHandler;
89ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    IPC_EVENT_PARAMS *pEvParams;
90ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    TI_UINT32 ModuleIndex;
91a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
92a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if( (hEvHandler==NULL) || (pData == NULL)){
93a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        PRINT(DBG_INIT_ERROR, "EvHandler:EvHandlerRegisterEvent Bad Handle passed \n");
94a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TI_NOK;
95a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
96a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
97a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef EV_HANDLER_DEBUG
98a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if (ghEvHandler !=  hEvHandler)
99a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
100a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TI_NOK;
101a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
102a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
103a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
104a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvHandler  = (TEvHandlerObj *)hEvHandler;
105ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    pEvParams = (IPC_EVENT_PARAMS *)pData;
106a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
107a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    PRINTF(DBG_INIT_LOUD, (" EvHandlerRegisterEvent EventType = %d \n",pEvParams->uEventType));
108a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
109ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    /* used to be: if ( sizeof(IPC_EVENT_PARAMS) != Length)
110a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt       relaxed size checking (okay if output buffer is larger)  */
111ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    if (sizeof(IPC_EVENT_PARAMS) > Length)
112a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
113a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        PRINTF(DBG_INIT_ERROR, (" EvHandlerRegisterEvent Error sizeof(IPC_EVENT_PARAMS) != Length,"
114a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                               "%d != %d \n",sizeof(IPC_EVENT_PARAMS), (int)Length));
115a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return (TI_UINT32)STATUS_INVALID_PARAMETER;
116a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
117a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
118ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    if (pEvParams->uEventType >= IPC_EVENT_MAX){
119a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        PRINTF(DBG_INIT_ERROR, (" EvHandlerRegisterEvent Error - Invalid Event Type = %d \n",
120a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt              pEvParams->uEventType));
121a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return (TI_UINT32)STATUS_INVALID_PARAMETER;
122a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
123a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
124a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    ModuleIndex = 0;
125a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
126ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    while ((ModuleIndex < MAX_REGISTERED_MODULES) &&
127ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt       (pEvHandler->RegistrationArray[pEvParams->uEventType][ModuleIndex].uEventID != NULL))
128a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
129ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt        ModuleIndex++;
130a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
131a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
132ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    if (ModuleIndex == MAX_REGISTERED_MODULES)
133a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
134ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt        PRINTF(DBG_INIT_WARNING, (" EvHandlerRegisterEvent %d "
135ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt                                  "Registration queue full or event already registered!\n",
136ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt                                  pEvParams->uEventType));
137ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt        return (TI_UINT32)STATUS_INVALID_PARAMETER;
138a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
139a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
140a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    os_memoryCopy(pEvHandler->hOs,(TI_UINT8*)&pEvHandler->RegistrationArray[pEvParams->uEventType][ModuleIndex],
141a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                    (TI_UINT8*)pEvParams,Length);
142a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
143a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvParams->uEventID = (TI_HANDLE)&pEvHandler->RegistrationArray[pEvParams->uEventType][ModuleIndex];
144a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
145a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvHandler->RegistrationArray[pEvParams->uEventType][ModuleIndex].uEventID = pEvParams->uEventID;
146a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
147a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    PRINT(DBG_INIT_LOUD, " EvHandlerRegisterEvent Out \n");
148a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return STATUS_SUCCESS;
149a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
150a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
151a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
152a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
153a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_UINT32 EvHandlerUnRegisterEvent(TI_HANDLE hEvHandler, TI_HANDLE uEventID)
154a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
155a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TEvHandlerObj *pEvHandler;
156ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    IPC_EVENT_PARAMS *pEvParams;
157ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    TI_UINT32 ModuleIndex;
158a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
159ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt#ifdef EV_HANDLER_DEBUG
160ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    if (ghEvHandler !=  hEvHandler )
161a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
162a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt          return TI_NOK;
163a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
164ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt#endif
165a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
166ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    if (uEventID == NULL)
167a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
168a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TI_NOK;
169a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
170a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
171a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvHandler = (TEvHandlerObj *)hEvHandler;
172ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    pEvParams  = (IPC_EVENT_PARAMS *)uEventID;
173a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
174a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    PRINTF(DBG_INIT_LOUD, (" EvHandlerUnRegisterEvent EventType = %d \n",pEvParams->uEventType));
175a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
176a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if( pEvParams->uEventType >= IPC_EVENT_MAX){
177a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        PRINTF(DBG_INIT_ERROR, (" EvHandlerRegisterEvent Error Event Type = %d \n",
178a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt              pEvParams->uEventType));
179a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return (TI_UINT32)STATUS_INVALID_PARAMETER;
180a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
181a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
182a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    ModuleIndex = 0;
183a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
184ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    while ((ModuleIndex < MAX_REGISTERED_MODULES) &&
185ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt           (pEvHandler->RegistrationArray[pEvParams->uEventType][ModuleIndex].uEventID != pEvParams->uEventID))
186a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
187ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt        ModuleIndex++;
188a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
189a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
190ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt    if (ModuleIndex == MAX_REGISTERED_MODULES)
191a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
192ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt        PRINTF(DBG_INIT_ERROR, (" EvHandlerUnRegisterEvent %d "
193a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                               "Registration queue doesn't hold this event!\n",
194a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                               pEvParams->uEventType ));
195ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt        return (TI_UINT32)STATUS_INVALID_PARAMETER;
196a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
197a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvHandler->RegistrationArray[pEvParams->uEventType][ModuleIndex].uEventID = NULL;
198a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
199a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return STATUS_SUCCESS;
200a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
201a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
202a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* ************************** Upper Interface End*********************************/
203a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
204a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt/* ************************** Bottom Interface **********************************/
205a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
206a615fb1650af6e111053506f1b764b28a5b4631dDmitry ShmidtTI_UINT32 EvHandlerSendEvent(TI_HANDLE hEvHandler, TI_UINT32 EvType, TI_UINT8* pData, TI_UINT32 Length)
207a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt{
208a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TEvHandlerObj *pEvHandler;
209a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    IPC_EV_DATA*         pNewEvent;
210a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32            TailIndex=0;
211a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TI_UINT32            ModuleIndex=0;
212a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
213a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    PRINTF(DBG_INIT_LOUD, (" EvHandlerSendEvent %d  \n", EvType));
214a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
215a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if(hEvHandler == NULL){
216a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        PRINT(DBG_INIT_ERROR, "EvHandlerSendEvent Bad Handle passed \n");
217a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TI_NOK;
218a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
219a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
220a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#ifdef EV_HANDLER_DEBUG
221a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    if (ghEvHandler !=  hEvHandler)
222a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
223a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        return TI_NOK;
224a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    }
225a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt#endif
226a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
227a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    pEvHandler  = (TEvHandlerObj *)hEvHandler;
228a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
229a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    TailIndex   = pEvHandler->SendEventArray.TailIndex;
230a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
231a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    while ((ModuleIndex < MAX_REGISTERED_MODULES) && (EvType <= IPC_EVENT_MAX))
232a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    {
233a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        if (pEvHandler->RegistrationArray[EvType][ModuleIndex].uEventID != NULL )
234a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        {
235a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            if(pEvHandler->SendEventArray.Counter == MAX_SEND_EVENTS)
236ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt            {
237a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                PRINT(DBG_INIT_ERROR, " EvHandlerSendEvent Array Full u Fool! \n");
238a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                return TI_NOK;
239a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            }
240a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
241a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pNewEvent = &pEvHandler->SendEventArray.Array[TailIndex];
242a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
243a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            /* copy the event parameters and data to the events queue*/
244a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            os_memoryCopy(pEvHandler->hOs,(TI_UINT8*)&pNewEvent->EvParams,
245a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                            (TI_UINT8*)&pEvHandler->RegistrationArray[EvType][ModuleIndex],
246a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                            sizeof(IPC_EVENT_PARAMS));
247a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
248a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            os_memoryZero(pEvHandler->hOs,(TI_UINT8*)pNewEvent->uBuffer, sizeof(pNewEvent->uBuffer));
249ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt
250ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt            os_memoryCopy(pEvHandler->hOs,
251ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt                          (TI_UINT8*)pNewEvent->uBuffer,
252ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt                          (TI_UINT8*)pData,
253ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt                          Length);
254ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt
255a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            pNewEvent->uBufferSize = Length;
256ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt
257a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            if(pNewEvent->EvParams.uDeliveryType ==  DELIVERY_PUSH)
258a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            {
259ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt                    PRINTF(DBG_INIT_LOUD, (" EvHandlerSendEvent %d to OS \n", EvType));
260a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                    PRINTF(DBG_INIT_LOUD, ("EvHandlerSendEvent Matching OS Registered event found at EvType = %d,"
261a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                          "ModuleIndex = %d  \n", EvType, ModuleIndex));
262a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                    IPC_EventSend (pEvHandler->hOs,(TI_UINT8*)pNewEvent,sizeof(IPC_EV_DATA));
263a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            }
264a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt            else {
265a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
266a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pEvHandler->LastUMEventType = EvType;
267a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pEvHandler->SendEventArray.TailIndex = (TailIndex+1) % MAX_SEND_EVENTS;
268a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                pEvHandler->SendEventArray.Counter++;
269a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                TailIndex   = pEvHandler->SendEventArray.TailIndex;
270a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                PRINTF(DBG_INIT_LOUD, (" EvHandlerSendEvent %d to User Mode \n", EvType));
271a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                PRINTF(DBG_INIT_LOUD, ("EvHandlerSendEvent Matching User Mode Registered event found at EvType = %d,"
272a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                                       "ModuleIndex = %d  \n", EvType, ModuleIndex));
273a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                if (pEvHandler->SendEventArray.Counter == 1)
274a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                {
275a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                    IPC_EventSend (pEvHandler->hOs,NULL,0);
276a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt                }
277ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt            }
278a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt        } /* end if*/
279a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
280ddac9c138c5b4b16b99fb8bc5f0f10418efa1029Dmitry Shmidt       ModuleIndex++;
281a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
282a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt   } /* end of while*/
283a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
284a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt    return TI_OK;
285a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt}
286a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt
287a615fb1650af6e111053506f1b764b28a5b4631dDmitry Shmidt /* ************************** Bottom Interface End **********************************/
288