790 /****************************************************************************** |
790 /****************************************************************************** |
791 * Bitwise read/write macros |
791 * Bitwise read/write macros |
792 *****************************************************************************/ |
792 *****************************************************************************/ |
793 |
793 |
794 /** Read a certain bit of an EtherCAT data byte. |
794 /** Read a certain bit of an EtherCAT data byte. |
|
795 * |
795 * \param DATA EtherCAT data pointer |
796 * \param DATA EtherCAT data pointer |
796 * \param POS bit position |
797 * \param POS bit position |
797 */ |
798 */ |
798 #define EC_READ_BIT(DATA, POS) ((*((uint8_t *) (DATA)) >> (POS)) & 0x01) |
799 #define EC_READ_BIT(DATA, POS) ((*((uint8_t *) (DATA)) >> (POS)) & 0x01) |
799 |
800 |
800 /** Write a certain bit of an EtherCAT data byte. |
801 /** Write a certain bit of an EtherCAT data byte. |
|
802 * |
801 * \param DATA EtherCAT data pointer |
803 * \param DATA EtherCAT data pointer |
802 * \param POS bit position |
804 * \param POS bit position |
803 * \param VAL new bit value |
805 * \param VAL new bit value |
804 */ |
806 */ |
805 #define EC_WRITE_BIT(DATA, POS, VAL) \ |
807 #define EC_WRITE_BIT(DATA, POS, VAL) \ |
811 /****************************************************************************** |
813 /****************************************************************************** |
812 * Read macros |
814 * Read macros |
813 *****************************************************************************/ |
815 *****************************************************************************/ |
814 |
816 |
815 /** Read an 8-bit unsigned value from EtherCAT data. |
817 /** Read an 8-bit unsigned value from EtherCAT data. |
|
818 * |
816 * \return EtherCAT data value |
819 * \return EtherCAT data value |
817 */ |
820 */ |
818 #define EC_READ_U8(DATA) \ |
821 #define EC_READ_U8(DATA) \ |
819 ((uint8_t) *((uint8_t *) (DATA))) |
822 ((uint8_t) *((uint8_t *) (DATA))) |
820 |
823 |
821 /** Read an 8-bit signed value from EtherCAT data. |
824 /** Read an 8-bit signed value from EtherCAT data. |
|
825 * |
822 * \param DATA EtherCAT data pointer |
826 * \param DATA EtherCAT data pointer |
823 * \return EtherCAT data value |
827 * \return EtherCAT data value |
824 */ |
828 */ |
825 #define EC_READ_S8(DATA) \ |
829 #define EC_READ_S8(DATA) \ |
826 ((int8_t) *((uint8_t *) (DATA))) |
830 ((int8_t) *((uint8_t *) (DATA))) |
827 |
831 |
828 /** Read a 16-bit unsigned value from EtherCAT data. |
832 /** Read a 16-bit unsigned value from EtherCAT data. |
|
833 * |
829 * \param DATA EtherCAT data pointer |
834 * \param DATA EtherCAT data pointer |
830 * \return EtherCAT data value |
835 * \return EtherCAT data value |
831 */ |
836 */ |
832 #define EC_READ_U16(DATA) \ |
837 #define EC_READ_U16(DATA) \ |
833 ((uint16_t) le16_to_cpup((void *) (DATA))) |
838 ((uint16_t) le16_to_cpup((void *) (DATA))) |
834 |
839 |
835 /** Read a 16-bit signed value from EtherCAT data. |
840 /** Read a 16-bit signed value from EtherCAT data. |
|
841 * |
836 * \param DATA EtherCAT data pointer |
842 * \param DATA EtherCAT data pointer |
837 * \return EtherCAT data value |
843 * \return EtherCAT data value |
838 */ |
844 */ |
839 #define EC_READ_S16(DATA) \ |
845 #define EC_READ_S16(DATA) \ |
840 ((int16_t) le16_to_cpup((void *) (DATA))) |
846 ((int16_t) le16_to_cpup((void *) (DATA))) |
841 |
847 |
842 /** Read a 32-bit unsigned value from EtherCAT data. |
848 /** Read a 32-bit unsigned value from EtherCAT data. |
|
849 * |
843 * \param DATA EtherCAT data pointer |
850 * \param DATA EtherCAT data pointer |
844 * \return EtherCAT data value |
851 * \return EtherCAT data value |
845 */ |
852 */ |
846 #define EC_READ_U32(DATA) \ |
853 #define EC_READ_U32(DATA) \ |
847 ((uint32_t) le32_to_cpup((void *) (DATA))) |
854 ((uint32_t) le32_to_cpup((void *) (DATA))) |
848 |
855 |
849 /** Read a 32-bit signed value from EtherCAT data. |
856 /** Read a 32-bit signed value from EtherCAT data. |
|
857 * |
850 * \param DATA EtherCAT data pointer |
858 * \param DATA EtherCAT data pointer |
851 * \return EtherCAT data value |
859 * \return EtherCAT data value |
852 */ |
860 */ |
853 #define EC_READ_S32(DATA) \ |
861 #define EC_READ_S32(DATA) \ |
854 ((int32_t) le32_to_cpup((void *) (DATA))) |
862 ((int32_t) le32_to_cpup((void *) (DATA))) |
856 /****************************************************************************** |
864 /****************************************************************************** |
857 * Write macros |
865 * Write macros |
858 *****************************************************************************/ |
866 *****************************************************************************/ |
859 |
867 |
860 /** Write an 8-bit unsigned value to EtherCAT data. |
868 /** Write an 8-bit unsigned value to EtherCAT data. |
|
869 * |
861 * \param DATA EtherCAT data pointer |
870 * \param DATA EtherCAT data pointer |
862 * \param VAL new value |
871 * \param VAL new value |
863 */ |
872 */ |
864 #define EC_WRITE_U8(DATA, VAL) \ |
873 #define EC_WRITE_U8(DATA, VAL) \ |
865 do { \ |
874 do { \ |
866 *((uint8_t *)(DATA)) = ((uint8_t) (VAL)); \ |
875 *((uint8_t *)(DATA)) = ((uint8_t) (VAL)); \ |
867 } while (0) |
876 } while (0) |
868 |
877 |
869 /** Write an 8-bit signed value to EtherCAT data. |
878 /** Write an 8-bit signed value to EtherCAT data. |
|
879 * |
870 * \param DATA EtherCAT data pointer |
880 * \param DATA EtherCAT data pointer |
871 * \param VAL new value |
881 * \param VAL new value |
872 */ |
882 */ |
873 #define EC_WRITE_S8(DATA, VAL) EC_WRITE_U8(DATA, VAL) |
883 #define EC_WRITE_S8(DATA, VAL) EC_WRITE_U8(DATA, VAL) |
874 |
884 |
875 /** Write a 16-bit unsigned value to EtherCAT data. |
885 /** Write a 16-bit unsigned value to EtherCAT data. |
|
886 * |
876 * \param DATA EtherCAT data pointer |
887 * \param DATA EtherCAT data pointer |
877 * \param VAL new value |
888 * \param VAL new value |
878 */ |
889 */ |
879 #define EC_WRITE_U16(DATA, VAL) \ |
890 #define EC_WRITE_U16(DATA, VAL) \ |
880 do { \ |
891 do { \ |
881 *((uint16_t *) (DATA)) = (uint16_t) (VAL); \ |
892 *((uint16_t *) (DATA)) = cpu_to_le16((uint16_t) (VAL)); \ |
882 cpu_to_le16s((uint16_t *) (DATA)); \ |
|
883 } while (0) |
893 } while (0) |
884 |
894 |
885 /** Write a 16-bit signed value to EtherCAT data. |
895 /** Write a 16-bit signed value to EtherCAT data. |
|
896 * |
886 * \param DATA EtherCAT data pointer |
897 * \param DATA EtherCAT data pointer |
887 * \param VAL new value |
898 * \param VAL new value |
888 */ |
899 */ |
889 #define EC_WRITE_S16(DATA, VAL) EC_WRITE_U16(DATA, VAL) |
900 #define EC_WRITE_S16(DATA, VAL) EC_WRITE_U16(DATA, VAL) |
890 |
901 |
891 /** Write a 32-bit unsigned value to EtherCAT data. |
902 /** Write a 32-bit unsigned value to EtherCAT data. |
|
903 * |
892 * \param DATA EtherCAT data pointer |
904 * \param DATA EtherCAT data pointer |
893 * \param VAL new value |
905 * \param VAL new value |
894 */ |
906 */ |
895 #define EC_WRITE_U32(DATA, VAL) \ |
907 #define EC_WRITE_U32(DATA, VAL) \ |
896 do { \ |
908 do { \ |
897 *((uint32_t *) (DATA)) = (uint32_t) (VAL); \ |
909 *((uint32_t *) (DATA)) = cpu_to_le32((uint32_t) (VAL)); \ |
898 cpu_to_le32s((uint32_t *) (DATA)); \ |
|
899 } while (0) |
910 } while (0) |
900 |
911 |
901 /** Write a 32-bit signed value to EtherCAT data. |
912 /** Write a 32-bit signed value to EtherCAT data. |
|
913 * |
902 * \param DATA EtherCAT data pointer |
914 * \param DATA EtherCAT data pointer |
903 * \param VAL new value |
915 * \param VAL new value |
904 */ |
916 */ |
905 #define EC_WRITE_S32(DATA, VAL) EC_WRITE_U32(DATA, VAL) |
917 #define EC_WRITE_S32(DATA, VAL) EC_WRITE_U32(DATA, VAL) |
906 |
918 |