Merge branch 'master' of https://github.com/RetroBSD/retrobsd
This commit is contained in:
@@ -10,7 +10,6 @@ include $(TOPSRC)/target.mk
|
||||
|
||||
OBJS = adc-demo.o
|
||||
SRCS = adc-demo.c
|
||||
LIBS += -lcurses -ltermcap -lc
|
||||
|
||||
all: adc-demo
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user