Пример #1
0
        private static EDATA1 EDATA1FromBytes(BinaryReader br)
        {
            var edata = new EDATA1
            {
                SEOJ = new EOJ()
                {
                    ClassGroupCode = br.ReadByte(),
                    ClassCode      = br.ReadByte(),
                    InstanceCode   = br.ReadByte()
                },
                DEOJ = new EOJ()
                {
                    ClassGroupCode = br.ReadByte(),
                    ClassCode      = br.ReadByte(),
                    InstanceCode   = br.ReadByte()
                },
                ESV = (ESV)br.ReadByte()
            };

            if (edata.ESV == ESV.SetGet ||
                edata.ESV == ESV.SetGet_Res ||
                edata.ESV == ESV.SetGet_SNA)
            {
                //4.2.3.4 プロパティ値書き込み読み出しサービス[0x6E,0x7E,0x5E]
                // OPCSet 処理プロパティ数(1B)
                var opcSet = br.ReadByte();
                edata.OPCSetList = new List <PropertyRequest>();
                for (int i = 0; i < opcSet; i++)
                {
                    var prp = new PropertyRequest
                    {
                        // ECHONET Liteプロパティ(1B)
                        EPC = br.ReadByte(),
                        // EDTのバイト数(1B)
                        PDC = br.ReadByte()
                    };
                    if (prp.PDC != 0)
                    {
                        // プロパティ値データ(PDCで指定)
                        prp.EDT = br.ReadBytes(prp.PDC);
                    }
                    edata.OPCSetList.Add(prp);
                }
                // OPCGet 処理プロパティ数(1B)
                var opcGet = br.ReadByte();
                edata.OPCGetList = new List <PropertyRequest>();
                for (int i = 0; i < opcSet; i++)
                {
                    var prp = new PropertyRequest
                    {
                        // ECHONET Liteプロパティ(1B)
                        EPC = br.ReadByte(),
                        // EDTのバイト数(1B)
                        PDC = br.ReadByte()
                    };
                    if (prp.PDC != 0)
                    {
                        // プロパティ値データ(PDCで指定)
                        prp.EDT = br.ReadBytes(prp.PDC);
                    }
                    edata.OPCGetList.Add(prp);
                }
            }
            else
            {
                // OPC 処理プロパティ数(1B)
                var opc = br.ReadByte();
                edata.OPCList = new List <PropertyRequest>();
                for (int i = 0; i < opc; i++)
                {
                    var prp = new PropertyRequest
                    {
                        // ECHONET Liteプロパティ(1B)
                        EPC = br.ReadByte(),
                        // EDTのバイト数(1B)
                        PDC = br.ReadByte()
                    };
                    if (prp.PDC != 0)
                    {
                        // プロパティ値データ(PDCで指定)
                        prp.EDT = br.ReadBytes(prp.PDC);
                    }
                    edata.OPCList.Add(prp);
                }
            }
            return(edata);
        }
Пример #2
0
        public static byte[] EDATA1ToBytes(EDATA1 edata)
        {
            using (var ms = new MemoryStream())
                using (var bw = new BinaryWriter(ms))
                {
                    bw.Write(edata.SEOJ.ClassGroupCode);
                    bw.Write(edata.SEOJ.ClassCode);
                    bw.Write(edata.SEOJ.InstanceCode);
                    bw.Write(edata.DEOJ.ClassGroupCode);
                    bw.Write(edata.DEOJ.ClassCode);
                    bw.Write(edata.DEOJ.InstanceCode);
                    bw.Write((byte)edata.ESV);

                    if (edata.ESV == ESV.SetGet ||
                        edata.ESV == ESV.SetGet_Res ||
                        edata.ESV == ESV.SetGet_SNA)
                    {
                        //4.2.3.4 プロパティ値書き込み読み出しサービス[0x6E,0x7E,0x5E]
                        // OPCSet 処理プロパティ数(1B)
                        bw.Write((byte)edata.OPCSetList.Count);
                        foreach (var prp in edata.OPCSetList)
                        {
                            // ECHONET Liteプロパティ(1B)
                            bw.Write(prp.EPC);
                            // EDTのバイト数(1B)
                            bw.Write(prp.PDC);
                            if (prp.PDC != 0)
                            {
                                // プロパティ値データ(PDCで指定)
                                bw.Write(prp.EDT);
                            }
                        }
                        // OPCGet 処理プロパティ数(1B)
                        bw.Write((byte)edata.OPCGetList.Count);
                        foreach (var prp in edata.OPCGetList)
                        {
                            // ECHONET Liteプロパティ(1B)
                            bw.Write(prp.EPC);
                            // EDTのバイト数(1B)
                            bw.Write(prp.PDC);
                            if (prp.PDC != 0)
                            {
                                // プロパティ値データ(PDCで指定)
                                ms.Write(prp.EDT);
                            }
                        }
                    }
                    else
                    {
                        // OPC 処理プロパティ数(1B)
                        bw.Write((byte)edata.OPCList.Count);
                        foreach (var prp in edata.OPCList)
                        {
                            // ECHONET Liteプロパティ(1B)
                            bw.Write(prp.EPC);
                            // EDTのバイト数(1B)
                            bw.Write(prp.PDC);
                            if (prp.PDC != 0)
                            {
                                // プロパティ値データ(PDCで指定)
                                bw.Write(prp.EDT);
                            }
                        }
                    }
                    return(ms.ToArray());
                }
        }