Esempio n. 1
0
        public static DTInterface MakeInterface(ELDevice device)
        {
            var dtifs      = new List <DTInterfaceContent>();
            var deviceName = DTLocalizableConverter.MakeDigitalTwinId(device.En);

            foreach (var property in device.Properties)
            {
                MakeDTInterface(dtifs, 0, deviceName, GetAccessValue(property),
                                property.Ja, property.En, property.Data);

                if (property.OneOf != null)
                {
                    foreach (var one in property.OneOf)
                    {
                        MakeDTInterface(dtifs, 0, deviceName, GetAccessValue(one),
                                        one.Ja, one.En, one.Data);
                    }
                }
            }

            return(new DTInterface {
                Id = $"dtmi:EchonetLite:{deviceName};1",
                Type = "Interface",
                Context = "dtmi:dtdl:context;2",
                DisplayName = new DTLocalizable {
                    { "en", device.En },
                    { "ja", device.Ja },
                },
                Contents = dtifs
            });
        }
Esempio n. 2
0
        public static void WalkProperties(List <DTInterfaceContent> dtifs, ELDevice device)
        {
            var deviceName = DTLocalizableConverter.MakeDigitalTwinId(device.En);

            if (device.Properties != null)
            {
                foreach (var property in device.Properties)
                {
                    MakeDTInterface(dtifs, 0, deviceName, GetAccessValue(property),
                                    property.Ja, property.En, property.Data);

                    if (property.OneOf != null)
                    {
                        foreach (var one in property.OneOf)
                        {
                            MakeDTInterface(dtifs, 0, deviceName, GetAccessValue(one),
                                            one.Ja, one.En, one.Data);
                        }
                    }
                }
            }
        }
Esempio n. 3
0
        static DTCommandPayload make_command_payload(string propertyNameJa, string propertyNameEn, ELDefinition dataInfo, bool request)
        {
            var command = new DTCommandPayload();

            var name = DTLocalizableConverter.MakeDigitalTwinId(propertyNameEn);

            var temp = $"dtmi:EchonetLite:{name}:{(request ? "Request" : "Response")};1";

            command.Id = temp;

            command.Name = name;

            var schema = make_schema(dataInfo);

            command.Schema = schema;

            command.DisplayName = new DTLocalizable {
                { "en", propertyNameEn },
                { "ja", propertyNameJa }
            };

            return(command);
        }
