59 snd_seq_port_info_malloc(&m_Info);
68 snd_seq_port_info_malloc(&m_Info);
69 snd_seq_port_info_copy(m_Info, other.m_Info);
70 m_ReadSubscribers = other.m_ReadSubscribers;
71 m_WriteSubscribers = other.m_WriteSubscribers;
72 m_ClientName = other.m_ClientName;
81 snd_seq_port_info_malloc(&m_Info);
82 snd_seq_port_info_copy(m_Info, other);
93 snd_seq_port_info_malloc(&m_Info);
104 snd_seq_port_info_malloc(&m_Info);
113 snd_seq_port_info_free(m_Info);
135 snd_seq_port_info_copy(m_Info, other.m_Info);
136 m_ReadSubscribers = other.m_ReadSubscribers;
137 m_WriteSubscribers = other.m_WriteSubscribers;
138 m_ClientName = other.m_ClientName;
150 return snd_seq_port_info_get_client(m_Info);
161 return snd_seq_port_info_get_port(m_Info);
182 return snd_seq_port_info_get_addr(m_Info);
193 return QString(snd_seq_port_info_get_name(m_Info));
204 return snd_seq_port_info_get_capability(m_Info);
215 return snd_seq_port_info_get_type(m_Info);
226 return snd_seq_port_info_get_midi_channels(m_Info);
237 return snd_seq_port_info_get_midi_voices(m_Info);
248 return snd_seq_port_info_get_synth_voices(m_Info);
258 return snd_seq_port_info_get_read_use(m_Info);
268 return snd_seq_port_info_get_write_use(m_Info);
279 return snd_seq_port_info_get_port_specified(m_Info);
290 snd_seq_port_info_set_client(m_Info, client);
301 snd_seq_port_info_set_port(m_Info, port);
312 snd_seq_port_info_set_addr(m_Info, addr);
323 snd_seq_port_info_set_name(m_Info, name.toLocal8Bit().data());
345 snd_seq_port_info_set_capability(m_Info, capability);
372 snd_seq_port_info_set_type(m_Info, type);
383 snd_seq_port_info_set_midi_channels(m_Info, channels);
394 snd_seq_port_info_set_midi_voices(m_Info, voices);
405 snd_seq_port_info_set_synth_voices(m_Info, voices);
416 snd_seq_port_info_set_port_specified(m_Info, val);
426 return m_ReadSubscribers;
436 return m_WriteSubscribers;
452 subs.
setType(SND_SEQ_QUERY_SUBS_READ);
455 while (snd_seq_query_port_subscribers(seq->
getHandle(), subs.m_Info) >= 0)
457 m_ReadSubscribers.append(subs);
461 subs.
setType(SND_SEQ_QUERY_SUBS_WRITE);
464 while (snd_seq_query_port_subscribers(seq->
getHandle(), subs.m_Info) >= 0)
466 m_WriteSubscribers.append(subs);
477 m_ReadSubscribers.clear();
478 m_WriteSubscribers.clear();
498 return snd_seq_port_info_sizeof();
509 return (snd_seq_port_info_get_timestamping(m_Info) == 1);
520 return (snd_seq_port_info_get_timestamp_real(m_Info) == 1);
531 return snd_seq_port_info_get_timestamp_queue(m_Info);
542 snd_seq_port_info_set_timestamping(m_Info, value?1:0);
553 snd_seq_port_info_set_timestamp_real(m_Info, value?1:0);
564 snd_seq_port_info_set_timestamp_queue(m_Info, queueId);
574 m_MidiClient( nullptr ),
607 return m_Subscriptions;
616 m_Subscriptions.clear();
626 if (m_MidiClient != seq)
642 m_Subscriptions.append(*subs);
654 if (m_MidiClient ==
nullptr)
659 SubscriptionsList::iterator it;
660 for(it = m_Subscriptions.begin(); it != m_Subscriptions.end(); ++it)
668 m_Subscriptions.erase(it);
697 addr.client = client;
713 if ((m_MidiClient !=
nullptr) && (m_MidiClient->
getHandle() !=
nullptr))
732 if ((m_MidiClient !=
nullptr) && (m_MidiClient->
getHandle() !=
nullptr))
750 if ((m_MidiClient !=
nullptr) && (m_MidiClient->
getHandle() !=
nullptr))
766 if ((m_MidiClient !=
nullptr) && (m_MidiClient->
getHandle() !=
nullptr))
797 addr.client = client;
813 if ((m_MidiClient !=
nullptr) && (m_MidiClient->
getHandle() !=
nullptr))
832 if ((m_MidiClient !=
nullptr) && (m_MidiClient->
getHandle() !=
nullptr))
850 if ((m_MidiClient !=
nullptr) && (m_MidiClient->
getHandle() !=
nullptr))
866 if ((m_MidiClient !=
nullptr) && (m_MidiClient->
getHandle() !=
nullptr))
880 subscribeFrom(SND_SEQ_CLIENT_SYSTEM, SND_SEQ_PORT_SYSTEM_ANNOUNCE);
889 if (m_MidiClient ==
nullptr) {
892 SubscriptionsList::Iterator it;
893 for( it = m_Subscriptions.begin(); it != m_Subscriptions.end(); ++it) {
897 m_Subscriptions.clear();
906 if (m_Attached && (m_MidiClient !=
nullptr) && (m_MidiClient->
isOpened()))
909 m_Info.
getPort(), m_Info.m_Info ));
1123 if (!m_Attached && (seq !=
nullptr)) {
1137 if (m_Attached && (m_MidiClient !=
nullptr)) {
1162 SubscribersList::ConstIterator it;
1163 for(it = subs.constBegin(); it != subs.constEnd(); ++it) {
1165 int client = s.
getAddr()->client;
1166 if ((client != SND_SEQ_CLIENT_SYSTEM) && (client != m_Info.
getClient())) {
1168 PortInfo p(m_MidiClient, client, port);
1169 if ((p.
getCapability() & SND_SEQ_PORT_CAP_NO_EXPORT) == 0) {
1187 SubscribersList::ConstIterator it;
1188 for(it = subs.constBegin(); it != subs.constEnd(); ++it) {
1190 int client = s.
getAddr()->client;
1191 if ((client != SND_SEQ_CLIENT_SYSTEM) && (client != m_Info.
getClient())) {
1193 PortInfo p(m_MidiClient, client, port);
1194 if ((p.
getCapability() & SND_SEQ_PORT_CAP_NO_EXPORT) == 0) {
1212 PortInfoList::ConstIterator i;
1213 for( i = lst.begin(); i != lst.end(); ++i) {
1215 if ((p.
getAddr()->client == addr->client) &&
1216 (p.
getAddr()->port == addr->port)) {
1231 PortInfoList::ConstIterator i;
1232 for (i = subs.constBegin(); i != subs.constEnd(); ++i) {
1238 for (i = ports.constBegin(); i != ports.constEnd(); ++i) {
1254 PortInfoList::ConstIterator i;
1255 for (i = subs.constBegin(); i != subs.constEnd(); ++i) {
1261 for (i = ports.constBegin(); i != ports.constEnd(); ++i) {
Classes managing ALSA Sequencer clients.
Classes managing ALSA Sequencer queues.
The QObject class is the base class of all Qt objects.
QString getPortName()
Gets the port name.
void freeSubscriptions()
Releases the lists of subscriptions.
void detached(drumstick::ALSA::MidiPort *port)
Signal emitted when the port is detached from a MidiClient.
MidiPort(QObject *parent=nullptr)
Constructor.
void subscribeTo(PortInfo *port)
Subscribe to another port destination.
void updateConnectionsTo(const PortInfoList &desired)
Update the write subscriptions.
virtual ~MidiPort()
Destructor.
void unsubscribeAll()
Unsubscribe all subscriptions.
void attached(drumstick::ALSA::MidiPort *port)
Signal emitted when the port is attached to a MidiClient.
void unsubscribeTo(QString const &name)
Unsubscribe a destination port.
void subscribe(Subscription *subs)
Subscribe a Subscription object.
void subscribeFrom(PortInfo *port)
Subscribe a source port.
PortInfoList getWriteSubscribers()
Gets the list of write subscribers.
bool getTimestamping()
Gets the timestamping mode.
void updateConnectionsFrom(const PortInfoList &desired)
Update the read susbcriptions.
void setPortName(QString const &newName)
Sets the port name.
unsigned int getPortType()
Gets the port type.
int getMidiVoices()
Gets the MIDI voices.
void unsubscribe(Subscription *subs)
Unsubscribe a Subscription object.
int getTimestampQueue()
Gets the timestamp queue number.
void attach(MidiClient *seq)
Attach the port to a MidiClient instance.
void setPortType(unsigned int newValue)
Sets the port type bitmap.
PortInfoList getReadSubscribers()
Gets the list of read subscribers.
int getMidiChannels()
Gets the MIDI channels.
void setCapability(unsigned int newValue)
Sets the port capabilities.
bool getTimestampReal()
Gets the timestamp real mode.
static bool containsAddress(const snd_seq_addr_t *addr, const PortInfoList &lst)
Checks if the provided address is included in the port list.
void subscribeFromAnnounce()
Subscribe from the System:announce port.
void setTimestamping(bool value)
Sets the timestamping mode.
void setMidiClient(MidiClient *seq)
Sets the MidiClient.
int getSynthVoices()
Gets the synth voices.
int getPortId()
Gets the port number.
void setMidiVoices(int newValue)
Sets the MIDI voices.
void setMidiChannels(int newValue)
Sets the MIDI channels.
void updateSubscribers()
Update the subscribers list in the PortInfo member.
void detach()
Detach the port from any MidiClient instance previously attached.
void setSynthVoices(int newValue)
Sets the synth voices.
void subscribed(drumstick::ALSA::MidiPort *port, drumstick::ALSA::Subscription *subs)
Signal emitted when an internal subscription is done.
void unsubscribeFrom(QString const &name)
Unsubscribe a source port.
PortInfo * getPortInfo()
Gets the PortInfo object pointer.
void midiClientChanged(drumstick::ALSA::MidiPort *port, drumstick::ALSA::MidiClient *seq)
Signal emitted when the MidiClient has changed.
void setTimestampReal(bool value)
Sets the timestamp real mode.
unsigned int getCapability()
Gets the port capabilities.
void setTimestampQueue(int queueId)
Sets the timestamp queue number.
SubscriptionsList getSubscriptions() const
Gets the list of susbcriptions.
void applyPortInfo()
Applies all the the delayed PortInfo changes to the MIDI port object.
Port information container.
void freeSubscribers()
Releases the subscribers lists.
int getSizeOfInfo() const
Gets the size of the ALSA info object.
void setCapability(unsigned int capability)
Sets the capability bitmap.
int getWriteUse()
Gets the number of write subscriptions.
int getPortSpecified()
Gets the port-specified mode.
QString getClientName() const
Gets the client name.
int getReadUse()
Get the number of read subscriptions.
unsigned int getType()
Gets the port type.
void setType(unsigned int type)
Sets the port type.
SubscribersList getReadSubscribers() const
Gets the list of read subscribers.
void readSubscribers(MidiClient *seq)
Obtains the port subscribers lists.
bool getTimestamping()
Gets the timestamping mode.
void setMidiVoices(int voices)
Sets the MIDI voices.
int getClient()
Gets the client number.
const snd_seq_addr_t * getAddr()
Gets the address record for this port.
virtual ~PortInfo()
Destructor.
int getPort()
Gets the port number.
int getMidiVoices()
Gets the MIDI voices.
int getTimestampQueue()
Gets the timestamping queue number.
int getMidiChannels()
Gets the MIDI channels.
bool getTimestampReal()
Gets the timestamping real mode.
PortInfo & operator=(const PortInfo &other)
Assignment operator.
void setTimestamping(bool value)
Sets the timestamping mode.
PortInfo()
Default constructor.
void setClient(int client)
Sets the client number.
int getSynthVoices()
Gets the synth voices.
QString getName()
Gets the port name.
void setPortSpecified(int val)
Sets the port-specified mode.
void setMidiChannels(int channels)
Set the MIDI channels.
void setName(QString const &name)
Sets the port name.
PortInfo * clone()
Copy the current object.
SubscribersList getWriteSubscribers() const
Gets the list of write subscribers.
void setTimestampReal(bool value)
Sets the timestamping real mode.
unsigned int getCapability()
Gets the capabilities bitmap.
void setClientName(QString name)
Sets the client name.
void setTimestampQueue(int queueId)
Sets the timestamp queue number.
void setPort(int port)
Set the port number.
void setSynthVoices(int voices)
Sets the synth voices.
void setAddr(const snd_seq_addr_t *addr)
Sets the address record.
Subscriber container class.
void setType(snd_seq_query_subs_type_t type)
Sets the subscription type.
void setRoot(snd_seq_addr_t *addr)
Sets the subscriber's root address.
void setIndex(int index)
Sets the index of the subscriber.
int getIndex()
Gets the index of the subscriber container.
const snd_seq_addr_t * getAddr()
Gets the subscriber's address.
const snd_seq_addr_t * getSender()
Gets the sender address of the subscription (MIDI OUT port)
void setSender(unsigned char client, unsigned char port)
Sets the Subscription's sender (MIDI OUT) port.
void unsubscribe(MidiClient *seq)
Breaks the subscription in the ALSA sequencer subsystem.
void setDest(unsigned char client, unsigned char port)
Sets the Subscription's destination (MIDI IN) port.
const snd_seq_addr_t * getDest()
Gets the destination address of the subscription (MIDI IN port)
void subscribe(MidiClient *seq)
Performs the subscription in the ALSA sequencer subsystem.
Error checking functions and macros.
bool parseAddress(const QString &straddr, snd_seq_addr &result)
Parse a text address representation, returning an ALSA address record.
snd_seq_t * getHandle()
Returns the sequencer handler managed by ALSA.
void portDetach(MidiPort *port)
Detach a MidiPort instance from this client.
QString getClientName()
Gets the client's public name.
void portAttach(MidiPort *port)
Attach a MidiPort instance to this client.
bool isOpened()
Returns true if the sequencer is opened.
#define DRUMSTICK_ALSA_CHECK_WARNING(x)
This macro calls the check warning function.
QList< PortInfo > PortInfoList
List of port information objects.
QList< Subscription > SubscriptionsList
List of subscriptions.
QList< Subscriber > SubscribersList
List of subscribers.