reworking the kluge

This commit is contained in:
tth 2020-02-21 18:05:13 +01:00
부모 e540df566a
커밋 cff083a21d
7개의 변경된 파일151개의 추가작업 그리고 3개의 파일을 삭제

파일 보기

@ -3,6 +3,9 @@
# umpf...
OPTS = -Wall -g -DDEBUG_LEVEL=1
DEPS = Makefile
all: osc-joy osc2cursor text2osc
# ----------------------------------------------------

파일 보기

@ -17,8 +17,12 @@ alsaseq.o: alsaseq.c alsaseq.h Makefile
serial.o: serial.c serial.h Makefile
gcc ${OPTS} -c $<
joyutils.o: joyutils.c joyutils.h Makefile
gcc ${OPTS} -c $<
ncursefuncs.o: ncursefuncs.c ncursefuncs.h Makefile
gcc ${OPTS} -c $<
libpocosc.a: senders.o alsaseq.o serial.o ncursefuncs.o
libpocosc.a: senders.o alsaseq.o serial.o ncursefuncs.o \
joyutils.o
ar r $@ $?

64
functions/joyutils.c Normal file
파일 보기

@ -0,0 +1,64 @@
/*
* joystick utility functions
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/joystick.h>
#include "joyutils.h"
/* ----------------------------------------------------------------- */
static char *type2txt(unsigned char type)
{
static char temp[100];
if (!(type & JS_EVENT_INIT)) {
switch(type) {
case JS_EVENT_BUTTON: return "button";
case JS_EVENT_AXIS: return "axis";
}
}
else {
sprintf(temp, "init %d", type & 0x7f);
return temp;
}
return "???";
}
void dump_my_joystick(char *joy_device)
{
int joy_fd, foo;
struct js_event js;
int flag = 0;
unsigned long debut;
if( ( joy_fd = open(joy_device , O_RDONLY)) == -1 ) {
fprintf(stderr, "%s: couldn't open %s\n", __func__, joy_device);
exit(1);
}
for (;;) {
foo = read(joy_fd, &js, sizeof(struct js_event));
if ( ! flag ) {
debut = js.time;
flag = 1;
}
if (8 != foo) {
fprintf(stderr, "%s: err reading joy\n", __func__);
exit(1);
}
printf("%8lu %4d / %-8s %2d %7d\n",
js.time-debut,
js.type, type2txt(js.type),
js.number, js.value);
}
}
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */

6
functions/joyutils.h Normal file
파일 보기

@ -0,0 +1,6 @@
/*
* joystick utility functions
*/
void dump_my_joystick(char *joy_device);

파일 보기

@ -21,6 +21,7 @@
#include <lo/lo.h>
#include "functions/senders.h"
#include "functions/joyutils.h"
/* default values, can be changed on command line */
@ -39,11 +40,12 @@ char *my_id = MY_TEXT_ID;
static void help(int k)
{
puts("\t * joystick -> osc "__DATE__" *");
puts("\t-D\tdump joystick datas");
puts("\t-r\tremote host ("REMOTE_HOST")");
puts("\t-p\tremote UDP port ("REMOTE_PORT")");
puts("\t-j\tjoystick device ("JOY_DEVICE")");
puts("\t-v\tincrease verbosity");
puts("\t-o\toffset added to button number");
printf("\t-o\toffset added to button number (%d)\n", button_offset);
puts("\t-I\tchange text id (\""MY_TEXT_ID"\")");
exit(0);
}
@ -58,10 +60,12 @@ int opt;
char *remote_host = REMOTE_HOST;
char *remote_port = REMOTE_PORT;
char *joy_device = JOY_DEVICE;
int do_dump = 0;
/* parsing command line options */
while ((opt = getopt(argc, argv, "hp:r:vj:o:I:")) != -1) {
while ((opt = getopt(argc, argv, "Dhp:r:vj:o:I:")) != -1) {
switch (opt) {
case 'D': do_dump = 1; break;
case 'h': help(0); break;
case 'r': remote_host = optarg; break;
case 'p': remote_port = optarg; break;
@ -74,6 +78,11 @@ while ((opt = getopt(argc, argv, "hp:r:vj:o:I:")) != -1) {
}
}
if (do_dump) {
fprintf(stderr, "dumping data from '%s'\n", joy_device);
dump_my_joystick(joy_device);
}
if (verbosity) {
fprintf(stderr, "%s is sending to %s:%s\n", argv[0],
remote_host, remote_port);

2
tools/destinations.liste Normal file
파일 보기

@ -0,0 +1,2 @@
localhost:9001
localhost:9002

60
tools/relay.py Executable file
파일 보기

@ -0,0 +1,60 @@
#!/usr/bin/python
import socket, sys, getopt
# --- default values
RX_UDP_IP = "" # pour ecouter sur toutes les interfaces
RX_UDP_PORT = 5005 # entree du relais
# ---
rx_port = RX_UDP_PORT
verbose = 0
# --- parse command line arguments
options = "hvp:c:"
arguments = sys.argv[1:]
opts, args = getopt.getopt(arguments, options)
for o, a in opts:
print ' ', o, ' --> ', a
if "-v" == o: verbose += 1
elif "-p" == o: rx_port = int(a)
print "listening port : ", rx_port
# ---
cibles = [ ];
for ligne in open("destinations.liste"):
a, p = ligne.replace('\n', '').split(":")
# print a, p
if p: cibles.append((a, int(p)))
for cible in cibles:
print " -> ", cible
# point d'entree, d'ecoute
sock_rx = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock_rx.bind((RX_UDP_IP, rx_port))
# point de sortie vers les autres
sock_tx = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
while True:
data, addr = sock_rx.recvfrom(1024) # buffer size is 1024 bytes
if verbose:
print "got:", addr, " ", len(data)
for cible in cibles:
# print cible
sock_tx.sendto(data, cible)
# hop, ce truc doit fonctionner !