Alsa Class Reference
Inheritance diagram for Alsa:
Inheritance graph
Collaboration diagram for Alsa:
Collaboration graph

Public Member Functions

 Alsa (ConfigFile *cf, int section)
 
virtual int ProcessMessage (QueuePointer &resp_queue, player_msghdr *hdr, void *data)
 Message handler. More...
 
- Public Member Functions inherited from ThreadedDriver
 ThreadedDriver (ConfigFile *cf, int section, bool overwrite_cmds, size_t queue_maxlen, int interface_)
 Constructor with implicit interface. More...
 
 ThreadedDriver (ConfigFile *cf, int section, bool overwrite_cmds=true, size_t queue_maxlen=PLAYER_MSGQUEUE_DEFAULT_MAXLEN)
 Constructor for multiple-interface drivers. More...
 
virtual ~ThreadedDriver ()
 Destructor.
 
virtual int Setup ()
 Initialize the driver. More...
 
virtual int Shutdown ()
 Finalize the driver. More...
 
virtual int Terminate ()
 Terminate the driver. More...
 
bool Wait (double TimeOut=0.0)
 Wait for new data to arrive on the driver's queue. More...
 
virtual void Update ()
 Update non-threaded drivers. More...
 
- Public Member Functions inherited from Driver
bool HasSubscriptions ()
 
virtual void Publish (player_devaddr_t addr, QueuePointer &queue, uint8_t type, uint8_t subtype, void *src=NULL, size_t deprecated=0, double *timestamp=NULL, bool copy=true)
 Publish a message via one of this driver's interfaces. More...
 
virtual void Publish (player_devaddr_t addr, uint8_t type, uint8_t subtype, void *src=NULL, size_t deprecated=0, double *timestamp=NULL, bool copy=true)
 Publish a message via one of this driver's interfaces. More...
 
virtual void Publish (QueuePointer &queue, player_msghdr_t *hdr, void *src, bool copy=true)
 Publish a message via one of this driver's interfaces. More...
 
virtual void Publish (player_msghdr_t *hdr, void *src, bool copy=true)
 Publish a message via one of this driver's interfaces. More...
 
 Driver (ConfigFile *cf, int section, bool overwrite_cmds, size_t queue_maxlen, int interf)
 Constructor for single-interface drivers. More...
 
 Driver (ConfigFile *cf, int section, bool overwrite_cmds=true, size_t queue_maxlen=PLAYER_MSGQUEUE_DEFAULT_MAXLEN)
 Constructor for multiple-interface drivers. More...
 
virtual ~Driver ()
 Destructor.
 
int GetError ()
 Get last error value. More...
 
virtual int Subscribe (player_devaddr_t addr)
 Subscribe to this driver. More...
 
virtual int Subscribe (QueuePointer &, player_devaddr_t)
 Subscribe to this driver. More...
 
virtual int Unsubscribe (player_devaddr_t addr)
 Unsubscribe from this driver. More...
 
virtual int Unsubscribe (QueuePointer &, player_devaddr_t)
 Unsubscribe from this driver. More...
 
void ProcessMessages (int maxmsgs)
 Process pending messages. More...
 
void ProcessMessages (void)
 Process pending messages. More...
 
virtual int ProcessInternalMessages (QueuePointer &resp_queue, player_msghdr *hdr, void *data)
 Internal message handler. More...
 
virtual bool RegisterProperty (const char *key, Property *property, ConfigFile *cf, int section)
 Property registration. More...
 
virtual bool RegisterProperty (Property *property, ConfigFile *cf, int section)
 Property registration. More...
 

Private Member Functions

virtual void Main (void)
 Main method for driver thread. More...
 
virtual int MainSetup (void)
 Sets up the resources needed by the driver thread.
 
virtual void MainQuit (void)
 Cleanup method for driver thread (called when main exits) More...
 
void SendStateMessage (void)
 
bool AddStoredSample (StoredSample *newSample)
 
