1/*******************************************************************************
2**+--------------------------------------------------------------------------+**
3**|                                                                          |**
4**| Copyright 1998-2008 Texas Instruments, Inc. - http://www.ti.com/         |**
5**|                                                                          |**
6**| Licensed under the Apache License, Version 2.0 (the "License");          |**
7**| you may not use this file except in compliance with the License.         |**
8**| You may obtain a copy of the License at                                  |**
9**|                                                                          |**
10**|     http://www.apache.org/licenses/LICENSE-2.0                           |**
11**|                                                                          |**
12**| Unless required by applicable law or agreed to in writing, software      |**
13**| distributed under the License is distributed on an "AS IS" BASIS,        |**
14**| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |**
15**| See the License for the specific language governing permissions and      |**
16**| limitations under the License.                                           |**
17**|                                                                          |**
18**+--------------------------------------------------------------------------+**
19*******************************************************************************/
20
21/*--------------------------------------------------------------------------*/
22/* Module:      TI_OAL.h*/
23/**/
24/* Purpose:     This file contains a interface for the TI_OAL class.*/
25/**/
26/*////////////////////////////////////////////////////////////////////*/
27
28#if !defined(AFX_TIUNILIB_H__F79CA4B8_8596_4F36_B541_2B2FCCF70197__INCLUDED_)
29#define AFX_TIUNILIB_H__F79CA4B8_8596_4F36_B541_2B2FCCF70197__INCLUDED_
30
31#if _MSC_VER > 1000
32#pragma once
33#endif /* _MSC_VER > 1000*/
34
35#include "osTIType.h"
36#include "TI_Results.h"
37
38#ifdef _UNICODE
39    #define tisprintf   swprintf
40    #define tistrncpy   wcsncpy
41#else
42    #define tisprintf   sprintf
43    #define tistrncpy   strncpy
44#endif
45
46
47class  TI_OSWrapCriticalSection
48{
49    protected:
50                tiVOID*     m_pCS;
51    public:
52        static  TI_OSWrapCriticalSection*   CreateObject();
53        static  tiVOID          DeleteObject(TI_OSWrapCriticalSection* pObj);
54
55                    TI_OSWrapCriticalSection() {}
56        virtual    ~TI_OSWrapCriticalSection() {}
57        virtual tiVOID    Enter               ()  = 0;
58        virtual tiVOID    Leave               ()  = 0;
59};
60
61class  TI_OSCriticalSection
62{
63        TI_OSWrapCriticalSection*               m_pWrapCS;
64
65    public:
66                    TI_OSCriticalSection();
67                   ~TI_OSCriticalSection();
68                tiVOID    Enter               ();
69                tiVOID    Leave               ();
70};
71/*
72class  TI_OSWrapEvent
73{
74    protected:
75                tiVOID*     m_pEvent;
76    public:
77        static  TI_OSWrapEvent*   CreateObject();
78
79                    TI_OSWrapEvent()    {}
80                   ~TI_OSWrapEvent()    {}
81        virtual tiUINT32    Wait    ( tiUINT32 uTime )  = 0;
82        virtual tiVOID      Set     ()  = 0;
83        virtual tiVOID      Reset   ()  = 0;
84};
85
86class  TI_OSEvent
87{
88        TI_OSWrapEvent*               m_pWrapEvent;
89
90    public:
91                    TI_OSEvent();
92                   ~TI_OSEvent();
93             tiUINT32    Wait    ( tiUINT32 uTime );
94             tiVOID      Set     ();
95             tiVOID      Reset   ();
96};
97*/
98typedef tiUINT32 (* tiPTHREAD_START_ROUTINE)( tiVOID* pThreadParameter );
99
100class  TI_OAL
101{
102    protected:
103
104                                TI_OAL            ();
105        virtual                ~TI_OAL            ();
106
107        static  TI_OAL*       _instance;
108        static  tiUINT32        m_uReferenceCount;
109
110    public:
111        static  TI_OAL*     GetInstance             (); /* static function for create TI_OSlib object*/
112        static  tiVOID      FreeInstance            (); /* static function for release TI_OAL object*/
113
114        /* list of functions that will call from Utility Adapter and Utility GUI modules */
115        virtual tiVOID      TIOutputDebugString     (tiCHAR* lpOutputString)                                        = 0;
116        virtual tiBOOL      TIIsBadWritePtr         (tiVOID* lp, tiUINT32 ucb )                                     = 0;
117
118        /* list of functions that will call from Windows Utility module */
119        virtual tiUINT32    TILoadLibrary           (tiCHAR*    pLibFileName)                                       = 0;
120        virtual tiBOOL      TIFreeLibrary           (tiUINT32   hLibModule)                                         = 0;
121        virtual tiUINT32    TIGetProcAddress        (tiUINT32   hModule, tiCHAR* lpProcName )                       = 0;
122        virtual tiUINT32    TIRegisterWindowMessage (tiCHAR*    pszMsgName )                                        = 0;
123        virtual tiBOOL      TIPostMessage           (tiUINT32 hWnd, tiUINT32 Msg, tiUINT32 wParam, tiUINT32 lParam) = 0;
124        virtual tiVOID      TIPrintLastError        (tiCHAR*    psz)                                                = 0;
125        virtual tiUINT32    TIGetCurrentThreadId    ()                                                              = 0;
126        virtual tiUINT32    TICreateThread          (tiPTHREAD_START_ROUTINE pStartAddress, tiVOID* pParameter )    = 0;
127        virtual tiVOID      TISleep                 (tiUINT32 msec)                                                = 0;
128};
129
130#define TIOALib_OBJECT_CREATOR_IMP( ClassApi, ClassBase )   \
131ClassBase* ClassBase::CreateObject(){ return (ClassBase*) new ClassApi;} \
132tiVOID  ClassBase::DeleteObject(ClassBase* pObj){ClassApi* pRealObj = (ClassApi*)pObj; \
133if(pRealObj)delete pRealObj; }
134
135
136#define TIOALib_SINGLETON_CLASS_IMP( ClassApi )             \
137TI_OAL* TI_OAL::GetInstance()                               \
138{ return (TI_OAL*) ClassApi::GetInstance(); }               \
139TI_OAL* ClassApi::GetInstance()                             \
140{if( _instance == 0){_instance = new ClassApi();}           \
141m_uReferenceCount++; return _instance;}                     \
142tiVOID TI_OAL::FreeInstance()                               \
143{ ClassApi::FreeInstance(); }                               \
144tiVOID ClassApi::FreeInstance()                             \
145{ m_uReferenceCount--;if(!m_uReferenceCount && _instance )  \
146{delete (ClassApi*)_instance;_instance = NULL;}}
147
148#endif /* !defined(AFX_TIUNILIB_H__F79CA4B8_8596_4F36_B541_2B2FCCF70197__INCLUDED_)*/
149
150