From f090a93ea83de8e0e5ce99a3e9c5be755f8cc62c Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Sun, 28 Jul 2024 10:24:18 +0200 Subject: [PATCH] ump_msg: Define types for UMP Mixed Data Set messages Mixed Data Set messages is another messages of the type 5 (SND_UMP_MSG_TYPE_EXTENDED_DATA) with the status 8 and 9. Signed-off-by: Takashi Iwai --- include/ump_msg.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/include/ump_msg.h b/include/ump_msg.h index 617dbe42..a64cb317 100644 --- a/include/ump_msg.h +++ b/include/ump_msg.h @@ -683,6 +683,69 @@ typedef union _snd_ump_msg_flex_data { uint32_t raw[4]; /**< raw UMP packet */ } snd_ump_msg_flex_data_t; +/** Mixed Data Set Chunk Header Message (128bit) */ +typedef struct _snd_ump_msg_mixed_data_header { +#ifdef __BIG_ENDIAN_BITFIELD + uint8_t type:4; /**< UMP packet type */ + uint8_t group:4; /**< UMP Group */ + uint8_t status:4; /**< Status */ + uint8_t mds_id:4; /**< Mixed Data Set ID */ + uint16_t bytes; /**< Number of valid bytes in this chunk */ + + uint16_t chunks; /**< Number of chunks in mixed data set */ + uint16_t chunk; /**< Number of this chunk */ + + uint16_t manufacturer; /**< Manufacturer ID */ + uint16_t device; /**< Device ID */ + + uint16_t sub_id_1; /**< Sub ID \# 1 */ + uint16_t sub_id_2; /**< Sub ID \# 2 */ +#else + uint16_t bytes; /**< Number of valid bytes in this chunk */ + uint8_t mds_id:4; /**< Mixed Data Set ID */ + uint8_t status:4; /**< Status */ + uint8_t group:4; /**< UMP Group */ + uint8_t type:4; /**< UMP packet type */ + + uint16_t chunk; /**< Number of this chunk */ + uint16_t chunks; /**< Number of chunks in mixed data set */ + + uint16_t device; /**< Device ID */ + uint16_t manufacturer; /**< Manufacturer ID */ + + uint16_t sub_id_2; /**< Sub ID \# 2 */ + uint16_t sub_id_1; /**< Sub ID \# 1 */ +#endif +} snd_ump_msg_mixed_data_header_t; + +/** Mixed Data Set Chunk Payload Message (128bit) */ +typedef struct _snd_ump_msg_mixed_data_payload { +#ifdef __BIG_ENDIAN_BITFIELD + uint8_t type:4; /**< UMP packet type */ + uint8_t group:4; /**< UMP Group */ + uint8_t status:4; /**< Status */ + uint8_t mds_id:4; /**< Mixed Data Set ID */ + uint16_t payload1; /**< Payload */ + + uint32_t payloads[3]; /**< Payload */ +#else + uint16_t payload1; /**< Payload */ + uint8_t mds_id:4; /**< Mixed Data Set ID */ + uint8_t status:4; /**< Status */ + uint8_t group:4; /**< UMP Group */ + uint8_t type:4; /**< UMP packet type */ + + uint32_t payloads[3]; /**< Payload */ +#endif +} snd_ump_msg_mixed_data_payload_t; + +/** Mixed Data Set Chunk Message (128bit) */ +typedef union _snd_ump_msg_mixed_data { + snd_ump_msg_mixed_data_header_t header; /**< Header */ + snd_ump_msg_mixed_data_payload_t payload; /**< Payload */ + uint32_t raw[4]; /**< raw UMP packet */ +} snd_ump_msg_mixed_data_t; + /** Jitter Reduction Clock / Timestamp Message (32bit) */ typedef struct _snd_ump_msg_jr_clock { #ifdef SNDRV_BIG_ENDIAN_BITFIELD @@ -803,6 +866,12 @@ enum { SND_UMP_SYSEX_STATUS_END = 3, }; +/** MIDI 2.0 Mixed Data Set Status */ +enum { + SND_UMP_MIXED_DATA_SET_STATUS_HEADER = 8, + SND_UMP_MIXED_DATA_SET_STATUS_PAYLOAD = 9, +}; + /** UMP Utility Type Status (type 0x0) **/ enum { SND_UMP_UTILITY_MSG_STATUS_NOOP = 0x00,