Blame view

simulators/CameraNIR.py 4.99 KB
b53dbffe   haribo   Date: 22/07/2016
1
2
3
4
import configparser
import socket
from enum import Enum
import time
aed99094   haribo   Debug routine MGR...
5
6
import os
from random import randint
b53dbffe   haribo   Date: 22/07/2016
7

aed99094   haribo   Debug routine MGR...
8
IMAGES_FOLDER = '../src/images'
b53dbffe   haribo   Date: 22/07/2016
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CONFIG_FILE = "socket_config.ini"

EXPOSURE_TIME = 5
SHUTTER_TIME = 3
COOLER_TIME = 10

class ReadmodeEnum(Enum):
    ramp = "Ramp"
    # TODO: définir les modes de lecture

class ShutterEnum(Enum):
    synchro = "Synchro"
    closed = "Closed"
    opened = "Opened"


00fa2456   haribo   Debug adaption code
25
class CameraNIR():
b53dbffe   haribo   Date: 22/07/2016
26
27
28
29
30
31
32
33
34
35
    def __init__(self):
        config = configparser.ConfigParser()
        config.read(CONFIG_FILE)

        ip = config.get("CameraNIR", "ip")
        port = int(config.get("CameraNIR", "port"))

        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.sock.bind((ip, port))
ddf59dd4   haribo   Remaniement :
36
        self.sock.listen(122)
b53dbffe   haribo   Date: 22/07/2016
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

        self.set_msgs = [
            ("WINDOW", [4, ], int),
            ("READMODE", [1, ], ReadmodeEnum),
            ("FILENAME", [1, ], str),
            ("HEADER", [1, ], dict),
            ("READOUT_FREQUENCY", [1, ], float),
            ("NB_IMAGES", [1, ], int),
        ]

        self.get_msgs = [
            "STATUS",
            "SETUP",
            "TEMPERATURE",
            "TIMER",
        ]

        self.do_msgs = [
            ("COOLER", [2, ], float),
            ("SHUTTER", [1, ], ShutterEnum),
            ("START", [0, ]),
            ("ABORT", [0, ]),
            ("STOP", [0, ]),
        ]

        ''' I will just fill the attributes with their names and params without regarding them '''
        self.attributes = {}
aed99094   haribo   Debug routine MGR...
64
        self.attributes["FILENAME"] = "default_nir_" + str(randint(1, 10000))
b53dbffe   haribo   Date: 22/07/2016
65
66
67
68
69
70

        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
b53dbffe   haribo   Date: 22/07/2016
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

        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"
00fa2456   haribo   Debug adaption code
93
                print("Ended cooling")
b53dbffe   haribo   Date: 22/07/2016
94
95
            if shutter_timer != 0 and time.time() > shutter_timer:
                shutter_timer = 0
00fa2456   haribo   Debug adaption code
96
97
98
99
                print("Ended shutter")
            if exposure_timer > 0 and time.time() > exposure_timer:
                exposure_timer = -1
                print("Ended exposure")
db882807   haribo   Date: 02/08/2016
100
101
                with open(os.path.join(IMAGES_FOLDER, self.attributes["FILENAME"]), 'w'):
                    pass
b53dbffe   haribo   Date: 22/07/2016
102
103
104
105
106
107
108
109

            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":
aed99094   haribo   Debug routine MGR...
110
111
                    if cmd == "FILENAME":
                        if len(args) > 0:
db882807   haribo   Date: 02/08/2016
112
                            self.attributes["FILENAME"] = " ".join(args)
aed99094   haribo   Debug routine MGR...
113
114
115
116
                        else:
                            print("An argument is needed for the FILENAME command")
                    else:
                        self.attributes[cmd] = args
b53dbffe   haribo   Date: 22/07/2016
117
118
119
120
121
122
123
124
                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":
00fa2456   haribo   Debug adaption code
125
126
127
128
                        if exposure_timer > 0:
                            answer = str(int(exposure_timer - time.time()))
                        else:
                            answer = str(exposure_timer)
b53dbffe   haribo   Date: 22/07/2016
129
130
131
132
133
134
135
                    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":
00fa2456   haribo   Debug adaption code
136
                        exposure_timer = -1
b53dbffe   haribo   Date: 22/07/2016
137
                    elif cmd == "ABORT":
00fa2456   haribo   Debug adaption code
138
                        exposure_timer = -1
b53dbffe   haribo   Date: 22/07/2016
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
                    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()

00fa2456   haribo   Debug adaption code
154
cam = CameraNIR()
b53dbffe   haribo   Date: 22/07/2016
155
cam.loop()