12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using Core.Communication.Transport;
- using Core.Util.Extension;
- using PLC.Siemens.Protocol.Common;
- namespace PLC.Siemens.Protocol.Security
- {
- public class DataSecurityRequest
- {
- public byte Ret; // 0xFF for request
- public byte Ts; // 0x09 Transport size
- public ushort DLen; // Data len : 8 bytes
- public char[] Pwd; // Password encoded into "AG" format 8
- public ushort PacketLength { get{return 0x0C; } }
- public void Build(params char[] value)
- {
- if (value.IsNotEmpty())
- {
- Ts = (byte)TsType.TsResOctet;
- Ret = 0xFF;
- Pwd = value;
- DLen = 0x0008;
- }
- else
- {
- Ts = 0x00;
- Ret = 0x0A;
- DLen = 0x0000;
- }
-
- }
- public void GetByteBuffer(ByteBuffer buffer)
- {
- buffer.Push(Ret);
- buffer.Push(Ts);
- buffer.Push(DLen);
- if (DLen == 0) return;
- Pwd[0] = (char) (Pwd[0] ^ 0x55);
- Pwd[1] = (char) (Pwd[1] ^ 0x55);
- for (var i = 2; i < 8; i++)
- {
- Pwd[i] = (char) (Pwd[i] ^ 0x55 ^ Pwd[i - 2]);
- }
- ;
- Pwd.ForEach(t => buffer.Push((byte) t));
- }
- }
- }
|