1/* 2 * Line6 Linux USB driver - 0.8.0 3 * 4 * Copyright (C) 2004-2009 Markus Grabner (grabner@icg.tugraz.at) 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License as 8 * published by the Free Software Foundation, version 2. 9 * 10 */ 11 12#ifndef DRIVER_H 13#define DRIVER_H 14 15 16#include "config.h" 17 18#include <linux/spinlock.h> 19#include <linux/usb.h> 20#include <linux/wait.h> 21#include <sound/core.h> 22 23#include "midi.h" 24 25#define DRIVER_NAME "line6usb" 26 27#define LINE6_TIMEOUT 1 28#define LINE6_MAX_DEVICES 8 29#define LINE6_BUFSIZE_LISTEN 32 30#define LINE6_MESSAGE_MAXLEN 256 31 32 33/* 34 Line6 MIDI control commands 35*/ 36#define LINE6_PARAM_CHANGE 0xb0 37#define LINE6_PROGRAM_CHANGE 0xc0 38#define LINE6_SYSEX_BEGIN 0xf0 39#define LINE6_SYSEX_END 0xf7 40#define LINE6_RESET 0xff 41 42/* 43 MIDI channel for messages initiated by the host 44 (and eventually echoed back by the device) 45*/ 46#define LINE6_CHANNEL_HOST 0x00 47 48/* 49 MIDI channel for messages initiated by the device 50*/ 51#define LINE6_CHANNEL_DEVICE 0x02 52 53#define LINE6_CHANNEL_UNKNOWN 5 /* don't know yet what this is good for */ 54 55#define LINE6_CHANNEL_MASK 0x0f 56 57 58#define MISSING_CASE \ 59 printk(KERN_ERR "line6usb driver bug: missing case in %s:%d\n", \ 60 __FILE__, __LINE__) 61 62 63#define CHECK_RETURN(x) \ 64do { \ 65 err = x; \ 66 if (err < 0) \ 67 return err; \ 68} while (0) 69 70 71extern const unsigned char line6_midi_id[3]; 72extern struct usb_line6 *line6_devices[LINE6_MAX_DEVICES]; 73extern struct workqueue_struct *line6_workqueue; 74 75static const int SYSEX_DATA_OFS = sizeof(line6_midi_id) + 3; 76static const int SYSEX_EXTRA_SIZE = sizeof(line6_midi_id) + 4; 77 78 79/** 80 Common properties of Line6 devices. 81*/ 82struct line6_properties { 83 const char *name; 84 int device_bit; 85 int capabilities; 86}; 87 88/** 89 Common data shared by all Line6 devices. 90 Corresponds to a pair of USB endpoints. 91*/ 92struct usb_line6 { 93 /** 94 USB device. 95 */ 96 struct usb_device *usbdev; 97 98 /** 99 Product id. 100 */ 101 int product; 102 103 /** 104 Properties. 105 */ 106 const struct line6_properties *properties; 107 108 /** 109 Interface number. 110 */ 111 int interface_number; 112 113 /** 114 Interval (ms). 115 */ 116 int interval; 117 118 /** 119 Maximum size of USB packet. 120 */ 121 int max_packet_size; 122 123 /** 124 Device representing the USB interface. 125 */ 126 struct device *ifcdev; 127 128 /** 129 Line6 sound card data structure. 130 Each device has at least MIDI or PCM. 131 */ 132 struct snd_card *card; 133 134 /** 135 Line6 PCM device data structure. 136 */ 137 struct snd_line6_pcm *line6pcm; 138 139 /** 140 Line6 MIDI device data structure. 141 */ 142 struct snd_line6_midi *line6midi; 143 144 /** 145 USB endpoint for listening to control commands. 146 */ 147 int ep_control_read; 148 149 /** 150 USB endpoint for writing control commands. 151 */ 152 int ep_control_write; 153 154 /** 155 URB for listening to PODxt Pro control endpoint. 156 */ 157 struct urb *urb_listen; 158 159 /** 160 Buffer for listening to PODxt Pro control endpoint. 161 */ 162 unsigned char *buffer_listen; 163 164 /** 165 Buffer for message to be processed. 166 */ 167 unsigned char *buffer_message; 168 169 /** 170 Length of message to be processed. 171 */ 172 int message_length; 173}; 174 175 176extern char *line6_alloc_sysex_buffer(struct usb_line6 *line6, int code1, 177 int code2, int size); 178extern ssize_t line6_nop_read(struct device *dev, 179 struct device_attribute *attr, char *buf); 180extern ssize_t line6_nop_write(struct device *dev, 181 struct device_attribute *attr, 182 const char *buf, size_t count); 183extern int line6_read_data(struct usb_line6 *line6, int address, void *data, 184 size_t datalen); 185extern int line6_read_serial_number(struct usb_line6 *line6, 186 int *serial_number); 187extern int line6_send_program(struct usb_line6 *line6, int value); 188extern int line6_send_raw_message(struct usb_line6 *line6, const char *buffer, 189 int size); 190extern int line6_send_raw_message_async(struct usb_line6 *line6, 191 const char *buffer, int size); 192extern int line6_send_sysex_message(struct usb_line6 *line6, 193 const char *buffer, int size); 194extern ssize_t line6_set_raw(struct device *dev, struct device_attribute *attr, 195 const char *buf, size_t count); 196extern int line6_transmit_parameter(struct usb_line6 *line6, int param, 197 int value); 198extern int line6_write_data(struct usb_line6 *line6, int address, void *data, 199 size_t datalen); 200extern void line6_write_hexdump(struct usb_line6 *line6, char dir, 201 const unsigned char *buffer, int size); 202 203 204#endif 205