From 28948f2fccb389b0239819bf8effa72d57fe37af Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Sun, 28 Jul 2024 10:46:11 +0200 Subject: [PATCH] ump_msg: Add a new helper snd_ump_get_byte() For making it easier to extract a byte from the UMP packet no matter which endian is used, introduce a new helper function snd_ump_get_byte(). It'll be useful for retrieving SysEx byte or a name string. Signed-off-by: Takashi Iwai --- include/ump_msg.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/ump_msg.h b/include/ump_msg.h index 9b189144..617dbe42 100644 --- a/include/ump_msg.h +++ b/include/ump_msg.h @@ -1001,6 +1001,18 @@ static inline uint8_t snd_ump_sysex_msg_length(const uint32_t *ump) return (*ump >> 16) & 0xf; } +/** + * \brief extract one byte from a UMP packet + */ +static inline uint8_t snd_ump_get_byte(const uint32_t *ump, unsigned int offset) +{ +#ifdef SNDRV_BIG_ENDIAN + return ((const uint8_t *)ump)[offset]; +#else + return ((const uint8_t *)ump)[(offset & ~3) | (3 - (offset & 3))]; +#endif +} + int snd_ump_msg_sysex_expand(const uint32_t *ump, uint8_t *buf, size_t maxlen, size_t *filled); int snd_ump_packet_length(unsigned int type); -- 2.47.1