9#if !defined(__ASOUNDLIB_H) && !defined(ALSA_LIBRARY_BUILD) 
   11#warning "use #include <alsa/asoundlib.h>, <alsa/ump_msg.h> should not be used directly" 
   12#include <alsa/asoundlib.h> 
   15#ifndef __ALSA_UMP_MSG_H 
   16#define __ALSA_UMP_MSG_H 
   22#if __BYTE_ORDER != __LITTLE_ENDIAN && __BYTE_ORDER != __BIG_ENDIAN 
   23#error "Endianness check failed!" 
   27typedef struct _snd_ump_msg_hdr {
 
   28#if __BYTE_ORDER == __BIG_ENDIAN 
   43} __attribute((packed)) snd_ump_msg_hdr_t;
 
   46typedef struct _snd_ump_msg_midi1_note {
 
   47#if __BYTE_ORDER == __BIG_ENDIAN 
   62} __attribute((packed)) snd_ump_msg_midi1_note_t;
 
   65typedef struct _snd_ump_msg_midi1_paf {
 
   66#if __BYTE_ORDER == __BIG_ENDIAN 
   81} __attribute((packed)) snd_ump_msg_midi1_paf_t;
 
   84typedef struct _snd_ump_msg_midi1_cc {
 
   85#if __BYTE_ORDER == __BIG_ENDIAN 
  100} __attribute((packed)) snd_ump_msg_midi1_cc_t;
 
  103typedef struct _snd_ump_msg_midi1_program {
 
  104#if __BYTE_ORDER == __BIG_ENDIAN 
  119} __attribute((packed)) snd_ump_msg_midi1_program_t;
 
  122typedef struct _snd_ump_msg_midi1_caf {
 
  123#if __BYTE_ORDER == __BIG_ENDIAN 
  138} __attribute((packed)) snd_ump_msg_midi1_caf_t;
 
  141typedef struct _snd_ump_msg_midi1_pitchbend {
 
  142#if __BYTE_ORDER == __BIG_ENDIAN 
  157} __attribute((packed)) snd_ump_msg_midi1_pitchbend_t;
 
  160typedef struct snd_ump_msg_system {
 
  161#if __BYTE_ORDER == __BIG_ENDIAN 
  174} __attribute((packed)) snd_ump_msg_system_t;
 
  177typedef union _snd_ump_msg_midi1 {
 
  178    snd_ump_msg_midi1_note_t    note_on;    
 
  179    snd_ump_msg_midi1_note_t    note_off;   
 
  180    snd_ump_msg_midi1_paf_t     poly_pressure;  
 
  181    snd_ump_msg_midi1_cc_t      control_change; 
 
  182    snd_ump_msg_midi1_program_t program_change; 
 
  183    snd_ump_msg_midi1_caf_t     channel_pressure; 
 
  184    snd_ump_msg_midi1_pitchbend_t   pitchbend;  
 
  185    snd_ump_msg_system_t        system;     
 
  186    snd_ump_msg_hdr_t       hdr;        
 
  188} snd_ump_msg_midi1_t;
 
  192    SND_UMP_MIDI2_NOTE_ATTR_NO_DATA     = 0x00, 
 
  193    SND_UMP_MIDI2_NOTE_ATTR_MANUFACTURER    = 0x01, 
 
  194    SND_UMP_MIDI2_NOTE_ATTR_PROFILE     = 0x02, 
 
  195    SND_UMP_MIDI2_NOTE_ATTR_PITCH79     = 0x03, 
 
  199typedef struct _snd_ump_msg_midi2_note {
 
  200#if __BYTE_ORDER == __BIG_ENDIAN 
  221} __attribute((packed)) snd_ump_msg_midi2_note_t;
 
  224typedef struct _snd_ump_msg_midi2_paf {
 
  225#if __BYTE_ORDER == __BIG_ENDIAN 
  244} __attribute((packed)) snd_ump_msg_midi2_paf_t;
 
  247typedef struct _snd_ump_msg_midi2_per_note_cc {
 
  248#if __BYTE_ORDER == __BIG_ENDIAN 
  267} __attribute((packed)) snd_ump_msg_midi2_per_note_cc_t;
 
  271    SND_UMP_MIDI2_PNMGMT_RESET_CONTROLLERS  = 0x01, 
 
  272    SND_UMP_MIDI2_PNMGMT_DETACH_CONTROLLERS = 0x02, 
 
  276typedef struct _snd_ump_msg_midi2_per_note_mgmt {
 
  277#if __BYTE_ORDER == __BIG_ENDIAN 
  296} __attribute((packed)) snd_ump_msg_midi2_per_note_mgmt_t;
 
  299typedef struct _snd_ump_msg_midi2_cc {
 
  300#if __BYTE_ORDER == __BIG_ENDIAN 
  319} __attribute((packed)) snd_ump_msg_midi2_cc_t;
 
  322typedef struct _snd_ump_msg_midi2_rpn {
 
  323#if __BYTE_ORDER == __BIG_ENDIAN 
  342} __attribute((packed)) snd_ump_msg_midi2_rpn_t;
 
  345typedef struct _snd_ump_msg_midi2_program {
 
  346#if __BYTE_ORDER == __BIG_ENDIAN 
  351    uint16_t reserved:15;   
 
  352    uint16_t bank_valid:1;  
 
  359    uint16_t bank_valid:1;  
 
  360    uint16_t reserved:15;   
 
  371} __attribute((packed)) snd_ump_msg_midi2_program_t;
 
  374typedef struct _snd_ump_msg_midi2_caf {
 
  375#if __BYTE_ORDER == __BIG_ENDIAN 
  392} __attribute((packed)) snd_ump_msg_midi2_caf_t;
 
  395typedef struct _snd_ump_msg_midi2_pitchbend {
 
  396#if __BYTE_ORDER == __BIG_ENDIAN 
  413} __attribute((packed)) snd_ump_msg_midi2_pitchbend_t;
 
  416typedef struct _snd_ump_msg_midi2_per_note_pitchbend {
 
  417#ifdef __BIG_ENDIAN_BITFIELD 
  436} __attribute((packed)) snd_ump_msg_midi2_per_note_pitchbend_t;
 
  439typedef union _snd_ump_msg_midi2 {
 
  440    snd_ump_msg_midi2_note_t    note_on;    
 
  441    snd_ump_msg_midi2_note_t    note_off;   
 
  442    snd_ump_msg_midi2_paf_t     poly_pressure;  
 
  443    snd_ump_msg_midi2_per_note_cc_t per_note_acc;   
 
  444    snd_ump_msg_midi2_per_note_cc_t per_note_rcc;   
 
  445    snd_ump_msg_midi2_per_note_mgmt_t per_note_mgmt; 
 
  446    snd_ump_msg_midi2_cc_t      control_change; 
 
  447    snd_ump_msg_midi2_rpn_t     rpn;        
 
  448    snd_ump_msg_midi2_rpn_t     nrpn;       
 
  449    snd_ump_msg_midi2_rpn_t     relative_rpn;   
 
  450    snd_ump_msg_midi2_rpn_t     relative_nrpn;  
 
  451    snd_ump_msg_midi2_program_t program_change; 
 
  452    snd_ump_msg_midi2_caf_t     channel_pressure; 
 
  453    snd_ump_msg_midi2_pitchbend_t   pitchbend;  
 
  454    snd_ump_msg_midi2_per_note_pitchbend_t per_note_pitchbend; 
 
  455    snd_ump_msg_hdr_t       hdr;        
 
  457} snd_ump_msg_midi2_t;
 
  460typedef struct _snd_ump_msg_stream_gen {
 
  461#if __BYTE_ORDER == __BIG_ENDIAN 
  478} __attribute((packed)) snd_ump_msg_stream_gen_t;
 
  481typedef union _snd_ump_msg_stream {
 
  482    snd_ump_msg_stream_gen_t    gen;    
 
  483    snd_ump_msg_hdr_t       hdr;        
 
  485} snd_ump_msg_stream_t;
 
  488typedef struct _snd_ump_msg_flex_data_meta {
 
  489#if __BYTE_ORDER == __BIG_ENDIAN 
  508} __attribute((packed)) snd_ump_msg_flex_data_meta_t;
 
  511typedef struct _snd_ump_msg_set_tempo {
 
  512#if __BYTE_ORDER == __BIG_ENDIAN 
  523    uint32_t reserved[2];   
 
  535    uint32_t reserved[2];   
 
  537} __attribute((packed)) snd_ump_msg_set_tempo_t;
 
  540typedef struct _snd_ump_msg_set_time_sig {
 
  541#if __BYTE_ORDER == __BIG_ENDIAN 
  555    uint32_t reserved[2];   
 
  570    uint32_t reserved[2];   
 
  572} __attribute((packed)) snd_ump_msg_set_time_sig_t;
 
  575typedef struct _snd_ump_msg_set_metronome {
 
  576#if __BYTE_ORDER == __BIG_ENDIAN 
  585    uint8_t clocks_primary; 
 
  586    uint8_t bar_accent_1;   
 
  587    uint8_t bar_accent_2;   
 
  588    uint8_t bar_accent_3;   
 
  590    uint8_t subdivision_1;  
 
  591    uint8_t subdivision_2;  
 
  604    uint8_t bar_accent_3;   
 
  605    uint8_t bar_accent_2;   
 
  606    uint8_t bar_accent_1;   
 
  607    uint8_t clocks_primary; 
 
  610    uint8_t subdivision_2;  
 
  611    uint8_t subdivision_1;  
 
  615} __attribute((packed)) snd_ump_msg_set_metronome_t;
 
  618typedef struct _snd_ump_msg_set_key_sig {
 
  619#if __BYTE_ORDER == __BIG_ENDIAN 
  628    uint8_t sharps_flats:4; 
 
  629    uint8_t tonic_note:4;   
 
  630    uint8_t reserved1[3];   
 
  632    uint32_t reserved2[2];  
 
  642    uint8_t reserved1[3];   
 
  643    uint8_t tonic_note:4;   
 
  644    uint8_t sharps_flats:4; 
 
  646    uint32_t reserved2[2];  
 
  648} __attribute((packed)) snd_ump_msg_set_key_sig_t;
 
  651typedef struct _snd_ump_msg_set_chord_name {
 
  652#if __BYTE_ORDER == __BIG_ENDIAN 
  661    uint8_t tonic_sharp:4;  
 
  662    uint8_t chord_tonic:4;  
 
  664    uint8_t alter1_type:4;  
 
  665    uint8_t alter1_degree:4; 
 
  666    uint8_t alter2_type:4;  
 
  667    uint8_t alter2_degree:4; 
 
  669    uint8_t alter3_type:4;  
 
  670    uint8_t alter3_degree:4; 
 
  671    uint8_t alter4_type:4;  
 
  672    uint8_t alter4_degree:4; 
 
  675    uint8_t bass_sharp:4;   
 
  678    uint8_t bass_alter1_type:4; 
 
  679    uint8_t bass_alter1_degree:4; 
 
  680    uint8_t bass_alter2_type:4; 
 
  681    uint8_t bass_alter2_degree:4; 
 
  691    uint8_t alter2_degree:4; 
 
  692    uint8_t alter2_type:4;  
 
  693    uint8_t alter1_degree:4; 
 
  694    uint8_t alter1_type:4;  
 
  696    uint8_t chord_tonic:4;  
 
  697    uint8_t tonic_sharp:4;  
 
  700    uint8_t alter4_degree:4; 
 
  701    uint8_t alter4_type:4;  
 
  702    uint8_t alter3_degree:4; 
 
  703    uint8_t alter3_type:4;  
 
  705    uint8_t bass_alter2_degree:4; 
 
  706    uint8_t bass_alter2_type:4; 
 
  707    uint8_t bass_alter1_degree:4; 
 
  708    uint8_t bass_alter1_type:4; 
 
  711    uint8_t bass_sharp:4;   
 
  713} __attribute((packed)) snd_ump_msg_set_chord_name_t;
 
  716typedef union _snd_ump_msg_flex_data {
 
  717    snd_ump_msg_flex_data_meta_t    meta;       
 
  718    snd_ump_msg_flex_data_meta_t    text;       
 
  719    snd_ump_msg_set_tempo_t     set_tempo;  
 
  720    snd_ump_msg_set_time_sig_t  set_time_sig;   
 
  721    snd_ump_msg_set_metronome_t set_metronome;  
 
  722    snd_ump_msg_set_key_sig_t   set_key_sig;    
 
  723    snd_ump_msg_set_chord_name_t    set_chord_name; 
 
  724    snd_ump_msg_hdr_t       hdr;        
 
  726} snd_ump_msg_flex_data_t;
 
  729typedef struct _snd_ump_msg_mixed_data_header {
 
  730#ifdef __BIG_ENDIAN_BITFIELD 
  740    uint16_t manufacturer;  
 
  756    uint16_t manufacturer;  
 
  761} snd_ump_msg_mixed_data_header_t;
 
  764typedef struct _snd_ump_msg_mixed_data_payload {
 
  765#ifdef __BIG_ENDIAN_BITFIELD 
  772    uint32_t payloads[3];   
 
  780    uint32_t payloads[3];   
 
  782} snd_ump_msg_mixed_data_payload_t;
 
  785typedef union _snd_ump_msg_mixed_data {
 
  786    snd_ump_msg_mixed_data_header_t header;     
 
  787    snd_ump_msg_mixed_data_payload_t payload;   
 
  789} snd_ump_msg_mixed_data_t;
 
  792typedef struct _snd_ump_msg_jr_clock {
 
  793#if __BYTE_ORDER == __BIG_ENDIAN 
  806} __attribute((packed)) snd_ump_msg_jr_clock_t;
 
  809typedef struct _snd_ump_msg_dctpq {
 
  810#if __BYTE_ORDER == __BIG_ENDIAN 
  823} __attribute((packed)) snd_ump_msg_dctpq_t;
 
  826typedef struct _snd_ump_msg_dc {
 
  827#if __BYTE_ORDER == __BIG_ENDIAN 
  838} __attribute((packed)) snd_ump_msg_dc_t;
 
  841typedef union _snd_ump_msg_utility {
 
  842    snd_ump_msg_jr_clock_t  jr_clock;   
 
  843    snd_ump_msg_dctpq_t dctpq;      
 
  845    snd_ump_msg_hdr_t   hdr;        
 
  847} snd_ump_msg_utility_t;
 
  853    SND_UMP_MSG_TYPE_UTILITY        = 0x00, 
 
  854    SND_UMP_MSG_TYPE_SYSTEM         = 0x01, 
 
  855    SND_UMP_MSG_TYPE_MIDI1_CHANNEL_VOICE    = 0x02, 
 
  856    SND_UMP_MSG_TYPE_DATA           = 0x03, 
 
  857    SND_UMP_MSG_TYPE_MIDI2_CHANNEL_VOICE    = 0x04, 
 
  858    SND_UMP_MSG_TYPE_EXTENDED_DATA      = 0x05, 
 
  859    SND_UMP_MSG_TYPE_FLEX_DATA      = 0x0d, 
 
  860    SND_UMP_MSG_TYPE_STREAM         = 0x0f, 
 
  867    SND_UMP_MSG_PER_NOTE_RCC    = 0x0,
 
  868    SND_UMP_MSG_PER_NOTE_ACC    = 0x1,
 
  869    SND_UMP_MSG_RPN         = 0x2,
 
  870    SND_UMP_MSG_NRPN        = 0x3,
 
  871    SND_UMP_MSG_RELATIVE_RPN    = 0x4,
 
  872    SND_UMP_MSG_RELATIVE_NRPN   = 0x5,
 
  873    SND_UMP_MSG_PER_NOTE_PITCHBEND  = 0x6,
 
  874    SND_UMP_MSG_NOTE_OFF        = 0x8,
 
  875    SND_UMP_MSG_NOTE_ON     = 0x9,
 
  876    SND_UMP_MSG_POLY_PRESSURE   = 0xa,
 
  877    SND_UMP_MSG_CONTROL_CHANGE  = 0xb,
 
  878    SND_UMP_MSG_PROGRAM_CHANGE  = 0xc,
 
  879    SND_UMP_MSG_CHANNEL_PRESSURE    = 0xd,
 
  880    SND_UMP_MSG_PITCHBEND       = 0xe,
 
  881    SND_UMP_MSG_PER_NOTE_MGMT   = 0xf,
 
  888    SND_UMP_MSG_REALTIME        = 0xf0, 
 
  889    SND_UMP_MSG_SYSEX_START     = 0xf0,
 
  890    SND_UMP_MSG_MIDI_TIME_CODE  = 0xf1,
 
  891    SND_UMP_MSG_SONG_POSITION   = 0xf2,
 
  892    SND_UMP_MSG_SONG_SELECT     = 0xf3,
 
  893    SND_UMP_MSG_TUNE_REQUEST    = 0xf6,
 
  894    SND_UMP_MSG_SYSEX_END       = 0xf7,
 
  895    SND_UMP_MSG_TIMING_CLOCK    = 0xf8,
 
  896    SND_UMP_MSG_START       = 0xfa,
 
  897    SND_UMP_MSG_CONTINUE        = 0xfb,
 
  898    SND_UMP_MSG_STOP        = 0xfc,
 
  899    SND_UMP_MSG_ACTIVE_SENSING  = 0xfe,
 
  900    SND_UMP_MSG_RESET       = 0xff,
 
  905    SND_UMP_SYSEX_STATUS_SINGLE = 0,
 
  906    SND_UMP_SYSEX_STATUS_START  = 1,
 
  907    SND_UMP_SYSEX_STATUS_CONTINUE   = 2,
 
  908    SND_UMP_SYSEX_STATUS_END    = 3,
 
  913    SND_UMP_MIXED_DATA_SET_STATUS_HEADER    = 8,
 
  914    SND_UMP_MIXED_DATA_SET_STATUS_PAYLOAD   = 9,
 
  919    SND_UMP_UTILITY_MSG_STATUS_NOOP     = 0x00,
 
  920    SND_UMP_UTILITY_MSG_STATUS_JR_CLOCK = 0x01,
 
  921    SND_UMP_UTILITY_MSG_STATUS_JR_TSTAMP    = 0x02,
 
  922    SND_UMP_UTILITY_MSG_STATUS_DCTPQ    = 0x03,
 
  923    SND_UMP_UTILITY_MSG_STATUS_DC       = 0x04,
 
  928    SND_UMP_STREAM_MSG_STATUS_EP_DISCOVERY  = 0x00,
 
  929    SND_UMP_STREAM_MSG_STATUS_EP_INFO   = 0x01,
 
  930    SND_UMP_STREAM_MSG_STATUS_DEVICE_INFO   = 0x02,
 
  931    SND_UMP_STREAM_MSG_STATUS_EP_NAME   = 0x03,
 
  932    SND_UMP_STREAM_MSG_STATUS_PRODUCT_ID    = 0x04,
 
  933    SND_UMP_STREAM_MSG_STATUS_STREAM_CFG_REQUEST = 0x05,
 
  934    SND_UMP_STREAM_MSG_STATUS_STREAM_CFG    = 0x06,
 
  935    SND_UMP_STREAM_MSG_STATUS_FB_DISCOVERY  = 0x10,
 
  936    SND_UMP_STREAM_MSG_STATUS_FB_INFO   = 0x11,
 
  937    SND_UMP_STREAM_MSG_STATUS_FB_NAME   = 0x12,
 
  938    SND_UMP_STREAM_MSG_STATUS_START_CLIP    = 0x20,
 
  939    SND_UMP_STREAM_MSG_STATUS_END_CLIP  = 0x21,
 
  944    SND_UMP_STREAM_MSG_REQUEST_EP_INFO  = (1U << 0),
 
  945    SND_UMP_STREAM_MSG_REQUEST_DEVICE_INFO  = (1U << 1),
 
  946    SND_UMP_STREAM_MSG_REQUEST_EP_NAME  = (1U << 2),
 
  947    SND_UMP_STREAM_MSG_REQUEST_PRODUCT_ID   = (1U << 3),
 
  948    SND_UMP_STREAM_MSG_REQUEST_STREAM_CFG   = (1U << 4),
 
  953    SND_UMP_STREAM_MSG_REQUEST_FB_INFO  = (1U << 0),
 
  954    SND_UMP_STREAM_MSG_REQUEST_FB_NAME  = (1U << 1),
 
  959    SND_UMP_STREAM_MSG_EP_INFO_CAP_TXJR = (1U << 0), 
 
  960    SND_UMP_STREAM_MSG_EP_INFO_CAP_RXJR = (1U << 1), 
 
  961    SND_UMP_STREAM_MSG_EP_INFO_CAP_MIDI1    = (1U << 8), 
 
  962    SND_UMP_STREAM_MSG_EP_INFO_CAP_MIDI2    = (1U << 9), 
 
  967    SND_UMP_STREAM_MSG_FORMAT_SINGLE    = 0,
 
  968    SND_UMP_STREAM_MSG_FORMAT_START     = 1,
 
  969    SND_UMP_STREAM_MSG_FORMAT_CONTINUE  = 2,
 
  970    SND_UMP_STREAM_MSG_FORMAT_END       = 3,
 
  975    SND_UMP_FLEX_DATA_MSG_FORMAT_SINGLE = 0,
 
  976    SND_UMP_FLEX_DATA_MSG_FORMAT_START  = 1,
 
  977    SND_UMP_FLEX_DATA_MSG_FORMAT_CONTINUE   = 2,
 
  978    SND_UMP_FLEX_DATA_MSG_FORMAT_END    = 3,
 
  983    SND_UMP_FLEX_DATA_MSG_ADDR_CHANNEL  = 0,
 
  984    SND_UMP_FLEX_DATA_MSG_ADDR_GROUP    = 1,
 
  989    SND_UMP_FLEX_DATA_MSG_BANK_SETUP    = 0,
 
  990    SND_UMP_FLEX_DATA_MSG_BANK_METADATA = 1,
 
  991    SND_UMP_FLEX_DATA_MSG_BANK_PERF_TEXT    = 2,
 
  996    SND_UMP_FLEX_DATA_MSG_STATUS_SET_TEMPO      = 0x00,
 
  997    SND_UMP_FLEX_DATA_MSG_STATUS_SET_TIME_SIGNATURE = 0x01,
 
  998    SND_UMP_FLEX_DATA_MSG_STATUS_SET_METRONOME  = 0x02,
 
  999    SND_UMP_FLEX_DATA_MSG_STATUS_SET_KEY_SIGNATURE  = 0x05,
 
 1000    SND_UMP_FLEX_DATA_MSG_STATUS_SET_CHORD_NAME = 0x06,
 
 1005    SND_UMP_FLEX_DATA_MSG_STATUS_PROJECT_NAME   = 0x01,
 
 1006    SND_UMP_FLEX_DATA_MSG_STATUS_SONG_NAME      = 0x02,
 
 1007    SND_UMP_FLEX_DATA_MSG_STATUS_MIDI_CLIP_NAME = 0x03,
 
 1008    SND_UMP_FLEX_DATA_MSG_STATUS_COPYRIGHT_NOTICE   = 0x04,
 
 1009    SND_UMP_FLEX_DATA_MSG_STATUS_COMPOSER_NAME  = 0x05,
 
 1010    SND_UMP_FLEX_DATA_MSG_STATUS_LYRICIST_NAME  = 0x06,
 
 1011    SND_UMP_FLEX_DATA_MSG_STATUS_ARRANGER_NAME  = 0x07,
 
 1012    SND_UMP_FLEX_DATA_MSG_STATUS_PUBLISHER_NAME = 0x08,
 
 1013    SND_UMP_FLEX_DATA_MSG_STATUS_PRIMARY_PERFORMER  = 0x09,
 
 1014    SND_UMP_FLEX_DATA_MSG_STATUS_ACCOMPANY_PERFORMAER = 0x0a,
 
 1015    SND_UMP_FLEX_DATA_MSG_STATUS_RECORDING_DATE = 0x0b,
 
 1016    SND_UMP_FLEX_DATA_MSG_STATUS_RECORDING_LOCATION = 0x0c,
 
 1021    SND_UMP_FLEX_DATA_MSG_STATUS_LYRICS     = 0x01,
 
 1022    SND_UMP_FLEX_DATA_MSG_STATUS_LYRICS_LANGUAGE    = 0x02,
 
 1023    SND_UMP_FLEX_DATA_MSG_STATUS_RUBY       = 0x03,
 
 1024    SND_UMP_FLEX_DATA_MSG_STATUS_RUBY_LANGUAGE  = 0x04,
 
 1030static inline uint8_t snd_ump_msg_hdr_status(uint32_t ump)
 
 1032    return (ump >> 20) & 0x0f;
 
 1038static inline uint8_t snd_ump_msg_hdr_channel(uint32_t ump)
 
 1040    return (ump >> 16) & 0x0f;
 
 1046static inline uint8_t snd_ump_msg_hdr_type(uint32_t ump)
 
 1054static inline int snd_ump_msg_type_is_groupless(uint8_t type)
 
 1056    return type == SND_UMP_MSG_TYPE_UTILITY || type == SND_UMP_MSG_TYPE_STREAM;
 
 1062static inline uint8_t snd_ump_msg_hdr_group(uint32_t ump)
 
 1064    return (ump >> 24) & 0x0f;
 
 1070static inline uint8_t snd_ump_msg_status(
const uint32_t *ump)
 
 1072    return snd_ump_msg_hdr_status(*ump);
 
 1078static inline uint8_t snd_ump_msg_channel(
const uint32_t *ump)
 
 1080    return snd_ump_msg_hdr_channel(*ump);
 
 1086static inline uint8_t snd_ump_msg_type(
const uint32_t *ump)
 
 1088    return snd_ump_msg_hdr_type(*ump);
 
 1094static inline uint8_t snd_ump_msg_group(
const uint32_t *ump)
 
 1096    return snd_ump_msg_hdr_group(*ump);
 
 1102static inline uint8_t snd_ump_sysex_msg_status(
const uint32_t *ump)
 
 1104    return (*ump >> 20) & 0xf;
 
 1110static inline uint8_t snd_ump_sysex_msg_length(
const uint32_t *ump)
 
 1112    return (*ump >> 16) & 0xf;
 
 1118static inline uint8_t snd_ump_get_byte(
const uint32_t *ump, 
unsigned int offset)
 
 1120#if __BYTE_ORDER == __BIG_ENDIAN 
 1121    return ((
const uint8_t *)ump)[offset];
 
 1123    return ((
const uint8_t *)ump)[(offset & ~3) | (3 - (offset & 3))];
 
int snd_ump_msg_sysex_expand(const uint32_t *ump, uint8_t *buf, size_t maxlen, size_t *filled)
fill sysex byte from a UMP packet
Definition ump.c:1081
 
int snd_ump_packet_length(unsigned int type)
return the length of a UMP packet type
Definition ump.c:1100