brix5 / applications / sliposc / serialtoosc.py @ 4d6aa081
History | View | Annotate | Download (3.704 KB)
| 1 |
#!/usr/bin/env python3
|
|---|---|
| 2 |
#vim:ts=2:sw=2:expandtab:autoindent
|
| 3 |
#v 0.1
|
| 4 |
#dumb router
|
| 5 |
#echos serial from serial port to a udp socket
|
| 6 |
#
|
| 7 |
# BUG: Corrupted messages, even crash sclang
|
| 8 |
# [ /sensors/, ms, 19300, eX, -7.875, eY, 16, eZ, 0, aX, 2.7000000476837, aY, 9.3199996948242, aZ, -1.3700000047684, gX, 0, gY, 0, gZ, 0.0625, calSys, 0, calAcc, 3, calGyr, 1, calMag, 0, Pa, 94696.84375 ]
|
| 9 |
#nil
|
| 10 |
#acc -2/-2/-2 gyro -2/-2/-2 euler -2/-2/-2
|
| 11 |
#bnoX/Y 0.05 0.05 -1.5 0.02 bnoX/Y 0.05 0.05 -1.5 0.02 [ /sensors/, ms, 20300, eX, -7.875, eY, 7.1728720664978, ��V��, 0, @0��, 4.286162823218e-39, �, 1.4349296274686e-42, , 2.7451219558716, �, 5.0638562171084e+19, �, 5.0638562171084e+19, �, 2.3509887016446e-38, , 8.00048828125, , 2.7292528152466, �, 7.1746481373431e-43, , 0, , 9.9746769275256e-15 ]
|
| 12 |
#nil
|
| 13 |
#acc -2/-2/-2 gyro -2/-2/-2 euler -2/-2/-2
|
| 14 |
#bnoX/Y 0.05 0.05 -1.5 0.02 [ /sensors/, ms, 26300, eX, -7.875, eY, 16, eZ, 0, aX, 2.6900000572205, aY, 9.3599996566772, aZ, -1.3600000143051, gX, -0.0625, gY, -0.125, gZ, 0, calSys, 0, calAcc, 3, calGyr, 1, calMag, 0, Pa, 94695.546875 ]
|
| 15 |
#nil
|
| 16 |
#acc -2/-2/-2 gyro -2/-2/-2 euler -2/-2/-2
|
| 17 |
#bnoX/Y 0.05 0.05 -1.5 0.02 ERROR: OSC messages must have type tags. lSys
|
| 18 |
#[ /sensors/, ms, 29300, eX, -7.875, eY, 16, eZ, 0, aX, 2.6600000858307, aY, 9.3500003814697, aZ, -1.3400000333786, gX, 0, gY, -0.0625, gZ, 0, calSys, 0, calAcc, 3, calGyr, 1, calMag, 0, Pa, 94696.6875 ]
|
| 19 |
#nil
|
| 20 |
#acc -2/-2/-2 gyro -2/-2/-2 euler -2/-2/-2
|
| 21 |
#bnoX/Y 0.05 0.05 -1.5 0.02 [ /sensors/, ms, 30300, eX, -7.875, eY, 7.1728839874268, ��[��, 0, @0��, 4.286162823218e-39, �, 1.4349296274686e-42, , 2.7451219558716, �, 5.0638562171084e+19, �, 5.0638562171084e+19, �, 2.3509887016446e-38, , 8.00048828125, , 2.7292528152466, �, 7.1746481373431e-43, , 0, , 9.9746769275256e-15 ]
|
| 22 |
#nil
|
| 23 |
#acc -2/-2/-2 gyro -2/-2/-2 euler -2/-2/-2
|
| 24 |
#bnoX/Y 0.05 0.05 -1.5 0.02 [ /sensors/, ms, 33290, eX, -7.875, eY, 16, eZ, 0, aX, 2.6900000572205, aY, 9.3599996566772, aZ, -1.3500000238419, gX, 0, gY, 0.125, gZ, 0.125, calSys, 0, calAcc, 3, calGyr, 1, calMag, 0, Pa, 94694.421875 ]
|
| 25 |
#nil
|
| 26 |
#
|
| 27 |
#TODO: OSC client as well
|
| 28 |
#TODO: OSCQuery everything
|
| 29 |
from IPython import embed |
| 30 |
|
| 31 |
# local packages
|
| 32 |
import os, sys |
| 33 |
path = os.path.realpath(__file__).split('/')
|
| 34 |
package_path = path[:-1]
|
| 35 |
#package_path.append('python-packages')
|
| 36 |
package_path.append('SlipLib/src')
|
| 37 |
sys.path.append('/'.join(package_path))
|
| 38 |
|
| 39 |
import serial |
| 40 |
import sliplib |
| 41 |
import socket |
| 42 |
import socketserver |
| 43 |
|
| 44 |
from time import sleep |
| 45 |
#import threading
|
| 46 |
|
| 47 |
DEBUG = False
|
| 48 |
|
| 49 |
if(len(sys.argv) > 1 and sys.argv[1] == '-v'): |
| 50 |
DEBUG = True
|
| 51 |
|
| 52 |
TARGET_HOST="127.0.0.1"
|
| 53 |
TARGET_PORTS=[1234, 57120, 57121, 57122]; |
| 54 |
TARGET_PORT=1234
|
| 55 |
|
| 56 |
#RECV_PORT=9999
|
| 57 |
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) |
| 58 |
#sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # default socket
|
| 59 |
#slipsocket = sliplib.SlipSocket(sock)
|
| 60 |
#slipsocket.create_connection((TARGET_HOST, TARGET_PORT))
|
| 61 |
|
| 62 |
#TODO:autodetect serialport
|
| 63 |
ser = serial.Serial('/dev/ttyACM0',9600) |
| 64 |
drv = sliplib.Driver() |
| 65 |
messages = [] |
| 66 |
|
| 67 |
#embed()
|
| 68 |
while True: |
| 69 |
# slipsocket.driver
|
| 70 |
#TODO: handle drv errors on improper packet
|
| 71 |
messages = drv.receive(ser.read(ser.inWaiting())) |
| 72 |
|
| 73 |
if DEBUG:
|
| 74 |
print(len(messages), " messages in read") |
| 75 |
|
| 76 |
# embed()
|
| 77 |
for msg in messages: |
| 78 |
if DEBUG:
|
| 79 |
print(len, msg)
|
| 80 |
try:
|
| 81 |
if not sliplib.is_valid(msg): |
| 82 |
for port in TARGET_PORTS: |
| 83 |
sock.sendto(msg, (TARGET_HOST, port)) |
| 84 |
|
| 85 |
except sliplib.ProtocolError:
|
| 86 |
if DEBUG:
|
| 87 |
print ("Invalid Packet received") |
| 88 |
|
| 89 |
print("---");
|
| 90 |
sleep(0.1)
|
| 91 |
slipsocket.close() |
| 92 |
sock.close() |
| 93 |
|
| 94 |
#import subprocess, shlex
|
| 95 |
#sc_port_cmd = "lsof -p `pidof sclang`|grep UDP|awk '{ print $9}'|cut -d: -f2"
|
| 96 |
#sp = subprocess.Popen(sc_port_cmd, stdout=subprocess.PIPE, shell=True)
|
| 97 |
#print(sp.returncode)
|
| 98 |
|