1/*
2 * Copyright 2009, Haiku Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _MIDI_DRIVER_H
6#define _MIDI_DRIVER_H
7
8
9#include <Drivers.h>
10#include <module.h>
11
12
13/* deprecated interface */
14enum {
15	B_MIDI_GET_READ_TIMEOUT = B_MIDI_DRIVER_BASE,
16	B_MIDI_SET_READ_TIMEOUT,
17	B_MIDI_TIMED_READ,
18	B_MIDI_TIMED_WRITE,
19	B_MIDI_WRITE_SYNC,
20	B_MIDI_WRITE_CLEAR,
21	B_MIDI_GET_READ_TIMEOUT_OLD	= B_DEVICE_OP_CODES_END + 1,
22	B_MIDI_SET_READ_TIMEOUT_OLD
23};
24
25
26#define B_MIDI_DEFAULT_TIMEOUT 1000000000000000LL
27
28typedef struct {
29	bigtime_t	when;
30	size_t		size;
31	uint8*		data;
32} midi_timed_data;
33
34
35#define B_MIDI_PARSER_MODULE_NAME "media/midiparser/v1"
36
37typedef struct _midi_parser_module_info {
38	module_info	minfo;
39	int			(*parse)(uint32* state, uchar byte, size_t maxSize);
40	int			_reserved_;
41} midi_parser_module_info;
42
43
44#define B_MPU_401_MODULE_NAME "generic/mpu401/v1"
45
46enum {
47	B_MPU_401_ENABLE_CARD_INT = 1,
48	B_MPU_401_DISABLE_CARD_INT
49};
50
51typedef struct _generic_mpu401_module {
52	module_info	minfo;
53	status_t	(*create_device)(int port, void** _handle, uint32 workArounds,
54					void (*interruptOp)(int32 op, void* card), void* card);
55	status_t	(*delete_device)(void* handle);
56	status_t	(*open_hook)(void* storage, uint32 flags, void** _cookie);
57	status_t	(*close_hook)(void* cookie);
58	status_t	(*free_hook)(void* cookie);
59	status_t	(*control_hook)(void* cookie, uint32 op, void* data,
60					size_t length);
61	status_t	(*read_hook)(void* cookie, off_t pos, void* data,
62					size_t* _length);
63	status_t	(*write_hook)(void* cookie, off_t pos, const void* data,
64					size_t* _length);
65	bool		(*interrupt_hook)(void* cookie);
66	int			_reserved_;
67} generic_mpu401_module;
68
69
70#endif	/* _MIDI_DRIVER_H */
71