haiku/headers/os/midi2/MidiRoster.h
beveloper 072a505a0d some midi2 headers
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1612 a95241bf-73f2-0310-859d-f6bbb57e9c96
2002-10-23 12:50:56 +00:00

133 lines
4.0 KiB
C++

#ifndef _MIDI_ROSTER_H
#define _MIDI_ROSTER_H
#include <Application.h>
#include <MidiEndpoint.h>
enum BMidiOp
{
B_MIDI_NO_OP,
B_MIDI_REGISTERED,
B_MIDI_UNREGISTERED,
B_MIDI_CONNECTED,
B_MIDI_DISCONNECTED,
B_MIDI_CHANGED_NAME,
B_MIDI_CHANGED_LATENCY,
B_MIDI_CHANGED_PROPERTIES
};
#define B_MIDI_EVENT 'MIDI'
class BMidiProducer;
class BMidiConsumer;
class BMidiRosterLooper;
class BMidiRoster
{
public:
static BMidiEndpoint *NextEndpoint(int32 *id);
static BMidiProducer *NextProducer(int32 *id);
static BMidiConsumer *NextConsumer(int32 *id);
static BMidiEndpoint *FindEndpoint(int32 id, bool local_only = false);
static BMidiProducer *FindProducer(int32 id, bool local_only = false);
static BMidiConsumer *FindConsumer(int32 id, bool local_only = false);
// if local_only is true only local objects will be resolved
static void StartWatching(const BMessenger *msngr);
static void StopWatching();
// what = B_MIDI_EVENT (for all below)
//
// be:op = B_MIDI_REGISTERED or B_MIDI_UNREGISTERED
// be:id = <id>
// be:type = "producer" | "consumer"
//
// be:op = B_MIDI_CHANGED_NAME
// be:id = <id>
// be:type = "producer" | "consumer"
// be:name = <name>
//
// be:op = B_MIDI_CHANGED_LATENCY
// be:id = <id>
// be:type = "producer" | "consumer"
// be:latency = <latency>
//
// be:op = B_MIDI_CHANGED_PROPERTIES
// be:id = <id>
// be:type = "producer" | "consumer"
// be:properties = <properties>
//
// be:op = B_MIDI_CONNECTED (when source->Connect(sink) happens)
// be:producer = <id> - connector id (0 if not a public object)
// be:consumer = <id> - connectee id (0 if not a public object)
//
// be:op = B_MIDI_DISCONNECTED (when source->Connect(sink) happens)
// be:producer = <id> - connector id (0 if not a public object)
// be:consumer = <id> - connectee id (0 if not a public object)
//
// When you StartWatching(), you will receive added
// events for all existing midi objects
static status_t Register(BMidiEndpoint *object);
static status_t Unregister(BMidiEndpoint *object);
// Publish a midi object so that it is externall visible.
static BMidiRoster *MidiRoster();
private:
friend class BMidiEndpoint;
friend class BMidiProducer;
friend class BMidiConsumer;
friend class BMidiLocalProducer;
friend class BMidiLocalConsumer;
friend class BMidiRosterLooper;
friend class MidiRosterApp;
BMidiRoster(BMessenger *remote = NULL);
virtual ~BMidiRoster();
virtual void _Reserved1();
virtual void _Reserved2();
virtual void _Reserved3();
virtual void _Reserved4();
virtual void _Reserved5();
virtual void _Reserved6();
virtual void _Reserved7();
virtual void _Reserved8();
status_t RemoteConnect(int32 producer, int32 consumer, int32 port);
status_t RemoteDisconnect(int32 producer, int32 consumer);
void RemoteConnected(int32 producer, int32 consumer);
void RemoteDisconnected(int32 producer, int32 consumer);
BMidiEndpoint* RemoteCreateProducer(int32 producer, const char *name);
BMidiEndpoint* RemoteCreateConsumer(int32 consumer, const char *name, int32 port, int32 latency);
void RemoteDelete(BMidiEndpoint *object);
void RemoteRename(BMidiEndpoint *object, const char *name);
void RemoteChangeLatency(BMidiEndpoint *object, bigtime_t latency);
status_t Remote(int32 id, int32 op);
status_t DoRemote(BMessage *msg, BMessage *result = 0);
void Rename(BMidiEndpoint *midi, const char *name);
status_t Release(BMidiEndpoint *midi);
status_t Acquire(BMidiEndpoint *midi);
void Create(BMidiEndpoint *midi);
void SetLatency(BMidiConsumer *midi, bigtime_t latency);
status_t SetProperties(BMidiEndpoint *midi, const BMessage *props);
status_t GetProperties(const BMidiEndpoint *midi, BMessage *props);
status_t Connect(BMidiProducer *source, BMidiConsumer *sink);
status_t Disconnect(BMidiProducer *source, BMidiConsumer *sink);
BLooper *Looper();
BMidiRosterLooper *looper;
BMessenger *remote;
uint32 _reserved[16];
};
#endif