objdictgen/node.py
author Edouard Tisserant
Thu, 24 Jan 2019 13:53:01 +0100
changeset 808 de1fc3261f21
parent 783 376563111c55
permissions -rwxr-xr-x
Adding -fPIC isn't necessary of xeno-config is set correctly. Backed out changeset b9f1fcda7d30
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     1
#!/usr/bin/env python
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     2
# -*- coding: utf-8 -*-
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     3
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     4
#This file is part of CanFestival, a library implementing CanOpen Stack. 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     5
#
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     6
#Copyright (C): Edouard TISSERANT, Francis DUPIN and Laurent BESSARD
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     7
#
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     8
#See COPYING file for copyrights details.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     9
#
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    10
#This library is free software; you can redistribute it and/or
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    11
#modify it under the terms of the GNU Lesser General Public
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    12
#License as published by the Free Software Foundation; either
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    13
#version 2.1 of the License, or (at your option) any later version.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    14
#
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    15
#This library is distributed in the hope that it will be useful,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    16
#but WITHOUT ANY WARRANTY; without even the implied warranty of
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    17
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    18
#Lesser General Public License for more details.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    19
#
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    20
#You should have received a copy of the GNU Lesser General Public
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    21
#License along with this library; if not, write to the Free Software
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    22
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    23
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    24
import cPickle
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    25
from types import *
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
    26
import re
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    27
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    28
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    29
Dictionary of translation between access symbol and their signification
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    30
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    31
AccessType = {"ro" : "Read Only", "wo" : "Write Only", "rw" : "Read/Write"}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    32
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    33
BoolType = {True : "True", False : "False"} 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    34
OptionType = {True : "Yes", False : "No"}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    35
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    36
CustomisableTypes = [(0x02, 0), (0x03, 0), (0x04, 0), (0x05, 0), (0x06, 0), (0x07, 0),
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    37
    (0x08, 0), (0x09, 1), (0x0A, 1), (0x0B, 1), (0x10, 0), (0x11, 0), (0x12, 0),
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    38
    (0x13, 0), (0x14, 0), (0x15, 0), (0x16, 0), (0x18, 0), (0x19, 0), (0x1A, 0),
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    39
    (0x1B, 0)]
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    40
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    41
DefaultParams = {"comment" : "", "save" : False}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    42
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    43
#-------------------------------------------------------------------------------
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    44
#                      Dictionary Mapping and Organisation
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    45
#-------------------------------------------------------------------------------
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    46
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    47
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    48
Properties of entry structure in the Object Dictionary
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    49
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    50
OD_Subindex = 1             # Entry has at least one subindex
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    51
OD_MultipleSubindexes = 2   # Entry has more than one subindex
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    52
OD_IdenticalSubindexes = 4  # Subindexes of entry have the same description
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    53
OD_IdenticalIndexes = 8     # Entry has the same description on multiple indexes
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    54
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    55
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    56
Structures of entry in the Object Dictionary, sum of the properties described above
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    57
for all sorts of entries use in CAN Open specification
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    58
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    59
nosub = 0 # Entry without subindex (only for type declaration)
260
1eafe582b6a1 Better code readability
etisserant
parents: 258
diff changeset
    60
var = OD_Subindex
1eafe582b6a1 Better code readability
etisserant
parents: 258
diff changeset
    61
array = OD_Subindex | OD_MultipleSubindexes
1eafe582b6a1 Better code readability
etisserant
parents: 258
diff changeset
    62
rec = OD_Subindex | OD_MultipleSubindexes | OD_IdenticalSubindexes
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    63
# Entries identical on multiple indexes
260
1eafe582b6a1 Better code readability
etisserant
parents: 258
diff changeset
    64
plurivar = OD_Subindex | OD_IdenticalIndexes
1eafe582b6a1 Better code readability
etisserant
parents: 258
diff changeset
    65
pluriarray = OD_Subindex | OD_MultipleSubindexes | OD_IdenticalIndexes # Example : PDO Parameters
1eafe582b6a1 Better code readability
etisserant
parents: 258
diff changeset
    66
