Commit 0538ed53047c1c5592432d523d9d18dac6cd0d18
1 parent
1b4dae11
Exists in
dev
cleanup
Showing
2 changed files
with
29 additions
and
54 deletions
Show diff stats
src/device_controller/abstract_component/device_controller.py
@@ -36,6 +36,7 @@ from src.logpyros import LogPyros | @@ -36,6 +36,7 @@ from src.logpyros import LogPyros | ||
36 | ##from src_device.client.client_channel import * | 36 | ##from src_device.client.client_channel import * |
37 | sys.path.append("../..") | 37 | sys.path.append("../..") |
38 | ##from device_controller.logs import * | 38 | ##from device_controller.logs import * |
39 | +from device_controller.channels.client_channel import ChannelCommunicationException | ||
39 | from device_controller.channels.client_channel_socket import ClientChannelSocket | 40 | from device_controller.channels.client_channel_socket import ClientChannelSocket |
40 | from device_controller.channels.client_channel_serial import ClientChannelSerial | 41 | from device_controller.channels.client_channel_serial import ClientChannelSerial |
41 | from device_controller.channels.client_channel_usb import ClientChannelUSB | 42 | from device_controller.channels.client_channel_usb import ClientChannelUSB |
@@ -1075,9 +1076,22 @@ class DeviceController(): | @@ -1075,9 +1076,22 @@ class DeviceController(): | ||
1075 | 1076 | ||
1076 | """ | 1077 | """ |
1077 | self.tprintd("NATIVE Command to send is "+ repr(native_cmd)) | 1078 | self.tprintd("NATIVE Command to send is "+ repr(native_cmd)) |
1078 | - #self.send_request(native_cmd) | ||
1079 | - self.send_native_cmd(native_cmd) | ||
1080 | - native_res = self.receive_data() | 1079 | + |
1080 | + # SEND command TO my device | ||
1081 | + try: | ||
1082 | + #self.send_request(native_cmd) | ||
1083 | + self.send_native_cmd(native_cmd) | ||
1084 | + except ChannelCommunicationException as e: | ||
1085 | + self.log_e("Channel error while sending command", e) | ||
1086 | + raise | ||
1087 | + | ||
1088 | + # RECEIVE device answer FROM my device | ||
1089 | + try: | ||
1090 | + native_res = self.receive_data() | ||
1091 | + except ChannelCommunicationException as e: | ||
1092 | + self.log_e("Channel error while sending command", e) | ||
1093 | + raise | ||
1094 | + | ||
1081 | if self.means_unknown_cmd(native_res): raise UnknownNativeCmdException(native_cmd) | 1095 | if self.means_unknown_cmd(native_res): raise UnknownNativeCmdException(native_cmd) |
1082 | if self.is_unknown_res(native_res): raise UnknownNativeResException(native_res) | 1096 | if self.is_unknown_res(native_res): raise UnknownNativeResException(native_res) |
1083 | return native_res | 1097 | return native_res |
@@ -1164,55 +1178,9 @@ class DeviceController(): | @@ -1164,55 +1178,9 @@ class DeviceController(): | ||
1164 | 1178 | ||
1165 | :param generic_cmd: str like "get_ra" or "set_ra" or "do_park"... | 1179 | :param generic_cmd: str like "get_ra" or "set_ra" or "do_park"... |
1166 | :param value: only for a "set_" cmd | 1180 | :param value: only for a "set_" cmd |
1167 | - | ||
1168 | - General Algo: | ||
1169 | - | ||
1170 | - A - REQUEST (QUESTION) management: | ||
1171 | - | ||
1172 | - (1) nc = get_native_cmd_for_generic(gc) | ||
1173 | - // can raise NotImplementedNativeCmdException (concrete) | ||
1174 | - // (use gen2nat_cmds) | ||
1175 | - | ||
1176 | - (2) na = get_native_answer_for_native_cmd_from_device(nc) | ||
1177 | - // can raise UnknownNativeCmdException | ||
1178 | - // or UnknownNativeAnswerException | ||
1179 | - // or ChannelCommunicationError | ||
1180 | - | ||
1181 | - B - ANSWER management: | ||
1182 | - | ||
1183 | - (3) ga = get_generic_answer_for_native(na) | ||
1184 | - // can raise NotImplementedGenericAnswerException | ||
1185 | - // (use gen2nat_cmds) | ||
1186 | - | ||
1187 | - (4) send_generic_answer(ga) | ||
1188 | - // can raise ChannelCommunicationError | ||
1189 | - | ||
1190 | ''' | 1181 | ''' |
1191 | - self.tprintd("(DC):exec_generic_cmd() from", self) | ||
1192 | - | ||
1193 | - ''' | ||
1194 | - # If generic_cmd is for a specific device component (dc), pass it to this dc (instead of me) | ||
1195 | - ####if dc_component_type and dc_component_type not in self.__class__.__name__ : | ||
1196 | - if dcc_type: | ||
1197 | - | ||
1198 | - # Get the dcc in charge of this command | ||
1199 | - try: | ||
1200 | - dcc = self.get_dc_component_for_type(dcc_type) | ||
1201 | - self.tprintd("*** EXECUTÉ PAR COMPONENT", dcc) | ||
1202 | - except DCCNotFoundException as e: | ||
1203 | - self.log_e(f"THREAD EXCEPTION caught by {type(self).__name__} (from dcc)", e) | ||
1204 | - raise | ||
1205 | - #return (DCC)(self.exec_generic_cmd(generic_cmd, values_to_set, None)) | ||
1206 | 1182 | ||
1207 | - # Delegate cmd execution to the dcc | ||
1208 | - try: | ||
1209 | - return dcc.exec_generic_cmd(generic_cmd, values_to_set, None) | ||
1210 | - except UnimplementedGenericCmdException as e: | ||
1211 | - self.log_e(f"THREAD EXCEPTION caught by {type(self).__name__} (from dcc)", e) | ||
1212 | - raise | ||
1213 | - # not executed ? | ||
1214 | - return None | ||
1215 | - ''' | 1183 | + self.tprintd("(DC):exec_generic_cmd() from", self) |
1216 | #log_d("\n\nGENERIC Command to send is "+generic_cmd) | 1184 | #log_d("\n\nGENERIC Command to send is "+generic_cmd) |
1217 | self.tprintd("\n(DC): GENERIC Command to execute is ", generic_cmd) | 1185 | self.tprintd("\n(DC): GENERIC Command to execute is ", generic_cmd) |
1218 | ##printd("(DC): My ("+type(self).__name__+") commands are:", self._gen2nat_cmds) | 1186 | ##printd("(DC): My ("+type(self).__name__+") commands are:", self._gen2nat_cmds) |
@@ -1239,7 +1207,9 @@ class DeviceController(): | @@ -1239,7 +1207,9 @@ class DeviceController(): | ||
1239 | native_cmd = native_cmd_infos[0] | 1207 | native_cmd = native_cmd_infos[0] |
1240 | if not native_cmd: raise UnimplementedGenericCmdException(generic_cmd) | 1208 | if not native_cmd: raise UnimplementedGenericCmdException(generic_cmd) |
1241 | 1209 | ||
1242 | - # MACRO-COMMAND (ex: native_cmd == "do_goto", "do_init", "get_radec") | 1210 | + # 2) MACRO-COMMAND or NORMAL NATIVE COMMAND ? |
1211 | + | ||
1212 | + # 2.a) MACRO-COMMAND (ex: native_cmd == "do_goto", "do_init", "get_radec") | ||
1243 | if native_cmd == generic_cmd: | 1213 | if native_cmd == generic_cmd: |
1244 | self.tprintd("MACRO-COMMAND") | 1214 | self.tprintd("MACRO-COMMAND") |
1245 | #printd("cmd,val", native_cmd, values_to_set) | 1215 | #printd("cmd,val", native_cmd, values_to_set) |
@@ -1254,7 +1224,7 @@ class DeviceController(): | @@ -1254,7 +1224,7 @@ class DeviceController(): | ||
1254 | res = dcc.run_func(native_cmd) | 1224 | res = dcc.run_func(native_cmd) |
1255 | ##res = self.run_func(native_cmd) | 1225 | ##res = self.run_func(native_cmd) |
1256 | #res = getattr(self, native_cmd)() | 1226 | #res = getattr(self, native_cmd)() |
1257 | - except AttributeError as e: | 1227 | + except (AttributeError, ChannelCommunicationException) as e: |
1258 | self.log_e("Unknown Native command ?", native_cmd) | 1228 | self.log_e("Unknown Native command ?", native_cmd) |
1259 | raise UnknownNativeCmdException(native_cmd) | 1229 | raise UnknownNativeCmdException(native_cmd) |
1260 | #if res is None: res = 'ok' | 1230 | #if res is None: res = 'ok' |
@@ -1263,9 +1233,10 @@ class DeviceController(): | @@ -1263,9 +1233,10 @@ class DeviceController(): | ||
1263 | # raise Exception if ERROR | 1233 | # raise Exception if ERROR |
1264 | if res.unknown_command: raise UnknownNativeCmdException(native_cmd) | 1234 | if res.unknown_command: raise UnknownNativeCmdException(native_cmd) |
1265 | if res.unknown_result: raise UnknownNativeResException(res.txt) | 1235 | if res.unknown_result: raise UnknownNativeResException(res.txt) |
1236 | + # Return Generic result | ||
1266 | return res | 1237 | return res |
1267 | 1238 | ||
1268 | - # NATIVE COMMAND (ex: native_cmd == "GR") | 1239 | + # 2.b) NORMAL NATIVE COMMAND (ex: native_cmd == "GR") |
1269 | ##native_cmd = self.formated_cmd(native_cmd, values_to_set) | 1240 | ##native_cmd = self.formated_cmd(native_cmd, values_to_set) |
1270 | native_cmd = dcc.formated_cmd(native_cmd, values_to_set) | 1241 | native_cmd = dcc.formated_cmd(native_cmd, values_to_set) |
1271 | awaited_res_if_ok = None | 1242 | awaited_res_if_ok = None |
@@ -1274,9 +1245,11 @@ class DeviceController(): | @@ -1274,9 +1245,11 @@ class DeviceController(): | ||
1274 | ##native_res = self.exec_native_cmd(native_cmd) | 1245 | ##native_res = self.exec_native_cmd(native_cmd) |
1275 | try: | 1246 | try: |
1276 | native_res = dcc.exec_native_cmd(native_cmd) | 1247 | native_res = dcc.exec_native_cmd(native_cmd) |
1277 | - except (UnknownNativeCmdException, UnknownNativeResException) as e: # TODO: a implementer dans exec_native_cmd() | 1248 | + except (ChannelCommunicationException, UnknownNativeCmdException, UnknownNativeResException) as e: # TODO: a implementer dans exec_native_cmd() |
1278 | self.log_e(f"THREAD Native command execution caught by {type(self).__name__} (from DC)", e) | 1249 | self.log_e(f"THREAD Native command execution caught by {type(self).__name__} (from DC)", e) |
1279 | raise | 1250 | raise |
1251 | + | ||
1252 | + # 3) Make Generic result from native and return it | ||
1280 | ok = True if not awaited_res_if_ok else (native_res == awaited_res_if_ok) | 1253 | ok = True if not awaited_res_if_ok else (native_res == awaited_res_if_ok) |
1281 | return GenericResult(native_res, ok) | 1254 | return GenericResult(native_res, ok) |
1282 | 1255 |
src/device_controller/channels/client_channel.py
@@ -22,6 +22,8 @@ def printd(*args, **kwargs): | @@ -22,6 +22,8 @@ def printd(*args, **kwargs): | ||
22 | if os.environ.get('PYROS_DEBUG', '0')=='1': print(*args, **kwargs) | 22 | if os.environ.get('PYROS_DEBUG', '0')=='1': print(*args, **kwargs) |
23 | ''' | 23 | ''' |
24 | 24 | ||
25 | +class ChannelCommunicationException(Exception): | ||
26 | + pass | ||
25 | 27 | ||
26 | ##class SocketClientAbstract(): | 28 | ##class SocketClientAbstract(): |
27 | class ClientChannel(): | 29 | class ClientChannel(): |