* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "config.h" /* Must come before sigrok.h */
+/* Note: This driver doesn't compile, analog support in sigrok is WIP. */
+
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define SAMPLE_WIDTH 16
#define AUDIO_DEV "plughw:0,0"
+struct sr_analog_probe {
+ uint8_t att;
+ uint8_t res; /* Needs to be a power of 2, FIXME */
+ uint16_t val; /* Max hardware ADC width is 16bits */
+};
+
+struct sr_analog_sample {
+ uint8_t num_probes; /* Max hardware probes is 256 */
+ struct sr_analog_probe probes[];
+};
+
static int capabilities[] = {
SR_HWCAP_SAMPLERATE,
SR_HWCAP_LIMIT_SAMPLES,
SR_HWCAP_CONTINUOUS,
};
-static const char* probe_names[NUM_PROBES + 1] = {
+static const char *probe_names[NUM_PROBES + 1] = {
"0",
"1",
NULL,
return 0;
}
- sdi = sr_device_instance_new(0, SR_ST_ACTIVE, "alsa", NULL, NULL);
+ sdi = sr_dev_inst_new(0, SR_ST_ACTIVE, "alsa", NULL, NULL);
if (!sdi)
goto free_alsa;
struct alsa *alsa;
int err;
- if (!(sdi = sr_get_device_instance(device_instances, device_index)))
+ if (!(sdi = sr_dev_inst_get(device_instances, device_index)))
return SR_ERR;
alsa = sdi->priv;
err = snd_pcm_open(&alsa->capture_handle, AUDIO_DEV,
SND_PCM_STREAM_CAPTURE, 0);
if (err < 0) {
- sr_warn("cannot open audio device %s (%s)", AUDIO_DEV,
- snd_strerror(err));
+ sr_err("cannot open audio device %s (%s)", AUDIO_DEV,
+ snd_strerror(err));
return SR_ERR;
}
err = snd_pcm_hw_params_malloc(&alsa->hw_params);
if (err < 0) {
- sr_warn("cannot allocate hardware parameter structure (%s)",
- snd_strerror(err));
+ sr_err("cannot allocate hardware parameter structure (%s)",
+ snd_strerror(err));
return SR_ERR;
}
err = snd_pcm_hw_params_any(alsa->capture_handle, alsa->hw_params);
if (err < 0) {
- sr_warn("cannot initialize hardware parameter structure (%s)",
- snd_strerror(err));
+ sr_err("cannot initialize hardware parameter structure (%s)",
+ snd_strerror(err));
return SR_ERR;
}
struct sr_device_instance *sdi;
struct alsa *alsa;
- if (!(sdi = sr_get_device_instance(device_instances, device_index))) {
+ if (!(sdi = sr_dev_inst_get(device_instances, device_index))) {
sr_err("alsa: %s: sdi was NULL", __func__);
return SR_ERR; /* TODO: SR_ERR_ARG? */
}
return SR_OK;
}
-static void hw_cleanup(void)
+static int hw_cleanup(void)
{
struct sr_device_instance *sdi;
- if (!(sdi = sr_get_device_instance(device_instances, 0)))
- return;
+ if (!(sdi = sr_dev_inst_get(device_instances, 0))) {
+ sr_err("alsa: %s: sdi was NULL", __func__);
+ return SR_ERR_BUG;
+ }
+
+ g_free(sdi->priv);
+ sr_dev_inst_free(sdi);
- free(sdi->priv);
- sr_device_instance_free(sdi);
+ return SR_OK;
}
static void *hw_get_device_info(int device_index, int device_info_id)
struct alsa *alsa;
void *info = NULL;
- if (!(sdi = sr_get_device_instance(device_instances, device_index)))
+ if (!(sdi = sr_dev_inst_get(device_instances, device_index)))
return NULL;
alsa = sdi->priv;
struct sr_device_instance *sdi;
struct alsa *alsa;
- if (!(sdi = sr_get_device_instance(device_instances, device_index)))
+ if (!(sdi = sr_dev_inst_get(device_instances, device_index)))
return SR_ERR;
alsa = sdi->priv;
count = snd_pcm_readi(alsa->capture_handle, inb,
MIN(4096/4, alsa->limit_samples));
if (count < 1) {
- sr_warn("Failed to read samples");
+ sr_err("Failed to read samples");
return FALSE;
}
int count;
int err;
- if (!(sdi = sr_get_device_instance(device_instances, device_index)))
+ if (!(sdi = sr_dev_inst_get(device_instances, device_index)))
return SR_ERR;
alsa = sdi->priv;
err = snd_pcm_hw_params_set_access(alsa->capture_handle,
alsa->hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);
if (err < 0) {
- sr_warn("cannot set access type (%s)", snd_strerror(err));
+ sr_err("cannot set access type (%s)", snd_strerror(err));
return SR_ERR;
}
err = snd_pcm_hw_params_set_format(alsa->capture_handle,
alsa->hw_params, SND_PCM_FORMAT_S16_LE);
if (err < 0) {
- sr_warn("cannot set sample format (%s)", snd_strerror(err));
+ sr_err("cannot set sample format (%s)", snd_strerror(err));
return SR_ERR;
}
err = snd_pcm_hw_params_set_rate_near(alsa->capture_handle,
alsa->hw_params, (unsigned int *) &alsa->cur_rate, 0);
if (err < 0) {
- sr_warn("cannot set sample rate (%s)", snd_strerror(err));
+ sr_err("cannot set sample rate (%s)", snd_strerror(err));
return SR_ERR;
}
err = snd_pcm_hw_params_set_channels(alsa->capture_handle,
alsa->hw_params, NUM_PROBES);
if (err < 0) {
- sr_warn("cannot set channel count (%s)", snd_strerror(err));
+ sr_err("cannot set channel count (%s)", snd_strerror(err));
return SR_ERR;
}
err = snd_pcm_hw_params(alsa->capture_handle, alsa->hw_params);
if (err < 0) {
- sr_warn("cannot set parameters (%s)", snd_strerror(err));
+ sr_err("cannot set parameters (%s)", snd_strerror(err));
return SR_ERR;
}
err = snd_pcm_prepare(alsa->capture_handle);
if (err < 0) {
- sr_warn("cannot prepare audio interface for use (%s)",
- snd_strerror(err));
+ sr_err("cannot prepare audio interface for use (%s)",
+ snd_strerror(err));
return SR_ERR;
}
count = snd_pcm_poll_descriptors_count(alsa->capture_handle);
if (count < 1) {
- sr_warn("Unable to obtain poll descriptors count");
+ sr_err("Unable to obtain poll descriptors count");
return SR_ERR;
}
if (!(ufds = g_try_malloc(count * sizeof(struct pollfd)))) {
- sr_warn("alsa: %s: ufds malloc failed", __func__);
+ sr_err("alsa: %s: ufds malloc failed", __func__);
return SR_ERR_MALLOC;
}
err = snd_pcm_poll_descriptors(alsa->capture_handle, ufds, count);
if (err < 0) {
- sr_warn("Unable to obtain poll descriptors (%s)",
- snd_strerror(err));
+ sr_err("Unable to obtain poll descriptors (%s)",
+ snd_strerror(err));
g_free(ufds);
return SR_ERR;
}
return SR_OK;
}
-static void hw_stop_acquisition(int device_index, gpointer session_device_id)
+static int hw_stop_acquisition(int device_index, gpointer session_device_id)
{
/* Avoid compiler warnings. */
device_index = device_index;
session_device_id = session_device_id;
+
+ return SR_OK;
}
-struct sr_device_plugin alsa_plugin_info = {
+SR_PRIV struct sr_device_plugin alsa_plugin_info = {
.name = "alsa",
.longname = "ALSA driver",
.api_version = 1,