* 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>
-#include <sigrok.h>
-#include <sigrok-internal.h>
#include <alsa/asoundlib.h>
+#include "sigrok.h"
+#include "sigrok-internal.h"
#define NUM_PROBES 2
#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] = {
+ "0",
+ "1",
+ NULL,
+};
+
static GSList *device_instances = NULL;
struct alsa {
return SR_OK;
}
-static void hw_closedev(int device_index)
+static int hw_closedev(int device_index)
{
struct sr_device_instance *sdi;
struct alsa *alsa;
- if (!(sdi = sr_get_device_instance(device_instances, device_index)))
- return;
- alsa = sdi->priv;
- if (!alsa)
- return;
+ if (!(sdi = sr_get_device_instance(device_instances, device_index))) {
+ sr_err("alsa: %s: sdi was NULL", __func__);
+ return SR_ERR; /* TODO: SR_ERR_ARG? */
+ }
+
+ if (!(alsa = sdi->priv)) {
+ sr_err("alsa: %s: sdi->priv was NULL", __func__);
+ return SR_ERR; /* TODO: SR_ERR_ARG? */
+ }
+ // TODO: Return values of snd_*?
if (alsa->hw_params)
snd_pcm_hw_params_free(alsa->hw_params);
if (alsa->capture_handle)
snd_pcm_close(alsa->capture_handle);
+
+ return SR_OK;
}
static void hw_cleanup(void)
case SR_DI_NUM_PROBES:
info = GINT_TO_POINTER(NUM_PROBES);
break;
+ case SR_DI_PROBE_NAMES:
+ info = probe_names;
+ break;
case SR_DI_CUR_SAMPLERATE:
info = &alsa->cur_rate;
break;
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,
.init = hw_init,
.cleanup = hw_cleanup,
- .open = hw_opendev,
- .close = hw_closedev,
+ .opendev = hw_opendev,
+ .closedev = hw_closedev,
.get_device_info = hw_get_device_info,
.get_status = hw_get_status,
.get_capabilities = hw_get_capabilities,