plurirec = OD_Subindex | OD_MultipleSubindexes | OD_IdenticalSubindexes |OD_IdenticalIndexes   # Example : PDO Mapping
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    67
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    68
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    69
MappingDictionary is the structure used for writing a good organised Object
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    70
Dictionary. It follows the specifications of the CANOpen standard.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    71
Change the informations within it if there is a mistake. But don't modify the
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    72
organisation of this object, it will involve in a malfunction of the application.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    73
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    74
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    75
MappingDictionary = {
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    76
    0x0001 : {"name" : "BOOLEAN", "struct" : nosub, "size" : 1, "default" : False, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    77
    0x0002 : {"name" : "INTEGER8", "struct" : nosub, "size" : 8, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    78
    0x0003 : {"name" : "INTEGER16", "struct" : nosub, "size" : 16, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    79
    0x0004 : {"name" : "INTEGER32", "struct" : nosub, "size" : 32, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    80
    0x0005 : {"name" : "UNSIGNED8", "struct" : nosub, "size" : 8, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    81
    0x0006 : {"name" : "UNSIGNED16", "struct" : nosub, "size" : 16, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    82
    0x0007 : {"name" : "UNSIGNED32", "struct" : nosub, "size" : 32, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    83
    0x0008 : {"name" : "REAL32", "struct" : nosub, "size" : 32, "default" : 0.0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    84
    0x0009 : {"name" : "VISIBLE_STRING", "struct" : nosub, "size" : 8, "default" : "", "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    85
    0x000A : {"name" : "OCTET_STRING", "struct" : nosub, "size" : 8, "default" : "", "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    86
    0x000B : {"name" : "UNICODE_STRING", "struct" : nosub, "size" : 16, "default" : "", "values" : []},
67
51642fb5a0af TIME_OF_DAY and TIME_DIFFERENCE disabled
lbessard
parents: 65
diff changeset
    87
#    0x000C : {"name" : "TIME_OF_DAY", "struct" : nosub, "size" : 48, "default" : 0, "values" : []},
51642fb5a0af TIME_OF_DAY and TIME_DIFFERENCE disabled
lbessard
parents: 65
diff changeset
    88
#    0x000D : {"name" : "TIME_DIFFERENCE", "struct" : nosub, "size" : 48, "default" : 0, "values" : []},
176
5d57fe1e3a5b Support for DCF (DS-302)
greg
parents: 68
diff changeset
    89
    0x000F : {"name" : "DOMAIN", "struct" : nosub, "size" : 0, "default" : "", "values" : []},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    90
    0x0010 : {"name" : "INTEGER24", "struct" : nosub, "size" : 24, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    91
    0x0011 : {"name" : "REAL64", "struct" : nosub, "size" : 64, "default" : 0.0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    92
    0x0012 : {"name" : "INTEGER40", "struct" : nosub, "size" : 40, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    93
    0x0013 : {"name" : "INTEGER48", "struct" : nosub, "size" : 48, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    94
    0x0014 : {"name" : "INTEGER56", "struct" : nosub, "size" : 56, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    95
    0x0015 : {"name" : "INTEGER64", "struct" : nosub, "size" : 64, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    96
    0x0016 : {"name" : "UNSIGNED24", "struct" : nosub, "size" : 24, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    97
    0x0018 : {"name" : "UNSIGNED40", "struct" : nosub, "size" : 40, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    98
    0x0019 : {"name" : "UNSIGNED48", "struct" : nosub, "size" : 48, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    99
    0x001A : {"name" : "UNSIGNED56", "struct" : nosub, "size" : 56, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   100
    0x001B : {"name" : "UNSIGNED64", "struct" : nosub, "size" : 64, "default" : 0, "values" : []},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   101
    0x1000 : {"name" : "Device Type", "struct" : var, "need" : True, "values" : 
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   102
                [{"name" : "Device Type", "type" : 0x07, "access" : 'ro', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   103
    0x1001 : {"name" : "Error Register", "struct" : var,  "need" : True, "values" : 
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   104
                [{"name" : "Error Register", "type" : 0x05, "access": 'ro', "pdo" : True}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   105
    0x1002 : {"name" : "Manufacturer Status Register", "struct" : var, "need" : False,  "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   106
                [{"name" : "Manufacturer Status Register", "type" : 0x07, "access" : 'ro', "pdo" : True}]},
284
24bf3d692993 Implemented EMCY objects.
luis
parents: 281
diff changeset
   107
    0x1003 : {"name" : "Pre-defined Error Field", "struct" : rec, "need" : False, "callback" : True,  "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   108
                [{"name" : "Number of Errors", "type" : 0x05, "access" : 'rw', "pdo" : False},
783
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   109
                 {"name" : "Standard Error Field", "type" : 0x07, "access" : 'ro', "pdo" : False, "nbmin" : 1, "nbmax" : 0xFE}]},
258
8f7725451453 Some bugs fixed:
lbessard
parents: 245
diff changeset
   110
    0x1005 : {"name" : "SYNC COB ID", "struct" : var, "need" : False, "callback" : True, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   111
                [{"name" : "SYNC COB ID", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   112
    0x1006 : {"name" : "Communication / Cycle Period", "struct" : var, "need" : False, "callback" : True, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   113
                [{"name" : "Communication Cycle Period", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   114
    0x1007 : {"name" : "Synchronous Window Length", "struct" : var, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   115
                [{"name" : "Synchronous Window Length", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   116
    0x1008 : {"name" : "Manufacturer Device Name", "struct" : var, "need" : False, "values" :
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   117
                [{"name" : "Manufacturer Device Name", "type" : 0x09, "access" : 'ro', "pdo" : False}]},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   118
    0x1009 : {"name" : "Manufacturer Hardware Version", "struct" : var, "need" : False, "values" :
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   119
                [{"name" : "Manufacturer Hardware Version", "type" : 0x09, "access" : 'ro', "pdo" : False}]},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   120
    0x100A : {"name" : "Manufacturer Software Version", "struct" : var, "need" : False, "values" :
62
93d4db3677e6 index 0x1004 is a visible_string
frdupin
parents: 59
diff changeset
   121
                [{"name" : "Manufacturer Software Version", "type" : 0x09, "access" : 'ro', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   122
    0x100C : {"name" : "Guard Time", "struct" : var, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   123
                [{"name" : "Guard Time", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   124
    0x100D : {"name" : "Life Time Factor", "struct" : var, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   125
                [{"name" : "Life Time Factor", "type" : 0x05, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   126
    0x1010 : {"name" : "Store parameters", "struct" : array, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   127
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   128
                 {"name" : "Save All Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   129
                 {"name" : "Save Communication Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   130
                 {"name" : "Save Application Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
510
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   131
                 {"name" : "Save Manufacturer Parameters %d[(sub - 3)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0x7C}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   132
    0x1011 : {"name" : "Restore Default Parameters", "struct" : array, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   133
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   134
                 {"name" : "Restore All Default Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   135
                 {"name" : "Restore Communication Default Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   136
                 {"name" : "Restore Application Default Parameters", "type" : 0x07, "access" : 'rw', "pdo" : False},
510
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   137
                 {"name" : "Restore Manufacturer Defined Default Parameters %d[(sub - 3)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmax" : 0x7C}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   138
    0x1012 : {"name" : "TIME COB ID", "struct" : var, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   139
                [{"name" : "TIME COB ID", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   140
    0x1013 : {"name" : "High Resolution Timestamp", "struct" : var, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   141
                [{"name" : "High Resolution Time Stamp", "type" : 0x07, "access" : 'rw', "pdo" : True}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   142
    0x1014 : {"name" : "Emergency COB ID", "struct" : var, "need" : False, "values" :
313
fed411af774a Adding standard default value to index 0x1014
lbessard
parents: 304
diff changeset
   143
                [{"name" : "Emergency COB ID", "type" : 0x07, "access" : 'rw', "pdo" : False, "default" : "\"$NODEID+0x80\""}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   144
    0x1015 : {"name" : "Inhibit Time Emergency", "struct" : var, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   145
                [{"name" : "Inhibit Time Emergency", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   146
    0x1016 : {"name" : "Consumer Heartbeat Time", "struct" : rec, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   147
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   148
                 {"name" : "Consumer Heartbeat Time", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmin" : 1, "nbmax" : 0x7F}]},
177
d485a3fc5739 Add default callback for index entry 0x1017
greg
parents: 176
diff changeset
   149
    0x1017 : {"name" : "Producer Heartbeat Time", "struct" : var, "need" : False, "callback" : True, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   150
                [{"name" : "Producer Heartbeat Time", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   151
    0x1018 : {"name" : "Identity", "struct" : array, "need" : True, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   152
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   153
                 {"name" : "Vendor ID", "type" : 0x07, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   154
                 {"name" : "Product Code", "type" : 0x07, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   155
                 {"name" : "Revision Number", "type" : 0x07, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   156
                 {"name" : "Serial Number", "type" : 0x07, "access" : 'ro', "pdo" : False}]},
783
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   157
    0x1019 : {"name" : "Synchronous counter overflow value", "struct" : var, "need" : False, "values" :
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   158
                [{"name" : "Synchronous counter overflow value", "type" : 0x05, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   159
    0x1020 : {"name" : "Verify Configuration", "struct" : array, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   160
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
783
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   161
                 {"name" : "Configuration Date", "type" : 0x07, "access" : 'rw', "pdo" : False},
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   162
                 {"name" : "Configuration Time", "type" : 0x07, "access" : 'rw', "pdo" : False}]},
59
3a553c789116 Some bugs reported by Francis Dupin corrected.
lbessard
parents: 0
diff changeset
   163
#    0x1021 : {"name" : "Store EDS", "struct" : var, "need" : False, "values" :
3a553c789116 Some bugs reported by Francis Dupin corrected.
lbessard
parents: 0
diff changeset
   164
#                [{"name" : "Store EDS", "type" : 0x0F, "access" : 'rw', "pdo" : False}]},
3a553c789116 Some bugs reported by Francis Dupin corrected.
lbessard
parents: 0
diff changeset
   165
#    0x1022 : {"name" : "Storage Format", "struct" : var, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   166
#                [{"name" : "Storage Format", "type" : 0x06, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   167
    0x1023 : {"name" : "OS Command", "struct" : array, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   168
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   169
                 {"name" : "Command", "type" : 0x0A, "access" : 'rw', "pdo" : False},
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   170
                 {"name" : "Status", "type" : 0x05, "access" : 'ro', "pdo" : False},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   171
                 {"name" : "Reply", "type" : 0x0A, "access" : 'ro', "pdo" : False}]},
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   172
    0x1024 : {"name" : "OS Command Mode", "struct" : var, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   173
                [{"name" : "OS Command Mode", "type" : 0x05, "access" : 'wo', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   174
    0x1025 : {"name" : "OS Debugger Interface", "struct" : array, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   175
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   176
                 {"name" : "Command", "type" : 0x0A, "access" : 'rw', "pdo" : False},
783
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   177
                 {"name" : "Status", "type" : 0x05, "access" : 'ro', "pdo" : False},
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   178
                 {"name" : "Reply", "type" : 0x0A, "access" : 'ro', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   179
    0x1026 : {"name" : "OS Prompt", "struct" : array, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   180
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   181
                 {"name" : "StdIn", "type" : 0x05, "access" : 'wo', "pdo" : True},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   182
                 {"name" : "StdOut", "type" : 0x05, "access" : 'ro', "pdo" : True},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   183
                 {"name" : "StdErr", "type" : 0x05, "access" : 'ro', "pdo" : True}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   184
    0x1027 : {"name" : "Module List", "struct" : rec, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   185
                [{"name" : "Number of Connected Modules", "type" : 0x05, "access" : 'ro', "pdo" : False},
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   186
                 {"name" : "Module %d[(sub)]", "type" : 0x06, "access" : 'ro', "pdo" : False, "nbmin" : 1, "nbmax" : 0xFE}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   187
    0x1028 : {"name" : "Emergency Consumer", "struct" : rec, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   188
                [{"name" : "Number of Consumed Emergency Objects", "type" : 0x05, "access" : 'ro', "pdo" : False},
783
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   189
                 {"name" : "Emergency Consumer", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmin" : 1, "nbmax" : 0x7F}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   190
    0x1029 : {"name" : "Error Behavior", "struct" : array, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   191
                [{"name" : "Number of Error Classes", "type" : 0x05, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   192
                 {"name" : "Communication Error", "type" : 0x05, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   193
                 {"name" : "Device Profile", "type" : 0x05, "access" : 'rw', "pdo" : False, "nbmax" : 0xFE}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   194
    0x1200 : {"name" : "Server SDO Parameter", "struct" : array, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   195
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   196
                 {"name" : "COB ID Client to Server (Receive SDO)", "type" : 0x07, "access" : 'ro', "pdo" : False, "default" : "\"$NODEID+0x600\""},
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   197
                 {"name" : "COB ID Server to Client (Transmit SDO)", "type" : 0x07, "access" : 'ro', "pdo" : False, "default" : "\"$NODEID+0x580\""}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   198
    0x1201 : {"name" : "Additional Server SDO %d Parameter[(idx)]", "struct" : pluriarray, "incr" : 1, "nbmax" : 0x7F, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   199
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   200
                 {"name" : "COB ID Client to Server (Receive SDO)", "type" : 0x07, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   201
                 {"name" : "COB ID Server to Client (Transmit SDO)", "type" : 0x07, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   202
                 {"name" : "Node ID of the SDO Client", "type" : 0x05, "access" : 'ro', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   203
    0x1280 : {"name" : "Client SDO %d Parameter[(idx)]", "struct" : pluriarray, "incr" : 1, "nbmax" : 0x100, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   204
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'ro', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   205
                 {"name" : "COB ID Client to Server (Transmit SDO)", "type" : 0x07, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   206
                 {"name" : "COB ID Server to Client (Receive SDO)", "type" : 0x07, "access" : 'rw', "pdo" : False},
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   207
                 {"name" : "Node ID of the SDO Server", "type" : 0x05, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   208
    0x1400 : {"name" : "Receive PDO %d Parameter[(idx)]", "struct" : pluriarray, "incr" : 1, "nbmax" : 0x200, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   209
                [{"name" : "Highest SubIndex Supported", "type" : 0x05, "access" : 'ro', "pdo" : False},
317
f1c472b42327 Bug on default COB ID value for PDO transmit and receive 5 and higher fixed
lbessard
parents: 313
diff changeset
   210
                 {"name" : "COB ID used by PDO", "type" : 0x07, "access" : 'rw', "pdo" : False, "default" : "{True:\"$NODEID+0x%X00\"%(base+2),False:0x80000000}[base<4]"},
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   211
                 {"name" : "Transmission Type", "type" : 0x05, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   212
                 {"name" : "Inhibit Time", "type" : 0x06, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   213
                 {"name" : "Compatibility Entry", "type" : 0x05, "access" : 'rw', "pdo" : False},
783
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   214
                 {"name" : "Event Timer", "type" : 0x06, "access" : 'rw', "pdo" : False},
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   215
                 {"name" : "SYNC start value", "type" : 0x05, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   216
    0x1600 : {"name" : "Receive PDO %d Mapping[(idx)]", "struct" : plurirec, "incr" : 1, "nbmax" : 0x200, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   217
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'rw', "pdo" : False},
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   218
                 {"name" : "PDO %d Mapping for an application object %d[(idx,sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmin" : 0, "nbmax" : 0x40}]},
236
905677ed00f3 Full preliminary implementation of TPDO transmit type:
etisserant
parents: 227
diff changeset
   219
    0x1800 : {"name" : "Transmit PDO %d Parameter[(idx)]", "struct" : pluriarray, "incr" : 1, "nbmax" : 0x200, "need" : False, "callback" : True, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   220
                [{"name" : "Highest SubIndex Supported", "type" : 0x05, "access" : 'ro', "pdo" : False},
317
f1c472b42327 Bug on default COB ID value for PDO transmit and receive 5 and higher fixed
lbessard
parents: 313
diff changeset
   221
                 {"name" : "COB ID used by PDO", "type" : 0x07, "access" : 'rw', "pdo" : False, "default" : "{True:\"$NODEID+0x%X80\"%(base+1),False:0x80000000}[base<4]"},
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   222
                 {"name" : "Transmission Type", "type" : 0x05, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   223
                 {"name" : "Inhibit Time", "type" : 0x06, "access" : 'rw', "pdo" : False},
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   224
                 {"name" : "Compatibility Entry", "type" : 0x05, "access" : 'rw', "pdo" : False},
783
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   225
                 {"name" : "Event Timer", "type" : 0x06, "access" : 'rw', "pdo" : False},
376563111c55 Updated DS301 standard node entries definition
Laurent Bessard
parents: 659
diff changeset
   226
                 {"name" : "SYNC start value", "type" : 0x05, "access" : 'rw', "pdo" : False}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   227
    0x1A00 : {"name" : "Transmit PDO %d Mapping[(idx)]", "struct" : plurirec, "incr" : 1, "nbmax" : 0x200, "need" : False, "values" :
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   228
                [{"name" : "Number of Entries", "type" : 0x05, "access" : 'rw', "pdo" : False},
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   229
                 {"name" : "PDO %d Mapping for a process data variable %d[(idx,sub)]", "type" : 0x07, "access" : 'rw', "pdo" : False, "nbmin" : 0, "nbmax" : 0x40}]},
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   230
}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   231
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   232
#-------------------------------------------------------------------------------
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   233
#                         Search in a Mapping Dictionary
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   234
#-------------------------------------------------------------------------------
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   235
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   236
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   237
Return the index of the typename given by searching in mappingdictionary 
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   238
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   239
def FindTypeIndex(typename, mappingdictionary):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   240
    testdic = {}
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   241
    for index, values in mappingdictionary.iteritems():
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   242
        if index < 0x1000:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   243
            testdic[values["name"]] = index
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   244
    if typename in testdic:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   245
        return testdic[typename]
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   246
    return None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   247
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   248
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   249
Return the name of the type by searching in mappingdictionary 
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   250
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   251
def FindTypeName(typeindex, mappingdictionary):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   252
    if typeindex < 0x1000 and typeindex in mappingdictionary:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   253
        return mappingdictionary[typeindex]["name"]
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   254
    return None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   255
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   256
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   257
Return the default value of the type by searching in mappingdictionary 
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   258
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   259
def FindTypeDefaultValue(typeindex, mappingdictionary):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   260
    if typeindex < 0x1000 and typeindex in mappingdictionary:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   261
        return mappingdictionary[typeindex]["default"]
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   262
    return None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   263
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   264
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   265
Return the list of types defined in mappingdictionary 
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   266
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   267
def FindTypeList(mappingdictionary):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   268
    list = []
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   269
    for index in mappingdictionary.keys():
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   270
        if index < 0x1000:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   271
            list.append(mappingdictionary[index]["name"])
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   272
    return list
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   273
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   274
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   275
Return the name of an entry by searching in mappingdictionary 
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   276
"""
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   277
def FindEntryName(index, mappingdictionary, compute=True):
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   278
    base_index = FindIndex(index, mappingdictionary)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   279
    if base_index:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   280
        infos = mappingdictionary[base_index]
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   281
        if infos["struct"] & OD_IdenticalIndexes and compute:
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   282
            return StringFormat(infos["name"], (index - base_index) / infos["incr"] + 1, 0)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   283
        else:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   284
            return infos["name"]
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   285
    return None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   286
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   287
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   288
Return the informations of one entry by searching in mappingdictionary 
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   289
"""
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   290
def FindEntryInfos(index, mappingdictionary, compute=True):
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   291
    base_index = FindIndex(index, mappingdictionary)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   292
    if base_index:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   293
        copy = mappingdictionary[base_index].copy()
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   294
        if copy["struct"] & OD_IdenticalIndexes and compute:
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   295
            copy["name"] = StringFormat(copy["name"], (index - base_index) / copy["incr"] + 1, 0)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   296
        copy.pop("values")
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   297
        return copy
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   298
    return None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   299
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   300
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   301
Return the informations of one subentry of an entry by searching in mappingdictionary 
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   302
"""
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   303
def FindSubentryInfos(index, subIndex, mappingdictionary, compute=True):
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   304
    base_index = FindIndex(index, mappingdictionary)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   305
    if base_index:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   306
        struct = mappingdictionary[base_index]["struct"]
510
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   307
        if struct & OD_IdenticalIndexes:
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   308
            incr = mappingdictionary[base_index]["incr"]
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   309
        else:
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   310
            incr = 1
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   311
        if struct & OD_Subindex:
510
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   312
            infos = None
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   313
            if struct & OD_IdenticalSubindexes:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   314
                if subIndex == 0:
510
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   315
                    infos = mappingdictionary[base_index]["values"][0].copy()
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   316
                elif 0 < subIndex <= mappingdictionary[base_index]["values"][1]["nbmax"]:
510
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   317
                    infos = mappingdictionary[base_index]["values"][1].copy()
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   318
            elif struct & OD_MultipleSubindexes:
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   319
                idx = 0
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   320
                for subindex_infos in mappingdictionary[base_index]["values"]:
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   321
                    if "nbmax" in subindex_infos:
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   322
                        if idx <= subIndex < idx + subindex_infos["nbmax"]:
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   323
                            infos = subindex_infos.copy()
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   324
                            break;
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   325
                        idx += subindex_infos["nbmax"]
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   326
                    else:
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   327
                        if subIndex == idx:
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   328
                            infos = subindex_infos.copy()
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   329
                            break;
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   330
                        idx += 1
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   331
            elif subIndex == 0:
510
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   332
                infos = mappingdictionary[base_index]["values"][0].copy()
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   333
            if infos is not None and compute:
510
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   334
                infos["name"] = StringFormat(infos["name"], (index - base_index) / incr + 1, subIndex)
96d50ac2dea3 Adding support for multiple element in 1010 and 1011
lbessard
parents: 453
diff changeset
   335
            return infos
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   336
    return None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   337
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   338
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   339
Return the list of variables that can be mapped defined in mappingdictionary 
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   340
"""
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   341
def FindMapVariableList(mappingdictionary, Node, compute=True):
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   342
    list = []
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   343
    for index in mappingdictionary.iterkeys():
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   344
        if Node.IsEntry(index):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   345
            for subIndex, values in enumerate(mappingdictionary[index]["values"]):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   346
                if mappingdictionary[index]["values"][subIndex]["pdo"]:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   347
                    infos = Node.GetEntryInfos(mappingdictionary[index]["values"][subIndex]["type"])
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   348
                    name = mappingdictionary[index]["values"][subIndex]["name"]
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   349
                    if mappingdictionary[index]["struct"] & OD_IdenticalSubindexes:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   350
                        values = Node.GetEntry(index)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   351
                        for i in xrange(len(values) - 1):
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   352
                            computed_name = name
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   353
                            if compute:
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   354
                                computed_name = StringFormat(computed_name, 1, i + 1)
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   355
                            list.append((index, i + 1, infos["size"], computed_name))
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   356
                    else:
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   357
                        computed_name = name
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   358
                        if compute:
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   359
                            computed_name = StringFormat(computed_name, 1, subIndex)
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   360
                        list.append((index, subIndex, infos["size"], computed_name))
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   361
    return list
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   362
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   363
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   364
Return the list of mandatory indexes defined in mappingdictionary 
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   365
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   366
def FindMandatoryIndexes(mappingdictionary):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   367
    list = []
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   368
    for index in mappingdictionary.iterkeys():
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   369
        if index >= 0x1000 and mappingdictionary[index]["need"]:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   370
            list.append(index)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   371
    return list
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   372
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   373
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   374
Return the index of the informations in the Object Dictionary in case of identical
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   375
indexes
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   376
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   377
def FindIndex(index, mappingdictionary):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   378
    if index in mappingdictionary:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   379
        return index
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   380
    else:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   381
        listpluri = [idx for idx in mappingdictionary.keys() if mappingdictionary[idx]["struct"] & OD_IdenticalIndexes]
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   382
        listpluri.sort()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   383
        for idx in listpluri:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   384
            nb_max = mappingdictionary[idx]["nbmax"]
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   385
            incr = mappingdictionary[idx]["incr"]
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   386
            if idx < index < idx + incr * nb_max and (index - idx)%incr == 0:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   387
                return idx
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   388
    return None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   389
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   390
#-------------------------------------------------------------------------------
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   391
#                           Formating Name of an Entry
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   392
#-------------------------------------------------------------------------------
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   393
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   394
name_model = re.compile('(.*)\[(.*)\]')
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   395
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   396
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   397
Format the text given with the index and subindex defined
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   398
"""
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   399
def StringFormat(text, idx, sub):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   400
    result = name_model.match(text)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   401
    if result:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   402
        format = result.groups()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   403
        return format[0]%eval(format[1])
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   404
    else:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   405
        return text
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   406
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   407
#-------------------------------------------------------------------------------
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   408
#                          Definition of Node Object
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   409
#-------------------------------------------------------------------------------
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   410
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   411
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   412
Class recording the Object Dictionary entries. It checks at each modification
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   413
that the structure of the Object Dictionary stay coherent
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   414
"""
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   415
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   416
class Node:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   417
    
418
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   418
    DefaultStringSize = 10
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   419
    
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   420
    def __init__(self, name = "", type = "slave", id = 0, description = "", profilename = "DS-301", profile = {}, specificmenu = []):
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   421
        self.Name = name
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   422
        self.Type = type
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   423
        self.ID = id
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   424
        self.Description = description
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   425
        self.ProfileName = profilename
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   426
        self.Profile = profile
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   427
        self.SpecificMenu = specificmenu
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   428
        self.Dictionary = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   429
        self.ParamsDictionary = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   430
        self.DS302 = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   431
        self.UserMapping = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   432
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   433
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   434
    Return the node name
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   435
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   436
    def GetNodeName(self):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   437
        return self.Name
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   438
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   439
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   440
    Define the node name
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   441
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   442
    def SetNodeName(self, name):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   443
        self.Name = name
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   444
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   445
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   446
    Return the node type ("master" or "slave")
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   447
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   448
    def GetNodeType(self):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   449
        return self.Type
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   450
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   451
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   452
    Define the node type ("master" or "slave")
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   453
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   454
    def SetNodeType(self, type):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   455
        self.Type = type
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   456
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   457
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   458
    Return the node ID
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   459
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   460
    def GetNodeID(self):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   461
        return self.ID
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   462
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   463
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   464
    Define the node ID
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   465
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   466
    def SetNodeID(self, id):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   467
        self.ID = id
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   468
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   469
    """
182
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   470
    Return the node description
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   471
    """
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   472
    def GetNodeDescription(self):
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   473
        if getattr(self, "Description", False):
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   474
            return self.Description
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   475
        else:
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   476
            return ""
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   477
    
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   478
    """
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   479
    Define the node description
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   480
    """
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   481
    def SetNodeDescription(self, description):
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   482
        self.Description = description
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   483
988f2b302aa6 Adding support for importing and exporting EDS files
lbessard
parents: 177
diff changeset
   484
    """
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   485
    Return the Specific Profile Name
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   486
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   487
    def GetProfileName(self):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   488
        return self.ProfileName
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   489
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   490
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   491
    Define the Specific Profile Name
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   492
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   493
    def SetProfileName(self, profilename):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   494
        self.ProfileName = profilename
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   495
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   496
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   497
    Return the Specific Profile
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   498
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   499
    def GetProfile(self):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   500
        return self.Profile
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   501
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   502
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   503
    Define the Specific Profile
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   504
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   505
    def SetProfile(self, profile):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   506
        self.Profile = profile
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   507
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   508
    """
418
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   509
    Return the default string size
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   510
    """
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   511
    def GetDefaultStringSize(self):
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   512
        return self.DefaultStringSize
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   513
    
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   514
    """
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   515
    Define the default string size
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   516
    """
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   517
    def SetDefaultStringSize(self, size):
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   518
        self.DefaultStringSize = size
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   519
    
64a8c24b61a5 Problem with String size in C file generated fixed
lbessard
parents: 327
diff changeset
   520
    """
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   521
    Define the DS-302 Profile
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   522
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   523
    def SetDS302Profile(self, profile):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   524
        self.DS302 = profile
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   525
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   526
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   527
    Define the DS-302 Profile
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   528
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   529
    def GetDS302Profile(self):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   530
        return self.DS302
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   531
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   532
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   533
    Return the Specific Menu Entries
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   534
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   535
    def GetSpecificMenu(self):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   536
        return self.SpecificMenu
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   537
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   538
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   539
    Define the Specific Menu Entries
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   540
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   541
    def SetSpecificMenu(self, specificmenu):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   542
        self.SpecificMenu = specificmenu
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   543
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   544
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   545
    Extend the Specific Menu Entries
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   546
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   547
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   548
    def ExtendSpecificMenu(self, specificmenu):
176
5d57fe1e3a5b Support for DCF (DS-302)
greg
parents: 68
diff changeset
   549
        self.SpecificMenu.extend(specificmenu)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   550
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   551
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   552
    Function which return the different Mappings available for this node
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   553
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   554
    def GetMappings(self, userdefinedtoo = True):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   555
        if userdefinedtoo:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   556
            return [self.Profile, self.DS302, self.UserMapping]
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   557
        else:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   558
            return [self.Profile, self.DS302]
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   559
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   560
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   561
    Add a new entry in the Object Dictionary
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   562
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   563
    def AddEntry(self, index, subIndex = None, value = None):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   564
        if index not in self.Dictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   565
            if not subIndex:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   566
                self.Dictionary[index] = value
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   567
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   568
            elif subIndex == 1:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   569
                self.Dictionary[index] = [value]
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   570
                return True
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   571
        elif subIndex > 0 and type(self.Dictionary[index]) == ListType and subIndex == len(self.Dictionary[index]) + 1:
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   572
            self.Dictionary[index].append(value)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   573
            return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   574
        return False
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   575
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   576
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   577
    Warning ! Modifies an existing entry in the Object Dictionary. Can't add a new one.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   578
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   579
    def SetEntry(self, index, subIndex = None, value = None):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   580
        if index in self.Dictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   581
            if not subIndex:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   582
                if value != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   583
                    self.Dictionary[index] = value
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   584
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   585
            elif type(self.Dictionary[index]) == ListType and 0 < subIndex <= len(self.Dictionary[index]):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   586
                if value != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   587
                    self.Dictionary[index][subIndex - 1] = value
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   588
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   589
        return False
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   590
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   591
    def SetParamsEntry(self, index, subIndex = None, comment = None, save = None, callback = None):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   592
        if not getattr(self, "ParamsDictionary", False):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   593
            self.ParamsDictionary = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   594
        if index in self.Dictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   595
            if (comment != None or save != None or callback != None) and index not in self.ParamsDictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   596
                self.ParamsDictionary[index] = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   597
            if subIndex == None or type(self.Dictionary[index]) != ListType and subIndex == 0:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   598
                if comment != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   599
                    self.ParamsDictionary[index]["comment"] = comment
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   600
                if save != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   601
                    self.ParamsDictionary[index]["save"] = save
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   602
                if callback != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   603
                    self.ParamsDictionary[index]["callback"] = callback
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   604
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   605
            elif type(self.Dictionary[index]) == ListType and 0 <= subIndex <= len(self.Dictionary[index]):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   606
                if (comment != None or save != None or callback != None) and subIndex not in self.ParamsDictionary[index]:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   607
                    self.ParamsDictionary[index][subIndex] = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   608
                if comment != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   609
                    self.ParamsDictionary[index][subIndex]["comment"] = comment
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   610
                if save != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   611
                    self.ParamsDictionary[index][subIndex]["save"] = save
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   612
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   613
        return False
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   614
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   615
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   616
    Removes an existing entry in the Object Dictionary. If a subIndex is specified
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   617
    it will remove this subIndex only if it's the last of the index. If no subIndex
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   618
    is specified it removes the whole index and subIndexes from the Object Dictionary.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   619
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   620
    def RemoveEntry(self, index, subIndex = None):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   621
        if not getattr(self, "ParamsDictionary", False):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   622
            self.ParamsDictionary = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   623
        if index in self.Dictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   624
            if not subIndex:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   625
                self.Dictionary.pop(index)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   626
                if index in self.ParamsDictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   627
                    self.ParamsDictionary.pop(index)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   628
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   629
            elif type(self.Dictionary[index]) == ListType and subIndex == len(self.Dictionary[index]):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   630
                self.Dictionary[index].pop(subIndex - 1)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   631
                if index in self.ParamsDictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   632
                    if subIndex in self.ParamsDictionary[index]:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   633
                        self.ParamsDictionary[index].pop(subIndex)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   634
                    if len(self.ParamsDictionary[index]) == 0:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   635
                        self.ParamsDictionary.pop(index)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   636
                if len(self.Dictionary[index]) == 0:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   637
                    self.Dictionary.pop(index)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   638
                    if index in self.ParamsDictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   639
                        self.ParamsDictionary.pop(index)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   640
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   641
        return False
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   642
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   643
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   644
    Check if an entry exists in the Object Dictionary and returns the answer.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   645
    """
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   646
    def IsEntry(self, index, subIndex = None):
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   647
        if index in self.Dictionary:
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   648
            if not subIndex:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   649
                return True
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   650
            return subIndex <= len(self.Dictionary[index])
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   651
        return False
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   652
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   653
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   654
    Returns the value of the entry asked. If the entry has the value "count", it
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   655
    returns the number of subIndex in the entry except the first.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   656
    """
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   657
    def GetEntry(self, index, subIndex = None, compute = True):
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   658
        if index in self.Dictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   659
            if subIndex == None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   660
                if type(self.Dictionary[index]) == ListType:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   661
                    values = [len(self.Dictionary[index])]
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   662
                    for value in self.Dictionary[index]:
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   663
                        values.append(self.CompileValue(value, index, compute))
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   664
                    return values
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   665
                else:
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   666
                    return self.CompileValue(self.Dictionary[index], index, compute)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   667
            elif subIndex == 0:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   668
                if type(self.Dictionary[index]) == ListType:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   669
                    return len(self.Dictionary[index])
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   670
                else:
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   671
                    return self.CompileValue(self.Dictionary[index], index, compute)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   672
            elif type(self.Dictionary[index]) == ListType and 0 < subIndex <= len(self.Dictionary[index]):
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   673
                return self.CompileValue(self.Dictionary[index][subIndex - 1], index, compute)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   674
        return None
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   675
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   676
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   677
    Returns the value of the entry asked. If the entry has the value "count", it
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   678
    returns the number of subIndex in the entry except the first.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   679
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   680
    def GetParamsEntry(self, index, subIndex = None):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   681
        if not getattr(self, "ParamsDictionary", False):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   682
            self.ParamsDictionary = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   683
        if index in self.Dictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   684
            if subIndex == None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   685
                if type(self.Dictionary[index]) == ListType:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   686
                    if index in self.ParamsDictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   687
                        result = []
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   688
                        for i in xrange(len(self.Dictionary[index]) + 1):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   689
                            line = DefaultParams.copy()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   690
                            if i in self.ParamsDictionary[index]:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   691
                                line.update(self.ParamsDictionary[index][i])
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   692
                            result.append(line)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   693
                        return result
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   694
                    else:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   695
                        return [DefaultParams.copy() for i in xrange(len(self.Dictionary[index]) + 1)]
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   696
                else:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   697
                    result = DefaultParams.copy()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   698
                    if index in self.ParamsDictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   699
                        result.update(self.ParamsDictionary[index])
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   700
                    return result
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   701
            elif subIndex == 0 and type(self.Dictionary[index]) != ListType:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   702
                result = DefaultParams.copy()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   703
                if index in self.ParamsDictionary:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   704
                    result.update(self.ParamsDictionary[index])
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   705
                return result
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   706
            elif type(self.Dictionary[index]) == ListType and 0 <= subIndex <= len(self.Dictionary[index]):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   707
                result = DefaultParams.copy()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   708
                if index in self.ParamsDictionary and subIndex in self.ParamsDictionary[index]:
64
c72dd78e547f Bug reported by Dean corrected
lbessard
parents: 63
diff changeset
   709
                    result.update(self.ParamsDictionary[index][subIndex])
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   710
                return result
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   711
        return None
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   712
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   713
    def HasEntryCallbacks(self, index):
245
d43ebbed895f Modifying gen_cfile.py for generating C file from a node as data rather than a manager
lbessard
parents: 239
diff changeset
   714
        entry_infos = self.GetEntryInfos(index)
d43ebbed895f Modifying gen_cfile.py for generating C file from a node as data rather than a manager
lbessard
parents: 239
diff changeset
   715
        if entry_infos and "callback" in entry_infos:
d43ebbed895f Modifying gen_cfile.py for generating C file from a node as data rather than a manager
lbessard
parents: 239
diff changeset
   716
            return entry_infos["callback"]
d43ebbed895f Modifying gen_cfile.py for generating C file from a node as data rather than a manager
lbessard
parents: 239
diff changeset
   717
        else:
d43ebbed895f Modifying gen_cfile.py for generating C file from a node as data rather than a manager
lbessard
parents: 239
diff changeset
   718
            if not getattr(self, "ParamsDictionary", False):
d43ebbed895f Modifying gen_cfile.py for generating C file from a node as data rather than a manager
lbessard
parents: 239
diff changeset
   719
                self.ParamsDictionary = {}
d43ebbed895f Modifying gen_cfile.py for generating C file from a node as data rather than a manager
lbessard
parents: 239
diff changeset
   720
            if index in self.Dictionary and index in self.ParamsDictionary and "callback" in self.ParamsDictionary[index]:
d43ebbed895f Modifying gen_cfile.py for generating C file from a node as data rather than a manager
lbessard
parents: 239
diff changeset
   721
                return self.ParamsDictionary[index]["callback"]
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   722
        return False
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   723
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   724
    """
68
234dad27b398 Adding the possibility for users to choose between Dynamic Mapping and Static Mapping
lbessard
parents: 67
diff changeset
   725
    Check if an entry exists in the User Mapping Dictionary and returns the answer.
234dad27b398 Adding the possibility for users to choose between Dynamic Mapping and Static Mapping
lbessard
parents: 67
diff changeset
   726
    """
234dad27b398 Adding the possibility for users to choose between Dynamic Mapping and Static Mapping
lbessard
parents: 67
diff changeset
   727
    def IsMappingEntry(self, index):
234dad27b398 Adding the possibility for users to choose between Dynamic Mapping and Static Mapping
lbessard
parents: 67
diff changeset
   728
        if index in self.UserMapping:
234dad27b398 Adding the possibility for users to choose between Dynamic Mapping and Static Mapping
lbessard
parents: 67
diff changeset
   729
            return True
234dad27b398 Adding the possibility for users to choose between Dynamic Mapping and Static Mapping
lbessard
parents: 67
diff changeset
   730
        return False
234dad27b398 Adding the possibility for users to choose between Dynamic Mapping and Static Mapping
lbessard
parents: 67
diff changeset
   731
234dad27b398 Adding the possibility for users to choose between Dynamic Mapping and Static Mapping
lbessard
parents: 67
diff changeset
   732
    """
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   733
    Add a new entry in the User Mapping Dictionary
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   734
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   735
    def AddMappingEntry(self, index, subIndex = None, name = "Undefined", struct = 0, size = None, nbmax = None, default = None, values = None):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   736
        if index not in self.UserMapping:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   737
            if values == None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   738
                values = []
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   739
            if subIndex == None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   740
                self.UserMapping[index] = {"name" : name, "struct" : struct, "need" : False, "values" : values}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   741
                if size != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   742
                    self.UserMapping[index]["size"] = size
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   743
                if nbmax != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   744
                    self.UserMapping[index]["nbmax"] = nbmax
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   745
                if default != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   746
                    self.UserMapping[index]["default"] = default
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   747
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   748
        elif subIndex != None and subIndex == len(self.UserMapping[index]["values"]):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   749
            if values == None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   750
                values = {}
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   751
            self.UserMapping[index]["values"].append(values)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   752
            return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   753
        return False
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   754
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   755
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   756
    Warning ! Modifies an existing entry in the User Mapping Dictionary. Can't add a new one.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   757
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   758
    def SetMappingEntry(self, index, subIndex = None, name = None, struct = None, size = None, nbmax = None, default = None, values = None):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   759
        if index in self.UserMapping:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   760
            if subIndex == None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   761
                if name != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   762
                    self.UserMapping[index]["name"] = name
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   763
                    if self.UserMapping[index]["struct"] & OD_IdenticalSubindexes:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   764
                        self.UserMapping[index]["values"][1]["name"] = name + " %d[(sub)]"
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   765
                    elif not self.UserMapping[index]["struct"] & OD_MultipleSubindexes:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   766
                        self.UserMapping[index]["values"][0]["name"] = name
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   767
                if struct != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   768
                    self.UserMapping[index]["struct"] = struct
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   769
                if size != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   770
                    self.UserMapping[index]["size"] = size
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   771
                if nbmax != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   772
                    self.UserMapping[index]["nbmax"] = nbmax
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   773
                if default != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   774
                    self.UserMapping[index]["default"] = default
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   775
                if values != None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   776
                    self.UserMapping[index]["values"] = values
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   777
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   778
            elif 0 <= subIndex < len(self.UserMapping[index]["values"]) and values != None:
281
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
   779
                if "type" in values:
453
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   780
                    if self.UserMapping[index]["struct"] & OD_IdenticalSubindexes:
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   781
                        if self.IsStringType(self.UserMapping[index]["values"][subIndex]["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   782
                            if self.IsRealType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   783
                                for i in xrange(len(self.Dictionary[index])):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   784
                                    self.SetEntry(index, i + 1, 0.)
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   785
                            elif not self.IsStringType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   786
                                for i in xrange(len(self.Dictionary[index])):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   787
                                    self.SetEntry(index, i + 1, 0)
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   788
                        elif self.IsRealType(self.UserMapping[index]["values"][subIndex]["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   789
                            if self.IsStringType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   790
                                for i in xrange(len(self.Dictionary[index])):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   791
                                    self.SetEntry(index, i + 1, "")
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   792
                            elif not self.IsRealType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   793
                                for i in xrange(len(self.Dictionary[index])):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   794
                                    self.SetEntry(index, i + 1, 0)
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   795
                        elif self.IsStringType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   796
                            for i in xrange(len(self.Dictionary[index])):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   797
                                self.SetEntry(index, i + 1, "")
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   798
                        elif self.IsRealType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   799
                            for i in xrange(len(self.Dictionary[index])):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   800
                                self.SetEntry(index, i + 1, 0.)                        
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   801
                    else:
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   802
                        if self.IsStringType(self.UserMapping[index]["values"][subIndex]["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   803
                            if self.IsRealType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   804
                                self.SetEntry(index, subIndex, 0.)
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   805
                            elif not self.IsStringType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   806
                                self.SetEntry(index, subIndex, 0)
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   807
                        elif self.IsRealType(self.UserMapping[index]["values"][subIndex]["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   808
                            if self.IsStringType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   809
                                self.SetEntry(index, subIndex, "")
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   810
                            elif not self.IsRealType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   811
                                self.SetEntry(index, subIndex, 0)
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   812
                        elif self.IsStringType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   813
                            self.SetEntry(index, subIndex, "")
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   814
                        elif self.IsRealType(values["type"]):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
   815
                            self.SetEntry(index, subIndex, 0.)
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   816
                self.UserMapping[index]["values"][subIndex].update(values)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   817
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   818
        return False
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   819
    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   820
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   821
    Removes an existing entry in the User Mapping Dictionary. If a subIndex is specified
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   822
    it will remove this subIndex only if it's the last of the index. If no subIndex
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   823
    is specified it removes the whole index and subIndexes from the User Mapping Dictionary.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   824
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   825
    def RemoveMappingEntry(self, index, subIndex = None):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   826
        if index in self.UserMapping:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   827
            if subIndex == None:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   828
                self.UserMapping.pop(index)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   829
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   830
            elif subIndex == len(self.UserMapping[index]["values"]) - 1:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   831
                self.UserMapping[index]["values"].pop(subIndex)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   832
                return True
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   833
        return False
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   834
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   835
    def RemoveMapVariable(self, index, subIndex = None):
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   836
        model = index << 16
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   837
        mask = 0xFFFF << 16
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   838
        if subIndex:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   839
            model += subIndex << 8
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   840
            mask += 0xFF << 8
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   841
        for i in self.Dictionary.iterkeys():
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   842
            if 0x1600 <= i <= 0x17FF or 0x1A00 <= i <= 0x1BFF:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   843
                for j,value in enumerate(self.Dictionary[i]):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   844
                    if (value & mask) == model:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   845
                        self.Dictionary[i][j] = 0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   846
    
63
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   847
    def UpdateMapVariable(self, index, subIndex, size):
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   848
        model = index << 16
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   849
        mask = 0xFFFF << 16
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   850
        if subIndex:
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   851
            model += subIndex << 8
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   852
            mask = 0xFF << 8
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   853
        for i in self.Dictionary.iterkeys():
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   854
            if 0x1600 <= i <= 0x17FF or 0x1A00 <= i <= 0x1BFF:
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   855
                for j,value in enumerate(self.Dictionary[i]):
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   856
                    if (value & mask) == model:
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   857
                        self.Dictionary[i][j] = model + size
2be18e405e40 Bug on map variable type changing and on comments with special characters corrected
lbessard
parents: 62
diff changeset
   858
    
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   859
    def RemoveLine(self, index, max, incr = 1):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   860
        i = index
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   861
        while i < max and self.IsEntry(i + incr):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   862
            self.Dictionary[i] = self.Dictionary[i + incr]
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   863
            i += incr
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   864
        self.Dictionary.pop(i)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   865
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   866
    def RemoveUserType(self, index):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   867
        type = self.GetEntry(index, 1)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   868
        for i in self.UserMapping:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   869
            for value in self.UserMapping[i]["values"]:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   870
                if value["type"] == index:
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   871
                    value["type"] = type
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   872
        self.RemoveMappingEntry(index)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   873
        self.RemoveEntry(index)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   874
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   875
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   876
    Return a copy of the node
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   877
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   878
    def Copy(self):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   879
        return cPickle.loads(cPickle.dumps(self))
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   880
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   881
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   882
    Return a sorted list of indexes in Object Dictionary
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   883
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   884
    def GetIndexes(self):
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   885
        listindex = self.Dictionary.keys()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   886
        listindex.sort()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   887
        return listindex
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   888
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   889
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   890
    Print the Dictionary values
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   891
    """
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   892
    def Print(self):
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   893
        print self.PrintString()
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   894
    
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   895
    def PrintString(self):
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   896
        result = ""
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   897
        listindex = self.Dictionary.keys()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   898
        listindex.sort()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   899
        for index in listindex:
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   900
            name = self.GetEntryName(index)
239
f45fd4cd3832 add auto-mapping tool (config_utils)
greg
parents: 236
diff changeset
   901
            values = self.Dictionary[index]
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   902
            if isinstance(values, ListType):
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   903
                result += "%04X (%s):\n"%(index, name)
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   904
                for subidx, value in enumerate(values):
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   905
                    subentry_infos = self.GetSubentryInfos(index, subidx + 1)
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   906
                    if index == 0x1F22 and value:
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   907
                        nb_params = BE_to_LE(value[:4])
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   908
                        data = value[4:]
274
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   909
                        value = "%d arg defined"%nb_params
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   910
                        i = 0
274
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   911
                        count = 1
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   912
                        while i < len(data):
274
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   913
                            value += "\n%04X %02X, arg %d: "%(index, subidx+1, count)
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   914
                            value += "%04X"%BE_to_LE(data[i:i+2])
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   915
                            value += " %02X"%BE_to_LE(data[i+2:i+3])
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   916
                            size = BE_to_LE(data[i+3:i+7])
274
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   917
                            value += " %08X"%size
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   918
                            value += (" %0"+"%d"%(size * 2)+"X")%BE_to_LE(data[i+7:i+7+size])
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   919
                            i += 7 + size
274
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   920
                            count += 1
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   921
                    elif isinstance(value, IntType):
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   922
                        value = "%X"%value
274
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   923
                    result += "%04X %02X (%s): %s\n"%(index, subidx+1, subentry_infos["name"], value)
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   924
            else:
274
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   925
                if isinstance(values, IntType):
39beb1c7542a Modifying node Print function for displaying more informations
lbessard
parents: 273
diff changeset
   926
                    values = "%X"%values
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   927
                result += "%04X (%s): %s\n"%(index, name, values)
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   928
        return result
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
   929
            
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   930
    def CompileValue(self, value, index, compute = True):
541
dcc7f1323ce5 fixed bug (forget to convert value in upper case)
greg
parents: 536
diff changeset
   931
        if isinstance(value, (StringType, UnicodeType)) and value.upper().find("$NODEID") != -1:
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   932
            base = self.GetBaseIndex(index)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   933
            try:
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   934
                raw = eval(value)
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   935
                if compute:
513
f0343a7457b8 Some instance type test improved
lbessard
parents: 510
diff changeset
   936
                    return eval(raw.upper().replace("$NODEID","self.ID"))
299
506f9700b9fb Allowing user to type formulas
lbessard
parents: 284
diff changeset
   937
                return raw
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   938
            except:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   939
                return 0
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   940
        else:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   941
            return value
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   942
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   943
#-------------------------------------------------------------------------------
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   944
#                         Node Informations Functions
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   945
#-------------------------------------------------------------------------------
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   946
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   947
    def GetBaseIndex(self, index):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   948
        for mapping in self.GetMappings():
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   949
            result = FindIndex(index, mapping)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   950
            if result != None:
227
f76c64f66097 Bugs on cfile generation fixed
lbessard
parents: 205
diff changeset
   951
                return (index - result) / mapping[result].get("incr", 1)
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   952
        result = FindIndex(index, MappingDictionary)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   953
        if result != None:
227
f76c64f66097 Bugs on cfile generation fixed
lbessard
parents: 205
diff changeset
   954
            return (index - result) / MappingDictionary[result].get("incr", 1)
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   955
        return 0
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   956
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   957
    def GetCustomisedTypeValues(self, index):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   958
        values = self.GetEntry(index)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   959
        customisabletypes = self.GetCustomisableTypes()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   960
        return values, customisabletypes[values[1]][1]
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   961
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   962
    def GetEntryName(self, index, compute=True):
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   963
        result = None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   964
        mappings = self.GetMappings()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   965
        i = 0
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   966
        while not result and i < len(mappings):
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   967
            result = FindEntryName(index, mappings[i], compute)
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   968
            i += 1
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   969
        if result == None:
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   970
            result = FindEntryName(index, MappingDictionary, compute)
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   971
        return result
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   972
    
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   973
    def GetEntryInfos(self, index, compute=True):
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   974
        result = None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   975
        mappings = self.GetMappings()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   976
        i = 0
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   977
        while not result and i < len(mappings):
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   978
            result = FindEntryInfos(index, mappings[i], compute)
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   979
            i += 1
659
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
   980
        r301 = FindEntryInfos(index, MappingDictionary, compute)
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
   981
        if r301 :
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
   982
            if result is not None:
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
   983
                r301.update(result)
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
   984
            return r301
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   985
        return result
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   986
    
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   987
    def GetSubentryInfos(self, index, subIndex, compute=True):
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   988
        result = None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   989
        mappings = self.GetMappings()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   990
        i = 0
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   991
        while not result and i < len(mappings):
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
   992
            result = FindSubentryInfos(index, subIndex, mappings[i], compute)
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   993
            if result:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   994
                result["user_defined"] = i == len(mappings) - 1 and index >= 0x1000
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
   995
            i += 1
659
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
   996
        r301 = FindSubentryInfos(index, subIndex, MappingDictionary, compute)
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
   997
        if r301 :
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
   998
            if result is not None:
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
   999
                r301.update(result)
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
  1000
            else:
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
  1001
                r301["user_defined"] = False
1041153c5fd2 Fix some side effects of EDS import, while editing afterward
Edouard Tisserant
parents: 584
diff changeset
  1002
            return r301
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1003
        return result
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1004
    
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1005
    def GetTypeIndex(self, typename):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1006
        result = None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1007
        mappings = self.GetMappings()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1008
        i = 0
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1009
        while not result and i < len(mappings):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1010
            result = FindTypeIndex(typename, mappings[i])
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1011
            i += 1
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1012
        if result == None:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1013
            result = FindTypeIndex(typename, MappingDictionary)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1014
        return result
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1015
    
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1016
    def GetTypeName(self, typeindex):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1017
        result = None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1018
        mappings = self.GetMappings()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1019
        i = 0
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1020
        while not result and i < len(mappings):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1021
            result = FindTypeName(typeindex, mappings[i])
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1022
            i += 1
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1023
        if result == None:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1024
            result = FindTypeName(typeindex, MappingDictionary)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1025
        return result
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1026
    
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1027
    def GetTypeDefaultValue(self, typeindex):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1028
        result = None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1029
        mappings = self.GetMappings()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1030
        i = 0
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1031
        while not result and i < len(mappings):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1032
            result = FindTypeDefaultValue(typeindex, mappings[i])
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1033
            i += 1
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1034
        if result == None:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1035
            result = FindTypeDefaultValue(typeindex, MappingDictionary)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1036
        return result
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1037
    
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
  1038
    def GetMapVariableList(self, compute=True):
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
  1039
        list = FindMapVariableList(MappingDictionary, self, compute)
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1040
        for mapping in self.GetMappings():
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
  1041
            list.extend(FindMapVariableList(mapping, self, compute))
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1042
        list.sort()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1043
        return list
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1044
    
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1045
    def GetMandatoryIndexes(self, node = None):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1046
        list = FindMandatoryIndexes(MappingDictionary)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1047
        for mapping in self.GetMappings():
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1048
            list.extend(FindMandatoryIndexes(mapping))
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1049
        return list
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1050
    
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1051
    def GetCustomisableTypes(self):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1052
        dic = {}
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1053
        for index, valuetype in CustomisableTypes:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1054
            name = self.GetTypeName(index)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1055
            dic[index] = [name, valuetype]
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1056
        return dic
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1057
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1058
#-------------------------------------------------------------------------------
281
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1059
#                            Type helper functions
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1060
#-------------------------------------------------------------------------------
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1061
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1062
    def IsStringType(self, index):
523
8db762eb756b Fixed bug in Node.py function IsStringType : add domain type
greg
parents: 513
diff changeset
  1063
        if index in (0x9, 0xA, 0xB, 0xF):
281
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1064
            return True
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1065
        elif 0xA0 <= index < 0x100:
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1066
            result = self.GetEntry(index, 1)
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1067
            if result is not None and result in (0x9, 0xA, 0xB):
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1068
                return True
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1069
        return False
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1070
453
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
  1071
    def IsRealType(self, index):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
  1072
        if index in (0x8, 0x11):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
  1073
            return True
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
  1074
        elif 0xA0 <= index < 0x100:
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
  1075
            result = self.GetEntry(index, 1)
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
  1076
            if result is not None and result in (0x8, 0x11):
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
  1077
                return True
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
  1078
        return False
c74a73474cce Problem with Real types unsupported fixed
lbessard
parents: 418
diff changeset
  1079
281
685d9a26e4f9 Obsolete example files in objdictgen/examples replaced by some new equivalents
lbessard
parents: 274
diff changeset
  1080
#-------------------------------------------------------------------------------
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1081
#                            Type and Map Variable Lists
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1082
#-------------------------------------------------------------------------------
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1083
    
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1084
    def GetTypeList(self):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1085
        list = FindTypeList(MappingDictionary)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1086
        for mapping in self.GetMappings():
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1087
            list.extend(FindTypeList(mapping))
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1088
        list.sort()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1089
        return ",".join(list)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1090
536
00935990f087 Adding index in PDO mapping names for differenciate mapped variables when they have the same name
lbessard
parents: 523
diff changeset
  1091
    def GenerateMapName(self, name, index, subindex):
00935990f087 Adding index in PDO mapping names for differenciate mapped variables when they have the same name
lbessard
parents: 523
diff changeset
  1092
        return "%s (0x%4.4X)" % (name, index)
00935990f087 Adding index in PDO mapping names for differenciate mapped variables when they have the same name
lbessard
parents: 523
diff changeset
  1093
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1094
    """
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1095
    Generate the list of variables that can be mapped for the current node
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1096
    """
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1097
    def GenerateMapList(self):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1098
        self.MapList = "None"
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1099
        self.NameTranslation = {"None" : "00000000"}
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1100
        self.MapTranslation = {"00000000" : "None"}
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1101
        list = self.GetMapVariableList()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1102
        for index, subIndex, size, name in list:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1103
            self.MapList += ",%s"%name
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1104
            map = "%04X%02X%02X"%(index,subIndex,size)
536
00935990f087 Adding index in PDO mapping names for differenciate mapped variables when they have the same name
lbessard
parents: 523
diff changeset
  1105
            mapname = self.GenerateMapName(name, index, subIndex)
00935990f087 Adding index in PDO mapping names for differenciate mapped variables when they have the same name
lbessard
parents: 523
diff changeset
  1106
            self.NameTranslation[mapname] = map
00935990f087 Adding index in PDO mapping names for differenciate mapped variables when they have the same name
lbessard
parents: 523
diff changeset
  1107
            self.MapTranslation[map] = mapname
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1108
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1109
    def GetMapValue(self, mapname):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1110
        if mapname == "None":
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1111
            return 0
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1112
        else:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1113
            list = self.GetMapVariableList()
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1114
            for index, subIndex, size, name in list:
536
00935990f087 Adding index in PDO mapping names for differenciate mapped variables when they have the same name
lbessard
parents: 523
diff changeset
  1115
                if mapname == self.GenerateMapName(name, index, subIndex):
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1116
                    return (index << 16) + (subIndex << 8) + size
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1117
            return None
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1118
    
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1119
    def GetMapName(self, value):
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1120
        if value != 0:
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1121
            index = value >> 16
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1122
            subindex = (value >> 8) % (1 << 8)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1123
            result = self.GetSubentryInfos(index, subindex)
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1124
            if result:
536
00935990f087 Adding index in PDO mapping names for differenciate mapped variables when they have the same name
lbessard
parents: 523
diff changeset
  1125
                return self.GenerateMapName(result["name"], index, subindex)
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1126
        return "None"
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1127
    
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1128
    """
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1129
    Return the list of variables that can be mapped for the current node
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1130
    """
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1131
    def GetMapList(self):
584
e23359f62023 Bug with in access value translation and modification on subindex 0 of PDOmapping entries fixed
laurent
parents: 541
diff changeset
  1132
        list = [_("None")] + [self.GenerateMapName(name, index, subIndex) for index, subIndex, size, name in self.GetMapVariableList()]
205
dac0f9b4e3f8 Adding program for network management
lbessard
parents: 182
diff changeset
  1133
        return ",".join(list)
273
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1134
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1135
def BE_to_LE(value):
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1136
    """
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1137
    Convert Big Endian to Little Endian 
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1138
    @param value: value expressed in Big Endian
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1139
    @param size: number of bytes generated
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1140
    @return: a string containing the value converted
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1141
    """
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1142
    
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1143
    data = [char for char in value]
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1144
    data.reverse()
58b39f97e352 Some bugs fixed
lbessard
parents: 260
diff changeset
  1145
    return int("".join(["%2.2X"%ord(char) for char in data]), 16)
327
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1146
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1147
def LE_to_BE(value, size):
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1148
    """
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1149
    Convert Little Endian to Big Endian
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1150
    @param value: value expressed in integer
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1151
    @param size: number of bytes generated
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1152
    @return: a string containing the value converted
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1153
    """
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1154
    
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1155
    data = ("%" + str(size * 2) + "." + str(size * 2) + "X") % value
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1156
    list_car = [data[i:i+2] for i in xrange(0, len(data), 2)]
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1157
    list_car.reverse()
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1158
    return "".join([chr(int(car, 16)) for car in list_car])
b904d9a99e28 Adding DCFEditor Dialog to networkedit
lbessard
parents: 317
diff changeset
  1159