etherlab/EthercatCFileGenerator.py
author Edouard Tisserant
Thu, 04 Jun 2020 11:14:21 +0200
branchsvghmi
changeset 2980 2a21d6060d64
parent 2437 105c20fdeb19
child 2643 b98d9e08231f
permissions -rw-r--r--
SVGHMI: add "unsubscribable" property to widgets in order to generalize what already happens for jump buttons.
In most cases jump buttons do not really subscribe to pointed HMI variable, path is given as a relative page jump path. When widget.unsubscribable is set to true, no subscription is made on page switch, but still offset is updated.
This fixes bug happening on relative jump buttons without "disabled" element where offset did not change on relative page switch.
2165
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     1
#!/usr/bin/env python
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     2
# -*- coding: utf-8 -*-
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     3
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     4
# This file is part of Beremiz
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     5
#
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     6
# Copyright (C) 2011-2014: Laurent BESSARD, Edouard TISSERANT
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     7
#                          RTES Lab : CRKim, JBLee, youcu
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     8
#                          Higen Motor : Donggu Kang
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
     9
#
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
    10
# See COPYING file for copyrights details.
02a2b5dee5e3 Merged GPL + LGPL v2 or later EtherCAT extension. Fixed headers and copyright notice.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents: 2144
diff changeset
    11
2405
af050469fc5c clean etherlab: pylint, W1618 # (no-absolute-import) import missing `from __future__ import absolute_import`
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2397
diff changeset
    12
from __future__ import absolute_import
2437
105c20fdeb19 python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2425
diff changeset
    13
from __future__ import division
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    14
import os
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    15
2405
af050469fc5c clean etherlab: pylint, W1618 # (no-absolute-import) import missing `from __future__ import absolute_import`
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2397
diff changeset
    16
from etherlab.EthercatSlave import ExtractHexDecValue, DATATYPECONVERSION, ExtractName
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    17
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    18
SLAVE_PDOS_CONFIGURATION_DECLARATION = """
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    19
/* Slave %(slave)d, "%(device_type)s"
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    20
 * Vendor ID:       0x%(vendor).8x
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    21
 * Product code:    0x%(product_code).8x
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    22
 * Revision number: 0x%(revision_number).8x
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    23
 */
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    24
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    25
ec_pdo_entry_info_t slave_%(slave)d_pdo_entries[] = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    26
%(pdos_entries_infos)s
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    27
};
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    28
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    29
ec_pdo_info_t slave_%(slave)d_pdos[] = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    30
%(pdos_infos)s
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    31
};
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    32
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    33
ec_sync_info_t slave_%(slave)d_syncs[] = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    34
%(pdos_sync_infos)s
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    35
    {0xff}
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    36
};
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    37
"""
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    38
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    39
SLAVE_CONFIGURATION_TEMPLATE = """
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    40
    if (!(slave%(slave)d = ecrt_master_slave_config(master, %(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x))) {
2116
2b1980a038b1 Better logging, saffer failure at init (allows restart)
Edouard Tisserant
parents: 2111
diff changeset
    41
        SLOGF(LOG_CRITICAL, "EtherCAT failed to get slave %(device_type)s configuration at alias %(alias)d and position %(position)d.");
2121
11102245e1d4 Fixed (again) some non-clean exit in case of SDO failure at init
Edouard Tisserant
parents: 2117
diff changeset
    42
        goto ecat_failed;
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    43
    }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    44
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    45
    if (ecrt_slave_config_pdos(slave%(slave)d, EC_END, slave_%(slave)d_syncs)) {
2116
2b1980a038b1 Better logging, saffer failure at init (allows restart)
Edouard Tisserant
parents: 2111
diff changeset
    46
        SLOGF(LOG_CRITICAL, "EtherCAT failed to configure PDOs for slave %(device_type)s at alias %(alias)d and position %(position)d.");
2117
accc4cbca8d3 Now failure in template based part of C code also release the master for later use...
Edouard Tisserant
parents: 2116
diff changeset
    47
        goto ecat_failed;
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    48
    }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    49
"""
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    50
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    51
SLAVE_INITIALIZATION_TEMPLATE = """
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    52
    {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    53
        uint8_t value[%(data_size)d];
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    54
        EC_WRITE_%(data_type)s((uint8_t *)value, %(data)s);
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    55
        if (ecrt_master_sdo_download(master, %(slave)d, 0x%(index).4x, 0x%(subindex).2x, (uint8_t *)value, %(data_size)d, &abort_code)) {
2116
2b1980a038b1 Better logging, saffer failure at init (allows restart)
Edouard Tisserant
parents: 2111
diff changeset
    56
            SLOGF(LOG_CRITICAL, "EtherCAT Failed to initialize slave %(device_type)s at alias %(alias)d and position %(position)d. Error: %%d", abort_code);
2117
accc4cbca8d3 Now failure in template based part of C code also release the master for later use...
Edouard Tisserant
parents: 2116
diff changeset
    57
            goto ecat_failed;
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    58
        }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    59
    }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    60
"""
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    61
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    62
SLAVE_OUTPUT_PDO_DEFAULT_VALUE = """
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    63
    {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    64
        uint8_t value[%(data_size)d];
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    65
        if (ecrt_master_sdo_upload(master, %(slave)d, 0x%(index).4x, 0x%(subindex).2x, (uint8_t *)value, %(data_size)d, &result_size, &abort_code)) {
2116
2b1980a038b1 Better logging, saffer failure at init (allows restart)
Edouard Tisserant
parents: 2111
diff changeset
    66
            SLOGF(LOG_CRITICAL, "EtherCAT failed to get default value for output PDO in slave %(device_type)s at alias %(alias)d and position %(position)d. Error: %%ud", abort_code);
2117
accc4cbca8d3 Now failure in template based part of C code also release the master for later use...
Edouard Tisserant
parents: 2116
diff changeset
    67
            goto ecat_failed;
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    68
        }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    69
        %(real_var)s = EC_READ_%(data_type)s((uint8_t *)value);
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    70
    }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    71
"""
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    72
2360
2a3d022a7dac cleanup etherlab: pep8, E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2355
diff changeset
    73
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    74
def ConfigureVariable(entry_infos, str_completion):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    75
    entry_infos["data_type"] = DATATYPECONVERSION.get(entry_infos["var_type"], None)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    76
    if entry_infos["data_type"] is None:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
    77
        msg = _("Type of location \"%s\" not yet supported!") % entry_infos["var_name"]
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
    78
        raise ValueError(msg)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
    79
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    80
    if not entry_infos.get("no_decl", False):