Esempio n. 4
0
        public static void MakeDTInterface(List <DTInterfaceContent> dtifs, int index,
                                           string deviceName, uint accessValue,
                                           string propertyNameJa, string propertyNameEn, ELDefinition dataInfo)
        {
            DTInterfaceType if_type;
            bool            writable = false;

            if (accessValue == 0)
            {
                return;
            }
            else if (accessValue == GetAccessValue(ELAccessRule.NA, ELAccessRule.Optional, ELAccessRule.NA))
            {
                // GETなし
                if_type = DTInterfaceType.Command;
            }
            else if (accessValue == GetAccessValue(ELAccessRule.NA, ELAccessRule.Required, ELAccessRule.Optional))
            {
                // GETなし
                if_type = DTInterfaceType.Command;
            }
            else if ((accessValue == GetAccessValue(ELAccessRule.Optional, ELAccessRule.NA, ELAccessRule.Required)) ||
                     (accessValue == GetAccessValue(ELAccessRule.Required, ELAccessRule.NA, ELAccessRule.Required)) ||
                     (accessValue == GetAccessValue(ELAccessRule.ByCase, ELAccessRule.NA, ELAccessRule.Required)))
            {
                // SETなし
                if_type = DTInterfaceType.Telemetry;
            }
            else if ((accessValue == GetAccessValue(ELAccessRule.Optional, ELAccessRule.NA, ELAccessRule.Optional)) ||
                     (accessValue == GetAccessValue(ELAccessRule.Required, ELAccessRule.NA, ELAccessRule.Optional)) ||
                     (accessValue == GetAccessValue(ELAccessRule.ByCase, ELAccessRule.NA, ELAccessRule.Optional)))
            {
                // SETなし
                if_type = (dataInfo.Type == ELDataType.State) ? DTInterfaceType.Telemetry : DTInterfaceType.Property;
            }
            else if (accessValue == GetAccessValue(ELAccessRule.Required, ELAccessRule.Required, ELAccessRule.NA))
            {
                // GET/SET
                if_type  = DTInterfaceType.Property;
                writable = true;
            }
            else if ((accessValue == GetAccessValue(ELAccessRule.Optional, ELAccessRule.Optional, ELAccessRule.Required)) ||
                     (accessValue == GetAccessValue(ELAccessRule.Required, ELAccessRule.Optional, ELAccessRule.Required)) ||
                     (accessValue == GetAccessValue(ELAccessRule.Required, ELAccessRule.Required, ELAccessRule.Required)) ||
                     (accessValue == GetAccessValue(ELAccessRule.ByCase, ELAccessRule.ByCase, ELAccessRule.Required)))
            {
                // GET/SET
                if_type  = DTInterfaceType.Property;
                writable = true;
            }
            else if (accessValue == GetAccessValue(ELAccessRule.Optional, ELAccessRule.Optional, ELAccessRule.Optional))
            {
                // GET/SET
                if_type  = DTInterfaceType.Property;
                writable = true;
            }
            else if ((accessValue == GetAccessValue(ELAccessRule.Required, ELAccessRule.Optional, ELAccessRule.Optional)) ||
                     (accessValue == GetAccessValue(ELAccessRule.ByCase, ELAccessRule.Optional, ELAccessRule.Optional)))
            {
                // GET/SET
                if_type  = DTInterfaceType.Property;
                writable = true;
            }
            else if ((accessValue == GetAccessValue(ELAccessRule.Required, ELAccessRule.Required, ELAccessRule.Optional)) ||
                     (accessValue == GetAccessValue(ELAccessRule.ByCase, ELAccessRule.ByCase, ELAccessRule.Optional)))
            {
                // GET/SET
                if_type  = DTInterfaceType.Property;
                writable = true;
            }
            else
            {
                if_type = DTInterfaceType.None;
                System.Diagnostics.Debugger.Break();
            }

            if ((if_type == DTInterfaceType.Command) && (dataInfo.Type == ELDataType.State))
            {
                foreach (var edt in dataInfo.EdtInfos)
                {
                    DTInterfaceContent command = new DTInterfaceContent();

                    string name;
                    if (edt.StateEn != null)
                    {
                        name = DTLocalizableConverter.MakeDigitalTwinId(edt.StateEn);
                    }
                    else
                    {
                        name = $"edt{edt.Edt:2X}";
                    }

                    command.Type        = "Command";
                    command.Name        = name;
                    command.DisplayName = new DTLocalizable {
                        { "en", edt.StateEn },
                        { "ja", edt.StateJa }
                    };

                    command.CommandType = "synchronous";

                    dtifs.Add(command);
                }
            }
            else
            {
                DTInterfaceContent ifcnt = new DTInterfaceContent();

                var name = DTLocalizableConverter.MakeDigitalTwinId(propertyNameEn);

                if (index == 0)
                {
                    if (String.IsNullOrEmpty(deviceName))
                    {
                        ifcnt.Id = $"dtmi:EchonetLite:{name};1";
                    }
                    else
                    {
                        ifcnt.Id = $"dtmi:EchonetLite:{deviceName}:{name};1";
                    }
                }
                else
                {
                    if (String.IsNullOrEmpty(deviceName))
                    {
                        ifcnt.Id = $"dtmi:EchonetLite:{name}{index + 1};1";
                    }
                    else
                    {
                        ifcnt.Id = $"dtmi:EchonetLite:{deviceName}:{name}{index + 1};1";
                    }
                }

                switch (if_type)
                {
                case DTInterfaceType.Command:
                    ifcnt.Type = "Command";
                    break;

                case DTInterfaceType.Telemetry:
                    ifcnt.Type = "Telemetry";
                    break;

                case DTInterfaceType.Property:
                    ifcnt.Type = "Property";
                    break;

                default:
                    System.Diagnostics.Debugger.Break();
                    return;
                }

                ifcnt.Name = name;

                switch (if_type)
                {
                case DTInterfaceType.Telemetry:
                case DTInterfaceType.Property:
                    DTSchema request = make_schema(dataInfo);
                    ifcnt.Schema = request;
                    break;
                }

                ifcnt.DisplayName = new DTLocalizable {
                    { "en", propertyNameEn },
                    { "ja", propertyNameJa }
                };

                switch (if_type)
                {
                case DTInterfaceType.Command: {
                    ifcnt.CommandType = "synchronous";
                    var request = make_command_payload(propertyNameJa, propertyNameEn, dataInfo, true);
                    ifcnt.Request = request;
                    var response = make_command_payload(propertyNameJa, propertyNameEn, dataInfo, false);
                    ifcnt.Response = response;
                    break;
                }

                case DTInterfaceType.Telemetry:
                    break;

                case DTInterfaceType.Property:
                    ifcnt.Writable = writable;
                    break;

                default:
                    System.Diagnostics.Debugger.Break();
                    return;
                }

                dtifs.Add(ifcnt);
            }
        }
