1 /****************************************************************************
3 (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
4 www.systec-electronic.com
8 Description: Definitions for Abstract Memory Interface
12 Redistribution and use in source and binary forms, with or without
13 modification, are permitted provided that the following conditions
16 1. Redistributions of source code must retain the above copyright
17 notice, this list of conditions and the following disclaimer.
19 2. Redistributions in binary form must reproduce the above copyright
20 notice, this list of conditions and the following disclaimer in the
21 documentation and/or other materials provided with the distribution.
23 3. Neither the name of SYSTEC electronic GmbH nor the names of its
24 contributors may be used to endorse or promote products derived
25 from this software without prior written permission. For written
26 permission, please contact info@systec-electronic.com.
28 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
31 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
32 COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
33 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
34 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
36 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
38 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39 POSSIBILITY OF SUCH DAMAGE.
43 If a provision of this License is or becomes illegal, invalid or
44 unenforceable in any jurisdiction, that shall not affect:
45 1. the validity or enforceability in that jurisdiction of any other
46 provision of this License; or
47 2. the validity or enforceability in other jurisdictions of that or
48 any other provision of this License.
50 -------------------------------------------------------------------------
52 $RCSfile: EplAmi.h,v $
56 $Revision: 1.2 $ $Date: 2008/04/17 21:36:32 $
63 -------------------------------------------------------------------------
71 To save code space the functions AmiSetByte and AmiGetByte
72 are replaced by macros. For targets which assign BYTE by
73 an 16Bit type, the definition of macros must changed to
77 Functions included for extended data types such as UNSIGNED24,
81 Extended the interface for EPL with the different functions
82 for little endian and big endian
84 ****************************************************************************/
90 #if ((DEV_SYSTEM & _DEV_64BIT_SUPPORT_) == 0)
92 #error 'ERROR: development system does not support 64 bit operations!'
97 //---------------------------------------------------------------------------
99 //---------------------------------------------------------------------------
102 //---------------------------------------------------------------------------
104 //---------------------------------------------------------------------------
110 #if (TARGET_SYSTEM == _WIN32_)
111 #if defined(INLINE_FUNCTION_DEF)
112 #undef INLINE_FUNCTION
113 #define INLINE_FUNCTION INLINE_FUNCTION_DEF
114 #define INLINE_ENABLED TRUE
115 #define EPL_AMI_INLINED
116 #include "../EplStack/amix86.c"
119 #elif (TARGET_SYSTEM == _LINUX_)
120 #if defined(__m68k__) // it is an big endian machine
121 #if defined(INLINE_FUNCTION_DEF)
122 #undef INLINE_FUNCTION
123 #define INLINE_FUNCTION INLINE_FUNCTION_DEF
124 #define INLINE_ENABLED TRUE
125 #define EPL_AMI_INLINED
126 #include "../EplStack/amibe.c"
131 //---------------------------------------------------------------------------
135 // To save code space the function AmiSetByte is replaced by
137 // void PUBLIC AmiSetByte (void FAR* pAddr_p, BYTE bByteVal_p);
139 #define AmiSetByteToBe(pAddr_p, bByteVal_p) {*(BYTE FAR*)(pAddr_p) = (bByteVal_p);}
140 #define AmiSetByteToLe(pAddr_p, bByteVal_p) {*(BYTE FAR*)(pAddr_p) = (bByteVal_p);}
142 #if !defined(INLINE_ENABLED)
143 void PUBLIC AmiSetWordToBe (void FAR* pAddr_p, WORD wWordVal_p);
144 void PUBLIC AmiSetDwordToBe (void FAR* pAddr_p, DWORD dwDwordVal_p);
145 void PUBLIC AmiSetWordToLe (void FAR* pAddr_p, WORD wWordVal_p);
146 void PUBLIC AmiSetDwordToLe (void FAR* pAddr_p, DWORD dwDwordVal_p);
150 //---------------------------------------------------------------------------
154 // To save code space the function AmiGetByte is replaced by
156 // BYTE PUBLIC AmiGetByte (void FAR* pAddr_p);
158 #define AmiGetByteFromBe(pAddr_p) (*(BYTE FAR*)(pAddr_p))
159 #define AmiGetByteFromLe(pAddr_p) (*(BYTE FAR*)(pAddr_p))
161 #if !defined(INLINE_ENABLED)
163 WORD PUBLIC AmiGetWordFromBe (void FAR* pAddr_p);
164 DWORD PUBLIC AmiGetDwordFromBe (void FAR* pAddr_p);
165 WORD PUBLIC AmiGetWordFromLe (void FAR* pAddr_p);
166 DWORD PUBLIC AmiGetDwordFromLe (void FAR* pAddr_p);
168 //---------------------------------------------------------------------------
170 // Function: AmiSetDword24()
172 // Description: sets a 24 bit value to a buffer
174 // Parameters: pAddr_p = pointer to destination buffer
175 // dwDwordVal_p = value to set
179 //---------------------------------------------------------------------------
181 void PUBLIC AmiSetDword24ToBe (void FAR* pAddr_p, DWORD dwDwordVal_p);
182 void PUBLIC AmiSetDword24ToLe (void FAR* pAddr_p, DWORD dwDwordVal_p);
185 //---------------------------------------------------------------------------
187 // Function: AmiGetDword24()
189 // Description: reads a 24 bit value from a buffer
191 // Parameters: pAddr_p = pointer to source buffer
193 // Return: DWORD = read value
195 //---------------------------------------------------------------------------
197 DWORD PUBLIC AmiGetDword24FromBe (void FAR* pAddr_p);
198 DWORD PUBLIC AmiGetDword24FromLe (void FAR* pAddr_p);
203 //---------------------------------------------------------------------------
205 // Function: AmiSetQword40()
207 // Description: sets a 40 bit value to a buffer
209 // Parameters: pAddr_p = pointer to destination buffer
210 // qwQwordVal_p = quadruple word value
214 //---------------------------------------------------------------------------
216 void PUBLIC AmiSetQword40ToBe (void FAR* pAddr_p, QWORD qwQwordVal_p);
217 void PUBLIC AmiSetQword40ToLe (void FAR* pAddr_p, QWORD qwQwordVal_p);
220 //---------------------------------------------------------------------------
222 // Function: AmiGetQword40()
224 // Description: reads a 40 bit value from a buffer
226 // Parameters: pAddr_p = pointer to source buffer
230 //---------------------------------------------------------------------------
232 QWORD PUBLIC AmiGetQword40FromBe (void FAR* pAddr_p);
233 QWORD PUBLIC AmiGetQword40FromLe (void FAR* pAddr_p);
236 //---------------------------------------------------------------------------
238 // Function: AmiSetQword48()
240 // Description: sets a 48 bit value to a buffer
242 // Parameters: pAddr_p = pointer to destination buffer
243 // qwQwordVal_p = quadruple word value
247 //---------------------------------------------------------------------------
249 void PUBLIC AmiSetQword48ToBe (void FAR* pAddr_p, QWORD qwQwordVal_p);
250 void PUBLIC AmiSetQword48ToLe (void FAR* pAddr_p, QWORD qwQwordVal_p);
253 //---------------------------------------------------------------------------
255 // Function: AmiGetQword48()
257 // Description: reads a 48 bit value from a buffer
259 // Parameters: pAddr_p = pointer to source buffer
263 //---------------------------------------------------------------------------
265 QWORD PUBLIC AmiGetQword48FromBe (void FAR* pAddr_p);
266 QWORD PUBLIC AmiGetQword48FromLe (void FAR* pAddr_p);
269 //---------------------------------------------------------------------------
271 // Function: AmiSetQword56()
273 // Description: sets a 56 bit value to a buffer
275 // Parameters: pAddr_p = pointer to destination buffer
276 // qwQwordVal_p = quadruple word value
280 //---------------------------------------------------------------------------
282 void PUBLIC AmiSetQword56ToBe (void FAR* pAddr_p, QWORD qwQwordVal_p);
283 void PUBLIC AmiSetQword56ToLe (void FAR* pAddr_p, QWORD qwQwordVal_p);
286 //---------------------------------------------------------------------------
288 // Function: AmiGetQword56()
290 // Description: reads a 56 bit value from a buffer
292 // Parameters: pAddr_p = pointer to source buffer
296 //---------------------------------------------------------------------------
298 QWORD PUBLIC AmiGetQword56FromBe (void FAR* pAddr_p);
299 QWORD PUBLIC AmiGetQword56FromLe (void FAR* pAddr_p);
302 //---------------------------------------------------------------------------
304 // Function: AmiSetQword64()
306 // Description: sets a 64 bit value to a buffer
308 // Parameters: pAddr_p = pointer to destination buffer
309 // qwQwordVal_p = quadruple word value
313 //---------------------------------------------------------------------------
315 void PUBLIC AmiSetQword64ToBe (void FAR* pAddr_p, QWORD qwQwordVal_p);
316 void PUBLIC AmiSetQword64ToLe (void FAR* pAddr_p, QWORD qwQwordVal_p);
319 //---------------------------------------------------------------------------
321 // Function: AmiGetQword64()
323 // Description: reads a 64 bit value from a buffer
325 // Parameters: pAddr_p = pointer to source buffer
329 //---------------------------------------------------------------------------
331 QWORD PUBLIC AmiGetQword64FromBe (void FAR* pAddr_p);
332 QWORD PUBLIC AmiGetQword64FromLe (void FAR* pAddr_p);
335 //---------------------------------------------------------------------------
337 // Function: AmiSetTimeOfDay()
339 // Description: sets a TIME_OF_DAY (CANopen) value to a buffer
341 // Parameters: pAddr_p = pointer to destination buffer
342 // pTimeOfDay_p = pointer to struct TIME_OF_DAY
346 //---------------------------------------------------------------------------
348 void PUBLIC AmiSetTimeOfDay (void FAR* pAddr_p, tTimeOfDay FAR* pTimeOfDay_p);
351 //---------------------------------------------------------------------------
353 // Function: AmiGetTimeOfDay()
355 // Description: reads a TIME_OF_DAY (CANopen) value from a buffer
357 // Parameters: pAddr_p = pointer to source buffer
358 // pTimeOfDay_p = pointer to struct TIME_OF_DAY
362 //---------------------------------------------------------------------------
364 void PUBLIC AmiGetTimeOfDay (void FAR* pAddr_p, tTimeOfDay FAR* pTimeOfDay_p);
369 #undef INLINE_ENABLED // disable actual inlining of functions
370 #define EPL_AMI_INCLUDED
377 #endif // ifndef _EPLAMI_H_
379 // Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler
380 // damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).