2024-11-26 13:45:28 +08:00

62 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Models
{
public class ApplicationControlWord
{
// 定义各标志位的位置
private const int FIR_MASK = 0x80; // 1000 0000
private const int FIN_MASK = 0x40; // 0100 0000
private const int CON_MASK = 0x20; // 0010 0000
private const int SEQUENCE_MASK = 0x1F; // 0001 1111 (5 bits for SEQUENCE)
// FIR: 第一个分段
public bool FIR { get; set; }
// FIN: 最后一个分段
public bool FIN { get; set; }
// CON: 需要确认
public bool CON { get; set; }
// SEQUENCE: 序号 (0-31)
public int SEQUENCE { get; set; }
// 构造函数
public ApplicationControlWord(bool fir, bool fin, bool con, int sequence)
{
FIR = fir;
FIN = fin;
CON = con;
SEQUENCE = sequence & SEQUENCE_MASK; // 确保序号在 0-31 范围内
}
// 转换为字节(应用控制字)
public byte ToByte()
{
byte controlByte = 0;
if (FIR) controlByte |= (byte)FIR_MASK; // 设置 FIR 位
if (FIN) controlByte |= (byte)FIN_MASK; // 设置 FIN 位
if (CON) controlByte |= (byte)CON_MASK; // 设置 CON 位
controlByte |= (byte)(SEQUENCE & SEQUENCE_MASK); // 设置 SEQUENCE 位
return controlByte;
}
// 从字节解析出各个字段
public static ApplicationControlWord FromByte(byte controlByte)
{
bool fir = (controlByte & FIR_MASK) != 0;
bool fin = (controlByte & FIN_MASK) != 0;
bool con = (controlByte & CON_MASK) != 0;
int sequence = controlByte & SEQUENCE_MASK; // 提取 SEQUENCE 位
return new ApplicationControlWord(fir, fin, con, sequence);
}
}
}