JackALSARawMidiDriver.h
/*
Copyright (C) 2011 Devin Anderson
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __JackALSARawMidiDriver__
#define __JackALSARawMidiDriver__
#include <vector>
#include <alsa/asoundlib.h>
#include <poll.h>
#include "JackALSARawMidiInputPort.h"
#include "JackALSARawMidiOutputPort.h"
#include "JackMidiDriver.h"
#include "JackThread.h"
namespace Jack {
class JackALSARawMidiDriver:
public JackMidiDriver, public JackRunnableInterface {
private:
int fds[2];
JackALSARawMidiInputPort **input_ports;
JackALSARawMidiOutputPort **output_ports;
jack_nframes_t *output_port_timeouts;
nfds_t poll_fd_count;
struct pollfd *poll_fds;
JackThread *thread;
void
FreeDeviceInfo(std::vector<snd_rawmidi_info_t *> *in_info_list,
std::vector<snd_rawmidi_info_t *> *out_info_list);
void
GetDeviceInfo(snd_ctl_t *control, snd_rawmidi_info_t *info,
std::vector<snd_rawmidi_info_t *> *info_list);
void
HandleALSAError(const char *driver_func, const char *alsa_func,
int code);
public:
JackALSARawMidiDriver(const char *name, const char *alias,
JackLockedEngine *engine, JackSynchro *table);
~JackALSARawMidiDriver();
int
Attach();
int
Close();
bool
Execute();
bool
Init();
int
Open(bool capturing, bool playing, int in_channels, int out_channels,
bool monitoring, const char *capture_driver_name,
const char *playback_driver_name, jack_nframes_t capture_latency,
jack_nframes_t playback_latency);
int
Read();
int
Start();
int
Stop();
int
Write();
};
}
#endif
Jack::JackALSARawMidiInputPort
Definition: JackALSARawMidiInputPort.h:31
Jack::JackMidiDriver
The base class for MIDI drivers: drivers with MIDI ports.
Definition: JackMidiDriver.h:39
Jack::JackALSARawMidiDriver
Definition: JackALSARawMidiDriver.h:35
Jack
Definition: JackAC3Encoder.cpp:30
Jack::JackLockedEngine
Locked Engine, access to methods is serialized using a mutex.
Definition: JackLockedEngine.h:78
Jack::JackRunnableInterface
The base class for runnable objects, that have an Init and Execute method to be called in a threa...
Definition: JackThread.h:34
Jack::JackPosixSemaphore
Inter process synchronization using POSIX semaphore.
Definition: JackPosixSemaphore.h:36
Jack::JackALSARawMidiDriver::Init
bool Init()
Definition: JackALSARawMidiDriver.cpp:337
Jack::JackALSARawMidiOutputPort
Definition: JackALSARawMidiOutputPort.h:31
Jack::JackMachThread
Darwin threads. Real-time threads are actually "time constraint" threads.
Definition: JackMachThread.h:92