* midi usb driver
* usb_midi.h
*
* Copyright 2006-2013 Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT Licence.
*
* Authors:
* JΓ©rΓ΄me Duval
* Pete Goodeve, pete.goodeve@computer.org
*
* Some portions of this code were originally derived from
* USB Joystick driver for BeOS R5
* Copyright 2000 (C) ITO, Takayuki
* All rights reserved
*
*/
#ifndef _USB_MIDI_H
#define _USB_MIDI_H
#include <Drivers.h>
#include <USB.h>
#include <usb/USB_midi.h>
#include <util/ring_buffer.h>
#define DEBUG_INFO 1
#define DEBUG_ERR 1
#if DEBUG_ERR
#define DPRINTF_ERR(x) dprintf x
#else
#define DPRINTF_ERR(x)
#endif
#if DEBUG_INFO
#define DPRINTF_INFO(x) dprintf x
#else
#define DPRINTF_INFO(x)
#endif
#if DEBUG
#define DPRINTF_DEBUG(x) dprintf x
#else
#define DPRINTF_DEBUG(x)
#endif
#define ZDPRINTF_DEBUG(x)
#define DRIVER_NAME "usb_midi"
#define MY_ID "\033[34m" DRIVER_NAME ":\033[m "
#define MY_ERR "\033[31merror:\033[m "
#define MY_WARN "\033[31mwarning:\033[m "
#define assert(x) \
do { if (!(x)) { dprintf(MY_ID "assertion failed at " \
__FILE__ ", line %d\n", __LINE__); }} while (0)
#define DEFAULT_CONFIGURATION 0
struct driver_cookie;
typedef struct usbmidi_device_info
{
struct usbmidi_port_info* ports[16];
sem_id sem_lock;
sem_id sem_send;
area_id buffer_area;
usb_midi_event_packet* buffer;
usb_midi_event_packet* out_buffer;
size_t inMaxPkt, outMaxPkt;
const usb_device* dev;
uint16 ifno;
int devnum;
char name[20];
bool active;
int bus_status;
int actual_length;
const usb_endpoint_info* ept_in;
const usb_endpoint_info* ept_out;
bigtime_t timestamp;
uint flags;
} usbmidi_device_info;
typedef struct usbmidi_port_info
{
struct usbmidi_port_info* next;
usbmidi_device_info* device;
char name[40];
struct ring_buffer* rbuf;
int cable;
bool has_in, has_out;
int open;
struct driver_cookie* open_fd;
} usbmidi_port_info;
usb_midi.cpp
*/
extern usb_module_info* usb;
extern const char* usb_midi_base_name;
extern usbmidi_port_info* create_usbmidi_port(usbmidi_device_info* devinfo,
int cable, bool has_in, bool has_out);
extern void remove_port(usbmidi_port_info* port);
extern usbmidi_device_info* create_device(const usb_device* dev, uint16 ifno);
extern void remove_device(usbmidi_device_info* my_dev);
devlist.cpp
*/
extern sem_id usbmidi_port_list_lock;
extern bool usbmidi_port_list_changed;
extern void add_port_info(usbmidi_port_info* port);
extern void remove_port_info(usbmidi_port_info* port);
extern usbmidi_port_info* search_port_info(const char* name);
extern int find_free_device_number(void);
extern char** usbmidi_port_names;
extern void alloc_port_names(void);
extern void free_port_names(void);
extern void rebuild_port_names(void);
#endif