Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.9.
  1/*
  2 * Line6 Linux USB driver - 0.9.1beta
  3 *
  4 * Copyright (C) 2004-2010 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 POD_H
 13#define POD_H
 14
 15#include <linux/interrupt.h>
 16#include <linux/spinlock.h>
 17#include <linux/usb.h>
 18#include <linux/wait.h>
 19
 20#include <sound/core.h>
 21
 22#include "driver.h"
 23#include "dumprequest.h"
 24
 25/*
 26	PODxt Live interfaces
 27*/
 28#define PODXTLIVE_INTERFACE_POD    0
 29#define PODXTLIVE_INTERFACE_VARIAX 1
 30
 31/*
 32	Locate name in binary program dump
 33*/
 34#define	POD_NAME_OFFSET 0
 35#define	POD_NAME_LENGTH 16
 36
 37/*
 38	Other constants
 39*/
 40#define POD_CONTROL_SIZE 0x80
 41#define POD_BUFSIZE_DUMPREQ 7
 42#define POD_STARTUP_DELAY 1000
 43
 44/*
 45	Stages of POD startup procedure
 46*/
 47enum {
 48	POD_STARTUP_INIT = 1,
 49	POD_STARTUP_DUMPREQ,
 50	POD_STARTUP_VERSIONREQ,
 51	POD_STARTUP_WORKQUEUE,
 52	POD_STARTUP_SETUP,
 53	POD_STARTUP_LAST = POD_STARTUP_SETUP - 1
 54};
 55
 56/**
 57	Data structure for values that need to be requested explicitly.
 58	This is the case for system and tuner settings.
 59*/
 60struct ValueWait {
 61	int value;
 62	wait_queue_head_t wait;
 63};
 64
 65/**
 66	Binary PODxt Pro program dump
 67*/
 68struct pod_program {
 69	/**
 70		Header information (including program name).
 71	*/
 72	unsigned char header[0x20];
 73
 74	/**
 75		Program parameters.
 76	*/
 77	unsigned char control[POD_CONTROL_SIZE];
 78};
 79
 80struct usb_line6_pod {
 81	/**
 82		Generic Line6 USB data.
 83	*/
 84	struct usb_line6 line6;
 85
 86	/**
 87		Dump request structure.
 88	*/
 89	struct line6_dump_request dumpreq;
 90
 91	/**
 92		Current program number.
 93	*/
 94	unsigned char channel_num;
 95
 96	/**
 97		Current program settings.
 98	*/
 99	struct pod_program prog_data;
100
101	/**
102		Buffer for data retrieved from or to be stored on PODxt Pro.
103	*/
104	struct pod_program prog_data_buf;
105
106	/**
107		Tuner mute mode.
108	*/
109	struct ValueWait tuner_mute;
110
111	/**
112		Tuner base frequency (typically 440Hz).
113	*/
114	struct ValueWait tuner_freq;
115
116	/**
117		Note received from tuner.
118	*/
119	struct ValueWait tuner_note;
120
121	/**
122		Pitch value received from tuner.
123	*/
124	struct ValueWait tuner_pitch;
125
126	/**
127		Instrument monitor level.
128	*/
129	struct ValueWait monitor_level;
130
131	/**
132		Audio routing mode.
133		0: send processed guitar
134		1: send clean guitar
135		2: send clean guitar re-amp playback
136		3: send re-amp playback
137	*/
138	struct ValueWait routing;
139
140	/**
141		Wait for audio clipping event.
142	*/
143	struct ValueWait clipping;
144
145	/**
146		Timer for device initializaton.
147	*/
148	struct timer_list startup_timer;
149
150	/**
151		Work handler for device initializaton.
152	*/
153	struct work_struct startup_work;
154
155	/**
156		Current progress in startup procedure.
157	*/
158	int startup_progress;
159
160	/**
161		Dirty flags for access to parameter data.
162	*/
163	unsigned long param_dirty[POD_CONTROL_SIZE / sizeof(unsigned long)];
164
165	/**
166		Some atomic flags.
167	*/
168	unsigned long atomic_flags;
169
170	/**
171		Serial number of device.
172	*/
173	int serial_number;
174
175	/**
176		Firmware version (x 100).
177	*/
178	int firmware_version;
179
180	/**
181		Device ID.
182	*/
183	int device_id;
184
185	/**
186		Flag to indicate modification of current program settings.
187	*/
188	char dirty;
189
190	/**
191		Flag to enable MIDI postprocessing.
192	*/
193	char midi_postprocess;
194};
195
196extern void line6_pod_disconnect(struct usb_interface *interface);
197extern int line6_pod_init(struct usb_interface *interface,
198			  struct usb_line6_pod *pod);
199extern void line6_pod_midi_postprocess(struct usb_line6_pod *pod,
200				       unsigned char *data, int length);
201extern void line6_pod_process_message(struct usb_line6_pod *pod);
202extern void line6_pod_transmit_parameter(struct usb_line6_pod *pod, int param,
203					 int value);
204
205#endif