Exemple #1
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);
            }
        }
Exemple #2
0
        private DTInterfaceContent ModifyForRestApi(DTInterfaceContent src)
        {
            DTInterfaceContent dst = new DTInterfaceContent();

            dst.Id = src.Id;

            if (src.Type != null)
            {
                dst.Type = new StringList {
                    OutputArray = true
                };
                dst.Type.AddRange(src.Type);
            }

            //if (src.Context != null) {
            //	dst.Context = new StringList { OutputArray = true };
            //	dst.Context.AddRange(src.Context);
            //}

            dst.Name = src.Name;

            if (src.Description != null)
            {
                dst.Description = new DTLocalizable {
                    OutputString = true
                };
                foreach (var kvp in src.Description)
                {
                    dst.Description.Add(kvp.Key, kvp.Value);
                }
            }

            if (src.DisplayName != null)
            {
                dst.DisplayName = new DTLocalizable {
                    OutputString = true
                };
                foreach (var kvp in src.DisplayName)
                {
                    dst.DisplayName.Add(kvp.Key, kvp.Value);
                }
            }

            dst.CommandType = src.CommandType;

            if (src.Schema != null)
            {
                dst.Schema = ModifyForRestApi(src.Schema);
            }

            dst.Writable = src.Writable;

            dst.Durable = src.Durable;

            if (src.Request != null)
            {
                dst.Request = ModifyForRestApi(src.Request);
            }

            if (src.Response != null)
            {
                dst.Response = ModifyForRestApi(src.Response);
            }

            dst.Unit = src.Unit;

            return(dst);
        }