X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fbeaglelogic%2Fbeaglelogic_native.c;h=af5e650f30dbdb89ef034a6d5f96d31e0ae6616c;hb=fd2a8a5056aabd4231a1b0f3c72c70dab8207f26;hp=84314c23134906ae0df5a54e3ad0ae536aceb151;hpb=88d2037bcac00ba081ad450434acd2bee7beedfc;p=libsigrok.git diff --git a/src/hardware/beaglelogic/beaglelogic_native.c b/src/hardware/beaglelogic/beaglelogic_native.c index 84314c23..af5e650f 100644 --- a/src/hardware/beaglelogic/beaglelogic_native.c +++ b/src/hardware/beaglelogic/beaglelogic_native.c @@ -1,7 +1,7 @@ /* * This file is part of the libsigrok project. * - * Copyright (C) 2014, 2017 Kumar Abhishek + * Copyright (C) 2014-2017 Kumar Abhishek * * 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 @@ -20,53 +20,67 @@ #include "protocol.h" #include "beaglelogic.h" -SR_PRIV inline int beaglelogic_open_nonblock(struct dev_context *devc) { +static int beaglelogic_open_nonblock(struct dev_context *devc) +{ devc->fd = open(BEAGLELOGIC_DEV_NODE, O_RDONLY | O_NONBLOCK); - return (devc->fd == -1 ? SR_ERR : SR_OK); + + return ((devc->fd == -1) ? SR_ERR : SR_OK); } -SR_PRIV inline int beaglelogic_close(struct dev_context *devc) { +static int beaglelogic_close(struct dev_context *devc) +{ return close(devc->fd); } -SR_PRIV inline int beaglelogic_get_buffersize(struct dev_context *devc) { +static int beaglelogic_get_buffersize(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_GET_BUFFER_SIZE, &devc->buffersize); } -SR_PRIV inline int beaglelogic_set_buffersize(struct dev_context *devc) { +static int beaglelogic_set_buffersize(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_SET_BUFFER_SIZE, devc->buffersize); } /* This is treated differently as it gets a uint64_t while a uint32_t is read */ -SR_PRIV inline int beaglelogic_get_samplerate(struct dev_context *devc) { +static int beaglelogic_get_samplerate(struct dev_context *devc) +{ uint32_t arg, err; + err = ioctl(devc->fd, IOCTL_BL_GET_SAMPLE_RATE, &arg); devc->cur_samplerate = arg; + return err; } -SR_PRIV inline int beaglelogic_set_samplerate(struct dev_context *devc) { +static int beaglelogic_set_samplerate(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_SET_SAMPLE_RATE, (uint32_t)devc->cur_samplerate); } -SR_PRIV inline int beaglelogic_get_sampleunit(struct dev_context *devc) { +static int beaglelogic_get_sampleunit(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_GET_SAMPLE_UNIT, &devc->sampleunit); } -SR_PRIV inline int beaglelogic_set_sampleunit(struct dev_context *devc) { +static int beaglelogic_set_sampleunit(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_SET_SAMPLE_UNIT, devc->sampleunit); } -SR_PRIV inline int beaglelogic_get_triggerflags(struct dev_context *devc) { +static int beaglelogic_get_triggerflags(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_GET_TRIGGER_FLAGS, &devc->triggerflags); } -SR_PRIV inline int beaglelogic_set_triggerflags(struct dev_context *devc) { +static int beaglelogic_set_triggerflags(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_SET_TRIGGER_FLAGS, devc->triggerflags); } -SR_PRIV int beaglelogic_getlasterror(struct dev_context *devc) { +static int beaglelogic_get_lasterror(struct dev_context *devc) +{ int fd; char buf[16]; int ret; @@ -74,35 +88,68 @@ SR_PRIV int beaglelogic_getlasterror(struct dev_context *devc) { if ((fd = open(BEAGLELOGIC_SYSFS_ATTR(lasterror), O_RDONLY)) == -1) return SR_ERR; - if ((ret = read(fd, buf, 16)) < 0) + ret = read(fd, buf, 16); + close(fd); + + if (ret) return SR_ERR; - close(fd); devc->last_error = strtoul(buf, NULL, 10); return SR_OK; } -SR_PRIV inline int beaglelogic_start(struct dev_context *devc) { +static int beaglelogic_start(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_START); } -SR_PRIV inline int beaglelogic_stop(struct dev_context *devc) { +static int beaglelogic_stop(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_STOP); } -SR_PRIV int beaglelogic_get_bufunitsize(struct dev_context *devc) { +static int beaglelogic_get_bufunitsize(struct dev_context *devc) +{ return ioctl(devc->fd, IOCTL_BL_GET_BUFUNIT_SIZE, &devc->bufunitsize); } -SR_PRIV int beaglelogic_mmap(struct dev_context *devc) { +static int beaglelogic_set_bufunitsize(struct dev_context *devc) +{ + return ioctl(devc->fd, IOCTL_BL_SET_BUFUNIT_SIZE, devc->bufunitsize); +} + +static int beaglelogic_mmap(struct dev_context *devc) +{ if (!devc->buffersize) beaglelogic_get_buffersize(devc); devc->sample_buf = mmap(NULL, devc->buffersize, PROT_READ, MAP_SHARED, devc->fd, 0); - return (devc->sample_buf == MAP_FAILED ? -1 : SR_OK); + + return ((devc->sample_buf == MAP_FAILED) ? -1 : SR_OK); } -SR_PRIV int beaglelogic_munmap(struct dev_context *devc) { +static int beaglelogic_munmap(struct dev_context *devc) +{ return munmap(devc->sample_buf, devc->buffersize); } + +SR_PRIV const struct beaglelogic_ops beaglelogic_native_ops = { + .open = beaglelogic_open_nonblock, + .close = beaglelogic_close, + .get_buffersize = beaglelogic_get_buffersize, + .set_buffersize = beaglelogic_set_buffersize, + .get_samplerate = beaglelogic_get_samplerate, + .set_samplerate = beaglelogic_set_samplerate, + .get_sampleunit = beaglelogic_get_sampleunit, + .set_sampleunit = beaglelogic_set_sampleunit, + .get_triggerflags = beaglelogic_get_triggerflags, + .set_triggerflags = beaglelogic_set_triggerflags, + .start = beaglelogic_start, + .stop = beaglelogic_stop, + .get_lasterror = beaglelogic_get_lasterror, + .get_bufunitsize = beaglelogic_get_bufunitsize, + .set_bufunitsize = beaglelogic_set_bufunitsize, + .mmap = beaglelogic_mmap, + .munmap = beaglelogic_munmap, +};