This commit is contained in:
Sergey
2015-05-14 22:52:27 -07:00
66 changed files with 801 additions and 232 deletions

View File

@@ -10,7 +10,6 @@ include $(TOPSRC)/target.mk
OBJS = adc-demo.o
SRCS = adc-demo.c
LIBS += -lcurses -ltermcap -lc
all: adc-demo

View File

@@ -1,93 +1,63 @@
#include <stdlib.h>
#include <stdio.h>
#include <curses.h>
#include <fcntl.h>
#include <sys/adc.h>
#include <unistd.h>
int fd[16];
int value[16];
WINDOW *win;
struct channel {
int fd;
int value;
char enabled;
};
void putsym(int c, int count)
{
while (count-- > 1)
putchar(c);
}
int main(int argc, char **argv)
{
struct channel channels[16];
char temp[100];
int i;
char buf[100];
int i, opt;
long flags;
int value;
const char opts[] = ":d:";
int opt;
unsigned long delay = 100;
unsigned long delay_msec = 100;
for(i=0; i<16; i++)
channels[i].enabled = 1;
while((opt = getopt(argc, argv, opts)) != -1)
{
switch(opt)
{
while ((opt = getopt(argc, argv, ":d:")) != -1) {
switch (opt) {
case 'd':
delay = atol(optarg);
delay_msec = strtol(optarg, 0, 0);
break;
}
}
for(i=0; i<16; i++)
{
if(channels[i].enabled == 1)
{
sprintf(temp,"/dev/adc%d",i);
channels[i].fd = open(temp,O_RDWR);
if(!channels[i].fd)
{
printf("Error: unable to open %s\n",temp);
exit(10);
}
fcntl(channels[i].fd,F_GETFD,&flags);
flags |= O_NONBLOCK;
fcntl(channels[i].fd,F_SETFD,&flags);
for (i=0; i<16; i++) {
sprintf(buf, "/dev/adc%d", i);
fd[i] = open(buf, O_RDWR);
if (fd[i] < 0) {
perror(buf);
return -1;
}
fcntl(fd[i], F_GETFD, &flags);
flags |= O_NONBLOCK;
fcntl(fd[i], F_SETFD, &flags);
}
win = initscr();
/* Clear screen. */
printf("\33[2J");
clear();
while(1)
{
clear();
for(i=0; i<16; i++)
{
if(channels[i].enabled == 1)
{
if(read(channels[i].fd,temp,20))
{
if(sscanf(temp,"%d",&value))
{
channels[i].value = value;
}
}
sprintf(temp,"adc%-2d %4d ",i,channels[i].value);
mvwaddstr(win,i,0,temp);
for(value=0; value<channels[i].value>>4; value++)
{
mvwaddch(win,i,value+11,'=');
}
// clrtoeol();
for (;;) {
/* Top of screen. */
printf("\33[H");
for (i=0; i<16; i++) {
if (read(fd[i], buf, 20) > 0) {
value[i] = strtol(buf, 0, 0);
}
printf("adc%-2d %4d ", i, value[i]);
putsym('=', value[i] >> 4);
/* Clear to end of line. */
printf("\33[K");
printf("\n");
}
refresh();
usleep(delay * 1000);
usleep(delay_msec * 1000);
}
for(i=0; i<16; i++)
{
close(channels[i].fd);
}
endwin();
}