172 lines
4.0 KiB
Python
Executable File
172 lines
4.0 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
|
|
########################################
|
|
# HXbot server module #
|
|
# EoF 2016 EoF@itphx.ru #
|
|
########################################
|
|
|
|
import HX
|
|
import threading
|
|
import socket
|
|
import sys
|
|
import struct
|
|
|
|
|
|
class HXserverClass():
|
|
|
|
def __init__(self, hxbot):
|
|
super(HXserverClass, self).__init__()
|
|
|
|
try:
|
|
self.s = socket.socket(family=socket.AF_INET,
|
|
type=socket.SOCK_DGRAM)
|
|
self.s.bind((HX.SRV_HOST, HX.SRV_PORT))
|
|
self.s.settimeout(HX.SRV_TIMEOUT)
|
|
except OSError as E:
|
|
print(E)
|
|
sys.exit()
|
|
|
|
self.hxbot = hxbot
|
|
|
|
self.hxpower = None
|
|
self.reflex = None
|
|
self.joystick = None
|
|
self.hxlcd = None
|
|
self.hxcam = None
|
|
|
|
self.__e = None
|
|
self.__t = None
|
|
|
|
self.is_running = False
|
|
|
|
def start(self):
|
|
self.hxpower = self.hxbot.hxpower
|
|
self.reflex = self.hxbot.reflex
|
|
self.joystick = self.hxbot.joystick
|
|
self.hxlcd = self.hxbot.hxlcd
|
|
self.hxcam = self.hxbot.hxcam
|
|
|
|
self.__e = threading.Event()
|
|
self.__t = threading.Thread(target=self.__process, args=(self.__e, ))
|
|
|
|
self.__t.start()
|
|
self.is_running = True
|
|
|
|
def stop(self):
|
|
self.__e.set()
|
|
self.__t.join()
|
|
self.is_running = False
|
|
|
|
self.hxpower = None
|
|
self.reflex = None
|
|
self.joystick = None
|
|
self.hxlcd = None
|
|
self.hxcam = None
|
|
|
|
self.__e = None
|
|
self.__t = None
|
|
|
|
def __process(self, stopRequest):
|
|
while not stopRequest.is_set():
|
|
try:
|
|
data = self.s.recvfrom(1024)
|
|
except socket.timeout:
|
|
continue
|
|
|
|
cmd = data[0][0]
|
|
client = data[1]
|
|
|
|
if cmd == HX.SRV_CMD_GET_ALL:
|
|
self.s.sendto(self.__pack_all(), client)
|
|
else:
|
|
pass
|
|
|
|
self.s.close()
|
|
|
|
def __pack_all(self):
|
|
# INIT
|
|
pw = self.hxpower
|
|
rf = self.reflex
|
|
lc = self.hxlcd
|
|
|
|
ca = self.hxcam
|
|
if ca is not None:
|
|
ca_mcam_state = ca.mcam_state
|
|
ca_rcam_state = ca.rcam_state
|
|
ca_mmic_state = ca.mmic_state
|
|
else:
|
|
ca_mcam_state = 2
|
|
ca_rcam_state = 2
|
|
ca_mmic_state = 2
|
|
|
|
js = self.joystick
|
|
if js is not None:
|
|
js_online = js.online
|
|
else:
|
|
js_online = False
|
|
|
|
result = struct.pack(
|
|
'fffffffffff??????????????????????????????????????????????BBB',
|
|
pw.vcc,
|
|
pw.vin,
|
|
pw.vdc,
|
|
pw.vbt,
|
|
pw.vba,
|
|
pw.vpf,
|
|
pw.vzu,
|
|
pw.abt,
|
|
pw.aba,
|
|
pw.ain,
|
|
pw.ahx,
|
|
pw.online,
|
|
pw.vcc_ok,
|
|
pw.vin_ok,
|
|
pw.vdc_ok,
|
|
pw.vbt_ok,
|
|
pw.vba_ok,
|
|
pw.vpf_ok,
|
|
pw.vzu_ok,
|
|
pw.abt_ok,
|
|
pw.aba_ok,
|
|
pw.ain_ok,
|
|
pw.ahx_ok,
|
|
pw.bt_enabled,
|
|
pw.ba_enabled,
|
|
pw.bt_blocked,
|
|
pw.ba_blocked,
|
|
pw.vcc_low,
|
|
pw.vcc_high,
|
|
pw.vin_low,
|
|
pw.vin_high,
|
|
pw.vdc_low,
|
|
pw.vdc_high,
|
|
pw.vbt_low,
|
|
pw.vbt_full,
|
|
pw.vba_low,
|
|
pw.vba_full,
|
|
pw.vpf_low,
|
|
pw.vpf_high,
|
|
pw.vzu_low,
|
|
pw.vzu_high,
|
|
pw.abt_low,
|
|
pw.abt_high,
|
|
pw.aba_low,
|
|
pw.aba_high,
|
|
pw.ain_low,
|
|
pw.ain_high,
|
|
pw.ahx_low,
|
|
pw.ahx_high,
|
|
pw.mv_enabled,
|
|
pw.us_enabled,
|
|
pw.in_plugged,
|
|
pw.ba_full,
|
|
pw.bt_full,
|
|
rf.online,
|
|
js_online,
|
|
lc.online,
|
|
ca_mcam_state,
|
|
ca_rcam_state,
|
|
ca_mmic_state)
|
|
|
|
return result
|