26 extern int pm_initialized;
29 void *pm_alloc(
size_t s);
30 void pm_free(
void *ptr);
35 extern int pm_hosterror;
38 struct pm_internal_struct;
41 typedef PmError (*pm_write_short_fn)(
struct pm_internal_struct *midi,
43 typedef PmError (*pm_begin_sysex_fn)(
struct pm_internal_struct *midi,
45 typedef PmError (*pm_end_sysex_fn)(
struct pm_internal_struct *midi,
47 typedef PmError (*pm_write_byte_fn)(
struct pm_internal_struct *midi,
49 typedef PmError (*pm_write_realtime_fn)(
struct pm_internal_struct *midi,
51 typedef PmError (*pm_write_flush_fn)(
struct pm_internal_struct *midi,
53 typedef PmTimestamp (*pm_synchronize_fn)(
struct pm_internal_struct *midi);
56 typedef PmError (*pm_open_fn)(
struct pm_internal_struct *midi,
58 typedef PmError (*pm_create_fn)(
int is_input,
const char *name,
61 typedef PmError (*pm_abort_fn)(
struct pm_internal_struct *midi);
64 typedef PmError (*pm_close_fn)(
struct pm_internal_struct *midi);
65 typedef PmError (*pm_poll_fn)(
struct pm_internal_struct *midi);
66 typedef unsigned int (*pm_check_host_error_fn)(
struct pm_internal_struct *midi);
69 pm_write_short_fn write_short;
70 pm_begin_sysex_fn begin_sysex;
71 pm_end_sysex_fn end_sysex;
72 pm_write_byte_fn write_byte;
73 pm_write_realtime_fn write_realtime;
74 pm_write_flush_fn write_flush;
75 pm_synchronize_fn synchronize;
80 pm_check_host_error_fn check_host_error;
82 } pm_fns_node, *pm_fns_type;
86 extern pm_fns_node pm_none_dictionary;
94 struct pm_internal_struct *pm_internal;
96 pm_fns_type dictionary;
97 } descriptor_node, *descriptor_type;
99 extern int pm_descriptor_max;
100 extern descriptor_type pm_descriptors;
101 extern int pm_descriptor_len;
103 typedef uint32_t (*time_get_proc_type)(
void *time_info);
105 typedef struct pm_internal_struct {
109 PmTimeProcPtr time_proc;
119 int sysex_in_progress;
128 int sysex_message_count;
131 int32_t channel_mask;
136 pm_fns_type dictionary;
144 unsigned char *fill_base;
145 uint32_t *fill_offset_ptr;
146 uint32_t fill_length;
156 PmError none_write_byte(PmInternal *midi,
unsigned char byte,
160 PmError pm_fail_fn(PmInternal *midi);
162 PmError pm_success_fn(PmInternal *midi);
163 PmError pm_add_interf(
char *interf, pm_create_fn create_fn,
164 pm_delete_fn delete_fn);
165 PmError pm_add_device(
char *interf,
const char *name,
int is_input,
166 int is_virtual,
void *descriptor, pm_fns_type dictionary);
167 void pm_undo_add_device(
int id);
168 uint32_t pm_read_bytes(PmInternal *midi,
const unsigned char *data,
int len,
170 void pm_read_short(PmInternal *midi,
PmEvent *event);
172 #define none_write_flush pm_fail_timestamp_fn
173 #define none_sysex pm_fail_timestamp_fn
174 #define none_poll pm_fail_fn
175 #define success_poll pm_success_fn
177 #define MIDI_REALTIME_MASK 0xf8
178 #define is_real_time(msg) \
179 ((Pm_MessageStatus(msg) & MIDI_REALTIME_MASK) == MIDI_REALTIME_MASK)
181 int pm_find_default_device(
char *pattern,
int is_input);
#define PM_HOST_ERROR_MSG_LEN
Any host error msg has at most this many characters, including EOS.
Definition: portmidi.h:199
PmError
PortMidi error code; a common return type.
Definition: portmidi.h:100
void PmQueue
The queue representation is opaque.
Definition: pmutil.h:21
Definition: portmidi.h:218
All MIDI data comes in the form of PmEvent structures.
Definition: portmidi.h:828
int32_t PmTimestamp
Represents a millisecond clock with arbitrary start time.
Definition: portmidi.h:333
int PmDeviceID
Devices are represented as small integers.
Definition: portmidi.h:206
uint32_t PmMessage
see PmEvent
Definition: portmidi.h:757