1 /****************************************************************************
3 (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
4 www.systec-electronic.com
8 Description: Abstract Memory Interface for x86 compatible
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: amix86.c,v $
56 $Revision: 1.3 $ $Date: 2008/04/17 21:36:32 $
63 -------------------------------------------------------------------------
67 r.s.: first implemetation
69 2006-06-13 d.k.: duplicate functions for little endian and big endian
71 ****************************************************************************/
77 #if (!defined(EPL_AMI_INLINED)) || defined(INLINE_ENABLED)
79 //---------------------------------------------------------------------------
81 //---------------------------------------------------------------------------
98 //=========================================================================//
100 // P U B L I C F U N C T I O N S //
102 //=========================================================================//
104 //---------------------------------------------------------------------------
106 // Function: AmiSetXXXToBe()
108 // Description: writes the specified value to the absolute address in
111 // Parameters: pAddr_p = absolute address
118 //---------------------------------------------------------------------------
120 //------------< write BYTE in big endian >--------------------------
122 void PUBLIC AmiSetByteToBe (void FAR* pAddr_p, BYTE bByteVal_p)
125 *(BYTE FAR*)pAddr_p = bByteVal_p;
130 //------------< write WORD in big endian >--------------------------
132 INLINE_FUNCTION void PUBLIC AmiSetWordToBe(void FAR * pAddr_p, WORD wWordVal_p)
134 twStruct FAR *pwStruct;
137 wValue.m_wWord = (WORD) ((wWordVal_p & 0x00FF) << 8); //LSB to MSB
138 wValue.m_wWord |= (WORD) ((wWordVal_p & 0xFF00) >> 8); //MSB to LSB
140 pwStruct = (twStruct FAR *) pAddr_p;
141 pwStruct->m_wWord = wValue.m_wWord;
145 //------------< write DWORD in big endian >-------------------------
147 INLINE_FUNCTION void PUBLIC AmiSetDwordToBe(void FAR * pAddr_p,
150 tdwStruct FAR *pdwStruct;
153 dwValue.m_dwDword = ((dwDwordVal_p & 0x000000FF) << 24); //LSB to MSB
154 dwValue.m_dwDword |= ((dwDwordVal_p & 0x0000FF00) << 8);
155 dwValue.m_dwDword |= ((dwDwordVal_p & 0x00FF0000) >> 8);
156 dwValue.m_dwDword |= ((dwDwordVal_p & 0xFF000000) >> 24); //MSB to LSB
158 pdwStruct = (tdwStruct FAR *) pAddr_p;
159 pdwStruct->m_dwDword = dwValue.m_dwDword;
163 //---------------------------------------------------------------------------
165 // Function: AmiSetXXXToLe()
167 // Description: writes the specified value to the absolute address in
170 // Parameters: pAddr_p = absolute address
177 //---------------------------------------------------------------------------
179 //------------< write BYTE in little endian >--------------------------
181 void PUBLIC AmiSetByteToLe (void FAR* pAddr_p, BYTE bByteVal_p)
184 *(BYTE FAR*)pAddr_p = bByteVal_p;
189 //------------< write WORD in little endian >--------------------------
191 INLINE_FUNCTION void PUBLIC AmiSetWordToLe(void FAR * pAddr_p, WORD wWordVal_p)
193 twStruct FAR *pwStruct;
195 pwStruct = (twStruct FAR *) pAddr_p;
196 pwStruct->m_wWord = wWordVal_p;
200 //------------< write DWORD in little endian >-------------------------
202 INLINE_FUNCTION void PUBLIC AmiSetDwordToLe(void FAR * pAddr_p,
205 tdwStruct FAR *pdwStruct;
207 pdwStruct = (tdwStruct FAR *) pAddr_p;
208 pdwStruct->m_dwDword = dwDwordVal_p;
212 //---------------------------------------------------------------------------
214 // Function: AmiGetXXXFromBe()
216 // Description: reads the specified value from the absolute address in
219 // Parameters: pAddr_p = absolute address
221 // Returns: XXX = value
225 //---------------------------------------------------------------------------
227 //------------< read BYTE in big endian >---------------------------
229 BYTE PUBLIC AmiGetByteFromBe (void FAR* pAddr_p)
232 return ( *(BYTE FAR*)pAddr_p );
237 //------------< read WORD in big endian >---------------------------
239 INLINE_FUNCTION WORD PUBLIC AmiGetWordFromBe(void FAR * pAddr_p)
241 twStruct FAR *pwStruct;
244 pwStruct = (twStruct FAR *) pAddr_p;
246 wValue.m_wWord = (WORD) ((pwStruct->m_wWord & 0x00FF) << 8); //LSB to MSB
247 wValue.m_wWord |= (WORD) ((pwStruct->m_wWord & 0xFF00) >> 8); //MSB to LSB
249 return (wValue.m_wWord);
253 //------------< read DWORD in big endian >--------------------------
255 INLINE_FUNCTION DWORD PUBLIC AmiGetDwordFromBe(void FAR * pAddr_p)
257 tdwStruct FAR *pdwStruct;
260 pdwStruct = (tdwStruct FAR *) pAddr_p;
262 dwValue.m_dwDword = ((pdwStruct->m_dwDword & 0x000000FF) << 24); //LSB to MSB
263 dwValue.m_dwDword |= ((pdwStruct->m_dwDword & 0x0000FF00) << 8);
264 dwValue.m_dwDword |= ((pdwStruct->m_dwDword & 0x00FF0000) >> 8);
265 dwValue.m_dwDword |= ((pdwStruct->m_dwDword & 0xFF000000) >> 24); //MSB to LSB
267 return (dwValue.m_dwDword);
271 //---------------------------------------------------------------------------
273 // Function: AmiGetXXXFromLe()
275 // Description: reads the specified value from the absolute address in
278 // Parameters: pAddr_p = absolute address
280 // Returns: XXX = value
284 //---------------------------------------------------------------------------
286 //------------< read BYTE in little endian >---------------------------
288 BYTE PUBLIC AmiGetByteFromLe (void FAR* pAddr_p)
291 return ( *(BYTE FAR*)pAddr_p );
296 //------------< read WORD in little endian >---------------------------
298 INLINE_FUNCTION WORD PUBLIC AmiGetWordFromLe(void FAR * pAddr_p)
300 twStruct FAR *pwStruct;
302 pwStruct = (twStruct FAR *) pAddr_p;
303 return (pwStruct->m_wWord);
307 //------------< read DWORD in little endian >--------------------------
309 INLINE_FUNCTION DWORD PUBLIC AmiGetDwordFromLe(void FAR * pAddr_p)
311 tdwStruct FAR *pdwStruct;
313 pdwStruct = (tdwStruct FAR *) pAddr_p;
314 return (pdwStruct->m_dwDword);
318 //---------------------------------------------------------------------------
320 // Function: AmiSetDword24ToBe()
322 // Description: sets a 24 bit value to a buffer in big endian
324 // Parameters: pAddr_p = pointer to destination buffer
325 // dwDwordVal_p = value to set
331 //---------------------------------------------------------------------------
333 INLINE_FUNCTION void PUBLIC AmiSetDword24ToBe(void FAR * pAddr_p,
337 ((BYTE FAR *) pAddr_p)[0] = ((BYTE FAR *) & dwDwordVal_p)[2];
338 ((BYTE FAR *) pAddr_p)[1] = ((BYTE FAR *) & dwDwordVal_p)[1];
339 ((BYTE FAR *) pAddr_p)[2] = ((BYTE FAR *) & dwDwordVal_p)[0];
343 //---------------------------------------------------------------------------
345 // Function: AmiSetDword24ToLe()
347 // Description: sets a 24 bit value to a buffer in little endian
349 // Parameters: pAddr_p = pointer to destination buffer
350 // dwDwordVal_p = value to set
356 //---------------------------------------------------------------------------
358 INLINE_FUNCTION void PUBLIC AmiSetDword24ToLe(void FAR * pAddr_p,
362 ((BYTE FAR *) pAddr_p)[0] = ((BYTE FAR *) & dwDwordVal_p)[0];
363 ((BYTE FAR *) pAddr_p)[1] = ((BYTE FAR *) & dwDwordVal_p)[1];
364 ((BYTE FAR *) pAddr_p)[2] = ((BYTE FAR *) & dwDwordVal_p)[2];
368 //---------------------------------------------------------------------------
370 // Function: AmiGetDword24FromBe()
372 // Description: reads a 24 bit value from a buffer in big endian
374 // Parameters: pAddr_p = pointer to source buffer
376 // Return: DWORD = read value
380 //---------------------------------------------------------------------------
382 INLINE_FUNCTION DWORD PUBLIC AmiGetDword24FromBe(void FAR * pAddr_p)
387 dwStruct.m_dwDword = AmiGetDwordFromBe(pAddr_p);
388 dwStruct.m_dwDword >>= 8;
390 return (dwStruct.m_dwDword);
394 //---------------------------------------------------------------------------
396 // Function: AmiGetDword24FromLe()
398 // Description: reads a 24 bit value from a buffer in little endian
400 // Parameters: pAddr_p = pointer to source buffer
402 // Return: DWORD = read value
406 //---------------------------------------------------------------------------
408 INLINE_FUNCTION DWORD PUBLIC AmiGetDword24FromLe(void FAR * pAddr_p)
413 dwStruct.m_dwDword = AmiGetDwordFromLe(pAddr_p);
414 dwStruct.m_dwDword &= 0x00FFFFFF;
416 return (dwStruct.m_dwDword);
422 //---------------------------------------------------------------------------
424 // Function: AmiSetQword64ToBe()
426 // Description: sets a 64 bit value to a buffer in big endian
428 // Parameters: pAddr_p = pointer to destination buffer
429 // qwQwordVal_p = quadruple word value
435 //---------------------------------------------------------------------------
437 INLINE_FUNCTION void PUBLIC AmiSetQword64ToBe(void FAR * pAddr_p,
441 ((BYTE FAR *) pAddr_p)[0] = ((BYTE FAR *) & qwQwordVal_p)[7];
442 ((BYTE FAR *) pAddr_p)[1] = ((BYTE FAR *) & qwQwordVal_p)[6];
443 ((BYTE FAR *) pAddr_p)[2] = ((BYTE FAR *) & qwQwordVal_p)[5];
444 ((BYTE FAR *) pAddr_p)[3] = ((BYTE FAR *) & qwQwordVal_p)[4];
445 ((BYTE FAR *) pAddr_p)[4] = ((BYTE FAR *) & qwQwordVal_p)[3];
446 ((BYTE FAR *) pAddr_p)[5] = ((BYTE FAR *) & qwQwordVal_p)[2];
447 ((BYTE FAR *) pAddr_p)[6] = ((BYTE FAR *) & qwQwordVal_p)[1];
448 ((BYTE FAR *) pAddr_p)[7] = ((BYTE FAR *) & qwQwordVal_p)[0];
452 //---------------------------------------------------------------------------
454 // Function: AmiSetQword64ToLe()
456 // Description: sets a 64 bit value to a buffer in little endian
458 // Parameters: pAddr_p = pointer to destination buffer
459 // qwQwordVal_p = quadruple word value
465 //---------------------------------------------------------------------------
467 INLINE_FUNCTION void PUBLIC AmiSetQword64ToLe(void FAR * pAddr_p,
473 pqwDst = (QWORD FAR *) pAddr_p;
474 *pqwDst = qwQwordVal_p;
478 //---------------------------------------------------------------------------
480 // Function: AmiGetQword64FromBe()
482 // Description: reads a 64 bit value from a buffer in big endian
484 // Parameters: pAddr_p = pointer to source buffer
490 //---------------------------------------------------------------------------
492 INLINE_FUNCTION QWORD PUBLIC AmiGetQword64FromBe(void FAR * pAddr_p)
497 ((BYTE FAR *) & qwStruct.m_qwQword)[0] = ((BYTE FAR *) pAddr_p)[7];
498 ((BYTE FAR *) & qwStruct.m_qwQword)[1] = ((BYTE FAR *) pAddr_p)[6];
499 ((BYTE FAR *) & qwStruct.m_qwQword)[2] = ((BYTE FAR *) pAddr_p)[5];
500 ((BYTE FAR *) & qwStruct.m_qwQword)[3] = ((BYTE FAR *) pAddr_p)[4];
501 ((BYTE FAR *) & qwStruct.m_qwQword)[4] = ((BYTE FAR *) pAddr_p)[3];
502 ((BYTE FAR *) & qwStruct.m_qwQword)[5] = ((BYTE FAR *) pAddr_p)[2];
503 ((BYTE FAR *) & qwStruct.m_qwQword)[6] = ((BYTE FAR *) pAddr_p)[1];
504 ((BYTE FAR *) & qwStruct.m_qwQword)[7] = ((BYTE FAR *) pAddr_p)[0];
506 return (qwStruct.m_qwQword);
510 //---------------------------------------------------------------------------
512 // Function: AmiGetQword64FromLe()
514 // Description: reads a 64 bit value from a buffer in little endian
516 // Parameters: pAddr_p = pointer to source buffer
522 //---------------------------------------------------------------------------
524 INLINE_FUNCTION QWORD PUBLIC AmiGetQword64FromLe(void FAR * pAddr_p)
527 tqwStruct FAR *pqwStruct;
530 pqwStruct = (tqwStruct FAR *) pAddr_p;
531 qwStruct.m_qwQword = pqwStruct->m_qwQword;
533 return (qwStruct.m_qwQword);
537 //---------------------------------------------------------------------------
539 // Function: AmiSetQword40ToBe()
541 // Description: sets a 40 bit value to a buffer in big endian
543 // Parameters: pAddr_p = pointer to destination buffer
544 // qwQwordVal_p = quadruple word value
550 //---------------------------------------------------------------------------
552 INLINE_FUNCTION void PUBLIC AmiSetQword40ToBe(void FAR * pAddr_p,
556 ((BYTE FAR *) pAddr_p)[0] = ((BYTE FAR *) & qwQwordVal_p)[4];
557 ((BYTE FAR *) pAddr_p)[1] = ((BYTE FAR *) & qwQwordVal_p)[3];
558 ((BYTE FAR *) pAddr_p)[2] = ((BYTE FAR *) & qwQwordVal_p)[2];
559 ((BYTE FAR *) pAddr_p)[3] = ((BYTE FAR *) & qwQwordVal_p)[1];
560 ((BYTE FAR *) pAddr_p)[4] = ((BYTE FAR *) & qwQwordVal_p)[0];
564 //---------------------------------------------------------------------------
566 // Function: AmiSetQword40ToLe()
568 // Description: sets a 40 bit value to a buffer in little endian
570 // Parameters: pAddr_p = pointer to destination buffer
571 // qwQwordVal_p = quadruple word value
577 //---------------------------------------------------------------------------
579 INLINE_FUNCTION void PUBLIC AmiSetQword40ToLe(void FAR * pAddr_p,
583 ((DWORD FAR *) pAddr_p)[0] = ((DWORD FAR *) & qwQwordVal_p)[0];
584 ((BYTE FAR *) pAddr_p)[4] = ((BYTE FAR *) & qwQwordVal_p)[4];
588 //---------------------------------------------------------------------------
590 // Function: AmiGetQword40FromBe()
592 // Description: reads a 40 bit value from a buffer in big endian
594 // Parameters: pAddr_p = pointer to source buffer
600 //---------------------------------------------------------------------------
602 INLINE_FUNCTION QWORD PUBLIC AmiGetQword40FromBe(void FAR * pAddr_p)
607 qwStruct.m_qwQword = AmiGetQword64FromBe(pAddr_p);
608 qwStruct.m_qwQword >>= 24;
610 return (qwStruct.m_qwQword);
614 //---------------------------------------------------------------------------
616 // Function: AmiGetQword40FromLe()
618 // Description: reads a 40 bit value from a buffer in little endian
620 // Parameters: pAddr_p = pointer to source buffer
626 //---------------------------------------------------------------------------
628 INLINE_FUNCTION QWORD PUBLIC AmiGetQword40FromLe(void FAR * pAddr_p)
633 qwStruct.m_qwQword = AmiGetQword64FromLe(pAddr_p);
634 qwStruct.m_qwQword &= 0x000000FFFFFFFFFFLL;
636 return (qwStruct.m_qwQword);
640 //---------------------------------------------------------------------------
642 // Function: AmiSetQword48ToBe()
644 // Description: sets a 48 bit value to a buffer in big endian
646 // Parameters: pAddr_p = pointer to destination buffer
647 // qwQwordVal_p = quadruple word value
653 //---------------------------------------------------------------------------
655 INLINE_FUNCTION void PUBLIC AmiSetQword48ToBe(void FAR * pAddr_p,
659 ((BYTE FAR *) pAddr_p)[0] = ((BYTE FAR *) & qwQwordVal_p)[5];
660 ((BYTE FAR *) pAddr_p)[1] = ((BYTE FAR *) & qwQwordVal_p)[4];
661 ((BYTE FAR *) pAddr_p)[2] = ((BYTE FAR *) & qwQwordVal_p)[3];
662 ((BYTE FAR *) pAddr_p)[3] = ((BYTE FAR *) & qwQwordVal_p)[2];
663 ((BYTE FAR *) pAddr_p)[4] = ((BYTE FAR *) & qwQwordVal_p)[1];
664 ((BYTE FAR *) pAddr_p)[5] = ((BYTE FAR *) & qwQwordVal_p)[0];
668 //---------------------------------------------------------------------------
670 // Function: AmiSetQword48ToLe()
672 // Description: sets a 48 bit value to a buffer in little endian
674 // Parameters: pAddr_p = pointer to destination buffer
675 // qwQwordVal_p = quadruple word value
681 //---------------------------------------------------------------------------
683 INLINE_FUNCTION void PUBLIC AmiSetQword48ToLe(void FAR * pAddr_p,
687 ((DWORD FAR *) pAddr_p)[0] = ((DWORD FAR *) & qwQwordVal_p)[0];
688 ((WORD FAR *) pAddr_p)[2] = ((WORD FAR *) & qwQwordVal_p)[2];
692 //---------------------------------------------------------------------------
694 // Function: AmiGetQword48FromBe()
696 // Description: reads a 48 bit value from a buffer in big endian
698 // Parameters: pAddr_p = pointer to source buffer
704 //---------------------------------------------------------------------------
706 INLINE_FUNCTION QWORD PUBLIC AmiGetQword48FromBe(void FAR * pAddr_p)
711 qwStruct.m_qwQword = AmiGetQword64FromBe(pAddr_p);
712 qwStruct.m_qwQword >>= 16;
714 return (qwStruct.m_qwQword);
718 //---------------------------------------------------------------------------
720 // Function: AmiGetQword48FromLe()
722 // Description: reads a 48 bit value from a buffer in little endian
724 // Parameters: pAddr_p = pointer to source buffer
730 //---------------------------------------------------------------------------
732 INLINE_FUNCTION QWORD PUBLIC AmiGetQword48FromLe(void FAR * pAddr_p)
737 qwStruct.m_qwQword = AmiGetQword64FromLe(pAddr_p);
738 qwStruct.m_qwQword &= 0x0000FFFFFFFFFFFFLL;
740 return (qwStruct.m_qwQword);
744 //---------------------------------------------------------------------------
746 // Function: AmiSetQword56ToBe()
748 // Description: sets a 56 bit value to a buffer in big endian
750 // Parameters: pAddr_p = pointer to destination buffer
751 // qwQwordVal_p = quadruple word value
757 //---------------------------------------------------------------------------
759 INLINE_FUNCTION void PUBLIC AmiSetQword56ToBe(void FAR * pAddr_p,
763 ((BYTE FAR *) pAddr_p)[0] = ((BYTE FAR *) & qwQwordVal_p)[6];
764 ((BYTE FAR *) pAddr_p)[1] = ((BYTE FAR *) & qwQwordVal_p)[5];
765 ((BYTE FAR *) pAddr_p)[2] = ((BYTE FAR *) & qwQwordVal_p)[4];
766 ((BYTE FAR *) pAddr_p)[3] = ((BYTE FAR *) & qwQwordVal_p)[3];
767 ((BYTE FAR *) pAddr_p)[4] = ((BYTE FAR *) & qwQwordVal_p)[2];
768 ((BYTE FAR *) pAddr_p)[5] = ((BYTE FAR *) & qwQwordVal_p)[1];
769 ((BYTE FAR *) pAddr_p)[6] = ((BYTE FAR *) & qwQwordVal_p)[0];
773 //---------------------------------------------------------------------------
775 // Function: AmiSetQword56ToLe()
777 // Description: sets a 56 bit value to a buffer in little endian
779 // Parameters: pAddr_p = pointer to destination buffer
780 // qwQwordVal_p = quadruple word value
786 //---------------------------------------------------------------------------
788 INLINE_FUNCTION void PUBLIC AmiSetQword56ToLe(void FAR * pAddr_p,
792 ((DWORD FAR *) pAddr_p)[0] = ((DWORD FAR *) & qwQwordVal_p)[0];
793 ((WORD FAR *) pAddr_p)[2] = ((WORD FAR *) & qwQwordVal_p)[2];
794 ((BYTE FAR *) pAddr_p)[6] = ((BYTE FAR *) & qwQwordVal_p)[6];
798 //---------------------------------------------------------------------------
800 // Function: AmiGetQword56FromBe()
802 // Description: reads a 56 bit value from a buffer in big endian
804 // Parameters: pAddr_p = pointer to source buffer
810 //---------------------------------------------------------------------------
812 INLINE_FUNCTION QWORD PUBLIC AmiGetQword56FromBe(void FAR * pAddr_p)
817 qwStruct.m_qwQword = AmiGetQword64FromBe(pAddr_p);
818 qwStruct.m_qwQword >>= 8;
820 return (qwStruct.m_qwQword);
824 //---------------------------------------------------------------------------
826 // Function: AmiGetQword56FromLe()
828 // Description: reads a 56 bit value from a buffer in little endian
830 // Parameters: pAddr_p = pointer to source buffer
836 //---------------------------------------------------------------------------
838 INLINE_FUNCTION QWORD PUBLIC AmiGetQword56FromLe(void FAR * pAddr_p)
843 qwStruct.m_qwQword = AmiGetQword64FromLe(pAddr_p);
844 qwStruct.m_qwQword &= 0x00FFFFFFFFFFFFFFLL;
846 return (qwStruct.m_qwQword);
850 //---------------------------------------------------------------------------
852 // Function: AmiSetTimeOfDay()
854 // Description: sets a TIME_OF_DAY (CANopen) value to a buffer
856 // Parameters: pAddr_p = pointer to destination buffer
857 // pTimeOfDay_p = pointer to struct TIME_OF_DAY
863 //---------------------------------------------------------------------------
865 INLINE_FUNCTION void PUBLIC AmiSetTimeOfDay(void FAR * pAddr_p,
866 tTimeOfDay FAR * pTimeOfDay_p)
869 AmiSetDwordToLe(((BYTE FAR *) pAddr_p),
870 pTimeOfDay_p->m_dwMs & 0x0FFFFFFF);
871 AmiSetWordToLe(((BYTE FAR *) pAddr_p) + 4, pTimeOfDay_p->m_wDays);
875 //---------------------------------------------------------------------------
877 // Function: AmiGetTimeOfDay()
879 // Description: reads a TIME_OF_DAY (CANopen) value from a buffer
881 // Parameters: pAddr_p = pointer to source buffer
882 // pTimeOfDay_p = pointer to struct TIME_OF_DAY
888 //---------------------------------------------------------------------------
890 INLINE_FUNCTION void PUBLIC AmiGetTimeOfDay(void FAR * pAddr_p,
891 tTimeOfDay FAR * pTimeOfDay_p)
894 pTimeOfDay_p->m_dwMs =
895 AmiGetDwordFromLe(((BYTE FAR *) pAddr_p)) & 0x0FFFFFFF;
896 pTimeOfDay_p->m_wDays = AmiGetWordFromLe(((BYTE FAR *) pAddr_p) + 4);
904 // Die letzte Zeile muß unbedingt eine leere Zeile sein, weil manche Compiler
905 // damit ein Problem haben, wenn das nicht so ist (z.B. GNU oder Borland C++ Builder).