brix5 / applications / sliposc / serialtoosc.py @ d83f65fc
History | View | Annotate | Download (1.758 KB)
1 | 5ef3477f | Jan | #!/usr/bin/env python3
|
---|---|---|---|
2 | edc6c2e7 | Jan | #vim:ts=2:sw=2:expandtab:autoindent
|
3 | 5ef3477f | Jan | #v 0.1
|
4 | #dumb router
|
||
5 | #echos serial from serial port to a udp socket
|
||
6 | #
|
||
7 | #TODO: OSC client as well
|
||
8 | #TODO: OSCQuery everything
|
||
9 | d83f65fc | Jan | from IPython import embed |
10 | 5ef3477f | Jan | |
11 | # local packages
|
||
12 | import os, sys |
||
13 | path = os.path.realpath(__file__).split('/')
|
||
14 | package_path = path[:-1]
|
||
15 | #package_path.append('python-packages')
|
||
16 | package_path.append('SlipLib/src')
|
||
17 | sys.path.append('/'.join(package_path))
|
||
18 | |||
19 | import serial |
||
20 | d83f65fc | Jan | import sliplib |
21 | 5ef3477f | Jan | import socket |
22 | import socketserver |
||
23 | d83f65fc | Jan | |
24 | 5ef3477f | Jan | from time import sleep |
25 | d83f65fc | Jan | #import threading
|
26 | 5ef3477f | Jan | |
27 | edc6c2e7 | Jan | DEBUG = False
|
28 | |||
29 | if(len(sys.argv) > 1 and sys.argv[1] == '-v'): |
||
30 | DEBUG = True
|
||
31 | |||
32 | d83f65fc | Jan | TARGET_HOST="127.0.0.1"
|
33 | TARGET_PORTS=[1234, 57120, 57121, 57122]; |
||
34 | TARGET_PORT=1234
|
||
35 | edc6c2e7 | Jan | |
36 | 5ef3477f | Jan | #RECV_PORT=9999
|
37 | sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) |
||
38 | d83f65fc | Jan | #sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # default socket
|
39 | #slipsocket = sliplib.SlipSocket(sock)
|
||
40 | #slipsocket.create_connection((TARGET_HOST, TARGET_PORT))
|
||
41 | 5ef3477f | Jan | |
42 | #TODO:autodetect serialport
|
||
43 | ser = serial.Serial('/dev/ttyACM0',9600) |
||
44 | edc6c2e7 | Jan | drv = sliplib.Driver() |
45 | d83f65fc | Jan | messages = [] |
46 | 5ef3477f | Jan | |
47 | d83f65fc | Jan | #embed()
|
48 | 5ef3477f | Jan | while True: |
49 | d83f65fc | Jan | # slipsocket.driver
|
50 | 5ef3477f | Jan | #TODO: handle drv errors on improper packet
|
51 | messages = drv.receive(ser.read(ser.inWaiting())) |
||
52 | edc6c2e7 | Jan | |
53 | if DEBUG:
|
||
54 | print(len(messages), " messages in read") |
||
55 | |||
56 | d83f65fc | Jan | # embed()
|
57 | 5ef3477f | Jan | for msg in messages: |
58 | d83f65fc | Jan | if DEBUG:
|
59 | print(len, msg)
|
||
60 | edc6c2e7 | Jan | try:
|
61 | d83f65fc | Jan | if not sliplib.is_valid(msg): |
62 | for port in TARGET_PORTS: |
||
63 | sock.sendto(msg, (TARGET_HOST, port)) |
||
64 | |||
65 | edc6c2e7 | Jan | except sliplib.ProtocolError:
|
66 | if DEBUG:
|
||
67 | print ("Invalid Packet received") |
||
68 | |||
69 | print("---");
|
||
70 | d83f65fc | Jan | sleep(0.1)
|
71 | slipsocket.close() |
||
72 | 5ef3477f | Jan | sock.close() |
73 | d83f65fc | Jan | |
74 | #import subprocess, shlex
|
||
75 | #sc_port_cmd = "lsof -p `pidof sclang`|grep UDP|awk '{ print $9}'|cut -d: -f2"
|
||
76 | #sp = subprocess.Popen(sc_port_cmd, stdout=subprocess.PIPE, shell=True)
|
||
77 | #print(sp.returncode)
|