From 96462df1adac42353f3adcff68760c3b42cdfe94 Mon Sep 17 00:00:00 2001 From: jerl1 Date: Tue, 5 Nov 2002 09:17:50 +0000 Subject: [PATCH] I add function that I have wrote git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1847 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/midi2/MidiConsumer.cpp | 9 ++-- src/kits/midi2/MidiEndpoint.cpp | 39 +++++++++----- src/kits/midi2/MidiLocalConsumer.cpp | 12 +++-- src/kits/midi2/MidiLocalProducer.cpp | 4 +- src/kits/midi2/MidiProducer.cpp | 28 ++++++---- src/kits/midi2/MidiRoster.cpp | 1 + src/servers/midi/MidiServerApp.cpp | 73 +++++++++++++++++++++++++-- src/servers/midi/MidiServerApp.h | 13 +++++ src/servers/midi/midi_server.rsrc | Bin 4216 -> 5494 bytes 9 files changed, 143 insertions(+), 36 deletions(-) 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 a6a1fe17e68ef278b4e275bb73cd5bccc8e30c8e..d1055352214a123b8e8d550dba158c36be9822d4 100644 GIT binary patch literal 5494 zcmeHLzi-<{6n=7K({}wsic=Ve0)>EX5@gwdJ2(hHNVaSUuq{DUT^Ak%N>&n~){ja; z(xRHesY9m#MTcz8Pzf3QHx%xY$sRd$>(c)q8~fh7BSl&A;vz)~=wOlW?)%>N-W`vR zCi4aWgt9vto_6RrgNHjb@&)w$`<~Qz7LYa#JJ@LaL)hOv00^j9Z*dYq83r!U{%uNj zj_2{Lfa4{!kx%V-8Q=?P!jEX*SN6|n|K$qd*oVxYLQeGM!cW#=vJR6yFxdl>J#hOT z@I99JF-DIv^*EDGljEIMU|M<6T9QrY{FiI%Ya0r>W!wQ*3@wzX501ZG~QjvtuJBF)bt7Y&sgeOigUXm$Jlh=XM5Q39O#Io*T1j`bFfq?`P z7^Vx#8UkNY6s!aJ55qP}fYOliApLwt&QsS_bO-Zs#U;t&G+kKkHIA)d3l|3)=S~NT zFym<;6X!iZiGVL}pz@cn=Q}WHS#Tl1yCef>U=gaW*kJI#u;PhC!bx0Q#VOc%`20<` z+g*QybGmk%m-t4xg68@8AC{$27hmgs>2*(RyW5|2dP}RIJ>EQeW_P=`HSajD7gjZB zY&~AUEqJl$IPqRcTh?G1W>zj1E}i&0>)px>;D`pHbLw87SpCmHTLsX1&J}g>ueSo) z=P%LwA$PA&dJ7M*>o`|e(=^gwxO`1rYKg?<94e1(X0v%#Et{Qcqn`La{=9y=)+jaF z@mlq?8gDh)ok|NfQrTU6)ZBMpJp(*)dR8mY3uv=?Ru0VV?HLEZV(-&x&3sx>N~ub` zRPEHv<|{;`O7Iog)B>O63&wV6x_oA~+p{>3N--CnS4)NE!ge|znkhbMnY9Yj`S3mo z@IJY`cbMG|YQ=K9X_hM_Cr4(BrP`A-^J$x&i*jhL*lN5e{m`kjBRIBL_&S-Vm+a}{ zso623A7{fvVKg%u#TJdyon{X)ZYljr`Iyr0hjDL>lz!J+ z=Z!a7`VmJ&cj1xJ&-xNZ4psKy(ogyMBnTfW{fy%bl!T1q2%09Beu-o0$1L15&~i(^ zf@3)1qAFJ|{Vt5v4_!#YWuZej?1S-&O%XvSjywv%I90qs>1R}@BQ_#1OxIhLelLPP z2By+4#dQfs$CQ4{0nAcGkK%rE#bpRA{TRcAb_OTXvp zGiYC{((fC+VRGreG4?OJSR}a21Y4DIhmw#@78%&h<&soLxR^jHoi!dMbGhQ~esa&? z|BC1;9Vrrh#0w8dN9nwg$sT&N!|Zm3${2lL3`yGlBcrfW%xwEv+nEDmQAJa%gHe`o zkU5~7=mlVL5You(dEuxS6NNsLDxuxXe!5urCYLsVa-}b+OYl|w+j`?gJ(4rA&U@Z( KgFpR=F#H36tn17G literal 4216 zcmeHLOHbQC5T3;AQ1PfSj_swHxXJs#C7XT)Un+beu(vO4z z8tDS+{#2xm*D)#6bQc@V--Y~HLqBMk?4OJPOi4FzhB7cYI2*$!#zXCF9N>`@;XBG- z;&Si_?F4i&ahEZZgQ0zy_hBA}c^KBfum*-T@MkrU&J=U_Dx2!P=VIbbLfQMv8Z9Rb zNiMG6ce}uS-|sVk2Q3glz#)T%2{nNl;?L*2(?JxQC!8S8EXz_8Kn$ApJi+if0@s0Y zjsy!3M$F?}*g%pDQdbQ_FcJw7f-pi}0=%mlm*bKV6PWD0PE41JM7%OSij3I+M-SLK zFc;#L_T`MBDGDP*;vPiwEA5Mlp|NC=Da61QwSUoWw-+mh!g&%I0StPe4~FrOU!XoS zr#aUIj*IWZRy-AXHdU$9ab#LY+PkY z(|n3}#5WnI9hAL-7JdUGiACWqT+tRbuqbQ>nZ$ zy$l|IyEi(eF*(E;fHD1}Mp1!BLmzitS4A4+kSJn^4B3K84<`GM{but`?O^|?)~G-K zka}M~eDjkEerzuf8Uo|zd zT9WB@RbGiq4j@tPGNeN>`c{m>IaQhv(ef=svZtt^dC~8Bbm>;1sM#l-+FEbt3+90ge8HpoO&D)_Oh+{l)B$uZY7h DWlUv?