1
2#ifndef _MIDI_PORT_H
3#define _MIDI_PORT_H
4
5#include <Midi.h>
6
7class BMidiConsumer;
8class BMidiProducer;
9
10namespace BPrivate { class BMidiPortGlue; }
11
12class BMidiPort : public BMidi
13{
14public:
15
16	BMidiPort(const char* name = NULL);
17	~BMidiPort();
18
19	status_t InitCheck() const;
20	status_t Open(const char* name);
21	void Close();
22
23	const char* PortName() const;
24
25	virtual	void NoteOff(
26		uchar channel, uchar note, uchar velocity, uint32 time = B_NOW);
27
28	virtual void NoteOn(
29		uchar channel, uchar note, uchar velocity, uint32 time = B_NOW);
30
31	virtual void KeyPressure(
32		uchar channel, uchar note, uchar pressure, uint32 time = B_NOW);
33
34	virtual void ControlChange(
35		uchar channel, uchar controlNumber, uchar controlValue,
36		uint32 time = B_NOW);
37
38	virtual void ProgramChange(
39		uchar channel, uchar programNumber, uint32 time = B_NOW);
40
41	virtual void ChannelPressure(
42		uchar channel, uchar pressure, uint32 time = B_NOW);
43
44	virtual void PitchBend(
45		uchar channel, uchar lsb, uchar msb, uint32 time = B_NOW);
46
47	virtual void SystemExclusive(
48		void* data, size_t length, uint32 time = B_NOW);
49
50	virtual void SystemCommon(
51		uchar status, uchar data0, uchar data2, uint32 time = B_NOW);
52
53	virtual void SystemRealTime(uchar status, uint32 time = B_NOW);
54
55	virtual status_t Start();
56	virtual void Stop();
57
58	int32 CountDevices();
59
60	status_t GetDeviceName(
61		int32 n, char* name, size_t bufSize = B_OS_NAME_LENGTH);
62
63private:
64
65	typedef BMidi super;
66
67	friend class BPrivate::BMidiPortGlue;
68
69	virtual void _ReservedMidiPort1();
70	virtual void _ReservedMidiPort2();
71	virtual void _ReservedMidiPort3();
72
73	virtual void Run();
74
75	void ScanDevices();
76	void EmptyDeviceList();
77
78	BMidiLocalProducer* fLocalSource;
79	BMidiLocalConsumer* fLocalSink;
80	BMidiProducer* fRemoteSource;
81	BMidiConsumer* fRemoteSink;
82
83	char* fPortName;
84	status_t fStatus;
85	BList* fDevices;
86
87	uint32 _reserved[1];
88};
89
90#endif // _MIDI_PORT_H
91