00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __JACK_FFADO_DRIVER_H__
00035 #define __JACK_FFADO_DRIVER_H__
00036
00037 #include <libffado/ffado.h>
00038
00039 #include <string.h>
00040 #include <stdlib.h>
00041 #include <errno.h>
00042 #include <stdio.h>
00043 #include <poll.h>
00044 #include <sys/time.h>
00045 #include <netinet/in.h>
00046 #include <endian.h>
00047
00048 #include <pthread.h>
00049 #include <semaphore.h>
00050
00051 #include <driver.h>
00052 #include <types.h>
00053
00054 #include <assert.h>
00055
00056
00057
00058 #define DEBUG_LEVEL_BUFFERS (1<<0)
00059 #define DEBUG_LEVEL_HANDLERS (1<<1)
00060 #define DEBUG_LEVEL_XRUN_RECOVERY (1<<2)
00061 #define DEBUG_LEVEL_WAIT (1<<3)
00062
00063 #define DEBUG_LEVEL_RUN_CYCLE (1<<8)
00064
00065 #define DEBUG_LEVEL_PACKETCOUNTER (1<<16)
00066 #define DEBUG_LEVEL_STARTUP (1<<17)
00067 #define DEBUG_LEVEL_THREADS (1<<18)
00068
00069
00070 #ifdef DEBUG_ENABLED
00071
00072
00073 #define DEBUG_LEVEL ( DEBUG_LEVEL_RUN_CYCLE | \
00074 (DEBUG_LEVEL_XRUN_RECOVERY)| DEBUG_LEVEL_STARTUP | DEBUG_LEVEL_WAIT | DEBUG_LEVEL_PACKETCOUNTER)
00075
00076 #warning Building debug build!
00077
00078 #define printMessage(format, args...) jack_error( "firewire MSG: %s:%d (%s): " format, __FILE__, __LINE__, __FUNCTION__, ##args )
00079 #define printError(format, args...) jack_error( "firewire ERR: %s:%d (%s): " format, __FILE__, __LINE__, __FUNCTION__, ##args )
00080
00081 #define printEnter() jack_error( "FWDRV ENTERS: %s (%s)\n", __FUNCTION__, __FILE__)
00082 #define printExit() jack_error( "FWDRV EXITS: %s (%s)\n", __FUNCTION__, __FILE__)
00083 #define printEnter()
00084 #define printExit()
00085
00086 #define debugError(format, args...) jack_error( "firewire ERR: %s:%d (%s): " format, __FILE__, __LINE__, __FUNCTION__, ##args )
00087 #define debugPrint(Level, format, args...) if(DEBUG_LEVEL & (Level)) jack_error("DEBUG %s:%d (%s) :" format, __FILE__, __LINE__, __FUNCTION__, ##args );
00088 #define debugPrintShort(Level, format, args...) if(DEBUG_LEVEL & (Level)) jack_error( format,##args );
00089 #define debugPrintWithTimeStamp(Level, format, args...) if(DEBUG_LEVEL & (Level)) jack_error( "%16lu: "format, debugGetCurrentUTime(),##args );
00090 #define SEGFAULT int *test=NULL; *test=1;
00091 #else
00092 #define DEBUG_LEVEL
00093
00094 #define printMessage(format, args...) if(g_verbose) \
00095 jack_error("firewire MSG: " format, ##args )
00096 #define printError(format, args...) jack_error("firewire ERR: " format, ##args )
00097
00098 #define printEnter()
00099 #define printExit()
00100
00101 #define debugError(format, args...)
00102 #define debugPrint(Level, format, args...)
00103 #define debugPrintShort(Level, format, args...)
00104 #define debugPrintWithTimeStamp(Level, format, args...)
00105 #endif
00106
00107
00108 #define FFADO_RT_PRIORITY_PACKETIZER_RELATIVE 5
00109
00110 typedef struct _ffado_driver ffado_driver_t;
00111
00112
00113
00114
00115
00116 typedef struct _ffado_jack_settings ffado_jack_settings_t;
00117 struct _ffado_jack_settings
00118 {
00119 int verbose_level;
00120
00121 int period_size_set;
00122 jack_nframes_t period_size;
00123
00124 int sample_rate_set;
00125 int sample_rate;
00126
00127 int buffer_size_set;
00128 jack_nframes_t buffer_size;
00129
00130 int playback_ports;
00131 int capture_ports;
00132
00133 jack_nframes_t capture_frame_latency;
00134 jack_nframes_t playback_frame_latency;
00135
00136 int slave_mode;
00137 int snoop_mode;
00138
00139 char *device_info;
00140 };
00141
00142 typedef struct _ffado_capture_channel
00143 {
00144 ffado_streaming_stream_type stream_type;
00145 uint32_t *midi_buffer;
00146 void *midi_input;
00147 }
00148 ffado_capture_channel_t;
00149
00150 typedef struct _ffado_playback_channel
00151 {
00152 ffado_streaming_stream_type stream_type;
00153 uint32_t *midi_buffer;
00154 void *midi_output;
00155 }
00156 ffado_playback_channel_t;
00157
00158
00159
00160
00161 struct _ffado_driver
00162 {
00163 JACK_DRIVER_NT_DECL;
00164
00165 jack_nframes_t sample_rate;
00166 jack_nframes_t period_size;
00167 unsigned long wait_time;
00168
00169 jack_time_t wait_last;
00170 jack_time_t wait_next;
00171 int wait_late;
00172
00173 jack_client_t *client;
00174
00175 int xrun_detected;
00176 int xrun_count;
00177
00178 int process_count;
00179
00180
00181 ffado_jack_settings_t settings;
00182
00183
00184 ffado_device_t *dev;
00185
00186 channel_t playback_nchannels;
00187 channel_t capture_nchannels;
00188
00189 ffado_playback_channel_t *playback_channels;
00190 ffado_capture_channel_t *capture_channels;
00191 ffado_sample_t *nullbuffer;
00192 ffado_sample_t *scratchbuffer;
00193
00194 jack_nframes_t playback_frame_latency;
00195 jack_nframes_t capture_frame_latency;
00196
00197 ffado_device_info_t device_info;
00198 ffado_options_t device_options;
00199
00200 };
00201
00202 #endif
00203
00204