330 |
330 |
331 """ |
331 """ |
332 Add the specified number of subentry for the given entry. Verify that total |
332 Add the specified number of subentry for the given entry. Verify that total |
333 number of subentry (except 0) doesn't exceed nbmax defined |
333 number of subentry (except 0) doesn't exceed nbmax defined |
334 """ |
334 """ |
335 def AddSubentriesToCurrent(self, index, number): |
335 def AddSubentriesToCurrent(self, index, number, node = None): |
|
336 if node == None: |
|
337 disable_buffer = True |
|
338 node = self.CurrentNode |
|
339 else: |
|
340 disable_buffer = False |
336 # Informations about entry |
341 # Informations about entry |
337 length = self.CurrentNode.GetEntry(index, 0) |
342 length = node.GetEntry(index, 0) |
338 infos = self.GetEntryInfos(index) |
343 infos = node.GetEntryInfos(index) |
339 subentry_infos = self.GetSubentryInfos(index, 1) |
344 subentry_infos = node.GetSubentryInfos(index, 1) |
340 # Get default value for subindex |
345 # Get default value for subindex |
341 if "default" in subentry_infos: |
346 if "default" in subentry_infos: |
342 default = subentry_infos["default"] |
347 default = subentry_infos["default"] |
343 else: |
348 else: |
344 default = self.GetTypeDefaultValue(subentry_infos["type"]) |
349 default = self.GetTypeDefaultValue(subentry_infos["type"]) |
345 # First case entry is record |
350 # First case entry is record |
346 if infos["struct"] & OD_IdenticalSubindexes: |
351 if infos["struct"] & OD_IdenticalSubindexes: |
347 for i in xrange(1, min(number,subentry_infos["nbmax"]-length) + 1): |
352 for i in xrange(1, min(number,subentry_infos["nbmax"]-length) + 1): |
348 self.CurrentNode.AddEntry(index, length + i, default) |
353 node.AddEntry(index, length + i, default) |
349 self.BufferCurrentNode() |
354 if not disable_buffer: |
|
355 self.BufferCurrentNode() |
|
356 return None |
350 # Second case entry is array, only possible for manufacturer specific |
357 # Second case entry is array, only possible for manufacturer specific |
351 elif infos["struct"] & OD_MultipleSubindexes and 0x2000 <= index <= 0x5FFF: |
358 elif infos["struct"] & OD_MultipleSubindexes and 0x2000 <= index <= 0x5FFF: |
352 values = {"name" : "Undefined", "type" : 5, "access" : "rw", "pdo" : True} |
359 values = {"name" : "Undefined", "type" : 5, "access" : "rw", "pdo" : True} |
353 for i in xrange(1, min(number,0xFE-length) + 1): |
360 for i in xrange(1, min(number,0xFE-length) + 1): |
354 self.CurrentNode.AddMappingEntry(index, length + i, values = values.copy()) |
361 node.AddMappingEntry(index, length + i, values = values.copy()) |
355 self.CurrentNode.AddEntry(index, length + i, 0) |
362 node.AddEntry(index, length + i, 0) |
356 self.BufferCurrentNode() |
363 if not disable_buffer: |
|
364 self.BufferCurrentNode() |
|
365 return None |
|
366 |
357 |
367 |
358 """ |
368 """ |
359 Remove the specified number of subentry for the given entry. Verify that total |
369 Remove the specified number of subentry for the given entry. Verify that total |
360 number of subentry (except 0) isn't less than 1 |
370 number of subentry (except 0) isn't less than 1 |
361 """ |
371 """ |
447 subentry_infos = self.GetSubentryInfos(index, 1) |
462 subentry_infos = self.GetSubentryInfos(index, 1) |
448 if "default" in subentry_infos: |
463 if "default" in subentry_infos: |
449 default = subentry_infos["default"] |
464 default = subentry_infos["default"] |
450 else: |
465 else: |
451 default = self.GetTypeDefaultValue(subentry_infos["type"]) |
466 default = self.GetTypeDefaultValue(subentry_infos["type"]) |
452 self.CurrentNode.AddEntry(index, 1, default) |
467 node.AddEntry(index, 1, default) |
453 # Second case entry is a record |
468 # Second case entry is a record |
454 else: |
469 else: |
455 i = 1 |
470 i = 1 |
456 subentry_infos = self.GetSubentryInfos(index, i) |
471 subentry_infos = self.GetSubentryInfos(index, i) |
457 while subentry_infos: |
472 while subentry_infos: |
458 if "default" in subentry_infos: |
473 if "default" in subentry_infos: |
459 default = subentry_infos["default"] |
474 default = subentry_infos["default"] |
460 else: |
475 else: |
461 default = self.GetTypeDefaultValue(subentry_infos["type"]) |
476 default = self.GetTypeDefaultValue(subentry_infos["type"]) |
462 self.CurrentNode.AddEntry(index, i, default) |
477 node.AddEntry(index, i, default) |
463 i += 1 |
478 i += 1 |
464 subentry_infos = self.GetSubentryInfos(index, i) |
479 subentry_infos = self.GetSubentryInfos(index, i) |
465 # Third case entry is a record |
480 # Third case entry is a record |
466 else: |
481 else: |
467 subentry_infos = self.GetSubentryInfos(index, 0) |
482 subentry_infos = self.GetSubentryInfos(index, 0) |
468 if "default" in subentry_infos: |
483 if "default" in subentry_infos: |
469 default = subentry_infos["default"] |
484 default = subentry_infos["default"] |
470 else: |
485 else: |
471 default = self.GetTypeDefaultValue(subentry_infos["type"]) |
486 default = self.GetTypeDefaultValue(subentry_infos["type"]) |
472 self.CurrentNode.AddEntry(index, 0, default) |
487 node.AddEntry(index, 0, default) |
473 # Remove all the entries in removinglist |
488 # Remove all the entries in removinglist |
474 for index in removinglist: |
489 for index in removinglist: |
475 self.RemoveCurrentVariable(index) |
490 self.RemoveCurrentVariable(index) |
476 self.BufferCurrentNode() |
491 if not disable_buffer: |
|
492 self.BufferCurrentNode() |
|
493 return None |
477 |
494 |
478 |
495 |
479 """ |
496 """ |
480 Remove an entry from current node. Analize the index to perform the correct |
497 Remove an entry from current node. Analize the index to perform the correct |
481 method |
498 method |
524 if not infos["need"]: |
541 if not infos["need"]: |
525 self.CurrentNode.RemoveEntry(index, subIndex) |
542 self.CurrentNode.RemoveEntry(index, subIndex) |
526 if index in Mappings[-1]: |
543 if index in Mappings[-1]: |
527 self.CurrentNode.RemoveMappingEntry(index, subIndex) |
544 self.CurrentNode.RemoveMappingEntry(index, subIndex) |
528 |
545 |
529 def AddMapVariableToCurrent(self, index, name, struct, number): |
546 def AddMapVariableToCurrent(self, index, name, struct, number, node = None): |
530 if 0x2000 <= index <= 0x5FFF: |
547 if 0x2000 <= index <= 0x5FFF: |
531 if not self.CurrentNode.IsEntry(index): |
548 if node == None: |
532 self.CurrentNode.AddMappingEntry(index, name = name, struct = struct) |
549 disable_buffer = True |
|
550 node = self.CurrentNode |
|
551 else: |
|
552 disable_buffer = False |
|
553 if not node.IsEntry(index): |
|
554 node.AddMappingEntry(index, name = name, struct = struct) |
533 if struct == var: |
555 if struct == var: |
534 values = {"name" : name, "type" : 0x05, "access" : "rw", "pdo" : True} |
556 values = {"name" : name, "type" : 0x05, "access" : "rw", "pdo" : True} |
535 self.CurrentNode.AddMappingEntry(index, 0, values = values) |
557 node.AddMappingEntry(index, 0, values = values) |
536 self.CurrentNode.AddEntry(index, 0, 0) |
558 node.AddEntry(index, 0, 0) |
537 else: |
559 else: |
538 values = {"name" : "Number of Entries", "type" : 0x05, "access" : "ro", "pdo" : False} |
560 values = {"name" : "Number of Entries", "type" : 0x05, "access" : "ro", "pdo" : False} |
539 self.CurrentNode.AddMappingEntry(index, 0, values = values) |
561 node.AddMappingEntry(index, 0, values = values) |
540 if struct == rec: |
562 if struct == rec: |
541 values = {"name" : name + " %d[(sub)]", "type" : 0x05, "access" : "rw", "pdo" : True, "nbmax" : 0xFE} |
563 values = {"name" : name + " %d[(sub)]", "type" : 0x05, "access" : "rw", "pdo" : True, "nbmax" : 0xFE} |
542 self.CurrentNode.AddMappingEntry(index, 1, values = values) |
564 node.AddMappingEntry(index, 1, values = values) |
543 for i in xrange(number): |
565 for i in xrange(number): |
544 self.CurrentNode.AddEntry(index, i + 1, 0) |
566 node.AddEntry(index, i + 1, 0) |
545 else: |
567 else: |
546 for i in xrange(number): |
568 for i in xrange(number): |
547 values = {"name" : "Undefined", "type" : 0x05, "access" : "rw", "pdo" : True} |
569 values = {"name" : "Undefined", "type" : 0x05, "access" : "rw", "pdo" : True} |
548 self.CurrentNode.AddMappingEntry(index, i + 1, values = values) |
570 node.AddMappingEntry(index, i + 1, values = values) |
549 self.CurrentNode.AddEntry(index, i + 1, 0) |
571 node.AddEntry(index, i + 1, 0) |
550 self.BufferCurrentNode() |
572 if not disable_buffer: |
|
573 self.BufferCurrentNode() |
551 return None |
574 return None |
552 else: |
575 else: |
553 return "Index 0x%04X already defined!"%index |
576 return "Index 0x%04X already defined!"%index |
554 else: |
577 else: |
555 return "Index 0x%04X isn't a valid index for Map Variable!"%index |
578 return "Index 0x%04X isn't a valid index for Map Variable!"%index |
593 entry_infos = self.GetEntryInfos(index) |
616 entry_infos = self.GetEntryInfos(index) |
594 if "callback" not in entry_infos: |
617 if "callback" not in entry_infos: |
595 self.CurrentNode.SetParamsEntry(index, None, callback = value) |
618 self.CurrentNode.SetParamsEntry(index, None, callback = value) |
596 self.BufferCurrentNode() |
619 self.BufferCurrentNode() |
597 |
620 |
598 def SetCurrentEntry(self, index, subIndex, value, name, editor): |
621 def SetCurrentEntry(self, index, subIndex, value, name, editor, node = None): |
599 if self.CurrentNode and self.CurrentNode.IsEntry(index): |
622 |
|
623 if node == None: |
|
624 disable_buffer = True |
|
625 node = self.CurrentNode |
|
626 else: |
|
627 disable_buffer = False |
|
628 if node and node.IsEntry(index): |
600 if name == "value": |
629 if name == "value": |
601 if editor == "map": |
630 if editor == "map": |
602 value = self.CurrentNode.GetMapValue(value) |
631 value = node.GetMapValue(value) |
603 if value: |
632 if value: |
604 self.CurrentNode.SetEntry(index, subIndex, value) |
633 node.SetEntry(index, subIndex, value) |
605 elif editor == "bool": |
634 elif editor == "bool": |
606 value = value == "True" |
635 value = value == "True" |
607 self.CurrentNode.SetEntry(index, subIndex, value) |
636 node.SetEntry(index, subIndex, value) |
608 elif editor == "time": |
637 elif editor == "time": |
609 self.CurrentNode.SetEntry(index, subIndex, value) |
638 node.SetEntry(index, subIndex, value) |
610 elif editor == "number": |
639 elif editor == "number": |
611 try: |
640 try: |
612 self.CurrentNode.SetEntry(index, subIndex, int(value)) |
641 node.SetEntry(index, subIndex, int(value)) |
613 except: |
642 except: |
614 pass |
643 pass |
615 elif editor == "domain": |
644 elif editor == "domain": |
616 try: |
645 try: |
617 if len(value) % 2 != 0: |
646 if len(value) % 2 != 0: |
618 value = "0" + value |
647 value = "0" + value |
619 value = value.decode('hex_codec') |
648 value = value.decode('hex_codec') |
620 self.CurrentNode.SetEntry(index, subIndex, value) |
649 node.SetEntry(index, subIndex, value) |
621 except: |
650 except: |
622 pass |
651 pass |
623 else: |
652 else: |
624 subentry_infos = self.GetSubentryInfos(index, subIndex) |
653 subentry_infos = self.GetSubentryInfos(index, subIndex) |
625 type = subentry_infos["type"] |
654 type = subentry_infos["type"] |
626 dic = {} |
655 dic = {} |
627 for typeindex, typevalue in CustomisableTypes: |
656 for typeindex, typevalue in CustomisableTypes: |
628 dic[typeindex] = typevalue |
657 dic[typeindex] = typevalue |
629 if type not in dic: |
658 if type not in dic: |
630 type = self.CurrentNode.GetEntry(type)[1] |
659 type = node.GetEntry(type)[1] |
631 if dic[type] == 0: |
660 if dic[type] == 0: |
632 try: |
661 try: |
633 if value.startswith("0x"): |
662 if value.startswith("0x"): |
634 value = int(value, 16) |
663 value = int(value, 16) |
635 else: |
664 else: |
636 value = int(value) |
665 value = int(value) |
637 self.CurrentNode.SetEntry(index, subIndex, value) |
666 node.SetEntry(index, subIndex, value) |
638 except: |
667 except: |
639 pass |
668 pass |
640 else: |
669 else: |
641 self.CurrentNode.SetEntry(index, subIndex, value) |
670 node.SetEntry(index, subIndex, value) |
642 elif name in ["comment", "save"]: |
671 elif name in ["comment", "save"]: |
643 if editor == "option": |
672 if editor == "option": |
644 value = value == "Yes" |
673 value = value == "Yes" |
645 if name == "save": |
674 if name == "save": |
646 self.CurrentNode.SetParamsEntry(index, subIndex, save = value) |
675 node.SetParamsEntry(index, subIndex, save = value) |
647 elif name == "comment": |
676 elif name == "comment": |
648 self.CurrentNode.SetParamsEntry(index, subIndex, comment = value) |
677 node.SetParamsEntry(index, subIndex, comment = value) |
649 else: |
678 else: |
650 if editor == "type": |
679 if editor == "type": |
651 value = self.GetTypeIndex(value) |
680 value = self.GetTypeIndex(value) |
652 size = self.GetEntryInfos(value)["size"] |
681 size = self.GetEntryInfos(value)["size"] |
653 self.CurrentNode.UpdateMapVariable(index, subIndex, size) |
682 node.UpdateMapVariable(index, subIndex, size) |
654 elif editor in ["access","raccess"]: |
683 elif editor in ["access","raccess"]: |
655 dic = {} |
684 dic = {} |
656 for abbrev,access in AccessType.iteritems(): |
685 for abbrev,access in AccessType.iteritems(): |
657 dic[access] = abbrev |
686 dic[access] = abbrev |
658 value = dic[value] |
687 value = dic[value] |
659 if editor == "raccess" and not self.CurrentNode.IsMappingEntry(index): |
688 if editor == "raccess" and not node.IsMappingEntry(index): |
660 entry_infos = self.GetEntryInfos(index) |
689 entry_infos = self.GetEntryInfos(index) |
661 self.CurrentNode.AddMappingEntry(index, name = entry_infos["name"], struct = 7) |
690 node.AddMappingEntry(index, name = entry_infos["name"], struct = 7) |
662 self.CurrentNode.AddMappingEntry(index, 0, values = self.GetSubentryInfos(index, 0, False).copy()) |
691 node.AddMappingEntry(index, 0, values = self.GetSubentryInfos(index, 0, False).copy()) |
663 self.CurrentNode.AddMappingEntry(index, 1, values = self.GetSubentryInfos(index, 1, False).copy()) |
692 node.AddMappingEntry(index, 1, values = self.GetSubentryInfos(index, 1, False).copy()) |
664 self.CurrentNode.SetMappingEntry(index, subIndex, values = {name : value}) |
693 node.SetMappingEntry(index, subIndex, values = {name : value}) |
665 self.BufferCurrentNode() |
694 if not disable_buffer: |
|
695 self.BufferCurrentNode() |
|
696 return None |
666 |
697 |
667 def SetCurrentEntryName(self, index, name): |
698 def SetCurrentEntryName(self, index, name): |
668 self.CurrentNode.SetMappingEntry(index, name=name) |
699 self.CurrentNode.SetMappingEntry(index, name=name) |
669 self.BufferCurrentNode() |
700 self.BufferCurrentNode() |
670 |
701 |