234 |
234 |
235 class ModulesLibrary: |
235 class ModulesLibrary: |
236 |
236 |
237 MODULES_EXTRA_PARAMS = [ |
237 MODULES_EXTRA_PARAMS = [ |
238 ("pdo_alignment", { |
238 ("pdo_alignment", { |
239 "column_label": _("PDO alignment (bits)"), |
239 "column_label": _("PDO alignment"), |
240 "default": 8}), |
240 "column_size": 150, |
|
241 "default": 8, |
|
242 "description": _( |
|
243 "Minimal size in bits between 2 pdo entries")}), |
241 ("max_pdo_size", { |
244 ("max_pdo_size", { |
242 "column_label": _("Max entries by PDO (-1=unbounded)"), |
245 "column_label": _("Max entries by PDO"), |
243 "default": -1}), |
246 "column_size": 150, |
|
247 "default": -1, |
|
248 "description": _( |
|
249 """Maximal number of entries mapped in a PDO |
|
250 including empty entries used for PDO alignment |
|
251 (-1=unbounded)""")}), |
244 ("add_pdo", { |
252 ("add_pdo", { |
245 "column_label": _("Creating new PDO (1=possible)"), |
253 "column_label": _("Creating new PDO"), |
246 "default": 0}) |
254 "column_size": 150, |
|
255 "default": 0, |
|
256 "description": _( |
|
257 """Adding a PDO not defined in default configuration |
|
258 for mapping needed location variables |
|
259 (1 if possible)""")}) |
247 ] |
260 ] |
248 |
261 |
249 def __init__(self, path, parent_library=None): |
262 def __init__(self, path, parent_library=None): |
250 self.Path = path |
263 self.Path = path |
251 if not os.path.exists(self.Path): |
264 if not os.path.exists(self.Path): |
386 reader = csv.reader(csvfile, dialect) |
399 reader = csv.reader(csvfile, dialect) |
387 for row in reader: |
400 for row in reader: |
388 if has_header: |
401 if has_header: |
389 has_header = False |
402 has_header = False |
390 else: |
403 else: |
391 try: |
404 params_values = {} |
392 self.ModulesExtraParams[tuple(map(int, row[:3]))] = dict( |
405 for (param, param_infos), value in zip( |
393 zip([param for param, params_infos in self.MODULES_EXTRA_PARAMS], |
406 self.MODULES_EXTRA_PARAMS, row[3:]): |
394 int(row[3]))) |
407 if value != "": |
395 except: |
408 params_values[param] = int(value) |
396 pass |
409 self.ModulesExtraParams[ |
|
410 tuple(map(int, row[:3]))] = params_values |
397 csvfile.close() |
411 csvfile.close() |
398 |
412 |
399 def SaveModulesExtraParams(self): |
413 def SaveModulesExtraParams(self): |
400 csvfile = open(self.GetModulesExtraParamsFilePath(), "wb") |
414 csvfile = open(self.GetModulesExtraParamsFilePath(), "wb") |
401 extra_params = [param for param, params_infos in self.MODULES_EXTRA_PARAMS] |
415 extra_params = [param for param, params_infos in self.MODULES_EXTRA_PARAMS] |
410 def SetModuleExtraParam(self, vendor, product_code, revision_number, param, value): |
424 def SetModuleExtraParam(self, vendor, product_code, revision_number, param, value): |
411 vendor = ExtractHexDecValue(vendor) |
425 vendor = ExtractHexDecValue(vendor) |
412 product_code = ExtractHexDecValue(product_code) |
426 product_code = ExtractHexDecValue(product_code) |
413 revision_number = ExtractHexDecValue(revision_number) |
427 revision_number = ExtractHexDecValue(revision_number) |
414 |
428 |
415 self.ModulesExtraParams[tuple([vendor, product_code, revision_number])][param] = value |
429 module_infos = (vendor, product_code, revision_number) |
|
430 self.ModulesExtraParams.setdefault(module_infos, {}) |
|
431 self.ModulesExtraParams[module_infos][param] = value |
|
432 |
416 self.SaveModulesExtraParams() |
433 self.SaveModulesExtraParams() |
417 |
434 |
418 def GetModuleExtraParams(self, vendor, product_code, revision_number): |
435 def GetModuleExtraParams(self, vendor, product_code, revision_number): |
419 vendor = ExtractHexDecValue(vendor) |
436 vendor = ExtractHexDecValue(vendor) |
420 product_code = ExtractHexDecValue(product_code) |
437 product_code = ExtractHexDecValue(product_code) |
423 if self.ParentLibrary is not None: |
440 if self.ParentLibrary is not None: |
424 extra_params = self.ParentLibrary.GetModuleExtraParams(vendor, product_code, revision_number) |
441 extra_params = self.ParentLibrary.GetModuleExtraParams(vendor, product_code, revision_number) |
425 else: |
442 else: |
426 extra_params = {} |
443 extra_params = {} |
427 |
444 |
428 extra_params.update(self.ModulesExtraParams.get(tuple([vendor, product_code, revision_number]), {})) |
445 extra_params.update(self.ModulesExtraParams.get((vendor, product_code, revision_number), {})) |
429 |
446 |
430 for param, param_infos in self.MODULES_EXTRA_PARAMS: |
447 for param, param_infos in self.MODULES_EXTRA_PARAMS: |
431 extra_params.setdefault(param, param_infos["default"]) |
448 extra_params.setdefault(param, param_infos["default"]) |
432 |
449 |
433 return extra_params |
450 return extra_params |