drumstick  1.1.3
subscription.cpp
Go to the documentation of this file.
1 /*
2  MIDI Sequencer C++ library
3  Copyright (C) 2006-2019, Pedro Lopez-Cabanillas <plcl@users.sf.net>
4 
5  This library is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 #include <drumstick/alsaclient.h>
20 
26 namespace drumstick {
27 
53 {
54  snd_seq_query_subscribe_malloc(&m_Info);
55 }
56 
62 {
63  snd_seq_query_subscribe_malloc(&m_Info);
64  snd_seq_query_subscribe_copy(m_Info, other.m_Info);
65 }
66 
71 Subscriber::Subscriber(snd_seq_query_subscribe_t* other)
72 {
73  snd_seq_query_subscribe_malloc(&m_Info);
74  snd_seq_query_subscribe_copy(m_Info, other);
75 }
76 
81 {
82  snd_seq_query_subscribe_free(m_Info);
83 }
84 
90 {
91  return new Subscriber(m_Info);
92 }
93 
100 {
101  snd_seq_query_subscribe_copy(m_Info, other.m_Info);
102  return *this;
103 }
104 
109 int
111 {
112  return snd_seq_query_subscribe_get_client(m_Info);
113 }
114 
119 int
121 {
122  return snd_seq_query_subscribe_get_port(m_Info);
123 }
124 
129 const snd_seq_addr_t*
131 {
132  return snd_seq_query_subscribe_get_root(m_Info);
133 }
134 
143 snd_seq_query_subs_type_t
145 {
146  return snd_seq_query_subscribe_get_type(m_Info);
147 }
148 
153 int
155 {
156  return snd_seq_query_subscribe_get_index(m_Info);
157 }
158 
163 int
165 {
166  return snd_seq_query_subscribe_get_num_subs(m_Info);
167 }
168 
173 const snd_seq_addr_t*
175 {
176  return snd_seq_query_subscribe_get_addr(m_Info);
177 }
178 
183 int
185 {
186  return snd_seq_query_subscribe_get_queue(m_Info);
187 }
188 
193 bool
195 {
196  return (snd_seq_query_subscribe_get_exclusive(m_Info) != 0);
197 }
198 
203 bool
205 {
206  return (snd_seq_query_subscribe_get_time_update(m_Info) != 0);
207 }
208 
213 bool
215 {
216  return (snd_seq_query_subscribe_get_time_real(m_Info) != 0);
217 }
218 
223 void
225 {
226  snd_seq_query_subscribe_set_client(m_Info, client);
227 }
228 
233 void
235 {
236  snd_seq_query_subscribe_set_port(m_Info, port);
237 }
238 
243 void
244 Subscriber::setRoot(snd_seq_addr_t* addr)
245 {
246  snd_seq_query_subscribe_set_root(m_Info, addr);
247 }
248 
257 void
258 Subscriber::setType(snd_seq_query_subs_type_t type)
259 {
260  snd_seq_query_subscribe_set_type(m_Info, type);
261 }
262 
267 void
269 {
270  snd_seq_query_subscribe_set_index(m_Info, index);
271 }
272 
277 int
279 {
280  return snd_seq_query_subscribe_sizeof();
281 }
282 
287 {
288  snd_seq_port_subscribe_malloc(&m_Info);
289 }
290 
296 {
297  snd_seq_port_subscribe_malloc(&m_Info);
298  snd_seq_port_subscribe_copy(m_Info, other.m_Info);
299 }
300 
305 Subscription::Subscription(snd_seq_port_subscribe_t* other)
306 {
307  snd_seq_port_subscribe_malloc(&m_Info);
308  snd_seq_port_subscribe_copy(m_Info, other);
309 }
310 
316 {
317  snd_seq_port_subscribe_malloc(&m_Info);
318  CHECK_WARNING(snd_seq_get_port_subscription(seq->getHandle(), m_Info));
319 }
320 
326 {
327  snd_seq_port_subscribe_free(m_Info);
328 }
329 
336 {
337  return new Subscription(m_Info);
338 }
339 
347 {
348  snd_seq_port_subscribe_copy(m_Info, other.m_Info);
349  return *this;
350 }
351 
356 const snd_seq_addr_t*
358 {
359  return snd_seq_port_subscribe_get_sender(m_Info);
360 }
361 
366 const snd_seq_addr_t*
368 {
369  return snd_seq_port_subscribe_get_dest(m_Info);
370 }
371 
376 int
378 {
379  return snd_seq_port_subscribe_get_queue(m_Info);
380 }
381 
386 bool
388 {
389  return (snd_seq_port_subscribe_get_exclusive(m_Info) != 0);
390 }
391 
396 bool
398 {
399  return (snd_seq_port_subscribe_get_time_update(m_Info) != 0);
400 }
401 
406 bool
408 {
409  return (snd_seq_port_subscribe_get_time_real(m_Info) != 0);
410 }
411 
416 void
417 Subscription::setSender(const snd_seq_addr_t* addr)
418 {
419  snd_seq_port_subscribe_set_sender(m_Info, addr);
420 }
421 
426 void
427 Subscription::setDest(const snd_seq_addr_t* addr)
428 {
429  snd_seq_port_subscribe_set_dest(m_Info, addr);
430 }
431 
436 void
438 {
439  snd_seq_port_subscribe_set_queue(m_Info, q);
440 }
441 
446 void
448 {
449  snd_seq_port_subscribe_set_exclusive(m_Info, val?1:0);
450 }
451 
456 void
458 {
459  snd_seq_port_subscribe_set_time_update(m_Info, val?1:0);
460 }
461 
466 void
468 {
469  snd_seq_port_subscribe_set_time_real(m_Info, val?1:0);
470 }
471 
477 void
478 Subscription::setSender(unsigned char client, unsigned char port)
479 {
480  snd_seq_addr_t addr;
481  addr.client = client;
482  addr.port = port;
483  setSender(&addr);
484 }
485 
491 void
492 Subscription::setDest(unsigned char client, unsigned char port)
493 {
494  snd_seq_addr_t addr;
495  addr.client = client;
496  addr.port = port;
497  setDest(&addr);
498 }
499 
506 void
508 {
509  if ((m_Info == NULL) || (seq == NULL) || !(seq->isOpened()))
510  {
511  return;
512  }
513  CHECK_WARNING(snd_seq_subscribe_port(seq->getHandle(), m_Info));
514 }
515 
522 void
524 {
525  if ((m_Info == NULL) || (seq == NULL) || !(seq->isOpened()))
526  {
527  return;
528  }
529  CHECK_WARNING(snd_seq_unsubscribe_port(seq->getHandle(), m_Info));
530 }
531 
536 int
538 {
539  return snd_seq_port_subscribe_sizeof();
540 }
541 
542 } /* namespace drumstick */
543 
CHECK_WARNING
#define CHECK_WARNING(x)
This macro calls the check warning function.
Definition: drumstickcommon.h:145
drumstick::Subscription::getTimeReal
bool getTimeReal()
Gets the susbcription's time-real (time-stamping) flag.
Definition: subscription.cpp:407
drumstick::Subscription::getSizeOfInfo
int getSizeOfInfo() const
Gets the size of the ALSA subscription object.
Definition: subscription.cpp:537
drumstick::Subscription::clone
Subscription * clone()
Copy the current object.
Definition: subscription.cpp:335
drumstick::Subscriber::clone
Subscriber * clone()
Copy the current object.
Definition: subscription.cpp:89
drumstick::MidiClient::isOpened
bool isOpened()
Returns true if the sequencer is opened.
Definition: alsaclient.cpp:293
drumstick::Subscriber::getType
snd_seq_query_subs_type_t getType()
Gets the subscription type (read or write).
Definition: subscription.cpp:144
drumstick::Subscriber::setPort
void setPort(int port)
Sets the subscriber's port number.
Definition: subscription.cpp:234
drumstick::Subscriber::getIndex
int getIndex()
Gets the index of the subscriber container.
Definition: subscription.cpp:154
drumstick::MidiClient::getHandle
snd_seq_t * getHandle()
Returns the sequencer handler managed by ALSA.
Definition: alsaclient.cpp:285
drumstick::Subscriber::getRoot
const snd_seq_addr_t * getRoot()
Gets the subscriber's root address.
Definition: subscription.cpp:130
drumstick::Subscriber
Subscriber container class.
Definition: subscription.h:42
drumstick::Subscriber::getTimeUpdate
bool getTimeUpdate()
Gets the susbcriber's time-update flag.
Definition: subscription.cpp:204
drumstick::Subscription::Subscription
Subscription()
Default constructor.
Definition: subscription.cpp:286
drumstick::Subscriber::getQueue
int getQueue()
Gets the subscriber's queue number.
Definition: subscription.cpp:184
drumstick::Subscription::setExclusive
void setExclusive(bool val)
Sets the subscription's exclusive flag.
Definition: subscription.cpp:447
drumstick::MidiClient
Client management.
Definition: alsaclient.h:197
drumstick::Subscription::getSender
const snd_seq_addr_t * getSender()
Gets the sender address of the subscription (MIDI OUT port)
Definition: subscription.cpp:357
drumstick::Subscription::setTimeReal
void setTimeReal(bool val)
Sets the subscription's time real (time-stamping) flag.
Definition: subscription.cpp:467
drumstick::Subscription::getDest
const snd_seq_addr_t * getDest()
Gets the destination address of the subscription (MIDI IN port)
Definition: subscription.cpp:367
drumstick::Subscriber::getSizeOfInfo
int getSizeOfInfo() const
Gets the size of the ALSA query subscriber object.
Definition: subscription.cpp:278
drumstick::Subscription::getTimeUpdate
bool getTimeUpdate()
Gets the susbcription's time-update flag.
Definition: subscription.cpp:397
drumstick::Subscriber::getExclusive
bool getExclusive()
Gets the subscriber's exclusive flag.
Definition: subscription.cpp:194
drumstick::Subscription::setSender
void setSender(unsigned char client, unsigned char port)
Sets the Subscription's sender (MIDI OUT) port.
Definition: subscription.cpp:478
drumstick::Subscriber::setIndex
void setIndex(int index)
Sets the index of the subscriber.
Definition: subscription.cpp:268
drumstick::Subscription
Subscription management.
Definition: subscription.h:81
drumstick::Subscriber::setClient
void setClient(int client)
Sets the subscriber's client number.
Definition: subscription.cpp:224
drumstick::Subscription::getQueue
int getQueue()
Gets the susbcription's queue number.
Definition: subscription.cpp:377
drumstick::Subscriber::Subscriber
Subscriber()
Default constructor.
Definition: subscription.cpp:52
drumstick::Subscriber::operator=
Subscriber & operator=(const Subscriber &other)
Assignment operator.
Definition: subscription.cpp:99
drumstick::Subscription::setDest
void setDest(unsigned char client, unsigned char port)
Sets the Subscription's destination (MIDI IN) port.
Definition: subscription.cpp:492
alsaclient.h
drumstick::Subscriber::getTimeReal
bool getTimeReal()
Gets the subscriber's time real time-stamp flag.
Definition: subscription.cpp:214
drumstick::Subscription::getExclusive
bool getExclusive()
Gets the subscription's exclusive flag.
Definition: subscription.cpp:387
drumstick::Subscriber::~Subscriber
virtual ~Subscriber()
Destructor.
Definition: subscription.cpp:80
drumstick::Subscription::operator=
Subscription & operator=(const Subscription &other)
Assignment operator.
Definition: subscription.cpp:346
drumstick::Subscription::setQueue
void setQueue(int queue)
Sets the Subscription's Queue number.
Definition: subscription.cpp:437
drumstick::Subscriber::setRoot
void setRoot(snd_seq_addr_t *addr)
Sets the subscriber's root address.
Definition: subscription.cpp:244
drumstick::Subscriber::setType
void setType(snd_seq_query_subs_type_t type)
Sets the subscription type.
Definition: subscription.cpp:258
drumstick::Subscriber::getPort
int getPort()
Gets the subscriober's port number.
Definition: subscription.cpp:120
drumstick::Subscription::~Subscription
virtual ~Subscription()
Destructor.
Definition: subscription.cpp:325
drumstick::Subscription::subscribe
void subscribe(MidiClient *seq)
Performs the subscription in the ALSA sequencer subsystem.
Definition: subscription.cpp:507
drumstick::Subscriber::getAddr
const snd_seq_addr_t * getAddr()
Gets the subscriber's address.
Definition: subscription.cpp:174
drumstick::Subscriber::getNumSubs
int getNumSubs()
Gets the number of subscribers returned by a query operation.
Definition: subscription.cpp:164
drumstick::Subscription::setTimeUpdate
void setTimeUpdate(bool val)
Sets the susbcription's time-update flag.
Definition: subscription.cpp:457
drumstick::Subscription::unsubscribe
void unsubscribe(MidiClient *seq)
Breaks the subscription in the ALSA sequencer subsystem.
Definition: subscription.cpp:523
drumstick::Subscriber::getClient
int getClient()
Gets the subscriber's client number.
Definition: subscription.cpp:110