equal
deleted
inserted
replaced
650 } |
650 } |
651 |
651 |
652 /*****************/ |
652 /*****************/ |
653 /* FROM/TO BCD */ |
653 /* FROM/TO BCD */ |
654 /*****************/ |
654 /*****************/ |
655 #define __bcd_digit(fac) |
655 |
|
656 static inline BOOL __test_bcd(LWORD IN) { |
|
657 while (IN) { |
|
658 if ((IN & 0xf) > 9) return 1; |
|
659 IN >>= 4; |
|
660 } |
|
661 return 0; |
|
662 } |
|
663 |
656 static inline ULINT __bcd_to_uint(LWORD IN){ |
664 static inline ULINT __bcd_to_uint(LWORD IN){ |
657 ULINT res; |
665 ULINT res = IN & 0xf; |
658 ULINT i; |
666 ULINT factor = 10ULL; |
659 |
667 |
660 res = IN & 0xf; |
668 while (IN >>= 4) { |
661 for(i = 10ULL; i <= 1000000000000000ULL; i *= 10){ |
669 res += (IN & 0xf) * factor; |
662 if(!(IN >>= 4)) |
670 factor *= 10; |
663 break; |
|
664 res += (IN & 0xf) * i; |
|
665 } |
671 } |
666 return res; |
672 return res; |
667 } |
673 } |
668 |
674 |
669 static inline LWORD __uint_to_bcd(ULINT IN){ |
675 static inline LWORD __uint_to_bcd(ULINT IN){ |
670 LWORD res; |
676 LWORD res = IN % 10; |
671 USINT i; |
677 USINT shift = 4; |
672 |
678 |
673 res = IN % 10; |
679 while (IN /= 10) { |
674 for(i = 4; i<=60; i += 4){ |
680 res |= (IN % 10) << shift; |
675 if(!(IN /= 10)) |
681 shift += 4; |
676 break; |
|
677 res |= (IN % 10) << i; |
|
678 } |
682 } |
679 return res; |
683 return res; |
680 } |
684 } |
681 |
685 |
682 |
686 |
980 |
984 |
981 |
985 |
982 /******** BCD_TO_ ************/ |
986 /******** BCD_TO_ ************/ |
983 #define __iec_(to_TYPENAME,from_TYPENAME) \ |
987 #define __iec_(to_TYPENAME,from_TYPENAME) \ |
984 static inline to_TYPENAME from_TYPENAME##_BCD_TO_##to_TYPENAME(EN_ENO_PARAMS, from_TYPENAME op){\ |
988 static inline to_TYPENAME from_TYPENAME##_BCD_TO_##to_TYPENAME(EN_ENO_PARAMS, from_TYPENAME op){\ |
985 TEST_EN(to_TYPENAME)\ |
989 TEST_EN_COND(to_TYPENAME, __test_bcd(op))\ |
986 return (to_TYPENAME)__bcd_to_uint(op);\ |
990 return (to_TYPENAME)__bcd_to_uint(op);\ |
987 }\ |
991 }\ |
988 static inline to_TYPENAME BCD_TO_##to_TYPENAME##__##to_TYPENAME##__##from_TYPENAME(EN_ENO_PARAMS, from_TYPENAME op){\ |
992 static inline to_TYPENAME BCD_TO_##to_TYPENAME##__##to_TYPENAME##__##from_TYPENAME(EN_ENO_PARAMS, from_TYPENAME op){\ |
989 return from_TYPENAME##_BCD_TO_##to_TYPENAME(EN_ENO, op);\ |
993 return from_TYPENAME##_BCD_TO_##to_TYPENAME(EN_ENO, op);\ |
990 } |
994 } |