1
2#ifndef _MIDI_ROSTER_H
3#define _MIDI_ROSTER_H
4
5#include <Application.h>
6#include <MidiEndpoint.h>
7
8enum BMidiOp
9{
10	B_MIDI_NO_OP,
11	B_MIDI_REGISTERED,
12	B_MIDI_UNREGISTERED,
13	B_MIDI_CONNECTED,
14	B_MIDI_DISCONNECTED,
15	B_MIDI_CHANGED_NAME,
16	B_MIDI_CHANGED_LATENCY,
17	B_MIDI_CHANGED_PROPERTIES
18};
19
20#define B_MIDI_EVENT 'MIDI'
21
22class BMidiProducer;
23class BMidiConsumer;
24
25namespace BPrivate
26{
27	class BMidiRosterLooper;
28	struct BMidiRosterKiller;
29}
30
31class BMidiRoster
32{
33public:
34
35	static BMidiEndpoint *NextEndpoint(int32 *id);
36	static BMidiProducer *NextProducer(int32 *id);
37	static BMidiConsumer *NextConsumer(int32 *id);
38
39	static BMidiEndpoint *FindEndpoint(int32 id, bool localOnly = false);
40	static BMidiProducer *FindProducer(int32 id, bool localOnly = false);
41	static BMidiConsumer *FindConsumer(int32 id, bool localOnly = false);
42
43	static void StartWatching(const BMessenger *msngr);
44	static void StopWatching();
45
46	static status_t Register(BMidiEndpoint *endp);
47	static status_t Unregister(BMidiEndpoint *endp);
48
49	static BMidiRoster *MidiRoster();
50
51private:
52
53	friend class BMidiConsumer;
54	friend class BMidiEndpoint;
55	friend class BMidiLocalProducer;
56	friend class BMidiLocalConsumer;
57	friend class BMidiProducer;
58	friend class BPrivate::BMidiRosterLooper;
59	friend struct BPrivate::BMidiRosterKiller;
60
61	BMidiRoster();
62	virtual ~BMidiRoster();
63
64	virtual void _Reserved1();
65	virtual void _Reserved2();
66	virtual void _Reserved3();
67	virtual void _Reserved4();
68	virtual void _Reserved5();
69	virtual void _Reserved6();
70	virtual void _Reserved7();
71	virtual void _Reserved8();
72
73	void CreateLocal(BMidiEndpoint*);
74	void DeleteLocal(BMidiEndpoint*);
75
76	status_t SendRequest(BMessage*, BMessage*);
77
78	BPrivate::BMidiRosterLooper* fLooper;
79	BMessenger *fServer;
80
81	uint32 _reserved[16];
82};
83
84#endif // _MIDI_ROSTER_H
85