|
51 | 51 | TRACEMODE_WRITE, |
52 | 52 | UBX_CFGVAL, |
53 | 53 | VALBOOL, |
| 54 | + VALCUSTOM, |
54 | 55 | VALFLOAT, |
55 | 56 | VALINT, |
56 | 57 | VALNONBLANK, |
57 | 58 | ) |
| 59 | +from pygpsclient.helpers import valid_hex |
58 | 60 |
|
59 | 61 | VALSET = 0 |
60 | 62 | VALDEL = 1 |
@@ -183,7 +185,6 @@ def _body(self): |
183 | 185 | width=8, |
184 | 186 | state=READONLY, |
185 | 187 | ) |
186 | | - self._lbl_endian = Label(self, text="") |
187 | 188 | self._lbl_val = Label(self, text="Value") |
188 | 189 | self._ent_val = Entry( |
189 | 190 | self, |
@@ -223,7 +224,6 @@ def _do_layout(self): |
223 | 224 | self._lbl_att.grid(column=4, row=13, sticky=W) |
224 | 225 | self._lbl_layer.grid(column=1, row=14, sticky=E) |
225 | 226 | self._spn_layer.grid(column=2, row=14, sticky=W) |
226 | | - self._lbl_endian.grid(column=3, row=14, columnspan=2, sticky=E) |
227 | 227 | self._lbl_val.grid(column=1, row=15, sticky=E) |
228 | 228 | self._ent_val.grid(column=2, row=15, columnspan=3, sticky=EW) |
229 | 229 |
|
@@ -307,8 +307,6 @@ def _on_select_parm(self, *args, **kwargs): # pylint: disable=unused-argument |
307 | 307 | self._cfgatt.set(att) |
308 | 308 | self._cfgval.set("") |
309 | 309 | self._lbl_send_command.config(image=self._img_blank) |
310 | | - endian = "Little Endian" if att[0:1] == "X" and att[1:] > "001" else "" |
311 | | - self._lbl_endian.config(text=endian) |
312 | 310 | except TclError: |
313 | 311 | pass |
314 | 312 |
|
@@ -352,12 +350,15 @@ def _do_valset(self): |
352 | 350 | layers = 1 |
353 | 351 | try: |
354 | 352 | if att in ("C", "X"): # byte or char |
355 | | - self._ent_val.validate(VALNONBLANK) |
356 | | - if len(val) == atts * 2: # 2 hex chars per byte |
357 | | - val = bytearray.fromhex(val) |
358 | | - else: |
359 | | - valid = False |
360 | | - |
| 353 | + valid = self._ent_val.validate( |
| 354 | + VALCUSTOM, |
| 355 | + func=valid_hex, |
| 356 | + args=[ |
| 357 | + atts, |
| 358 | + ], |
| 359 | + ) |
| 360 | + if valid: |
| 361 | + val = int.to_bytes(int(val, 16), atts, "little") |
361 | 362 | elif att in ("E", "U"): # unsigned integer |
362 | 363 | self._ent_val.validate(VALINT) |
363 | 364 | val = int(val) |
@@ -462,7 +463,9 @@ def update_status(self, msg: UBXMessage): # pylint: disable=unused-argument |
462 | 463 | val = getattr(msg, self._cfgval_keyname, None) |
463 | 464 | if val is not None: |
464 | 465 | if isinstance(val, bytes): |
465 | | - val = val.hex() |
| 466 | + atts = attsiz(self._cfgatt.get()) |
| 467 | + vali = int.from_bytes(val, "little") |
| 468 | + val = f"0x{vali:0{atts*2}x}" |
466 | 469 | self._cfgval.set(val) |
467 | 470 | self.__container.status_label = ("CFG-VALGET GET message received", OKCOL) |
468 | 471 |
|
|
0 commit comments