import socket from enum import Enum import time import os from random import randint from Device import Device IMAGES_FOLDER = '../src/misc/images' EXPOSURE_TIME = 5 SHUTTER_TIME = 3 COOLER_TIME = 10 class Camera(Device): def __init__(self, camera_name): super().__init__(camera_name) ''' I will just fill the attributes with their names and params without regarding them ''' self.attributes = {} if camera_name == "CameraVIS": self.attributes["FILENAME"] = "default_vis_" + str(randint(1, 10000)) else: self.attributes["FILENAME"] = "default_nir_" + str(randint(1, 10000)) self.status = "IDLE" self.shutter_status = "CLOSE" def loop(self): # à gérer : la réception des paramètres, le temps de shutter (et son statut), le temps de start, le stop, le abort, la création d'images cooler_timer = 0 shutter_timer = 0 exposure_timer = 0 while True: try: conn, addr = self.sock.accept() except socket.error as e: print("There was a socket error: " + repr(e)) break data = conn.recv(128).decode() # print("Received: " + data) answer = "" cut_data = data.split(" ") if cooler_timer != 0 and time.time() > cooler_timer: cooler_timer = 0 status = "IDLE" print("Ended cooling") if shutter_timer != 0 and time.time() > shutter_timer: shutter_timer = 0 print("Ended shutter") if exposure_timer > 0 and time.time() > exposure_timer: exposure_timer = -1 print("Ended exposure") with open(os.path.join(IMAGES_FOLDER, self.attributes["FILENAME"]), 'w'): pass if len(cut_data) < 2: print("Invalid message: " + data) else: cmd_type = cut_data[0] cmd = cut_data[1] args = cut_data[2:] if cmd_type == "SET": if cmd == "FILENAME": if len(args) > 0: self.attributes["FILENAME"] = " ".join(args) else: print("An argument is needed for the FILENAME command") else: self.attributes[cmd] = args elif cmd_type == "GET": if cmd == "STATUS": answer = self.status elif cmd == "TEMPERATURE": answer = "GET TEMPERATURE answer not implemented" elif cmd == "SETUP": answer = "GET SETUP answer not implemented" elif cmd == "TIMER": if exposure_timer > 0: answer = str(int(exposure_timer - time.time())) else: answer = str(exposure_timer) else: answer = "Invalid cmd for GET: " + cmd print(answer) elif cmd_type == "DO": if cmd == "START": exposure_timer = time.time() + EXPOSURE_TIME elif cmd == "STOP": exposure_timer = -1 elif cmd == "ABORT": exposure_timer = -1 elif cmd == "COOLER": cooler_timer = time.time() + COOLER_TIME elif cmd == "SHUTTER": shutter_timer = time.time() + SHUTTER_TIME else: print("Invalid cmd for GET: " + cmd) else: print("Invalid message: " + data) if len(answer) > 0: conn.send(bytes(answer, "UTF-8")) # print("send: " + answer) conn.close()