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