bool AddStoredSample (player_audio_wav_t *waveData)
 
bool AddStoredSample (const char *filePath)
 
StoredSampleGetSampleAtIndex (int index)
 
void ClearQueue (void)
 
bool AddToQueue (QueueItem *newItem)
 
bool AddToQueue (player_audio_wav_t *waveData)
 
bool AddToQueue (AudioSample *sample)
 
bool AddSilence (uint32_t time, AudioSample *format)
 
void AdvanceQueue (void)
 
bool SetupPlayBack (void)
 
bool SetPBParams (AudioSample *sample)
 
void PlaybackCallback (int numFrames)
 
bool SetupRecord (void)
 
bool SetRecParams (void)
 
bool SetupRecordBuffer (uint32_t length)
 
void RecordCallback (int numFrames)
 
void HandleRecordedData (void)
 
void PublishRecordedData (void)
 
void StartPlayback (void)
 
void StopPlayback (void)
 
void StartRecording (void)
 
void StopRecording (void)
 
bool SetupMixer (void)
 
bool EnumMixerElements (void)
 
bool EnumElementCaps (MixerElement *element)
 
MixerElementSplitElements (MixerElement *elements, uint32_t &count)
 
MixerElementFilterElements (MixerElement *elements, uint32_t &count)
 
void CleanUpMixerElements (MixerElement *elements, uint32_t count)
 
void MixerDetailsToPlayer (player_audio_mixer_channel_list_detail_t *dest)
 
void MixerLevelsToPlayer (player_audio_mixer_channel_list_t *dest)
 
void SetElementLevel (uint32_t index, float level)
 
void SetElementSwitch (uint32_t index, player_bool_t active)
 
void PublishMixerData (void)
 
float LevelToPlayer (long min, long max, long level)
 
long LevelFromPlayer (long min, long max, float level)
 
void PrintMixerElements (MixerElement *elements, uint32_t count)
 
int HandleWavePlayCmd (player_audio_wav_t *waveData)
 
int HandleSamplePlayCmd (player_audio_sample_item_t *data)
 
int HandleRecordCmd (player_bool_t *data)
 
int HandleMixerChannelCmd (player_audio_mixer_channel_list_t *data)
 
int HandleSampleLoadReq (player_audio_sample_t *data, QueuePointer &resp_queue)
 
int HandleSampleRetrieveReq (player_audio_sample_t *data, QueuePointer &resp_queue)
 
int HandleSampleRecordReq (player_audio_sample_rec_req_t *data, QueuePointer &resp_queue)
 
int HandleMixerChannelListReq (player_audio_mixer_channel_list_detail_t *data, QueuePointer &resp_queue)
 
int HandleMixerChannelLevelReq (player_audio_mixer_channel_list_t *data, QueuePointer &resp_queue)
 

Private Attributes

bool useQueue
 
uint8_t debugLevel
 
char ** mixerFilters
 
bool mixerFilterExact
 
char * pbDevice
 
char * mixerDevice
 
char * recDevice
 
uint32_t cfgPBPeriodTime
 
uint32_t cfgPBBufferTime
 
uint32_t silenceTime
 
uint32_t cfgRecBufferTime
 
uint32_t cfgRecStoreTime
 
uint32_t cfgRecPeriodTime
 
uint8_t recNumChannels
 
uint32_t recSampleRate
 
uint8_t recBits
 
snd_pcm_t * pbHandle
 
int numPBFDs
 
struct pollfd * pbFDs
 
uint32_t actPBBufferTime
 
uint32_t actPBPeriodTime
 
snd_pcm_uframes_t pbPeriodSize
 
uint8_t * periodBuffer
 
snd_pcm_t * recHandle
 
int numRecFDs
 
struct pollfd * recFDs
 
uint32_t actRecBufferTime
 
uint32_t actRecPeriodTime
 
snd_pcm_uframes_t recPeriodSize
 
snd_mixer_t * mixerHandle
 
MixerElementmixerElements
 
