* 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,
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;
}
if (!(sdi = sr_get_device_instance(device_instances, 0)))
return;
- free(sdi->priv);
+ g_free(sdi->priv);
sr_device_instance_free(sdi);
}
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;
}
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;
}
session_device_id = session_device_id;
}
-struct sr_device_plugin alsa_plugin_info = {
+SR_PRIV struct sr_device_plugin alsa_plugin_info = {
.name = "alsa",
.longname = "ALSA driver",
.api_version = 1,