[Xenomai-git] Philippe Gerum : smokey/sched-tp: force affinity on the test CPU
Module: xenomai-3 Branch: next Commit: b32d11169db844a7770a599b73d66145af069e2f URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b32d11169db844a7770a599b73d66145af069e2f Author: Philippe Gerum r...@xenomai.org Date: Mon Oct 27 08:57:27 2014 +0100 smokey/sched-tp: force affinity on the test CPU --- testsuite/smokey/sched-tp/sched-tp.c |7 +++ 1 file changed, 7 insertions(+) diff --git a/testsuite/smokey/sched-tp/sched-tp.c b/testsuite/smokey/sched-tp/sched-tp.c index ee6a07f..b946c85 100644 --- a/testsuite/smokey/sched-tp/sched-tp.c +++ b/testsuite/smokey/sched-tp/sched-tp.c @@ -37,8 +37,15 @@ static void *thread_body(void *arg) pthread_t me = pthread_self(); struct sched_param_ex param; struct timespec ts; + cpu_set_t affinity; int ret, part; + CPU_ZERO(affinity); + CPU_SET(0, affinity); + ret = sched_setaffinity(0, sizeof(affinity), affinity); + if (ret) + error(1, errno, sched_setaffinity); + part = (int)(long)arg; param.sched_priority = 50 - part; param.sched_tp_partition = part; ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Philippe Gerum : cobalt/autotune: fixup for 32bit emulation
Module: xenomai-3 Branch: next Commit: 7ae93fc219c2a68317b5e21f7323820ddb20fa34 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=7ae93fc219c2a68317b5e21f7323820ddb20fa34 Author: Philippe Gerum r...@xenomai.org Date: Wed Oct 22 10:10:04 2014 +0200 cobalt/autotune: fixup for 32bit emulation --- include/rtdm/uapi/autotune.h |8 kernel/drivers/autotune/autotune.c |4 ++-- utils/autotune/autotune.c |8 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/rtdm/uapi/autotune.h b/include/rtdm/uapi/autotune.h index 4a75d72..225f2f8 100644 --- a/include/rtdm/uapi/autotune.h +++ b/include/rtdm/uapi/autotune.h @@ -24,15 +24,15 @@ #define RTDM_SUBCLASS_AUTOTUNE 0 struct autotune_setup { - int period; - int quiet; + __u32 period; + __u32 quiet; }; #define AUTOTUNE_RTIOC_IRQ _IOW(RTDM_CLASS_AUTOTUNE, 0, struct autotune_setup) #define AUTOTUNE_RTIOC_KERN_IOW(RTDM_CLASS_AUTOTUNE, 1, struct autotune_setup) #define AUTOTUNE_RTIOC_USER_IOW(RTDM_CLASS_AUTOTUNE, 2, struct autotune_setup) -#define AUTOTUNE_RTIOC_PULSE _IOW(RTDM_CLASS_AUTOTUNE, 3, nanosecs_abs_t) -#define AUTOTUNE_RTIOC_RUN _IOR(RTDM_CLASS_AUTOTUNE, 4, unsigned long) +#define AUTOTUNE_RTIOC_PULSE _IOW(RTDM_CLASS_AUTOTUNE, 3, __u64) +#define AUTOTUNE_RTIOC_RUN _IOR(RTDM_CLASS_AUTOTUNE, 4, __u32) #define AUTOTUNE_RTIOC_RESET _IO(RTDM_CLASS_AUTOTUNE, 5) #endif /* !_RTDM_UAPI_AUTOTUNE_H */ diff --git a/kernel/drivers/autotune/autotune.c b/kernel/drivers/autotune/autotune.c index 34ba9d5..79608b3 100644 --- a/kernel/drivers/autotune/autotune.c +++ b/kernel/drivers/autotune/autotune.c @@ -675,8 +675,8 @@ static int autotune_ioctl_rt(struct rtdm_fd *fd, unsigned int request, void *arg { struct autotune_context *context; struct gravity_tuner *tuner; - nanosecs_abs_t timestamp; - unsigned int gravity; + __u64 timestamp; + __u32 gravity; int ret; context = rtdm_fd_to_private(fd); diff --git a/utils/autotune/autotune.c b/utils/autotune/autotune.c index 5a18310..fe2f621 100644 --- a/utils/autotune/autotune.c +++ b/utils/autotune/autotune.c @@ -87,8 +87,8 @@ static const struct option base_options[] = { static void *sampler_thread(void *arg) { - nanosecs_abs_t timestamp = 0; int fd = (long)arg, ret, n = 0; + __u64 timestamp = 0; struct timespec now; for (;;) { @@ -101,7 +101,7 @@ static void *sampler_thread(void *arg) } else { n++; clock_gettime(CLOCK_MONOTONIC, now); - timestamp = (nanosecs_abs_t)now.tv_sec * 10 + now.tv_nsec; + timestamp = (__u64)now.tv_sec * 10 + now.tv_nsec; } } @@ -206,8 +206,8 @@ static void usage(void) static void run_tuner(int fd, int op, int period, const char *type) { struct autotune_setup setup; - unsigned long gravity; pthread_t sampler; + __u32 gravity; int ret; setup.period = period; @@ -232,7 +232,7 @@ static void run_tuner(int fd, int op, int period, const char *type) pthread_cancel(sampler); if (!quiet) - printf(%lu ns\n, gravity); + printf(%u ns\n, gravity); } int main(int argc, char *const argv[]) ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Philippe Gerum : cobalt/posix/nsem: allow path lengths up to PATH_MAX
Module: xenomai-3 Branch: next Commit: 68cdffd721f751f2cf08123791d75d27cd7bc880 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=68cdffd721f751f2cf08123791d75d27cd7bc880 Author: Philippe Gerum r...@xenomai.org Date: Mon Oct 27 10:09:35 2014 +0100 cobalt/posix/nsem: allow path lengths up to PATH_MAX As a consequence of this change, open/close/unlink ops move to low stage handling. --- kernel/cobalt/posix/nsem.c | 40 ++- kernel/cobalt/posix/sem.c | 14 ++ kernel/cobalt/posix/sem.h |1 - kernel/cobalt/posix/syscall.c |6 +++--- kernel/cobalt/posix/syscall32.c |2 +- 5 files changed, 33 insertions(+), 30 deletions(-) diff --git a/kernel/cobalt/posix/nsem.c b/kernel/cobalt/posix/nsem.c index af0cd49..e0472f7 100644 --- a/kernel/cobalt/posix/nsem.c +++ b/kernel/cobalt/posix/nsem.c @@ -33,6 +33,7 @@ struct named_sem { struct cobalt_sem_shadow __user *usem; unsigned int refs; struct xnid id; + struct filename *filename; }; static struct named_sem *sem_search(struct cobalt_process *cc, xnhandle_t handle) @@ -48,11 +49,12 @@ static struct named_sem *sem_search(struct cobalt_process *cc, xnhandle_t handle static struct cobalt_sem_shadow __user * sem_open(struct cobalt_process *cc, struct cobalt_sem_shadow __user *ushadow, -const char *name, int oflags, mode_t mode, unsigned int value) +struct filename *filename, int oflags, mode_t mode, unsigned int value) { + const char *name = filename-name; struct cobalt_sem_shadow shadow; - struct cobalt_sem *sem; struct named_sem *u, *v; + struct cobalt_sem *sem; xnhandle_t handle; spl_t s; int rc; @@ -126,6 +128,7 @@ sem_open(struct cobalt_process *cc, struct cobalt_sem_shadow __user *ushadow, u-sem = sem; u-usem = ushadow; u-refs = 1; + u-filename = filename; xnlock_get_irqsave(named_sem_lock, s); v = sem_search(cc, handle); @@ -136,6 +139,7 @@ sem_open(struct cobalt_process *cc, struct cobalt_sem_shadow __user *ushadow, --sem-refs; xnlock_put_irqrestore(nklock, s); + putname(filename); xnfree(u); u = v; } else { @@ -171,6 +175,7 @@ static int sem_close(struct cobalt_process *cc, xnhandle_t handle) __cobalt_sem_destroy(handle); + putname(u-filename); xnfree(u); return 1; @@ -201,16 +206,17 @@ __cobalt_sem_open(struct cobalt_sem_shadow __user *usm, if (IS_ERR(filename)) return ERR_CAST(filename); - usm = sem_open(cc, usm, filename-name, oflags, mode, value); - if (IS_ERR(usm)) + usm = sem_open(cc, usm, filename, oflags, mode, value); + if (IS_ERR(usm)) { trace_cobalt_psem_open_failed(filename-name, oflags, mode, value, PTR_ERR(usm)); - putname(filename); + putname(filename); + } return usm; } -COBALT_SYSCALL(sem_open, current, +COBALT_SYSCALL(sem_open, lostage, int, (struct cobalt_sem_shadow __user *__user *u_addrp, const char __user *u_name, int oflags, mode_t mode, unsigned int value)) @@ -227,7 +233,7 @@ COBALT_SYSCALL(sem_open, current, return __xn_put_user(usm, u_addrp) ? -EFAULT : 0; } -COBALT_SYSCALL(sem_close, current, +COBALT_SYSCALL(sem_close, lostage, int, (struct cobalt_sem_shadow __user *usm)) { struct cobalt_process *cc; @@ -260,21 +266,21 @@ static inline int sem_unlink(const char *name) return 0; } -COBALT_SYSCALL(sem_unlink, current, +COBALT_SYSCALL(sem_unlink, lostage, int, (const char __user *u_name)) { - char name[COBALT_MAXNAME + 1]; - long len; + struct filename *filename; + int ret; - len = __xn_safe_strncpy_from_user(name, u_name, sizeof(name)); - if (len 0) - return len; - if (len = sizeof(name)) - return -ENAMETOOLONG; + filename = getname(u_name); + if (IS_ERR(filename)) + return PTR_ERR(filename); - trace_cobalt_psem_unlink(name); + trace_cobalt_psem_unlink(filename-name); + ret = sem_unlink(filename-name); + putname(filename); - return sem_unlink(name); + return ret; } static void cleanup_named_sems(void *cookie, struct xnid *i) diff --git a/kernel/cobalt/posix/sem.c b/kernel/cobalt/posix/sem.c index 3555ab8..fb9f391 100644 --- a/kernel/cobalt/posix/sem.c +++ b/kernel/cobalt/posix/sem.c @@ -89,8 +89,6 @@ __cobalt_sem_init(const char *name, struct cobalt_sem_shadow *sm, goto out; } - ksformat(sem-name, sizeof(sem-name), %s, name); - sys_ppd = cobalt_ppd_get(!!(flags SEM_PSHARED)); state =
[Xenomai-git] Philippe Gerum : cobalt/sched/tp: detect assignment to unconfigured CPU
Module: xenomai-3 Branch: next Commit: 5278d83ea3a108bbf3bc579e7b7f9e2048bf33f0 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=5278d83ea3a108bbf3bc579e7b7f9e2048bf33f0 Author: Philippe Gerum r...@xenomai.org Date: Sun Oct 26 17:58:43 2014 +0100 cobalt/sched/tp: detect assignment to unconfigured CPU --- kernel/cobalt/sched-tp.c |4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/cobalt/sched-tp.c b/kernel/cobalt/sched-tp.c index d3e7f5f..7ce04c1 100644 --- a/kernel/cobalt/sched-tp.c +++ b/kernel/cobalt/sched-tp.c @@ -158,8 +158,10 @@ static int xnsched_tp_declare(struct xnthread *thread, const union xnsched_policy_param *p) { struct xnsched *sched = thread-sched; + struct xnsched_tp *tp = sched-tp; - if (p-tp.prio XNSCHED_TP_MIN_PRIO || + if (tp-gps == NULL || + p-tp.prio XNSCHED_TP_MIN_PRIO || p-tp.prio XNSCHED_TP_MAX_PRIO) return -EINVAL; ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Philippe Gerum : cobalt/posix/thread: propagate error upon failed setschedparam
Module: xenomai-3 Branch: next Commit: cdde256f6857d991e49b100e5fc8a9760eba9c84 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=cdde256f6857d991e49b100e5fc8a9760eba9c84 Author: Philippe Gerum r...@xenomai.org Date: Sun Oct 26 17:57:46 2014 +0100 cobalt/posix/thread: propagate error upon failed setschedparam --- kernel/cobalt/posix/thread.c |5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/cobalt/posix/thread.c b/kernel/cobalt/posix/thread.c index defea50..27c824b 100644 --- a/kernel/cobalt/posix/thread.c +++ b/kernel/cobalt/posix/thread.c @@ -246,7 +246,7 @@ pthread_setschedparam_ex(struct cobalt_thread *thread, struct xnsched_class *sched_class; union xnsched_policy_param param; xnticks_t tslice; - int ret = 0; + int ret; spl_t s; xnlock_get_irqsave(nklock, s); @@ -269,7 +269,8 @@ pthread_setschedparam_ex(struct cobalt_thread *thread, if (cobalt_call_extension(thread_setsched, thread-extref, ret, sched_class, param) ret) goto out; - xnthread_set_schedparam(thread-threadbase, sched_class, param); + ret = xnthread_set_schedparam(thread-threadbase, + sched_class, param); xnsched_run(); out: xnlock_put_irqrestore(nklock, s); ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Philippe Gerum : drivers/rtipc: fixup for 32bit emulation
Module: xenomai-3 Branch: next Commit: 92b6dab81dcf6d5be10642010830c359410055a7 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=92b6dab81dcf6d5be10642010830c359410055a7 Author: Philippe Gerum r...@xenomai.org Date: Wed Oct 22 15:20:21 2014 +0200 drivers/rtipc: fixup for 32bit emulation --- kernel/drivers/ipc/bufp.c | 115 ++--- kernel/drivers/ipc/iddp.c | 123 +++--- kernel/drivers/ipc/internal.h | 41 - kernel/drivers/ipc/rtipc.c| 365 - kernel/drivers/ipc/xddp.c | 113 ++--- 5 files changed, 520 insertions(+), 237 deletions(-) diff --git a/kernel/drivers/ipc/bufp.c b/kernel/drivers/ipc/bufp.c index 1e5ecf3..5ae166a 100644 --- a/kernel/drivers/ipc/bufp.c +++ b/kernel/drivers/ipc/bufp.c @@ -375,17 +375,16 @@ static ssize_t bufp_recvmsg(struct rtdm_fd *fd, return -EINVAL; /* Copy I/O vector in */ - if (rtipc_get_arg(fd, iov, msg-msg_iov, - sizeof(iov[0]) * msg-msg_iovlen)) - return -EFAULT; + ret = rtipc_get_iovec(fd, iov, msg); + if (ret) + return ret; ret = __bufp_recvmsg(fd, iov, msg-msg_iovlen, flags, saddr); if (ret = 0) return ret; /* Copy the updated I/O vector back */ - if (rtipc_put_arg(fd, msg-msg_iov, iov, - sizeof(iov[0]) * msg-msg_iovlen)) + if (rtipc_put_iovec(fd, iov, msg)) return -EFAULT; /* Copy the source address if required. */ @@ -620,8 +619,7 @@ static ssize_t bufp_sendmsg(struct rtdm_fd *fd, return -EINVAL; /* Fetch the destination address to send to. */ - if (rtipc_get_arg(fd, daddr, - msg-msg_name, sizeof(daddr))) + if (rtipc_get_arg(fd, daddr, msg-msg_name, sizeof(daddr))) return -EFAULT; if (daddr.sipc_port 0 || @@ -639,20 +637,16 @@ static ssize_t bufp_sendmsg(struct rtdm_fd *fd, return -EINVAL; /* Copy I/O vector in */ - if (rtipc_get_arg(fd, iov, msg-msg_iov, - sizeof(iov[0]) * msg-msg_iovlen)) - return -EFAULT; + ret = rtipc_get_iovec(fd, iov, msg); + if (ret) + return ret; ret = __bufp_sendmsg(fd, iov, msg-msg_iovlen, flags, daddr); if (ret = 0) return ret; /* Copy updated I/O vector back */ - if (rtipc_put_arg(fd, msg-msg_iov, iov, - sizeof(iov[0]) * msg-msg_iovlen)) - return -EFAULT; - - return ret; + return rtipc_put_iovec(fd, iov, msg) ?: ret; } static ssize_t bufp_write(struct rtdm_fd *fd, @@ -829,30 +823,27 @@ static int __bufp_setsockopt(struct bufp_socket *sk, struct rtipc_port_label plabel; struct timeval tv; rtdm_lockctx_t s; - int ret = 0; size_t len; + int ret; - if (rtipc_get_arg(fd, sopt, arg, sizeof(sopt))) - return -EFAULT; + ret = rtipc_get_sockoptin(fd, sopt, arg); + if (ret) + return ret; if (sopt.level == SOL_SOCKET) { switch (sopt.optname) { case SO_RCVTIMEO: - if (sopt.optlen != sizeof(tv)) - return -EINVAL; - if (rtipc_get_arg(fd, tv, - sopt.optval, sizeof(tv))) - return -EFAULT; + ret = rtipc_get_timeval(fd, tv, sopt.optval, sopt.optlen); + if (ret) + return ret; sk-rx_timeout = rtipc_timeval_to_ns(tv); break; case SO_SNDTIMEO: - if (sopt.optlen != sizeof(tv)) - return -EINVAL; - if (rtipc_get_arg(fd, tv, - sopt.optval, sizeof(tv))) - return -EFAULT; + ret = rtipc_get_timeval(fd, tv, sopt.optval, sopt.optlen); + if (ret) + return ret; sk-tx_timeout = rtipc_timeval_to_ns(tv); break; @@ -869,11 +860,9 @@ static int __bufp_setsockopt(struct bufp_socket *sk, switch (sopt.optname) { case BUFP_BUFSZ: - if (sopt.optlen != sizeof(len)) - return -EINVAL; - if (rtipc_get_arg(fd, len, - sopt.optval, sizeof(len))) - return -EFAULT; + ret = rtipc_get_length(fd, len, sopt.optval, sopt.optlen); + if (ret) + return ret; if (len == 0)
[Xenomai-git] Jorge Ramirez-Ortiz : utils/analogy: calibration - cleanup
Module: xenomai-3 Branch: next Commit: a4ec3dfe961e91e26abf61b78036481eda213e60 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=a4ec3dfe961e91e26abf61b78036481eda213e60 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Sat Oct 25 12:37:33 2014 -0400 utils/analogy: calibration - cleanup --- lib/analogy/calibration.c | 35 --- utils/analogy/Makefile.am | 12 +--- utils/analogy/analogy_calibrate.c |3 --- utils/analogy/analogy_calibrate.h |3 --- utils/analogy/calibration_ni_m.c |6 -- 5 files changed, 9 insertions(+), 50 deletions(-) diff --git a/lib/analogy/calibration.c b/lib/analogy/calibration.c index 9fd944c..331dcac 100644 --- a/lib/analogy/calibration.c +++ b/lib/analogy/calibration.c @@ -19,12 +19,13 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ - +#include sys/types.h +#include sys/stat.h +#include fcntl.h #include math.h #include rtdm/analogy.h #include stdio.h #include errno.h -#include wordexp.h #include iniparser/iniparser.h #include boilerplate/list.h #include calibration.h @@ -196,36 +197,16 @@ write_calibration_file(FILE *dst, struct list *l, int a4l_read_calibration_file(char *name, struct a4l_calibration_data *data) { const char *subdevice[2] = { AI_SUBD_STR, AO_SUBD_STR }; - struct a4l_calibration_subdev_data *p = NULL; int i, j, k, index = -1, nb_elements = -1; + struct a4l_calibration_subdev_data *p = NULL; struct _dictionary_ *d; - const char *filename; - wordexp_t exp; - int ret = 0; - - ret = wordexp(name, exp, WRDE_NOCMD|WRDE_UNDEF); - if (ret) { - /* can't apply calibration */ - ret = ret == WRDE_NOSPACE ? -ENOMEM : -EINVAL; - return ret; - } - if (exp.we_wordc != 1) { - /* weird expansion of %s as rc file \n, params.name */ + if (access(name, R_OK)) return -1; - } - filename = exp.we_wordv[0]; - if (access(filename, R_OK)) { - /* cant access %s for reading \n, params.name */ + d = iniparser_load(name); + if (d == NULL) return -1; - } - - d = iniparser_load(filename); - if (d == NULL) { - /* loading error for %s (%d)\n, params.name, errno */ - return -1; - } read_str(data-driver_name, d, PLATFORM_STR, DRIVER_STR); read_str(data-board_name, d, PLATFORM_STR, BOARD_STR); @@ -271,7 +252,7 @@ int a4l_read_calibration_file(char *name, struct a4l_calibration_data *data) p++; } } - wordfree(exp); + return 0; } diff --git a/utils/analogy/Makefile.am b/utils/analogy/Makefile.am index eed1265..57ff7a8 100644 --- a/utils/analogy/Makefile.am +++ b/utils/analogy/Makefile.am @@ -31,17 +31,7 @@ analogy_config_LDADD = \ -lrt -lpthread analogy_calibrate_SOURCES = analogy_calibrate.c calibration_ni_m.c -analogy_calibrate.c: git-stamp.h calibration_ni_m.h -git-stamp.h: git-stamp - @set -x; if test -r $(top_srcdir)/.git; then \ - stamp=`git --git-dir=$(top_srcdir)/.git rev-list --abbrev-commit -1 HEAD`;\ - if test \! -s $@ || grep -wvq $$stamp $@; then \ - date=`git --git-dir=$(top_srcdir)/.git log -1 $$stamp --pretty=format:%ci`; \ - echo #define GIT_STAMP \#$$stamp ($$date)\ $@; \ - fi; \ - elif test \! -r $@ -o -s $@; then \ - rm -f $@ touch $@; \ - fi; true +analogy_calibrate.c: calibration_ni_m.h analogy_calibrate_LDADD = \ ../../lib/analogy/libanalogy.la \ ../../lib/cobalt/libcobalt.la \ diff --git a/utils/analogy/analogy_calibrate.c b/utils/analogy/analogy_calibrate.c index 1b87e39..ca33ab7 100644 --- a/utils/analogy/analogy_calibrate.c +++ b/utils/analogy/analogy_calibrate.c @@ -32,7 +32,6 @@ #include calibration_ni_m.h struct timespec calibration_start_time; -static const char *revision = 1.0.0; a4l_desc_t descriptor; static const struct option options[] = { @@ -86,8 +85,6 @@ int main(int argc, char *argv[]) int v, i, fd, err = 0; FILE *p = NULL; - __debug(version: git commit %s, revision %s \n, GIT_STAMP, revision); - for (;;) { i = -1; v = getopt_long_only(argc, argv, , options, i); diff --git a/utils/analogy/analogy_calibrate.h b/utils/analogy/analogy_calibrate.h index 09812ae..b2a1c6e 100644 ---
[Xenomai-git] Jorge Ramirez-Ortiz : utils/analogy: calibration - use the analogy' s math utils
Module: xenomai-3 Branch: next Commit: a66aefdeb317df5772f84eeba1468343a9e450c1 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=a66aefdeb317df5772f84eeba1468343a9e450c1 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Tue Oct 14 21:03:05 2014 -0400 utils/analogy: calibration - use the analogy's math utils --- include/rtdm/analogy.h| 12 ++ include/rtdm/uapi/analogy.h |2 +- lib/analogy/Makefile.am |5 +- lib/analogy/calibration.c | 22 ++ lib/analogy/calibration.h | 21 ++ lib/analogy/math.c| 418 + utils/analogy/Makefile.am |2 +- utils/analogy/analogy_calibrate.c |6 +- utils/analogy/calibration_ni_m.c | 106 +++--- utils/analogy/calibration_ni_m.h |6 +- 10 files changed, 515 insertions(+), 85 deletions(-) diff --git a/include/rtdm/analogy.h b/include/rtdm/analogy.h index fd26f58..c03d2b1 100644 --- a/include/rtdm/analogy.h +++ b/include/rtdm/analogy.h @@ -236,6 +236,18 @@ void a4l_write_calibration_file(FILE *dst, struct list *l, int a4l_read_calibration_file(char *name, struct a4l_calibration_data *data); +int a4l_math_polyfit(unsigned order, double *r,double orig, +const unsigned dim, double *x, double *y); + +void a4l_math_mean(double *pmean, double *val, unsigned nr); + +void a4l_math_stddev(double *pstddev, +double mean, double *val, unsigned nr); + +void a4l_math_stddev_of_mean(double *pstddevm, +double mean, double *val, unsigned nr); + + #endif /* !DOXYGEN_CPP */ diff --git a/include/rtdm/uapi/analogy.h b/include/rtdm/uapi/analogy.h index 669ded7..a0a1e59 100644 --- a/include/rtdm/uapi/analogy.h +++ b/include/rtdm/uapi/analogy.h @@ -708,9 +708,9 @@ typedef struct a4l_instruction_list a4l_insnlst_t; struct a4l_calibration_subdev { a4l_sbinfo_t *info; + char *name; int slen; int idx; - char *name; }; struct a4l_calibration_subdev_data { diff --git a/lib/analogy/Makefile.am b/lib/analogy/Makefile.am index 500453d..b79d4cb 100644 --- a/lib/analogy/Makefile.am +++ b/lib/analogy/Makefile.am @@ -7,6 +7,7 @@ libanalogy_la_SOURCES = \ descriptor.c\ info.c \ internal.h \ + math.c \ calibration.c \ range.c \ root_leaf.h \ @@ -19,4 +20,6 @@ libanalogy_la_CPPFLAGS = \ -I$(top_srcdir)/lib/boilerplate libanalogy_la_LIBADD = \ - ../boilerplate/libboilerplate.la + ../boilerplate/libboilerplate.la\ + -lm + diff --git a/lib/analogy/calibration.c b/lib/analogy/calibration.c index 74b2789..85860d1 100644 --- a/lib/analogy/calibration.c +++ b/lib/analogy/calibration.c @@ -1,3 +1,25 @@ +/** + * @file + * Analogy for Linux, device, subdevice, etc. related features + * + * @note Copyright (C) 1997-2000 David A. Schleef d...@schleef.org + * @note Copyright (C) 2014 Jorge A. Ramirez-Ortiz j...@xenomai.org + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + #include rtdm/analogy.h #include stdio.h #include errno.h diff --git a/lib/analogy/calibration.h b/lib/analogy/calibration.h index 04a7e72..4080c60 100644 --- a/lib/analogy/calibration.h +++ b/lib/analogy/calibration.h @@ -1,3 +1,24 @@ +/** + * @file + * Analogy for Linux, internal calibration declarations + * + * @note Copyright (C) 2014 Jorge A Ramirez-Ortiz j...@xenomai.org + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + #ifndef __ANALOGY_CALIBRATION_H__
[Xenomai-git] Philippe Gerum : cobalt/sched/tp: fix double unlink on thread fallback to FIFO
Module: xenomai-3 Branch: next Commit: 4cfacb30c140b9534d2e40ace5c4e4d4baa10874 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=4cfacb30c140b9534d2e40ace5c4e4d4baa10874 Author: Philippe Gerum r...@xenomai.org Date: Sun Oct 26 16:14:19 2014 +0100 cobalt/sched/tp: fix double unlink on thread fallback to FIFO --- kernel/cobalt/sched-tp.c |1 - 1 file changed, 1 deletion(-) diff --git a/kernel/cobalt/sched-tp.c b/kernel/cobalt/sched-tp.c index 484e339..d3e7f5f 100644 --- a/kernel/cobalt/sched-tp.c +++ b/kernel/cobalt/sched-tp.c @@ -253,7 +253,6 @@ xnsched_tp_set_schedule(struct xnsched *sched, goto done; list_for_each_entry_safe(thread, tmp, tp-threads, tp_link) { - list_del(thread-tp_link); param.rt.prio = thread-cprio; xnsched_set_policy(thread, xnsched_class_rt, param); } ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Jorge Ramirez-Ortiz : drivers/analogy: NI M - 622x ranges changed to bipolar
Module: xenomai-3 Branch: next Commit: 6f3465ff217435c22aebaf3cf9cba4dc78f9c9fe URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=6f3465ff217435c22aebaf3cf9cba4dc78f9c9fe Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Thu Sep 4 10:35:26 2014 -0400 drivers/analogy: NI M - 622x ranges changed to bipolar --- kernel/drivers/analogy/national_instruments/pcimio.c |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/drivers/analogy/national_instruments/pcimio.c b/kernel/drivers/analogy/national_instruments/pcimio.c index e7a2ab3..8a3 100644 --- a/kernel/drivers/analogy/national_instruments/pcimio.c +++ b/kernel/drivers/analogy/national_instruments/pcimio.c @@ -801,7 +801,7 @@ static ni_board ni_boards[]={ n_aochan: 2, aobits: 16, ao_fifo_depth: 8191, - .ao_range_table = range_ni_M_622x_ao, + .ao_range_table = a4l_range_bipolar10, reg_type: ni_reg_622x, ao_unipolar:0, ao_speed: 1200, @@ -819,7 +819,7 @@ static ni_board ni_boards[]={ n_aochan: 2, aobits: 16, ao_fifo_depth: 8191, - .ao_range_table = range_ni_M_622x_ao, + .ao_range_table = a4l_range_bipolar10, reg_type: ni_reg_622x, ao_unipolar:0, ao_speed: 1200, ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Jorge Ramirez-Ortiz : utils/analogy: calibration - use iniparser
Module: xenomai-3 Branch: next Commit: 68033dcc5bf6c732eba6a43390aca34c9f490e98 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=68033dcc5bf6c732eba6a43390aca34c9f490e98 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Fri Sep 12 11:55:40 2014 -0400 utils/analogy: calibration - use iniparser --- utils/analogy/Makefile.am |4 ++- utils/analogy/analogy_calibrate.c | 57 - utils/analogy/analogy_calibrate.h | 11 ++- utils/analogy/calibration_ni_m.c | 40 ++ 4 files changed, 103 insertions(+), 9 deletions(-) diff --git a/utils/analogy/Makefile.am b/utils/analogy/Makefile.am index fe2f317..40c09f3 100644 --- a/utils/analogy/Makefile.am +++ b/utils/analogy/Makefile.am @@ -12,7 +12,9 @@ bin_PROGRAMS = \ CPPFLAGS = \ @XENO_USER_CFLAGS@ \ -ggdb \ - -I$(top_srcdir)/include + -I$(top_srcdir)/include \ + -I$(top_srcdir)/lib/boilerplate + LDFLAGS = diff --git a/utils/analogy/analogy_calibrate.c b/utils/analogy/analogy_calibrate.c index 586a38a..b2ac286 100644 --- a/utils/analogy/analogy_calibrate.c +++ b/utils/analogy/analogy_calibrate.c @@ -31,7 +31,7 @@ #include analogy_calibrate.h #include calibration_ni_m.h - +struct apply_calibration_params params = {.name = NULL,} ; struct timespec calibration_start_time; static const char *revision = 0.0.1; a4l_desc_t descriptor; @@ -57,28 +57,65 @@ static const struct option options[] = { .flag = NULL, }, { +#define apply_opt 3 + .name = apply, + .has_arg = 1, + .flag = NULL, + }, + { .name = NULL, } }; -static void print_usage(void) +static void +print_usage(void) { fprintf(stderr, Usage: analogy_calibrate \n ---help: this menu \n ---device /dev/analogyX: analogy device to calibrate \n ---output filename : calibration results \n +--help: this menu \n +--device /dev/analogyX: analogy device to calibrate \n +--output filename : calibration results \n +--apply filename:subd,channel,range,aref : apply the calibration file \n +ex: /home/foo/calib.rc:0,1,255,255 - use 255 for dont care \n ); } +static int +apply_calibration_set_globals(char *info) +{ + char *p; + + params.name = strtok(info, :); + p = strtok(NULL, ,); + if (!p) + error(EXIT, 0, missing --apply parameter \n); + params.subd = strtol(p, NULL, 0); + + p = strtok(NULL, ,); + if (!p) + error(EXIT, 0, missing --apply parameter \n); + params.channel = strtol(p, NULL, 0); + + p = strtok(NULL, ,); + if (!p) + error(EXIT, 0, missing --apply parameter \n); + params.range = strtol(p, NULL, 0); + + p = strtok(NULL, ); + if (!p) + error(EXIT, 0, missing --apply parameter \n); + params.aref = strtol(p, NULL, 0); + + return 0; +} + static void __attribute__ ((constructor)) __analogy_calibrate_init(void) { clock_gettime(CLOCK_MONOTONIC, calibration_start_time); } - int main(int argc, char *argv[]) { struct sched_param param = {.sched_priority = 99}; - char *device = NULL, *file = NULL; + char *device = NULL, *file = NULL, *apply_info = NULL; int v, i, fd, err = 0; struct rlimit rl; @@ -103,12 +140,18 @@ int main(int argc, char *argv[]) error(EXIT, errno, calibration file); __debug(calibration output: %s \n, file); break; + case apply_opt: + apply_info = optarg; + break; default: print_usage(); exit(EXIT_FAILURE); } } + if (apply_info) + apply_calibration_set_globals(apply_info); + err = getrlimit(RLIMIT_STACK, rl); if (!err) { if (rl.rlim_cur rl.rlim_max) { diff --git a/utils/analogy/analogy_calibrate.h b/utils/analogy/analogy_calibrate.h index 1fb548e..c2b539a 100644 --- a/utils/analogy/analogy_calibrate.h +++ b/utils/analogy/analogy_calibrate.h @@ -38,8 +38,17 @@ extern struct timespec calibration_start_time; extern a4l_desc_t descriptor; extern FILE *cal; -#define ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0])) +struct apply_calibration_params { + int channel; + char *name; + int range; + int subd; + int aref; +}; +extern
[Xenomai-git] Jorge Ramirez-Ortiz : lib/analogy: use stddev to calculate stddev_of_mean
Module: xenomai-3 Branch: next Commit: 50aa0a9aae828ecedaf1d5ff6f875755fe32a9b5 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=50aa0a9aae828ecedaf1d5ff6f875755fe32a9b5 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Sun Oct 26 10:47:45 2014 -0400 lib/analogy: use stddev to calculate stddev_of_mean --- lib/analogy/math.c | 12 ++-- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/lib/analogy/math.c b/lib/analogy/math.c index c0e2f60..1679ecd 100644 --- a/lib/analogy/math.c +++ b/lib/analogy/math.c @@ -449,16 +449,8 @@ void a4l_math_stddev(double *pstddev, double mean, double *val, unsigned nr) */ void a4l_math_stddev_of_mean(double *pstddevm, double mean, double *val, unsigned nr) { - double sum, sum_sq; - int i; - - for (sum = 0, sum_sq = 0, i = 0; i nr; i++) { - double x = val[i] - mean; - sum_sq += x * x; - sum += x; - } - - *pstddevm = sqrt(((sum_sq - (sum * sum) / nr) / (nr - 1)) / nr); + a4l_math_stddev(pstddevm, mean, val, nr); + *pstddevm = *pstddevm / sqrt(nr); } ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Jorge Ramirez-Ortiz : utils/analogy: calibration - implement calibrated insn_read
Module: xenomai-3 Branch: next Commit: 54b8e8c46a1feb0b07cacbc255f63955868cd006 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=54b8e8c46a1feb0b07cacbc255f63955868cd006 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Fri Oct 24 09:01:09 2014 -0400 utils/analogy: calibration - implement calibrated insn_read --- utils/analogy/insn_read.c | 85 +++-- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/utils/analogy/insn_read.c b/utils/analogy/insn_read.c index 842bddb..3592aac 100644 --- a/utils/analogy/insn_read.c +++ b/utils/analogy/insn_read.c @@ -39,6 +39,7 @@ static int idx_subd = -1; static int idx_chan; static int idx_rng = -1; static unsigned int scan_size = SCAN_CNT; +static char *calibration_file = NULL; struct option insn_read_opts[] = { {verbose, no_argument, NULL, 'v'}, @@ -47,6 +48,7 @@ struct option insn_read_opts[] = { {scan-count, required_argument, NULL, 'S'}, {channel, required_argument, NULL, 'c'}, {range, required_argument, NULL, 'R'}, + {cal, required_argument, NULL, 'y'}, {raw, no_argument, NULL, 'w'}, {help, no_argument, NULL, 'h'}, {0}, @@ -63,6 +65,7 @@ static void do_print_usage(void) fprintf(stdout, \t\t -c, --channel: channel to use\n); fprintf(stdout, \t\t -R, --range: range to use\n); fprintf(stdout, \t\t -w, --raw: dump data in raw format\n); + fprintf(stdout, \t\t -y, --cal: /path/to/calibration.bin \n); fprintf(stdout, \t\t -h, --help: print this help\n); } @@ -118,9 +121,8 @@ static int dump_text(a4l_desc_t *dsc, unsigned char *buf, int size) if (err 0) goto out; - for (i = 0; i tmp_cnt; i++) { + for (i = 0; i tmp_cnt; i++) fprintf(stdout, fmt, values[i]); - } tmp_size += tmp_cnt * width; } @@ -162,6 +164,7 @@ static int dump_converted(a4l_desc_t *dsc, unsigned char *buf, int size) goto out; } + fprintf(stdout, Non Calibrated values: \n); while (size - tmp_size 0) { double values[64]; int i, tmp_cnt = ((size - tmp_size) / width 64) ? @@ -182,6 +185,78 @@ out: return err; } +static int dump_calibrated(a4l_desc_t *dsc, unsigned char *buf, int size) +{ + struct a4l_calibration_data cal_info; + struct a4l_polynomial converter; + int err = 0, width, tmp_size = 0; + a4l_chinfo_t *chan; + a4l_rnginfo_t *rng; + + + /* Retrieve the channel info */ + err = a4l_get_chinfo(dsc, idx_subd, idx_chan, chan); + if (err 0) { + fprintf(stderr, + insn_read: info for channel %d + on subdevice %d not available (err=%d)\n, + idx_chan, idx_subd, err); + goto out; + } + + /* Retrieve the range info */ + err = a4l_get_rnginfo(dsc, idx_subd, idx_chan, idx_rng, rng); + if (err 0) { + fprintf(stderr, + insn_read: failed to recover range descriptor\n); + goto out; + } + + width = a4l_sizeof_chan(chan); + if (width 0) { + fprintf(stderr, + insn_read: incoherent info for channel %d\n, + idx_chan); + err = width; + goto out; + } + + err = a4l_read_calibration_file(calibration_file, cal_info); + if (err 0) { + fprintf(stderr, + insn_read: failed to read /tmp/calibration.txt \n); + goto out; + } + + err = a4l_get_softcal_converter(converter, idx_subd, idx_chan, idx_rng, + cal_info); + if (err 0) { + fprintf(stderr, + insn_read: failed to get the softcal converter \n); + goto out; + } + + fprintf(stdout, Calibrated values: \n); + while (size - tmp_size 0) { + double values[64]; + int i, tmp_cnt = ((size - tmp_size) / width 64) ? + 64 : ((size - tmp_size) / width); + + err = a4l_rawtodcal(chan, values, buf + tmp_size, tmp_cnt, + converter); + if (err 0) + goto out; + + for (i = 0; i tmp_cnt; i++) + fprintf(stdout, %F\n, values[i]); + + tmp_size += tmp_cnt * width; + } + +out: + return err; +} + int main(int argc, char *argv[]) { int err = 0; @@ -196,7 +271,7 @@ int main(int argc, char *argv[]) /* Compute arguments */ while ((err = getopt_long(argc, argv, - vrd:s:S:c:R:wh, insn_read_opts, +
[Xenomai-git] Jorge Ramirez-Ortiz : utils/analogy: calibration - parse the calibration file
Module: xenomai-3 Branch: next Commit: 07b4608034dc1deff8231a3f51ec211609739764 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=07b4608034dc1deff8231a3f51ec211609739764 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Wed Sep 17 09:30:13 2014 -0700 utils/analogy: calibration - parse the calibration file --- lib/boilerplate/iniparser/iniparser.c |6 +- utils/analogy/analogy_calibrate.c | 42 ++-- utils/analogy/analogy_calibrate.h | 123 +++--- utils/analogy/calibration_ni_m.c | 184 - utils/analogy/calibration_ni_m.h |9 +- 5 files changed, 241 insertions(+), 123 deletions(-) diff --git a/lib/boilerplate/iniparser/iniparser.c b/lib/boilerplate/iniparser/iniparser.c index 0e1621d..5b2094a 100644 --- a/lib/boilerplate/iniparser/iniparser.c +++ b/lib/boilerplate/iniparser/iniparser.c @@ -619,11 +619,13 @@ dictionary * iniparser_load(const char * ininame) case LINE_ERROR: #if 0 -warning(anon_scope, iniparser: syntax error in %s (%d):\n, +printf(iniparser: syntax error in %s (%d):\n, ininame, lineno); -warning(anon_scope, - %s\n, line); +printf( - %s\n, line); + #endif + ret = EINVAL; errs++ ; break; diff --git a/utils/analogy/analogy_calibrate.c b/utils/analogy/analogy_calibrate.c index b2ac286..8404811 100644 --- a/utils/analogy/analogy_calibrate.c +++ b/utils/analogy/analogy_calibrate.c @@ -87,22 +87,22 @@ apply_calibration_set_globals(char *info) params.name = strtok(info, :); p = strtok(NULL, ,); if (!p) - error(EXIT, 0, missing --apply parameter \n); + error(EXIT, 0, missing --apply parameter subd \n); params.subd = strtol(p, NULL, 0); p = strtok(NULL, ,); if (!p) - error(EXIT, 0, missing --apply parameter \n); + error(EXIT, 0, missing --apply parameter channel \n); params.channel = strtol(p, NULL, 0); p = strtok(NULL, ,); if (!p) - error(EXIT, 0, missing --apply parameter \n); + error(EXIT, 0, missing --apply parameter range \n); params.range = strtol(p, NULL, 0); p = strtok(NULL, ); if (!p) - error(EXIT, 0, missing --apply parameter \n); + error(EXIT, 0, missing --apply parameter aref \n); params.aref = strtol(p, NULL, 0); return 0; @@ -114,10 +114,8 @@ static void __attribute__ ((constructor)) __analogy_calibrate_init(void) } int main(int argc, char *argv[]) { - struct sched_param param = {.sched_priority = 99}; char *device = NULL, *file = NULL, *apply_info = NULL; int v, i, fd, err = 0; - struct rlimit rl; __debug(version: git commit %s, revision %s \n, GIT_STAMP, revision); @@ -152,26 +150,6 @@ int main(int argc, char *argv[]) if (apply_info) apply_calibration_set_globals(apply_info); - err = getrlimit(RLIMIT_STACK, rl); - if (!err) { - if (rl.rlim_cur rl.rlim_max) { - rl.rlim_cur = rl.rlim_max; - err = setrlimit(RLIMIT_STACK, rl); - if (err) - __debug(setrlimit errno (%d) \n, errno); - else - __debug(Program Stack Size: %ld MB \n\n, rl.rlim_cur/(1024*1024)); - } - } - - err = mlockall(MCL_CURRENT | MCL_FUTURE); - if (err 0) - error(EXIT, errno, mlockall error); - - err = pthread_setschedparam(pthread_self(), SCHED_FIFO, param); - if (err) - error(EXIT, 0, pthread_setschedparam failed (0x%x), err); - fd = a4l_open(descriptor, device); if (fd 0) error(EXIT, 0, open %s failed (%d), device, fd); @@ -184,17 +162,19 @@ int main(int argc, char *argv[]) /* * TODO: modify the meaning of board/driver in the proc */ - push_to_cal_file([platform] \n); - push_to_cal_file(driver_name: %s \n, descriptor.board_name); - push_to_cal_file(board_name: %s \n, descriptor.driver_name); + push_to_cal_file([%s] \n,PLATFORM_STR); + push_to_cal_file(DRIVER_STR = %s;\n, descriptor.board_name); + push_to_cal_file(BOARD_STR = %s;\n, descriptor.driver_name); err = ni_m_software_calibrate(); if (err) error(CONT, 0, software calibration failed (%d), err); + err = ni_m_apply_calibration(); + if (err) + error(CONT, 0, applying calibration failed (%d), err); + a4l_close(descriptor); - if (cal) - fclose(cal); return err; } diff --git a/utils/analogy/analogy_calibrate.h b/utils/analogy/analogy_calibrate.h index c2b539a..4a30997 100644 ---
[Xenomai-git] Jorge Ramirez-Ortiz : drivers/analogy: NI_M - retrieve the sampling period via A4L_CMD_SIMUL
Module: xenomai-3 Branch: next Commit: 9d5eda59702de396d6bb20158357e4ed2162fefe URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=9d5eda59702de396d6bb20158357e4ed2162fefe Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Tue Aug 19 14:13:08 2014 -0400 drivers/analogy: NI_M - retrieve the sampling period via A4L_CMD_SIMUL --- kernel/drivers/analogy/national_instruments/mio_common.c | 10 ++ 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kernel/drivers/analogy/national_instruments/mio_common.c b/kernel/drivers/analogy/national_instruments/mio_common.c index f0f2abf..e5ccf7a 100644 --- a/kernel/drivers/analogy/national_instruments/mio_common.c +++ b/kernel/drivers/analogy/national_instruments/mio_common.c @@ -2067,12 +2067,14 @@ static int ni_ai_cmdtest(struct a4l_subdevice *subd, struct a4l_cmd_desc * cmd) cmd-nb_chan)) { cmd-scan_begin_arg = ni_min_ai_scan_period_ns(dev, cmd-nb_chan); - return -EINVAL; - } - if (cmd-scan_begin_arg devpriv-clock_ns * 0xff) { + + if (cmd-scan_begin_arg devpriv-clock_ns * 0xff) cmd-scan_begin_arg = devpriv-clock_ns * 0xff; - return -EINVAL; + + /* required for calibration */ + return 0; } + } else if (cmd-scan_begin_src == TRIG_EXT) { /* external trigger */ unsigned int tmp = CR_CHAN(cmd-scan_begin_arg); ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Jorge Ramirez-Ortiz : lib/analogy: fix a4l_sync_read wait call
Module: xenomai-3 Branch: next Commit: 465302d146d293149f7646b409e6bee28e1af464 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=465302d146d293149f7646b409e6bee28e1af464 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Thu Aug 21 15:22:05 2014 -0400 lib/analogy: fix a4l_sync_read wait call --- lib/analogy/sync.c |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/analogy/sync.c b/lib/analogy/sync.c index 6dd49f9..fee5fc9 100644 --- a/lib/analogy/sync.c +++ b/lib/analogy/sync.c @@ -211,13 +211,13 @@ int a4l_sync_read(a4l_desc_t * dsc, .type = A4L_INSN_READ, .idx_subd = idx_subd, .chan_desc = chan_desc, - .data_size = 0, + .data_size = nbyte, .data = buf}, { .type = A4L_INSN_WAIT, .idx_subd = idx_subd, .chan_desc = chan_desc, - .data_size = 1, + .data_size = sizeof(unsigned int), .data = NULL} }; ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Jorge Ramirez-Ortiz : drivers/analogy: remove unnecessary lock
Module: xenomai-3 Branch: next Commit: b82b83556b147741c31187595412ba203de1fcf3 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b82b83556b147741c31187595412ba203de1fcf3 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Thu Aug 14 13:41:50 2014 -0400 drivers/analogy: remove unnecessary lock --- kernel/drivers/analogy/transfer.c | 13 ++--- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/kernel/drivers/analogy/transfer.c b/kernel/drivers/analogy/transfer.c index 2594f00..bf19c8c 100644 --- a/kernel/drivers/analogy/transfer.c +++ b/kernel/drivers/analogy/transfer.c @@ -154,26 +154,17 @@ int a4l_request_irq(struct a4l_device * dev, unsigned long flags, void *cookie) { int ret; - unsigned long __flags; if (dev-transfer.irq_desc.irq != A4L_IRQ_UNUSED) return -EBUSY; - /* A spinlock is used so as to prevent race conditions - on the field irq of the IRQ descriptor - (even if such a case is bound not to happen) */ - rtdm_lock_get_irqsave(dev-lock, __flags); - - ret = __a4l_request_irq(dev-transfer.irq_desc, - irq, handler, flags, cookie); - + ret = __a4l_request_irq(dev-transfer.irq_desc, irq, handler, flags, + cookie); if (ret != 0) { __a4l_err(a4l_request_irq: IRQ registration failed\n); dev-transfer.irq_desc.irq = A4L_IRQ_UNUSED; } - rtdm_lock_put_irqrestore(dev-lock, __flags); - return ret; } ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Philippe Gerum : cobalt/sched: clarify schedlist header
Module: xenomai-3 Branch: next Commit: 994d9828a036a04b9c54362620b01ee0b97f8641 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=994d9828a036a04b9c54362620b01ee0b97f8641 Author: Philippe Gerum r...@xenomai.org Date: Sun Oct 26 18:00:14 2014 +0100 cobalt/sched: clarify schedlist header --- kernel/cobalt/sched.c |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/cobalt/sched.c b/kernel/cobalt/sched.c index 6fdae55..7cc5770 100644 --- a/kernel/cobalt/sched.c +++ b/kernel/cobalt/sched.c @@ -1000,7 +1000,7 @@ static int vfile_schedlist_show(struct xnvfile_snapshot_iterator *it, if (p == NULL) xnvfile_printf(it, %-3s %-6s %-5s %-8s %-5s %-8s %-10s %s\n, - CPU, PID, CLASS, PERS, PRI, TIMEOUT, + CPU, PID, CLASS, TYPE, PRI, TIMEOUT, STAT, NAME); else { ksformat(pbuf, sizeof(pbuf), %3d, p-cprio); ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Philippe Gerum : cobalt/heap: add xnstrdup()
Module: xenomai-3 Branch: next Commit: e7585233e24a089b204230d6f3cc9d4b3a4f3ea1 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e7585233e24a089b204230d6f3cc9d4b3a4f3ea1 Author: Philippe Gerum r...@xenomai.org Date: Mon Oct 27 11:14:11 2014 +0100 cobalt/heap: add xnstrdup() --- include/cobalt/kernel/heap.h | 12 1 file changed, 12 insertions(+) diff --git a/include/cobalt/kernel/heap.h b/include/cobalt/kernel/heap.h index d29778f..916ac8f 100644 --- a/include/cobalt/kernel/heap.h +++ b/include/cobalt/kernel/heap.h @@ -19,6 +19,7 @@ #ifndef _COBALT_KERNEL_HEAP_H #define _COBALT_KERNEL_HEAP_H +#include linux/string.h #include cobalt/kernel/lock.h #include cobalt/kernel/list.h #include cobalt/uapi/kernel/types.h @@ -142,6 +143,17 @@ void xnheap_free(struct xnheap *heap, void *block); int xnheap_check_block(struct xnheap *heap, void *block); +static inline char *xnstrdup(const char *s) +{ + char *p; + + p = xnmalloc(strlen(s) + 1); + if (p == NULL) + return NULL; + + return strcpy(p, s); +} + /** @} */ #endif /* !_COBALT_KERNEL_HEAP_H */ ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Philippe Gerum : bootstrap
Module: xenomai-3 Branch: next Commit: 0e1dc8cdfeb877812f8570974990bde37261367b URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=0e1dc8cdfeb877812f8570974990bde37261367b Author: Philippe Gerum r...@xenomai.org Date: Mon Oct 27 14:11:04 2014 +0100 bootstrap --- include/cobalt/kernel/rtdm/Makefile.in |1 + lib/analogy/Makefile.in| 30 -- lib/boilerplate/Makefile.in| 53 ++-- utils/analogy/Makefile.in | 46 --- 4 files changed, 107 insertions(+), 23 deletions(-) diff --git a/include/cobalt/kernel/rtdm/Makefile.in b/include/cobalt/kernel/rtdm/Makefile.in index 1cc5915..81d84d1 100644 --- a/include/cobalt/kernel/rtdm/Makefile.in +++ b/include/cobalt/kernel/rtdm/Makefile.in @@ -350,6 +350,7 @@ noinst_HEADERS = \ autotune.h \ can.h \ cobalt.h\ + compat.h\ driver.h\ fd.h\ ipc.h \ diff --git a/lib/analogy/Makefile.in b/lib/analogy/Makefile.in index 832f43d..f42dbde 100644 --- a/lib/analogy/Makefile.in +++ b/lib/analogy/Makefile.in @@ -125,9 +125,10 @@ am__uninstall_files_from_dir = { \ } am__installdirs = $(DESTDIR)$(libdir) LTLIBRARIES = $(lib_LTLIBRARIES) -libanalogy_la_LIBADD = +libanalogy_la_DEPENDENCIES = ../boilerplate/libboilerplate.la am_libanalogy_la_OBJECTS = libanalogy_la-async.lo \ libanalogy_la-descriptor.lo libanalogy_la-info.lo \ + libanalogy_la-math.lo libanalogy_la-calibration.lo \ libanalogy_la-range.lo libanalogy_la-sync.lo \ libanalogy_la-sys.lo libanalogy_la_OBJECTS = $(am_libanalogy_la_OBJECTS) @@ -374,14 +375,21 @@ libanalogy_la_SOURCES = \ descriptor.c\ info.c \ internal.h \ + math.c \ + calibration.c \ range.c \ root_leaf.h \ sync.c \ sys.c libanalogy_la_CPPFLAGS = \ - @XENO_USER_CFLAGS@ \ - -I$(top_srcdir)/include + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/lib/boilerplate + +libanalogy_la_LIBADD = \ + ../boilerplate/libboilerplate.la\ + -lm all: all-am @@ -463,8 +471,10 @@ distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libanalogy_la-async.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libanalogy_la-calibration.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libanalogy_la-descriptor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libanalogy_la-info.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libanalogy_la-math.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libanalogy_la-range.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libanalogy_la-sync.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libanalogy_la-sys.Plo@am__quote@ @@ -511,6 +521,20 @@ libanalogy_la-info.lo: info.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libanalogy_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libanalogy_la-info.lo `test -f 'info.c' || echo '$(srcdir)/'`info.c +libanalogy_la-math.lo: math.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libanalogy_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libanalogy_la-math.lo -MD -MP -MF $(DEPDIR)/libanalogy_la-math.Tpo -c -o libanalogy_la-math.lo `test -f 'math.c' || echo '$(srcdir)/'`math.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libanalogy_la-math.Tpo $(DEPDIR)/libanalogy_la-math.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='math.c' object='libanalogy_la-math.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libanalogy_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libanalogy_la-math.lo `test -f 'math.c' || echo '$(srcdir)/'`math.c + +libanalogy_la-calibration.lo: calibration.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libanalogy_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libanalogy_la-calibration.lo -MD -MP -MF $(DEPDIR)/libanalogy_la-calibration.Tpo -c -o libanalogy_la-calibration.lo `test -f
[Xenomai-git] Jorge Ramirez-Ortiz : drivers/analogy: disable chanlist check on calibration instructions
Module: xenomai-3 Branch: next Commit: c39b74040ab085a03ec9078baffecab7bed758d1 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=c39b74040ab085a03ec9078baffecab7bed758d1 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Wed Aug 20 15:58:07 2014 -0400 drivers/analogy: disable chanlist check on calibration instructions --- kernel/drivers/analogy/instruction.c | 10 ++ 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kernel/drivers/analogy/instruction.c b/kernel/drivers/analogy/instruction.c index 95c4419..7e7704f 100644 --- a/kernel/drivers/analogy/instruction.c +++ b/kernel/drivers/analogy/instruction.c @@ -228,10 +228,12 @@ int a4l_do_insn(struct a4l_device_context * cxt, struct a4l_kernel_instruction * } /* Checks the channel descriptor */ - ret = a4l_check_chanlist(dev-transfer.subds[dsc-idx_subd], -1, dsc-chan_desc); - if (ret 0) - return ret; + if ((subd-flags A4L_SUBD_TYPES) != A4L_SUBD_CALIB) { + ret = a4l_check_chanlist(dev-transfer.subds[dsc-idx_subd], +1, dsc-chan_desc); + if (ret 0) + return ret; + } /* Choose the proper handler, we can check the pointer because the subdevice was memset to 0 at allocation time */ ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Jorge Ramirez-Ortiz : drivers/analogy: let A4L_CMD_SIMUL calls return driver specific values
Module: xenomai-3 Branch: next Commit: ca84782351a929ed78baee05fffd3accfce31db0 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=ca84782351a929ed78baee05fffd3accfce31db0 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Tue Aug 19 14:02:23 2014 -0400 drivers/analogy: let A4L_CMD_SIMUL calls return driver specific values --- kernel/drivers/analogy/command.c | 17 + 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/kernel/drivers/analogy/command.c b/kernel/drivers/analogy/command.c index 1c544bf..213591d 100644 --- a/kernel/drivers/analogy/command.c +++ b/kernel/drivers/analogy/command.c @@ -26,7 +26,6 @@ #include rtdm/analogy/device.h /* --- Command descriptor management functions --- */ - int a4l_fill_cmddesc(struct a4l_device_context * cxt, struct a4l_cmd_desc * desc, void *arg) { int ret = 0; @@ -284,11 +283,11 @@ int a4l_check_specific_cmdcnt(struct a4l_device_context * cxt, struct a4l_cmd_de /* --- IOCTL / FOPS function --- */ -int a4l_ioctl_cmd(struct a4l_device_context * cxt, void *arg) +int a4l_ioctl_cmd(struct a4l_device_context * ctx, void *arg) { int ret = 0, simul_flag = 0; struct a4l_cmd_desc *cmd_desc = NULL; - struct a4l_device *dev = a4l_get_dev(cxt); + struct a4l_device *dev = a4l_get_dev(ctx); struct a4l_subdevice *subd; /* The command launching cannot be done in real-time because @@ -310,12 +309,12 @@ int a4l_ioctl_cmd(struct a4l_device_context * cxt, void *arg) memset(cmd_desc, 0, sizeof(struct a4l_cmd_desc)); /* Gets the command */ - ret = a4l_fill_cmddesc(cxt, cmd_desc, arg); + ret = a4l_fill_cmddesc(ctx, cmd_desc, arg); if (ret != 0) goto out_ioctl_cmd; /* Checks the command */ - ret = a4l_check_cmddesc(cxt, cmd_desc); + ret = a4l_check_cmddesc(ctx, cmd_desc); if (ret != 0) goto out_ioctl_cmd; @@ -323,7 +322,7 @@ int a4l_ioctl_cmd(struct a4l_device_context * cxt, void *arg) if (ret != 0) goto out_ioctl_cmd; - ret = a4l_check_specific_cmdcnt(cxt, cmd_desc); + ret = a4l_check_specific_cmdcnt(ctx, cmd_desc); if (ret != 0) goto out_ioctl_cmd; @@ -347,7 +346,7 @@ int a4l_ioctl_cmd(struct a4l_device_context * cxt, void *arg) } /* Gets the transfer system ready */ - ret = a4l_setup_buffer(cxt, cmd_desc); + ret = a4l_setup_buffer(ctx, cmd_desc); if (ret 0) goto out_ioctl_cmd; @@ -355,12 +354,14 @@ int a4l_ioctl_cmd(struct a4l_device_context * cxt, void *arg) ret = subd-do_cmd(subd, cmd_desc); if (ret != 0) { - a4l_cancel_buffer(cxt); + a4l_cancel_buffer(ctx); goto out_ioctl_cmd; } out_ioctl_cmd: if (ret != 0 || simul_flag == 1) { + rtdm_safe_copy_to_user(rtdm_private_to_fd(ctx), arg, cmd_desc, + sizeof(struct a4l_cmd_desc)); a4l_free_cmddesc(cmd_desc); rtdm_free(cmd_desc); } ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Jorge Ramirez-Ortiz : utils/analogy: NI-M software calibration [Part I]
Module: xenomai-3 Branch: next Commit: 047c0fe54a2a751bd5bf3e3c7f857684845656b8 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=047c0fe54a2a751bd5bf3e3c7f857684845656b8 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Wed Aug 13 12:24:16 2014 -0400 utils/analogy: NI-M software calibration [Part I] Generates a calibration file as per the comedi implementation. --- utils/analogy/Makefile.am | 24 +- utils/analogy/analogy_calibrate.c | 157 + utils/analogy/analogy_calibrate.h | 182 + utils/analogy/calibration_ni_m.c | 1406 + utils/analogy/calibration_ni_m.h | 280 5 files changed, 2048 insertions(+), 1 deletion(-) diff --git a/utils/analogy/Makefile.am b/utils/analogy/Makefile.am index c731b7a..fe2f317 100644 --- a/utils/analogy/Makefile.am +++ b/utils/analogy/Makefile.am @@ -1,4 +1,4 @@ -sbin_PROGRAMS = analogy_config +sbin_PROGRAMS = analogy_config analogy_calibrate bin_PROGRAMS = \ cmd_read \ @@ -29,6 +29,24 @@ analogy_config_LDADD = \ @XENO_USER_LDADD@ \ -lpthread -lrt +analogy_calibrate_SOURCES = analogy_calibrate.c calibration_ni_m.c +analogy_calibrate.c: git-stamp.h calibration_ni_m.h +git-stamp.h: git-stamp + @set -x; if test -r $(top_srcdir)/.git; then \ + stamp=`git --git-dir=$(top_srcdir)/.git rev-list --abbrev-commit -1 HEAD`;\ + if test \! -s $@ || grep -wvq $$stamp $@; then \ + date=`git --git-dir=$(top_srcdir)/.git log -1 $$stamp --pretty=format:%ci`; \ + echo #define GIT_STAMP \#$$stamp ($$date)\ $@; \ + fi; \ + elif test \! -r $@ -o -s $@; then \ + rm -f $@ touch $@; \ + fi; true +analogy_calibrate_LDADD = \ + ../../lib/analogy/libanalogy.la \ + ../../lib/cobalt/libcobalt.la \ + @XENO_USER_LDADD@ \ + -lpthread -lrt -lgsl -lgslcblas -lm + cmd_read_SOURCES = cmd_read.c cmd_read_LDADD = \ ../../lib/analogy/libanalogy.la \ @@ -77,3 +95,7 @@ insn_bits_LDADD = \ wf_generate_SOURCES = wf_generate.c wf_generate_LDADD = ./libwaveform.la -lm + + +.PHONY: git-stamp + diff --git a/utils/analogy/analogy_calibrate.c b/utils/analogy/analogy_calibrate.c new file mode 100644 index 000..586a38a --- /dev/null +++ b/utils/analogy/analogy_calibrate.c @@ -0,0 +1,157 @@ +/** + * @file + * Analogy for Linux, calibration program + * + * @note Copyright (C) 2014 Jorge A. Ramirez-Ortiz j...@xenomai.org + * + * from original code from the Comedi project + * + * Xenomai is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Xenomai is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Xenomai; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include sys/time.h +#include sys/resource.h +#include getopt.h +#include pthread.h +#include sys/mman.h +#include xeno_config.h +#include rtdm/analogy.h +#include analogy_calibrate.h +#include calibration_ni_m.h + + +struct timespec calibration_start_time; +static const char *revision = 0.0.1; +a4l_desc_t descriptor; +FILE *cal = NULL; + +static const struct option options[] = { + { +#define help_opt 0 + .name = help, + .has_arg = 0, + .flag = NULL, + }, + { +#define device_opt 1 + .name = device, + .has_arg = 1, + .flag = NULL, + }, + { +#define output_opt 2 + .name = output, + .has_arg = 1, + .flag = NULL, + }, + { + .name = NULL, + } +}; + +static void print_usage(void) +{ + fprintf(stderr, Usage: analogy_calibrate \n +--help: this menu \n +--device /dev/analogyX: analogy device to calibrate \n +--output filename : calibration results \n + ); +} + +static void __attribute__ ((constructor)) __analogy_calibrate_init(void) +{ + clock_gettime(CLOCK_MONOTONIC, calibration_start_time); +} + +int main(int argc, char *argv[]) +{ + struct sched_param
[Xenomai-git] Jorge Ramirez-Ortiz : utils/analogy: calibration - use analogy lib to read /write the calibration file
Module: xenomai-3 Branch: next Commit: fb962115628721bc52ae05923b67185c4005ee37 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=fb962115628721bc52ae05923b67185c4005ee37 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Sat Oct 11 14:25:26 2014 -0400 utils/analogy: calibration - use analogy lib to read/write the calibration file --- include/rtdm/analogy.h| 11 + include/rtdm/uapi/analogy.h | 28 +++ lib/analogy/Makefile.am | 11 +- lib/analogy/calibration.c | 211 +++ lib/analogy/calibration.h | 44 utils/analogy/Makefile.am |5 +- utils/analogy/analogy_calibrate.c | 73 +-- utils/analogy/analogy_calibrate.h | 131 +--- utils/analogy/calibration_ni_m.c | 422 - utils/analogy/calibration_ni_m.h | 36 +--- 10 files changed, 456 insertions(+), 516 deletions(-) diff --git a/include/rtdm/analogy.h b/include/rtdm/analogy.h index 57f2ec0..fd26f58 100644 --- a/include/rtdm/analogy.h +++ b/include/rtdm/analogy.h @@ -21,9 +21,12 @@ #ifndef _RTDM_ANALOGY_H #define _RTDM_ANALOGY_H +#include stdio.h #include sys/types.h #include rtdm/uapi/analogy.h +#include boilerplate/list.h + /*! @addtogroup analogy_lib_descriptor @{ @@ -227,6 +230,14 @@ int a4l_ftoraw(a4l_chinfo_t *chan, int a4l_dtoraw(a4l_chinfo_t *chan, a4l_rnginfo_t *rng, void *dst, double *src, int cnt); +void a4l_write_calibration_file(FILE *dst, struct list *l, + struct a4l_calibration_subdev *subd, + a4l_desc_t *desc); + +int a4l_read_calibration_file(char *name, struct a4l_calibration_data *data); + + + #endif /* !DOXYGEN_CPP */ #ifdef __cplusplus diff --git a/include/rtdm/uapi/analogy.h b/include/rtdm/uapi/analogy.h index 9806c82..669ded7 100644 --- a/include/rtdm/uapi/analogy.h +++ b/include/rtdm/uapi/analogy.h @@ -706,4 +706,32 @@ typedef struct a4l_instruction_list a4l_insnlst_t; /*! @} analogy_lib_sync1 */ +struct a4l_calibration_subdev { + a4l_sbinfo_t *info; + int slen; + int idx; + char *name; +}; + +struct a4l_calibration_subdev_data { + int index; + int channel; + int range; + int expansion; + int nb_coeff; + double *coeff; + +}; + +struct a4l_calibration_data { + char *driver_name; + char *board_name; + int nb_ai; + struct a4l_calibration_subdev_data *ai; + int nb_ao; + struct a4l_calibration_subdev_data *ao; +}; + + + #endif /* _RTDM_UAPI_ANALOGY_H */ diff --git a/lib/analogy/Makefile.am b/lib/analogy/Makefile.am index 4d242ff..500453d 100644 --- a/lib/analogy/Makefile.am +++ b/lib/analogy/Makefile.am @@ -7,11 +7,16 @@ libanalogy_la_SOURCES = \ descriptor.c\ info.c \ internal.h \ + calibration.c \ range.c \ root_leaf.h \ sync.c \ sys.c -libanalogy_la_CPPFLAGS = \ - @XENO_USER_CFLAGS@ \ - -I$(top_srcdir)/include +libanalogy_la_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/lib/boilerplate + +libanalogy_la_LIBADD = \ + ../boilerplate/libboilerplate.la diff --git a/lib/analogy/calibration.c b/lib/analogy/calibration.c new file mode 100644 index 000..74b2789 --- /dev/null +++ b/lib/analogy/calibration.c @@ -0,0 +1,211 @@ +#include rtdm/analogy.h +#include stdio.h +#include errno.h +#include wordexp.h +#include iniparser/iniparser.h +#include boilerplate/list.h +#include calibration.h + +#define ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0])) + +static inline int read_dbl(double *d, struct _dictionary_ *f,const char *subd, + int subd_idx, char *type, int type_idx) +{ + char *str; + int ret; + + /* if only contains doubles as coefficients */ + if (strncmp(type, COEFF_STR, strlen(COEFF_STR) != 0)) + return -ENOENT; + + ret = asprintf(str, COEFF_FMT, subd, subd_idx, type, type_idx); + if (ret 0) + return ret; + + *d = iniparser_getdouble(f, str, -255.0); + if (*d == -255.0) + ret = -ENOENT; + free(str); + + return ret; +} + +static inline int read_int(int *val, struct _dictionary_ *f, const char *subd, + int subd_idx, char *type) +{ + char *str; + int ret; + + ret = (subd_idx = 0) ? + asprintf(str, ELEMENT_FIELD_FMT, subd, subd_idx, type): + asprintf(str, ELEMENT_FMT, subd, type); + if (ret 0) + return ret; + + *val = iniparser_getint(f, str, 0x); + if (*val == 0x) + ret = -ENOENT; + free(str); + + return ret; +} + +static inline int read_str(char **val, struct _dictionary_ *f, const char *subd, +
[Xenomai-git] Jorge Ramirez-Ortiz : lib/analogy: calibration - a4l_rawtodcal a4l_dcaltoraw
Module: xenomai-3 Branch: next Commit: 029424c470f6697dca77b9e693a8669d66474d54 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=029424c470f6697dca77b9e693a8669d66474d54 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Fri Oct 24 08:59:31 2014 -0400 lib/analogy: calibration - a4l_rawtodcal a4l_dcaltoraw --- include/rtdm/analogy.h |9 ++ include/rtdm/uapi/analogy.h |6 ++ lib/analogy/calibration.c | 237 ++- lib/analogy/math.c |8 +- utils/analogy/Makefile.am |2 +- 5 files changed, 252 insertions(+), 10 deletions(-) diff --git a/include/rtdm/analogy.h b/include/rtdm/analogy.h index a87ce54..066d05a 100644 --- a/include/rtdm/analogy.h +++ b/include/rtdm/analogy.h @@ -232,6 +232,15 @@ int a4l_dtoraw(a4l_chinfo_t *chan, int a4l_read_calibration_file(char *name, struct a4l_calibration_data *data); +int a4l_get_softcal_converter(struct a4l_polynomial *converter, + int subd, int chan, int range, + struct a4l_calibration_data *data ); + +int a4l_rawtodcal(a4l_chinfo_t *chan, double *dst, void *src, + int cnt, struct a4l_polynomial *converter); +int a4l_dcaltoraw(a4l_chinfo_t * chan, void *dst, double *src, int cnt, + struct a4l_polynomial *converter); + int a4l_math_polyfit(unsigned order, double *r,double orig, const unsigned dim, double *x, double *y); diff --git a/include/rtdm/uapi/analogy.h b/include/rtdm/uapi/analogy.h index a0a1e59..2d53168 100644 --- a/include/rtdm/uapi/analogy.h +++ b/include/rtdm/uapi/analogy.h @@ -732,6 +732,12 @@ struct a4l_calibration_data { struct a4l_calibration_subdev_data *ao; }; +struct a4l_polynomial { + int expansion; + int order; + int nb_coeff; + double *coeff; +}; #endif /* _RTDM_UAPI_ANALOGY_H */ diff --git a/lib/analogy/calibration.c b/lib/analogy/calibration.c index dcec16d..9fd944c 100644 --- a/lib/analogy/calibration.c +++ b/lib/analogy/calibration.c @@ -20,6 +20,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include math.h #include rtdm/analogy.h #include stdio.h #include errno.h @@ -28,8 +29,39 @@ #include boilerplate/list.h #include calibration.h + #define ARRAY_LEN(a) (sizeof(a) / sizeof((a)[0])) +static lsampl_t data32_get(void *src) +{ + return (lsampl_t) * ((lsampl_t *) (src)); +} + +static lsampl_t data16_get(void *src) +{ + return (lsampl_t) * ((sampl_t *) (src)); +} + +static lsampl_t data8_get(void *src) +{ + return (lsampl_t) * ((unsigned char *)(src)); +} + +static void data32_set(void *dst, lsampl_t val) +{ + *((lsampl_t *) (dst)) = val; +} + +static void data16_set(void *dst, lsampl_t val) +{ + *((sampl_t *) (dst)) = (sampl_t) (0x val); +} + +static void data8_set(void *dst, lsampl_t val) +{ + *((unsigned char *)(dst)) = (unsigned char)(0xff val); +} + static inline int read_dbl(double *d, struct _dictionary_ *f,const char *subd, int subd_idx, char *type, int type_idx) { @@ -73,7 +105,7 @@ static inline int read_int(int *val, struct _dictionary_ *f, const char *subd, } static inline int read_str(char **val, struct _dictionary_ *f, const char *subd, - const char *type) + const char *type) { char *str; int ret; @@ -105,7 +137,7 @@ static inline void write_calibration(FILE *file, char *fmt, ...) void write_calibration_file(FILE *dst, struct list *l, - struct a4l_calibration_subdev *subd, a4l_desc_t *desc) + struct a4l_calibration_subdev *subd, a4l_desc_t *desc) { struct subdevice_calibration_node *e, *t; int i, j = 0; @@ -205,7 +237,7 @@ int a4l_read_calibration_file(char *name, struct a4l_calibration_data *data) if (strncmp(subdevice[k], AI_SUBD_STR, strlen(AI_SUBD_STR)) == 0) { data-ai = malloc(nb_elements * - sizeof(struct a4l_calibration_subdev_data)); + sizeof(struct a4l_calibration_subdev_data)); data-nb_ai = nb_elements; p = data-ai; } @@ -213,7 +245,7 @@ int a4l_read_calibration_file(char *name, struct a4l_calibration_data *data) if (strncmp(subdevice[k], AO_SUBD_STR, strlen(AO_SUBD_STR)) == 0) { data-ao = malloc(nb_elements * - sizeof(struct a4l_calibration_subdev_data)); + sizeof(struct a4l_calibration_subdev_data)); data-nb_ao = nb_elements; p = data-ao; } @@ -232,7 +264,7 @@ int a4l_read_calibration_file(char *name, struct
[Xenomai-git] Philippe Gerum : smokey/sched-quota: force affinity on the test CPU
Module: xenomai-3 Branch: next Commit: a0d78580975974b94795e3a29b0a1704d7b7f785 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=a0d78580975974b94795e3a29b0a1704d7b7f785 Author: Philippe Gerum r...@xenomai.org Date: Mon Oct 27 08:58:15 2014 +0100 smokey/sched-quota: force affinity on the test CPU --- testsuite/smokey/sched-quota/sched-quota.c |7 +++ 1 file changed, 7 insertions(+) diff --git a/testsuite/smokey/sched-quota/sched-quota.c b/testsuite/smokey/sched-quota/sched-quota.c index e8f4347..da1c471 100644 --- a/testsuite/smokey/sched-quota/sched-quota.c +++ b/testsuite/smokey/sched-quota/sched-quota.c @@ -270,8 +270,15 @@ static int run_sched_quota(struct smokey_test *t, int argc, char *const argv[]) pthread_t me = pthread_self(); struct sched_param param; int ret, quota = 0; + cpu_set_t affinity; double effective; + CPU_ZERO(affinity); + CPU_SET(0, affinity); + ret = sched_setaffinity(0, sizeof(affinity), affinity); + if (ret) + error(1, errno, sched_setaffinity); + smokey_parse_args(t, argc, argv); pthread_mutex_init(lock, NULL); pthread_cond_init(barrier, NULL); ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Jorge Ramirez-Ortiz : rtdm/uapi: define PACK_FLAGS using previous definition of PACK
Module: xenomai-3 Branch: next Commit: 8ec0c54431ac402be811a5501c2a01658e4fdad2 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=8ec0c54431ac402be811a5501c2a01658e4fdad2 Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Thu Sep 11 18:03:07 2014 -0400 rtdm/uapi: define PACK_FLAGS using previous definition of PACK --- include/rtdm/uapi/analogy.h |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/rtdm/uapi/analogy.h b/include/rtdm/uapi/analogy.h index 458d5f7..9806c82 100644 --- a/include/rtdm/uapi/analogy.h +++ b/include/rtdm/uapi/analogy.h @@ -248,7 +248,7 @@ typedef struct a4l_dev_info a4l_dvinfo_t; /** * Channel + range + reference + flags definition macro */ -#define PACK_FLAGS(a, b, c, d) (CHAN(a) | RNG(b) | AREF(c) | FLAGS(d)) +#define PACK_FLAGS(a, b, c, d) (PACK(a, b, c) | FLAGS(d)) /** * Analog reference is analog ground ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git
[Xenomai-git] Jorge Ramirez-Ortiz : drivers/analogy: fix warning
Module: xenomai-3 Branch: next Commit: c386253f4c5869abf88d5d7b1271da501f8d0f6b URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=c386253f4c5869abf88d5d7b1271da501f8d0f6b Author: Jorge Ramirez-Ortiz j...@xenomai.org Date: Tue Aug 26 13:51:08 2014 -0400 drivers/analogy: fix warning --- kernel/drivers/analogy/instruction.c |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/drivers/analogy/instruction.c b/kernel/drivers/analogy/instruction.c index 7e7704f..1cbdb14 100644 --- a/kernel/drivers/analogy/instruction.c +++ b/kernel/drivers/analogy/instruction.c @@ -205,7 +205,7 @@ int a4l_do_special_insn(struct a4l_device_context * cxt, struct a4l_kernel_instr int a4l_do_insn(struct a4l_device_context * cxt, struct a4l_kernel_instruction * dsc) { - int ret; + int ret = 0; struct a4l_subdevice *subd; struct a4l_device *dev = a4l_get_dev(cxt); int (*hdlr) (struct a4l_subdevice *, struct a4l_kernel_instruction *) = NULL; ___ Xenomai-git mailing list Xenomai-git@xenomai.org http://www.xenomai.org/mailman/listinfo/xenomai-git