diff --git a/cam_poo.py b/cam_poo.py index 1d365a25ca08c43462151d6b445d977e983fe18d..e5d5bec3a10b731560b08fc24f4e0799cc4ad463 100644 --- a/cam_poo.py +++ b/cam_poo.py @@ -1,42 +1,53 @@ import socket -UDP_IP = "192.168.0.100" +"192.168.0.100" UDP_PORT = 52381 -sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP - class Camera: - def __init__(self, seq_num: hex): + def __init__(self, UDP_IP,UDP_PORT, seq_num: hex ="0", VV= "09", WW= "09"): + """ + Création d'une caméra + :param UDP_IP: IP de la caméra (192.168.0.100 par défaut) + :param UDP_PORT: Port de la caméra (52381 par défaut) + :param seq_num: sequence number de départ + :param VV: Vitesse + :param WW: Vitesse + """ self.seq_num = seq_num # erreur du capteur UWB (p pour précision...) - self.VV = "09" - self.WW = "09" + self.VV = VV + self.WW = WW + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP + self.UDP_IP = UDP_IP - def abs2payload(self, LYZ: list) -> list: # L[0]="YYYY" L[1]="ZZZZ" - payload = "81 01 06 02" # Absolute postition + def move_to_absolute_position(YCoordinates, ZCoordinates): + payload = "81 01 06 02" # Absolute position moove payload = payload + self.VV + self.WW # add move speed for i in LYZ: # add position for j in i: payload = payload + "0" + j payload = payload + "FF" # end byte - payloadtype = "01 00" - return [payloadtype, payload] + header = self.payload2header(self, payload) + payloadtype = '01 00' + message = payloadtype + header + payload + return message + + def payload2header(self, payload: str) -> str: # hex + lenght = hex(len(payload.replace(' ', ''))) + payloadlenght = lenght[2:] + if len(lenght) == 1: + payloadlenght = '0' + payloadlenght - def payload2message(self, payloadL: list) -> str: # hex - payloadtype = payloadL[0] - payload = payloadL[1] - payloadlenght = "0F" # a coder - header = payloadtype + payloadlenght + header = payloadlenght header = header + ('0' * (8 - len(str(self.seq_num))) + str(self.seq_num)) - message = header + payload - return message + return header def send(self, message: str) -> bool: - sock.sendto(bytes.fromhex(message.replace(' ', '')), (UDP_IP, UDP_PORT)) + self.sock.sendto(bytes.fromhex(message.replace(' ', '')), (self.UDP_IP, self.UDP_PORT)) self.seq_num += 1 # ballec de l'hexa pour l'instant print("fait " + self.seq_num) return True - def zqsd2payload(self, x: str) -> str: # hex + def zqsd(self, x: str) -> str: # hex payload = "FF" # message d'erreur à refaire if x == 'd': # payload = "81 01 06 03 VV WW 0Y 0Y 0Y 0Y 00 00 00 00 FF YYYY de DE00 à 2200 center 0000 @@ -44,26 +55,32 @@ class Camera: if x == 'q': payload = "81 01 06 03 09 09 0F 0E 0D 0E 00 00 00 00 FF" if x == 'z': - payload = "81 01 06 03 09 09 0F 0E 0D 0E 00 00 00 00 FF" # nonfonctionnel + payload = "81 01 06 03 09 09 0F 0E 0D 0E 00 00 09 0A FF" if x == 's': - payload = "81 01 06 03 09 09 0F 0E 0D 0E 00 00 00 00 FF" # nonfonctionnel - payloadtype = "01 00" - return [payloadtype, payload] + payload = "81 01 06 03 09 09 0F 0E 0D 0E 0F 0F 06 06 FF" + header = self.payload2header(self, payload) + payloadtype = '01 00' + message = payloadtype + header + payload + return message - def zoom2payload(self, n: int) -> str: # hex #faire une version zoom + / zoom - + def zoom(self, n: int) -> str: # hex #faire une version zoom + / zoom - if n == 0: payload = "81 01 04 47 00 00 00 00 FF" if n == 2: payload = "81 01 04 47 01 06 0A 01 FF" payloadtype = "01 00" - - return [payloadtype, payload] + header = self.payload2header(self, payload) + message = payloadtype + header + payload + return message def focus(self, b: bool) -> str: # hex #focus2payload(0) = autofocus if b: payload = "81 01 04 38 02 FF" # autofocus else: payload = "81 01 04 38 03 FF" + header = self.payload2header(self, payload) payloadtype = "01 00" - return [payloadtype, payload] + message = payloadtype + header + payload + return message +