#include "zigateplugin.h"
#include "serial.h"
#include "interface.h"
#include <QByteArray>

extern ZigatePlugin zigatePlugin;
extern SerialManager serialManager;

//extern QHash <QString, ResponseProperties *> responseListIndex;

using namespace std;
extern QHash <QString, ResponseProperties*> responseListIndex;

bool ZigatePlugin::initPlugin()
{
    bool returnCode = false;
    ResponseProperties * temp;
    QHash<QString, ResponseProperties*>::iterator i;

    for (i = responseListIndex.begin(); i != responseListIndex.end(); ++i)
    // init lists
    //for(i=0;i=responseListIndex.count;i++)
    {
        temp = new ResponseProperties();
        temp->manager = defaultManager;
        i.value() = temp;
    }

    temp = responseListIndex["004D"];
    temp->code = QByteArray::fromHex("004D");
    temp->description = "Device announce";
    temp->properties =
    {
        // {rang, {designation, nbyte, isvalue}}
        // isvalue = 0 => display value
        //         = 1 => is array of bits
        //         = 2 => is index of string in list
        //         = 3 => launch a subroutine pointed by propertyManagerList
        //         = 4 => is a list of objects
        {0, {"Short address", 2, 0}},              // uint16_t
        {1, {"IEEE address", 4, 0}},               // uint64_t
        {2, {"MAC capability", 1, 3}}
    };
    temp->propertyManagerList[2] = &macCapabilityManager;
    temp->manager = &defaultManager;
    temp->propertyDetail[2] =
    {
        {1, "Alternate PAN Coordinator"},
        {2, "Device Type"},
        {4, "Power source"},
        {8, "Receiver On when Idle"},
        {64, "Security capability"},
        {128, "Allocate Address"}
    };
    // *****************************************************************************
    //   MAC capability
    //    Bit 0 - Alternate PAN Coordinator
    //    Bit 1 - Device Type
    //    Bit 2 - Power source
    //    Bit 3 - Receiver On when Idle
    //    Bit 4,5 - Reserved
    //    Bit 6 - Security capability
    //    Bit 7 - Allocate Address
    // ******************************************************************************

    temp = responseListIndex["8000"];
    temp->code = QByteArray::fromHex("8000");
    temp->description = "Status returned by command";
    temp->properties =
    {
        {0, {"Status", 1, 2}},                                  // <uint8_t>
        {1, {"Sequence number", 1, 0}},                         // <uint8_t>
        {2, {"Packet Type", 2, 0}},                             // <uint16_t>
        {3, {"Optional additional error information", -1, 5}}    // <string>
    };
    temp->manager = &defaultManager;
    temp->propertyDetail[0] =
    {
        {0, "Success"},
        {1, "Incorrect parameters"},
        {2, "Unhandled command"},
        {3, "Command failed"},
        {4, "Busy (Node is carrying out a lengthy operation and is currently unable to handle the incoming command)"},
        {5, "Stack already started (no new configuration accepted)"},
        {-1, "Failed"}
    };
    // *****************************************************************************
    //    //   Status :
    //    //   0 = Success
    //    //   1 = Incorrect parameters
    //    //   2 = Unhandled command
    //    //   3 = Command failed
    //    //   4 = Busy (Node is carrying out a lengthy operation and is currently unable to handle the incoming command)
    //    //   5 = Stack already started (no new configuration accepted)
    //    //   128 – 244 = Failed (ZigBee event codes)
    //    //   Packet Type: The value of the initiating command request.
    //    ******************************************************************************

    temp = responseListIndex["8001"];
    temp->code = QByteArray::fromHex("8001");
    temp->description = "Log message";
    temp->properties =
    {
        {0, {"Log level", 1, 2}},                         // uint8_t
        {1, {"Log message", -1, 5}}                         // string
    };
    temp->manager = &defaultManager;
    temp->propertyDetail[0] =
    {
        {0, "Emergency"},
        {1, "Alert"},
        {2, "Critical"},
        {3, "Error"},
        {4, "Warning"},
        {5, "Notice"},
        {6, "Information"},
        {7, "Debug"}
    };
    // *********************************************************************************
    //  0 = Emergency
    //  1 = Alert
    //  2 = Critical
    //  3 = Error
    //  4 = Warning
    //  5 = Notice
    //  6 = Information
    //  7 = Debug
    // *********************************************************************************
    temp = responseListIndex["8002"];
    temp->code = QByteArray::fromHex("8002");
    temp->description = "Data indication";
    temp->properties =
    {
        {0, {"status", 1, 1}},                        // uint8_t
        {1, {"Profile ID", 2, 0}},                   // uint16_t
        {2, {"Cluster ID", 2, 0}},                   // uint16_t
        {3, {"Source endpoint", 1, 0}},               // uint8_t
        {4, {"Destination endpoint", 1, 0}},          // uint8_t
        {5, {"Source address mode", 1, 0}},           // uint8_t TODO
        {6, {"Source address", 2, 0}},                // uint16_t or uint64_t
        {7, {"Destination address mode", 0, 0}},      // uint8_t       TODO
        {8, {"Destination address", 2, 0}},           // uint16_t or uint64_t
        {9, {"Payload size", 1, 0}},                  // uint8_t
        {10, {"Payload", -1, 0}}                      // data each element is uint8_t
    };
    temp->manager = &defaultManager;  //dataIndicationManager

    temp = responseListIndex["8003"];
    temp->code = QByteArray::fromHex("8003");
    temp->description = "list of object's clusters";
    temp->properties =
    {
        {0, {"Source endpoint", 1, 0}},               // uint8_t
        {1, {"Profile ID", 2, 0}},                    // uint16_t
        {2, {"Cluster list", 0, 0}},                   // data each entry is uint16_t
        {3, {"Source endpoint", 1, 0}},               // uint8_t
        {4, {"Profile ID", 2, 0}},                   // uint16_t
        {5, {"Cluster ID", 2, 0}},                   // uint16_t
        {6, {"Attribute list", 2, 0}}                 // data each entry is uint16_t
    };
    temp->manager = &clustersListManager;

    temp = responseListIndex["8004"];
    temp->code = QByteArray::fromHex("8004");
    temp->description = "list of object's attributes";
    temp->properties =
    {
        {0, {"Source endpoint", 1, 0}},               // uint8_t
        {1, {"Profile ID", 2, 0}},                   // uint16_t
        {2, {"Cluster ID", 2, 0}},                   // uint16_t
        {3, {"Attribute list", 2, 0}}                // data each entry is uint16_t>
    };
    temp->manager = &defaultManager;        //TODO

    temp = responseListIndex["8005"];
    temp->code = QByteArray::fromHex("8005");
    temp->description = "List of object's commands";
    temp->properties =
    {
        {0, {"Source endpoint", 1, 0}},               // uint8_t
        {1, {"Profile ID", 1, 0}},                    // uint16_t
        {2, {"Cluster ID", 1, 0}},                   // uint16_t
        {3, {"Command ID list", -1, 0}}                 // data each entry is uint8_t
    };
    temp->manager = &defaultManager;        //TODO

    temp = responseListIndex["8006"];
    temp->code = QByteArray::fromHex("8006");
    temp->description = "Status after restart";
    temp->properties =
    {
        {0, {"Status after restart: ", 1, 2}}
    };
    temp->manager = &defaultManager;
    temp->propertyDetail[0] =
    {
        {0, "Startup"},
        {1, "NFN_START"},
        {2, "RUNNING"},
    };
    // *****************************************************************************
    //    0 - STARTUP
    //    2 - NFN_START
    //    6 - RUNNING
    //    The node is provisioned from previous restart.
    // *****************************************************************************

    temp = responseListIndex["8007"];
    temp->code = QByteArray::fromHex("8007");
    temp->description = "Status after start";
    temp->properties =
    {
        {0, {"Status after start: ", 1, 2}}
    };
    temp->manager = &defaultManager;
    temp->propertyDetail[0] =
    {
        {0, "Startup"},
        {1, "NFN_START"},
        {2, "RUNNING"},
    };
    temp = responseListIndex["8008"];
    temp->code = QByteArray::fromHex("8008");
    temp->description = "HeartBeat";
    temp->properties =
    {
        {0, {"UTC time :", 4, 0}}
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8009"];
    temp->code = QByteArray::fromHex("8009");
    temp->description = "Network state";
    temp->properties =
    {
        {0, {"Short Address: ", 2, 0}},
        {1, {"Extended Address: ", 8, 0}},
        {2, {"PAN ID: ", 2, 0}},
        {3, {"Extended PAN ID: ", 8, 0}},
        {4, {"Channel: ", 8, 0}}
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8010"];
    temp->code = QByteArray::fromHex("8010");
    temp->description = "Version List";
    temp->properties =
    {
        {0, {"Major version number", 2, 0}},         // uint16_t
        {1, {"Installer version number", 2, 0}}      // uint16_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8011"];
    temp->code = QByteArray::fromHex("8011");
    temp->description = "Ack Data";
    temp->properties =
    {
        {0, {"Status: ", 1, 0}},
        {1, {"Destination address: ", 2, 0}},
        {2, {"Destination endpoint: ", 1, 0}},
        {3, {"Cluster ID :", 2, 0}}
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8012"];
    temp->code = QByteArray::fromHex("8012");
    temp->description = "DATA_CONFIRM";
    temp->properties =
    {
        {0, {"Status: ", 1, 0}},
        {1, {"Source Endpoint: ", 1, 0}},
        {2, {"Destination endpoint: ", 1, 0}},
        {3, {"Destination Address mode:", 1, 0}},
        {4, {"Destination IEEE address: ", 8, 0}},
        {5, {"APS Sequence number: ", 1, 0}}
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8014"];
    temp->code = QByteArray::fromHex("8014");
    temp->description = "Permit join status response";
    temp->properties =
    {
        {0, {"Status", 1, 2}}                         // bool_t
    };
    temp->manager = &defaultManager;
    temp->propertyDetail[0] =
    {
        {0, "Off"},
        {1, "On"}
    };

    temp = responseListIndex["8015"];
    temp->code = QByteArray::fromHex("8015");
    temp->description = "Device list";
    temp->properties =
    {
        {0, {"Device List", 1, 4}}                         // bool_t
    };
    temp->manager = &deviceListManager;

    temp = responseListIndex["8017"];
    temp->code = QByteArray::fromHex("8017");
    temp->description = "Time server";
    temp->properties =
    {
        {0, {"UTC Time: ", 1, 0}}  // <Timestamp UTC: uint32_t> from 2000-01-01 00:00:00
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8024"];
    temp->code = QByteArray::fromHex("8024");
    temp->description = "Network joined/formed";
    temp->properties =
    {
        {0, {"Status", 1, 2}},                        // uint8_t
        {1, {"Short address", 2, 0}},                // uint16_t
        {2, {"Extended address", 4, 0}},             // uint64_t
        {3, {"Channel", 1, 0}}                       // uint8_t
    };
    temp->manager = &defaultManager;
    temp->propertyDetail[0] =
        {
            {0, "Joined"},
            {1, "Formed new network"},
            {-1, "Failed"}
    };

    temp = responseListIndex["8028"];
    temp->code = QByteArray::fromHex("8028");
    temp->description = "Authenticate response";
    temp->properties =
    {
        {0, {"IEEE address of the Gateway: ", 8, 0}},
        {1, {"Encrypted Key: ", 16, 0}},
        {2, {"MIC: ", 4,  0}},
        {3, {"IEEE address of the initiating node: ", 8, 0}},
        {4, {"Active Key Sequence number: ", 1, 0}},
        {5, {"Channel: ", 1, 0}},
        {6, {"Short PAN Id: ", 2, 0}},
        {7, {"Extended PAN ID: ", 8, 0}},
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["802B"];
    temp->code = QByteArray::fromHex("802B");
    temp->description = "User Descriptor Notify";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                       // uin8_t
        {1, {"Status", 1, 0}},                                // uint8_t
        {2, {"Network address of interest", 2, 0}}         // uint16_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["802C"];
    temp->code = QByteArray::fromHex("802C");
    temp->description = "User Descriptor Response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                       // uin8_t
        {1, {"Status", 1, 0}},                                // uint8_t
        {2, {"Network address of interest", 2, 0}},          // uint16_6
        {3, {"Length", 1, 0}},                                // uint8_t
        {4, {"Data", -1, 0}}                                   // uint8_t stream
    };
    temp->manager = &defaultManager;

   temp = responseListIndex["8030"];
    temp->code = QByteArray::fromHex("8030");
    temp->description = "Bind response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},             // uint8_t
        {1, {"Status", 1, 0}},                          // uint8_t
        {2, {"Source address mode: ", 1, 0}},       // uint8_t> (only from v3.1a)
        {3, {"Source Address: ", 2, 0}}             // uint16_t> (only from v3.1a)
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8031"];
    temp->code = QByteArray::fromHex("8031");
    temp->description = "Unbind response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                // uint8_t
        {1, {"Status", 1, 0}},                         // uint8_t
        {2, {"Source address mode: ", 1, 0}},       // uint8_t (only from v3.1a)
        {3, {"Source Address: ", 2, 0}}             // uint16_t (only from v3.1a)

    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8035"];
    temp->code = QByteArray::fromHex("8035");
    temp->description = "PDM event";
    temp->properties =
    {
        {0, {"Event status: ", 1, 2}},               // uint8_t
        {1, {"record ID: ", 4, 0}}                        // uint8_t
    };
    temp->manager = &defaultManager;
    temp->propertyDetail[0] =
    {
        {0, "E_PDM_SYSTEM_EVENT_WEAR_COUNT_TRIGGER_VALUE_REACHED"},
        {1, "E_PDM_SYSTEM_EVENT_DESCRIPTOR_SAVE_FAILED"},
        {1, "E_PDM_SYSTEM_EVENT_PDM_NOT_ENOUGH_SPACE"},
        {1, "E_PDM_SYSTEM_EVENT_LARGEST_RECORD_FULL_SAVE_NO_LONGER_POSSIBLE"},
        {1, "E_PDM_SYSTEM_EVENT_SEGMENT_DATA_CHECKSUM_FAIL"},
        {1, "E_PDM_SYSTEM_EVENT_SEGMENT_SAVE_OK"},
        {1, "E_PDM_SYSTEM_EVENT_EEPROM_SEGMENT_HEADER_REPAIRED"},
        {1, "E_PDM_SYSTEM_EVENT_SYSTEM_INTERNAL_BUFFER_WEAR_COUNT_SWAP"},
        {1, "E_PDM_SYSTEM_EVENT_SYSTEM_DUPLICATE_FILE_SEGMENT_DETECTED"},
        {1, "E_PDM_SYSTEM_EVENT_SYSTEM_ERROR"},
        {1, "E_PDM_SYSTEM_EVENT_SEGMENT_PREWRITE"},
        {1, "E_PDM_SYSTEM_EVENT_SEGMENT_POSTWRITE"},
        {1, "E_PDM_SYSTEM_EVENT_SEQUENCE_DUPLICATE_DETECTED"},
        {1, "E_PDM_SYSTEM_EVENT_SEQUENCE_VERIFY_FAIL"},
        {1, "E_PDM_SYSTEM_EVENT_PDM_SMART_SAVE"},
        {1, "E_PDM_SYSTEM_EVENT_PDM_FULL_SAVE"}
    };

    temp = responseListIndex["8040"];
    temp->code = QByteArray::fromHex("8040");
    temp->description = "Network Address response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},               // uin8_t
        {1, {"Status", 1, 0}},                        // uint8_t
        {2, {"IEEE address", 4, 0}},                  // uint64_t
        {3, {"Short address", 2, 0}},                // uint16_t
        {4, {"Number of associated devices", 1, 0}},  // uint8_t
        {5, {"Start index", 1, 0}},                   // uint8_t
        {6, {"Device list", -1, 4}}                    // data each entry is uint16_t>
    };
    temp->manager = &networkAddressManager;

    temp = responseListIndex["8041"];
    temp->code = QByteArray::fromHex("8041");
    temp->description = "IEEE Address response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},               // uin8_t
        {1, {"Status", 1, 0}},                        // uint8_t
        {2, {"IEEE address", 4, 0}},               // uint64_t
        {3, {"Short address", 2, 0}},                // uint16_t
        {4, {"Number of associated devices", 1, 0}},  // uint8_t
        {5, {"Start index", 1, 0}},                   // uint8_t
        {6, {"Device list", -1, 4}}                    // data each entry is uint16_t
    };
    temp->manager = &iEEEAddressManager;

    temp = responseListIndex["8042"];
    temp->code = QByteArray::fromHex("8042");
    temp->description = "Node Descriptor response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},               // uint8_t
        {1, {"Network address", 2, 0}},               // uint16_t
        {2, {"Manufacturer code", 2, 0}},            // uint16_t
        {3, {"Max Rx Size", 2, 0}},                  // uint16_t
        {4, {"Max Tx Size", 2, 0}},                  // uint16_t
        {5, {"Server mask", 2, 0}},                  // uint16_t
        {6, {"Descriptor capability", 1, 0}},         // uint8_t
        {7, {"Mac flags", 1, 0}},                     // uint8_t
        {8, {"Max buffer size", 1, 0}},               // uint8_t
        {9, {"Bit fields", 2, -1}}                   // uint16_t
    };
    temp->manager = &nodeDescriptorManager;

    temp = responseListIndex["8043"];
    temp->code = QByteArray::fromHex("8043");
    temp->description = "Simple Descriptor response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                       // uint8_t
        {1, {"Status", 1, 0}},                                // uint8_t
        {2, {"NwkAddress", 2, 0}},                           // uint16_t
        {3, {"Length", 1, 0}},                                // uint8_t
        {4, {"Endpoint", 1, 0}},                              // uint8_t
        {5, {"Profile", 2, 0}},                              // uint16_t
        {6, {"Device id", 2, 0}},                            // uint16_t
        {7, {"Bit fields", 1, 0}},                            // uint8_t
        {8, {"InClusterCount", 1, 0}},                        // uint8_t
        {9, {"In cluster list", 0, 0}},                        // data each entry is uint16_t>
        {10, {"Out Cluster Count", 1, 0}},                      // uint8_t
        {11, {"Out cluster list", -1, 0}}                      // data each entry is uint16_t
    };
    temp->manager = &defaultManager;    //TODO

    temp = responseListIndex["8044"];
    temp->code = QByteArray::fromHex("8044");
    temp->description = "Power Descriptor response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                       // uin8_t
        {1, {"Status", 1, 0}},                                // uint8_t
        {2, {"bit field", 2, 0}}                             // uint16_t
    };
    temp->manager = &defaultManager;
    // ******************************************
    //  0 to 3: current power mode
    //  4 to 7: available power source
    //  8 to 11: current power source
    // 12 to 15: current power source level
    // ******************************************

    temp = responseListIndex["8045"];
    temp->code = QByteArray::fromHex("8045");
    temp->description = "Active Endpoint response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                       // uint8_t
        {1, {"Status", 1, 0}},                                // uint8_t
        {2, {"Address", 2, 0}},                              // uint16_t
        {3, {"Endpoint count", 1, 0}},                        // uint8_t
        {4, {"Active endpoint list", -1, 0}}                   // each data element of the type uint8_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8046"];
    temp->code = QByteArray::fromHex("8046");
    temp->description = "Match Descriptor response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                       // uint8_t
        {1, {"Status", 1, 0}},                                // uint8_t
        {2, {"Network address", 2, 0}},                       // uint16_t
        {3, {"Length of list", 1, 0}},                        // uint8_t
        {4, {"Match list", -1, 0}}                            // data each entry is uint8_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8047"];
    temp->code = QByteArray::fromHex("8047");
    temp->description = "Management Leave response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                       // uint8_t
        {1, {"Status", 1, 0}}                                // uint8_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8048"];
    temp->code = QByteArray::fromHex("8048");
    temp->description = "Leave indication";
    temp->properties =
    {
        {0, {"Extended address", 4, 0}},                   // uint64_t
        {1, {"Rejoin status", 1, 0}}                         // uint8_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8049"];
    temp->code = QByteArray::fromHex("8049");
    temp->description = "PDM child table size";
    temp->properties =
    {
        {0, {"Number of child: ", 1, 0}}                           // data each entry is uint8_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["804A"];
    temp->code = QByteArray::fromHex("804A");
    temp->description = "Management Network Update response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                       // uint8_t
        {1, {"Status", 1, 0}},                                // uint8_t
        {2, {"Total transmission", 2, 0}},                   // uint16_t
        {3, {"Transmission failures", 2, 0}},                // uint16_t
        {4, {"Scanned channels", 4, 0}},                   // uint32_t
        {5, {"Scanned channel list count", 1, 0}},            // uint8_t
        {6, {"Channel list", -1, 0}}                          // list each element is uint8_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["804B"];
    temp->code = QByteArray::fromHex("804B");
    temp->description = "System Server Discovery response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                       // uint8_t
        {1, {"status", 1, 0}},                                // uint8_t
        {2, {"Server mask", 2, 0}}                          // uint16_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["804E"];
    temp->code = QByteArray::fromHex("804E");
    temp->description = "Management LQI response";
    temp->properties =
    {
        {0, {"Sequence number", 1, 0}},                        // uint8_t
        {1, {"status", 1, 0}},                                 // uint8_t
        {2, {"Neighbour Table Entries ", 1, 0}},               // uint8_t
        {3, {"Neighbour Table List Count ", 1, 0}},            // uint8_t
        {4, {"Start Index ", 1, 0}},                           // uint8_t
        {5, {"List of Entries elements described below", -1, 0}}
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8060"];
    temp->code = QByteArray::fromHex("8060");
    temp->description = "Add group";
    temp->properties =
    {
        {0, {"Sequence number: ", 1, 0}},
        {1, {"Endpoint: ", 1, 0}},
        {2, {"Cluster id: ", 2, 0}},
        {3, {"Status: ", 1, 0}},           //(added only from 3.0f version)
        {4, {"Group id :", 2, 0}},         //(added only from 3.0f version)
        {5, {"Source Address: ", 2, 0}},   //(added only from 3.0f version)
        {6, {"Number of child: ", 1, 0}}                           // data each entry is uint8_t
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8061"];
    temp->code = QByteArray::fromHex("8061");
    temp->description = "View group";
    temp->properties =
    {
        {0, {"Sequence number: ", 1, 0}},
        {1, {"Endpoint: ", 1, 0}},
        {2, {"Cluster id: ", 2, 0}},
        {3, {"Status: ", 1, 0}},           //(added only from 3.0f version)
        {4, {"Group id :", 2, 0}},         //(added only from 3.0f version)
        {5, {"Source Address: ", 2, 0}}   //(added only from 3.0f version)
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8062"];
    temp->code = QByteArray::fromHex("8062");
    temp->description = "Group membership";
    temp->properties =
    {
        {0, {"Sequence number: ", 1, 0}},
        {1, {"Endpoint: ", 1, 0}},
        {2, {"Cluster id: ", 2, 0}},
        {3, {"Source Address:", 2, 0}},            //(added only from 3.0d version)
        {4, {"Capacity: ", 1, 0}},
        {5, {"Group count: ", 1, 0}},
        {6, {"List of Group id: ", 2, 0}},         //list each data item uint16_t>
        {7, {"Source Addr: ", 2, 0}}               //(added only from 3.0f version)
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8063"];
    temp->code = QByteArray::fromHex("8063");
    temp->description = "Remove group";
    temp->properties =
    {
        {0, {"Sequence number: ", 1, 0}},
        {1, {"Endpoint: ", 1, 0}},
        {2, {"Cluster id: ", 2, 0}},
        {3, {"Source Address:", 2, 0}},            //(added only from 3.0d version)
        {4, {"Status: ", 1, 0}},
        {5, {"Group ID: ", 2, 0}}
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8085"];
    temp->code = QByteArray::fromHex("8085");
    temp->description = "Level update";
    temp->properties =
    {
        {0, {"Sequence number: ", 1, 0}},
        {1, {"Endpoint: ", 1, 0}},
        {2, {"Cluster id: ", 2, 0}},
        {3, {"Source Address mode:", 1, 0}},            //(added only from 3.0d version)
        {4, {"Source Address:", 2, 0}},            //(added only from 3.0d version)
        {5, {"Status: ", 1, 0}}
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8095"];
    temp->code = QByteArray::fromHex("8095");
    temp->description = "On/Off";
    temp->properties =
    {
        {0, {"Sequence number: ", 1, 0}},
        {1, {"Endpoint: ", 1, 0}},
        {2, {"Cluster id: ", 2, 0}},
        {3, {"Source Address mode:", 1, 0}},            //(added only from 3.0d version)
        {4, {"Source Address:", 2, 0}},            //(added only from 3.0d version)
        {5, {"Status: ", 1, 0}}
    };
    temp->manager = &defaultManager;

    temp = responseListIndex["8140"];
    temp->code = QByteArray::fromHex("8140");
    temp->description = "Attribute Discovery response";
    temp->properties =
    {
        {0, {"Complete", 1, 0}},                                  // uint8_t
        {1, {"Attribute type", 1, 0}},                            // uint8_t
        {2, {"Attribute id", 2, 0}}                             // uint16_t
    };
    temp->manager = &defaultManager;


    qRegisterMetaType<QSerialPort::SerialPortError>("serialManager");
    serialManager.initSerial();
    connect(&serialManager, SIGNAL(readyRead()), &zigatePlugin, SLOT(readDatas()));
    connect(&serialManager, SIGNAL(errorOccurred(QSerialPort::SerialPortError)), &serialManager, SLOT(serialError(QSerialPort::SerialPortError)), Qt::QueuedConnection);

    //sending reset and getting version of zigate
    resetCoordinator();
    getVersion();

    return returnCode;
}

void infoOutput(ResponseProperties *object)
{
    cout << object->code.toHex().toStdString() << " : " <<  object->description.toStdString() << endl;

}