2377
88a9d64560d3 clean etherlab: pep8, W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2374
diff changeset
    81
        if "real_var" in entry_infos:
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    82
            str_completion["located_variables_declaration"].append(
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    83
                "IEC_%(var_type)s %(real_var)s;" % entry_infos)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    84
        else:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    85
            entry_infos["real_var"] = "beremiz" + entry_infos["var_name"]
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    86
            str_completion["located_variables_declaration"].extend(
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    87
                ["IEC_%(var_type)s %(real_var)s;" % entry_infos,
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    88
                 "IEC_%(var_type)s *%(var_name)s = &%(real_var)s;" % entry_infos])
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    89
        for declaration in entry_infos.get("extra_declarations", []):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    90
            entry_infos["extra_decl"] = declaration
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    91
            str_completion["located_variables_declaration"].append(
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
    92
                "IEC_%(var_type)s *%(extra_decl)s = &%(real_var)s;" % entry_infos)
2377
88a9d64560d3 clean etherlab: pep8, W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2374
diff changeset
    93
    elif "real_var" not in entry_infos:
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    94
        entry_infos["real_var"] = "beremiz" + entry_infos["var_name"]
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
    95
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    96
    str_completion["used_pdo_entry_offset_variables_declaration"].append(
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    97
        "unsigned int slave%(slave)d_%(index).4x_%(subindex).2x;" % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
    98
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
    99
    if entry_infos["data_type"] == "BIT":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   100
        str_completion["used_pdo_entry_offset_variables_declaration"].append(
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   101
            "unsigned int slave%(slave)d_%(index).4x_%(subindex).2x_bit;" % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   102
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   103
        str_completion["used_pdo_entry_configuration"].append(
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   104
            ("    {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, " +
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   105
             "0x%(index).4x, %(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x, " +
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   106
             "&slave%(slave)d_%(index).4x_%(subindex).2x_bit},") % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   107
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   108
        if entry_infos["dir"] == "I":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   109
            str_completion["retrieve_variables"].append(
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   110
                ("    %(real_var)s = EC_READ_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   111
                 "slave%(slave)d_%(index).4x_%(subindex).2x_bit);") % entry_infos)
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   112
        elif entry_infos["dir"] == "Q":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   113
            str_completion["publish_variables"].append(
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   114
                ("    EC_WRITE_BIT(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   115
                 "slave%(slave)d_%(index).4x_%(subindex).2x_bit, %(real_var)s);") % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   116
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   117
    else:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   118
        str_completion["used_pdo_entry_configuration"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   119
            ("    {%(alias)d, %(position)d, 0x%(vendor).8x, 0x%(product_code).8x, 0x%(index).4x, " +
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   120
             "%(subindex)d, &slave%(slave)d_%(index).4x_%(subindex).2x},") % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   121
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   122
        if entry_infos["dir"] == "I":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   123
            str_completion["retrieve_variables"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   124
                ("    %(real_var)s = EC_READ_%(data_type)s(domain1_pd + " +
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   125
                 "slave%(slave)d_%(index).4x_%(subindex).2x);") % entry_infos)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   126
        elif entry_infos["dir"] == "Q":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   127
            str_completion["publish_variables"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   128
                ("    EC_WRITE_%(data_type)s(domain1_pd + slave%(slave)d_%(index).4x_%(subindex).2x, " +
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   129
                 "%(real_var)s);") % entry_infos)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   130
2360
2a3d022a7dac cleanup etherlab: pep8, E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2355
diff changeset
   131
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   132
def ExclusionSortFunction(x, y):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   133
    if x["matching"] == y["matching"]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   134
        if x["assigned"] and not y["assigned"]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   135
            return -1
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   136
        elif not x["assigned"] and y["assigned"]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   137
            return 1
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   138
        return cmp(x["count"], y["count"])
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   139
    return -cmp(x["matching"], y["matching"])
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   140
2360
2a3d022a7dac cleanup etherlab: pep8, E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2355
diff changeset
   141
2397
25f16349644b clean etherlab: pylint, C1001 # (old-style-class) Old-style class defined.
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2381
diff changeset
   142
class _EthercatCFileGenerator(object):
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   143
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   144
    def __init__(self, controler):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   145
        self.Controler = controler
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   146
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   147
        self.Slaves = []
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   148
        self.UsedVariables = {}
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   149
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   150
    def __del__(self):
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   151
        self.Controler = None
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   152
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   153
    def DeclareSlave(self, slave_index, slave):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   154
        self.Slaves.append((slave_index, slave.getInfo().getAutoIncAddr(), slave))
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   155
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   156
    def DeclareVariable(self, slave_index, index, subindex, iec_type, dir, name, no_decl=False):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   157
        slave_variables = self.UsedVariables.setdefault(slave_index, {})
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   158
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   159
        entry_infos = slave_variables.get((index, subindex), None)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   160
        if entry_infos is None:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   161
            slave_variables[(index, subindex)] = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   162
                "infos": (iec_type, dir, name, no_decl, []),
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   163
                "mapped": False}
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   164
            return name
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   165
        elif entry_infos["infos"][:2] == (iec_type, dir):
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   166
            if name != entry_infos["infos"][2]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   167
                if dir == "I":
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   168
                    entry_infos["infos"][4].append(name)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   169
                    return entry_infos["infos"][2]
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   170
                else:
2425
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   171
                    msg = _("Output variables can't be defined with different locations ({a1} and {a2})").\
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   172
                          format(a1=entry_infos["infos"][2], a2=name)
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   173
                    raise ValueError(msg)
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   174
        else:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   175
            raise ValueError(_("Definition conflict for location \"%s\"") % name)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   176
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   177
    def GenerateCFile(self, filepath, location_str, master_number):
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   178
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   179
        # Extract etherlab master code template
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   180
        plc_etherlab_filepath = os.path.join(os.path.split(__file__)[0], "plc_etherlab.c")
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   181
        plc_etherlab_file = open(plc_etherlab_filepath, 'r')
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   182
        plc_etherlab_code = plc_etherlab_file.read()
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   183
        plc_etherlab_file.close()
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   184
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   185
        # Initialize strings for formatting master code template
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   186
        str_completion = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   187
            "location": location_str,
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   188
            "master_number": master_number,
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   189
            "located_variables_declaration": [],
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   190
            "used_pdo_entry_offset_variables_declaration": [],
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   191
            "used_pdo_entry_configuration": [],
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   192
            "pdos_configuration_declaration": "",
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   193
            "slaves_declaration": "",
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   194
            "slaves_configuration": "",
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   195
            "slaves_output_pdos_default_values_extraction": "",
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   196
            "slaves_initialization": "",
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   197
            "retrieve_variables": [],
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   198
            "publish_variables": [],
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   199
        }
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   200
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   201
        # Initialize variable storing variable mapping state
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   202
        for slave_entries in self.UsedVariables.itervalues():
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   203
            for entry_infos in slave_entries.itervalues():
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   204
                entry_infos["mapped"] = False
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   205
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   206
        # Sort slaves by position (IEC_Channel)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   207
        self.Slaves.sort()
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   208
        # Initialize dictionary storing alias auto-increment position values
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   209
        alias = {}
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   210
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   211
        # Generating code for each slave
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   212
        for (slave_idx, slave_alias, slave) in self.Slaves:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   213
            type_infos = slave.getType()
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   214
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   215
            # Defining slave alias and auto-increment position
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   216
            if alias.get(slave_alias) is not None:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   217
                alias[slave_alias] += 1
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   218
            else:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   219
                alias[slave_alias] = 0
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   220
            slave_pos = (slave_alias, alias[slave_alias])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   221
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   222
            # Extract slave device informations
2137
b65abacdbdf9 Added support for multiple module extra params in ModulesLibrary
Laurent Bessard
parents: 2121
diff changeset
   223
            device, module_extra_params = self.Controler.GetModuleInfos(type_infos)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   224
            if device is None:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   225
                msg = _("No informations found for device %s!") \
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   226
                      % (type_infos["device_type"])
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   227
                raise ValueError(msg)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   228
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   229
            # Extract slaves variables to be mapped
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   230
            slave_variables = self.UsedVariables.get(slave_idx, {})
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   231
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   232
            # Extract slave device object dictionary entries
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   233
            device_entries = device.GetEntriesList()
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   234
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   235
            # Adding code for declaring slave in master code template strings
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   236
            for element in ["vendor", "product_code", "revision_number"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   237
                type_infos[element] = ExtractHexDecValue(type_infos[element])
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   238
            type_infos.update(dict(zip(["slave", "alias", "position"], (slave_idx,) + slave_pos)))
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   239
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   240
            # Extract slave device CoE informations
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   241
            device_coe = device.getCoE()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   242
            if device_coe is not None:
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   243
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   244
                # If device support CanOpen over Ethernet, adding code for calling
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   245
                # init commands when initializing slave in master code template strings
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   246
                initCmds = []
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   247
                for initCmd in device_coe.getInitCmd():
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   248
                    initCmds.append({
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   249
                        "Index": ExtractHexDecValue(initCmd.getIndex()),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   250
                        "Subindex": ExtractHexDecValue(initCmd.getSubIndex()),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   251
                        "Value": initCmd.getData().getcontent()})
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   252
                initCmds.extend(slave.getStartupCommands())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   253
                for initCmd in initCmds:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   254
                    index = initCmd["Index"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   255
                    subindex = initCmd["Subindex"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   256
                    entry = device_entries.get((index, subindex), None)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   257
                    if entry is not None:
2437
105c20fdeb19 python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2425
diff changeset
   258
                        data_size = entry["BitSize"] // 8
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   259
                        data_str = ("0x%%.%dx" % (data_size * 2)) % initCmd["Value"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   260
                        init_cmd_infos = {
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   261
                            "index": index,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   262
                            "subindex": subindex,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   263
                            "data": data_str,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   264
                            "data_type": DATATYPECONVERSION.get(entry["Type"]),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   265
                            "data_size": data_size
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   266
                        }
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   267
                        init_cmd_infos.update(type_infos)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   268
                        str_completion["slaves_initialization"] += SLAVE_INITIALIZATION_TEMPLATE % init_cmd_infos
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   269
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   270
                # Extract slave device PDO configuration capabilities
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   271
                PdoAssign = device_coe.getPdoAssign()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   272
                PdoConfig = device_coe.getPdoConfig()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   273
            else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   274
                PdoAssign = PdoConfig = False
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   275
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   276
            # Test if slave has a configuration or need one
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   277
            if len(device.getTxPdo() + device.getRxPdo()) > 0 or len(slave_variables) > 0 and PdoConfig and PdoAssign:
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   278
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   279
                str_completion["slaves_declaration"] += "static ec_slave_config_t *slave%(slave)d = NULL;\n" % type_infos
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   280
                str_completion["slaves_configuration"] += SLAVE_CONFIGURATION_TEMPLATE % type_infos
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   281
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   282
                # Initializing
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   283
                pdos_infos = {
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   284
                    "pdos_entries_infos": [],
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   285
                    "pdos_infos": [],
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   286
                    "pdos_sync_infos": [],
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   287
                }
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   288
                pdos_infos.update(type_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   289
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   290
                sync_managers = []
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   291
                for sync_manager_idx, sync_manager in enumerate(device.getSm()):
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   292
                    sync_manager_infos = {
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   293
                        "index": sync_manager_idx,
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   294
                        "name": sync_manager.getcontent(),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   295
                        "slave": slave_idx,
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   296
                        "pdos": [],
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   297
                        "pdos_number": 0,
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   298
                    }
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   299
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   300
                    sync_manager_control_byte = ExtractHexDecValue(sync_manager.getControlByte())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   301
                    sync_manager_direction = sync_manager_control_byte & 0x0c
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   302
                    sync_manager_watchdog = sync_manager_control_byte & 0x40
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   303
                    if sync_manager_direction:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   304
                        sync_manager_infos["sync_manager_type"] = "EC_DIR_OUTPUT"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   305
                    else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   306
                        sync_manager_infos["sync_manager_type"] = "EC_DIR_INPUT"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   307
                    if sync_manager_watchdog:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   308
                        sync_manager_infos["watchdog"] = "EC_WD_ENABLE"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   309
                    else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   310
                        sync_manager_infos["watchdog"] = "EC_WD_DISABLE"
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   311
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   312
                    sync_managers.append(sync_manager_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   313
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   314
                pdos_index = []
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   315
                exclusive_pdos = {}
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   316
                selected_pdos = []
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   317
                for pdo, pdo_type in ([(pdo, "Inputs") for pdo in device.getTxPdo()] +
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   318
                                      [(pdo, "Outputs") for pdo in device.getRxPdo()]):
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   319
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   320
                    pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   321
                    pdos_index.append(pdo_index)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   322
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   323
                    excluded_list = pdo.getExclude()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   324
                    if len(excluded_list) > 0:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   325
                        exclusion_list = [pdo_index]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   326
                        for excluded in excluded_list:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   327
                            exclusion_list.append(ExtractHexDecValue(excluded.getcontent()))
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   328
                        exclusion_list.sort()
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   329
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   330
                        exclusion_scope = exclusive_pdos.setdefault(tuple(exclusion_list), [])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   331
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   332
                        entries = pdo.getEntry()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   333
                        pdo_mapping_match = {
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   334
                            "index": pdo_index,
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   335
                            "matching": 0,
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   336
                            "count": len(entries),
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   337
                            "assigned": pdo.getSm() is not None
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   338
                        }
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   339
                        exclusion_scope.append(pdo_mapping_match)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   340
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   341
                        for entry in entries:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   342
                            index = ExtractHexDecValue(entry.getIndex().getcontent())
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   343
                            subindex = ExtractHexDecValue(entry.getSubIndex())
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   344
                            if slave_variables.get((index, subindex), None) is not None:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   345
                                pdo_mapping_match["matching"] += 1
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   346
2374
aed3ca79a10a clean etherlab: pep8, E712 comparison to True should be 'if cond is True:' or 'if cond:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2360
diff changeset
   347
                        if pdo.getFixed() is not True:
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   348
                            pdo_mapping_match["matching"] += \
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   349
                                module_extra_params["max_pdo_size"] - \
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   350
                                pdo_mapping_match["count"]
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   351
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   352
                    elif pdo.getMandatory():
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   353
                        selected_pdos.append(pdo_index)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   354
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   355
                excluded_pdos = []
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   356
                for exclusion_scope in exclusive_pdos.itervalues():
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   357
                    exclusion_scope.sort(ExclusionSortFunction)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   358
                    start_excluding_index = 0
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   359
                    if exclusion_scope[0]["matching"] > 0:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   360
                        selected_pdos.append(exclusion_scope[0]["index"])
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   361
                        start_excluding_index = 1
2381
1c40e3976cc2 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2379
diff changeset
   362
                    excluded_pdos.extend([
1c40e3976cc2 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2379
diff changeset
   363
                        pdo["index"]
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   364
                        for pdo in exclusion_scope[start_excluding_index:]
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   365
                        if PdoAssign or not pdo["assigned"]])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   366
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   367
                for pdo, pdo_type in ([(pdo, "Inputs") for pdo in device.getTxPdo()] +
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   368
                                      [(pdo, "Outputs") for pdo in device.getRxPdo()]):
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   369
                    entries = pdo.getEntry()
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   370
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   371
                    pdo_index = ExtractHexDecValue(pdo.getIndex().getcontent())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   372
                    if pdo_index in excluded_pdos:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   373
                        continue
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   374
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   375
                    pdo_needed = pdo_index in selected_pdos
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   376
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   377
                    entries_infos = []
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   378
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   379
                    for entry in entries:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   380
                        index = ExtractHexDecValue(entry.getIndex().getcontent())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   381
                        subindex = ExtractHexDecValue(entry.getSubIndex())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   382
                        entry_infos = {
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   383
                            "index": index,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   384
                            "subindex": subindex,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   385
                            "name": ExtractName(entry.getName()),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   386
                            "bitlen": entry.getBitLen(),
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   387
                        }
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   388
                        entry_infos.update(type_infos)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   389
                        entries_infos.append("    {0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}, /* %(name)s */" % entry_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   390
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   391
                        entry_declaration = slave_variables.get((index, subindex), None)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   392
                        if entry_declaration is not None and not entry_declaration["mapped"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   393
                            pdo_needed = True
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   394
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   395
                            entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"],
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   396
                                                        entry_declaration["infos"])))
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   397
                            entry_declaration["mapped"] = True
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   398
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   399
                            entry_type = entry.getDataType().getcontent()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   400
                            if entry_infos["var_type"] != entry_type:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   401
                                message = _("Wrong type for location \"%s\"!") % entry_infos["var_name"]
2379
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   402
                                if self.Controler.GetSizeOfType(entry_infos["var_type"]) != \
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   403
                                   self.Controler.GetSizeOfType(entry_type):
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   404
                                    raise ValueError(message)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   405
                                else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   406
                                    self.Controler.GetCTRoot().logger.write_warning(_("Warning: ") + message + "\n")
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   407
2379
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   408
                            if (entry_infos["dir"] == "I" and pdo_type != "Inputs") or \
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   409
                               (entry_infos["dir"] == "Q" and pdo_type != "Outputs"):
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   410
                                raise ValueError(_("Wrong direction for location \"%s\"!") % entry_infos["var_name"])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   411
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   412
                            ConfigureVariable(entry_infos, str_completion)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   413
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   414
                        elif pdo_type == "Outputs" and entry.getDataType() is not None and device_coe is not None:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   415
                            data_type = entry.getDataType().getcontent()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   416
                            entry_infos["dir"] = "Q"
2437
105c20fdeb19 python3 support: pylint, W1619 #(old-division) division w/o __future__ statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2425
diff changeset
   417
                            entry_infos["data_size"] = max(1, entry_infos["bitlen"] // 8)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   418
                            entry_infos["data_type"] = DATATYPECONVERSION.get(data_type)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   419
                            entry_infos["var_type"] = data_type
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   420
                            entry_infos["real_var"] = "slave%(slave)d_%(index).4x_%(subindex).2x_default" % entry_infos
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   421
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   422
                            ConfigureVariable(entry_infos, str_completion)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   423
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   424
                            str_completion["slaves_output_pdos_default_values_extraction"] += \
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   425
                                SLAVE_OUTPUT_PDO_DEFAULT_VALUE % entry_infos
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   426
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   427
                    if pdo_needed:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   428
                        for excluded in pdo.getExclude():
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   429
                            excluded_index = ExtractHexDecValue(excluded.getcontent())
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   430
                            if excluded_index not in excluded_pdos:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   431
                                excluded_pdos.append(excluded_index)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   432
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   433
                        sm = pdo.getSm()
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   434
                        if sm is None:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   435
                            for sm_idx, sync_manager in enumerate(sync_managers):
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   436
                                if sync_manager["name"] == pdo_type:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   437
                                    sm = sm_idx
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   438
                        if sm is None:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   439
                            raise ValueError(_("No sync manager available for %s pdo!") % pdo_type)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   440
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   441
                        sync_managers[sm]["pdos_number"] += 1
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   442
                        sync_managers[sm]["pdos"].append(
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   443
                            {"slave": slave_idx,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   444
                             "index": pdo_index,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   445
                             "name": ExtractName(pdo.getName()),
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   446
                             "type": pdo_type,
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   447
                             "entries": entries_infos,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   448
                             "entries_number": len(entries_infos),
2374
aed3ca79a10a clean etherlab: pep8, E712 comparison to True should be 'if cond is True:' or 'if cond:'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2360
diff changeset
   449
                             "fixed": pdo.getFixed() is True})
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   450
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   451
                if PdoConfig and PdoAssign:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   452
                    dynamic_pdos = {}
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   453
                    dynamic_pdos_number = 0
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   454
                    for category, min_index, max_index in [("Inputs", 0x1600, 0x1800),
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   455
                                                           ("Outputs", 0x1a00, 0x1C00)]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   456
                        for sync_manager in sync_managers:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   457
                            if sync_manager["name"] == category:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   458
                                category_infos = dynamic_pdos.setdefault(category, {})
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   459
                                category_infos["sync_manager"] = sync_manager
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   460
                                category_infos["pdos"] = [pdo for pdo in category_infos["sync_manager"]["pdos"]
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   461
                                                          if not pdo["fixed"] and pdo["type"] == category]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   462
                                category_infos["current_index"] = min_index
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   463
                                category_infos["max_index"] = max_index
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   464
                                break
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   465
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   466
                    for (index, subindex), entry_declaration in slave_variables.iteritems():
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   467
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   468
                        if not entry_declaration["mapped"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   469
                            entry = device_entries.get((index, subindex), None)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   470
                            if entry is None:
2425
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   471
                                msg = _("Unknown entry index 0x{a1:.4x}, subindex 0x{a2:.2x} for device {a3}").\
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   472
                                      format(a1=index, a2=subindex, a3=type_infos["device_type"])
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   473
                                raise ValueError(msg)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   474
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   475
                            entry_infos = {
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   476
                                "index": index,
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   477
                                "subindex": subindex,
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   478
                                "name": entry["Name"],
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   479
                                "bitlen": entry["BitSize"],
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   480
                            }
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   481
                            entry_infos.update(type_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   482
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   483
                            entry_infos.update(dict(zip(["var_type", "dir", "var_name", "no_decl", "extra_declarations"],
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   484
                                                        entry_declaration["infos"])))
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   485
                            entry_declaration["mapped"] = True
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   486
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   487
                            if entry_infos["var_type"] != entry["Type"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   488
                                message = _("Wrong type for location \"%s\"!") % entry_infos["var_name"]
2379
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   489
                                if self.Controler.GetSizeOfType(entry_infos["var_type"]) != \
015b724c30a5 clean etherlab: pep8, E129 visually indented line with same indent as next logical line
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2378
diff changeset
   490
                                   self.Controler.GetSizeOfType(entry["Type"]):
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   491
                                    raise ValueError(message)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   492
                                else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   493
                                    self.Controler.GetCTRoot().logger.write_warning(message + "\n")
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   494
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   495
                            if entry_infos["dir"] == "I" and entry["PDOMapping"] in ["T", "RT"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   496
                                pdo_type = "Inputs"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   497
                            elif entry_infos["dir"] == "Q" and entry["PDOMapping"] in ["R", "RT"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   498
                                pdo_type = "Outputs"
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   499
                            else:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   500
                                msg = _("Wrong direction for location \"%s\"!") \
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   501
                                      % entry_infos["var_name"]
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   502
                                raise ValueError(msg)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   503
2377
88a9d64560d3 clean etherlab: pep8, W601 .has_key() is deprecated, use 'in'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2374
diff changeset
   504
                            if pdo_type not in dynamic_pdos:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   505
                                msg = _("No Sync manager defined for %s!") % pdo_type
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   506
                                raise ValueError(msg)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   507
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   508
                            ConfigureVariable(entry_infos, str_completion)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   509
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   510
                            if len(dynamic_pdos[pdo_type]["pdos"]) > 0:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   511
                                pdo = dynamic_pdos[pdo_type]["pdos"][0]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   512
                            elif module_extra_params["add_pdo"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   513
                                while dynamic_pdos[pdo_type]["current_index"] in pdos_index:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   514
                                    dynamic_pdos[pdo_type]["current_index"] += 1
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   515
                                if dynamic_pdos[pdo_type]["current_index"] >= dynamic_pdos[pdo_type]["max_index"]:
2378
7aa47c09f8f5 clean etherlab: pep8, W602 deprecated form of raising exception
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2377
diff changeset
   516
                                    raise ValueError(_("No more free PDO index available for %s!") % pdo_type)
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   517
                                pdos_index.append(dynamic_pdos[pdo_type]["current_index"])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   518
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   519
                                dynamic_pdos_number += 1
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   520
                                pdo = {"slave": slave_idx,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   521
                                       "index": dynamic_pdos[pdo_type]["current_index"],
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   522
                                       "name": "Dynamic PDO %d" % dynamic_pdos_number,
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   523
                                       "type": pdo_type,
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   524
                                       "entries": [],
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   525
                                       "entries_number": 0,
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   526
                                       "fixed": False}
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   527
                                dynamic_pdos[pdo_type]["sync_manager"]["pdos_number"] += 1
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   528
                                dynamic_pdos[pdo_type]["sync_manager"]["pdos"].append(pdo)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   529
                                dynamic_pdos[pdo_type]["pdos"].append(pdo)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   530
                            else:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   531
                                break
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   532
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   533
                            pdo["entries"].append("    {0x%(index).4x, 0x%(subindex).2x, %(bitlen)d}, /* %(name)s */" % entry_infos)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   534
                            if entry_infos["bitlen"] < module_extra_params["pdo_alignment"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   535
                                pdo["entries"].append("    {0x0000, 0x00, %d}, /* None */" % (
2407
5f2b1bb464a0 clean etherlab: pylint, C0330 # (bad-continuation) Wrong hanging indentation before block
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2405
diff changeset
   536
                                    module_extra_params["pdo_alignment"] - entry_infos["bitlen"]))
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   537
                            pdo["entries_number"] += 1
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   538
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   539
                            if pdo["entries_number"] == module_extra_params["max_pdo_size"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   540
                                dynamic_pdos[pdo_type]["pdos"].pop(0)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   541
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   542
                pdo_offset = 0
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   543
                entry_offset = 0
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   544
                for sync_manager_infos in sync_managers:
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   545
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   546
                    for pdo_infos in sync_manager_infos["pdos"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   547
                        pdo_infos["offset"] = entry_offset
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   548
                        pdo_entries = pdo_infos["entries"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   549
                        pdos_infos["pdos_infos"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   550
                            ("    {0x%(index).4x, %(entries_number)d, " +
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   551
                             "slave_%(slave)d_pdo_entries + %(offset)d}, /* %(name)s */") % pdo_infos)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   552
                        entry_offset += len(pdo_entries)
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   553
                        pdos_infos["pdos_entries_infos"].extend(pdo_entries)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   554
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   555
                    sync_manager_infos["offset"] = pdo_offset
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   556
                    pdo_offset_shift = sync_manager_infos["pdos_number"]
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   557
                    pdos_infos["pdos_sync_infos"].append(
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   558
                        ("    {%(index)d, %(sync_manager_type)s, %(pdos_number)d, " +
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   559
                         ("slave_%(slave)d_pdos + %(offset)d" if pdo_offset_shift else "NULL") +
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   560
                         ", %(watchdog)s},") % sync_manager_infos)
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   561
                    pdo_offset += pdo_offset_shift
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   562
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   563
                for element in ["pdos_entries_infos", "pdos_infos", "pdos_sync_infos"]:
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   564
                    pdos_infos[element] = "\n".join(pdos_infos[element])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   565
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   566
                str_completion["pdos_configuration_declaration"] += SLAVE_PDOS_CONFIGURATION_DECLARATION % pdos_infos
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   567
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   568
            for (index, subindex), entry_declaration in slave_variables.iteritems():
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   569
                if not entry_declaration["mapped"]:
2425
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   570
                    message = _("Entry index 0x{a1:.4x}, subindex 0x{a2:.2x} not mapped for device {a3}").\
68e7da937162 Fix 'msgid' format string with unnamed arguments cannot be properly localized
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2407
diff changeset
   571
                              format(a1=index, a2=subindex, a3=type_infos["device_type"])
2144
bbd78ac226d0 Added error message when a device informations can't be found in ESI files
Laurent Bessard
parents: 2140
diff changeset
   572
                    self.Controler.GetCTRoot().logger.write_warning(_("Warning: ") + message + "\n")
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   573
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   574
        for element in ["used_pdo_entry_offset_variables_declaration",
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   575
                        "used_pdo_entry_configuration",
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   576
                        "located_variables_declaration",
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   577
                        "retrieve_variables",
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   578
                        "publish_variables"]:
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   579
            str_completion[element] = "\n".join(str_completion[element])
2355
fec77f2b9e07 cleanup etherlab: pep8, W291 trailing whitespace
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2165
diff changeset
   580
2111
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   581
        etherlabfile = open(filepath, 'w')
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   582
        etherlabfile.write(plc_etherlab_code % str_completion)
f2cffda17d00 Split etherlab.py into multiple files
Laurent Bessard
parents:
diff changeset
   583
        etherlabfile.close()