Esempio n. 5
0
        static DTSchema make_schema(ELDefinition dataInfo)
        {
            var schema = new DTSchema();

            switch (dataInfo.Type)
            {
            case ELDataType.None:
                if (dataInfo.Reference != null)
                {
                    return(make_schema(dataInfo.Reference));
                }
                break;

            case ELDataType.State: {
                schema.Type        = "Enum";
                schema.ValueSchema = "integer";

                schema.EnumValues = new List <DTEnumValue>();

                foreach (var edt in dataInfo.EdtInfos)
                {
                    var enumValue = new DTEnumValue();
                    schema.EnumValues.Add(enumValue);

                    string name;
                    if (edt.StateEn != null)
                    {
                        name = DTLocalizableConverter.MakeDigitalTwinId(edt.StateEn);
                    }
                    else
                    {
                        name = $"edt{edt.Edt:x}";
                    }
                    enumValue.Name = name;

                    enumValue.EnumValue = edt.Edt;

                    enumValue.DisplayName = new DTLocalizable {
                        { "en", edt.StateEn },
                        { "ja", edt.StateJa }
                    };
                }
                break;
            }

            case ELDataType.Object: {
                schema.Type   = "Object";
                schema.Fields = new List <DTField>();

                foreach (var dataInfo2 in dataInfo.DataInfos)
                {
                    var field = new DTField();
                    schema.Fields.Add(field);

                    field.Name = dataInfo2.Name;
                    var schema2 = make_schema(dataInfo2);
                    field.Schema = schema2;
                }
                break;
            }

            case ELDataType.DateTime: {
                schema.Type = "dateTime";
                break;
            }

            case ELDataType.Time: {
                schema.Type = "time";
                break;
            }

            case ELDataType.Raw: {
                schema.Type = "string";
                break;
            }

            case ELDataType.Array: {
                schema.Type = "Array";
                break;
            }

            case ELDataType.Bitmap: {
                schema.Type   = "Object";
                schema.Fields = new List <DTField>();

                foreach (var bitmapInfo in dataInfo.BitmapInfos)
                {
                    var field = new DTField();
                    schema.Fields.Add(field);

                    field.Name = bitmapInfo.Name;
                    var schema2 = make_schema(bitmapInfo.Value);
                    field.Schema = schema2;
                }
                break;
            }

            case ELDataType.Level: {
                schema.Type = "integer";
                break;
            }

            case ELDataType.Number: {
                switch (dataInfo.NumFormat)
                {
                case ELNumberFormat.Int8:
                case ELNumberFormat.Int16:
                case ELNumberFormat.Int32:
                case ELNumberFormat.Uint8:
                case ELNumberFormat.Uint16:
                    schema.Type = "integer";
                    break;

                case ELNumberFormat.Uint32:
                    schema.Type = "long";
                    break;

                default:
                    schema = null;
                    System.Diagnostics.Debugger.Break();
                    break;
                }
                break;
            }

            case ELDataType.NumericValue: {
                schema.Type = "integer";
                break;
            }

            case ELDataType.OneOf: {
                schema.Type   = "Object";
                schema.Fields = new List <DTField>();

                foreach (var dataInfo2 in dataInfo.DataInfos)
                {
                    DTField field = new DTField();
                    schema.Fields.Add(field);

                    field.Name = dataInfo2.Name;
                    var schema2 = make_schema(dataInfo2);
                    field.Schema = schema2;
                }
                break;
            }

            default:
                schema = null;
                System.Diagnostics.Debugger.Break();
                break;
            }

            return(schema);
        }