uint32_t numElements
 
int nextSampleIdx
 
StoredSamplesamplesHead
 
StoredSamplesamplesTail
 
QueueItemqueueHead
 
QueueItemqueueTail
 
PBState playState
 
PBState recState
 
uint32_t recDataLength
 
uint32_t recDataOffset
 
uint8_t * recData
 
int recDest
 

Additional Inherited Members

- Public Attributes inherited from Driver
QueuePointer ret_queue
 Last requester's queue. More...
 
player_devaddr_t device_addr
 Default device address (single-interface drivers)
 
int entries
 Total number of entries in the device table using this driver. More...
 
bool alwayson
 Always on flag. More...
 
QueuePointer InQueue
 Queue for all incoming messages for this driver.
 
- Protected Member Functions inherited from ThreadedDriver
virtual void StartThread (void)
 
virtual void StopThread (void)
 Cancel (and wait for termination) of the driver thread. More...
 
void TestCancel ()
 enable thread cancellation and test for cancellation More...
 
- Protected Member Functions inherited from Driver
int AddInterface (player_devaddr_t addr)
 Add an interface. More...
 
int AddInterface (player_devaddr_t *addr, ConfigFile *cf, int section, int code, const char *key=NULL)
 Add an interface. More...
 
void SetError (int code)
 Set/reset error code.
 
int AddFileWatch (int fd, bool ReadWatch=true, bool WriteWatch=false, bool ExceptWatch=true)
 Wake up the driver if the specified event occurs on the file descriptor.
 
int RemoveFileWatch (int fd, bool ReadWatch=true, bool WriteWatch=false, bool ExceptWatch=true)
 Remove a previously added watch, call with the same arguments as when adding the watch.
 
virtual void Lock (void)
 Lock access between the server and driver threads. More...
 
virtual void Unlock (void)
 Unlock access to driver internals. More...
 
virtual void SubscriptionLock (void)
 Lock to protect the subscription count for the driver.
 
virtual void SubscriptionUnlock (void)
 Unlock to protect the subscription count for the driver. More...
 
- Static Protected Member Functions inherited from ThreadedDriver
static void * DummyMain (void *driver)
 Dummy main (just calls real main). More...
 
static void DummyMainQuit (void *driver)
 Dummy main cleanup (just calls real main cleanup). More...
 

Member Function Documentation

◆ Main()

◆ MainQuit()

void Alsa::MainQuit ( void  )
privatevirtual

Cleanup method for driver thread (called when main exits)

Overload this method and to do additional cleanup when the driver thread exits.

Reimplemented from ThreadedDriver.

References PLAYER_WARN.

◆ ProcessMessage()

int Alsa::ProcessMessage ( QueuePointer resp_queue,
player_msghdr hdr,
void *  data 
)
virtual

Message handler.

This function is called once for each message in the incoming queue. Reimplement it to provide message handling. Return 0 if you handled the message and -1 otherwise

Parameters
resp_queueThe queue to which any response should go.
hdrThe message header
dataThe message body

Reimplemented from Driver.

References Driver::device_addr, Message::MatchMessage(), PLAYER_AUDIO_CMD_MIXER_CHANNEL, PLAYER_AUDIO_CMD_SAMPLE_PLAY, PLAYER_AUDIO_CMD_WAV_PLAY, PLAYER_AUDIO_CMD_WAV_STREAM_REC, PLAYER_AUDIO_REQ_MIXER_CHANNEL_LEVEL, PLAYER_AUDIO_REQ_MIXER_CHANNEL_LIST, PLAYER_AUDIO_REQ_SAMPLE_LOAD, PLAYER_AUDIO_REQ_SAMPLE_REC, PLAYER_AUDIO_REQ_SAMPLE_RETRIEVE, PLAYER_CAPABILITIES_REQ, PLAYER_MSGTYPE_CMD, and PLAYER_MSGTYPE_REQ.

Here is the call graph for this function:

The documentation for this class was generated from the following files: