diff --git a/src/kits/midi2/MidiConsumer.cpp b/src/kits/midi2/MidiConsumer.cpp index c2e097d675..fd84797d56 100644 --- a/src/kits/midi2/MidiConsumer.cpp +++ b/src/kits/midi2/MidiConsumer.cpp @@ -2,6 +2,7 @@ * @file MidiConsumer.cpp * * @author Matthijs Hollemans + * @author Jerome Leveque */ #include "debug.h" @@ -12,8 +13,7 @@ bigtime_t BMidiConsumer::Latency() const { - UNIMPLEMENTED - return 0LL; + return fLatency; } //------------------------------------------------------------------------------ @@ -21,14 +21,15 @@ bigtime_t BMidiConsumer::Latency() const BMidiConsumer::BMidiConsumer(const char* name) : BMidiEndpoint(name) { - UNIMPLEMENTED + fLatency = 0; } //------------------------------------------------------------------------------ BMidiConsumer::~BMidiConsumer() { - UNIMPLEMENTED + if (fEventPort != B_NO_MORE_PORTS) + delete_port(fEventPort); } //------------------------------------------------------------------------------ diff --git a/src/kits/midi2/MidiEndpoint.cpp b/src/kits/midi2/MidiEndpoint.cpp index c3c3dd1a92..a8ed5baeea 100644 --- a/src/kits/midi2/MidiEndpoint.cpp +++ b/src/kits/midi2/MidiEndpoint.cpp @@ -2,6 +2,7 @@ * @file MidiEndpoint.cpp * * @author Matthijs Hollemans + * @author Jerome Leveque */ #include "debug.h" @@ -11,39 +12,37 @@ const char* BMidiEndpoint::Name() const { - UNIMPLEMENTED - return NULL; + return fName.String(); } //------------------------------------------------------------------------------ void BMidiEndpoint::SetName(const char* name) { - UNIMPLEMENTED + BMidiRoster *roster = BMidiRoster::MidiRoster(); + roster->Rename(this, name); + fName.SetTo(name); } //------------------------------------------------------------------------------ int32 BMidiEndpoint::ID() const { - UNIMPLEMENTED - return 0; + return fID; } //------------------------------------------------------------------------------ bool BMidiEndpoint::IsProducer() const { - UNIMPLEMENTED - return false; +return (fFlags && 0x01) == 0x01; } //------------------------------------------------------------------------------ bool BMidiEndpoint::IsConsumer() const { - UNIMPLEMENTED - return false; +return (fFlags && 0x01) == 0x01; } //------------------------------------------------------------------------------ @@ -82,16 +81,24 @@ bool BMidiEndpoint::IsValid() const status_t BMidiEndpoint::Release() { - UNIMPLEMENTED - return B_ERROR; + if (1 == atomic_add(&fRefCount, -1)) + { + Unregister(); + delete this; + return B_OK; + } + else + { + return B_ERROR; + } } //------------------------------------------------------------------------------ status_t BMidiEndpoint::Acquire() { - UNIMPLEMENTED - return B_ERROR; + atomic_add(&fRefCount, 1); + return B_OK; } //------------------------------------------------------------------------------ @@ -130,7 +137,11 @@ status_t BMidiEndpoint::Unregister(void) BMidiEndpoint::BMidiEndpoint(const char* name) { - UNIMPLEMENTED + fName = BString(name); + fStatus = B_OK; + fFlags = 0; + fRefCount = 0; +// fID = MidiRosterApp::GetNextFreeID(); } //------------------------------------------------------------------------------ diff --git a/src/kits/midi2/MidiLocalConsumer.cpp b/src/kits/midi2/MidiLocalConsumer.cpp index a9aa495531..dca14b9221 100644 --- a/src/kits/midi2/MidiLocalConsumer.cpp +++ b/src/kits/midi2/MidiLocalConsumer.cpp @@ -2,6 +2,7 @@ * @file MidiLocalConsumer.cpp * * @author Matthijs Hollemans + * @author Jerome Leveque */ #include "debug.h" @@ -10,8 +11,9 @@ //------------------------------------------------------------------------------ BMidiLocalConsumer::BMidiLocalConsumer(const char* name) + : BMidiConsumer(name) { - UNIMPLEMENTED + fFlags |= 0x10; } //------------------------------------------------------------------------------ @@ -25,22 +27,22 @@ BMidiLocalConsumer::~BMidiLocalConsumer() void BMidiLocalConsumer::SetLatency(bigtime_t latency) { - UNIMPLEMENTED + fLatency = latency; } //------------------------------------------------------------------------------ int32 BMidiLocalConsumer::GetProducerID(void) { - UNIMPLEMENTED - return 0; +return fCurrentProducer; } //------------------------------------------------------------------------------ void BMidiLocalConsumer::SetTimeout(bigtime_t when, void* data) { - UNIMPLEMENTED + fTimeout = when; + fTimeoutData = data; } //------------------------------------------------------------------------------ diff --git a/src/kits/midi2/MidiLocalProducer.cpp b/src/kits/midi2/MidiLocalProducer.cpp index bf8ef55a82..1f03cc868d 100644 --- a/src/kits/midi2/MidiLocalProducer.cpp +++ b/src/kits/midi2/MidiLocalProducer.cpp @@ -2,6 +2,7 @@ * @file MidiLocalProducer.cpp * * @author Matthijs Hollemans + * @author Jerome Leveque */ #include "debug.h" @@ -10,8 +11,9 @@ //------------------------------------------------------------------------------ BMidiLocalProducer::BMidiLocalProducer(const char* name) + : BMidiProducer(name) { - UNIMPLEMENTED + fFlags |= 0x10; } //------------------------------------------------------------------------------ diff --git a/src/kits/midi2/MidiProducer.cpp b/src/kits/midi2/MidiProducer.cpp index ee12d800c1..31a93a9ee3 100644 --- a/src/kits/midi2/MidiProducer.cpp +++ b/src/kits/midi2/MidiProducer.cpp @@ -2,6 +2,7 @@ * @file MidiProducer.cpp * * @author Matthijs Hollemans + * @author Jerome Leveque */ #include "debug.h" @@ -12,32 +13,39 @@ status_t BMidiProducer::Connect(BMidiConsumer* toObject) { - UNIMPLEMENTED - return B_ERROR; + if (toObject != NULL) + if (fConnections->Add(toObject) == true) + fConnectionCount++; + BMidiRoster *roster = BMidiRoster::MidiRoster(); + return roster->Connect(this, toObject); } //------------------------------------------------------------------------------ status_t BMidiProducer::Disconnect(BMidiConsumer* toObject) { - UNIMPLEMENTED - return B_ERROR; + if (toObject != NULL) + if (fConnections->Remove(toObject) == true) + { + fConnectionCount--; + BMidiRoster *roster = BMidiRoster::MidiRoster(); + return roster->Disconnect(this, toObject); + } +return B_ERROR; } //------------------------------------------------------------------------------ bool BMidiProducer::IsConnected(BMidiConsumer* toObject) const { - UNIMPLEMENTED - return false; +return fConnections->IsIn(toObject); } //------------------------------------------------------------------------------ BList* BMidiProducer::Connections() const { - UNIMPLEMENTED - return NULL; +return fConnections; } //------------------------------------------------------------------------------ @@ -45,7 +53,9 @@ BList* BMidiProducer::Connections() const BMidiProducer::BMidiProducer(const char* name) : BMidiEndpoint(name) { - UNIMPLEMENTED + fConnections = new BMidiList(); + fConnectionCount = 1; + fLock = BLocker("BMidiProducer Lock"); } //------------------------------------------------------------------------------ diff --git a/src/kits/midi2/MidiRoster.cpp b/src/kits/midi2/MidiRoster.cpp index 3d08be199c..45e065caf7 100644 --- a/src/kits/midi2/MidiRoster.cpp +++ b/src/kits/midi2/MidiRoster.cpp @@ -2,6 +2,7 @@ * @file MidiRoster.cpp * * @author Matthijs Hollemans + * @author Jerome Leveque */ #include "debug.h" diff --git a/src/servers/midi/MidiServerApp.cpp b/src/servers/midi/MidiServerApp.cpp index 33c4bfdc4a..a039ecdc7b 100644 --- a/src/servers/midi/MidiServerApp.cpp +++ b/src/servers/midi/MidiServerApp.cpp @@ -2,6 +2,7 @@ * @file MidiServerApp.cpp * * @author Matthijs Hollemans + * @author Jerome Leveque */ #include @@ -9,11 +10,18 @@ #include "MidiServerApp.h" //------------------------------------------------------------------------------ - +//Constructor MidiServerApp::MidiServerApp() - : BApplication("application/x-vnd.be-midi-roster") + : BApplication("application/x-vnd.obos-midi-roster") { - // Do nothing. + roster = new BMidiRoster(); +} + +//------------------------------------------------------------------------------ +//Destructor +MidiRosterApp:: ~MidiRosterApp(void) +{//ToTest + delete EndPointList; } //------------------------------------------------------------------------------ @@ -28,6 +36,65 @@ void MidiServerApp::AboutRequested() //------------------------------------------------------------------------------ +void MidiServerApp::MessageReceived(BMessage *msg) +{//ToDo + switch (msg->what) + { + default : BApplication::MessageReceived(msg); + } +} + +//------------------------------------------------------------------------------ + +int32 MidiServerApp::GetNextFreeID(void) +{//ToTest + return NextFreeID++; +} + +//------------------------------------------------------------------------------ + +BMidiEndpoint *MidiServerApp::NextEndPoint(int32 *id) +{//ToTest +int32 item = 0; +BMidiEndpoint *endpoint; + while ((endpoint = (BMidiEndpoint*)EndPointList->ItemAt(item)) != NULL) + { + if (endpoint->ID() > *id) + { + endpoint->Acquire(); + *id = endpoint->ID(); + return endpoint; + } + item++; + } +return NULL; +} + +//------------------------------------------------------------------------------ + +BMidiRoster *MidiServerApp::GetRoster() +{ + return roster; +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + int main() { MidiServerApp app; diff --git a/src/servers/midi/MidiServerApp.h b/src/servers/midi/MidiServerApp.h index 045b79d3eb..69091a6551 100644 --- a/src/servers/midi/MidiServerApp.h +++ b/src/servers/midi/MidiServerApp.h @@ -17,6 +17,19 @@ class MidiServerApp : public BApplication public: MidiServerApp(); virtual void AboutRequested(); + + int32 GetNextFreeID(void); + BMidiEndpoint *NextEndPoint(int32 *id); + BMidiRoster *GetRoster(); + + void MessageReceived(BMessage *msg); + + +private: + BList *EndPointList; + int32 NextFreeID; + BMidiRoster *roster; + }; #endif // MIDI_SERVER_APP_H diff --git a/src/servers/midi/midi_server.rsrc b/src/servers/midi/midi_server.rsrc index a6a1fe17e6..d105535221 100644 Binary files a/src/servers/midi/midi_server.rsrc and b/src/servers/midi/midi_server.rsrc differ