blob: 3b46ea11442b005a726270de1e25545786c0827d [file] [log] [blame]
Daniel Krueger9d7164c2008-12-19 11:41:57 -08001/****************************************************************************
2
3 (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
4 www.systec-electronic.com
5
6 Project: openPOWERLINK
7
8 Description: Definitions for Abstract Memory Interface
9
10 License:
11
12 Redistribution and use in source and binary forms, with or without
13 modification, are permitted provided that the following conditions
14 are met:
15
16 1. Redistributions of source code must retain the above copyright
17 notice, this list of conditions and the following disclaimer.
18
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.
22
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.
27
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.
40
41 Severability Clause:
42
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.
49
50 -------------------------------------------------------------------------
51
52 $RCSfile: EplAmi.h,v $
53
54 $Author: D.Krueger $
55
56 $Revision: 1.2 $ $Date: 2008/04/17 21:36:32 $
57
58 $State: Exp $
59
60 Build Environment:
61 GCC
62
63 -------------------------------------------------------------------------
64
65 Revision History:
66
67 06.03.2000 -rs
68 Implementation
69
70 16.09.2002 -as
71 To save code space the functions AmiSetByte and AmiGetByte
Greg Kroah-Hartman2ed53cf2009-03-23 12:36:38 -070072 are replaced by macros. For targets which assign u8 by
Daniel Krueger9d7164c2008-12-19 11:41:57 -080073 an 16Bit type, the definition of macros must changed to
74 functions.
75
76 23.02.2005 r.d.:
77 Functions included for extended data types such as UNSIGNED24,
78 UNSIGNED40, ...
79
80 13.06.2006 d.k.:
81 Extended the interface for EPL with the different functions
82 for little endian and big endian
83
84****************************************************************************/
85
86#ifndef _EPLAMI_H_
87#define _EPLAMI_H_
88
Daniel Krueger9d7164c2008-12-19 11:41:57 -080089
Daniel Krueger9d7164c2008-12-19 11:41:57 -080090//---------------------------------------------------------------------------
91// types
92//---------------------------------------------------------------------------
93
Daniel Krueger9d7164c2008-12-19 11:41:57 -080094//---------------------------------------------------------------------------
95// Prototypen
96//---------------------------------------------------------------------------
97
98#ifdef __cplusplus
Greg Kroah-Hartmane0ca0592008-12-19 17:09:38 -080099extern "C" {
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800100#endif
101
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800102//---------------------------------------------------------------------------
103//
104// write functions
105//
106// To save code space the function AmiSetByte is replaced by
107// an macro.
Greg Kroah-Hartman2ed53cf2009-03-23 12:36:38 -0700108// void AmiSetByte (void * pAddr_p, u8 bByteVal_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800109
Greg Kroah-Hartman2ed53cf2009-03-23 12:36:38 -0700110#define AmiSetByteToBe(pAddr_p, bByteVal_p) {*(u8 *)(pAddr_p) = (bByteVal_p);}
111#define AmiSetByteToLe(pAddr_p, bByteVal_p) {*(u8 *)(pAddr_p) = (bByteVal_p);}
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800112
Greg Kroah-Hartmandcf53712009-03-23 12:57:39 -0700113void AmiSetWordToBe(void *pAddr_p, u16 wWordVal_p);
Greg Kroah-Hartmand539cfb2009-03-23 12:51:37 -0700114void AmiSetDwordToBe(void *pAddr_p, u32 dwDwordVal_p);
Greg Kroah-Hartmandcf53712009-03-23 12:57:39 -0700115void AmiSetWordToLe(void *pAddr_p, u16 wWordVal_p);
Greg Kroah-Hartmand539cfb2009-03-23 12:51:37 -0700116void AmiSetDwordToLe(void *pAddr_p, u32 dwDwordVal_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800117
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800118//---------------------------------------------------------------------------
119//
120// read functions
121//
122// To save code space the function AmiGetByte is replaced by
123// an macro.
Greg Kroah-Hartman2ed53cf2009-03-23 12:36:38 -0700124// u8 AmiGetByte (void * pAddr_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800125
Greg Kroah-Hartman2ed53cf2009-03-23 12:36:38 -0700126#define AmiGetByteFromBe(pAddr_p) (*(u8 *)(pAddr_p))
127#define AmiGetByteFromLe(pAddr_p) (*(u8 *)(pAddr_p))
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800128
Greg Kroah-Hartmandcf53712009-03-23 12:57:39 -0700129u16 AmiGetWordFromBe(void *pAddr_p);
Greg Kroah-Hartmand539cfb2009-03-23 12:51:37 -0700130u32 AmiGetDwordFromBe(void *pAddr_p);
Greg Kroah-Hartmandcf53712009-03-23 12:57:39 -0700131u16 AmiGetWordFromLe(void *pAddr_p);
Greg Kroah-Hartmand539cfb2009-03-23 12:51:37 -0700132u32 AmiGetDwordFromLe(void *pAddr_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800133
134//---------------------------------------------------------------------------
135//
136// Function: AmiSetDword24()
137//
138// Description: sets a 24 bit value to a buffer
139//
140// Parameters: pAddr_p = pointer to destination buffer
141// dwDwordVal_p = value to set
142//
143// Return: void
144//
145//---------------------------------------------------------------------------
146
Greg Kroah-Hartmand539cfb2009-03-23 12:51:37 -0700147void AmiSetDword24ToBe(void *pAddr_p, u32 dwDwordVal_p);
148void AmiSetDword24ToLe(void *pAddr_p, u32 dwDwordVal_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800149
150//---------------------------------------------------------------------------
151//
152// Function: AmiGetDword24()
153//
154// Description: reads a 24 bit value from a buffer
155//
156// Parameters: pAddr_p = pointer to source buffer
157//
Greg Kroah-Hartmand539cfb2009-03-23 12:51:37 -0700158// Return: u32 = read value
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800159//
160//---------------------------------------------------------------------------
161
Greg Kroah-Hartmand539cfb2009-03-23 12:51:37 -0700162u32 AmiGetDword24FromBe(void *pAddr_p);
163u32 AmiGetDword24FromLe(void *pAddr_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800164
165//#ifdef USE_VAR64
166
167//---------------------------------------------------------------------------
168//
169// Function: AmiSetQword40()
170//
171// Description: sets a 40 bit value to a buffer
172//
173// Parameters: pAddr_p = pointer to destination buffer
174// qwQwordVal_p = quadruple word value
175//
176// Return: void
177//
178//---------------------------------------------------------------------------
179
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700180void AmiSetQword40ToBe(void *pAddr_p, u64 qwQwordVal_p);
181void AmiSetQword40ToLe(void *pAddr_p, u64 qwQwordVal_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800182
183//---------------------------------------------------------------------------
184//
185// Function: AmiGetQword40()
186//
187// Description: reads a 40 bit value from a buffer
188//
189// Parameters: pAddr_p = pointer to source buffer
190//
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700191// Return: u64
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800192//
193//---------------------------------------------------------------------------
194
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700195u64 AmiGetQword40FromBe(void *pAddr_p);
196u64 AmiGetQword40FromLe(void *pAddr_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800197
198//---------------------------------------------------------------------------
199//
200// Function: AmiSetQword48()
201//
202// Description: sets a 48 bit value to a buffer
203//
204// Parameters: pAddr_p = pointer to destination buffer
205// qwQwordVal_p = quadruple word value
206//
207// Return: void
208//
209//---------------------------------------------------------------------------
210
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700211void AmiSetQword48ToBe(void *pAddr_p, u64 qwQwordVal_p);
212void AmiSetQword48ToLe(void *pAddr_p, u64 qwQwordVal_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800213
214//---------------------------------------------------------------------------
215//
216// Function: AmiGetQword48()
217//
218// Description: reads a 48 bit value from a buffer
219//
220// Parameters: pAddr_p = pointer to source buffer
221//
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700222// Return: u64
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800223//
224//---------------------------------------------------------------------------
225
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700226u64 AmiGetQword48FromBe(void *pAddr_p);
227u64 AmiGetQword48FromLe(void *pAddr_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800228
229//---------------------------------------------------------------------------
230//
231// Function: AmiSetQword56()
232//
233// Description: sets a 56 bit value to a buffer
234//
235// Parameters: pAddr_p = pointer to destination buffer
236// qwQwordVal_p = quadruple word value
237//
238// Return: void
239//
240//---------------------------------------------------------------------------
241
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700242void AmiSetQword56ToBe(void *pAddr_p, u64 qwQwordVal_p);
243void AmiSetQword56ToLe(void *pAddr_p, u64 qwQwordVal_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800244
245//---------------------------------------------------------------------------
246//
247// Function: AmiGetQword56()
248//
249// Description: reads a 56 bit value from a buffer
250//
251// Parameters: pAddr_p = pointer to source buffer
252//
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700253// Return: u64
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800254//
255//---------------------------------------------------------------------------
256
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700257u64 AmiGetQword56FromBe(void *pAddr_p);
258u64 AmiGetQword56FromLe(void *pAddr_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800259
260//---------------------------------------------------------------------------
261//
262// Function: AmiSetQword64()
263//
264// Description: sets a 64 bit value to a buffer
265//
266// Parameters: pAddr_p = pointer to destination buffer
267// qwQwordVal_p = quadruple word value
268//
269// Return: void
270//
271//---------------------------------------------------------------------------
272
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700273void AmiSetQword64ToBe(void *pAddr_p, u64 qwQwordVal_p);
274void AmiSetQword64ToLe(void *pAddr_p, u64 qwQwordVal_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800275
276//---------------------------------------------------------------------------
277//
278// Function: AmiGetQword64()
279//
280// Description: reads a 64 bit value from a buffer
281//
282// Parameters: pAddr_p = pointer to source buffer
283//
284// Return: void
285//
286//---------------------------------------------------------------------------
287
Greg Kroah-Hartmana5c30d92009-03-23 12:43:05 -0700288u64 AmiGetQword64FromBe(void *pAddr_p);
289u64 AmiGetQword64FromLe(void *pAddr_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800290
291//---------------------------------------------------------------------------
292//
293// Function: AmiSetTimeOfDay()
294//
295// Description: sets a TIME_OF_DAY (CANopen) value to a buffer
296//
297// Parameters: pAddr_p = pointer to destination buffer
298// pTimeOfDay_p = pointer to struct TIME_OF_DAY
299//
300// Return: void
301//
302//---------------------------------------------------------------------------
Greg Kroah-Hartmanf15a88f2009-03-23 11:44:31 -0700303void AmiSetTimeOfDay(void *pAddr_p, tTimeOfDay *pTimeOfDay_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800304
305//---------------------------------------------------------------------------
306//
307// Function: AmiGetTimeOfDay()
308//
309// Description: reads a TIME_OF_DAY (CANopen) value from a buffer
310//
311// Parameters: pAddr_p = pointer to source buffer
312// pTimeOfDay_p = pointer to struct TIME_OF_DAY
313//
314// Return: void
315//
316//---------------------------------------------------------------------------
Greg Kroah-Hartmanf15a88f2009-03-23 11:44:31 -0700317void AmiGetTimeOfDay(void *pAddr_p, tTimeOfDay *pTimeOfDay_p);
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800318
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800319#ifdef __cplusplus
Greg Kroah-Hartmane0ca0592008-12-19 17:09:38 -0800320}
Daniel Krueger9d7164c2008-12-19 11:41:57 -0800321#endif
Greg Kroah-Hartmane0ca0592008-12-19 17:09:38 -0800322#endif // ifndef _EPLAMI_H_
323// Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler// damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).