33 #ifndef __JACK_FREEBOB_DRIVER_H__
34 #define __JACK_FREEBOB_DRIVER_H__
39 #include <libfreebob/freebob.h>
40 #include <libfreebob/freebob_streaming.h>
48 #include <netinet/in.h>
52 #include <semaphore.h>
57 #ifdef FREEBOB_DRIVER_WITH_MIDI
58 #include <JackPosixThread.h>
59 #include <alsa/asoundlib.h>
63 #define DEBUG_LEVEL_BUFFERS (1<<0)
64 #define DEBUG_LEVEL_HANDLERS (1<<1)
65 #define DEBUG_LEVEL_XRUN_RECOVERY (1<<2)
66 #define DEBUG_LEVEL_WAIT (1<<3)
68 #define DEBUG_LEVEL_RUN_CYCLE (1<<8)
70 #define DEBUG_LEVEL_PACKETCOUNTER (1<<16)
71 #define DEBUG_LEVEL_STARTUP (1<<17)
72 #define DEBUG_LEVEL_THREADS (1<<18)
77 #define DEBUG_LEVEL ( DEBUG_LEVEL_RUN_CYCLE | \
78 (DEBUG_LEVEL_XRUN_RECOVERY)| DEBUG_LEVEL_STARTUP | DEBUG_LEVEL_WAIT | DEBUG_LEVEL_PACKETCOUNTER)
80 #warning Building debug build!
82 #define printMessage(format, args...) jack_error( "FreeBoB MSG: %s:%d (%s): " format, __FILE__, __LINE__, __FUNCTION__, ##args )
83 #define printError(format, args...) jack_error( "FreeBoB ERR: %s:%d (%s): " format, __FILE__, __LINE__, __FUNCTION__, ##args )
90 #define debugError(format, args...) jack_error( "FREEBOB ERR: %s:%d (%s): " format, __FILE__, __LINE__, __FUNCTION__, ##args )
91 #define debugPrint(Level, format, args...) if(DEBUG_LEVEL & (Level)) jack_error("DEBUG %s:%d (%s) :" format, __FILE__, __LINE__, __FUNCTION__, ##args );
92 #define debugPrintShort(Level, format, args...) if(DEBUG_LEVEL & (Level)) jack_error( format,##args );
93 #define debugPrintWithTimeStamp(Level, format, args...) if(DEBUG_LEVEL & (Level)) jack_error( "%16lu: "format, debugGetCurrentUTime(),##args );
94 #define SEGFAULT int *test=NULL; *test=1;
98 #define printMessage(format, args...) if(g_verbose) \
99 jack_error("FreeBoB MSG: " format, ##args )
100 #define printError(format, args...) jack_error("FreeBoB ERR: " format, ##args )
105 #define debugError(format, args...)
106 #define debugPrint(Level, format, args...)
107 #define debugPrintShort(Level, format, args...)
108 #define debugPrintWithTimeStamp(Level, format, args...)
112 #define FREEBOB_RT_PRIORITY_PACKETIZER_RELATIVE 5
114 #ifdef FREEBOB_DRIVER_WITH_MIDI
116 #define ALSA_SEQ_BUFF_SIZE 1024
117 #define MIDI_TRANSMIT_BUFFER_SIZE 1024
118 #define MIDI_THREAD_SLEEP_TIME_USECS 100
123 #define FREEBOB_RT_PRIORITY_MIDI_RELATIVE 4
137 jack_nframes_t period_size;
143 jack_nframes_t buffer_size;
154 jack_nframes_t capture_frame_latency;
155 jack_nframes_t playback_frame_latency;
157 freebob_handle_t fb_handle;
160 #ifdef FREEBOB_DRIVER_WITH_MIDI
166 snd_midi_event_t *parser;
167 snd_seq_t *seq_handle;
171 typedef struct _freebob_driver_midi_handle
173 freebob_device_t *dev;
176 snd_seq_t *seq_handle;
178 pthread_t queue_thread;
179 pthread_t dequeue_thread;
180 int queue_thread_realtime;
181 int queue_thread_priority;
186 freebob_midi_port_t **input_ports;
187 freebob_midi_port_t **output_ports;
189 freebob_midi_port_t **input_stream_port_map;
190 int *output_port_stream_map;
192 freebob_driver_midi_handle_t;
203 jack_nframes_t sample_rate;
204 jack_nframes_t period_size;
205 unsigned long wait_time;
207 jack_time_t wait_last;
208 jack_time_t wait_next;
211 jack_client_t *client;
222 freebob_device_t *dev;
227 unsigned long playback_nchannels;
228 unsigned long capture_nchannels;
229 unsigned long playback_nchannels_audio;
230 unsigned long capture_nchannels_audio;
232 jack_nframes_t playback_frame_latency;
233 jack_nframes_t capture_frame_latency;
235 freebob_device_info_t device_info;
236 freebob_options_t device_options;
238 #ifdef FREEBOB_DRIVER_WITH_MIDI
239 freebob_driver_midi_handle_t *midi_handle;